--- description: Archive a completed change in the experimental workflow --- Archive a completed change in the experimental workflow. **Input**: Optionally specify a change name after `/opsx-archive` (e.g., `/opsx-archive add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you 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. **Assess delta spec sync state** Check for delta specs at `openspec/changes//specs/`. If none exist, proceed without sync prompt. **If delta specs exist:** - Compare each delta spec with its corresponding main spec at `openspec/specs//spec.md` - Determine what changes would be applied (adds, modifications, removals, renames) - Show a combined summary before prompting **Prompt options:** - If changes needed: "Sync now (recommended)", "Archive without syncing" - If already synced: "Archive now", "Sync anyway", "Cancel" If user chooses sync, execute `/opsx-sync` logic. Proceed to archive regardless of choice. 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 / sync skipped / 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:** Sync skipped (user chose to skip) **Warnings:** - Archived with 2 incomplete artifacts - Archived with 3 incomplete tasks - Delta spec sync was skipped (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) - Show clear summary of what happened - If sync is requested, use /opsx-sync approach (agent-driven) - If delta specs exist, always run the sync assessment and show the combined summary before prompting