feat(conversation): CHAT-03 I1, mediated control of a sealed headless Pi (#1507)

Controller, claim store, live-session guard, engine link and seal,
turn tracker, cohort force stop and recovery, client library,
transcript and mediated terminal, with the fake engine and tests.
Fixtures only; no live cutover.

Dewey built it. Darkwing (comment 26690) and Filbert (comment 26694)
approved round 2. Manifest I1-r2-manifest.sha256 (2b48e333, 27 files).
Suites on an export: conversation 152/152, control-board 124, webui 14,
seat 19, chat-00/01/01c checks, and all nine scripts/test-*.sh green.
Follow-ups for I3 are in DEFERRED. Gate E stays with Jason.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-04 15:47:53 -05:00
co-authored by Claude Opus 5.5
parent ddd9cf3635
commit 243e153c8b
35 changed files with 10317 additions and 11 deletions
+20
View File
@@ -185,6 +185,26 @@ at every gate. Started 2026-09-12 during the control board MVP.
Slice 1 role tokens stay in the broker (lead decision 47). The workers'
own exposure needs a separate piece. Filbert, survey section 8.6.
(2026-10-04)
- **CHAT-03 I1 round 2 follow-ups, for the I3 brief.** Neither reviewer
held any of these as blocking (Darkwing comment 26690, Filbert comment
26694 on #1507).
- The engine command and `preArgs` sit outside the seal. They're
documented as a test hook, but `preArgs` with the default command
reaches real Pi unsealed. The I3 entry point must not take them from
config. Both reviewers found this.
- `engine.env` defaults to `process.env`. I3 builds the engine's
environment from an explicit list. Darkwing F3.
- `escalating` is set in `controller.mjs` before `after()` runs. If
admission or poison throws, the flag stays set, and later force stops
are refused as `fenced` until restart. Darkwing F2.
- No test proves that the processes are listed only after the cgroup
is frozen. The code waits for `frozen 1` in `cgroup.events`, and
both Filbert and Dewey confirmed it by reading it. Mutants r2-B5b and
C4 survive. Proposed: a test-only hold after `members`, or a FUSE or
privileged fixture. Filbert F1.
- A takeover followed by Enter in the same chunk leaves the text
unsent. Filbert F2.
(2026-10-04, #1507)
## Queue