docs/testing/2026-09-04-linux-service-spike/evidence/05-run-spike-flow.txt

== 0. build context: tracked files at HEAD only 1057 files from a1500657 clankie-app client: 33e0ba9 (33e0ba9) == 1. image sha256: == 2. container (--init is required: see breakage 1) == 3. control-plane forwarder (stands in for the gateway; see breakage 2) == 4. synthetic provider (transport only; no credential, no model proof) == 5. boot: starts Clankie + relay, never the activity surface Starting Clankie… Starting App relay… Starting Discord bridge… ✓ Clankie ✓ App relay (devices on 127.0.0.1:4321) ✓ Discord bridge {"ok":true,"status":"ready","host":"http://127.0.0.1:4310","owned":true,"pid":100,"operatorCredential":{"present":true,"source":"store","consistency":"store_only"},"services":[{"id":"clankie","label":"Clankie","state":"healthy","owned":true,"pid":100},{"id":"relay","label":"App relay","state":"healthy","owned":true,"detail":"devices on 127.0.0.1:4321","pid":228},{"id":"discord-bridge","label":"Discord bridge","state":"healthy","owned":true,"detail":"no presence session","pid":290},{"id":"discord-user-session","label":"Discord lab body","state":"healthy","owned":false,"detail":"lab body off"},{"id":"activity","label":"Activity surface","state":"unreachable","owned":false},{"id":"tunnel","label":"Activity tunnel","state":"healthy","owned":false,"detail":"not configured; activity stays local"}]} {"ok":true,"service":"clankie","herdr":"healthy"} control plane reachable from the host on 14310 == 5b. VUH-1030: conflicts are scoped to this instance's own resources decoy pid 392 on 4399; 4320 free; 4322 free startService(activity): threw — Activity surface is occupied by a process the clankie launcher does not own and is not healthy. Stop it, then retry. OLD GUARD: blocked by the stranger's command shape, as expected. Decoy untouched. decoy pid 392 on 4399; 4320 free; 4322 free startService(activity): returned — state healthy NEW GUARD: start proceeded past the stranger. Decoy untouched. stopService(activity): returned NEW GUARD: stop proceeded past the stranger. Decoy untouched. decoy pid 392 on 4399; 4320 free; 4322 held by 523 startService(activity): threw — Activity surface is occupied by a process the clankie launcher does not own and is not healthy. Stop it, then retry. PRODUCER PORT: a listener on 4322 blocks the start, as it should. == 6. file credential broker 600 root /state/credentials.json == 7. pairing + seat DM round trip, through the app's own client

== 1. connectFromPairingUrl -> snapshot { "phase": "access_review", "host": { "id": "mac", "name": "b06be489a943" }, "offeredGrants": { "chat": true, "steer": true, "terminalObserve": true, "terminalControl": true }, "grantedGrants": null, "recovery": null }

== 2. confirmAccess -> snapshot { "phase": "connected", "host": { "id": "mac", "name": "b06be489a943" }, "offeredGrants": { "chat": true, "steer": true, "terminalObserve": true, "terminalControl": true }, "grantedGrants": { "chat": true, "steer": true, "terminalObserve": true, "terminalControl": true }, "recovery": null }

== 3. device credential (token never printed or stored) { "deviceId": "device-cdf66cc8-48e", "deviceToken": "<in memory, 202 chars>", "controlPlaneUrl": "http://127.0.0.1:14310", "relayUrl": "http://127.0.0.1:14321", "grants": { "chat": true, "steer": true, "terminalObserve": true, "terminalControl": true }, "sessionExpiresAt": "2026-09-12T02:07:47.000Z" } -> the container's advertised relay origin reached the device unchanged

== 4. relay dispatch op=list { "status": 200, "json": { "op": "list", "schemaVersion": 1, "conversations": [ { "schemaVersion": 1, "conversationId": "global-default", "scope": { "kind": "global" }, "title": "Clankie", "isDefault": true, "createdAt": "2026-09-05T02:07:37.324Z", "updatedAt": "2026-09-05T02:07:37.324Z", "sessionState": "unbound", "revision": 0 } ] } }

== 5. relay dispatch op=send (the seat DM) { "status": 200, "json": { "op": "send", "schemaVersion": 1, "result": { "schemaVersion": 1, "status": "accepted", "conversationId": "global-default", "runId": "", "revision": 1, "safeCursor": "000000000000" } } }

== 6. replayed conversation (op=tail, waitMs 0) [ "[message] operator: Linux container spike: can you hear me?", "[turn] accepted", "[message] captain: Yes - I hear you from inside the Linux container.", "[turn] completed" ]

== 7. round trip complete { "runId": "", "reply": "Yes - I hear you from inside the Linux container." }

== done. container clankie-spike-92065 and image clankie-linux-spike:92065 are removed on exit.