Skill v1.0.2
currentAutomated scan100/100~2 modified
version: "1.0.2" name: autopilot-pipeline description: "Runs the full feature-delivery SDD pipeline end-to-end without user interaction. When called without arguments, auto-selects the first unchecked epic from specs/project-plan.md. Requires Autopilot enabled in config, a Product Document, and a Technical Context Document. Use when running /sddp-autopilot."
Autopilot Pipeline
<rules>
- Runs ALL SDD phases in one uninterrupted turn — loads and executes each sub-skill inline. Does not duplicate sub-skill logic.
- Execute every phase for real. Not a demo, showcase, dry run, or simulation.
- Loading a sub-skill = performing its real work: file edits, installs, builds, tests, validations, retries, QC checks.
- Never invent progress, test results, QC verdicts, or artifact state. Never manually create
.completed,.qc-passed, orqc-report.mdas stand-ins. - If any phase action cannot complete for real → HALT and report blocker. Never simulate success.
AUTOPILOT = truefor every sub-skill invocation.- Never yield control to user between phases — one continuous turn until QC passes or halt.
$ARGUMENTSis optional. When empty andspecs/project-plan.mdexists with unchecked epics, the first unchecked epic is auto-selected.- Both Product Document and Technical Context Document are mandatory.
- Does not execute bootstrap phases (
/sddp-prd,/sddp-systemdesign,/sddp-init). - Report compact progress at each phase boundary: completed phase, blocker delta, next phase.
- Halt conditions strictly defined below — no other conditions stop the pipeline.
- Artifact conventions (
.github/skills/artifact-conventions/SKILL.md): All sub-skill artifact rules apply. - Write all automatic decisions and phase lifecycle events to
FEATURE_DIR/autopilot-log.mdusing the schema defined in Step 1d.
</rules>
<workflow>
0. Acquire Shared Skills
1. Gate Check
1a. Config & Feature Setup
- Read
.github/sddp-config.mdif it exists. - If
specs/prd.mdexists and config has empty## Product Document→**Path**:→ set it tospecs/prd.md. - If
specs/sad.mdexists and config has empty## Technical Context Document→**Path**:→ set it tospecs/sad.md. - If
specs/dod.mdexists and config has empty## Deployment & Operations Document→**Path**:→ set it tospecs/dod.md(optional enrichment, not a prerequisite). - Parse config
## Autopilot→**Enabled**:. Iffalseor missing → HALT: "Autopilot is disabled. Set**Enabled**: truein.github/sddp-config.mdunder## Autopilot." - Auto-select epic when no arguments provided:
- If
$ARGUMENTSnot empty → continue to step 7. - If
specs/project-plan.mdexists: - Read the file and find the first line matching
^- \[ \] (E\d{3}) .+\} (.+?)(?: \[→ Details\].*)?$(first unchecked epic in document order). - Found → extract
EPIC_ID(capture group 1) and epic title (capture group 2, trimmed). Set$ARGUMENTS = "{EPIC_ID} {epic_title}". Log anepic_updaterow: Phase=Gate, Detail="Auto-selected epic {EPIC_ID}", Outcome="{epic_title}", Rationale="first unchecked epic in document order", Artifacts=[specs/project-plan.md](../project-plan.md). - No unchecked epic found → HALT: "All epics in
specs/project-plan.mdare complete. No remaining work." - If
specs/project-plan.mddoes not exist → HALT: "Feature description required. Usage:/sddp-autopilot <feature description>. To enable automatic epic selection, run/sddp-projectplanfirst."
- Delegate: Context Gatherer in full mode with
autopilot=true,naming_seed=$ARGUMENTS→ resolvesFEATURE_DIR,PRODUCT_DOC,TECH_CONTEXT_DOC, all context fields. - If
CONTEXT_BLOCKED = true→ HALT: "[BLOCKING_REASON] Fix and re-run/sddp-autopilot."
1b. Document Gate
Both documents required. Either fails → HALT.
Log each gate result as a gate_check row with the checked document linked in Artifacts.
- Config/autopilot enabled check → Artifacts=
[.github/sddp-config.md](../../.github/sddp-config.md) - Product Document existence/sufficiency → Artifacts=
[specs/prd.md](../prd.md)or the registered product document path - Technical Context Document existence/sufficiency → Artifacts=
[specs/sad.md](../sad.md)or the registered technical context path - Feature complete check → Artifacts=
[.qc-passed](.qc-passed)when present, else—
Product Document:
HAS_PRODUCT_DOC = false→ HALT: "Run/sddp-prdor register in.github/sddp-config.mdunder## Product Document→**Path**:."- Read file at
PRODUCT_DOCpath. Unreadable → HALT. - Sufficiency: Verify ≥3 of 5 categories have substantive content:
- Product vision/purpose:
goal,vision,purpose,problem,objective,mission - Target audience/actors:
user,customer,persona,actor,stakeholder,audience,role - Domain context: ≥2 distinct domain-specific terms
- Scope/boundaries:
scope,in scope,out of scope,boundary,constraint,limitation - Success measures:
KPI,metric,success,measure,outcome,target
- <3 categories → HALT: "Product Document insufficient. Missing: [list]. Need ≥3/5 categories. Run
/sddp-prd."
Technical Context Document:
HAS_TECH_CONTEXT_DOC = false→ HALT: "Run/sddp-systemdesignor register in.github/sddp-config.mdunder## Technical Context Document→**Path**:."- Read file at
TECH_CONTEXT_DOCpath. Unreadable → HALT. - Sufficiency: Verify ≥3 of 5 categories:
- Language/runtime:
language,runtime,python,node,typescript,go,rust,java,C#,.net,ruby,version - Framework/libraries:
framework,react,vue,angular,express,fastapi,django,spring,next,library,dependency - Storage/database:
database,storage,postgres,mysql,mongo,redis,cosmos,sqlite,dynamodb,supabase,firebase - Infrastructure/deployment:
deploy,hosting,cloud,aws,azure,gcp,docker,kubernetes,vercel,CI,CD - Architecture/patterns:
architecture,monolith,microservice,serverless,REST,GraphQL,event-driven,MVC,pattern,layer
- <3 categories → HALT: "Technical Context Document insufficient. Missing: [list]. Need ≥3/5 categories. Run
/sddp-systemdesign."
1c. Feature Complete Check
FEATURE_COMPLETE = true → HALT: "Feature at FEATURE_DIR already complete (.qc-passed exists). Create a new branch."
1d. Initialize Audit Log
Create FEATURE_DIR/autopilot-log.md:
# Autopilot Execution Log> Auto-generated. Records every automatic decision, phase event, and gate check during autopilot execution.| Timestamp | Phase | Event | Detail | Outcome | Rationale | Artifacts ||-----------|-------|-------|--------|---------|-----------|-----------|
Event types — use exactly one of these values in the Event column:
| Event | When to log | |
|---|---|---|
phase_start | A phase begins execution (the "═══ Phase N/7 ═══" report). | |
phase_complete | A phase finishes and its output artifact is verified present. | |
phase_skip | A phase is skipped (pipeline hint, no checklist queue, etc.). | |
gate_check | Each gate verification in Steps 1a–1c (config, doc sufficiency, feature-complete). | |
decision | Autopilot auto-selects a recommended option at any interaction point. | |
halt | Pipeline halts — include the blocking reason and link the missing/blocking artifact. | |
epic_update | specs/project-plan.md is read or modified (epic auto-select, mark complete). |
Column rules:
- Timestamp:
HH:MM:SS(24-hour local time). - Phase:
Gate·Specify·Clarify·Plan·Checklist·Tasks·Analyze·Implement+QC·Post-Pipeline. - Event: One of the event types above.
- Detail: Concise description of the decision point, action, or check performed.
- Outcome: The chosen value, pass/fail result, or produced status.
- Rationale: Brief reason the outcome was chosen.
- Artifacts: Comma-separated clickable relative Markdown links to every document mentioned in this row. Use paths relative to
FEATURE_DIR: feature artifacts stay local (e.g.,[spec.md](spec.md),[plan.md](plan.md)), project-level docs underspecs/go up one level (e.g.,[specs/project-plan.md](../project-plan.md),[specs/prd.md](../prd.md),[specs/sad.md](../sad.md)), and repo-root docs outsidespecs/go up two levels (e.g.,[.github/sddp-config.md](../../.github/sddp-config.md)). If no artifact is relevant, write—.
Known artifact paths (always link when mentioned): spec.md, plan.md, tasks.md, analysis-report.md, qc-report.md, manual-test.md, research.md, checklists/, autopilot-log.md, specs/project-plan.md, specs/plan/{EPIC_ID}.md, specs/prd.md, specs/sad.md, specs/dod.md, .github/sddp-config.md.
Log gate check results (Steps 1a–1c) as gate_check rows now.
2. Pipeline Execution
Execute phases sequentially: log phase_start → report start → load and execute SKILL.md inline for real → verify output artifact → log phase_complete (with artifact link) or phase_skip → continue.
Phase 1: Specify
- Log
phase_startrow: Phase=Specify, Detail="Begin feature specification". - Report: "═══ Phase 1/7: Specify ═══"
- Execute
.github/skills/specify-feature/SKILL.mdwith$ARGUMENTS. - Verify:
FEATURE_DIR/spec.mdexists. Missing → HALT (loghaltrow linking[spec.md](spec.md)). - Log
phase_completerow: Outcome="spec.md created", Artifacts=[spec.md](spec.md). - Pipeline hints: If
EPIC_IDis resolved andspecs/plan/{EPIC_ID}.mdexists → read the epic detail file, parse Pipeline hints → storeHINT_SKIP_CLARIFY,HINT_SKIP_CHECKLIST,HINT_LIGHTWEIGHT(default allfalse). Log each parsed hint as adecisionrow with Artifacts=[specs/plan/{EPIC_ID}.md](../plan/{EPIC_ID}.md).
Phase 2: Clarify
HINT_SKIP_CLARIFY = true→ logphase_skiprow: Detail="Pipeline hint: skip_clarify", Rationale="Epic hint from epic detail file", Artifacts=[spec.md](spec.md), [specs/plan/{EPIC_ID}.md](../plan/{EPIC_ID}.md). Report skipped. Skip to Phase 3.- Otherwise:
- Log
phase_startrow: Phase=Clarify. - Report: "═══ Phase 2/7: Clarify ═══"
- Execute
.github/skills/clarify-spec/SKILL.md→ verifyspec.mdexists. - Log
phase_completerow: Artifacts=[spec.md](spec.md).
Phase 3: Plan
- Log
phase_startrow: Phase=Plan. HINT_LIGHTWEIGHT = true→ logdecisionrow: Detail="Lightweight mode enabled", Artifacts=[specs/plan/{EPIC_ID}.md](../plan/{EPIC_ID}.md). PassLIGHTWEIGHT = trueto plan skill.- Report: "═══ Phase 3/7: Plan ═══"
- Execute
.github/skills/plan-feature/SKILL.md→ the Spec → Plan gate (Step 1.6) runs the Spec Validator; a FAIL halts the pipeline here (autopilot guard P0). VerifyFEATURE_DIR/plan.mdexists. Missing → HALT (loghaltrow linking[plan.md](plan.md)). - Log
phase_completerow: Artifacts=[plan.md](plan.md).
Phase 4: Checklist (loop)
HINT_SKIP_CHECKLIST = true→ logphase_skiprow: Detail="Pipeline hint: skip_checklist", Artifacts=[specs/plan/{EPIC_ID}.md](../plan/{EPIC_ID}.md). Report skipped. Skip to Phase 5.- No
.checklistsfile → logphase_skiprow: Detail="No checklist queue found", Artifacts=—. Report "No checklist queue — skipping." - Otherwise:
- Log
phase_startrow: Phase=Checklist. - Report: "═══ Phase 4/7: Checklist ═══"
- Loop: invoke
.github/skills/generate-checklist/SKILL.mdrepeatedly, each picks next uncheckedCHL###, untilQUEUE_EXHAUSTED = true. Report count. - Log
phase_completerow: Outcome="[N] checklists evaluated", Artifacts=[checklists/](checklists/).
Phase 5: Tasks
- Log
phase_startrow: Phase=Tasks. - Report: "═══ Phase 5/7: Tasks ═══"
- Execute
.github/skills/generate-tasks/SKILL.md→ the Plan → Tasks gate (Step 1.5) runs the Plan Validator; a FAIL halts the pipeline here (autopilot guard PM0). VerifyFEATURE_DIR/tasks.mdexists. Missing → HALT (loghaltrow linking[tasks.md](tasks.md)). - Log
phase_completerow: Artifacts=[tasks.md](tasks.md).
Phase 6: Analyze
- Log
phase_startrow: Phase=Analyze. - Report: "═══ Phase 6/7: Analyze ═══"
- Execute
.github/skills/analyze-compliance/SKILL.md. A1 autopilot guard auto-applies remediations. - CRITICAL
project-instructions.mdviolation → HALT (loghaltrow: Detail="CRITICAL project-instructions.md violation", Artifacts=[analysis-report.md](analysis-report.md)): "Manual resolution required." - Verify:
FEATURE_DIR/analysis-report.mdexists. - Log
phase_completerow: Artifacts=[analysis-report.md](analysis-report.md).
Phase 7: Implement + QC
- Log
phase_startrow: Phase=Implement+QC. - Report: "═══ Phase 7/7: Implement + QC ═══"
- Execute
.github/skills/implement-qc-loop/SKILL.md(up to 10 iterations). The implement skill'sreferences/gates.mdruns the Tasks → Implement gate (Tasks Validator) on fresh runs; a FAIL halts the pipeline here (autopilot guard I0). - Verify:
FEATURE_DIR/qc-report.mdexists withOverall Verdict: PASSAND.qc-passedexists. - If missing, verdict ≠ PASS, or
.qc-passedmissing → loghaltrow: Detail="QC did not pass", Artifacts=[qc-report.md](qc-report.md). HALTED. - If
manual-test.mdgenerated → loghaltrow: Detail="Manual verification required", Artifacts=[manual-test.md](manual-test.md). HALTED. - Otherwise → log
phase_completerow: Outcome="QC PASS", Artifacts=[qc-report.md](qc-report.md).
Post-Pipeline: Mark Epic Complete
- Guard:
EPIC_IDresolved (from Phase 1 orspec.mdfrontmatterepic_id) ANDspecs/project-plan.mdexists. - If guard fails → skip silently (non-blocking).
- Read
specs/project-plan.md, locate the line matching^- \[ \] {EPIC_ID} \[P[123]\]. - Found → replace
- [ ]with- [X]on that line. Logepic_updaterow: Detail="Epic {EPIC_ID} marked complete", Artifacts=[specs/project-plan.md](../project-plan.md). - Already
[X]→ skip, logepic_updaterow: Detail="Epic {EPIC_ID} already marked complete", Artifacts=[specs/project-plan.md](../project-plan.md). - Not found → skip, log
epic_updaterow: Detail="Epic {EPIC_ID} not found in project-plan.md", Artifacts=[specs/project-plan.md](../project-plan.md).
3. Halt Conditions
Pipeline stops immediately for:
- CRITICAL `project-instructions.md` violation — any phase, any Policy Auditor or Analyze check.
- Implement-QC loop exhausted — 10 iterations without QC pass.
- `manual-test.md` generated — manual verification required.
- Gate artifact missing or phase-boundary validator FAIL — phase did not produce expected artifact, or a mandatory Spec → Plan / Plan → Tasks / Tasks → Implement gate returned FAIL.
- Feature already complete —
.qc-passedexisted at start. - Document sufficiency failure — Product or Technical Context Document below threshold.
- Real execution blocked — required action cannot complete in current environment.
- Context resolution failure — detached HEAD or blocking git error.
When halting:
- If
FEATURE_DIRavailable → loghaltrow toautopilot-log.mdwith: Detail=halt reason, Outcome=blocking condition, Artifacts=clickable link to the missing or blocking document (e.g.,[spec.md](spec.md),[qc-report.md](qc-report.md),[.github/sddp-config.md](../../.github/sddp-config.md)). - Report to user: halted phase, reason, manual resolution guidance.
- Proceed to Final Report (Step 4).
4. Final Report
After pipeline completes or halts, display a summary:
Content: Feature dir, Status (PASSED or HALTED at phase), Phases completed (N/7), per-phase status table (Specify/Clarify/Plan/Checklist/Tasks/Analyze/Implement+QC — each ✓/✗/⊘ + key output), autopilot decision count (ref autopilot-log.md), artifact list with ✓/✗.
If HALTED: Include halt reason, phase, and specific resolution guidance with commands. If PASSED: "Feature is verified and ready for release. Run git add . && git commit -m 'feat: [feature]' and open a PR." If epic was marked complete → append: "Epic {EPIC_ID} marked complete in specs/project-plan.md."
5. Append Run Summary to Audit Log
After displaying the Final Report (Step 4), append a ## Run Summary section to FEATURE_DIR/autopilot-log.md:
## Run Summary| Phase | Status | Key Artifact ||-------|--------|--------------|| Gate | ✓ PASS | [.github/sddp-config.md](../../.github/sddp-config.md) || Specify | ✓ COMPLETE | [spec.md](spec.md) || Clarify | ✓ COMPLETE / ⊘ SKIPPED | [spec.md](spec.md) || Plan | ✓ COMPLETE | [plan.md](plan.md) || Checklist | ✓ COMPLETE / ⊘ SKIPPED | [checklists/](checklists/) || Tasks | ✓ COMPLETE | [tasks.md](tasks.md) || Analyze | ✓ COMPLETE | [analysis-report.md](analysis-report.md) || Implement+QC | ✓ PASS | [qc-report.md](qc-report.md) |**Result**: PASSED / HALTED at {phase} — {reason}**Epic**: {EPIC_ID} — {disposition} ([specs/project-plan.md](../project-plan.md))**Duration**: {start_time} → {end_time}
Rules for the Run Summary:
- Use the actual status for each phase:
✓ COMPLETE,✓ PASS(for Gate and Implement+QC),⊘ SKIPPED, or✗ HALTED. - The Key Artifact column links the primary output of each phase. Use
—if the phase did not produce an artifact (e.g., skipped phases with no output). - If halted, include only phases up to and including the halted phase. Mark the halted phase as
✗ HALTEDand omit subsequent phases. - Result line:
PASSEDorHALTED at {phase} — {brief reason}. - Epic line: include only if
EPIC_IDwas resolved. Disposition is "marked complete", "already complete", or "not found". - Duration line:
{HH:MM:SS start}→{HH:MM:SS end}.
</workflow>