Repository navigation
test(ui-react): await cap retirement before polling the limit panel - #2002
Conversation
|
Current-head qualification passed on the first run: 13/13 selected jobs in run 38833690050, attempt 1; packaging is intentionally unselected. Layout (2) passes 579 tests across 28 files, including all 17 Actions-limit tests. The original three callers pass with their full downstream checks. The proof aggregate independently passes and no older browser/layout evidence was reused. Every selected job's actual checkout is |
|
Post-merge verification is complete. Matching-head squash Automatic push run 38835980599, attempt 1, passes all 13 selected jobs on that exact squash. Packaging is intentionally unselected; the retention ledger is empty. Every selected job's checkout log and the downloaded layout artifact agree with the immutable API/local Git identity above, and the aggregate independently passes. No rerun. Layout (2): 579/579 across 28 files, 1280.38 s. The complete hygiene Actions-limit file passes 17/17, 64.077 s, including all three original affected callers and their full downstream oracles. Layout (1): 514/514 across 28 files. All four unit partitions, both browser shards, native runtime, captures, types and metadata pass.
Issue #1866 is closed, and both issue and PR retain release milestone 0.44.0. The issue records the controlled reproduction and removed/restored mutation, clean local file/preflight, current-head PR proof and exact-squash automatic-main proof separately. The original historical failure timelines remain unavailable; the supported resolution is the demonstrated fixture sequencing correction. |
Closes #1866
What changed
Wait for the server-retired Action to reach
droppedin the browser's real replicated inbox before polling the Actions-limit panel. The sharedfillhelper previously started its presentation deadline when the server command returned, while the browser still had the 60-Action burst to consume. All original L1, retirement, no-card, pause/resume, accessibility, focus, geometry and screenshot assertions remain.Why this shape
The controlled native failure shows the successful paused-review response arriving just after the prematurely started L1 poll's final sample. The product then renders L1 correctly. An explicit stimulus-delivery assertion gives the unchanged presentation poll its own default budget after retirement arrives; it also fails explicitly if retirement never reaches the browser. No product source, timeout values, baselines, transport guards or shipped output change. The only sibling fill outside this helper occurs before native page mount and has no live-burst/presentation overlap.
Proof
Source before the fix:
45908608df63b07ee3d10d84ac608d132aa21caa. Native controls use Bun 1.4.2, Vitest 4.1.11 and network-disabledmcr.microsoft.com/playwright:v1.63.0-noble(digestsha256:eff16c30e6f3f4af0a03fa4b706120d5e9b0891c344a27d64559aff5900a4a27), with existing locked fonts read-only and serial browser files./api/hygiene/reviewresponses reproduces the exact original dark-1280 L1 assertion. Refresh starts 2682.2 ms after fill returns; final undefined sample 2746.9 ms; assertion failure 2752.4 ms; current successful paused response 2792.7 ms. Exit 1, one failure, 16 cases excluded, 9.78 s.node scripts/visual.mjs --project=ui-react-layout --filter=hygiene-actions-limit.layoutpasses all 17/17, 46.70 s, Bun 1.4.2. Original screenshot comparisons pass; reviewed unchanged light-320 L1 and dark-1280 L3 baselines for readable wrapping and visible Resume controls.bun run check:pr --base origin/mainpasses all gates and 54 affected fast-invariant tests (local Bun 1.4.3).Actual checkout from every selected job log:
01cc3fe9dc252d4188e55d5cdb01f9559ef7d912; immutable API and local Git agree on parents base9cf4aa5f37a33d40f53f783ecd0e8344f920f9ec+ head1b3e6adac2883c8092742be26506b8a525a313c4, tree85b301f6f08ff99e9975c5f731c576040c58b782. Downloaded retention ledger hasretained: {}; aggregate revalidation passes. The separate successful contract job116757916369checks the exact PR head, as its workflow requires. An initial superseded contract run was cancelled by the same-head label event; the replacement passed.Main subsequently advanced to
665bf5e4e7dca4fcaba5e9cf6b341fbef95c9f4cvia #1776. Its 159 changed files are all underwebsite/: closed-demo request handling/checks and regenerated website previews/shares. No package, fixture, dependency, browser harness, CI workflow, font or capture-recipe input changed; the selected editorial verifier generates its own five recipes and does not consume those website assets. This is unrelated advancement, so no rebase or repeated long PR suites are required. The passing run still proves its recorded base/tree; the final squash and automatic main-push qualification are recorded separately.The temporary response hold preserves the real status/body and is below the existing 1000 ms polling timeout. It is a reproduction stimulus, absent from this patch. The exact original CI scheduling remains unknown; this controlled reproduction establishes the fixture ordering defect without reconstructing those historical timelines. Detailed issue evidence and limits.
Controlled-reproduction recipe
In the first native route handler in
hygiene-server-command.ts, read the real response body before fulfillment and apply only this temporary hold:Use the existing pinned offline container invocation with
--cpus=1, mounted Bun 1.4.2 and locked fonts, then run frompackages/ui-kit:node /repo/node_modules/vitest/vitest.mjs run --project=ui-react-layout --browser.fileParallelism=false ../ui-react/tests/browser/hygiene-actions-limit.layout.tsx -t 'light 1280: Actions-limit P0 L1 L3|dark 1280: Resume waits for server confirmation then focuses L2|Resume request failure retains L1'Remove/reinsert only the new replicated-retirement poll for the mutation/restoration pair. Temporary observation traces record original assertion failure before waiting for pending requests and observing eventual L1; that observation does not clear the failed test. Remove all controls before clean qualification.
Checklist
Anything left open
Nothing within the scoped fixture correction. The exact historical failure scheduling remains unknown; the controlled reproduction and mutation establish the corrected boundary.