Gate: open-questions-resolved
The spec has no open question — implementing is not guessing.
| Property | Value |
|---|---|
| Checker | open-questions-resolved |
| Confronts | spec |
| Blocking by default — new project | yes |
| Blocking by default — existing project | no — informs |
| Duplicates | a declaration it controls repeated in one file fails it; duplicates: false switches this off |
How it measures
Section titled “How it measures”Confronts a spec against the decisions it has NOT yet taken, and keeps it out of “ready” while there is an open question.
The defect class is UNRESOLVED AMBIGUITY — the cheapest to avoid and the most expensive to discover late. The path is always the same: the spec does not decide something the code needs; whoever implements picks a defensible reading and moves on; the choice is never confronted with the one who had the answer; the product ships with the wrong reading. No other gate catches it, because all the pieces exist and reference one another — the defect is a decision nobody took.
What this gate adds to the advice “don’t guess, record and report” is a declared PLACE for the record. Without a place, recording becomes a PR comment that dies in the merge. With a place, the question is a visible work item, and the spec only becomes implementable when the section empties.
The intended cycle: whoever writes notices what they do not know and writes it in the section; the gate accuses while there is an item; the question is taken to whoever decides; the answer BECOMES A RULE, with a code, and the item leaves the section.
Declaring it
Section titled “Declaring it”gates: - name: open-questions-resolved on: [spec] check: open-questions-resolved