@gobing-ai/spur 0.3.41 → 0.3.43
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.
- package/.claude-plugin/marketplace.json +15 -0
- package/README.md +15 -1
- package/config/templates/AGENTS.md +5 -3
- package/config/workflows/task-pipeline.yaml +113 -12
- package/package.json +15 -12
- package/plugins/README.md +655 -0
- package/plugins/sp/README.md +621 -0
- package/plugins/sp/agents/expert-spur.md +109 -0
- package/plugins/sp/agents/super-coder.md +126 -0
- package/plugins/sp/agents/super-planner.md +283 -0
- package/plugins/sp/agents/super-reviewer.md +154 -0
- package/plugins/sp/commands/dev-arch.md +30 -0
- package/plugins/sp/commands/dev-brainstorm.md +40 -0
- package/plugins/sp/commands/dev-changelog.md +28 -0
- package/plugins/sp/commands/dev-daily.md +29 -0
- package/plugins/sp/commands/dev-debug.md +29 -0
- package/plugins/sp/commands/dev-dogfood.md +33 -0
- package/plugins/sp/commands/dev-featurechange.md +130 -0
- package/plugins/sp/commands/dev-find-conflict.md +51 -0
- package/plugins/sp/commands/dev-find-issue.md +76 -0
- package/plugins/sp/commands/dev-find-next.md +60 -0
- package/plugins/sp/commands/dev-fixall.md +33 -0
- package/plugins/sp/commands/dev-gitmsg.md +28 -0
- package/plugins/sp/commands/dev-gtd.md +97 -0
- package/plugins/sp/commands/dev-handover.md +26 -0
- package/plugins/sp/commands/dev-idea.md +50 -0
- package/plugins/sp/commands/dev-next.md +31 -0
- package/plugins/sp/commands/dev-parallel.md +30 -0
- package/plugins/sp/commands/dev-plan.md +46 -0
- package/plugins/sp/commands/dev-refine.md +48 -0
- package/plugins/sp/commands/dev-refineall.md +65 -0
- package/plugins/sp/commands/dev-refresh.md +32 -0
- package/plugins/sp/commands/dev-reverse.md +32 -0
- package/plugins/sp/commands/dev-review.md +31 -0
- package/plugins/sp/commands/dev-run.md +63 -0
- package/plugins/sp/commands/dev-runall.md +83 -0
- package/plugins/sp/commands/dev-simplify.md +39 -0
- package/plugins/sp/commands/dev-unit.md +29 -0
- package/plugins/sp/commands/dev-verify.md +48 -0
- package/plugins/sp/commands/dev-verifyall.md +72 -0
- package/plugins/sp/commands/dev-wrap.md +48 -0
- package/plugins/sp/commands/dev-wrapall.md +51 -0
- package/plugins/sp/commands/rule-add.md +18 -0
- package/plugins/sp/commands/rule-refine.md +18 -0
- package/plugins/sp/commands/rule-scan.md +18 -0
- package/plugins/sp/commands/spur-init.md +22 -0
- package/plugins/sp/commands/workflow-add.md +18 -0
- package/plugins/sp/commands/workflow-refine.md +18 -0
- package/plugins/sp/hooks/agent-hint.ts +60 -0
- package/plugins/sp/hooks/careful-guard.ts +147 -0
- package/plugins/sp/hooks/context-post-tool.ts +325 -0
- package/plugins/sp/hooks/context-session-start.ts +182 -0
- package/plugins/sp/hooks/context-session-stop.ts +95 -0
- package/plugins/sp/hooks/hooks.json +51 -0
- package/plugins/sp/hooks/pi/guard-extension.ts +341 -0
- package/plugins/sp/hooks/task-write-guard.ts +84 -0
- package/plugins/sp/plugin.json +8 -0
- package/plugins/sp/scripts/batch-preflight.ts +204 -0
- package/plugins/sp/scripts/daily-summary/daily-summary.ts +606 -0
- package/plugins/sp/scripts/daily-summary/logger.ts +28 -0
- package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +363 -0
- package/plugins/sp/scripts/dogfood-testing/validate-report.ts +168 -0
- package/plugins/sp/scripts/feature-sync-bounded.ts +451 -0
- package/plugins/sp/scripts/stage-registry-adapter.ts +1341 -0
- package/plugins/sp/scripts/task-size-precheck.ts +202 -0
- package/plugins/sp/scripts/validate-commands.ts +651 -0
- package/plugins/sp/scripts/validate-flag-contracts.ts +875 -0
- package/plugins/sp/skills/brainstorm/SKILL.md +361 -0
- package/plugins/sp/skills/brainstorm/agents/openai.yaml +14 -0
- package/plugins/sp/skills/brainstorm/examples/ideation-example.md +209 -0
- package/plugins/sp/skills/brainstorm/metadata.openclaw +7 -0
- package/plugins/sp/skills/brainstorm/references/grilling-interview.md +68 -0
- package/plugins/sp/skills/brainstorm/references/workflows.md +255 -0
- package/plugins/sp/skills/branch-workflow/SKILL.md +109 -0
- package/plugins/sp/skills/branch-workflow/references/branch-lifecycle.md +69 -0
- package/plugins/sp/skills/branch-workflow/references/worktree-patterns.md +100 -0
- package/plugins/sp/skills/code-implementation/SKILL.md +203 -0
- package/plugins/sp/skills/code-implementation/references/debugging.md +64 -0
- package/plugins/sp/skills/code-implementation/references/implementation-patterns.md +113 -0
- package/plugins/sp/skills/code-improvement/SKILL.md +231 -0
- package/plugins/sp/skills/code-improvement/references/deepening-signals.md +205 -0
- package/plugins/sp/skills/code-review/SKILL.md +112 -0
- package/plugins/sp/skills/code-review/references/receiving-code-review.md +70 -0
- package/plugins/sp/skills/code-review/references/review-lenses.md +117 -0
- package/plugins/sp/skills/code-review/references/self-review-checklist.md +53 -0
- package/plugins/sp/skills/code-review/references/verification-before-completion.md +68 -0
- package/plugins/sp/skills/code-simplification/SKILL.md +225 -0
- package/plugins/sp/skills/code-testing/SKILL.md +108 -0
- package/plugins/sp/skills/code-testing/references/stacks/bun-ts.md +165 -0
- package/plugins/sp/skills/code-testing/references/stacks/go.md +88 -0
- package/plugins/sp/skills/code-testing/references/stacks/python.md +117 -0
- package/plugins/sp/skills/code-testing/references/test-loop-breaker.md +37 -0
- package/plugins/sp/skills/code-testing/references/test-output-discipline.md +52 -0
- package/plugins/sp/skills/code-testing/references/unit-testing.md +212 -0
- package/plugins/sp/skills/code-verification/SKILL.md +535 -0
- package/plugins/sp/skills/code-verification/references/code-improvement.md +39 -0
- package/plugins/sp/skills/code-verification/references/secu-review.md +94 -0
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +141 -0
- package/plugins/sp/skills/conflict-finding/SKILL.md +254 -0
- package/plugins/sp/skills/conflict-finding/references/authority-resolution.md +258 -0
- package/plugins/sp/skills/conflict-finding/references/comparison-protocol.md +277 -0
- package/plugins/sp/skills/conflict-finding/references/finding-contract.md +346 -0
- package/plugins/sp/skills/conflict-finding/references/remediation-routing.md +276 -0
- package/plugins/sp/skills/daily-summary/SKILL.md +171 -0
- package/plugins/sp/skills/daily-summary/agents/openai.yaml +13 -0
- package/plugins/sp/skills/doc-evolve/SKILL.md +175 -0
- package/plugins/sp/skills/doc-evolve/references/operations.md +93 -0
- package/plugins/sp/skills/dogfood-testing/SKILL.md +608 -0
- package/plugins/sp/skills/dogfood-testing/references/monitor-ledger.md +211 -0
- package/plugins/sp/skills/dogfood-testing/references/report-template.md +351 -0
- package/plugins/sp/skills/doubt-driven-development/SKILL.md +136 -0
- package/plugins/sp/skills/functional-review/SKILL.md +364 -0
- package/plugins/sp/skills/functional-review/references/verdict-schema.md +133 -0
- package/plugins/sp/skills/indexed-context/SKILL.md +164 -0
- package/plugins/sp/skills/issue-finding/SKILL.md +442 -0
- package/plugins/sp/skills/issue-finding/agents/openai.yaml +15 -0
- package/plugins/sp/skills/issue-finding/examples/expected-findings.json +27 -0
- package/plugins/sp/skills/issue-finding/examples/session-test-loop.jsonl +23 -0
- package/plugins/sp/skills/issue-finding/references/session-formats.md +151 -0
- package/plugins/sp/skills/next-feature/SKILL.md +125 -0
- package/plugins/sp/skills/next-feature/references/handoff-routing.md +92 -0
- package/plugins/sp/skills/next-feature/references/proposal-contract.md +49 -0
- package/plugins/sp/skills/next-feature/references/ranking-rubric.md +52 -0
- package/plugins/sp/skills/next-feature/references/signal-derivation.md +67 -0
- package/plugins/sp/skills/next-router/SKILL.md +181 -0
- package/plugins/sp/skills/next-router/references/messages.md +90 -0
- package/plugins/sp/skills/next-router/references/routing-table.md +216 -0
- package/plugins/sp/skills/parallel-execution/SKILL.md +148 -0
- package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +109 -0
- package/plugins/sp/skills/parallel-execution/references/fan-out-patterns.md +101 -0
- package/plugins/sp/skills/parallel-execution/references/result-synthesis.md +94 -0
- package/plugins/sp/skills/reverse-engineering/SKILL.md +375 -0
- package/plugins/sp/skills/reverse-engineering/agents/openai.yaml +18 -0
- package/plugins/sp/skills/source-driven-development/SKILL.md +124 -0
- package/plugins/sp/skills/spec-decomposition/SKILL.md +117 -0
- package/plugins/sp/skills/spec-decomposition/references/decomposition.md +539 -0
- package/plugins/sp/skills/spur-cli/SKILL.md +133 -0
- package/plugins/sp/skills/spur-cli/references/agent.md +179 -0
- package/plugins/sp/skills/spur-cli/references/features/acceptance-criteria.md +82 -0
- package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +177 -0
- package/plugins/sp/skills/spur-cli/references/features/roadmap-priority.md +84 -0
- package/plugins/sp/skills/spur-cli/references/features/verbs.md +122 -0
- package/plugins/sp/skills/spur-cli/references/features.md +234 -0
- package/plugins/sp/skills/spur-cli/references/init.md +119 -0
- package/plugins/sp/skills/spur-cli/references/message.md +98 -0
- package/plugins/sp/skills/spur-cli/references/rules/authoring-rules.md +212 -0
- package/plugins/sp/skills/spur-cli/references/rules/fine-tuning.md +148 -0
- package/plugins/sp/skills/spur-cli/references/rules/operations.md +228 -0
- package/plugins/sp/skills/spur-cli/references/rules/validation-and-extension.md +129 -0
- package/plugins/sp/skills/spur-cli/references/rules.md +209 -0
- package/plugins/sp/skills/spur-cli/references/serve.md +58 -0
- package/plugins/sp/skills/spur-cli/references/tasks/l3-guard-cheatsheet.md +98 -0
- package/plugins/sp/skills/spur-cli/references/tasks/section-editing.md +95 -0
- package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +361 -0
- package/plugins/sp/skills/spur-cli/references/tasks.md +280 -0
- package/plugins/sp/skills/spur-cli/references/team.md +133 -0
- package/plugins/sp/skills/spur-cli/references/workflows/authoring-workflows.md +226 -0
- package/plugins/sp/skills/spur-cli/references/workflows/operations.md +211 -0
- package/plugins/sp/skills/spur-cli/references/workflows/validation-and-extension.md +129 -0
- package/plugins/sp/skills/spur-cli/references/workflows.md +355 -0
- package/plugins/sp/skills/spur-dev/SKILL.md +224 -0
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +196 -0
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +680 -0
- package/plugins/sp/skills/spur-dev/references/decision-brief.md +80 -0
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +546 -0
- package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +164 -0
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +790 -0
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +352 -0
- package/plugins/sp/skills/spur-dev/references/feature-link-helper.md +191 -0
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +417 -0
- package/plugins/sp/skills/spur-dev/references/gate-checklists.md +171 -0
- package/plugins/sp/skills/spur-dev/references/glossary.md +95 -0
- package/plugins/sp/skills/spur-dev/references/idea-evaluation.md +80 -0
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +120 -0
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +302 -0
- package/plugins/sp/skills/spur-dev/references/product-planning.md +206 -0
- package/plugins/sp/skills/spur-dev/references/section-batching.md +24 -0
- package/plugins/sp/skills/sys-architecture/SKILL.md +155 -0
- package/plugins/sp/skills/sys-architecture/references/decision-method.md +137 -0
- package/plugins/sp/skills/sys-architecture/references/upkeep-survey.md +75 -0
- package/plugins/sp/skills/sys-debugging/SKILL.md +228 -0
- package/plugins/sp/skills/sys-debugging/references/debugging-protocol.md +62 -0
- package/plugins/sp/skills/test-driven-development/SKILL.md +248 -0
- package/plugins/sp/skills/wayfinder/SKILL.md +292 -0
- package/spur.js +6035 -4963
|
@@ -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`.
|