AgentSkillsCN

openspec-bulk-archive-change

一次性归档多个已完成的变更。当需要同时归档多项并行变更时,可调用此技能。

SKILL.md
--- frontmatter
name: openspec-bulk-archive-change
description: Archive multiple completed changes at once. Use when archiving several parallel changes.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.0.0"

Archive multiple completed changes in a single operation.

This skill allows you to batch-archive changes, handling spec conflicts intelligently by checking the codebase to determine what's actually implemented.

Input: None required (prompts for selection)

Steps

  1. Get active changes

    Run openspec list --json to get all active changes.

    If no active changes exist, inform user and stop.

  2. Prompt for change selection

    Use AskUserQuestion tool with multi-select to let user choose changes:

    • Show each change with its schema
    • Include an option for "All changes"
    • Allow any number of selections (1+ works, 2+ is the typical use case)

    IMPORTANT: Do NOT auto-select. Always let the user choose.

  3. Batch validation - gather status for all selected changes

    For each selected change, collect:

    a. Artifact status - Run openspec status --change "<name>" --json

    • Parse schemaName and artifacts list
    • Note which artifacts are done vs other states

    b. Task completion - Read openspec/changes/<name>/tasks.md

    • Count - [ ] (incomplete) vs - [x] (complete)
    • If no tasks file exists, note as "No tasks"

    c. Delta specs - Check openspec/changes/<name>/specs/ directory

    • List which capability specs exist
    • For each, extract requirement names (lines matching ### Requirement: <name>)
  4. Detect spec conflicts

    Build a map of capability -> [changes that touch it]:

    code
    auth -> [change-a, change-b]  <- CONFLICT (2+ changes)
    api  -> [change-c]            <- OK (only 1 change)
    

    A conflict exists when 2+ selected changes have delta specs for the same capability.

  5. Resolve conflicts agentically

    For each conflict, investigate the codebase:

    a. Read the delta specs from each conflicting change to understand what each claims to add/modify

    b. Search the codebase for implementation evidence:

    • Look for code implementing requirements from each delta spec
    • Check for related files, functions, or tests

    c. Determine resolution:

    • If only one change is actually implemented -> sync that one's specs
    • If both implemented -> apply in chronological order (older first, newer overwrites)
    • If neither implemented -> skip spec sync, warn user

    d. Record resolution for each conflict:

    • Which change's specs to apply
    • In what order (if both)
    • Rationale (what was found in codebase)
  6. Show consolidated status table

    Display a table summarizing all changes:

    code
    | Change               | Artifacts | Tasks | Specs   | Conflicts | Status |
    |---------------------|-----------|-------|---------|-----------|--------|
    | schema-management   | Done      | 5/5   | 2 delta | None      | Ready  |
    | project-config      | Done      | 3/3   | 1 delta | None      | Ready  |
    | add-oauth           | Done      | 4/4   | 1 delta | auth (!)  | Ready* |
    | add-verify-skill    | 1 left    | 2/5   | None    | None      | Warn   |
    

    For conflicts, show the resolution:

    code
    * Conflict resolution:
      - auth spec: Will apply add-oauth then add-jwt (both implemented, chronological order)
    

    For incomplete changes, show warnings:

    code
    Warnings:
    - add-verify-skill: 1 incomplete artifact, 3 incomplete tasks
    
  7. Confirm batch operation

    Use AskUserQuestion tool with a single confirmation:

    • "Archive N changes?" with options based on status
    • Options might include:
      • "Archive all N changes"
      • "Archive only N ready changes (skip incomplete)"
      • "Cancel"

    If there are incomplete changes, make clear they'll be archived with warnings.

  8. Execute archive for each confirmed change

    Process changes in the determined order (respecting conflict resolution):

    a. Sync specs if delta specs exist:

    • Use the openspec-sync-specs approach (agent-driven intelligent merge)
    • For conflicts, apply in resolved order
    • Track if sync was done

    b. Perform the archive:

    bash
    mkdir -p openspec/changes/archive
    mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
    

    c. Track outcome for each change:

    • Success: archived successfully
    • Failed: error during archive (record error)
    • Skipped: user chose not to archive (if applicable)
  9. Display summary

    Show final results:

    code
    ## Bulk Archive Complete
    
    Archived 3 changes:
    - schema-management-cli -> archive/2026-01-19-schema-management-cli/
    - project-config -> archive/2026-01-19-project-config/
    - add-oauth -> archive/2026-01-19-add-oauth/
    
    Skipped 1 change:
    - add-verify-skill (user chose not to archive incomplete)
    
    Spec sync summary:
    - 4 delta specs synced to main specs
    - 1 conflict resolved (auth: applied both in chronological order)
    

    If any failures:

    code
    Failed 1 change:
    - some-change: Archive directory already exists
    

Conflict Resolution Examples

Example 1: Only one implemented

code
Conflict: specs/auth/spec.md touched by [add-oauth, add-jwt]

Checking add-oauth:
- Delta adds "OAuth Provider Integration" requirement
- Searching codebase... found src/auth/oauth.ts implementing OAuth flow

Checking add-jwt:
- Delta adds "JWT Token Handling" requirement
- Searching codebase... no JWT implementation found

Resolution: Only add-oauth is implemented. Will sync add-oauth specs only.

Example 2: Both implemented

code
Conflict: specs/api/spec.md touched by [add-rest-api, add-graphql]

Checking add-rest-api (created 2026-01-10):
- Delta adds "REST Endpoints" requirement
- Searching codebase... found src/api/rest.ts

Checking add-graphql (created 2026-01-15):
- Delta adds "GraphQL Schema" requirement
- Searching codebase... found src/api/graphql.ts

Resolution: Both implemented. Will apply add-rest-api specs first,
then add-graphql specs (chronological order, newer takes precedence).

Output On Success

code
## Bulk Archive Complete

Archived N changes:
- <change-1> -> archive/YYYY-MM-DD-<change-1>/
- <change-2> -> archive/YYYY-MM-DD-<change-2>/

Spec sync summary:
- N delta specs synced to main specs
- No conflicts (or: M conflicts resolved)

Output On Partial Success

code
## Bulk Archive Complete (partial)

Archived N changes:
- <change-1> -> archive/YYYY-MM-DD-<change-1>/

Skipped M changes:
- <change-2> (user chose not to archive incomplete)

Failed K changes:
- <change-3>: Archive directory already exists

Output When No Changes

code
## No Changes to Archive

No active changes found. Use `/opsx:new` to create a new change.

Guardrails

  • Allow any number of changes (1+ is fine, 2+ is the typical use case)
  • Always prompt for selection, never auto-select
  • Detect spec conflicts early and resolve by checking codebase
  • When both changes are implemented, apply specs in chronological order
  • Skip spec sync only when implementation is missing (warn user)
  • Show clear per-change status before confirming
  • Use single confirmation for entire batch
  • Track and report all outcomes (success/skip/fail)
  • Preserve .openspec.yaml when moving to archive
  • Archive directory target uses current date: YYYY-MM-DD-<name>
  • If archive target exists, fail that change but continue with others