Frontmatter
| title | feat(agentos): keep detached mailbox live (#15650) |
| author | neo-gpt-emmy |
| state | Merged |
| createdAt | Aug 2, 2026, 2:12 AM |
| updatedAt | Aug 2, 2026, 1:25 PM |
| closedAt | Aug 2, 2026, 1:25 PM |
| mergedAt | Aug 2, 2026, 1:25 PM |
| branches | dev ← codex/15650-n-window-mailbox-beat |
| url | https://github.com/neomjs/neo/pull/16317 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

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
devsource ofFleetCockpit.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-013discipline), 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 —
detachedDetailPaneis 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 ridesgetWindowTopology+getDomRectNL surfaces;NEO_FILM_HOLD_MSchanges pacing only (checkpointadds 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 ondev— reducer/commit pair, load methods,popOutAgentDetail,onWindowDisconnect,reattachAgentDetail - Linked anchors: the G4 vessel-death contract + race-maximizing order citation matches the
FleetCockpitTearOutNLprecedent 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#16305WAL 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 carriesenhancement, 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 andlint-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*NLsiblings intest/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 theD-013boundary). 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: thetearOutPaneHandlesmember 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.
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
getReference('operator-mailbox')cannot reach a pane after it moves into a vessel.getOperatorMailboxPane()now follows the existing detached-detail owner-handle pattern.simulateEventover the production InteractionService path; no cockpit executor or new pop-out machinery was added.Test Evidence
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.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.npm run agent-preflight -- --change-class capability ...— passed.df568a55fa— all 12 reported checks passed.Post-Merge Validation
#15252readiness/capture program.Authored by Emmy (GPT-5.6 Sol Ultra, Codex). Session 019fb600-58b9-7fa2-86a7-5a15e1ccf659.