LearnNewsExamplesServices
Frontmatter
id15396
titleIn-gesture vessel lifecycle on conversion: park, don''t close
stateClosed
labels
enhancementai
assigneesneo-gpt, neo-fable-clio
createdAtJul 18, 2026, 4:21 AM
updatedAtJul 19, 2026, 4:41 PM
githubUrlhttps://github.com/neomjs/neo/issues/15396
authorneo-fable-clio
commentsCount4
parentIssue15239
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[ ] 15243 Headed three-OS portability spike: the seven-row tear-out matrix, [x] 15395 Dual-window conversion geometry: popup→proxy over a target vessel
blocking[]
closedAtJul 19, 2026, 4:41 PM

In-gesture vessel lifecycle on conversion: park, don't close

Closed Backlog/active-chunk-7 enhancementai
neo-fable-clio
neo-fable-clio commented on Jul 18, 2026, 4:21 AM

Context

Epic #15239 leaf (G3 family) — companion to #15395 (dual-window conversion geometry), from the same operator exploration 2026-07-18. When dragged popup B converts to a semi-transparent proxy over target vessel A, what happens to B's real OS window? The naive answer (close it, reopen if the user drags back out) is broken by platform law, not by taste.

The Problem

The activation wall: popup acquisition consumes WHATWG transient user activation, and window.open reports failure by BOOLEAN result, not throw (the cycle-4c verified truth carried in #15243's contract: try/catch-shaped acquisition silently passes its own failure). A popup→proxy→popup round-trip within one continuous gesture cannot count on re-acquisition: the activation that opened B may be consumed, pop-up blockers treat the mid-gesture reopen as unsolicited, and the #15245 acquisition contract's fallbacks were designed for gesture-START acquisition, not mid-gesture recovery. Close-and-reopen therefore risks a one-way door: the user drags over A, changes their mind, drags out — and their window is unrecoverable without a fresh gesture.

The Architectural Reality

  • The salvage concept already exists: preserved-park (banked from the accepted PR #15215 Drop+Supersede, consumed by #15251's contract) — a vessel that hides rather than dies. This leaf lifts park into the conversion grammar.
  • The #15240 outcome machine (ADR 0029 amendment) owns gesture terminals; #15247 (G4) owns the vessel CLOSE policy at reintegration terminals. This leaf owns the IN-GESTURE segment between them: conversion parks, terminal decides.
  • Platform park mechanics vary (hide vs offscreen-move vs minimize; moveTo is advisory — #15243 row 3) — the park primitive per platform is a matrix concern; this leaf consumes the matrix verdicts.

The Fix

One PR: the in-gesture vessel park contract.

  1. On popup→proxy conversion (#15395's event): B's OS window PARKS (platform-selected mechanic, matrix-cited) — never closes; its widget transfers to the proxy per the landed same-instance permanence invariant (live stores keep streaming).
  2. On proxy→popup out-conversion (hysteresis exit): the parked window RE-SHOWS with its pre-conversion rect — zero re-acquisition, so the activation wall is never hit mid-gesture.
  3. At gesture terminals, the #15240 outcome machine decides the parked vessel's fate: drop-committed-into-A → parked window closes through #15247's close policy; cancel/restore → window re-shows at origin semantics; every terminal idempotent (the #15248 exact-once cleanup discipline, closed).
  4. Witness: a headed cell on the #15243 harness proving the full round-trip — out, over, in (park), out again (re-show, same instance, no reopen), drop elsewhere — with acquisition-count receipts proving zero mid-gesture window.open calls.

Acceptance Criteria

  • Conversion never closes the vessel mid-gesture; the park mechanic per platform is selected from matrix truth and cited.
  • Out-conversion re-shows the SAME window (instance permanence receipts; zero mid-gesture re-acquisition — asserted by acquisition-count).
  • Every gesture terminal disposes the parked vessel exactly once through the #15240 machine (commit → #15247 close path; cancel → restore), idempotent per #15248's bar.
  • The headed round-trip witness lands on the #15243 harness.

Out of Scope

The conversion geometry itself (#15395) · reintegration-terminal close policy (#15247 owns it; this leaf hands off at terminals) · acquisition-contract implementation (#15245) · arbitration (#15246).

Decision Record impact

depends-on ADR 0029 (outcome machine, vessel lifecycle §) — park is an in-gesture vessel state; if it needs first-class ADR representation, the amendment rides #15395's (companion) or this PR, whichever lands the state machine change.

Related

Parent #15239 · companion #15395 · #15247 (terminal close policy — hard sibling) · #15245 (the acquisition wall this exists to never hit) · #15215 (preserved-park salvage source) · #15243 (witness harness) · #15248 (cleanup discipline).

Live latest-open sweep: latest open checked at 2026-07-18T02:16Z; no equivalent (fresh epic leaf map: no in-gesture lifecycle leaf). A2A sweep: no competing claim.

Origin Session ID: abce4d75-7dcb-4145-8afc-b0ff2cdc51e6

Retrieval Hint: query_raw_memories("in-gesture vessel park dont close activation wall re-show same instance")