stn1slv
> [!NOTE] > **This updates an existing catalog entry; it is not a new submission.** The `archive` extension is in `extensions/catalog.community.json` at version 1.3.0, and this bumps it to 1.4.0. Four fields change: `version`, `download_url`, `stars` and `updated_at`. Everything else stays as it is, including the description, category, effect, tags and the `>=0.14.0` version floor. All 1.4.0 changes are prompt text, so the floor does not move. ### Extension ID archive ### Extension Name Archive Extension ### Version 1.4.0 ### Description Archive merged features into main project memory, resolving gaps and conflicts. ### Author Stanislav Deviatov ### Repository URL https://github.com/stn1slv/spec-kit-archive ### Download URL https://github.com/stn1slv/spec-kit-archive/archive/refs/tags/v1.4.0.zip ### License MIT ### Homepage (optional) https://github.com/stn1slv/spec-kit-archive ### Documentation URL (optional) https://github.com/stn1slv/spec-kit-archive/blob/main/README.md ### Changelog URL (optional) https://github.com/stn1slv/spec-kit-archive/blob/main/CHANGELOG.md ### Required Spec Kit Version >=0.14.0 ### Required Tools (optional) None. The extension is a single command file. Apart from the `check-prerequisites` script that Spec Kit already ships, it runs no tools of its own. ### Number of Commands 1 ### Number of Hooks (optional) 0 ### Tags archive, memory, merge, changelog ### Key Features - Consolidates a merged feature's spec, plan and technical debt into `.specify/memory/`, folding duplicates into existing entries instead of appending a digest per feature - Item-level `[Source: specs/007-invoice/spec.md -> FR-012]` traceability, with one ref per contributing feature - Detects requirements that a later feature supersedes and asks before deleting anything; retired IDs are recorded, never reissued, and (new in 1.4.0) a retired requirement does not come back when its feature is archived again - Checks each feature against the project constitution and keeps three cases apart: a conflict, an unmet obligation, and a rule that cannot be verified by reading artifacts - Runs `before_archive` / `after_archive` hooks under core's hook rules (new in 1.4.0: a missing `enabled` field counts as enabled, an unreadable `extensions.yml` is reported, mandatory hooks are actually invoked) - Updates every agent context file the `agent-context` extension manages, respects its configured markers, and never writes inside a tool-managed block ### Testing Checklist - [x] Extension installs successfully via download URL - [x] All commands execute without errors - [x] Documentation is complete and accurate - [x] No security vulnerabilities identified - [x] Tested on at least one real project ### Submission Requirements - [x] Valid `extension.yml` manifest included - [x] README.md with installation and usage instructions - [x] LICENSE file included - [x] GitHub release created with version tag - [x] All command files exist and are properly formatted - [x] Extension ID follows naming conventions (lowercase-with-hyphens) ### Testing Details **Install**: smoke-tested with `specify extension add --dev` on Spec Kit 1.0.13. The command registers and renders correctly for `claude` (bash scripts) and `codex` (Python scripts, skills mode), and no `__SPECKIT_COMMAND_*__` token is left unresolved. The tag archive resolves and contains a manifest at version 1.4.0, and the GitHub release is published (not a draft or prerelease). On 1.0.13 the `generic` integration does not register extension commands; #4785 fixed that after the release, and on `main` it registers correctly. **Fixture harness**: the repository carries a synthetic Spec Kit project under [`tests/fixture/`](https://github.com/stn1slv/spec-kit-archive/tree/main/tests/fixture). Each case runs in a fresh agent that gets only `commands/archive.md` and its own working copy, and may not read the expectations, the baselines, the changelog or git history. Each round's expectations are committed before its runs, and every result is checked against the files the run actually wrote. For 1.4.0 there were three rounds (7, 7b and 7c), recorded in [`BASELINE-v1.4.0.md`](https://github.com/stn1slv/spec-kit-archive/blob/main/tests/fixture/BASELINE-v1.4.0.md). They cover retirement chains, renumbered IDs, multi-ref `RETIRED:` lines, mandatory hooks running in order, and a failing mandatory hook stopping the run. A mandatory control case reproduces the earlier result. **Review**: two six-model reviews ran over the release branch, and their findings were fixed and re-tested before the release. **Real-project testing**: as in earlier submissions, v1.1.0 was verified end to end on [stn1slv/Overtype@15cddd1](https://github.com/stn1slv/Overtype/commit/15cddd14a312f6b9a25ebf2f4f5ed35ad0b98309), and another user field-tested v1.1.1 on an eight-feature project ([issue #3](https://github.com/stn1slv/spec-kit-archive/issues/3)). v1.4.0 itself has not been re-run on an external live project; its behavioural verification is the fixture harness above. The extension writes only Markdown under `.specify/memory/`, the project's agent context files, and the archived feature's own `**Status**` field. It runs no code, makes no network calls, and needs no credentials. ### Example Usage ```bash # Install (add --force when upgrading an existing install) specify extension add archive --from https://github.com/stn1slv/spec-kit-archive/archive/refs/tags/v1.4.0.zip --force # Archive a merged feature into project memory, after its PR is merged /speckit.archive.run specs/007-invoice-settings # Restrict scope if desired /speckit.archive.run specs/007-invoice-settings --spec-only # Free-form guidance, as in the core commands /speckit.archive.run specs/007-invoice-settings Pay extra attention to the entity model. ``` ### Proposed Catalog Entry ```json { "archive": { "name": "Archive Extension", "id": "archive", "description": "Archive merged features into main project memory, resolving gaps and conflicts.", "author": "Stanislav Deviatov", "version": "1.4.0", "download_url": "https://github.com/stn1slv/spec-kit-archive/archive/refs/tags/v1.4.0.zip", "repository": "https://github.com/stn1slv/spec-kit-archive", "homepage": "https://github.com/stn1slv/spec-kit-archive", "documentation": "https://github.com/stn1slv/spec-kit-archive/blob/main/README.md", "changelog": "https://github.com/stn1slv/spec-kit-archive/blob/main/CHANGELOG.md", "license": "MIT", "category": "docs", "effect": "read-write", "requires": { "speckit_version": ">=0.14.0" }, "provides": { "commands": 1, "hooks": 0 }, "tags": [ "archive", "memory", "merge", "changelog" ], "verified": false, "downloads": 0, "stars": 30, "created_at": "2026-03-14T00:00:00Z", "updated_at": "2026-10-02T00:00:00Z" } } ``` ### Additional Context 1.4.0 fixes two defects that the 1.3.0 baseline recorded as open, and brings hook handling in line with core: - **Retired requirements stay retired.** Re-archiving a feature could bring back requirements that a later feature had retired, under new IDs. A new step reads the changelog's `RETIRED:` lines and leaves such an item out, but only when its content agrees with the retirement, because feature-local IDs move when specs are renumbered. - **Idempotency per artifact.** "Already merged" now suppresses duplicates only; missing sections are still completed. - **Hooks follow core's rules.** The extension-defined `before_archive` / `after_archive` events now use core's hook wording and defaults. The README also gained sections on when to run the command (after merge, not as a workflow step) and on how archived memory can reach later `specify` and `plan` runs, which is a frequent question in #152 and #620. Release notes: https://github.com/stn1slv/spec-kit-archive/releases/tag/v1.4.0