Day attachment fan remains hidden in the Agenda deck acceptance flow #1314

Open
opened 2026-10-07 04:38:36 +00:00 by kayg · 4 comments
Owner

Merge32 (#1122) reproduces the reported fan stopping point on origin/dev 3601719b8.

Command: CALTERNAL_E2E_MAC=1 CALTERNAL_E2E_ASSET_OVERRIDE=1 bun e2e/agenda-decks-822.mjs.

The local media contract passes. The flow proceeds into the Day grid, then Playwright reports:

TimeoutError: waitFor: Timeout 90000ms exceeded.
174 × locator resolved to hidden <ul aria-hidden="true" aria-label="19 attachments" ... class="attachment-list ... mixed is-stack is-fan">

The locator is the Dense deck review entry's .attachment-list.is-fan inside .col[data-date="2026-10-07"] .block.actual.

This is not classified as SLOW-only: the fan class is present throughout the repeated checks while the list stays hidden. The decorative grid deck deliberately has aria-hidden="true" because its parent owns the action; that attribute alone does not establish the cause. Inspect the list's bounds, its host clipping and visibility before changing behavior. Keep the existing assertion. This comparison uses origin/dev production web assets and the same prebuilt bash-security server binary used for the merged UI checks.

Merge32 (#1122) reproduces the reported fan stopping point on origin/dev 3601719b8. Command: `CALTERNAL_E2E_MAC=1 CALTERNAL_E2E_ASSET_OVERRIDE=1 bun e2e/agenda-decks-822.mjs`. The local media contract passes. The flow proceeds into the Day grid, then Playwright reports: ``` TimeoutError: waitFor: Timeout 90000ms exceeded. 174 × locator resolved to hidden <ul aria-hidden="true" aria-label="19 attachments" ... class="attachment-list ... mixed is-stack is-fan"> ``` The locator is the Dense deck review entry's `.attachment-list.is-fan` inside `.col[data-date="2026-10-07"] .block.actual`. This is not classified as SLOW-only: the fan class is present throughout the repeated checks while the list stays hidden. The decorative grid deck deliberately has `aria-hidden="true"` because its parent owns the action; that attribute alone does not establish the cause. Inspect the list's bounds, its host clipping and visibility before changing behavior. Keep the existing assertion. This comparison uses origin/dev production web assets and the same prebuilt bash-security server binary used for the merged UI checks.
Author
Owner

The merged production UI at 1f05912e0 reproduces the same stopping point as origin/dev. The list has is-stack is-fan but stays hidden for 177 checks over the 90-second wait. Baseline had 174 such checks. Agenda's earlier fan interactions pass; this stops in the Day grid Dense deck review entry. No assertion changed.

The merged production UI at 1f05912e0 reproduces the same stopping point as origin/dev. The list has `is-stack is-fan` but stays hidden for 177 checks over the 90-second wait. Baseline had 174 such checks. Agenda's earlier fan interactions pass; this stops in the Day grid Dense deck review entry. No assertion changed.
Author
Owner

#1314 is a pre-existing acceptance expectation mismatch. DESIGN §38 sizes item representations by available space; a cramped grid card keeps its count instead of a clipped deck. GridColumn.svelte documents this and .block.cramped .b-deck deliberately uses display:none.

The production diagnostic run now shows the exact failing case: 1440px Week, zoom 160, Dense deck review card width 83.65625px and height 254.109375px, class includes cramped. Its b-deck has display:none and 0×0 dimensions. The ul has is-fan because focus is set, but its hidden parent prevents visibility. Earlier roomy Day cards have visible 154px fans (390px Day card 257×237.5px). This is a finite representation rule, not a SLOW timeout.

Corrected the runner to assert a visible full attachment count (19) on cramped cards. Roomy cards retain every original fan geometry assertion. Every card still runs Enter-to-open, focused first attachment and ArrowDown checks in the full deck. No product behavior, fixture duration or numeric expectation changed. The original failing diagnostic run is retained in artifacts/merge32b/agenda-decks-822.log; the corrected complete matrix is running. The diagnostic statements have been removed from source.

#1314 is a pre-existing acceptance expectation mismatch. DESIGN §38 sizes item representations by available space; a cramped grid card keeps its count instead of a clipped deck. GridColumn.svelte documents this and .block.cramped .b-deck deliberately uses display:none. The production diagnostic run now shows the exact failing case: 1440px Week, zoom 160, Dense deck review card width 83.65625px and height 254.109375px, class includes cramped. Its b-deck has display:none and 0×0 dimensions. The ul has is-fan because focus is set, but its hidden parent prevents visibility. Earlier roomy Day cards have visible 154px fans (390px Day card 257×237.5px). This is a finite representation rule, not a SLOW timeout. Corrected the runner to assert a visible full attachment count (19) on cramped cards. Roomy cards retain every original fan geometry assertion. Every card still runs Enter-to-open, focused first attachment and ArrowDown checks in the full deck. No product behavior, fixture duration or numeric expectation changed. The original failing diagnostic run is retained in artifacts/merge32b/agenda-decks-822.log; the corrected complete matrix is running. The diagnostic statements have been removed from source.
Author
Owner

The corrected #1314 run completed the full phone/tablet/desktop, light/dark layout and keyboard deck matrix, then reached a later Quick Look Escape assertion.

A focused diagnostic proves the readiness race: the dialog is visible but the active element is still the Agenda attachment. Escape is consumed by AttachmentDeck and folds the underlying row; it never reaches window. The shared focus trap documents a post-first-paint initial focus move (#642). A second focused probe waits for activeElement inside the modal (not an animation or fixed sleep), then the original Escape-close and restored-URL assertions pass. The remaining activity menu, voice playback, fan item/menu, reduced-motion and item-preview checks all pass in that focused probe:

PASS #822: 0 production layouts; no item overlap or escaping thumbnail; macOS screenshots in /home/kayg/Developer/calternal-wt/merge32/artifacts/merge32b/escape-focused-probe

The zero layout count is explicit: this diagnostic reuses the real fixture but omits the already-run capture matrix; it is not a substitute for the full final runner. The acceptance test now asserts modal keyboard ownership before Escape. No product code, timing budget or close expectation changed. Full final runner will use the matching branch server. Atomic commit: test(calendar): review cramped decks and wait for viewer focus.

Known edge documented here for follow-up: a key sent in the first paint interval before the shared trap moves focus can still act on the opener. This is an existing #642 focus-timing behavior, not a new failure in the fan correction. Evidence: artifacts/merge32b/escape-probe.log and escape-focused-probe.log.

The corrected #1314 run completed the full phone/tablet/desktop, light/dark layout and keyboard deck matrix, then reached a later Quick Look Escape assertion. A focused diagnostic proves the readiness race: the dialog is visible but the active element is still the Agenda attachment. Escape is consumed by AttachmentDeck and folds the underlying row; it never reaches window. The shared focus trap documents a post-first-paint initial focus move (#642). A second focused probe waits for activeElement inside the modal (not an animation or fixed sleep), then the original Escape-close and restored-URL assertions pass. The remaining activity menu, voice playback, fan item/menu, reduced-motion and item-preview checks all pass in that focused probe: ```text PASS #822: 0 production layouts; no item overlap or escaping thumbnail; macOS screenshots in /home/kayg/Developer/calternal-wt/merge32/artifacts/merge32b/escape-focused-probe ``` The zero layout count is explicit: this diagnostic reuses the real fixture but omits the already-run capture matrix; it is not a substitute for the full final runner. The acceptance test now asserts modal keyboard ownership before Escape. No product code, timing budget or close expectation changed. Full final runner will use the matching branch server. Atomic commit: test(calendar): review cramped decks and wait for viewer focus. Known edge documented here for follow-up: a key sent in the first paint interval before the shared trap moves focus can still act on the opener. This is an existing #642 focus-timing behavior, not a new failure in the fan correction. Evidence: artifacts/merge32b/escape-probe.log and escape-focused-probe.log.
Author
Owner

Final corrected Agenda flow exits 0 on the production build: 36 layouts at 390, 820 and 1440 px, light and dark, with macOS emulation. Pointer, touch, keyboard, Activity menu, voice playback, fanned-item Quick Look, preview menu and reduced-motion checks all complete.

PASS #822 media contract: 9 finite local checks
PASS #822: 36 production layouts; no item overlap or escaping thumbnail; macOS screenshots in /home/kayg/Developer/calternal-wt/merge32/artifacts/merge32b/agenda

#1314 was pre-existing on origin/dev 3601719b8. The roomy-card fan remains checked; cramped cards must show the full count and still open the full deck with Enter. This follows DESIGN §38. The Quick Look test waits until the shared deferred focus trap owns keyboard input before Escape; it preserves the original close expectation. The prepaint Escape edge remains noted on this issue. No Calendar product code changed. Screenshots are attached to #1122; logs remain in artifacts/merge32b/agenda-final.log.

Final corrected Agenda flow exits 0 on the production build: 36 layouts at 390, 820 and 1440 px, light and dark, with macOS emulation. Pointer, touch, keyboard, Activity menu, voice playback, fanned-item Quick Look, preview menu and reduced-motion checks all complete. ```text PASS #822 media contract: 9 finite local checks PASS #822: 36 production layouts; no item overlap or escaping thumbnail; macOS screenshots in /home/kayg/Developer/calternal-wt/merge32/artifacts/merge32b/agenda ``` #1314 was pre-existing on origin/dev 3601719b8. The roomy-card fan remains checked; cramped cards must show the full count and still open the full deck with Enter. This follows DESIGN §38. The Quick Look test waits until the shared deferred focus trap owns keyboard input before Escape; it preserves the original close expectation. The prepaint Escape edge remains noted on this issue. No Calendar product code changed. Screenshots are attached to #1122; logs remain in artifacts/merge32b/agenda-final.log.
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal-v0#1314
No description provided.