@gobing-ai/spur 0.3.41 → 0.3.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/.claude-plugin/marketplace.json +15 -0
  2. package/README.md +15 -1
  3. package/config/templates/AGENTS.md +5 -3
  4. package/config/workflows/task-pipeline.yaml +103 -12
  5. package/package.json +15 -12
  6. package/plugins/README.md +655 -0
  7. package/plugins/sp/README.md +621 -0
  8. package/plugins/sp/agents/expert-spur.md +109 -0
  9. package/plugins/sp/agents/super-coder.md +126 -0
  10. package/plugins/sp/agents/super-planner.md +283 -0
  11. package/plugins/sp/agents/super-reviewer.md +154 -0
  12. package/plugins/sp/commands/dev-arch.md +30 -0
  13. package/plugins/sp/commands/dev-brainstorm.md +40 -0
  14. package/plugins/sp/commands/dev-changelog.md +28 -0
  15. package/plugins/sp/commands/dev-daily.md +29 -0
  16. package/plugins/sp/commands/dev-debug.md +29 -0
  17. package/plugins/sp/commands/dev-dogfood.md +33 -0
  18. package/plugins/sp/commands/dev-featurechange.md +130 -0
  19. package/plugins/sp/commands/dev-find-conflict.md +51 -0
  20. package/plugins/sp/commands/dev-find-issue.md +76 -0
  21. package/plugins/sp/commands/dev-find-next.md +60 -0
  22. package/plugins/sp/commands/dev-fixall.md +33 -0
  23. package/plugins/sp/commands/dev-gitmsg.md +28 -0
  24. package/plugins/sp/commands/dev-gtd.md +97 -0
  25. package/plugins/sp/commands/dev-handover.md +26 -0
  26. package/plugins/sp/commands/dev-idea.md +50 -0
  27. package/plugins/sp/commands/dev-next.md +31 -0
  28. package/plugins/sp/commands/dev-parallel.md +30 -0
  29. package/plugins/sp/commands/dev-plan.md +46 -0
  30. package/plugins/sp/commands/dev-refine.md +48 -0
  31. package/plugins/sp/commands/dev-refineall.md +65 -0
  32. package/plugins/sp/commands/dev-refresh.md +32 -0
  33. package/plugins/sp/commands/dev-reverse.md +32 -0
  34. package/plugins/sp/commands/dev-review.md +31 -0
  35. package/plugins/sp/commands/dev-run.md +63 -0
  36. package/plugins/sp/commands/dev-runall.md +80 -0
  37. package/plugins/sp/commands/dev-simplify.md +39 -0
  38. package/plugins/sp/commands/dev-unit.md +29 -0
  39. package/plugins/sp/commands/dev-verify.md +48 -0
  40. package/plugins/sp/commands/dev-verifyall.md +72 -0
  41. package/plugins/sp/commands/dev-wrap.md +30 -0
  42. package/plugins/sp/commands/dev-wrapall.md +33 -0
  43. package/plugins/sp/commands/rule-add.md +18 -0
  44. package/plugins/sp/commands/rule-refine.md +18 -0
  45. package/plugins/sp/commands/rule-scan.md +18 -0
  46. package/plugins/sp/commands/spur-init.md +22 -0
  47. package/plugins/sp/commands/workflow-add.md +18 -0
  48. package/plugins/sp/commands/workflow-refine.md +18 -0
  49. package/plugins/sp/hooks/agent-hint.ts +60 -0
  50. package/plugins/sp/hooks/careful-guard.ts +147 -0
  51. package/plugins/sp/hooks/context-post-tool.ts +325 -0
  52. package/plugins/sp/hooks/context-session-start.ts +182 -0
  53. package/plugins/sp/hooks/context-session-stop.ts +95 -0
  54. package/plugins/sp/hooks/hooks.json +51 -0
  55. package/plugins/sp/hooks/pi/guard-extension.ts +341 -0
  56. package/plugins/sp/hooks/task-write-guard.ts +84 -0
  57. package/plugins/sp/plugin.json +8 -0
  58. package/plugins/sp/scripts/batch-preflight.ts +204 -0
  59. package/plugins/sp/scripts/daily-summary/daily-summary.ts +606 -0
  60. package/plugins/sp/scripts/daily-summary/logger.ts +28 -0
  61. package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +363 -0
  62. package/plugins/sp/scripts/dogfood-testing/validate-report.ts +168 -0
  63. package/plugins/sp/scripts/feature-sync-bounded.ts +451 -0
  64. package/plugins/sp/scripts/stage-registry-adapter.ts +1341 -0
  65. package/plugins/sp/scripts/task-size-precheck.ts +202 -0
  66. package/plugins/sp/scripts/validate-commands.ts +651 -0
  67. package/plugins/sp/scripts/validate-flag-contracts.ts +875 -0
  68. package/plugins/sp/skills/brainstorm/SKILL.md +361 -0
  69. package/plugins/sp/skills/brainstorm/agents/openai.yaml +14 -0
  70. package/plugins/sp/skills/brainstorm/examples/ideation-example.md +209 -0
  71. package/plugins/sp/skills/brainstorm/metadata.openclaw +7 -0
  72. package/plugins/sp/skills/brainstorm/references/grilling-interview.md +68 -0
  73. package/plugins/sp/skills/brainstorm/references/workflows.md +255 -0
  74. package/plugins/sp/skills/branch-workflow/SKILL.md +109 -0
  75. package/plugins/sp/skills/branch-workflow/references/branch-lifecycle.md +69 -0
  76. package/plugins/sp/skills/branch-workflow/references/worktree-patterns.md +100 -0
  77. package/plugins/sp/skills/code-implementation/SKILL.md +176 -0
  78. package/plugins/sp/skills/code-implementation/references/debugging.md +64 -0
  79. package/plugins/sp/skills/code-implementation/references/implementation-patterns.md +113 -0
  80. package/plugins/sp/skills/code-improvement/SKILL.md +231 -0
  81. package/plugins/sp/skills/code-improvement/references/deepening-signals.md +205 -0
  82. package/plugins/sp/skills/code-review/SKILL.md +112 -0
  83. package/plugins/sp/skills/code-review/references/receiving-code-review.md +70 -0
  84. package/plugins/sp/skills/code-review/references/review-lenses.md +117 -0
  85. package/plugins/sp/skills/code-review/references/self-review-checklist.md +53 -0
  86. package/plugins/sp/skills/code-review/references/verification-before-completion.md +68 -0
  87. package/plugins/sp/skills/code-simplification/SKILL.md +225 -0
  88. package/plugins/sp/skills/code-testing/SKILL.md +108 -0
  89. package/plugins/sp/skills/code-testing/references/stacks/bun-ts.md +165 -0
  90. package/plugins/sp/skills/code-testing/references/stacks/go.md +88 -0
  91. package/plugins/sp/skills/code-testing/references/stacks/python.md +117 -0
  92. package/plugins/sp/skills/code-testing/references/test-loop-breaker.md +37 -0
  93. package/plugins/sp/skills/code-testing/references/test-output-discipline.md +52 -0
  94. package/plugins/sp/skills/code-testing/references/unit-testing.md +212 -0
  95. package/plugins/sp/skills/code-verification/SKILL.md +535 -0
  96. package/plugins/sp/skills/code-verification/references/code-improvement.md +39 -0
  97. package/plugins/sp/skills/code-verification/references/secu-review.md +94 -0
  98. package/plugins/sp/skills/code-verification/references/verdict-schema.md +141 -0
  99. package/plugins/sp/skills/conflict-finding/SKILL.md +254 -0
  100. package/plugins/sp/skills/conflict-finding/references/authority-resolution.md +258 -0
  101. package/plugins/sp/skills/conflict-finding/references/comparison-protocol.md +277 -0
  102. package/plugins/sp/skills/conflict-finding/references/finding-contract.md +346 -0
  103. package/plugins/sp/skills/conflict-finding/references/remediation-routing.md +276 -0
  104. package/plugins/sp/skills/daily-summary/SKILL.md +171 -0
  105. package/plugins/sp/skills/daily-summary/agents/openai.yaml +13 -0
  106. package/plugins/sp/skills/doc-evolve/SKILL.md +175 -0
  107. package/plugins/sp/skills/doc-evolve/references/operations.md +93 -0
  108. package/plugins/sp/skills/dogfood-testing/SKILL.md +608 -0
  109. package/plugins/sp/skills/dogfood-testing/references/monitor-ledger.md +211 -0
  110. package/plugins/sp/skills/dogfood-testing/references/report-template.md +351 -0
  111. package/plugins/sp/skills/doubt-driven-development/SKILL.md +136 -0
  112. package/plugins/sp/skills/functional-review/SKILL.md +364 -0
  113. package/plugins/sp/skills/functional-review/references/verdict-schema.md +133 -0
  114. package/plugins/sp/skills/indexed-context/SKILL.md +164 -0
  115. package/plugins/sp/skills/issue-finding/SKILL.md +424 -0
  116. package/plugins/sp/skills/issue-finding/agents/openai.yaml +15 -0
  117. package/plugins/sp/skills/issue-finding/examples/expected-findings.json +27 -0
  118. package/plugins/sp/skills/issue-finding/examples/session-test-loop.jsonl +23 -0
  119. package/plugins/sp/skills/issue-finding/references/session-formats.md +121 -0
  120. package/plugins/sp/skills/next-feature/SKILL.md +125 -0
  121. package/plugins/sp/skills/next-feature/references/handoff-routing.md +92 -0
  122. package/plugins/sp/skills/next-feature/references/proposal-contract.md +49 -0
  123. package/plugins/sp/skills/next-feature/references/ranking-rubric.md +52 -0
  124. package/plugins/sp/skills/next-feature/references/signal-derivation.md +67 -0
  125. package/plugins/sp/skills/next-router/SKILL.md +181 -0
  126. package/plugins/sp/skills/next-router/references/messages.md +90 -0
  127. package/plugins/sp/skills/next-router/references/routing-table.md +216 -0
  128. package/plugins/sp/skills/parallel-execution/SKILL.md +148 -0
  129. package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +100 -0
  130. package/plugins/sp/skills/parallel-execution/references/fan-out-patterns.md +101 -0
  131. package/plugins/sp/skills/parallel-execution/references/result-synthesis.md +94 -0
  132. package/plugins/sp/skills/reverse-engineering/SKILL.md +375 -0
  133. package/plugins/sp/skills/reverse-engineering/agents/openai.yaml +18 -0
  134. package/plugins/sp/skills/source-driven-development/SKILL.md +124 -0
  135. package/plugins/sp/skills/spec-decomposition/SKILL.md +117 -0
  136. package/plugins/sp/skills/spec-decomposition/references/decomposition.md +539 -0
  137. package/plugins/sp/skills/spur-cli/SKILL.md +133 -0
  138. package/plugins/sp/skills/spur-cli/references/agent.md +179 -0
  139. package/plugins/sp/skills/spur-cli/references/features/acceptance-criteria.md +82 -0
  140. package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +177 -0
  141. package/plugins/sp/skills/spur-cli/references/features/roadmap-priority.md +84 -0
  142. package/plugins/sp/skills/spur-cli/references/features/verbs.md +122 -0
  143. package/plugins/sp/skills/spur-cli/references/features.md +234 -0
  144. package/plugins/sp/skills/spur-cli/references/init.md +119 -0
  145. package/plugins/sp/skills/spur-cli/references/message.md +98 -0
  146. package/plugins/sp/skills/spur-cli/references/rules/authoring-rules.md +212 -0
  147. package/plugins/sp/skills/spur-cli/references/rules/fine-tuning.md +148 -0
  148. package/plugins/sp/skills/spur-cli/references/rules/operations.md +228 -0
  149. package/plugins/sp/skills/spur-cli/references/rules/validation-and-extension.md +129 -0
  150. package/plugins/sp/skills/spur-cli/references/rules.md +209 -0
  151. package/plugins/sp/skills/spur-cli/references/serve.md +58 -0
  152. package/plugins/sp/skills/spur-cli/references/tasks/l3-guard-cheatsheet.md +98 -0
  153. package/plugins/sp/skills/spur-cli/references/tasks/section-editing.md +95 -0
  154. package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +361 -0
  155. package/plugins/sp/skills/spur-cli/references/tasks.md +278 -0
  156. package/plugins/sp/skills/spur-cli/references/team.md +133 -0
  157. package/plugins/sp/skills/spur-cli/references/workflows/authoring-workflows.md +226 -0
  158. package/plugins/sp/skills/spur-cli/references/workflows/operations.md +211 -0
  159. package/plugins/sp/skills/spur-cli/references/workflows/validation-and-extension.md +129 -0
  160. package/plugins/sp/skills/spur-cli/references/workflows.md +355 -0
  161. package/plugins/sp/skills/spur-dev/SKILL.md +224 -0
  162. package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +196 -0
  163. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +664 -0
  164. package/plugins/sp/skills/spur-dev/references/decision-brief.md +80 -0
  165. package/plugins/sp/skills/spur-dev/references/dev-operations.md +546 -0
  166. package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +164 -0
  167. package/plugins/sp/skills/spur-dev/references/execution-batch.md +727 -0
  168. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +350 -0
  169. package/plugins/sp/skills/spur-dev/references/feature-link-helper.md +191 -0
  170. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +417 -0
  171. package/plugins/sp/skills/spur-dev/references/gate-checklists.md +171 -0
  172. package/plugins/sp/skills/spur-dev/references/glossary.md +95 -0
  173. package/plugins/sp/skills/spur-dev/references/idea-evaluation.md +80 -0
  174. package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +88 -0
  175. package/plugins/sp/skills/spur-dev/references/planning-workflow.md +302 -0
  176. package/plugins/sp/skills/spur-dev/references/product-planning.md +206 -0
  177. package/plugins/sp/skills/spur-dev/references/section-batching.md +24 -0
  178. package/plugins/sp/skills/sys-architecture/SKILL.md +155 -0
  179. package/plugins/sp/skills/sys-architecture/references/decision-method.md +137 -0
  180. package/plugins/sp/skills/sys-architecture/references/upkeep-survey.md +75 -0
  181. package/plugins/sp/skills/sys-debugging/SKILL.md +228 -0
  182. package/plugins/sp/skills/sys-debugging/references/debugging-protocol.md +62 -0
  183. package/plugins/sp/skills/test-driven-development/SKILL.md +248 -0
  184. package/plugins/sp/skills/wayfinder/SKILL.md +292 -0
  185. package/spur.js +6093 -5180
@@ -0,0 +1,224 @@
1
+ ---
2
+ name: spur-dev
3
+ description: "The thin orchestration spine for the planning→execution lifecycle: intake, feature-check/batch-create gates, the execution pipeline (precheck→implement→test→review→verify→record→done), HITL gating. Dispatches competency skills; never inlines them. Triggers: \"run the pipeline\", \"drive this task\", \"plan a feature end to end\", \"continue the pipeline run\", or operating the full lifecycle."
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: spur
7
+ version: "1.1"
8
+ platforms: "claude-code,codex,openclaw,opencode,antigravity"
9
+ interactions:
10
+ - pipeline
11
+ halves:
12
+ - planning
13
+ - execution
14
+ planning_steps:
15
+ - intake
16
+ - feature-create
17
+ - ac-generation
18
+ - feature-check-gate
19
+ - decomposition
20
+ - batch-create-gate
21
+ - design-doc
22
+ - refine
23
+ execution_steps:
24
+ - precheck
25
+ - implement
26
+ - test
27
+ - review
28
+ - approve
29
+ - verify
30
+ - record
31
+ - done
32
+ openclaw:
33
+ emoji: "🔄"
34
+ ---
35
+
36
+ # Spur Dev — The Orchestration Spine
37
+
38
+ `sp:spur-dev` is the **thin orchestration spine** that drives the full planning→execution lifecycle.
39
+ It converts vague intent into shipped work by *orchestrating*, not by doing the work itself: it runs
40
+ the gates (feature-check, batch-create) and the execution pipeline with human-in-the-loop control,
41
+ and **dispatches deep competency skills** for each unit of work — it never inlines them. Every write
42
+ to the corpus goes through a CLI verb that validates before writing — the spine knows *how to drive
43
+ the lifecycle*; the competency skills know *how to do each job*; the CLI knows *what is valid*.
44
+
45
+ The skill was decomposed **by function** (ADR-028): design, decomposition, implementation, testing,
46
+ and verification each became a standalone competency skill, leaving this spine to orchestrate them.
47
+
48
+ **The competencies the spine dispatches:**
49
+
50
+ | Unit of work | Competency skill |
51
+ | -------------- | ------------------ |
52
+ | Design / ADR judgment (shape a task) | `sp:sys-architecture` |
53
+ | Feature/spec → task batch | `sp:spec-decomposition` |
54
+ | Implement to spec | `sp:code-implementation` |
55
+ | Coverage / test extension | `sp:code-testing` |
56
+ | Review (multi-dimensional) | `sp:code-verification` + `sp:functional-review` + `sp:code-improvement` |
57
+ | Test-first discipline (composed in) | `sp:test-driven-development` |
58
+
59
+ CLI verb usage for any `spur` noun lives in the `sp:spur-cli` facade. This spine owns only the
60
+ lifecycle, the gates, and the section-write contract (`cross-cutting.md`).
61
+
62
+ ## The two halves at a glance
63
+
64
+ **Planning half** — vague description → validated, decomposed feature:
65
+
66
+ ```
67
+ vague description
68
+ → intake (clarify scope, constraints — prompt work)
69
+ → spur feature create … ; AC authored/generated (spur agent run, bdd templates)
70
+ → GATE: spur feature check (BDD validator; loop until clean)
71
+ → decomposition (prompt work) → task-batch JSON
72
+ → GATE: task-batch.schema.json + spur task batch-create (atomic: all-or-nothing)
73
+ → design doc (conditional: seam heuristic; opt out with --skip-design) → docs/design/<slug>.md + 04 index
74
+ → refine (per task, just-in-time, before execution)
75
+ ```
76
+
77
+ Full procedure: **[references/planning-workflow.md](references/planning-workflow.md)**.
78
+
79
+ **Execution half** — one task through the pipeline:
80
+
81
+ ```
82
+ pick task (spur task list --json)
83
+ → interactive omit/inline: read task-pipeline.yaml → drive actions + guards in host session
84
+ → explicit/headless executor: spur workflow run .spur/workflows/task-pipeline.yaml --vars '{"wbs":"<wbs>"}'
85
+ → on HITL pause: surface to operator; resume the selected driver from the paused state
86
+ ```
87
+
88
+ The pipeline (`kind: state-machine`) runs the work loop:
89
+
90
+ ```
91
+ precheck → implement → test → review → approve(HITL) → verify → record → done
92
+ ```
93
+
94
+ Full procedure: **[references/execution-workflow.md](references/execution-workflow.md)**.
95
+ Host-session procedure: **[references/inline-pipeline-driver.md](references/inline-pipeline-driver.md)**.
96
+
97
+ ## Step routing
98
+
99
+ Each step delegates to a CLI verb and is documented in exactly one reference file. Read the
100
+ reference for the half you're operating; do not duplicate its content here.
101
+
102
+ | Step | Half | CLI gate | Reference |
103
+ | ------ | ------ | ---------- | ----------- |
104
+ | Intake | planning | — (prompt work) | [planning-workflow.md](references/planning-workflow.md) · [product-planning.md](references/product-planning.md) |
105
+ | Feature create + AC | planning | `spur feature create` | [planning-workflow.md](references/planning-workflow.md) · [ac-style-guide.md](references/ac-style-guide.md) |
106
+ | Feature check gate | planning | `spur feature check` | [planning-workflow.md](references/planning-workflow.md) |
107
+ | Decomposition (dispatch) | planning | `task-batch.schema.json` | `sp:spec-decomposition` competency — the spine dispatches, does not inline |
108
+ | Batch-create gate | planning | `spur task batch-create` | [planning-workflow.md](references/planning-workflow.md) |
109
+ | Design doc | planning | — (prompt work; §4.5/T9) | [planning-workflow.md](references/planning-workflow.md) |
110
+ | Refine | planning | `spur task update --section` | [planning-workflow.md](references/planning-workflow.md) |
111
+ | Batch refine | planning | `sp:dev-refineall` → per-task `refine` | [dev-operations.md](references/dev-operations.md) § refineall · [planning-workflow.md](references/planning-workflow.md) |
112
+ | Task selection | execution | `spur task list` | [execution-workflow.md](references/execution-workflow.md) |
113
+ | Pipeline run | execution | inline YAML driver or `spur workflow run` | [execution-workflow.md](references/execution-workflow.md) · [inline-pipeline-driver.md](references/inline-pipeline-driver.md) |
114
+ | Implement (dispatch) | execution | `sp:code-implementation` | competency skill — the spine dispatches, does not inline |
115
+ | Test (dispatch) | execution | `sp:code-testing` | competency skill — the spine dispatches, does not inline |
116
+ | Review / verify (dispatch) | execution | `sp:dev-review` → `sp:code-verification` + `sp:functional-review` + `sp:code-improvement` | competency skills — the spine dispatches, does not inline |
117
+ | Operation catalog | execution | `sp:dev-*` operations | [dev-operations.md](references/dev-operations.md) (spine dispatch table) |
118
+ | Continue | execution | `spur feature update` / `refresh` | [execution-workflow.md](references/execution-workflow.md) |
119
+ | Batch run | execution | `sp:super-planner` + `spur workflow run` | [execution-batch.md](references/execution-batch.md) |
120
+ | Parallel fan-out | execution | `sp:parallel-execution` decision framework | [execution-batch.md](references/execution-batch.md) |
121
+ | All writes (both halves) | — | CLI-gated section editing | [cross-cutting.md](references/cross-cutting.md) · [section-batching.md](references/section-batching.md) |
122
+
123
+ ## When to use
124
+
125
+ Use this skill for:
126
+
127
+ - **Planning a feature** — a description arrives; produce a feature file with AC and
128
+ decomposed tasks.
129
+ - **Product-shaped planning** — prioritize roadmap candidates, choose a strategy profile, or produce
130
+ PRD-shaped guidance without adding a separate PM command surface.
131
+ - **Running a task** — pick a task, run it through the pipeline, handle HITL gates.
132
+ - **Continuing interrupted work** — resume a paused pipeline run.
133
+ - **Batch task creation** — decompose a feature into tasks and land them atomically.
134
+
135
+ Do **not** use this skill for:
136
+
137
+ - Looking up task/feature/rule/workflow verbs or conventions — use the `sp:spur-cli` facade
138
+ (one reference per noun).
139
+ - Gate-level constraint checking — use `sp:spur-cli` (rule noun).
140
+ - Workflow authoring/tuning — use `sp:spur-cli` (workflow noun).
141
+ - Documentation maintenance — use `sp:doc-evolve`.
142
+
143
+ ## Behavior
144
+
145
+ This skill behaves as a **pipeline** operator: it converts intent into CLI-validated
146
+ artifacts, gates every write, and drives execution workflows. It owns the full planning→done
147
+ lifecycle but delegates every deterministic step to CLI verbs. It does not validate — the
148
+ CLI does.
149
+
150
+ ## Gotchas
151
+
152
+ 1. **Never skip a gate.** A clean `feature check` is the only proof the AC is valid; a
153
+ passing `batch-create` is the only proof the decomposition is well-formed. Skip either and
154
+ you ship corrupted corpus.
155
+ 2. **The pipeline, not you, writes results.** `## Testing` and `## Review` sections are
156
+ filled by the pipeline's `record` step. Do not edit them directly during execution.
157
+ 3. **Check before every write.** Run `spur task check <wbs> --json` to know what sections
158
+ the task needs at its current status. Guessing produces matrix violations.
159
+ 4. **AC titles are identity keys.** Renaming a scenario after tasks are created breaks
160
+ traceability edges. If you must rename, update the task's scenario references too.
161
+ 5. **Batch-create is atomic.** A single schema violation rejects the entire batch. Validate
162
+ locally against `task-batch.schema.json` before invoking the CLI.
163
+ 6. **Two-halves seam.** The planning and execution halves share this skill today but are
164
+ designed to split cleanly. Keep new logic in one half or the other — never straddle the
165
+ seam with cross-half dependencies.
166
+
167
+ ## Additional Resources
168
+
169
+ **Every reference file and its step is listed once, in [Step routing](#step-routing) above — this
170
+ section adds what that table has no room for: per-file content summaries and items with no single
171
+ step (glossary, config companions).** Read Step routing to find "which file for step X"; read below
172
+ for "what's actually in file Y" or for resources that sit outside the step sequence.
173
+
174
+ - [references/glossary.md](references/glossary.md) — sp's own vocabulary: spine, competency, facade,
175
+ corpus, gate, verdict, noun/verb, half, HITL, WBS, section-write contract — canonical term +
176
+ Avoid list. Owns term definitions only; `cross-cutting.md` owns the process rules that use them.
177
+ - [references/flag-glossary.md](references/flag-glossary.md) — the shared-flag glossary (one
178
+ canonical entry per flag used by two or more `/sp:dev-*` commands) and the `--next` chain
179
+ contract. Moved verbatim from `dev-operations.md` (task 0408) so command files can deep-link
180
+ flag entries while this spine reads the operation catalog linearly.
181
+ - [references/gate-checklists.md](references/gate-checklists.md) — checkbox checklists for the
182
+ five gates (feature-check, batch-create, precheck, review, verify). Each checklist is a
183
+ `- [ ]` list of prerequisites an agent verifies before entering the gate.
184
+ - [references/section-batching.md](references/section-batching.md) — first-write protocol for
185
+ staging Solution, Testing, and Review together before one task check.
186
+ - [references/ac-style-guide.md](references/ac-style-guide.md) — BDD scenario authoring:
187
+ R-numbering, the two AC tiers, scenario-title stability, Gherkin template usage.
188
+ - [references/feature-link-helper.md](references/feature-link-helper.md) — opt-in,
189
+ strictness-triggered helper to resolve a deferred `feature_id` edge: LLM-judge match against
190
+ existing features (prefer existing; create only as last resort; confirm before apply); single-task
191
+ mode + batch-sweep mode. Invoke only when the operator opts into `--strict` rigor or explicitly
192
+ asks to link a task to a feature — NEVER gate-time, NEVER automatic.
193
+
194
+ **Competency skills the spine dispatches to** (what each owns beyond the Step-routing row):
195
+
196
+ - **`sp:code-implementation`** owns `implementation-patterns.md`, `debugging.md`.
197
+ - **`sp:code-testing`** owns `unit-testing.md` and the per-stack adapters (`stacks/`).
198
+ - **`sp:spec-decomposition`** owns the granularity standard (scenario→task sizing).
199
+ - **`sp:functional-review`** owns requirements traceability (R{n} → file:line evidence, per-requirement MET/PARTIAL/UNMET, FunctionalVerdict artifact). Phase 8b gate.
200
+ - **`sp:code-improvement`** owns architectural deepening (5 signals: shallow module, tight coupling, wrong seam, weak locality, poor test surface; severity blocker/major/minor/advisory).
201
+
202
+ - **`sp:test-driven-development`** — the test-first discipline `code-implementation` and `code-testing` compose with.
203
+
204
+ **Config & companions (no single pipeline step owns these):**
205
+
206
+ - `.spur/workflows/task-pipeline.yaml` — the execution pipeline definition.
207
+ - `.spur/workflows/planning-pipeline.yaml` — the front-half state machine.
208
+ - `.spur/templates/bdd/gherkin.md` — the BDD scenario template.
209
+
210
+ ## Platform Notes
211
+
212
+ ### Claude Code
213
+
214
+ `spur` CLI via the Bash tool. The `sp:dev-*` slash commands are the primary entry points;
215
+ invoke the skill directly via `Skill(skill="sp:spur-dev", args="plan <description>")` for
216
+ planning, `args="run <wbs>"` for execution, `args="unit <target>"` for test generation,
217
+ or `args="refine <wbs>"` for task refinement, or `args="refineall --feature <id> --auto"` for
218
+ batch refine under a feature (add `--depth ready` for implement-ready freeze). Use `spur agent run`
219
+ for isolated LLM invocations within pipeline steps.
220
+
221
+ ### Codex / OpenClaw / OpenCode / Antigravity
222
+
223
+ Run `spur` CLI via the Bash tool; parse `--json` output. Invoke this skill directly for
224
+ the workflow logic — the skill is the SSOT; commands and subagents are thin wrappers.
@@ -0,0 +1,196 @@
1
+ ---
2
+ name: ac-style-guide
3
+ description: BDD acceptance criteria authoring conventions for spur-dev — R-numbering, two AC tiers, scenario-title stability, Gherkin template usage.
4
+ see_also:
5
+ - spur-dev
6
+ ---
7
+
8
+ # AC Style Guide
9
+
10
+ Conventions for authoring BDD acceptance criteria in feature files. These are what `spur feature check`
11
+ validates and what task decomposition maps against.
12
+
13
+ ## R-numbering
14
+
15
+ Every scenario carries an `R1, R2, …` prefix in its title:
16
+
17
+ ```gherkin
18
+ Scenario: R1 — User can create a task with required fields
19
+ Scenario: R2 — Task creation fails gracefully on missing title
20
+ ```
21
+
22
+ Rules:
23
+
24
+ - **Sequential within a feature** — start at R1 for each feature.
25
+ - **Stable forever** — never renumber after tasks are created. If you add a scenario, take
26
+ the next free number.
27
+ - **One R-number = one scenario.** Never split a requirement across multiple scenarios
28
+ under the same R-number; never merge two requirements into one scenario.
29
+
30
+ ## Two AC tiers (authoring convention)
31
+
32
+ A planning convention (DD-06 "permissive start"), not a `spur feature check` feature today —
33
+ the validator currently checks all scenarios uniformly (Gherkin syntax + traceability). Tag
34
+ scenarios so decomposition and future tiered gating can tell them apart:
35
+
36
+ ### Core tier (the work that must ship)
37
+
38
+ Every core scenario should:
39
+
40
+ - Be testable (given-when-then with concrete values).
41
+ - Cover a committed scope item from the feature's `## Scope (in)`.
42
+ - Map to at least one task in decomposition.
43
+
44
+ Tag core scenarios `@core`:
45
+
46
+ ```gherkin
47
+ @core
48
+ Scenario: R1 — User can create a task with required fields
49
+ ```
50
+
51
+ ### Edge-case tier (advisory)
52
+
53
+ Edge-case scenarios cover error paths, boundary values, and degraded modes; may be deferred and
54
+ need not map to a task in the initial decomposition. Tag them `@edge`:
55
+
56
+ ```gherkin
57
+ @edge
58
+ Scenario: R5 — Task creation handles 10,000-character title gracefully
59
+ ```
60
+
61
+ DD-06 permissive start: treat only the core tier as must-ship initially; promote edge cases that
62
+ prove important in a later iteration. (When tiered gating lands in `spur feature check`, these tags
63
+ become the gate input — the CLI stays the validator; this guide stays the convention.)
64
+
65
+ ## Scenario-title stability
66
+
67
+ The scenario title is the **identity key** for traceability. When a task references a
68
+ scenario, it matches by title. Rules:
69
+
70
+ - **Never rename a scenario after task decomposition.** If the requirement changes, add a
71
+ new scenario and deprecate the old one (leave it, mark `@deprecated`).
72
+ - **Keep titles descriptive and unique.** "User can log in" is ambiguous — "R3 —
73
+ Registered user can log in with email and password" is traceable.
74
+ - **No synonyms in cross-references.** The title in the feature file and the title in the
75
+ task's AC reference must be byte-identical.
76
+
77
+ ## Verdict AC ↔ feature scenario linkage
78
+
79
+ How a verify-answer AC table connects back to a feature scenario. Added by task 0398 R8 after the
80
+ H6 batch rediscovered this contract by failure, across three regeneration cycles.
81
+
82
+ ### The AC table shape
83
+
84
+ `spur task verdict <wbs> --from-answer <file>` parses a four-column table. Both the header and the
85
+ column order matter:
86
+
87
+ ```markdown
88
+ | AC | Status | Evidence Type | Evidence |
89
+ |----|--------|---------------|----------|
90
+ | R3 — Batch report names every skipped task | MET | test | `tests/batch.test.ts:88`; `bun test` exit 0 |
91
+ ```
92
+
93
+ - **Status** — `MET` · `PARTIAL` · `UNMET` · `N/A`.
94
+ - **Evidence Type** — `test` · `command` · `static-ref` (aliases: `static`, `doc`, `docs`,
95
+ `documentation`) · `manual-review` (alias `manual`) · `llm-judge` (alias `judge`) · `n/a`.
96
+
97
+ A row whose status or evidence type cannot be parsed is **omitted from the verdict**, but the
98
+ omission is now reported as an `ac-row-dropped` check naming the row and the unrecognised value
99
+ (0398 R6). If a verdict comes back with fewer AC rows than you authored, read that check.
100
+
101
+ ### Four accepted id forms
102
+
103
+ `rowMatchesScenario` accepts any of these as naming the feature scenario `R3 — Foo`:
104
+
105
+ | Form | Example |
106
+ |------|---------|
107
+ | Exact title | `R3 — Foo` |
108
+ | Bare title (R-prefix dropped) | `Foo` |
109
+ | `Scenario:` prefix | `Scenario: R3 — Foo` |
110
+ | `AC-N` positional alias | `AC-3` |
111
+
112
+ Any of the four may additionally carry a **bracket tag** in any position — `[doc-only] R3 — Foo`,
113
+ `Scenario: [advisory] Foo`. Tags are stripped before matching (0398 R7), so tagging never breaks
114
+ the linkage.
115
+
116
+ ### Which tags exempt a row from executable evidence
117
+
118
+ A `MET` row is silently demoted to `PARTIAL` unless it carries `test` or `command` evidence — the
119
+ executable-evidence rule. Five tags opt a row out, because not every scenario is behavioral:
120
+
121
+ `[doc-only]` · `[docs-only]` · `[non-behavior]` · `[advisory]` · `[non-core]`
122
+
123
+ Use one when the scenario asserts documentation or a design decision, and pair it with
124
+ `static-ref`. Do **not** manufacture a token test to dodge the rule — that is the failure mode this
125
+ contract exists to prevent.
126
+
127
+ ```markdown
128
+ | [doc-only] R7 — The linkage contract is written down | MET | static-ref | `ac-style-guide.md` § linkage |
129
+ ```
130
+
131
+ > Before 0398 R7 this row was unusable: the tag was required to keep `MET`, but the tag also broke
132
+ > title matching, so the scenario read as unverified. Both halves now hold at once.
133
+
134
+ ### What `--strict` advance requires
135
+
136
+ `spur feature advance <id> --to done --strict` treats a scenario as verified only when **all** of
137
+ these hold:
138
+
139
+ 1. A task links to the feature (`feature_id`) and is status `done`.
140
+ 2. That task has a verdict artifact at `.spur/run/<wbs>-verdict.json` with top-level `PASS`.
141
+ 3. That artifact carries a row — in `requirements` **or** `acceptanceCriteria` — whose id matches
142
+ the scenario by one of the four forms above, with status `MET`.
143
+
144
+ Anything less emits `L4.scenario-unverified`.
145
+
146
+ ### Cover every declared scenario, not just the gate's minimum
147
+
148
+ `spur feature check` only needs **one** matching MET row per *feature* scenario. Satisfying just
149
+ those leaves per-task AC coverage incomplete and nothing will flag it — H6 shipped nine tasks at
150
+ 23/48 scenario coverage, one with an empty `acceptanceCriteria` array, and every gate still passed.
151
+ Author one row per scenario declared in the task's own `### Acceptance Criteria`.
152
+
153
+ ## Gherkin template
154
+
155
+ Use the canonical BDD template at `.spur/templates/bdd/gherkin.md`. Key rules:
156
+
157
+ - **Given** establishes preconditions (state, setup).
158
+ - **When** describes the single action under test.
159
+ - **Then** asserts the observable outcome.
160
+ - **And** chains additional preconditions, actions, or assertions.
161
+
162
+ Avoid:
163
+
164
+ - Multiple `When` clauses in one scenario — split into separate scenarios.
165
+ - Vague assertions ("the system works correctly") — name the observable.
166
+ - Implementation details in scenarios ("the button with id #create-task is clicked") —
167
+ describe the user intent.
168
+
169
+ ## AC → task mapping
170
+
171
+ During decomposition, each core scenario maps to ≥1 task:
172
+
173
+ | Scenario | Task(s) | Rationale |
174
+ |----------|---------|-----------|
175
+ | R1 — Create task with required fields | 0042 | Direct implementation |
176
+ | R3 — Login with email and password | 0043, 0044 | Auth service + UI |
177
+
178
+ The mapping is recorded in the task's `## Background` or in the feature's `## Notes`.
179
+ `spur feature check` warns on unmapped core scenarios after `spur feature refresh`
180
+ regenerates the `## Tasks` block.
181
+
182
+ ## Decision-trace → AC-scenario mapping
183
+
184
+ Each resolved decision from a grilling interview (Phase 1) becomes one or more Gherkin scenarios:
185
+
186
+ | Decision-tree element | Becomes |
187
+ |-----------------------|---------|
188
+ | A **locked decision** (a capability the feature commits to) | A `@core` scenario — the must-ship behavior it enables |
189
+ | The decision's **observable outcome** (why it was chosen) | The scenario's `Then` — assert the observable, not the mechanism |
190
+ | A decision's **preconditions / constraints** | The scenario's `Given` |
191
+ | The **user action** that exercises the decision | The scenario's single `When` (one action per scenario — split if more) |
192
+ | An **error path / boundary** surfaced during grilling | An `@edge` scenario (advisory; may defer per DD-06) |
193
+ | A **deferred branch** ("out of scope for now") | A `## Scope` **Out** bullet — *not* a scenario |
194
+
195
+ Number scenarios `R1, R2, …` sequentially, stable forever (the title is the traceability identity
196
+ key). Use the Gherkin template at `.spur/templates/bdd/gherkin.md`.