Skip to content

test(List): the busy release proof starts its block in the page - #10048

Merged
cixzhang merged 2 commits into
meta:mainfrom
vjeux:test-list-row-release-block
Nov 5, 2026
Merged

cixzhang merged 2 commits into
meta:mainfrom
vjeux:test-list-row-release-block

Conversation

@vjeux

@vjeux vjeux commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

Maintainer impact

ListRowPress's "the release keeps fading on every frame while the main thread is blocked" (List row, Item row in a scroller, TreeList row) fails on busy runners: the first judged frame is too close to the last, for example 0.538 against more than 0.585. In Chromium pinned to two cores, main failed the scroller row 3 of 25 times at 1 worker today, and once in a whole-file run at 4 workers.

Intended invariant

component:List FR11 and its verification row: a row's release keeps fading while the main thread is blocked, on the compositor (spec:AST-094 FR5). What the proof asserts is unchanged.

Change

The proof waited for the release from the test, then sent a 700 ms block. The release lasts 125 ms, so the later the block started, the less of the release it covered. In one recorded run the block started 47 ms in and left three frames to judge, and such a drop can stay under the 0.2 the proof asks for. The page now starts the block itself, a frame into the release: blockMainThread with during, armed with the tap, as the harness documents for a short motion. A watch taken before the tap gives the release's timing.

Evidence

One machine and one build, the arms alternated:

  • Failure before the change: with 60 ms more before the block, main failed 9 of 9 across the three rows.
  • Success after the change: 9 of 9 with the same 60 ms, the scroller row 16 of 16 at 1 worker, and the whole file at 4 workers on the pin.
  • A row whose release runs on the main thread still fails: the List and scroller rows 6 of 6, because the page finds no moving release to block in. TreeList rows do not use Item, so that change does not reach them.
  • Product/runtime behavior verified unchanged: the diff is one test file.
  • CI impact: none; no workflow or CI script changes.

Scope

  • No intended public API, product behavior, visual direction, or policy change.
  • Product changes discovered during the work were removed or split.
  • Public text and artifacts contain no internal Meta context.

Testing

# Chromium pinned to two cores
taskset -c 2,3 npx playwright test -c playwright.interaction.config.ts \
  --project=chromium --workers=1 --repeat-each=5 \
  -g "the release keeps fading on every frame while the main thread is blocked" \
  packages/core/src/List/__tests__/ListRowPress.interaction.browser.spec.ts

The arms above, as commits not for landing:

  • the late block on main: d557c49;
  • the same wait on this change: 3fec536;
  • the release on the main thread (Item without rowPressLayerStyles.cell): 1b44761.

The rest of the spec file passes in Chromium on the pin and in WebKit, except two cases main fails too: the held-row curve proof under load (its own pull request) and the WebKit video case (#10011).

The proof that a row's release keeps fading while the main thread is
blocked sent its block from the test once the release ran. On a busy
machine the block started late in the 125 ms release, so two or three
frames were left to judge, and their drop could stay under the 0.2 the
proof asks for. The page now starts the block itself, a frame into the
release (blockMainThread with during, armed with the tap). A watch
taken before the tap gives the release's timing.
@vercel

vercel Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
astryx Ready Ready Preview Nov 5, 2026 7:21am UTC

Request Review

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Nov 5, 2026
@astracat-bot

astracat-bot Bot commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

AI review status for this pull request.

Review status Updated
🟢 Reviewed (for maintainers only) Nov 5, 2026, 7:39 AM UTC

@github-actions

github-actions Bot commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

PR Analysis Report

🔎 Preview · 5fc4baa

Storybook · Sandbox · built from this PR's head

Modified components

Component Size LoC Visual · A11y · RTL
List 5.4 kB (0) · 469 B CSS (0) — ✓ · ✓ · —
ListItem 58.7 kB (0) · 10.7 kB CSS (0) — ✓ · ✓ · ✓

Package size: measured; main has no measurement of the merge base to compare yet.

API changes: cli +8 · ~1 · −0 (against the merge base's committed report)

Committed API report behind this build: cli 9 rows, core 4 rows; run pnpm api:report.

9 API changes (advisory)
Package Where Signature Usage
+ cli ./api · Types · type SearchResultEntry deprecated?: ComponentDeprecation | undefined import type {SearchResultEntry} from '@astryxdesign/cli/api'; const x: SearchResultEntry = {deprecated: …}
+ cli ./authoring · Types · interface ComponentDeprecation interface ComponentDeprecation import type {ComponentDeprecation} from '@astryxdesign/cli/authoring'
+ cli ./authoring · Types · interface MultiComponentDoc deprecated?: ComponentDeprecation import type {MultiComponentDoc} from '@astryxdesign/cli/authoring'; const x: MultiComponentDoc = {deprecated: …}
+ cli ./authoring · Types · interface SingleComponentDoc deprecated?: ComponentDeprecation import type {SingleComponentDoc} from '@astryxdesign/cli/authoring'; const x: SingleComponentDoc = {deprecated: …}
+ cli ./doc · Types · interface ComponentBaseDoc deprecated?: ComponentDeprecation import type {ComponentBaseDoc} from '@astryxdesign/cli/doc'; const x: ComponentBaseDoc = {deprecated: …}
+ cli ./doc · Types · interface SubComponentDoc deprecated?: ComponentDeprecation import type {SubComponentDoc} from '@astryxdesign/cli/doc'; const x: SubComponentDoc = {deprecated: …}
+ cli ./doc · Also exported from an earlier entry point · ComponentDeprecation ComponentDeprecation (./authoring) import {ComponentDeprecation} from '@astryxdesign/cli/doc'
+ cli ./template · Also exported from an earlier entry point · ComponentDeprecation ComponentDeprecation (./authoring) import {ComponentDeprecation} from '@astryxdesign/cli/template'
~ cli ./api · Functions · function search function search: (query: string, options?: { cwd?: string | undefined; type?: "template" | "component" | "hook" | "theme" | "doc" | undefined; limit?: number | undefined }) => Promise<SearchResponse> → function search: (query: string, options?: { cwd?: string | undefined; type?: "template" | "component" | "doc" | "theme" | "hook" | undefined; limit?: number | undefined }) => Promise<SearchResponse> import {search} from '@astryxdesign/cli/api'; search(…)

Touched components checked; add ci:run-visual, ci:run-a11y or ci:run-rtl to run the full suites.


Generated by PR Enrichment workflow | View full report

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved pending CI: CI has not run on this head yet. This is a draft from a fork, so CI runs once it is marked ready for review with the ci:run label, which a maintainer adds.

Arming the block in the page with blockMainThread's during keeps every assertion of the busy-release proof and removes the test-side round trips that let the block land late in the 125 ms release; the proof still fails when the release runs on the main thread.

[Automated review]

@vjeux
vjeux marked this pull request as ready for review November 5, 2026 05:59
@cixzhang cixzhang added the ci:run A maintainer lets this outside contributor's pull request run CI (AST-030 FR17) label Nov 5, 2026
@cixzhang
cixzhang marked this pull request as draft November 5, 2026 06:01
@cixzhang
cixzhang marked this pull request as ready for review November 5, 2026 06:01
@cixzhang
cixzhang marked this pull request as draft November 5, 2026 07:15
@cixzhang
cixzhang marked this pull request as ready for review November 5, 2026 07:15

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved. Arming the block in the page with blockMainThread's during option keeps every assertion of the busy-release proof and removes the test-side round trips that let the block land late in the 125 ms release. The proof still fails when the release runs on the main thread, and CI's interaction run passes on this head.

[Automated review]

@cixzhang
cixzhang merged commit 784dc5e into meta:main Nov 5, 2026
78 of 118 checks passed
@vjeux
vjeux deleted the test-list-row-release-block branch November 5, 2026 08:08

This branch was successfully deployed

1 active deployment
Preview — 5fc4baab Deployed Nov 5, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:run A maintainer lets this outside contributor's pull request run CI (AST-030 FR17) CLA Signed This label is managed by the Meta Open Source bot.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants