Context
Operator caught both defects on the merged guide (learn/agentos/FleetManagerArchitecture.md, PR #16936) the morning it landed: the D1 diagram renders dense (12 labeled edges — cosmetic, explicitly not a priority alone), and — the factual defect this ticket exists for — D1 places the wake daemon inside the Dockerized Agent OS subgraph. That is false. The wake daemon is a HOST-side process: two launchd scripts form a local mini-orchestrator that runs it on client machines, because wake delivery for several harnesses requires osascript to inject A2A messages as prompts — host-level automation that cannot execute from inside a container.
The Architectural Reality (source-anchored, verified 2026-08-14)
Two wake delivery actors, two homes:
- Plane-side (in the MC container):
WebhookDeliveryService — the signed Shape-B dispatcher (HMAC + the four X-Neo-Wake-* headers), invoked by CoalescingEngineService (ai/services/memory-core/CoalescingEngineService.mjs:680/:739), configured by the MC server entrypoint (ai/mcp/server/memory-core/Server.mjs:300). This is the actor that will POST at the composed fleet-server's /wake (PR #17103).
- Host-side (launchd, client machines):
ai/daemons/wake/daemon.mjs — the local mini-orchestrator's wake daemon, owning the Shape-C harness adapters (osascript / tmux / codex / opencode / kimi-pull-bridge; its own naming: getActiveShapeCSubscriptions) plus the legacy unsigned webhookUrl path. defaultAdapter = darwin ? 'osascript' : 'tmux' says the home out loud.
The guide's D1 currently draws one WakeD["Wake daemon"] node inside the Plane subgraph with the class-6 arrow — collapsing both actors into the wrong home.
The Fix
One bounded edit to D1 (+ its caption):
- Move the wake-daemon node OUT of the Plane subgraph onto the Host, named for what it is (launchd mini-orchestrator; osascript injection is the reason it must live there).
- Re-anchor the class-6 signed-wake arrow to its true producer (the plane's signed dispatcher → signed receivers/seats), keeping the six-class ledger placement intact.
- Use the same edit to reduce edge density for legibility (the cosmetic half — e.g. group the seat-side credential arrows), and re-render-verify all six diagrams with repo mermaid (the PR #16936 harness pattern).
Acceptance Criteria
Out of Scope
Other diagrams' content; ADR text; the guide's prose sections; any runtime code.
Related
#16798 (the guide ticket, closed) · PR #16936 (the carrier) · #17100 / PR #17103 (where the two-actor split is source-anchored in shipping code) · #17098 (KB-retrievability sibling — a merged correction here should precede or ride the re-ingestion check).
Live latest-open sweep: latest 20 open checked at 2026-08-14T09:0xZ (top = my own S7 slices); no equivalent. A2A herd window: clean.
Origin Session ID: c4996813-01b9-4234-8bdd-ed3bf22c0970
Retrieval Hint: query_raw_memories("wake daemon host-side launchd mini-orchestrator D1 two delivery actors")
Context
Operator caught both defects on the merged guide (
learn/agentos/FleetManagerArchitecture.md, PR #16936) the morning it landed: the D1 diagram renders dense (12 labeled edges — cosmetic, explicitly not a priority alone), and — the factual defect this ticket exists for — D1 places the wake daemon inside the Dockerized Agent OS subgraph. That is false. The wake daemon is a HOST-side process: two launchd scripts form a local mini-orchestrator that runs it on client machines, because wake delivery for several harnesses requiresosascriptto inject A2A messages as prompts — host-level automation that cannot execute from inside a container.The Architectural Reality (source-anchored, verified 2026-08-14)
Two wake delivery actors, two homes:
WebhookDeliveryService— the signed Shape-B dispatcher (HMAC + the fourX-Neo-Wake-*headers), invoked byCoalescingEngineService(ai/services/memory-core/CoalescingEngineService.mjs:680/:739), configured by the MC server entrypoint (ai/mcp/server/memory-core/Server.mjs:300). This is the actor that will POST at the composed fleet-server's/wake(PR #17103).ai/daemons/wake/daemon.mjs— the local mini-orchestrator's wake daemon, owning the Shape-C harness adapters (osascript/tmux/ codex / opencode / kimi-pull-bridge; its own naming:getActiveShapeCSubscriptions) plus the legacy unsignedwebhookUrlpath.defaultAdapter = darwin ? 'osascript' : 'tmux'says the home out loud.The guide's D1 currently draws one
WakeD["Wake daemon"]node inside the Plane subgraph with the class-6 arrow — collapsing both actors into the wrong home.The Fix
One bounded edit to D1 (+ its caption):
Acceptance Criteria
Out of Scope
Other diagrams' content; ADR text; the guide's prose sections; any runtime code.
Related
#16798(the guide ticket, closed) · PR #16936 (the carrier) · #17100 / PR #17103 (where the two-actor split is source-anchored in shipping code) · #17098 (KB-retrievability sibling — a merged correction here should precede or ride the re-ingestion check).Live latest-open sweep: latest 20 open checked at 2026-08-14T09:0xZ (top = my own S7 slices); no equivalent. A2A herd window: clean.
Origin Session ID: c4996813-01b9-4234-8bdd-ed3bf22c0970
Retrieval Hint:
query_raw_memories("wake daemon host-side launchd mini-orchestrator D1 two delivery actors")