A run's id is <label>-<hash>: a readable label (a plan folds in its parent dir — docs/email-gateway/PLAN.md → email-gateway-plan) plus a short stable hash of the plan's bytes. Identity is the plan's content, not its filename.
Why content-hashing. A generic PLAN.md recurs across projects; a name-derived id would collide, and a fresh worktree could inherit another project's all-DONE ledger and silently "resume" the wrong run. Hashing keeps distinct plans distinct, while a genuine re-run of the same plan resolves to the same id.