---
name: blueprint-review-read
description: "Read the named documents closely, address every structure problem chaff reports, find contradictions and ambiguities, and quote the text for each finding — changing nothing yet."
---
# Read the documents and write the findings
`.blueprint/answers.json` names the documents (`documents`, one path per line), what kind they are
(`kind`), what the person is worried about (`focus`) and how far to go (`proposals`). The person may not be
a lawyer or an engineer: write for them in plain words, in their language.
Change nothing in the repository: this step only reads. The documents are the person's originals and stay
exactly as they are — the next check fails if one of them changes. Write only under `.blueprint/`.
## First, what chaff finds by machine
For each document run, from the folder, `sh /checks/chaff.sh --experimental --compact`.
Three rules read the document's structure (`chaff tree ` shows the addresses they use):
- `dangling-reference` — a reference such as "第12条" or "Section 4.2" to a provision that does not exist;
- `numbering-gap` — articles, paragraphs or items numbered with a gap or out of order;
- `duplicate-definition` — the same term defined twice.
Every one of these must appear in the findings as a finding with a `machine` field
(`{ "rule", "file", "line" }`: the rule and line as chaff reported them, the file as `documents` names it), or in `dismissed` with the same fields and a
`why` — for example, a reference into another law that the document names. Do not claim a machine result
chaff did not report. Other chaff findings (style) are not the subject of this review; leave them.
## Then, what only reading finds
Read the whole of every document, starting with `focus`. Look for:
- **contradiction** — two provisions that cannot both hold (different amounts, periods, parties, conditions;
one permits what another forbids);
- **ambiguity** — a provision a reasonable reader could apply two ways, a term used but never defined, a
deadline without a start;
- **omission** — something the rest of the document relies on but never says (who pays, what happens when a
condition fails).
Report only what the text supports. A finding you cannot quote is not a finding.
## Write `.blueprint/findings.json`
```json
{
"findings": [
{
"id": "payment-deadline",
"kind": "contradiction",
"severity": "high",
"summary": "支払期限が二か所で違う",
"explanation": "第4条第2項は検収後30日以内、第9条は検収後60日以内としている。どちらで支払えばよいか決まらない。",
"citations": [
{ "source": "contract.txt", "address": "第4条第2項", "quote": "成果物の検収後30日以内に" },
{ "source": "contract.txt", "address": "第9条", "quote": "検収後60日以内に" }
]
}
],
"dismissed": []
}
```
- `id`: lower-case letters, digits and `-`, unique.
- `kind`: `dangling-reference`, `numbering-gap`, `duplicate-definition`, `contradiction`, `ambiguity`,
`omission` or `other`. `severity`: `high` (changes who owes what, or makes a provision unenforceable),
`medium`, or `low` (wording).
- `citations`: at least one. `source` is the document's path exactly as `documents` names it; `address` is
where it is (use `chaff tree`'s addresses); `quote` is copied character for character from the document —
the check runs `chaff cite` on every one. For a contradiction, quote both sides.
An empty `findings` array is a valid answer when nothing is wrong. Say so; do not invent findings.
## Done when
`node /checks/findings.mjs read` (with `BLUEPRINT_BASE` and `BLUEPRINT_USECASE` set to the
pack folders from your prompt) passes. It also records a fingerprint of each document, which the next step
uses to prove the originals were not changed.