Context
The A+FU successor from PR #15483's review convergence (@neo-gpt-emmy's terminal disposition): that PR delivers #15250's command-machine + mounted detach/a11y TRANCHE — the pure keyboard command machine (async-settlement-correct), the shared two-phase transfer-commit core, the DemoB host composition (chorded grammar, aria-live region, document-derived identity), the Neo.Main.windowFocus verb, and the L3 real-popup detach + cycle/cancel journey. Three integrated ACs remain, each materially large and each riding substrate that landed or moved this same day — they belong to ONE substantial successor, not micro tickets.
The Problem
Keyboard parity for the multi-window choreography is end-to-end or it is not parity. After the tranche, a keyboard user can detach a tab to a real popup, cycle targets with announced positions, commit into a live workspace, and cancel with zero mutation — but three legs of the graduated OQ8 disposition are not yet MOUNTED truth:
- The popup-origin RETURN. The advertised "return home is the same command" is machine-true (the cycle aimed at main, witnessed at the machine tier) but not mounted:
mountCrossWindowTarget() composes the popup host without the key routing + live-region surface, and a tear-out vessel receives its pane directly rather than a keyboard-addressable tab workspace. A focused popup item cannot yet initiate the command back to main.
- The shared-consumer visuals. The cycle highlight ships as a WCAG-paired outline class;
#15250's AC2 reads "same visuals as pointer hover" — the drag-affordance consumer family (DockPreview/DockDropIndicators, the #15207-delivered substrate, now closed). Integration means the keyboard candidate and the pointer hover render through one affordance model.
- The matrix-fallback witness. AC6: the command path witnessed ONCE as the documented fallback on a matrix-failed platform — gated on
#15245's measured platform defaults (G2, in flight).
The Architectural Reality
src/dashboard/DockKeyboardCommands.mjs — the machine is host-agnostic and already cycle-complete; the popup-origin return needs a HOST composition in the popup window (key routing + a live region + the seams), not machine changes.
apps/agentos/childapps/dockdemo/view/DemoBWorkspace.mjs — mountCrossWindowTarget() is the popup-host composition point; the main-window wiring (construct-time addDomListeners + the kbd-live-b child) is the template.
- The vessel question (a tear-out vessel hosts a bare pane, not a tabs workspace) intersects the
#15484 whole-stack-return grammar and the G4 family's vessel policy — sequencing may prefer landing after #15484.
Neo.Main.windowFocus + the modality tracker (#15466, delivered as PR #15467) give the return path its focus + arrival-modality discipline for free once composed.
The Fix
One PR (or a tightly-sequenced pair if #15484 moves the vessel grammar first): compose the keyboard surface into the popup host (routing, live region, seams bound to the popup workspace), route the return through the same cycle grammar, integrate the cycle highlight with the shared affordance consumer, and land the matrix-fallback witness once #15245's defaults exist.
Acceptance Criteria
Out of Scope
The delivered tranche (PR #15483) · the whole-stack return GESTURE (#15484, explicitly keyboard-excluded) · the vessel close policy (the G4 family's contract).
Related
Successor-of: #15250 (the tranche close; the narrowing record lives in its comment thread) · PR #15483 (the tranche) · #15484 (vessel-grammar sequencing) · #15245 (the fallback gate) · #15466/PR #15467 (the arrival-modality composition) · parent epic #15239.
Live latest-open sweep: latest 20 open at 2026-07-18T16:51Z; no equivalent (#15484 explicitly excludes the keyboard path — reviewer-V-B-A'd on PR #15483). A2A claim sweep: today's full traffic reviewed in-session; no competing claim on this scope.
Decision Record impact: none — composition of landed primitives under the accepted amendment.
Origin Session ID: 7157d21f-16c8-4b76-8aac-67e166deccca
Retrieval Hint: "keyboard parity completion popup-origin return shared affordance consumer matrix fallback witness"
Context
The A+FU successor from PR
#15483's review convergence (@neo-gpt-emmy's terminal disposition): that PR delivers#15250's command-machine + mounted detach/a11y TRANCHE — the pure keyboard command machine (async-settlement-correct), the shared two-phase transfer-commit core, the DemoB host composition (chorded grammar, aria-live region, document-derived identity), theNeo.Main.windowFocusverb, and the L3 real-popup detach + cycle/cancel journey. Three integrated ACs remain, each materially large and each riding substrate that landed or moved this same day — they belong to ONE substantial successor, not micro tickets.The Problem
Keyboard parity for the multi-window choreography is end-to-end or it is not parity. After the tranche, a keyboard user can detach a tab to a real popup, cycle targets with announced positions, commit into a live workspace, and cancel with zero mutation — but three legs of the graduated OQ8 disposition are not yet MOUNTED truth:
mountCrossWindowTarget()composes the popup host without the key routing + live-region surface, and a tear-out vessel receives its pane directly rather than a keyboard-addressable tab workspace. A focused popup item cannot yet initiate the command back to main.#15250's AC2 reads "same visuals as pointer hover" — the drag-affordance consumer family (DockPreview/DockDropIndicators, the#15207-delivered substrate, now closed). Integration means the keyboard candidate and the pointer hover render through one affordance model.#15245's measured platform defaults (G2, in flight).The Architectural Reality
src/dashboard/DockKeyboardCommands.mjs— the machine is host-agnostic and already cycle-complete; the popup-origin return needs a HOST composition in the popup window (key routing + a live region + the seams), not machine changes.apps/agentos/childapps/dockdemo/view/DemoBWorkspace.mjs—mountCrossWindowTarget()is the popup-host composition point; the main-window wiring (construct-timeaddDomListeners+ thekbd-live-bchild) is the template.#15484whole-stack-return grammar and the G4 family's vessel policy — sequencing may prefer landing after#15484.Neo.Main.windowFocus+ the modality tracker (#15466, delivered as PR#15467) give the return path its focus + arrival-modality discipline for free once composed.The Fix
One PR (or a tightly-sequenced pair if
#15484moves the vessel grammar first): compose the keyboard surface into the popup host (routing, live region, seams bound to the popup workspace), route the return through the same cycle grammar, integrate the cycle highlight with the shared affordance consumer, and land the matrix-fallback witness once#15245's defaults exist.Acceptance Criteria
windowFocusBoolean-admission discipline, announced).#15245's measured defaults).Out of Scope
The delivered tranche (PR
#15483) · the whole-stack return GESTURE (#15484, explicitly keyboard-excluded) · the vessel close policy (the G4 family's contract).Related
Successor-of:
#15250(the tranche close; the narrowing record lives in its comment thread) · PR#15483(the tranche) ·#15484(vessel-grammar sequencing) ·#15245(the fallback gate) ·#15466/PR#15467(the arrival-modality composition) · parent epic#15239.Live latest-open sweep: latest 20 open at 2026-07-18T16:51Z; no equivalent (
#15484explicitly excludes the keyboard path — reviewer-V-B-A'd on PR#15483). A2A claim sweep: today's full traffic reviewed in-session; no competing claim on this scope.Decision Record impact: none — composition of landed primitives under the accepted amendment.
Origin Session ID: 7157d21f-16c8-4b76-8aac-67e166deccca Retrieval Hint: "keyboard parity completion popup-origin return shared affordance consumer matrix fallback witness"