archive · git:20260918.fdd8978 · 2026-09-18 · sha256 cac13dc90169dc82

archive git:20260918.fdd8978B

Immutable. This exact content is served forever at /api/v1/blob/cac13dc90169dc82.

---
description: Move a completed change to .specclaw/changes/archive/ under its existing name. Closes the GitHub Issue (if sync is enabled) and optionally creates a git tag. Use after a change is merged — the PR is complete and the change should leave the active list.
---

# specclaw archive

**First, run** `specclaw-ensure-init .specclaw` — idempotently creates `.specclaw/` if it doesn't exist (silent if already initialized; auto-inits using the current directory's basename as the project name).

Archive a completed change.

1. **Validate:** `specclaw-validate-change .specclaw <change> archive`. If it fails, report and stop.
2. Verify the change is complete (all tasks done, verification passed, PR merged).

   **A spike archives straight from `plan`.** It has no tasks, no verify report and no PR — its
   deliverable is `findings.md`, which is what `validate-change` checks for instead. What it does
   need is an explicit *noted* from the operator on the recommendation: the answer is the whole
   output, and archiving one nobody read loses it. Any code written during the spike is **not**
   committed; if code was kept, the change was not a spike and should have been upgraded with
   `specclaw-set-size`.
3. Record the phase: `specclaw-set-phase .specclaw <change> archived done`. `specclaw-set-phase` is the only writer of phase state — it records `state.json` and upserts the Archived row in `status.md`. Never hand-edit those rows. Run it **before** the move, so the recorded state travels with the directory.
4. Move to `.specclaw/changes/archive/<change>/` — the name is preserved verbatim, number included, with no date prefix. The leading `<NNN>-` already orders the folder, and the archive date is recorded in `state.json` by step 3; the old prefix was the *archive* date, not the change's, so a single bulk archival run stamped 24 of this repo's folders with one identical date — ordering by it was actively misleading.
5. Update the dashboard: `specclaw-update-status .specclaw`.
6. **GitHub sync** (if enabled): `specclaw-gh-sync close .specclaw <change>` to close the issue.
7. **Azure Boards sync** (if `azdo.boards.sync: true`): `specclaw-azdo-issue close .specclaw <change>` to post a closing comment and add a `closed-by-specclaw` tag. (Does not transition Work Item state — humans drive state in ADO.)
8. Optionally create a git tag for the release.