handover: the repo must speak for itself
The test is always the same: a competent stranger, any IDE, any model, gets only the repo.
Can they continue within ten minutes? If anything requires this conversation, your memory, or
files outside the repo, the handover is broken.
The audit
Walk it as the stranger would:
README.md → do the copy/start instructions still hold for this project?
AGENTS.md routing table → does every row point at a file that exists and is current?
docs/state/STATE.md handoff block → status, phase, branch, gates, Now ▶, blockers. Is it
literally true right now? Stale handoff is the most damaging lie in the system.
docs/product/BRIEF.md → does it still describe the product that exists?
- Can the stranger run it? Setup steps, env vars (
.env.example complete?), seed data,
docs/operations/ runbooks. Follow them literally; fix what's wrong, don't annotate around
it. A fresh clone must also re-run node checks/check.mjs --install-hooks. Is that step
where the stranger will see it (README/setup)?
- Secrets and access: nothing secret in the repo, and a named list of what access a successor
must be granted (where credentials live, who grants them) in
docs/operations/access.md.
- Open threads: in-flight specs at their real status; INTAKE triaged or explicitly queued;
DEBT.md reconciled with
defer: markers.
Fix everything fixable now. What you can't fix, write down as an explicit gap in STATE.md.
A named gap is transferable; a hidden one isn't.
Human handover (milestone/project end)
Add a dated entry to STATE.md's log: what was delivered, where it runs, the three things a
successor must know first, and the owner's open decisions. If the successor is non-technical,
point them at README; if technical, at AGENTS.md. Nothing else to produce. If a separate
"handover document" feels needed, the repo is failing this skill; fix the repo instead. ⚓
1---2name: handover3description: Make the project fully transferable to another human or agent with zero verbal context. Use at milestones, before breaks, when a new person/tool joins, or when the owner asks "can someone else take this over?". The end of an ordinary session is `checkpoint`, not this.4---56# handover: the repo must speak for itself78The test is always the same: **a competent stranger, any IDE, any model, gets only the repo.9Can they continue within ten minutes?** If anything requires this conversation, your memory, or10files outside the repo, the handover is broken.1112## The audit1314Walk it as the stranger would:15161. `README.md` → do the copy/start instructions still hold for this project?172. `AGENTS.md` routing table → does every row point at a file that exists and is current?183. `docs/state/STATE.md` handoff block → status, phase, branch, gates, Now ▶, blockers. Is it19 literally true *right now*? Stale handoff is the most damaging lie in the system.204. `docs/product/BRIEF.md` → does it still describe the product that exists?215. Can the stranger run it? Setup steps, env vars (`.env.example` complete?), seed data,22 `docs/operations/` runbooks. Follow them literally; fix what's wrong, don't annotate around23 it. A fresh clone must also re-run `node checks/check.mjs --install-hooks`. Is that step24 where the stranger will see it (README/setup)?256. Secrets and access: nothing secret in the repo, and a named list of what access a successor26 must be granted (where credentials live, who grants them) in `docs/operations/access.md`.277. Open threads: in-flight specs at their real status; INTAKE triaged or explicitly queued;28 DEBT.md reconciled with `defer:` markers.2930Fix everything fixable now. What you can't fix, write down as an explicit gap in STATE.md.31A named gap is transferable; a hidden one isn't.3233## Human handover (milestone/project end)3435Add a dated entry to STATE.md's log: what was delivered, where it runs, the three things a36successor must know first, and the owner's open decisions. If the successor is non-technical,37point them at README; if technical, at AGENTS.md. Nothing else to produce. If a separate38"handover document" feels needed, the repo is failing this skill; fix the repo instead. ⚓