Plan M4a: gatewayd in 15 tasks, with skeletons and given tests

Each task's tests were run against a reference at its end state; the end states were replayed
from master in order with the gate at each step (650 to 762 tests); each skeleton compiles
against its tests and fails them. The reference is kept off this machine. Lessons T27 (every
wait in a test has a limit) and T28 (mutate the reference before hand-over) come from this work.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-23 19:05:44 -07:00
co-authored by Claude Opus 5.5
parent f38dc8d474
commit 0339dc13b2
69 changed files with 7790 additions and 3 deletions
+6 -3
View File
@@ -13,7 +13,10 @@ merged, reviewed in `docs/implementer-log.md`; its open findings (17, 18, 20) ar
closed by M3b task 02. M3b (the container runner and the four tools, `docs/specs/2026-09-22-m3b-runner.md`) is done and
merged: tool containers run from the image `deploy/tools-image.nix` builds, checked on straylight.
M4 is split: M4a (`gatewayd`, conversations over Mattermost) is specified in
`docs/specs/2026-09-23-m4a-gateway.md`, a draft for review; M4b (approvals over Mattermost) follows.
`docs/specs/2026-09-23-m4a-gateway.md` (approved) and planned in `docs/plans/M4a/` (15 tasks,
branch `m4a`); M4b (approvals over Mattermost) follows. The owner's Mattermost settings and the
bot's token are in `mattermost.env` at the repository root: ignored by git, never committed, and
the token is never printed.
Straylight now serves Ornith as four slots over one 262,144-token pool; see
`docs/inference-contract.md`, "Deployment change, 2026-09-20", before relying on cache behaviour.
`docs/runbook.md` has an entry for every
@@ -55,8 +58,8 @@ requests, check `GET /slots?model=ornith-1.5-35b-a3b` so you do not evict someon
runs `brokerd`, `loopd` and an approval end to end against it.
- `bxctl` is the owner CLI: `bxctl chat` talks to a running `loopd serve --config <path>`;
`bxctl approvals`, `approve`, `refuse`, `grants check` and `audit verify` talk to `brokerd serve`
(or read the audit log directly); `bxctl reindex` comes in M5. Roles not yet built (`gatewayd`,
`toolkit`) print "not implemented" and exit 2.
(or read the audit log directly); `bxctl reindex` comes in M5. `gatewayd` prints "not
implemented" and exits 2 until M4a task 15.
## Architecture in brief