LearnNewsExamplesServices
Frontmatter
id14611
titleFM cockpit per-agent control cluster: start / stop / restart with honest round-trip states
stateClosed
labels
enhancementdeveloper-experienceai
assigneesneo-opus-vega
createdAtJul 4, 2026, 4:32 AM
updatedAtJul 6, 2026, 6:56 PM
githubUrlhttps://github.com/neomjs/neo/issues/14611
authorneo-opus-vega
commentsCount4
parentIssue10
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[x] 14598 FM cockpit AgentCard component — the resident card at the artifact bar
blocking[x] 14612 FM cockpit fleet-level morning start: one action, staged bring-up, honest partial results
closedAtJul 6, 2026, 6:56 PM

FM cockpit per-agent control cluster: start / stop / restart with honest round-trip states

Closed v13.2.0/archive-v13-2-0-chunk-1 enhancementdeveloper-experienceai
neo-opus-vega
neo-opus-vega commented on Jul 4, 2026, 4:32 AM

Context

T5.17 of Epic neomjs/neo-agent-institution#10 (map v1.1) — the per-card control verbs (▶ ⏸ ↻ in the SSOT anatomy). Tonight supplied the empirical argument twice over: the operator hand-rotating idle sessions IS this leaf's absence ("I am becoming a severe bottleneck"), and the interim protocol's structural fixes (#14537 setWakeEnabled, the FM re-invocation seam) are cockpit verbs waiting for this UI.

The Problem

A control that lies is worse than a terminal: a "restart" that renders success while the lifecycle service rejected it teaches the operator to distrust the whole surface. The controls must render the ROUND-TRIP honestly — pending → settled-or-rejected — against the real services, never optimistic-only.

The Architectural Reality

  • Binds Lane-C's control round-trip contract (#14563 — "cockpit start/stop/restart → the lifecycle service → settle-or-reject") and the neomjs/neo-agent-brain#118 wake-toggle verb when it lands (its slot reserved in the cluster).
  • Authorization honesty: control verbs are control-plane-authorized (the neomjs/neo-agent-brain#118 pattern); unauthorized states render disabled-with-reason, never hidden.
  • Composes neomjs/neo#14593 primitives; per-card placement per the neomjs/neo#14605 contract's controls slot; ADR 0032 irrelevant to verbs EXCEPT §2.2.1 freshness on the pending state (a 30-second-old "pending" renders as such).

The Fix

The per-view triplet: (1) ControlCluster (verb buttons, pending/settled/rejected/unauthorized states, per-verb availability from the wire); (2) unit specs — full state machine per verb (fixture-driven settle/reject/timeout), unauthorized render, neomjs/neo-agent-brain#118-slot presence-when-available; (3) NL-verifiable round-trip against the real lifecycle seam (settle AND reject paths both demonstrated).

Acceptance Criteria

  • Each verb renders the full round-trip state machine (pending → settled/rejected; timeout renders stale-pending per the freshness rule).
  • Rejected/unauthorized states render with reason — no silent no-ops, no optimistic success.
  • The neomjs/neo-agent-brain#118 wake-toggle slot exists and activates when the verb lands (cited, not blocked-on).
  • Unit specs (custom playwright config) + NL-verifiable settle AND reject round-trips.

Out of Scope

Fleet-level morning-start (T5.18) · the lifecycle service + wire methods (Lane C: neomjs/neo#14563/#14595) · the neomjs/neo-agent-brain#118 verb implementation.

Related

Epic neomjs/neo-agent-institution#10 (parent) · blocked-by neomjs/neo#14598 (card slot) · consumes neomjs/neo#14563/#14595 (+#14537 when landed) · neomjs/neo#14605 contract · D#14561.

Live latest-open sweep: fold-window fresh; no equivalent. A2A sweep: clean (Lane-C seams are the consumed side, boundary standing). Structure-map gate: N/A — app-layer component.

Origin Session ID: a28f1415-37a4-4a5a-a3e4-b56adf6274ec Retrieval Hint: "FM cockpit control cluster round trip settle reject honest states"