Awesome-omni-skill openspec-bulk-archive-change

Archive multiple completed changes at once. Use when archiving several parallel changes.

install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/tools/openspec-bulk-archive-change-durandom" ~/.claude/skills/diegosouzapw-awesome-omni-skill-openspec-bulk-archive-change-087c43 && rm -rf "$T"
manifest: skills/tools/openspec-bulk-archive-change-durandom/SKILL.md
source content

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

    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:

   | 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   |
```text

   For conflicts, show the resolution:

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

   For incomplete changes, show warnings:

```text
   Warnings:
   - add-verify-skill: 1 incomplete artifact, 3 incomplete tasks
```text

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

1. **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>
```text

   c. **Track outcome** for each change:
      - Success: archived successfully
      - Failed: error during archive (record error)
      - Skipped: user chose not to archive (if applicable)

1. **Display summary**

   Show final results:

```text
   ## 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)
```text

   If any failures:

```text
   Failed 1 change:
   - some-change: Archive directory already exists
```text

## Conflict Resolution Examples

Example 1: Only one implemented

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

Example 2: Both implemented

```text
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).
```text

**Output On Success**

```text
## 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)
```text

**Output On Partial Success**

```text
## 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
```text

**Output When No Changes**

```text
## No Changes to Archive

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

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