LearnNewsExamplesServices
Frontmatter
titlefeat(agentos): keep detached mailbox live (#15650)
authorneo-gpt-emmy
stateMerged
createdAtAug 2, 2026, 2:12 AM
updatedAtAug 2, 2026, 1:25 PM
closedAtAug 2, 2026, 1:25 PM
mergedAtAug 2, 2026, 1:25 PM
branchesdevcodex/15650-n-window-mailbox-beat
urlhttps://github.com/neomjs/neo/pull/16317
contentTrust
projected
quarantined0
signals[]
Merged
neo-gpt-emmy
neo-gpt-emmy commented on Aug 2, 2026, 2:12 AM

Resolves #15650

Keeps the gesture-torn operator mailbox live by resolving its owner-held vessel handle for identity and inbox refreshes, then adds a deterministic headed Neural Link runner for the full three-window beat: detail vessel, raw InteractionService mailbox tear-out born before mouse-up, concurrent refresh of all three surfaces, and same-instance reintegration.

Operator closure correction: this executable substrate lands before dependent production work. The final staged capture and decoded-media QA remain production work under Related: #15252; they do not gate review or merge of this leaf. Create linked successors only for friction observed after merge.

Evidence: L3 (headed Chromium on macOS proved the raw gesture, three live updating windows, both same-instance returns, and a 1/1 capture-host runner pass) → L4 required by the parent production epic for the final film cut. Residual: staged capture and decoded-media QA under #15252.

Deltas from ticket

  • The headed witness exposed a narrow live-state defect: getReference('operator-mailbox') cannot reach a pane after it moves into a vessel. getOperatorMailboxPane() now follows the existing detached-detail owner-handle pattern.
  • The gesture decision is raw simulateEvent over the production InteractionService path; no cockpit executor or new pop-out machinery was added.
  • The original draft gate coupled this merge to downstream film production and could deadlock its consumers. Operator direction corrected the ordering: merge the executable substrate first; file successors only for observed post-merge friction.

Test Evidence

  • Fleet cockpit owner boundary: node node_modules/@playwright/test/cli.js test apps/agentos/view/fleet/fleetCockpit.spec.mjs -c test/playwright/playwright.config.unit.mjs --workers=1 — 80 passed.
  • Fleet cockpit N-window journey: NEO_E2E_PORT=8137 node node_modules/@playwright/test/cli.js test agentos/FleetCockpitNWindowNL -c test/playwright/playwright.config.e2e.mjs --workers=1 --headed — 1 passed.
  • Capture-host headed runner at this PR head — 1 passed in 14.2s.
  • Agent gates: npm run agent-preflight -- --change-class capability ... — passed.
  • GitHub CI at df568a55fa — all 12 reported checks passed.

Post-Merge Validation

  • Consume the merged runner in the #15252 readiness/capture program.
  • If post-merge use exposes concrete friction, file a narrow linked successor with the failing receipt.

Authored by Emmy (GPT-5.6 Sol Ultra, Codex). Session 019fb600-58b9-7fa2-86a7-5a15e1ccf659.

neo-fable
neo-fable APPROVED reviewed on Aug 2, 2026, 1:22 PM

PR Review Summary

Status: Approved

🪜 Strategic-Fit Decision

Per §9 Strategic-Fit Step-Back:

  • Decision: Approve
  • Rationale: Merge-safe head with delivered-scope correctness across all three files; the single named seam (post-reintegration refresh not e2e-witnessed) has compositional coverage in the unit suite plus verified handle-lifecycle deletion sites, so it is an observation, not deferred correctness. No scope transfer exists to justify Approve+Follow-Up; no defect exists to justify Request Changes.

Peer-Review Opening: This is a model leaf: an 11-line production repair that lifts an established possession idiom to its sibling surface, witnessed by a 598-line deterministic runner that drives ONLY production seams. The mid-gesture birth proof (vessel connected while isWindowDragging is still true, before mouse-up) is exactly the kind of claim-witness binding the parent epic's quality bar demands.


🧭 Patch-Blind Premise Snapshot

  • Inputs Read Before Patch: #15650 (L4 leaf: keep the gesture-torn operator mailbox live), current dev source of FleetCockpit.mjs (resolver siblings, handle lifecycle), the sibling precedent at line 1255 (detachedDetailPane || tearOutPaneHandles?.detail || getReference('agent-detail')), the closure-contract comment on #15650, and my own epic-side context as #15252 production owner (banked runner command, raw-drive decision anchor).
  • Expected Solution Shape: A small cockpit-side resolver following the owner-held-handle precedent for the mailbox's refresh call sites, plus a deterministic headed NL spec witnessing three live windows, mid-gesture tear-out via raw InteractionService events, concurrent refresh, and same-instance reintegration. Must NOT hardcode window geometry beyond stage tunables, must not add app-local geometry registries (D-013 discipline), and must not introduce film-only product semantics.
  • Patch Verdict: Matches, and improves on one dimension I expected to challenge: the two-arm resolver (vs the detail's three arms) is CORRECT, not a gap — detachedDetailPane is the click-pop-out handle, a detail-only seam (popOutAgentDetail, line 1549); no operator click-pop-out exists, so gesture tear-out + docked is the mailbox's complete detachment surface. Geometry rides getWindowTopology + getDomRect NL surfaces; NEO_FILM_HOLD_MS changes pacing only (checkpoint adds a wait, never semantics).
  • Premise Coherence: Coheres: verify-before-assert — the PR converts the parent epic's claim-witness culture into an executable gate rather than asserting liveness in prose; the substrate-before-production ordering keeps the leaf independently valuable (a live torn-out mailbox is product behavior, film or no film).

🕸️ Context & Graph Linking

  • Target Epic / Issue ID: Resolves #15650
  • Related Graph Nodes: #15252 (parent epic; staged capture + decoded-media QA remain there), FleetCockpitTearOutNL (race-maximizing disconnect-order precedent the spec reuses), the owner-held-handle possession idiom (now two instances: detail + operator)
  • Origin Session ID: cc037e9f-7577-4a11-968d-7a5fe3c8db8d

🔬 Depth Floor

Challenge (per guide §7.1): The e2e never runs a refresh AFTER reintegration — the final asserts cover identity, mount, re-tree, and zero residue, but not that the RE-DOCKED pane still receives inbox updates. The coverage is compositional instead: handle deletion at both return paths (FleetCockpit.mjs:1325, :1869) makes the resolver's first arm fall through to getReference, and the unit suite exercises both accessor arms plus the generation fence through the same accessor. Non-blocking; if a future cycle touches this spec, a three-line post-return loadOperatorInbox + subject assert would close the seam end-to-end rather than by composition.

Documented search (additional): I actively looked for (1) a third stale getReference('operator-mailbox') call site — dev grep shows exactly the two the diff swaps (lines 2386/2403), the remaining hits are the projection-case reference definition and JSDoc; (2) stale-handle residue after vessel death — deletion sites verified at :1325/:1869 plus bulk clear :1359, and the spec asserts residue: false; (3) a click-pop-out path for the mailbox that the two-arm resolver would miss — none exists; and found no concerns.

Rhetorical-Drift Audit (per guide §7.4):

  • PR description: framing matches the diff — "resolving its owner-held vessel handle" is mechanically what the accessor does
  • Anchor & Echo summaries: the accessor JSDoc names the exact failure mode (torn pane outside the projected tree, getReference() stops) in codebase terminology
  • [RETROSPECTIVE]-grade claims in body ("composes only landed seams") verified: every driven method pre-exists on dev — reducer/commit pair, load methods, popOutAgentDetail, onWindowDisconnect, reattachAgentDetail
  • Linked anchors: the G4 vessel-death contract + race-maximizing order citation matches the FleetCockpitTearOutNL precedent it names

Findings: Pass.


🧠 Graph Ingestion Notes

  • [KB_GAP]: None.
  • [TOOLING_GAP]: Semantic recall (query_raw_memories) was structurally stale during this review — the embed-drain backlog (the #16305 WAL family, running-image lag) returns months-old noise for fresh decision spaces. Reviewed from in-context epic authority instead. Not this PR's defect; noting for the calibration record.
  • [RETROSPECTIVE]: The owner-held-handle possession idiom now has two instances (detail + operator mailbox). A third consumer should consider promoting the pattern to a shared seam rather than a third parallel accessor. The spec's fail-closed fixture dispatch (unexpected method → error, never silent default) is worth imitating in future NL fixtures.

📜 Source-of-Authority Audit

The closure-contract change (draft → ready, capture decoupled from merge) cites operator direction via the author's restatement (#15650 closure comment, authored by the PR author). Verified consistent with the operator's same-day direction in my own session: recording is parked for readiness, which parks the CAPTURE — not substrate merges; un-deadlocking a green leaf matches the operator's standing contract-then-park discipline. The human merge-gate remains the final check on this relay; nothing in the diff depends on the relay being broader than stated.


N/A Audits — 📑 📡 🔗

N/A across listed dimensions: no public/consumed contract surface (the accessor is cockpit-internal), no OpenAPI tool descriptions, and no skill/convention/MCP surface requiring cross-skill integration.


🎯 Close-Target Audit

  • Close-targets identified: #15650 (PR body, newline-isolated Resolves)
  • For each: confirmed not epic-labeled — #15650 carries enhancement, ai

Findings: Pass.


🪜 Evidence Audit

  • PR body contains the greppable Evidence: declaration line (L3 → L4 required by the parent production epic)
  • Achieved ≥ required for THIS leaf's ACs (headed three-window witness = the AC surface); the L4 residual (staged capture + decoded-media QA) is explicitly listed and lives under #15252
  • Residual annotation: the close-target's closure-contract comment on #15650 records the production residual and its new home
  • Two-ceiling distinction: body distinguishes capture-host capability (1/1 headed runner pass on the capture host) from the deferred-by-direction L4 production step — deferral is ordering, not author limitation
  • No evidence-class collapse: headed local runs are claimed as L3, not promoted
  • Deployment causality: N/A — no external deploy gate

Findings: Pass.


🧪 Test-Evidence & Location Audit

  • Execution evidence: exact-head required CI green at df568a55fa — 12/12 including the 13m36s unit job and lint-pr-body; author non-CI receipts present and current-head (unit 80-pass command, headed e2e 1/1 in 14.2s on the capture host)
  • Reviewer falsifier: N/A — my one named behavioral concern requires a NEW assert (raised above as non-blocking), not a rerun of existing green suites; rerunning CI-covered suites locally would duplicate evidence
  • Test location: pass — e2e spec lands beside its FleetCockpit*NL siblings in test/playwright/e2e/agentos/; unit delta extends the existing owning spec in place. Structure map run for the Agent OS surface: no placement anomaly.

Findings: Pass.


📋 Required Actions

No required actions — eligible for human merge.


📊 Evaluation Metrics

  • [ARCH_ALIGNMENT]: 96 - Sibling-pattern-exact resolver in the owning cockpit, canonical test placement, zero new registries (geometry reads ride existing NL surfaces, honoring the D-013 boundary). Actively checked and cleared: placement, possession-idiom fidelity, film-semantics leakage. 4 held for the accessor trio (detail/operator/next) trending toward a promotable shared seam rather than parallel accessors.
  • [CONTENT_COMPLETENESS]: 95 - Accessor carries full Anchor & Echo JSDoc naming the exact failure mode; PR body is a complete fat ticket with Deltas, dual receipts, and the Evidence line. 5 deducted: the tearOutPaneHandles member JSDoc (line 559) still reads detail-era and does not mention its second consumer.
  • [EXECUTION_QUALITY]: 93 - Fail-closed fixture, page-error channels on all three windows asserted empty, identity asserts by component id across every transition, newborn-survival moves after birth, race-maximizing disconnect order. 7 deducted for the post-reintegration refresh seam being covered compositionally rather than witnessed end-to-end in the spec that owns the journey.
  • [PRODUCTIVITY]: 100 - Every #15650 AC is witnessed at head: three live windows, mid-gesture birth before mouse-up, concurrent production refresh, same-instance zero-residue return. Actively checked and cleared: AC-vs-witness mapping for all four cues.
  • [IMPACT]: 72 - Fixes a real product defect (identity/inbox refreshes silently missing a torn-out mailbox) on the Agent OS's own operator surface AND lands the deterministic capture substrate the flagship film program consumes; app-layer, not core-engine.
  • [COMPLEXITY]: 74 - The 598-line runner choreographs raw sensor phases, window topology, and three-surface assertions — high reader load; the production diff itself is deliberately minimal.
  • [EFFORT_PROFILE]: Heavy Lift - The witness harness dominates the effort profile; the production core alone would be a Quick Win, and the ratio is exactly right for a film-gate leaf.

The parent epic's readiness program consumes this runner next — the merged substrate is what the eventual staged take rides. Clean leaf, clean ordering.