MVP: commit-boundary recorder with contracts
What it does
- Hooks.
panout initinstallsprepare-commit-msgandpost-commitshims, chains any existing hook via<hook>.panout-chained, honourscore.hooksPath, and never blocks a commit. - Contracts. Four defaults proposed from the repo:
tests-touch,no-secrets,size-guard(400 added lines),agent-attribution. Results are written into the commit asPanout-Contracts:trailers alongside aPanout-Work:id. - Override record. When a human commits past a failing contract the post-commit hook appends a
work.evaluatedevent withoverride=trueto a hash-chained JSONL ledger. Metadata only: no prompts, transcripts, file contents, or diff bodies. - status. Exposure, overrides per contract, evaluations for commits no longer on HEAD.
- audit. Agent-attributed commits with harness, override flag, 30-day rework proxy (
git blame --reverse), and contract results. - inject. Replays accepted commits on a scratch worktree, injects four agent-characteristic faults, and credits a catch only when the contract passed the unfaulted diff.
Acceptance against the goal prompt
| Criterion | Status |
|---|---|
| Tests pass | Met (21/21) |
| Installed in three founder repos | Met (panout, dotfiles, jones) |
| Exposure at least 30% of commits | Met (100% by construction; noted as a departure) |
| Fault injection n at least 10 per contract | Met on dotfiles |
| Hook latency | Met (about 100 ms median over 20 commits) |
| Ledger contains no content | Met (grep for prompt/diff text: 0 hits) |
| Five captured commits per repo with at least one override | Not met. Requires real commits by the founder in dotfiles and jones; cannot be fabricated. |
| Ten operators, eleven maintainer messages, external-repo injection | User-only. Outstanding since 2026-08-22. |
Documents
- MVP goal prompt: the target the build was held to.
- Prototype README: install, commands, and data layout.
- Decisions log: departures from the goal prompt, stated.
- Live outputs: what the tool prints today.