The client must speak the versioned Fleet protocol without importing or reconstructing any server trust decision. Today the server authority is ai/services/fleet/fleetWireMethods.mjs; the no-Brain-import browser twin is apps/agentos/config/fleetWireMethods.mjs; ai/scripts/lint/lint-fleet-vocabulary-parity.mjs binds them mechanically. harness/brain.mjs#loadFleetRuntimeContracts still imports that server authority together with identity/bearer trust primitives from a checkout tree; C5 #16746 retires the harness half only after C2 and C1 exist.
Live dependency correction (2026-08-09)
D#16720 described #16710 as the future Fleet “SDK vocabulary home.” The merged delivery is narrower and orthogonal: PR #16728 (a742bdd23dec8a26bee64be7fde050335d206218) created ai/services.host.mjs, the host executable-plane service barrel, and proved that importing it cannot reach a durable cloud store. At current origin/dev@df1da97fad291366ed903c1b53056c336b274e82 that barrel exports no Fleet wire vocabulary and is not loadable by a no-checkout browser client. It is a boundary precedent and a satisfied sequencing dependency, not C2's delivered producer.
This carrier resolves the OQ at the existing realm boundary: extend the dependency-free Brain wire authority with protocol/schema vocabulary and an identical operable-cold app twin, with the parity gate as the publication mechanism. The host service barrel remains a host-service composition root; no client is made to import it merely to obtain constants.
Acceptance Criteria
The dependency-free Fleet wire authority carries the complete client-safe vocabulary: operation names, request/response envelope schema, protocol version set, capability vocabulary, and a finite response-state vocabulary.
Both client factories (createFleetRegistryBridge and installFleetBridge) emit the version/capability offer and validate the server's selected contract before accepting a result. Server dispatch selects a compatible version/capability set or returns a named closed state; skew can never masquerade as an operation failure or empty data.
Server-side identity normalization, bearer validation, ownership, authorization, credential classification decisions, and lifecycle authority NEVER cross into the client vocabulary. A static negative witness pins that boundary.
Existing bridge consumers are sequenced in the same change: Brain dispatcher/policy, Node client factory, browser bridge, Electron capability transport, and the vocabulary-parity gate. C5 consumes the published client-safe vocabulary later; C2 does not prematurely dissolve loadFleetRuntimeContracts.
The app twin remains operable-cold and importable with zero local ai/ modules. The parity comparator checks every new constant and helper outcome and stays mutation-proved against an induced protocol drift.
The Contract Ledger below holds at merge time; all legacy unversioned request paths named in it are migrated or fail closed with an explicit state.
Contract Ledger (T3)
#
Surface (live anchor)
Source of authority
Terminal C2 disposition
Failure / degraded behavior
Docs / JSDoc disposition
Executable evidence
1
ai/services/fleet/fleetWireMethods.mjs — method + credential arrays only
ADR 0038 §2.8 wire-only contract
Extend this dependency-free authority with envelope schema, supported protocol versions, client-safe capabilities, closed response states, and pure offer/selection/validation helpers; no trust primitive enters the module
No common version or missing required capability returns a named closed response before bridge dispatch
Module summary becomes the canonical wire-contract explanation and names the trust-policy exclusion
Focused authority specs cover compatible selection, version skew, capability skew, malformed envelopes, and closed-state exhaustiveness
Mirror only the client-safe contract and pure helpers; the no-checkout client imports this twin, never ai/services.host.mjs
Twin drift fails CI; browser startup remains importable without a checkout or Node service graph
Header explains why duplication is intentional and mechanically bound
fleetVocabularyParity.spec.mjs compares all constants/helpers and red-proves an induced version/capability drift
3
dispatchFleetRequest.mjs + fleetServerPolicy.mjs
Brain authority + ADR 0038 §2.8
Negotiate/validate the wire offer before method policy or bridge execution; every response carries the selected contract + one finite response state
Unsupported protocol, missing capability, unknown method, unavailable slice, and operation failure are distinct closed states; none falls through to a guessed method list
Both factories create versioned requests and reject malformed, unselected, or unknown-state responses before returning operation data
Skew fails closed with bounded remediation text; never renders empty data as success
Both factory summaries point to ADR 0038 §2.8 and the matching vocabulary source
Node and app bridge specs cover success, each skew class, malformed server responses, and no raw trust/error leakage
5
harness/fleetCapability.mjs and harness/main.mjs
Electron main is a credential custodian, not policy authority
Transport preserves the Body-authored {method,params} surface but attaches/validates the client-safe protocol metadata inside main; C5 later replaces the remaining checkout-loaded producer
Renderer cannot inject protocol/capability/trust fields; main returns a closed client-contract state on skew or malformed response
Capability JSDoc separates renderer intent from main-owned protocol envelope
Harness spec proves over-wide renderer fields are dropped, outbound contract metadata is main-owned, and a skewed reply never reaches the Body as success
No Fleet vocabulary import required. It remains a host-service barrel; D#16720's anticipated producer wording is resolved here by the existing authority+twin publication pattern
A no-checkout client never needs this barrel; its absence cannot remove the Fleet vocabulary
This ticket and its PR record the dependency correction; ADR 0039 remains unchanged
Existing host-barrel reachability witnesses stay green; the C2 negative import witness proves the client surfaces do not reach that barrel or server trust roots
Sequencing
PR #16728 / #16710 is merged, so the executable-plane dependency is satisfied. C2 is now actionable after this contract alignment. It publishes the client-safe producer C5 #16746 waits for; it does not claim C1 credential-profile custody or S7 wake delivery.
ADR / Successor Risk
ADR 0038: aligned; this is its §2.8 executable leaf.
ADR 0039: unchanged; the host/cloud service-barrel boundary is not the browser/client wire boundary.
No current PR or open duplicate resolves the version/capability/closed-state contract.
Signal Ledger
Family-keyed at D#16720 final filed state (body v12 @ 2026-08-08T19:52:47Z): fableAUTHOR_SIGNAL + APPROVED · OpusAPPROVED · GPT[GRADUATION_APPROVED]. Full ledger: D#16720 closing comments.
Unresolved Dissent
None. The prior GPT parent-authority deferral was repaired at v11 and re-approved at the filed state. This body's dependency correction is the C2 carrier resolving the post-merge #16710 reality, not a reopening of the graduated control-plane decisions.
Unresolved Liveness
@neo-gemini-pro benched; Kimi supplied a production wire-only seat witness without a final-anchor signal — recorded, never implied consent.
Discussion Criteria Mapping
D#16720 criteria (1)–(9): closing comment. This carrier owns Concept 6 / OQ7's protocol-contract portion; S7 #16741 owns wake delivery over the ingress.
Origin: D#16720 · Retrieval Hint: "wire-only Fleet client contract protocol version capability negotiation closed response states zero trust imports"
tobiu referenced in commit 949303b - "feat(fleet): version the client wire contract (#16743) (#16793) on Aug 9, 2026, 5:45 PM
Wire-only Fleet client contract — versioned vocabulary, zero trust imports
Graduated from D#16720 (body v12 @ 2026-08-08T19:52:47Z). Concept 6 — the wire-only client contract. Parent: #13015 (Brain-side Fleet services + bridge contract).
Context
The client must speak the versioned Fleet protocol without importing or reconstructing any server trust decision. Today the server authority is
ai/services/fleet/fleetWireMethods.mjs; the no-Brain-import browser twin isapps/agentos/config/fleetWireMethods.mjs;ai/scripts/lint/lint-fleet-vocabulary-parity.mjsbinds them mechanically.harness/brain.mjs#loadFleetRuntimeContractsstill imports that server authority together with identity/bearer trust primitives from a checkout tree; C5 #16746 retires the harness half only after C2 and C1 exist.Live dependency correction (2026-08-09)
D#16720 described #16710 as the future Fleet “SDK vocabulary home.” The merged delivery is narrower and orthogonal: PR #16728 (
a742bdd23dec8a26bee64be7fde050335d206218) createdai/services.host.mjs, the host executable-plane service barrel, and proved that importing it cannot reach a durable cloud store. At currentorigin/dev@df1da97fad291366ed903c1b53056c336b274e82that barrel exports no Fleet wire vocabulary and is not loadable by a no-checkout browser client. It is a boundary precedent and a satisfied sequencing dependency, not C2's delivered producer.This carrier resolves the OQ at the existing realm boundary: extend the dependency-free Brain wire authority with protocol/schema vocabulary and an identical operable-cold app twin, with the parity gate as the publication mechanism. The host service barrel remains a host-service composition root; no client is made to import it merely to obtain constants.
Acceptance Criteria
createFleetRegistryBridgeandinstallFleetBridge) emit the version/capability offer and validate the server's selected contract before accepting a result. Server dispatch selects a compatible version/capability set or returns a named closed state; skew can never masquerade as an operation failure or empty data.loadFleetRuntimeContracts.ai/modules. The parity comparator checks every new constant and helper outcome and stays mutation-proved against an induced protocol drift.Contract Ledger (T3)
ai/services/fleet/fleetWireMethods.mjs— method + credential arrays onlyapps/agentos/config/fleetWireMethods.mjs— operable-cold browser twinai/services.host.mjsfleetVocabularyParity.spec.mjscompares all constants/helpers and red-proves an induced version/capability driftdispatchFleetRequest.mjs+fleetServerPolicy.mjscreateFleetRegistryBridge.mjs+apps/agentos/fleet/installFleetBridge.mjsharness/fleetCapability.mjsandharness/main.mjs{method,params}surface but attaches/validates the client-safe protocol metadata inside main; C5 later replaces the remaining checkout-loaded producerai/services.host.mjsfrom #16710 / PR #16728Sequencing
PR #16728 / #16710 is merged, so the executable-plane dependency is satisfied. C2 is now actionable after this contract alignment. It publishes the client-safe producer C5 #16746 waits for; it does not claim C1 credential-profile custody or S7 wake delivery.
ADR / Successor Risk
Signal Ledger
Family-keyed at D#16720 final filed state (body v12 @ 2026-08-08T19:52:47Z): fable
AUTHOR_SIGNAL+APPROVED· OpusAPPROVED· GPT[GRADUATION_APPROVED]. Full ledger: D#16720 closing comments.Unresolved Dissent
None. The prior GPT parent-authority deferral was repaired at v11 and re-approved at the filed state. This body's dependency correction is the C2 carrier resolving the post-merge #16710 reality, not a reopening of the graduated control-plane decisions.
Unresolved Liveness
@neo-gemini-pro benched; Kimi supplied a production wire-only seat witness without a final-anchor signal — recorded, never implied consent.
Discussion Criteria Mapping
D#16720 criteria (1)–(9): closing comment. This carrier owns Concept 6 / OQ7's protocol-contract portion; S7 #16741 owns wake delivery over the ingress.
Origin: D#16720 · Retrieval Hint: "wire-only Fleet client contract protocol version capability negotiation closed response states zero trust imports"