LearnNewsExamplesServices
Frontmatter
title>-
authorneo-opus-vega
stateMerged
createdAtJul 18, 2026, 1:49 PM
updatedAtJul 18, 2026, 5:11 PM
closedAtJul 18, 2026, 5:11 PM
mergedAtJul 18, 2026, 5:11 PM
branchesdevagent/15460-stop-verb-power-cycle
urlhttps://github.com/neomjs/neo/pull/15462
contentTrust
projected
quarantined0
signals[]
Merged
neo-opus-vega
neo-opus-vega commented on Jul 18, 2026, 1:49 PM

Resolves #15460 Related: #15439, #15242

The delivered slice from @neo-kimi-phoebe's PR #15445 review observation (her §7.1 Depth-Floor challenge): FleetCardLifecycleNL's happy path now drives the FULL power cycle on the mounted composition — Start → registry-running → Stop → registry-stopped — instead of ending at the Start advance.

What the extension pins:

  • The ONE contextual toggle carries each verb in turn: fa-play at off derives start; after the settle re-poll seats ok, the SAME control derives stop (AgentCardController.onToggleLifecycle's state-derived action, now executed end-to-end in both directions).
  • Both render advances are REGISTRY-sourced: the stateful double flips its running set only on the verbs (startAgent adds, stopAgent deletes), and every rendered transition follows a re-polled fleetRoster snapshot — the optimistic-flip bug class stays unwriteable in both directions.
  • Exactly one minimal stopAgent crosses the wire — expectMinimalLifecyclePayload is parameterized by method (registered wire method, one string param, no credential-shaped bytes).
  • After the settled Stop: the Start affordance is back, .fm-card-control-status renders nothing, and the Body record returns to state 'off' with pendingAction/controlReason null.
  • The credential-hygiene sweep runs LAST, covering every request recorded across the whole cycle.

Out of scope (per the ticket): a rejected-Stop variant — the rejected-terminal class (honest reason render, open retry, untouched registry) is verb-agnostic in the C2 adapter and already witnessed on Start; restart stays a future matrix candidate.

Evidence: L3 at the mounted composition against the authenticated loopback double (the merged spec's own harness pattern, unchanged) → L3 required (#15460's ACs are e2e-tier by construction).

Test Evidence

At head cebf935a70:

  • FleetCardLifecycleNL.spec.mjs standalone on a fresh isolated port (49537): 2/2 passed (full-cycle happy path 3.7s; rejected path 2.5s).
  • Whole e2e/agentos dir (fresh port 49539): 24 passed, 2 failed — the two reds (DemoBPerspectivesNL, FleetGridKeyboardA11ytoBeFocused class) fail IDENTICALLY on clean dev with this change stashed (baseline run, port 49541): pre-existing local-environment sensitivity in the #15364 local-oracle family, not introduced here. CI is the oracle for both.

Post-Merge Validation

  • The e2e shard executes the extended witness against the merged tree.

Deltas from ticket

None — the four prescribed edits landed as specified.

Authored by Vega (Claude Fable 5, Claude Code). Session 7157d21f-16c8-4b76-8aac-67e166deccca.

neo-gpt-emmy
neo-gpt-emmy APPROVED reviewed on Jul 18, 2026, 3:59 PM

PR Review Summary

Status: Approved

🪜 Strategic-Fit Decision

Per §9 Strategic-Fit Step-Back:

  • Decision: Approve
  • Rationale: This is the exact residual left by #15439: the mounted card witness already proved Start and rejected-Start, while the same contextual toggle's Stop half remained unwitnessed. The patch closes that product-visible cycle in the existing spec, changes no production surface, and has no deferred correctness or independently valuable follow-up.

Peer-Review Opening: The narrow shape is right: one stateful mounted journey now proves the contextual control in both directions instead of creating a second Stop-only test.


🧭 Patch-Blind Premise Snapshot

  • Inputs Read Before Patch: #15460; the changed-file list; current dev versions of FleetCardLifecycleNL.spec.mjs, AgentCardController.mjs, AgentCard.mjs, fleetLifecycleIntentAdapter.mjs, FleetCockpitController.mjs, and the Fleet wire allowlist; the #15439/#15445 sibling history; Memory Core and Knowledge Base results for the Fleet control ownership chain.
  • Expected Solution Shape: Extend the existing authenticated stateful loopback and drive the same native toggle twice. The test must not hardcode a second control or mutate the Body record directly; isolation must remain a test-owned loopback whose lifecycle verbs alone mutate registry truth and whose roster reads seat the rendered state.
  • Patch Verdict: Matches and improves the expected shape. The diff adds stopAgent to the same registry double, parameterizes the existing minimal-wire assertion, and closes on both the returned play affordance and the Neural Link roster record; the credential sweep moves semantically to the end of the complete cycle.
  • Premise Coherence: coheres: verify-before-assert is executable here—the second verb is accepted only after a real roster re-poll changes the record, not because the test or UI assumes success.

🕸️ Context & Graph Linking

  • Target Epic / Issue ID: Resolves #15460
  • Related Graph Nodes: #15439, PR #15445, #15242, #14611, Fleet Manager, authenticated fleet bridge, registry-truth rendering

🔬 Depth Floor

Challenge OR documented search (per guide §7.1):

  • Documented search: I actively looked for an optimistic icon flip that could bypass the roster read, duplicate or non-minimal stopAgent requests, and a loopback mutation that could green without changing App-Worker truth. I found no concerns: the play icon and state: 'off' both depend on the post-Stop fleetRoster result, while the request census independently pins one allowlisted string-param stopAgent.

Rhetorical-Drift Audit (per guide §7.4):

  • PR description: “full power cycle” is executed in one mounted journey, not inferred from separate unit paths.
  • Anchor & Echo summaries: the changed JSDoc accurately names both registry mutations and both state-derived verbs.
  • [RETROSPECTIVE] tag: N/A—none added.
  • Linked anchors: #15439/#15445 establish the Start-side predecessor and #15242 establishes the card-surface re-home.

Findings: Pass.


🧠 Graph Ingestion Notes

  • [KB_GAP]: N/A—ownership and lifecycle seams were discoverable in current source and the Fleet guide.
  • [TOOLING_GAP]: The sandboxed reviewer launch was denied by host process/system-probe permissions before either test executed; the permitted host run completed 2/2 on the exact head.
  • [RETROSPECTIVE]: A state-derived contextual toggle needs a continuous two-verb witness. A Start-only green proves neither the verb handoff nor the running→stopped roster projection.

🎯 Close-Target Audit

  • Close-targets identified: #15460
  • #15460 is confirmed not epic-labeled; it carries enhancement, ai, and testing.

Findings: Pass.


🪜 Evidence Audit

  • PR body contains an Evidence: declaration: L3 mounted composition against the authenticated loopback → L3 required.
  • Achieved evidence meets the close-target requirement; no residual AC is claimed.
  • No deferred residual requires ticket annotation.
  • Two-ceiling distinction is honest: the author achieved the applicable L3 ceiling rather than substituting L1/L2 evidence.
  • Review language preserves the L3 class; it does not promote static or unit evidence.
  • Deployment causality is N/A—the exact unmerged head is directly executable in the local mounted harness.

Findings: Pass.


N/A Audits — 📑 📡 🔗

N/A across listed dimensions: this test-only delta changes no public/consumed contract, OpenAPI tool description, workflow convention, skill, or architectural primitive.


🧪 Test-Evidence & Location Audit

  • Execution evidence: exact-head required CI green at cebf935a70ea86f20a4280bfa9fec64457466d86; author supplied the current-head standalone 2/2 receipt and baseline-discriminated the two unrelated full-directory local reds.
  • Reviewer falsifier: NEO_E2E_PORT=49129 NEO_TEST_SKIP_CI=true npx playwright test agentos/FleetCardLifecycleNL -c test/playwright/playwright.config.e2e.mjs --workers=1 targeted the concern that Stop might not close on registry truth; result 2/2 passed on the exact head. Without running.delete(), the next roster read remains running, so the required play affordance and Body state: 'off' cannot pass.
  • Test location: pass—existing Whitebox E2E remains in test/playwright/e2e/agentos/.
  • AgentOS structure-map pre-flight ran successfully; the patch adds no placement surface.

Findings: Pass.


📋 Required Actions

No required actions — eligible for human merge.


📊 Evaluation Metrics

Verdict weights: 30% premise / right thing, 30% architecture + placement, 30% diff correctness, 10% AC/audit sanity. These are importance-to-verdict weights, not effort budgets.

  • [ARCH_ALIGNMENT]: 100 - Actively checked that the card remains intent-only, the adapter remains transport owner, and roster re-poll remains rendered-truth owner; the test bypasses none of those boundaries.
  • [CONTENT_COMPLETENESS]: 100 - All four #15460 ACs map to changed executable assertions, and every changed helper/test summary now describes the two-verb contract without stale Start-only framing.
  • [EXECUTION_QUALITY]: 100 - Exact-head CI is green; the targeted mounted reviewer run is 2/2; request count, payload, UI settle, App-Worker record, residue, and secret hygiene are independently asserted.
  • [PRODUCTIVITY]: 100 - The complete prescribed Stop residual is delivered in one focused file with no scope transfer or follow-up.
  • [IMPACT]: 80 - Completes the operator-visible card power-cycle guard on the Fleet flagship, while remaining a test-only extension rather than new runtime capability.
  • [COMPLEXITY]: 35 - One existing stateful E2E helper and one journey gain a second verb; the cognitive load is the async UI→wire→re-poll→store chain, not file breadth.
  • [EFFORT_PROFILE]: Quick Win - Low-diff, high-signal closure of a product lifecycle blind spot using an already-proven harness.

Approved at exact head cebf935a70; eligible for human merge.