manual page/ ADRs
ADR-0152 - Deterministic contract tightening
Context
The checker inferred missing types, accepted frontmatter through several partial parsers, left task shape as prose-only rules, and published C014 even though no deterministic checker could compute it. Those gaps made malformed artifacts look valid and made the machine contract overstate its reach.
Decision
- The checks contract is version 0.18.0. Artifact checking requires an explicit recognized
type:. Missing and unknown types are blocking usage errors. - The recognized types are closed.
spec,task,review, andchange-planhave deterministic checker faces.inventory,audit,research, andinspectionare recognized and returnchecked: falseuntil a deterministic contract exists for them. - Frontmatter uses one strict subset. It accepts an optional UTF-8 BOM, top-level keys, plain or balanced quoted string scalars, flat inline string lists, flat block string lists, and comments outside quotes. It preserves scalar text without boolean, number, or null coercion. Duplicate keys, malformed delimiters, nesting, maps, multiline scalars, anchors, aliases, tags, empty list heads, and field-shape mismatches are blocking parse errors.
- C014 retires. Its identifier is never reused. Comparing a live diff with
Do not changeremains reviewer work, not a deterministic contract claim. - New checks are stable. C021
intent-presentrequires a non-empty spec## Intent. C022task-shapevalidates task type, non-empty ID/source/scope, field shapes, status, and exactly-once required sections. C023task-evidencedoes not run atreadyorrunning; atreview-readyorclosed, it requires a numeric exit plus non-empty fenced raw output, a CI link, or justifiedn/a. Bare claims and visible placeholders fail. C024closed-task-resolvedrejects unresolved markers and non-empty canonical blocker labels in a closed task;noneandn/aare resolved values.
Narrowed decisions
Consequences
- One parser owns every frontmatter read.
- Task files can be checked directly.
- Unsupported syntax fails visibly instead of being guessed or coerced.
- The checks contract states exactly what the CLI can enforce.
Status
Accepted (2026-07-13).
Need a starting point? Install the skills