Skip to content

[Extension]: Update Archive Extension to v1.2.2 #4049

Description

@stn1slv

Note

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.

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

=0.1.0

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):

  • 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.

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.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.

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions