The report, section by section.
report.md is a pure function of the ledger: rendered over the Argument view, sections ordered by stable keys, never by time, and it carries no timestamps — the meta line has depth, the plan and doctrine hashes, counts and cost. Wall time, timestamps and cost per second go to report.json. A run that ended in a gap renders its Answer as the single line No answer: …; a halted run as Halted: ….
# {question}
meta · depth · plan hash · doctrine hash · counts · cost
## The question you should be asking (only when it differs)
## Answer _Confidence: …_
## Findings
## Contested and refuted ### {mark} {claim} · **Verdict: …** · supporting · disconfirming
## Adversarial verification confirmed · unsupported
## What we could not establish
## Next steps
## Assumptions the question was resting on
## Surprises found during orientation
## Sources [host-minus-www](url)
The exact headers, in order — cases 1, 2 and 3 above are these sections read from the reader's side. Contested items list their undecided attackers and refuted items their accepted attackers, both read from claim_status; the word contested never appears in a model-written payload.docs/SPEC-kernel.md §7 — Report
And, under plan v2, an article
NARR-1 added a writer unit and a write state after synthesise. In goes the question as asked, the coverage contract and the accepted claims with their quotes and anchors — never the contested, refuted or unsupported ones — and out comes a structured article organised by the contract's facets, with a “what is not established” section of its own. Every paragraph carries at least one claim reference, and every number, date and named entity in it must be entailed by a cited claim's quote or its page; a paragraph with no reference is refused at its path and repaired, and an unanchored assertion is invariant.A7 at the paragraph that carries it. Plan v1 remains the default; promotion is E4's, by score, never by hand.
The gate is strict enough to hurt: in the first ten-run pass three runs ended gap{invariant.A7} because the writer could not cite precisely enough on four words, discarding a finished synthesis. That is filed as #1326 and folded into EXTRACT-1 — a failed article should leave the run done with its report and the refusal named, not throw the research away.docs/PACKAGES.json NARR-1 · docs/DEPTH-1-NOTES.md — the merged plan v2 · issues #1284, #1326 · PR #1306