Skip to content

test(ui-kit): capture embedding state on handoff failures - #2008

Merged
schlessera merged 1 commit into
mainfrom
test/1946-iframe-failure-evidence-bf03a155
Oct 16, 2026
Merged

schlessera merged 1 commit into
mainfrom
test/1946-iframe-failure-evidence-bf03a155

Conversation

@schlessera

@schlessera schlessera commented Oct 16, 2026 •

Copy link
Copy Markdown
Owner

Refs #1946

What changed

Ghost handoff failures now retain document visibility/focus and viewport state, plus the owning iframe and up to eight DOM ancestors: bounds, display, visibility, content-visibility, opacity and bounded transform data. Truncated, inaccessible and failed captures are explicit. The existing native layer snapshot is retained before any new embedding geometry reads; successful handoffs perform none of these reads.

Why this shape

A controlled hidden iframe reproduces the original outgoing-opacity-1 assertion while its child document still reports visible. The historical CI failure did not retain embedding state, so this receipt will help distinguish that signature from paused or pending animations on a natural recurrence. The existing assertions, native input, CSS and 300/600/700 ms timing guarantees remain unchanged. This does not select a root cause or repair #1946.

Proof

  • Baseline native hidden-iframe mutation: both themes fail the original out < 1 assertion with 1. The diagnostic verifier fails specifically with failure receipt must include document and embedding rendering state.
  • Final candidate native hidden and paused controls: each executes 34 cases (32 pass, two intentional original opacity-1 failures); receipts distinguish zero-size/display-none/no-animation embedding from nonzero rendered embedding with paused animations at time 0.
  • Ten connected wrapper ancestors, with state-preserving iframe moves: both original opacity failures remain; receipt caps ancestry at eight, marks truncation, and identifies the actual hidden parent. The first setup using ordinary reparenting reloaded the iframe and is excluded from proof.
  • Throwing embedding getter during the paused control: both original assertion failures and all 20 native layer records remain; embedding capture is marked failed. The complete original property descriptor is restored.
  • Successful native handoff with a throwing/counting embedding getter: 34 pass, zero embedding queries in both handoffs. All probe code and descriptors are restored.
  • Restored final candidate: 34/34 ActionCard cases pass across both story themes and both widths, with no failure receipt. Every native command uses the pinned offline Playwright image, ordinary UID, host IPC and read-only verified fonts.
  • bun run typecheck passes. bun run check:pr --base origin/main passes (231 tests / 2,307 assertions); committed preflight and selected hosted qualification are recorded below before merge.

Native command:

node scripts/visual.mjs --inside --filter=ActionCard.stories --project=storybook --project=storybook-light

No consumer changeset: only an unpublished Storybook helper changes. No CLI/MCP/frontmatter contract or documented product behavior changes.

Selected hosted qualification

Automatic ready-PR run 38842390329, attempt 1, passes all 13 selected CI jobs, including the aggregate. Packaging is intentionally unselected. The retention ledger is empty: every selected browser/layout category ran fresh. No selected CI job was retried or canceled.

Every actual job checkout log identifies efdf8a55afee7fdcb08fd67774a67ad3e19769af. The immutable commit API and fetched Git object agree: parents base 04ef3552190d8f56eab09dd6c3580101b6385ba4 and head eb7f638ff39c144f84987215f7dacbee70f8d2f8, tree 6cce8f331874630645f22e09c4fc62158bd4cf81. Local native/strict/committed-preflight proof used the head based on 603a754b9; the intervening #2007 change only attributes a storage-plan lifetime guard. This hosted combined-tree receipt includes that documentation advance and retains its own source identity.

Job Job ID
changeset 116785212980
captures 116785389584
layout (1) 116785389602
unit (2) 116785389636
browser (2) 116785389663
browser (1) 116785389679
layout (2) 116785389682
runtime 116785389691
unit (1) 116785389699
unit (4) 116785389711
unit (3) 116785389728
verify 116785389758
proof 116790941412

Main subsequently advanced to 5e9854b2e53ab7cfb4364008cf9cd2065b369404 through #2006: isolated renderer phase-budget tests plus wait-guide evidence, with complete timer-descriptor restoration. Inspection found no changes to production code, dependencies, the browser harness or handoff inputs. No rebase or unchanged repeat is justified; this PR receipt retains the original tested base/tree, and actual squash/main qualification will be recorded separately.

The contract gate and project sync also pass. Both PR and advanced issue #1946 retain release milestone 0.44.0, confirmed against live milestones and registry publication 0.43.1.

Checklist

  • Focused local preflight/behavioral receipts and complete selected hosted proof passed; actual head/base/job checkout evidence is in Proof.
  • Acceptance criteria from the issue are all met, or the gap is named below.
  • The PR and completed/advanced issues have verified release milestones under docs/process/github.md.
  • A changeset is included, or this changes nothing a consumer can see.
  • No personal data anywhere in the diff — the leakage gate covers the whole tree.
  • The integration contract index or relevant component is updated in this same commit, or nothing in the machine surface moved.
  • Docs under docs/ reflect the change, or nothing documented moved.

Anything left open

#1946 remains open with needs: repro. A natural recurrence must establish the actual embedding and animation state before selecting a causal correction; this diagnostic alone does not unblock dependent optimization work. No human-only prerequisite is introduced.

Embedding diagnostic delivery — 2026-10-16

PR #2008 is merged as 11655e165474578801b7a2425f0f4a070419157c, verified on fetched main. Actual parent is 9fc02d5fc5a7f62f13063c04ce68b3cbe12948c9; tree is 6fddd47d785eb9d7938cb2b06b9d956e7566d334, matching the independently reconstructed combination. Both issue and PR retain milestone 0.44.0.

Ready-PR qualification 38842390329, attempt 1, passes all 13 selected jobs and aggregate. Every actual job checkout log matches efdf8a55afee7fdcb08fd67774a67ad3e19769af, parents 04ef3552190d8f56eab09dd6c3580101b6385ba4 / eb7f638ff39c144f84987215f7dacbee70f8d2f8, tree 6cce8f331874630645f22e09c4fc62158bd4cf81. All browser/layout proof is fresh; pack is intentionally unselected. The PR retains every selected job ID and local intended-red/restored receipt.

Main advanced during qualification through #2006 (isolated renderer phase-budget tests and wait-guide evidence, complete timer-descriptor restoration) and #2015 (storage-design documentation only). Source inspection found no handoff, production dependency or browser-harness change; no unchanged rebase/repeat was performed. The earlier PR receipt is not attributed to the later combined tree.

Automatic main-push run 38844504065 subsequently passed all thirteen selected jobs at the actual squash; the complete source and job identities are recorded below. Verification is complete and claim diag-1946-embedding-bf03a155-20261016 is released. The original causal investigation remains open.

The requested failure-only rendering-state capture is delivered; successful handoffs perform zero embedding reads. The original cause remains unresolved. Keep #1946 open with needs: repro and existing dependent blockers: on a natural recurrence, compare the new document/iframe/ancestor state with the retained native layer signature before choosing a correction. This partial delivery does not close the original investigation.

Complete actual-main qualification — 2026-10-16

Automatic main-push run 38844504065, attempt 1, passes all 13 selected CI jobs, including the aggregate. Packaging is intentionally unselected. Every executed job checkout log identifies actual squash 11655e165474578801b7a2425f0f4a070419157c, parent 9fc02d5fc5a7f62f13063c04ce68b3cbe12948c9, tree 6fddd47d785eb9d7938cb2b06b9d956e7566d334. API/local immutable commit receipts agree and ancestry on fetched main is verified. The earlier PR qualification retains its separately recorded base/tree; it is not relabeled as this run.

Job Job ID
changeset 116791841619
verify 116791964971
browser (2) 116791964991
browser (1) 116791964998
layout (2) 116791965037
unit (2) 116791965050
runtime 116791965065
layout (1) 116791965070
unit (4) 116791965075
unit (3) 116791965080
captures 116791965109
unit (1) 116791965128
proof 116798241965

This completes qualification of the requested failure-only embedding diagnostic. The hidden/paused/ancestor-bound/capture-error controls retain their original intended assertion failures, while restored and zero-success-read controls pass 34/34 each. No assertion, native input, stylesheet, duration, deadline, theme or width was weakened. Both PR #2008 and issue #1946 retain milestone 0.44.0.

The original investigation remains open with needs: repro. The next evidence is a natural recurrence's native layer and embedding-state receipt, followed by a control for that observed condition; no historical cause or dependent unblocking is inferred. Claim diag-1946-embedding-bf03a155-20261016 is released after verification. The clean retained investigation branch and local receipts remain available for resumption.

@schlessera schlessera added this to the 0.44.0 milestone Oct 16, 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 16, 2026
@schlessera
schlessera merged commit 11655e1 into main Oct 16, 2026
17 of 18 checks passed
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