Context
PR #14981 converts the dock motion E2E suite from instance-bound sampling to DOM-marker sampling and closes the major false-green classes found in review. Its exact-head dashboard suite is green and the production motion/CSS changes are independently valid.
The cycle-2 audit found one remaining test-only correlation gap. Per the operator's throughput rule, this is isolated as an owned hardening leaf instead of another #14981 author cycle.
The Problem
The resize and reduced-motion journeys use the generic selector:
[class*="dock-flip-item-"]
The sampler re-queries the DOM on every rAF across a wholesale projection rebuild. If DOM order changes, the “first” marker may identify logical pane A before the operation and pane B after it. A before/after width delta greater than 50px and at most two distinct widths can then pass while comparing two different panes.
The FLIP journey correctly uses the per-item marker, but its assertion block omits the shared samples.every(sample => sample.w > 0) guard promised by the helper contract and present in the resize/reveal/reduced consumers.
Source of Authority
DockMotionNL.spec.mjs: stable-marker sampler contract and four motion witnesses.
DockLayoutAdapter projection: per-item dock-flip-item-<encoded itemId> correlation key.
- Issue #14973 / PR #14981: motion evidence must fail closed across instance-destroying reprojection.
Expected Behavior
Every journey that compares geometry across reprojection pins one logical item's exact marker before starting the sampler. A disappearing/replaced/unlaid-out marker produces gaps or zero-size failure; it can never silently switch to another pane. Every geometry consumer enforces the shared positive-width invariant before shape assertions.
Acceptance Criteria
Fix Sketch
Lift a tiny helper that derives the exact per-item selector from an item id. Reuse it in FLIP, resize, and reduced-motion. For resize/reduced, select one stable item from the current document before the operation; do not rely on DOM order. Add the missing common invariant check to FLIP.
No production code, tokens, or persisted schema change.
Contract Ledger
| Target Surface |
Source of Authority |
Required Behavior |
Failure Mode |
Evidence |
| marker correlation |
per-item projection class |
same logical item before/after |
gap/timeout, never item switch |
reorder falsifier |
| geometry samples |
sampler contract |
every accepted width is positive |
assertion failure |
shared guard |
| reduced motion |
#14973 |
real resize, ≤2 widths |
no-op/dead/switch fails |
exact-head E2E |
Decision Record Impact
None — test hardening only.
Relations
Parent: #13158 · source ticket #14973 · discovered in cycle-2 review of PR #14981 · detector overlap remains owned by #14984 / PR #14986.
Live duplicate sweep: three focused GitHub searches plus the latest open issue queue checked at 2026-07-10T20:15Z; no equivalent issue found.
Origin Session ID: 019f484c-662f-7f31-969a-cbde373efd4a
Retrieval Hint: DockMotion generic first marker switches logical pane across reprojection reduced motion false positive
Context
PR #14981 converts the dock motion E2E suite from instance-bound sampling to DOM-marker sampling and closes the major false-green classes found in review. Its exact-head dashboard suite is green and the production motion/CSS changes are independently valid.
The cycle-2 audit found one remaining test-only correlation gap. Per the operator's throughput rule, this is isolated as an owned hardening leaf instead of another #14981 author cycle.
The Problem
The resize and reduced-motion journeys use the generic selector:
[class*="dock-flip-item-"]The sampler re-queries the DOM on every rAF across a wholesale projection rebuild. If DOM order changes, the “first” marker may identify logical pane A before the operation and pane B after it. A before/after width delta greater than 50px and at most two distinct widths can then pass while comparing two different panes.
The FLIP journey correctly uses the per-item marker, but its assertion block omits the shared
samples.every(sample => sample.w > 0)guard promised by the helper contract and present in the resize/reveal/reduced consumers.Source of Authority
DockMotionNL.spec.mjs: stable-marker sampler contract and four motion witnesses.DockLayoutAdapterprojection: per-itemdock-flip-item-<encoded itemId>correlation key.Expected Behavior
Every journey that compares geometry across reprojection pins one logical item's exact marker before starting the sampler. A disappearing/replaced/unlaid-out marker produces gaps or zero-size failure; it can never silently switch to another pane. Every geometry consumer enforces the shared positive-width invariant before shape assertions.
Acceptance Criteria
itemIdfrom current topology and sample its exact encoded marker.<= 2contracts remain intact.DockMotionNLand related dashboard motion journeys pass with freshly built themes.Fix Sketch
Lift a tiny helper that derives the exact per-item selector from an item id. Reuse it in FLIP, resize, and reduced-motion. For resize/reduced, select one stable item from the current document before the operation; do not rely on DOM order. Add the missing common invariant check to FLIP.
No production code, tokens, or persisted schema change.
Contract Ledger
Decision Record Impact
None — test hardening only.
Relations
Parent: #13158 · source ticket #14973 · discovered in cycle-2 review of PR #14981 · detector overlap remains owned by #14984 / PR #14986.
Live duplicate sweep: three focused GitHub searches plus the latest open issue queue checked at 2026-07-10T20:15Z; no equivalent issue found.
Origin Session ID: 019f484c-662f-7f31-969a-cbde373efd4a
Retrieval Hint:
DockMotion generic first marker switches logical pane across reprojection reduced motion false positive