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.
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.
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.
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.
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.