diff --git a/CLAUDE.md b/CLAUDE.md index 9c64bf0..d9891cb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,7 +8,9 @@ Boxmaker is a sovereign personal agent harness written in Rust. Work proceeds on time (M0 to M7, table in `docs/milestones.md`). M0 (measurements), M1 (workspace, `proto`, gate, `Decision`), M2a (the inference path: `inferproxy`, `loopd`'s HTTP, SSE and llama client, the startup self-test) and M2b (sessions, the turn loop, `loopd serve`, `bxctl chat`) are done. M3 is split: -M3a (`brokerd`'s decision path) is specified in `docs/specs/2026-09-18-m3a-decision-path.md`; +M3a (`brokerd`'s decision path) is specified in `docs/specs/2026-09-18-m3a-decision-path.md`, +and its plan (22 tasks, `docs/plans/M3a/README.md`) is ready for Laguna on branch `m3a`; the +reference it was checked against is on the unpushed branch `m3a-ref` (`~/src/boxmaker-ref`). M3b (the container runner and tools) follows it. `docs/runbook.md` has an entry for every fail-closed state; any new one needs an entry and a pointer in its message. Check `docs/implementer-log.md` for what is in flight. diff --git a/docs/specs/2026-09-18-m3a-decision-path.md b/docs/specs/2026-09-18-m3a-decision-path.md index a58fbd5..4fcddf7 100644 --- a/docs/specs/2026-09-18-m3a-decision-path.md +++ b/docs/specs/2026-09-18-m3a-decision-path.md @@ -978,4 +978,7 @@ What changes from M2 is how the given tests are checked before they are handed o The reference and the skeletons live in a git worktree at `~/src/boxmaker-ref` on an unpushed branch, not in `/tmp`. The plan's README records, for each task, which check it had and what that -check exposed. +check exposed. In the event the table above did not hold: the approval handoff could not run +without working `config`, `args`, `grants`, `policy` and `state`, so those got a minimal +reference too, and the broker (tasks 10 to 15) a full one; skeletons were confined to `loopd` and +`bxctl`, whose bodies were later written as a measurement and found nothing more.