Five weeks of forge evidence per week rather than a rolling window, so a finding survives under one key and "closed after three weeks" is computable. Rules run deterministically; agent.py hands the packet to whoever writes the prose and never calls a model itself. Model choice fails closed — no default, no substitute, and the exact named model must be served or the pass refuses to run.
993 B
993 B
project-state — what became true, week by week
Machine-written. Internal. Nothing here publishes anywhere.
saf/state.md says what is true right now, in Casey's hand. This says how it
got there and what has been unresolved for how long.
evidence/<week>.json one ISO week of forge evidence; never overwritten
state.json the carry-forward — findings under stable keys
history/<week>.json state.json as it stood after that week's pass
reports/<week>.md the human read; disposable, regenerable from the two above
Written by tools/project-state/collect.py and synthesize.py. The reasoning
and the open decisions are in docs/tasks/79-project-state.md.
tools/project-state/collect.py --week last | current | 2026-W33
tools/project-state/synthesize.py --week 2026-W33 [--interpret]
tools/project-state/synthesize.py --explain f-0022
A finding cites evidence ids and nothing else. --explain prints the finding
and every row it rests on.