Sub-journey

The Round.

Every push to the worker is the end of a coordinated sequence of specialist sub-agents. Behind each one: Boot, Triage, three parallel passes, two audits, an integrate, a validate.

scroll ↓
01

Setup

Every round starts the same. Boot reads the full state — every Section, Requirement, Document, Question, Evidence — and writes per-table slices the specialists can target without paying the cost of the whole graph.

Triage looks at the user_inputs queued since the last round and decides what work each specialist needs to do. It writes dispatch.json — the scoped task list.

02

The specialists

Three sub-agents fan out. Each is invoked with one playbook, one scoped task, one known output file. They don't see each other while they run.

evidence-evaluator scans Documents for fragments that satisfy Requirements. question-architect identifies the gaps where no Document supports a Requirement, and writes them up as fresh Questions. draft-composer turns Requirements that are ready into prose.

03

Cross-checks

consistency-auditor reads everyone's outputs side by side. When two specialists disagree about a Requirement — say, evidence-evaluator marks it satisfied while question-architect raised a Question on it — the auditor surfaces the disagreement in the round note. Explicit, not papered over.

post-round-checklist runs as a fresh agent, with independent eyes. It audits the whole round directory and writes pass / fail. Fail halts the round.

04

Integrate

The orchestrator composes the state push. Pulls outputs from every specialist, resolves edge cases (which retired-Question goes with which new one, which Evidence supersedes which), and emits a single coherent state-push.json.

It also writes the round note — the markdown summary the user will read tomorrow to understand what changed and why.

05

Validate & ship

Before the changes touch production, ajv validates state-push.json against a JSON Schema derived from the worker's own table definitions. Unknown columns, missing required fields, explicit null on a NOT NULL column — all caught here, before the wire.

Then a single POST. The Durable Object replaces every touched table in one transaction. Either everything lands, or nothing.

read next
The Question's Three Lives

How a Question moves through Open → Answered → optionally Retired-and-Replaced — and why the append-only audit trail beats in-place editing every time.