did-it-actuallylisted
Install: claude install-skill pedroreisper/did-it-actually
# did-it-actually — close the loop between request and reality
You finished a task. You're about to type "done". **Don't.** Run this skill first.
The cost of one self-audit is ~30 seconds and a handful of tool calls. The cost of the user discovering the gap is one wasted reply cycle. The cost of three wasted cycles is the user no longer trusting any "done" you ever emit.
This skill is the closed loop: capture what was asked → check what shipped → if there's a gap, fix it without being told → re-check → only then report done.
## Core architecture
Four artefacts, in order:
1. **`.did-it-actually/contract.yml`** — the original request decomposed into acceptance criteria, each individually checkable. Written at the START of the work, or reconstructed at audit time. See `references/contract-format.md`.
2. **`.did-it-actually/claims.jsonl`** — append-only ledger of every claim you made (`{op, path, sha_before, sha_after, cmd, exit_code}`). Written as you work, not reconstructed from memory. See `scripts/scan_session.py` for reconstruction when the ledger is missing.
3. **`.did-it-actually/report.json`** — structured audit outcome. Schema in `references/output-schema.json`. The prose verdict box is a *view* of this file.
4. **A fresh-context critic sub-agent** — spawned via the Task tool with `general-purpose` subagent_type. Receives ONLY the contract, the claims ledger, and `git diff HEAD`. Does NOT see this conversation. Returns per-criterion PASS/FAIL with file:line evidenc