Skip to content

test(ui-kit): retain native ghost handoff failure evidence - #1984

Merged
schlessera merged 1 commit into
mainfrom
fix/1946-actioncard-opacity-e1849-resume
Oct 15, 2026
Merged

schlessera merged 1 commit into
mainfrom
fix/1946-actioncard-opacity-e1849-resume

Conversation

@schlessera

@schlessera schlessera commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

Refs #1946

What changed

A failed ghost handoff opacity assertion now emits a bounded receipt containing the original sampled values, selected layer identities, both frame widths, arrival/removal times and native CSS animation state. The original assertion error remains authoritative if collecting that receipt also fails.

Why this shape

The original ActionCard failure retained opacity 1 but no native animation state. Reading styles or animation objects before its oracle could start pending animations and hide the boundary. Extra style/animation reads therefore occur only after an assertion fails. Captures retain at most two frames, 32 layers per frame and four animations per layer, with explicit truncation flags. All 17 original assertion sites, native clicks, 600ms CSS duration, simultaneous intermediate-opacity checks, geometry and 700ms disappearance bounds remain.

Proof

Candidate 78f9f07fa45265abb84b3c3a91f32e21d78986ad, based on 200efc8d4e5e2ef6bd7c5385440a9289bd14c774. Committed-head bun run check:pr --base origin/main passes at origin/main 82c1f211ee2ebabf44ed819e4a6bae47c93fca51: all local gates and 231 tests / 2,302 expectations across 14 files. The sole newer main commit is the independent #1977 index-release namespace fixture. Strict repository tsc --noEmit passes with an explicit 4GiB compiler allowance. No consumer change or changeset.

Four focused invocations use the pinned offline Playwright image, ordinary UID, readonly locked fonts and unchanged Storybook input, projects and guards:

node scripts/visual.mjs --inside --filter=ActionCard.stories --project=storybook --project=storybook-light
Condition Native result Command wall User + system CPU Peak process RSS
Actual CSS handoffs paused 32 pass / 2 intended failures 12.24s 43.73s 3,393,580KiB
Same fault, diagnostic emission omitted 32 pass / 2 intended failures 10.41s 12.44s 1,688,792KiB
Same fault, capture throws 32 pass / 2 intended failures 10.02s 11.63s 1,632,004KiB
All faults restored 34 pass 11.01s 16.19s 1,494,924KiB

The paused control fails the original expected 1 to be less than 1 assertion in each theme. Its independent log checker requires both receipts, original outgoing 1/incoming 0, selected layer presence, both 320/720px frames, ten captured layers per width and actual ghost-in/out animations paused at time 0 with duration 600ms. Omitting the diagnostic makes that checker fail Expected two failure receipts; received 0. A deliberate capture exception still exposes the original opacity assertion, not the diagnostic error. Restoration emits no failure receipt. All source/CSS mutations are restored; the committed helper preserves the exact 17 expectation lines. The four commands cost 43.68s; this is validation cost, not a performance improvement or attribution of cold/warm runner differences.

Separately, one exact-historical-checkout diagnostic at 884d9cad35e0be9126c41beeb3f3f5a7a63d04ec retains the complete original 218-file shard and matches every original per-project file order. It passes 4,567 tests / four existing skips, with both ActionCard themes showing native intermediate animation progress and removal within 606ms. This historical instrumented run costs 467.12s command / 366.64 CPU-seconds / 6,821,560KiB peak process RSS. Its low-interference trace does not reproduce the original opacity-1 state, prove a cause or qualify the new candidate. It is not a green retry offered as a repair.

Dependency provenance is explicit: the initial shared-cache install inherited unrelated Vitest diagnostics, detected before browser execution. Those dependencies were discarded; all actual native commands use fresh private-cache copyfile dependencies, with clean installed Vitest chunk SHA-256 a236001d048380e2c67d05423fc9ea3f26b07ee019ba8d6e622082f29d49102e. Discarded setup costs remain recorded separately. Measurements share the session's lease, while unrelated host activity remains uncontrolled; process RSS is not aggregate container memory.

Complete hosted qualification — 2026-10-15

Automatic ready-PR run 38740639468, attempt 1, passes all 13 selected jobs, including the independently validating aggregate. Packaging is intentionally unselected. The successful contract gate is separate; opening/label events superseded earlier admission runs without retrying a failed test.

Every executed job log identifies checkout 34ae6aa8e50c5f77d8ac9cb75eb91ac9ee5753e9, parents main 82c1f211ee2ebabf44ed819e4a6bae47c93fca51 and head 78f9f07fa45265abb84b3c3a91f32e21d78986ad, tree 97b5dd2d1c6c7bfbc3659644af8db714ce1c2956. Immutable API and fetched Git agree.

  • Browser shards: 4,579 + 4,226 passed, ten existing exclusions. All 34 ActionCard cases pass, with dark/light story files taking 4.029 / 3.156 s; no failure receipt was emitted.
  • Layout: 621 + 428 passed, including the original ten-minute native endurance case (604.292 s).
  • Unit shards: 2,304 + 2,040 + 2,794 + 2,267 passed; separate native helper 2 passed. Strict verification, runtime and captures pass. The constructed runtime negative remains expected failing evidence, not a healthy cell or a historical-cause claim.
  • Executed CI job duration totals 8,425 seconds, excluding separate workflows; queue and concurrent elapsed time are different measures. No test retry, deadline increase or canceled substantive proof is hidden.
Job ID
changeset 116441124086
layout (2) 116441399547
layout (1) 116441399571
browser (1) 116441399581
browser (2) 116441399653
unit (3) 116441399731
unit (4) 116441399740
verify 116441399769
captures 116441399776
unit (1) 116441399806
unit (2) 116441399829
runtime 116441399837
proof 116453039397

Checklist

  • Focused local proof and complete selected hosted qualification passed at the recorded identities.
  • Scope is an independently useful diagnostic; unresolved issue criteria are named below.
  • PR and advanced issue ui-kit: identify the stalled intermediate ActionCard handoff opacity #1946 read back milestone 0.44.0.
  • Nothing consumer-visible changes; no changeset.
  • Leakage and local preflight gates passed.
  • No machine contract changed.
  • The wait guide describes failure-only capture and causal limits.

Anything left open

#1946 remains open with its historical cause unresolved. This diagnostic does not repair the original stalled opacity or remove #1943's qualification dependency. Complete selected hosted proof for this diagnostic candidate passed as recorded above. No animation, elapsed-budget, geometry or theme/width guarantee is weakened.

Pre-merge base assessment

Live main advanced after qualification to e75f9af2ee058b3e43059d92daf78064db467fe2 through #1981's Claude terminal-cancellation correction. Its nine changed paths do not overlap this diagnostic. The policy fixture supplies its own backend, and the ghost Storybook helper does not execute the Claude turn runner; no changed adapter code is used by these diagnostic boundaries. A clean prospective merge was verified. The older passing PR run retains its actual base/tree above and is not relabelled as proof of the newer combined tree. Automatic main-push proof will separately verify the landed combination, including the new backend code.

@schlessera schlessera added this to the 0.44.0 milestone Oct 15, 2026
@schlessera schlessera added type: test Coverage, harness or proof work with no behaviour change. area: ui-kit The presentational design kit: components, tokens, Storybook, visual baselines. labels Oct 15, 2026
@schlessera
schlessera merged commit 131f3a7 into main Oct 15, 2026
19 of 21 checks passed
@schlessera

Copy link
Copy Markdown
Owner Author

Complete actual-main qualification — 2026-10-15

Automatic main run 38744780346, attempt 1, passes all 13 selected jobs, including the aggregate. All executed job checkout logs identify squash 131f3a7d70c829bd27a3fa8ddac9fda0261918b9, parent c857a5db365b7725df24f0c00be8dd082fb68794, tree 01fd90972692493c55ec36ec3ef0e08cf49e83bd. This independently qualifies the actual landed combination; the earlier PR receipt retains its distinct base/tree. Packaging is intentionally unselected.

All 16 policy cases, all selected ActionCard/browser checks, both layout shards and original ten-minute native endurance pass, alongside all unit shards, strict verification, runtime and captures. The original investigation remains open: this is verified diagnostic delivery, not a causal repair. PR and issue retain milestone 0.44.0, and the invocation’s claim is released.

Executed CI job cost is 8,699 seconds, excluding separate workflows and queue. No failed job was retried, no selected job was canceled, and no assertion, deadline, guard or coverage cell was weakened.

Job ID
changeset 116455446445
verify 116455732296
captures 116455732463
browser (2) 116455732545
unit (4) 116455732557
layout (1) 116455732578
runtime 116455732601
browser (1) 116455732606
unit (1) 116455732622
unit (3) 116455732631
layout (2) 116455732734
unit (2) 116455732884
proof 116467795874

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ui-kit The presentational design kit: components, tokens, Storybook, visual baselines. type: test Coverage, harness or proof work with no behaviour change.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant