Repository navigation
test(List): the press release curve proof holds the release in the page - #10047
Conversation
The proof that a held row's release follows the exit easing sent its hold from the test after the lift. On a busy machine the hold reached the page after the 125 ms release had ended, so it held nothing. The page now holds the release itself as soon as it runs (armHold, armed before the tap), and the curve is sampled from that hold as before.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
AI review status for this pull request.
|
PR Analysis Report🔎 Preview ·
|
| 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
There was a problem hiding this comment.
Approved pending CI: CI has not run on this head yet. Arming armHold before the tap removes the race with the 125 ms release, and the proof's assertions on component:List FR11 stay the same.
Next step: once the pull request is marked ready for review, a maintainer adds the ci:run label so CI runs.
- Optional follow-up: the storyboard test in the same file ("storyboard: a row released after a hold") still holds after the lift; an
armHoldarmed before its tap, passed toanimationStoryboardasheld: await hold.held(), would close the same race.
[Automated review]
There was a problem hiding this comment.
Approved. Arming armHold before the tap lets the page hold the 125 ms release as soon as it runs, so the FR11 curve proof no longer races the test's round trip; its assertions stay the same, and it passes in CI's Chromium and WebKit interaction runs on this head.
- Optional follow-up: the storyboard test in the same file ("storyboard: a row released after a hold") still holds after the lift; an
armHoldarmed before its tap and passed toanimationStoryboardasheld: await hold.held()would close the same race.
[Automated review]
Maintainer impact
ListRowPress's "a held row paints the pressed token and its release follows the exit easing, sampled frame by frame" fails on busy runners with
releaseundefined: the hold found no animation to hold. In Chromium pinned to two cores with 4 workers, main failed 4 of 20.Intended invariant
component:ListFR11: a row's release fades on the theme's exit tokens (--duration-exit,--ease-exit) on the compositor. The proof samples that curve, and what it asserts is unchanged.Change
The proof sent its hold from the test after the lift, after a press-state read and a timer freeze. The release lasts 125 ms, the default theme's exit duration, so on a busy runner it could end before the hold arrived. The page now holds the release itself as soon as it runs:
armHold, armed before the tap, as the harness documents for a short animation. The curve is then sampled from that hold, by seeking, as before.Evidence
One machine and one build, the arms alternated:
Scope
Testing
The arms above, as commits not for landing:
main: bd5d1de;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 "Item row in a scroller" blocked-thread case (its own pull request) and the WebKit video case (#10011).