Context
The delivered-slice split of #15242 (Lane D1, mine), per the running precedent (#15351/#15350, #15360/#15361): the S5 design-shape proposal is with @neo-opus-grace (three mount forks — config placement, entry affordance, zone geometry; A2A a94dc332, ping-and-continue), and every unit that NO fork outcome changes is built and witnessed now. #15242 stays OPEN for the mount, the design sign-off, and the NL add-agent journey on the mounted surface.
What this slice delivers
apps/agentos/view/fleet/addAgentFlow.mjs — the pure flow half: idle → validating → submitting → readback-confirmed | gated | rejected; the #14614 canonical readback as the ONLY success truth (identity-fields + serializability + top-level-secret-key + credential-echo guard, lifted from Accounts' upsert discipline into a pure, unit-testable function); absent bridge = first-class gated outcome; transport errors sanitized (an outcome never carries credential bytes). DI seam via bridgeResolver (the #15333 injected-reader discipline — the Body never constructs a bridge).
apps/agentos/view/fleet/AddAgentForm.mjs — the S5 form to the token layer: username + PAT + registry-derived harness chips; honest-lifecycle status line; bridge-absent probed at construction → submit disabled-with-reason (CARD-CONTRACT controls rule); PAT field cleared on EVERY settle; agentDefinitionAccepted fired with the validated readback — the mount owner (fork-dependent) wires the roster write.
AgentConfigCard moved into the fleet module + re-skinned — agent-config-* → fm-config-* vocabulary on the --fm-* tokens; behavior contract untouched (pure derivation, configIntent purity, tri-state honesty, stale-paint guard); harness chips unified onto the new .fm-chip selector-chip primitive (shared with the add form; distinct from EventChip's observation chips).
- SCSS:
fleet/AgentConfigCard.scss + fleet/AddAgentForm.scss + fleet/Chips.scss — geometry + token reads only; ink tiers per TOKENS.md roles (no --fm-ink-faint — its contrast failure is on record); every state pairs hue with a non-color carrier (1.4.1 discipline); legacy block deleted from Accounts.scss.
- Witnesses:
unit/apps/agentos/addAgentFlow.spec.mjs (9 — flow outcomes incl. echo/secret/circular readbacks, sanitized transport throw, form round-trips with a stub bridge, PAT-clear on confirmed AND rejected settle, no-submit-on-invalid) + component/apps/agentos/AddAgentForm.spec.mjs (mounted #13058 matrix: typed credential reaches no sink — localStorage/sessionStorage/URL/console — with a console-capture positive control; gated affordance rendered honest). The matrix witness runs in CI via the components shard (#15368).
Acceptance Criteria
Out of Scope
The S5 mount (dock zone vs detail tab), FleetSettingsPanel retirement, design sign-off, and the NL-driven add-agent journey — all #15242, which stays open.
Related
Parent #15242 (stays open) · #14614 (readback truth) · #13058 (credential matrix) · #15368 (the CI shard the mounted witness rides) · precedent chain #15316/#15331/#15351/#15360.
Live latest-open sweep: checked latest 8 at 2026-07-18T02:25Z (latest #15396); the OpenCode-seat wave (#15391/#15392/#15394) is adjacent-but-different (harness registry vs this UI slice — the form's registry-derived chips pick #15391 up for free). A2A in-flight (4 latest): G1/G3 docking + review-seat traffic; no collision with my standing #15242 claim.
Decision Record impact: none.
Origin Session ID: 2dcbf336-4338-4009-82f3-79f1b1d151f1
Retrieval Hint: "define-agent fork-independent slice add-agent flow form fm-chip re-skin readback gated"
Context
The delivered-slice split of #15242 (Lane D1, mine), per the running precedent (#15351/#15350, #15360/#15361): the S5 design-shape proposal is with @neo-opus-grace (three mount forks — config placement, entry affordance, zone geometry; A2A
a94dc332, ping-and-continue), and every unit that NO fork outcome changes is built and witnessed now. #15242 stays OPEN for the mount, the design sign-off, and the NL add-agent journey on the mounted surface.What this slice delivers
apps/agentos/view/fleet/addAgentFlow.mjs— the pure flow half:idle → validating → submitting → readback-confirmed | gated | rejected; the #14614 canonical readback as the ONLY success truth (identity-fields + serializability + top-level-secret-key + credential-echo guard, lifted from Accounts' upsert discipline into a pure, unit-testable function); absent bridge = first-classgatedoutcome; transport errors sanitized (an outcome never carries credential bytes). DI seam viabridgeResolver(the #15333 injected-reader discipline — the Body never constructs a bridge).apps/agentos/view/fleet/AddAgentForm.mjs— the S5 form to the token layer: username + PAT + registry-derived harness chips; honest-lifecycle status line; bridge-absent probed at construction → submit disabled-with-reason (CARD-CONTRACT controls rule); PAT field cleared on EVERY settle;agentDefinitionAcceptedfired with the validated readback — the mount owner (fork-dependent) wires the roster write.AgentConfigCardmoved into the fleet module + re-skinned —agent-config-*→fm-config-*vocabulary on the--fm-*tokens; behavior contract untouched (pure derivation,configIntentpurity, tri-state honesty, stale-paint guard); harness chips unified onto the new.fm-chipselector-chip primitive (shared with the add form; distinct from EventChip's observation chips).fleet/AgentConfigCard.scss+fleet/AddAgentForm.scss+fleet/Chips.scss— geometry + token reads only; ink tiers per TOKENS.md roles (no--fm-ink-faint— its contrast failure is on record); every state pairs hue with a non-color carrier (1.4.1 discipline); legacy block deleted fromAccounts.scss.unit/apps/agentos/addAgentFlow.spec.mjs(9 — flow outcomes incl. echo/secret/circular readbacks, sanitized transport throw, form round-trips with a stub bridge, PAT-clear on confirmed AND rejected settle, no-submit-on-invalid) +component/apps/agentos/AddAgentForm.spec.mjs(mounted #13058 matrix: typed credential reaches no sink — localStorage/sessionStorage/URL/console — with a console-capture positive control; gated affordance rendered honest). The matrix witness runs in CI via the components shard (#15368).Acceptance Criteria
AccountsConfigSurfacee2e journey green).FleetSettingsPanel— that is #15242's remaining scope behind Grace's ruling.Out of Scope
The S5 mount (dock zone vs detail tab), FleetSettingsPanel retirement, design sign-off, and the NL-driven add-agent journey — all #15242, which stays open.
Related
Parent #15242 (stays open) · #14614 (readback truth) · #13058 (credential matrix) · #15368 (the CI shard the mounted witness rides) · precedent chain #15316/#15331/#15351/#15360.
Live latest-open sweep: checked latest 8 at 2026-07-18T02:25Z (latest #15396); the OpenCode-seat wave (#15391/#15392/#15394) is adjacent-but-different (harness registry vs this UI slice — the form's registry-derived chips pick #15391 up for free). A2A in-flight (4 latest): G1/G3 docking + review-seat traffic; no collision with my standing #15242 claim.
Decision Record impact:
none.Origin Session ID:
2dcbf336-4338-4009-82f3-79f1b1d151f1Retrieval Hint:
"define-agent fork-independent slice add-agent flow form fm-chip re-skin readback gated"