Repository navigation
test(ui-kit): capture embedding state on handoff failures - #2008
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
out < 1assertion with 1. The diagnostic verifier fails specifically withfailure receipt must include document and embedding rendering state.bun run typecheckpasses.bun run check:pr --base origin/mainpasses (231 tests / 2,307 assertions); committed preflight and selected hosted qualification are recorded below before merge.Native command:
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 base04ef3552190d8f56eab09dd6c3580101b6385ba4and headeb7f638ff39c144f84987215f7dacbee70f8d2f8, tree6cce8f331874630645f22e09c4fc62158bd4cf81. Local native/strict/committed-preflight proof used the head based on603a754b9; 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.Main subsequently advanced to
5e9854b2e53ab7cfb4364008cf9cd2065b369404through #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
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 is9fc02d5fc5a7f62f13063c04ce68b3cbe12948c9; tree is6fddd47d785eb9d7938cb2b06b9d956e7566d334, 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, parents04ef3552190d8f56eab09dd6c3580101b6385ba4/eb7f638ff39c144f84987215f7dacbee70f8d2f8, tree6cce8f331874630645f22e09c4fc62158bd4cf81. 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-20261016is 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, parent9fc02d5fc5a7f62f13063c04ce68b3cbe12948c9, tree6fddd47d785eb9d7938cb2b06b9d956e7566d334. 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.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-20261016is released after verification. The clean retained investigation branch and local receipts remain available for resumption.