You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is an update to an existing catalog entry, not a new submission. The archive extension is already in extensions/catalog.community.json at version 1.1.0. This submission bumps it to 1.2.2, covering three releases (1.2.0, 1.2.1, 1.2.2). Four fields change: version, download_url, stars, and updated_at. Everything else, including the description and tags, is unchanged.
Extension ID
archive
Extension Name
Archive Extension
Version
1.2.2
Description
Archive merged features into main project memory, resolving gaps and conflicts.
None beyond Spec Kit's own check-prerequisites.sh.
Number of Commands
1
Number of Hooks (optional)
0
Tags
archive, memory, merge, changelog
Key Features
What 1.2.x adds over 1.1.0 (full detail in CHANGELOG.md). Most of it came from a field report by a user who ran v1.1.1 on a real eight-feature project (stn1slv/spec-kit-archive#3):
Consolidation detection pass (1.2.0), modelled on core /speckit.analyze. Every incoming item is keyed with an imperative-phrase slug, existing entries are indexed per section, lookalike pairs are shortlisted, and each pair gets an explicit fold / separate / contradiction verdict before anything is written. The report always states incoming / examined / folded, so "zero duplicates" reads as "examined and found distinct" rather than "did not look". That was exactly the field report's core complaint, against a 612-entry main spec.
Guidance text restored (1.2.0). Free-form text after the feature path is accepted again, matching the core spec-kit commands. v1.1.1's strict rejection had broken a working guided workflow. Guidance steers attention and report detail; it cannot add content sources, skip steps, change scope or IDs, or authorize removals, and it is echoed verbatim in the report so runs stay auditable.
Bounded bugs/ support (1.2.0), designed around what spec-kit-bugfix actually writes. Requirement text is still never taken from bug reports, since the patch step already writes amendments into the feature's own artifacts. New: a per-report status audit that treats Status as a claim rather than a verification, addressed bug IDs in the changelog entry, root-cause analyses feeding the agent file's Known Issues, and extraction rules for bugfix annotations (struck-through text is never archived as live, **Bugfix**: lines are metadata, reopened tasks count as incomplete).
Constitution compliance in three shapes (1.2.1, refined in 1.2.2). A MUST rule can fail in more than one way, and the check previously tested only for direct contradiction. A conflict is feature content contradicting a rule: the user is asked, and an unresolved one withholds that item only while the rest of the feature archives normally. An unmet obligation is a rule requiring a statement the feature never makes ("every feature that stores user data MUST state its retention rule"): asked, but never a reason to withhold. An action-requiring rule ("all API routes MUST have automated tests") is reported as unverified and never flagged, because this command reads artifacts and cannot inspect a test run. A feature's own ## Constitution Check is input rather than a verdict, and is never archived into main memory.
Legacy plan scalars are no longer understated (1.2.1). When a shared Technical Context is first created in a plan.md that still holds pre-v1.1.3 per-feature blocks, scalar fields are seeded by composing the earlier features' values with this run's, one source ref per contributor. A scalar has one slot, so seeding it with only the current run's value made the file assert a narrower constraint set than the project actually has.
A round of ambiguity fixes (1.2.2), each found by an agent executing the command against the test fixture rather than by reading it. Among them: story insertion order no longer contradicts the never-renumber rule; superseding one item of a multi-item scalar no longer drops refs that still vouch for surviving clauses; a supersession that leaves prose behind is now reported; and 2.4's "whole entries only" test has a stated decision procedure, because two runners had reached opposite verdicts on the same pair.
Testing Checklist
Extension installs successfully via download URL
All commands execute without errors
Documentation is complete and accurate
No security vulnerabilities identified
Tested on at least one real project
Submission Requirements
Valid extension.yml manifest included
README.md with installation and usage instructions
LICENSE file included
GitHub release created with version tag
All command files exist and are properly formatted
Extension ID follows naming conventions (lowercase-with-hyphens)
Testing Details
Install: specify extension add archive --from https://github.com/stn1slv/spec-kit-archive/archive/refs/tags/v1.2.2.zip --force on macOS with the current Spec Kit CLI. The tag archive returns HTTP 200 and the release is published (not a draft, not a prerelease).
Real-project testing: v1.1.0 was verified end to end on stn1slv/Overtype@15cddd1, and v1.1.1 was independently field-tested by another user on an eight-feature project with a 612-entry main spec, using gpt-5.5 on codex-cli with specify 0.16.0 (issue #3). That report is what drove most of 1.2.0. Stated plainly: v1.2.2 itself has not been re-run on an external live project. Its verification was the fixture harness described below, which is the same harness that produced every 1.2.x finding.
Fixture harness: the repository carries a synthetic Spec Kit project under tests/fixture/ with five features, a constitution, three overlay states (clean, archived-state/, and a legacy-state/ reproducing pre-v1.1.3 per-feature plan blocks), and pre-registered expectations. Each run uses a fresh agent given only commands/archive.md and its own working copy, forbidden from reading the expectations file, the baselines, the changelog or git history. Expectations must land in a commit before the runs that judge them, and every claim is verified against the files each run actually wrote. Results are recorded per release in BASELINE-v*.md, including what each release did not cover.
For 1.2.2 specifically, runs across four scenarios (clean fixture, archived-state/ overlay, sequential two-feature archival, and an unresolved-constitution-conflict path) produced every fix in that release. Three of them were identified by two runners disagreeing with each other on the same input, which is the clearest signal this project has found for an ambiguous instruction. Two limitations are recorded openly in BASELINE-v1.2.2.md: --changelog-only is still untested, and the re-raised-pair exemption ships reasoned but never executed.
The extension writes only Markdown documentation under .specify/memory/ and the feature's own artifacts. It runs no code, spawns no network calls, and requires no credentials.
Example Usage
# Install (add --force when upgrading an existing install)
specify extension add archive --from https://github.com/stn1slv/spec-kit-archive/archive/refs/tags/v1.2.2.zip --force
# Archive a merged feature into project memory
/speckit.archive.run specs/005-teams-ax-recovery
# Restrict scope if desired
/speckit.archive.run specs/005-teams-ax-recovery --spec-only
# Free-form guidance, as in the core commands
/speckit.archive.run specs/005-teams-ax-recovery Pay extra attention to the entity model.
One small inconsistency noticed while preparing this, unrelated to the version bump: the Community Extensions table in docs/community/extensions.md still carries the 1.0.0 description for this extension ("Archive merged features into main project memory."), while catalog.community.json carries the 1.1.0 one ("Archive merged features into main project memory, resolving gaps and conflicts."). Worth syncing whenever this entry is next touched, whichever wording you prefer.
stars is listed as 25 above to reflect the current count, but the schema marks it auto-updated, so please treat that value as informational.
Note
This is an update to an existing catalog entry, not a new submission. The
archiveextension is already inextensions/catalog.community.jsonat version 1.1.0. This submission bumps it to 1.2.2, covering three releases (1.2.0, 1.2.1, 1.2.2). Four fields change:version,download_url,stars, andupdated_at. Everything else, including the description and tags, is unchanged.Extension ID
archive
Extension Name
Archive Extension
Version
1.2.2
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.2.2.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
Required Tools (optional)
None beyond Spec Kit's own
check-prerequisites.sh.Number of Commands
1
Number of Hooks (optional)
0
Tags
archive, memory, merge, changelog
Key Features
What 1.2.x adds over 1.1.0 (full detail in CHANGELOG.md). Most of it came from a field report by a user who ran v1.1.1 on a real eight-feature project (stn1slv/spec-kit-archive#3):
/speckit.analyze. Every incoming item is keyed with an imperative-phrase slug, existing entries are indexed per section, lookalike pairs are shortlisted, and each pair gets an explicit fold / separate / contradiction verdict before anything is written. The report always statesincoming / examined / folded, so "zero duplicates" reads as "examined and found distinct" rather than "did not look". That was exactly the field report's core complaint, against a 612-entry main spec.bugs/support (1.2.0), designed around whatspec-kit-bugfixactually writes. Requirement text is still never taken from bug reports, since the patch step already writes amendments into the feature's own artifacts. New: a per-report status audit that treatsStatusas a claim rather than a verification, addressed bug IDs in the changelog entry, root-cause analyses feeding the agent file's Known Issues, and extraction rules for bugfix annotations (struck-through text is never archived as live,**Bugfix**:lines are metadata, reopened tasks count as incomplete).## Constitution Checkis input rather than a verdict, and is never archived into main memory.plan.mdthat still holds pre-v1.1.3 per-feature blocks, scalar fields are seeded by composing the earlier features' values with this run's, one source ref per contributor. A scalar has one slot, so seeding it with only the current run's value made the file assert a narrower constraint set than the project actually has.2.4's "whole entries only" test has a stated decision procedure, because two runners had reached opposite verdicts on the same pair.Testing Checklist
Submission Requirements
extension.ymlmanifest includedTesting Details
Install:
specify extension add archive --from https://github.com/stn1slv/spec-kit-archive/archive/refs/tags/v1.2.2.zip --forceon macOS with the current Spec Kit CLI. The tag archive returns HTTP 200 and the release is published (not a draft, not a prerelease).Real-project testing: v1.1.0 was verified end to end on stn1slv/Overtype@15cddd1, and v1.1.1 was independently field-tested by another user on an eight-feature project with a 612-entry main spec, using gpt-5.5 on codex-cli with specify 0.16.0 (issue #3). That report is what drove most of 1.2.0. Stated plainly: v1.2.2 itself has not been re-run on an external live project. Its verification was the fixture harness described below, which is the same harness that produced every 1.2.x finding.
Fixture harness: the repository carries a synthetic Spec Kit project under
tests/fixture/with five features, a constitution, three overlay states (clean,archived-state/, and alegacy-state/reproducing pre-v1.1.3 per-feature plan blocks), and pre-registered expectations. Each run uses a fresh agent given onlycommands/archive.mdand its own working copy, forbidden from reading the expectations file, the baselines, the changelog or git history. Expectations must land in a commit before the runs that judge them, and every claim is verified against the files each run actually wrote. Results are recorded per release inBASELINE-v*.md, including what each release did not cover.For 1.2.2 specifically, runs across four scenarios (clean fixture,
archived-state/overlay, sequential two-feature archival, and an unresolved-constitution-conflict path) produced every fix in that release. Three of them were identified by two runners disagreeing with each other on the same input, which is the clearest signal this project has found for an ambiguous instruction. Two limitations are recorded openly inBASELINE-v1.2.2.md:--changelog-onlyis still untested, and the re-raised-pair exemption ships reasoned but never executed.The extension writes only Markdown documentation under
.specify/memory/and the feature's own artifacts. It runs no code, spawns no network calls, and requires no credentials.Example Usage
Proposed Catalog Entry
{ "archive": { "name": "Archive Extension", "id": "archive", "description": "Archive merged features into main project memory, resolving gaps and conflicts.", "author": "Stanislav Deviatov", "version": "1.2.2", "download_url": "https://github.com/stn1slv/spec-kit-archive/archive/refs/tags/v1.2.2.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.1.0" }, "provides": { "commands": 1, "hooks": 0 }, "tags": [ "archive", "memory", "merge", "changelog" ], "verified": false, "downloads": 0, "stars": 25, "created_at": "2026-03-14T00:00:00Z", "updated_at": "2026-08-11T00:00:00Z" } }Additional Context
Previous update: #3977 (1.0.0 to 1.1.0).
One small inconsistency noticed while preparing this, unrelated to the version bump: the Community Extensions table in
docs/community/extensions.mdstill carries the 1.0.0 description for this extension ("Archive merged features into main project memory."), whilecatalog.community.jsoncarries the 1.1.0 one ("Archive merged features into main project memory, resolving gaps and conflicts."). Worth syncing whenever this entry is next touched, whichever wording you prefer.starsis listed as 25 above to reflect the current count, but the schema marks it auto-updated, so please treat that value as informational.