원클릭으로
speckit-archive
// Archive a feature specification into main project memory after merge, resolving gaps and conflicts
// Archive a feature specification into main project memory after merge, resolving gaps and conflicts
Run the full speckit workflow end-to-end — specify, plan, critique, tasks, implement, review, extract — making all decisions autonomously.
Perform a dual-lens critical review of the specification and plan from both product strategy and engineering risk perspectives before implementation.
Extract knowledge, guidelines, and ADRs from one or more completed spec directories into the project documentation system.
Run a session retrospective that surfaces context-management gaps and routes them to approved follow-up actions.
Produce a flow-level summary of the current Claude Code session — executive summary, chronological timeline, and outcomes — written into the active feature directory next to spec.md / plan.md.
| name | speckit-archive |
| description | Archive a feature specification into main project memory after merge, resolving gaps and conflicts |
| compatibility | Requires spec-kit project structure with .specify/ directory |
| metadata | {"author":"github-spec-kit","source":"archive:commands/archive.md"} |
Act as the Chief Software Architect and Documentation Maintainer.
A feature has been merged into the main branch. Your goal is to archive the feature specification into the main project memory — ensuring completeness, resolving conflicts, closing gaps, and respecting the project constitution.
$ARGUMENTS
You MUST consider the user input before proceeding (if not empty).
Parse $ARGUMENTS as follows:
specs/007-invoice-settings)Supported scope modifiers (if none provided, update all artifacts):
--spec-only — update only .specify/memory/spec.md--plan-only — update only .specify/memory/plan.md--changelog-only — update only .specify/memory/changelog.md--agent-only — update only the agent knowledge file (GEMINI.md / AGENTS.md / CLAUDE.md)If $ARGUMENTS is empty, output ERROR: No feature spec directory provided. Usage: /speckit.archive.run specs/###-feature-name [--scope-modifier] and stop.
Run .specify/scripts/bash/check-prerequisites.sh --json --paths-only to identify the active feature directory and its artifacts. This script is mandatory for path discovery. If the script is missing, stop and inform the user.
Derive absolute paths for:
REPO_ROOT (from .specify/scripts/bash/check-prerequisites.sh --json --paths-only output)FEATURE_DIR (from .specify/scripts/bash/check-prerequisites.sh --json --paths-only output)MEMORY_DIR (REPO_ROOT / .specify/memory)TEMPLATES_DIR (REPO_ROOT / .specify/templates)Path convention: Feature specs live in specs/{###-feature-name}/ at repo root. Use absolute paths for all file operations.
Verify FEATURE_DIR exists and contains:
spec.md (required)plan.md (required)If any required file is missing:
⚠️ Invalid feature spec: Missing required files in
FEATURE_DIR. Expected:
- spec.md
- plan.md
Run
/speckit.specifyand/speckit.planfirst.
Then stop. Do not modify any files.
Note which of these exist in FEATURE_DIR (for use in later steps):
tasks.md — archival and task countingresearch.md — knowledge capture, known issues & gotchasdata-model.md — entity mergingcontracts/ — API documentation (non-empty directory)checklists/ — quality trackingquickstart.md — integration scenariosCheck if MEMORY_DIR exists:
If MEMORY_DIR exists: Read its contents. Note which files are present (constitution.md, spec.md, plan.md, changelog.md).
If MEMORY_DIR does not exist: Create it:
mkdir -p MEMORY_DIR
If MEMORY_DIR/spec.md does not exist (first archival):
TEMPLATES_DIR/spec-template.md exists, copy it as the seed and populate from the feature specspec.md with the feature's spec content as the initial main spec.specify/memory/spec.md from first feature"If MEMORY_DIR/plan.md does not exist (first archival):
TEMPLATES_DIR/plan-template.md exists, copy it as the seed and populate from the feature planplan.md with the feature's plan content as the initial main plan.specify/memory/plan.md from first feature"Read MEMORY_DIR/constitution.md if it exists. Extract:
Constitution is non-negotiable. Any feature content that conflicts with a constitution MUST principle is flagged as CRITICAL and must be resolved before merging. Do not silently override or reinterpret constitution rules.
Check if REPO_ROOT/.specify/extensions.yml exists:
hooks.before_archiveenabled: truecondition expressions:
condition field, or it is null/empty, treat the hook as executablecondition, skip the hookoptional flag:
optional: true):
## Extension Hooks
**Optional Pre-Hook**: {extension}
Command: `/{command}` — {description}
To execute: `/{command}`
optional: false):
## Extension Hooks
**Automatic Pre-Hook**: {extension}
EXECUTE_COMMAND: /{command}
Wait for the result before proceeding.
Read the feature specification and extract:
From spec.md:
From plan.md:
From data-model.md (if exists):
From research.md (if exists):
From tasks.md (if exists):
- [X] or - [x]- [ ] or - [X] or - [x]Before merging, systematically check for issues.
For each extracted requirement, user story, and architecture decision, verify it does not conflict with any constitution MUST principle or Architecture Standard.
If a constitution conflict exists, flag it as CRITICAL:
🔴 CONSTITUTION CONFLICT:
- Feature FR-XXX: "[requirement]" conflicts with Principle [N]: "[principle text]"
→ This MUST be resolved before archival can proceed.
Categorize discrepancies between the feature spec and main memory:
| Category | What to look for |
|---|---|
| Requirements | Missing IDs, unmatched acceptance criteria |
| Architecture | Undocumented modules, missing routing/wiring |
| Integration | New contracts not reflected in main plan |
| Data Model | Entity changes without migration notes |
| Testing | New components without test strategy |
If conflicts or significant gaps exist, list them:
⚠️ ISSUES DETECTED:
- FR-005: Main says "X", Feature says "Y" → Recommend: [resolution]
- Entity `User`: Added field `role` → Verify backward compatibility
- Gap: New `/api/settings` route not in main plan routing section
If conflicts or gaps require human judgment, ask only questions that materially change scope or correctness. Skip this step entirely if everything is unambiguous.
Always ask if any CRITICAL constitution conflicts were detected — these cannot be auto-resolved.
Use this format and wait for answers:
## Question [N]: [Topic]
**Context**: [Quote the relevant spec/plan/constitution section]
**Decision Needed**: [1 sentence]
**Suggested Answers**:
| Option | Answer | Implications |
|--------|--------|--------------|
| A | [Option A] | [Impact] |
| B | [Option B] | [Impact] |
| C | [Option C] | [Impact] |
| Custom | Provide your own | [How it affects scope] |
**Your choice**: _[Wait for user response]_
Rules:
NEEDS CLARIFICATION markers in output — beyond that, make reasonable defaults and note them in the report.Before making any edits, produce a brief impact map:
### Impact Map
| Artifact | Sections Affected | Change Type |
|----------|------------------|-------------|
| `.specify/memory/spec.md` | User Stories, FR-012–FR-015, Entities | Append + Update |
| `.specify/memory/plan.md` | Dependencies, Project Structure | Append |
| `.specify/memory/changelog.md` | Merged Features Log | New entry |
| `GEMINI.md` | Recent Changes, Known Issues | Append |
This gives the user a preview before edits are applied.
[Source: specs/###-feature-name] traceability tag to merged content..specify/memory/spec.md).specify/memory/plan.md)Find the project's agent knowledge file (check, in order: GEMINI.md, AGENTS.md, CLAUDE.md in REPO_ROOT).
If found, follow the agent-file-template structure and update these sections:
"Active Technologies" — add any new languages/frameworks/versions from the feature plan.
"Project Structure" — update if modules were added.
"Commands" — add new build/run commands if the tech stack changed.
"Recent Changes" — prepend a new entry:
- ###-feature-name: [Brief description of what was added]
"Known Issues & Gotchas" — if research.md exists in the feature, extract any gotchas/issues and merge them using the standard format:
### ⚠️ [Issue Title]
**Issue:** [What went wrong]
**Root Cause:** [Why it happened]
**Prevention Rule:** [Actionable rule]
Deduplicate against existing entries.
If no agent file exists, skip this step and note it in the report.
Create or update .specify/memory/changelog.md:
## Merged Features Log
### [FEATURE NAME] — YYYY-MM-DD
**Branch:** [branch-name from plan.md]
**Spec:** specs/###-feature-name
**What was added:**
- [Summary of user stories/scenarios implemented]
**New Components:**
- [Modules/services added]
**Tasks Completed:** [completed]/[total] tasks
Count tasks using the checkbox format: - [X] or - [x] = completed; - [ ] = incomplete. If tasks.md does not exist, omit the "Tasks Completed" line.
In the feature's spec.md and plan.md files (inside FEATURE_DIR, not in memory), check for a **Status**: metadata field in the document header (typically in the first 10 lines, e.g., **Status**: Draft).
If found and the value is Draft, update it to Completed:
**Status**: Draft → **Status**: CompletedThis marks the feature specification as finalized after merge. Do not change other status values (e.g., In Progress, Blocked) — only Draft → Completed.
Output the following structured report. Use absolute paths for all file references.
# Archival Report
## Changed Files
| File (absolute path) | Change Summary |
|----------------------|----------------|
| `/absolute/path/to/spec.md` | Added [IDs], [N] user stories, [N] entities |
| `/absolute/path/to/plan.md` | Updated dependencies, project structure |
| `/absolute/path/to/changelog.md` | New entry for [feature name] |
| `/absolute/path/to/GEMINI.md` | Recent Changes, Known Issues |
## Feature Status
[List spec/plan files whose status was updated from Draft to Completed, or "No status fields found"]
## Bootstrapped
[List any files that were created for the first time, or "None"]
## Constitution Compliance
[Confirm all merged content respects constitution constraints, or list any unresolved CRITICAL conflicts]
## Edits Applied
[Brief summary of each artifact update]
## Conflicts Resolved
[List any conflicts that were resolved and how, or "None"]
## Outstanding Items
[Any remaining `NEEDS CLARIFICATION` markers, or "None"]
## Defaults Applied
[Any decisions made with reasonable defaults instead of asking, or "None"]
## Scoping
[Which artifacts were updated, and which were skipped due to scope modifiers]
Important: Do NOT delete the input feature spec files.
Check if REPO_ROOT/.specify/extensions.yml exists:
hooks.after_archiveProvide actionable next steps:
mv specs/###-feature-name .specify/archive/)make test (or the project's equivalent) to verify nothing broke.README.md if CLI commands or user-facing APIs changed.research.md into project memory if applicable.**Status**: Draft updated to Completed (if applicable).NEEDS CLARIFICATION (max 3).