--- name: OPSX: Archive description: Archive a completed change in the experimental workflow category: Workflow tags: [workflow, archive, experimental] --- Archive a completed change in the experimental workflow. **Input**: Optionally specify `--change ` after `/opsx:archive`. If omitted, MUST prompt for available changes. **Steps** 1. **If no change name provided, prompt for selection** Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select. Show only active changes (not already archived). Include the schema used for each change if available. **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose. 2. **Check artifact completion status** Run `openspec status --change "" --json` to check artifact completion. Parse the JSON to understand: - `schemaName`: The workflow being used - `artifacts`: List of artifacts with their status (`done` or other) **If any artifacts are not `done`:** - Display warning listing incomplete artifacts - Prompt user for confirmation to continue - Proceed if user confirms 3. **Check task completion status** Read the tasks file (typically `tasks.md`) to check for incomplete tasks. Count tasks marked with `- [ ]` (incomplete) vs `- [x]` (complete). **If incomplete tasks found:** - Display warning showing count of incomplete tasks - Prompt user for confirmation to continue - Proceed if user confirms **If no tasks file exists:** Proceed without task-related warning. 4. **Check if delta specs need syncing** Check if `specs/` directory exists in the change with spec files. **If delta specs exist, perform a quick sync check:** a. **For each delta spec** at `openspec/changes//specs//spec.md`: - Extract requirement names (lines matching `### Requirement: `) - Note which sections exist (ADDED, MODIFIED, REMOVED) b. **Check corresponding main spec** at `openspec/specs//spec.md`: - If main spec doesn't exist → needs sync - If main spec exists, check if ADDED requirement names appear in it - If any ADDED requirements are missing from main spec → needs sync c. **Report findings:** **If sync needed:** ``` ⚠️ Delta specs may not be synced: - specs/auth/spec.md → Main spec missing requirement "Token Refresh" - specs/api/spec.md → Main spec doesn't exist yet Would you like to sync now before archiving? ``` - Use **AskUserQuestion tool** with options: "Sync now", "Archive without syncing" - If user chooses sync, execute `/opsx:sync` logic **If already synced (all requirements found):** - Proceed without prompting (specs appear to be in sync) **If no delta specs exist:** Proceed without sync-related checks. 5. **Perform the archive** Create the archive directory if it doesn't exist: ```bash mkdir -p openspec/changes/archive ``` Generate target name using current date: `YYYY-MM-DD-` **Check if target already exists:** - If yes: Fail with error, suggest renaming existing archive or using different date - If no: Move the change directory to archive ```bash mv openspec/changes/ openspec/changes/archive/YYYY-MM-DD- ``` 6. **Display summary** Show archive completion summary including: - Change name - Schema that was used - Archive location - Spec sync status (synced / not synced / no delta specs) - Note about any warnings (incomplete artifacts/tasks) **Output On Success** ``` ## Archive Complete **Change:** **Schema:** **Archived to:** openspec/changes/archive/YYYY-MM-DD-/ **Specs:** ✓ Synced to main specs All artifacts complete. All tasks complete. ``` **Output On Success (No Delta Specs)** ``` ## Archive Complete **Change:** **Schema:** **Archived to:** openspec/changes/archive/YYYY-MM-DD-/ **Specs:** No delta specs All artifacts complete. All tasks complete. ``` **Output On Success With Warnings** ``` ## Archive Complete (with warnings) **Change:** **Schema:** **Archived to:** openspec/changes/archive/YYYY-MM-DD-/ **Specs:** ⚠️ Not synced **Warnings:** - Archived with 2 incomplete artifacts - Archived with 3 incomplete tasks - Delta specs were not synced (user chose to skip) Review the archive if this was not intentional. ``` **Output On Error (Archive Exists)** ``` ## Archive Failed **Change:** **Target:** openspec/changes/archive/YYYY-MM-DD-/ Target archive directory already exists. **Options:** 1. Rename the existing archive 2. Delete the existing archive if it's a duplicate 3. Wait until a different date to archive ``` **Guardrails** - Always prompt for change selection if not provided - Use artifact graph (openspec status --json) for completion checking - Don't block archive on warnings - just inform and confirm - Preserve .openspec.yaml when moving to archive (it moves with the directory) - Quick sync check: look for requirement names in delta specs, verify they exist in main specs - Show clear summary of what happened - If sync is requested, use /opsx:sync approach (agent-driven)