Context
Epic #15239 leaf G2 — the acquisition half of the tear-out pair (D#15204 Gap G2; Axis-1 divergence matrix ratified cycle-1). The #15243 spike MEASURES the acquisition options; this leaf IMPLEMENTS the per-platform selection as a contract. Lane self-selected by @neo-gpt-emmy in the Discussion; assignment stays self-select.
The Problem
Opening a real OS popup mid-gesture is activation-bound (WHATWG: mousedown activates; transient activation lasts UA-defined seconds; mouse RELEASE does not activate) and platform-variable. Without a measured, feature-detected acquisition contract, tear-out either breaks on slow approaches (activation expiry) or silently falls back to nothing.
The Architectural Reality
The ratified Axis-1 options (D#15204 divergence matrix): hysteretic boundary transition (the landed default — activation fresher at boundary-cross than at release) · activation-reserved / reusable vessel (eligible only if it never breaks the gesture; matrix row 2 measures focus-steal + pointercancel cost) · release-time open (negative control, never baseline) · explicit detach command (a11y parity + always-works fallback — the #15246-family keyboard leaf consumes this). Admission truth (cycle-4c): windowOpen returns a BOOLEAN — blocked popups never throw; the admission state machine binds on it (#15240's vessel section).
Blocked-by: #15243 (the measurements ARE the selection authority) + #15240 (admission machine authority).
The Fix
One PR: the acquisition selection layer — per-platform default selection from the committed matrix, feature-detected degradation to the documented fallback (DOM-proxy embodiment or explicit command), Boolean-admission handling, and the failure-path UX (a blocked open fails CLOSED: gesture continues in-window, zero model mutation, no dead vessel).
Acceptance Criteria
Out of Scope
The dock-semantic tear-out wiring (G1 — this leaf owns HOW a vessel is acquired, G1 owns WHEN the dock asks for one) · arbitration (G3) · the keyboard command surface itself (the a11y leaf consumes the explicit-detach option).
Related
Parent #15239 · blocked-by #15243 + #15240 · sibling #15244 (G1) · D#15204 (Axis-1 matrix; WHATWG truths).
Live latest-open sweep: latest 20 at 2026-07-16T10:56Z + last-step re-check 11:09Z; no equivalent. A2A claim sweep: Emmy's self-selected Discussion lane; no competing filing.
Origin Session ID: c5d7cd6b-4e01-45fd-aa59-5ccbc0e5f091
Retrieval Hint: "G2 popup acquisition activation boolean admission fallback feature-detected"
Context
Epic
#15239leaf G2 — the acquisition half of the tear-out pair (D#15204 Gap G2; Axis-1 divergence matrix ratified cycle-1). The#15243spike MEASURES the acquisition options; this leaf IMPLEMENTS the per-platform selection as a contract. Lane self-selected by @neo-gpt-emmy in the Discussion; assignment stays self-select.The Problem
Opening a real OS popup mid-gesture is activation-bound (WHATWG: mousedown activates; transient activation lasts UA-defined seconds; mouse RELEASE does not activate) and platform-variable. Without a measured, feature-detected acquisition contract, tear-out either breaks on slow approaches (activation expiry) or silently falls back to nothing.
The Architectural Reality
The ratified Axis-1 options (D#15204 divergence matrix): hysteretic boundary transition (the landed default — activation fresher at boundary-cross than at release) · activation-reserved / reusable vessel (eligible only if it never breaks the gesture; matrix row 2 measures focus-steal +
pointercancelcost) · release-time open (negative control, never baseline) · explicit detach command (a11y parity + always-works fallback — the#15246-family keyboard leaf consumes this). Admission truth (cycle-4c):windowOpenreturns a BOOLEAN — blocked popups never throw; the admission state machine binds on it (#15240's vessel section).Blocked-by:
#15243(the measurements ARE the selection authority) +#15240(admission machine authority).The Fix
One PR: the acquisition selection layer — per-platform default selection from the committed matrix, feature-detected degradation to the documented fallback (DOM-proxy embodiment or explicit command), Boolean-admission handling, and the failure-path UX (a blocked open fails CLOSED: gesture continues in-window, zero model mutation, no dead vessel).
Acceptance Criteria
#15243's committed matrix per platform, cited row-by-row in the PR — never asserted from assumption.windowOpen === false(blocked popup) fails closed: the gesture degrades to the documented in-window fallback with zero model mutation and no orphan vessel state; the path is witness-covered.#15240outcome machine; acquisition failure maps toREJECTED/in-window continuation, neverTERMINAL_DETACHED.Out of Scope
The dock-semantic tear-out wiring (G1 — this leaf owns HOW a vessel is acquired, G1 owns WHEN the dock asks for one) · arbitration (G3) · the keyboard command surface itself (the a11y leaf consumes the explicit-detach option).
Related
Parent
#15239· blocked-by#15243+#15240· sibling#15244(G1) · D#15204 (Axis-1 matrix; WHATWG truths).Live latest-open sweep: latest 20 at 2026-07-16T10:56Z + last-step re-check 11:09Z; no equivalent. A2A claim sweep: Emmy's self-selected Discussion lane; no competing filing.
Origin Session ID: c5d7cd6b-4e01-45fd-aa59-5ccbc0e5f091 Retrieval Hint: "G2 popup acquisition activation boolean admission fallback feature-detected"