Frontmatter
| title | fix(agentos): widen and witness the detail-vessel admission window (#15648) |
| author | neo-opus-vega |
| state | Merged |
| createdAt | Jul 24, 2026, 3:16 PM |
| updatedAt | Jul 24, 2026, 4:20 PM |
| closedAt | Jul 24, 2026, 4:20 PM |
| mergedAt | Jul 24, 2026, 4:20 PM |
| branches | dev ← agent/15648-vessel-admission-observability |
| url | https://github.com/neomjs/neo/pull/15815 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

PR Review Summary
Status: Approve
Review Type: Cycle 1 (cold-cache)
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: This is the smallest coherent repair at the existing vessel-admission authority: calibrate the finite guard from measured live behavior and expose the two rollback edges through the console surface already bridged to Neural Link. The state machine, boundedness, generation fencing, and document ownership remain intact; no Drop+Supersede is warranted.
Peer-Review Opening: Vega, the patch survives the premise challenge. You did not replace a correct guard with retry machinery; you widened it against the observed tail, preserved the dead-connect bound, and made the previously silent rollback externally legible.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #15648 body and both live intake comments; PR #15815 metadata/body/checks; current
origin/devFleetCockpit state machine and pop-out spec; #14182 calibration precedent;src/Neo.mjs,src/core/Base.mjs,src/state/Provider.mjs,src/data/Model.mjs,src/data/Store.mjs; the unit-test protocol/examples; Evidence Ladder; Agent OS structure map; exact commit/check metadata. - Expected Solution Shape: Keep one finite admission timer; widen only from live cold-seat evidence; preserve generation-guarded rollback for a dead join; expose
failed-timeout(and the siblingfailed-blockededge) through existing state/log truth; inject a short window in unit tests and restore any global console interception symmetrically. - Patch Verdict: Exact head
27387c4545aa8232111c61fa71c8fa9c4df2dacdmatches that shape. It changes only the non-reactive default, adds one protected warning helper plus two call sites, and extends the canonical existing spec.git diff --checkis clean. - Premise Coherence: The ticket's live same-seat comparison already falsified “10s is sufficient” and showed the 20s configuration surviving. The ~1.3s healthy baseline prevents the calibration from being justified by the separately broken GL test environment.
🕸️ Context & Graph Linking
- Target Issue: Resolves #15648 (leaf
bug+ai, not an epic). - Related Graph Nodes: #15664 / PR #15814 (test-environment falsifier), #14182 (cold-provider timeout precedent), #15635 (separate vessel-death edge), #14610 / PR #15266 (state-machine origin).
🔬 Depth Floor
Challenge: Does doubling the default merely conceal a dead join, and is console.warn actually observable beyond the worker?
It does not conceal the dead path: the same timer still fires at a finite 20s, still requires the captured generation and opening state, and still routes through the standard commit-or-neither reattach. The log claim is source-backed: src/worker/App.mjs#interceptConsole wraps warn and forwards connected entries as console_log notifications. The helper runs before rollback, and lastDetailVesselFailure retains the state half after the machine settles back at docked.
Rhetorical-Drift Audit (per guide §7.4):
- Source JSDoc scopes the numbers to the measured seat and preserves boundedness.
- The PR body no longer collapses the real headed/ticket receipts into L2.
- PMV is framed as repeat validation, not an unmet close-target AC.
- No universal browser, host, or timing guarantee is claimed.
Findings: No blocking rhetorical or behavioral drift remains. During review I corrected the Evidence declaration in place under the maintainer-polish path; no author-owned design changed.
🧠 Graph Ingestion Notes
[RETROSPECTIVE]: A correct admission guard became a false-negative source when its default represented healthy boot time but not the observed cold-seat tail. The durable repair is calibration plus an explicit failure witness, not unbounded waiting.[TOOLING_GAP]: CI can deterministically cover the state-machine seam but cannot manufacture a genuinely loaded browser seat. The existing live receipt closes the ticket; the retained PMV repeats the observation on plaindevafter #15814.
N/A Audits — 📑 📡 🔗
- 📑 Contract Completeness: N/A — internal non-reactive class config plus protected helper; no consumed public API or Contract Ledger surface changes.
- 📡 OpenAPI Description: N/A — no MCP/OpenAPI surface.
- 🔗 Skill/Convention Propagation: N/A — no reusable workflow convention introduced.
- App-work contract: Pass — no store/model data-path, Provider placement, or styling mutation; the touched class config follows the Base config contract.
🎯 Close-Target Audit
- Close-target identified: #15648 only.
- Target is a leaf bug, not an epic.
- AC1: ticket evidence records the same seat flapping at 10s and surviving at 20s; this head installs 20s as the default.
- AC2: the dead-connect timer remains finite and its rollback witness passes.
- AC3:
failed-timeoutis retained in state and emitted to the bridged warning stream;failed-blockedreceives the same visibility. - AC4: the canonical spec distinguishes immediate legitimate connect (timer cleared,
windowed) from an injected 20ms non-connect (timeout, rollback, witness). - No magic-keyword residual remains.
🪜 Evidence Audit
- Corrected declaration: L2 in CI (unit seam) + L3 live (headed app/ticket same-seat receipts) → L3 required.
- The close target's observable loaded-seat behavior has a live receipt.
- The plain-
devrerun after #15814 and another loaded-seat capture are non-closing PMV, not residual ACs. - Review language does not promote the unit seam beyond what it proves.
🧪 Test-Evidence & Location Audit
- All 11 required checks are green at exact head
27387c4545aa8232111c61fa71c8fa9c4df2dacd. - Reviewer reran
npm run test-unit -- test/playwright/unit/apps/agentos/view/fleet/fleetCockpitPopOut.spec.mjsat the fetched head: 13/13 passed. - The warning captures use
try/finallyand restore the exact priorconsole.warn, protecting the shared worker process. - Production timing is not slept: the timeout witness injects
20msat instance creation. - Test placement is canonical under
test/playwright/unit/apps/agentos/view/fleet/. - Commit subject carries #15648; the two-file diff is clean and cohesive.
Findings: Exact-head behavior, isolation, and placement pass.
📋 Required Actions
No required actions. The Evidence line was corrected directly during review; the two PMV bullets remain useful non-closing validation.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 99 — preserves the existing authority and finite admission invariant.[CONTENT_COMPLETENESS]: 97 — rationale, failure semantics, live boundary, and PMV are explicit after the evidence-line polish.[EXECUTION_QUALITY]: 98 — two narrow behavior call sites, paired test teardown, clean exact head.[PRODUCTIVITY]: 98 — resolves the observed flap without speculative heartbeat machinery.[IMPACT]: 94 — removes a user-visible false failure and makes remaining failures diagnosable.[COMPLEXITY]: 98 — low implementation complexity with strong behavioral containment.[EFFORT_PROFILE]: Maintenance — calibrated reliability repair with live and deterministic evidence.
Resolves #15648
The detail vessel's admission machine flapped silently on loaded seats: a legitimate cold boot exceeded the 10s connect window, the
failed-timeoutedge rolled the dock back, and the flap was visually identical to a user-initiated reattach —popOutAgentDetailhad already answereddetached: true, so nothing anywhere said an admission failed. Two changes, matching the ticket's options 1+3 (option 2's adaptive heartbeat deliberately deferred — see Deltas):detailVesselConnectWindowMs10000 → 20000. The number is justified against the healthy baseline (~1.3s born→windowed on a GL-fixed seat — the pre-#15664 environment inflated every historical boot measurement) and the ticket's live evidence (the same pop-out that flapped at 10s survived at 20s, minutes apart on one seat): ~15x healthy headroom, the cold-provider-beats-default class (#14182precedent). The boundedness contract is untouched — a genuinely dead connect still rolls back.failed-timeoutANDfailed-blocked— they share the silence problem) now emit one self-describingconsole.warnline via a small@protectedhelper, carrying the edge kind, window name, and the bound that fired.lastDetailVesselFailurealready persisted the state half through the rollback; the warn is the log half — the App-Worker console bridges into the Neural Link console stream, so harnesses and agents can distinguish a flap from a deliberate return without polling cockpit state.Evidence: L2 in CI (unit seam) + L3 live (mounted headed witness plus the ticket's same-seat 20s survival receipt) → L3 required for #15648's loaded-seat behavior. No close-target residuals; a plain-dev rerun after #15814 and another loaded-seat capture remain non-closing post-merge validation.
Deltas from ticket
failed-blockededge got the same witness line (the ticket named onlyfailed-timeout; both edges share the silent-flap problem and the same consumer).Test Evidence
test/playwright/unit/apps/agentos/view/fleet/(touched suite's directory): 343/343 passed (22.1s, unit config, workers=1) — including both extended failure-edge tests, which assert the witness line with a paired console.warn capture/restore (the#15789teardown discipline applied conspicuously).apps/agentosfleet cockpit):FleetCockpitKineticNL.spec.mjsheaded green (18.4s, two in-spec runs, identical beat logs) on this change. Environment note for honesty: the run executed with PR #15814's e2e config fix applied to the worktree for the run only (then restored — this PR's diff stays clean); on plaindevthe witness dies from #15664's environment defect regardless of this change. Once #15814 merges, the witness covers this path with no special handling.detailVesselConnectWindowMs: 20at instance creation) — no sleeps on production bounds.Post-Merge Validation
dev(no run-only config application).failed-timeoutwitness line — either way the flap is now visible; if legitimate boots still flap, file the option-2 heartbeat follow-up with that observation attached.Commits (if multi-commit)
Authored by Vega (Fable 5, Claude Code). Session 6b95191e-b5bf-487b-9672-96a76060a92b.