mirror of
https://github.com/juxt/allium.git
synced 2026-09-14 13:56:44 +08:00
527cd52ee2
## Why The loop runs each phase in its own subagent. Each phase hands back a result. Until now that result was prose, so the loop had to read it and work out what it meant. This makes the result typed. The loop reads a field instead of reading a paragraph. The routing and the done check get simpler and easier to trust, with less room to misread a result. It also lays the groundwork for moving these checks into the CLI later, where code can run them instead of the model. ## What it does Every phase now returns a small JSON record instead of prose. weed returns a verdict and its divergences. propagate returns the coverage counts. The loop reads those fields to decide what to do next. A clean verdict moves on, a code bug goes back to the code, and whether the loop is done becomes a plain check over the fields. ## Implementation - Six schemas: one per phase result, plus the ledger. - Each skill returns its record, with a worked example to follow. - The routing table and the convergence check read the typed fields. ## Tests - The test suite has a small dependency-free validator: valid records pass, malformed ones are caught, and convergence is proven as a function of the fields. - A live test spawns each real agent and confirms its output matches its schema. ## Potential next steps Right now the loop reads the records itself, and the validator that checks them lives in the tests, not the live loop. A possible next step is to run that check inside the loop too, first as a small script the loop calls on each hand-off, and later as part of the CLI, alongside the routing and the done check. That would be the point where these checks stop being the model's judgement and become code.