scope-retire — archive a notepad, keep the history
Retiring a notepad means "stop treating this as an active objective" — not "delete it".
The journal (sessions/*.jsonl), the handoffs, the memory-index (wing=<prefix>) entries,
and the git remote all stay. Retirement is a reversible status change plus a clean final
snapshot. See DESIGN.md (§6 file contracts, §16 acceptance).
Never destructive. This skill does not rm journals, does not empty the memory index,
does not delete the GitHub repo, and does not force-push over history. If the operator wants
hard deletion, that is a separate manual action they perform themselves — surface it, don't
do it.
Procedure
1. Confirm the notepad and its state
- Resolve the notepad directory (cwd or the operator-named scope). Confirm it is a notepad (has SCOPE.md + repos.manifest.json + sessions/).
- Read SCOPE.md done-criteria and report which are met vs open, so the operator retires with eyes open. Retiring with open criteria is allowed (abandonment) — just say so.
2. Write a final snapshot into NOTES.md
Do one last rewrite of NOTES.md (§6.1): set Current goal to a one-line outcome
("Retired : <done | abandoned because …>"), Next action to "none — scope retired",
and leave the Key refs / Blockers as the honest final state. This is the summary a future
reader lands on first; keep it terse and un-redacted of caveats.
3. Append a retirement milestone to the journal (do NOT rewrite history)
Append one new event to the current session journal
(sessions/<ISO8601>_<id>.jsonl) — never edit or delete existing lines:
{"ts":"<now>","kind":"milestone","text":"scope retired: <outcome>","refs":[],"commit":null,"session":"<id>"}
The append-only journal is the history of record; retirement adds a closing entry, it does not erase what came before.
4. Mark SCOPE.md retired
Add a status line at the top of SCOPE.md, e.g.
> **Status:** RETIRED <date> — <one-line outcome>. This is the durable, human-visible
flag that the notepad is shelved. Leave Objective + Done-criteria in place for the record.
5. Disarm auto-load / auto-sync for future sessions
So a stray future session in this directory doesn't resurrect it as "active":
- In the notepad's
.claude/settings.json, the read/sync hooks key off notepad detection; a RETIRED SCOPE.md is the signal the SessionStart hook should treat as "inject the final NOTES.md snapshot read-only, skip the digest rebuild and best-effort push". Record the retired status where the hook can see it (SCOPE.md status line is the source of truth). - Do not remove the hooks or the settings file — retirement is reversible.
6. Final sync, then leave the remote alone
If a remote exists, do one best-effort git -C <notepad> add -A && commit && push of the
retirement snapshot (final NOTES.md, journal milestone, SCOPE status) so the archived state
is durable off-machine. Then stop — do not delete the remote branch or repo. Preserve
handoffs/ as-is.
Done when
SCOPE.md shows RETIRED with an outcome, NOTES.md holds the final snapshot, the journal has its closing milestone appended (nothing removed), future sessions won't treat it as active, and — if there's a remote — the archived state is pushed. Report: the notepad path, the outcome (done vs abandoned + which done-criteria were open), and that history was preserved (journal + handoffs + memory index untouched).
Guardrails
- Journal is append-only: add the milestone, never edit or delete prior lines.
- No destructive ops: no journal deletion, no memory-index purge, no repo/remote deletion, no force-push. Hard deletion is the operator's own manual call.
- Reversible: a later
scope-initon the same directory re-activates the notepad.