check — drift report
Pure diagnostic. Reports violations. Writes nothing. User decides remedy.
LOAD
- Read
SPEC.md. If missing → "no spec, nothing to check." Stop. - Parse invocation args:
§V→ check invariants only (default)§I→ check interfaces§T→ audit task status vs code--all→ all three
CHECK §V — invariants
For each V<n>:
- Translate invariant into verifiable claim about code.
- Grep / read relevant files.
- Classify: HOLD / VIOLATE / UNVERIFIABLE.
- Record address + file:line evidence.
CHECK §I — interfaces
For each I item:
- Locate implementation.
- Classify:
- MATCH — shape in code = shape in spec.
- DRIFT — impl exists, shape differs.
- MISSING — impl absent.
- EXTRA — code exposes surface not in §I.
CHECK §T — tasks
For each T<n>:
- If
x: verify claimed work present. - If
~: note as in-progress. - If
.: note as pending. - Flag
xrows with no evidence as STALE.
REPORT
Caveman. Grouped by severity.
## §V drift
V2 VIOLATE: auth/mw.go:47 uses `<` not `≤`. see §B.1.
V5 UNVERIFIABLE: no test covers ∀ req path.
## §I drift
I.api DRIFT: POST /x returns `{result}` not `{id}`. route.go:112.
I.cmd MISSING: `foo bar` absent from cli/*.go.
## §T drift
T3 STALE: status `x`, no middleware file exists.
## summary
2 violate. 1 missing. 1 stale. 1 unverifiable.
next: spec skill with `bug:` or fix code at cited lines.
REMEDY HINTS (not actions)
End report with one-line hint per class:
- VIOLATE / DRIFT → invoke spec skill
bug: <V.n>or fix code. - MISSING → invoke build skill on
§T.nif task exists; else spec skillamend §T. - STALE → spec skill
amend §Tto uncheck. - EXTRA → spec skill
amend §Ito document, or delete code.
Never invoke fixes. Report only.
NON-GOALS
- Zero writes. No SPEC.md edits. No code edits.
- No sub-agents. Main thread reads.
- No scores, no grades. Binary per item: holds or drifts.