--- name: accelint-qrspi-apply description: Implement QRSPI-planned OpenSpec changes with intelligent parallelization. Use when the user wants to apply a QRSPI change, implement tasks with parallelization, or says "apply this QRSPI change", "implement with parallelization", "run the parallel slices". This skill is specifically designed for changes created via accelint-qrspi that include "Parallelization Strategy" sections in tasks.md. It orchestrates parallel sub-agent execution for independent task slices using OpenSpec CLI workflows. Make sure to use this skill when the user mentions applying QRSPI changes, running parallel implementation, or working on changes with vertical slices. license: Apache-2.0 compatibility: Requires openspec CLI, sub-agent support, and QRSPI-generated changes. metadata: author: accelint version: "1.7.1" --- # Accelint QRSPI Apply Implement OpenSpec changes with intelligent parallelization. This skill orchestrates parallel sub-agent execution based on dependency analysis in the OpenSpec task file, validates implementation, and manages the complete apply workflow. ## What This Skill Does **Automates**: The implementation phase of spec-driven development with parallel execution **Scope**: Task implementation → Validation → Archive readiness **Output**: Fully implemented change ready for archival **Does NOT**: Create plans, modify specs, or automatically archive (suggests archival when ready) ## Prerequisites - OpenSpec CLI installed and initialized - OpenSpec change created via `accelint-qrspi` skill (includes "Parallelization Strategy" in tasks.md) - Sub-agent support (for parallel execution) - The expanded OpenSpec workflows (`explore`, `new`, `continue`) enabled **Important**: This skill is specifically designed for QRSPI-planned changes. Standard OpenSpec changes without parallelization strategies should use the regular `openspec-apply-change` skill directly. ## Workflow Overview ``` ┌─────────────────────────────────────────────────────────────────┐ │ Stage Action Output │ ├─────────────────────────────────────────────────────────────────┤ │ Preflight Select and validate change Ready to proceed │ │ Start Time Record started_at timestamp Telemetry marker │ │ Parse Extract parallelization Dependency graph │ │ Dependencies Identify blocking tasks Execution plan │ │ Load Context Read config.yaml context Project context │ │ Execute Run slices (parallel/serial) Implemented code │ │ Update Docs Sync living documents Updated docs │ │ Complete Time Record completed_at timestamp Telemetry marker │ │ Verify Run opsx:verify Verification rpt │ └─────────────────────────────────────────────────────────────────┘ ``` ## Implementation Steps ### Preflight and Change Selection 1. If a change name is provided in the skill arguments, use it 2. Otherwise, try to infer from conversation context (recent mentions of change names) 3. If ambiguous or missing: ```bash openspec list --json ``` Parse the JSON and use **AskUserQuestion** to let the user select the change 4. Announce: "Applying change: ``" and how to override (e.g., re-invoke with different name) 5. Check that tasks.md exists: ```bash openspec status --change "" --json ``` If `state: "blocked"` (missing tasks), exit with: "Tasks artifact is missing. Run `openspec-continue-change` to generate tasks before applying." ### Record Implementation Start **Goal**: Mark when implementation begins for telemetry tracking. 6. Read the design.md file from `openspec/changes//design.md` to check if `started_at` timestamp exists in frontmatter 7. If `started_at` is NOT present in the frontmatter (first time applying this change): - Add the `started_at` timestamp to the frontmatter using ISO 8601 format with Z suffix - CRITICAL: Generate the timestamp deterministically using this command: ```bash python3 -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).isoformat(timespec='seconds').replace('+00:00', 'Z'))" ``` - Insert `started_at` immediately after the `created_at` field to keep all timestamps grouped together - Preserve all other frontmatter fields (change, created_at, specs_touched, decisions) in their original order - Inform user: "Recording implementation start time..." 8. If `started_at` IS present (resuming after context clear or pause): - Do not modify the timestamp — preserve the original start time - Inform user: "Resuming implementation (started at [timestamp])..." **Example frontmatter after adding started_at:** ```yaml --- change: created_at: "2026-08-17T15:00:00.000Z" started_at: "2026-08-17T16:30:00.000Z" specs_touched: [, ] decisions: - id: D1 choice: rationale: alternatives: [