@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.
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 +113 -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 +83 -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 +48 -0
  42. package/plugins/sp/commands/dev-wrapall.md +51 -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 +203 -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 +442 -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 +151 -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 +109 -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 +280 -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 +680 -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 +790 -0
  168. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +352 -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 +120 -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 +6035 -4963
@@ -0,0 +1,95 @@
1
+ ---
2
+ name: glossary
3
+ description: "Extracted section: sp's own vocabulary — canonical terms with Avoid lists. Owns TERM DEFINITIONS only; process rules stay in cross-cutting.md (see the split note below)."
4
+ see_also:
5
+ - spur-dev
6
+ ---
7
+
8
+ # sp Glossary
9
+
10
+ This is the single physical copy of sp's plugin-internal vocabulary — one canonical term per
11
+ concept, each with an **Avoid:** list of near-synonyms that must not be used interchangeably.
12
+ Every other skill body collapses its own re-explanation of these terms to the bare word and
13
+ links here instead of repeating the definition.
14
+
15
+ **Split from `cross-cutting.md`:** this file owns **term definitions** (what a word means).
16
+ `cross-cutting.md` owns **process rules** (how writes happen, what the Iron Laws are, what
17
+ `--auto` does). A term used inside a process rule is defined here once; the rule itself stays
18
+ in `cross-cutting.md`. Neither file restates the other's content.
19
+
20
+ ## Terms
21
+
22
+ **spine** — the thin orchestration skill (`sp:spur-dev`) that drives the planning→execution
23
+ lifecycle by running gates and dispatching competency skills; it contains no domain logic of
24
+ its own.
25
+ Avoid: *orchestrator* (ambiguous with `sp:super-planner`, the batch orchestrator agent),
26
+ *controller*, *coordinator*.
27
+
28
+ **competency** — a deep, functionally-scoped skill (`sp:sys-architecture`,
29
+ `sp:spec-decomposition`, `sp:code-implementation`, `sp:code-testing`, `sp:code-verification`)
30
+ that owns one unit of work end-to-end. The spine dispatches to a competency; a competency never
31
+ dispatches back to the spine.
32
+ Avoid: *module* (reserved for the deep-module design vocabulary, see `sys-architecture`),
33
+ *plugin*, *sub-skill*.
34
+
35
+ **facade** — a skill that exposes CLI-verb usage for a `spur` noun (`sp:spur-cli`) without
36
+ owning any lifecycle logic. One reference file per noun; the facade is a lookup surface, not a
37
+ workflow driver.
38
+ Avoid: *wrapper* (reserved for thin command docs — see **command wrapper** below), *adapter*
39
+ (reserved for the deep-module design vocabulary).
40
+
41
+ **corpus** — the validated set of task and feature files under `docs/tasks2/` and
42
+ `docs/features/`, mutated only through `spur task` / `spur feature` CLI verbs.
43
+ Avoid: *database*, *store*, *repo` (ambiguous with the git repository).
44
+
45
+ **gate** — a deterministic CLI check that must exit clean before a lifecycle transition
46
+ proceeds (`spur feature check`, `task-batch.schema.json` validation, `spur task check`,
47
+ `spur rule run`). A gate either passes or blocks; there is no partial pass.
48
+ Avoid: *checkpoint* (reserved for the Session Checkpoint Convention — a resumability artifact,
49
+ not a pass/fail gate), *validation* (the generic verb; *gate* is the noun for the specific
50
+ enforcement point), *step* (a gate is a property of a step, not a step itself).
51
+
52
+ **verdict** — the structured PASS/PARTIAL/FAIL outcome of a verify step, recorded as an
53
+ artifact (`.spur/run/<wbs>-verdict.json`) and consumed by `spur task record`.
54
+ Avoid: *result* (too generic — a verdict has a fixed three-value contract), *report` (reserved
55
+ for narrative output like the dogfood report or batch report).
56
+
57
+ **noun/verb** — the two-part CLI grammar: a noun names the domain object (`task`, `feature`,
58
+ `rule`, `workflow`, `agent`, `message`, `team`), a verb names the operation on it (`create`,
59
+ `update`, `check`, `run`, `list`). The `sp:spur-cli` facade organizes its references one file
60
+ per noun.
61
+ Avoid: *command* alone (ambiguous with a `/sp:dev-*` slash command, which is a different
62
+ grammar layer).
63
+
64
+ **half** (planning / execution) — the two lifecycle phases `sp:spur-dev` drives: **planning**
65
+ (vague description → validated, decomposed feature) and **execution** (one task → done through
66
+ the pipeline). The two halves share this skill today but are designed to split cleanly; new
67
+ logic belongs in exactly one half.
68
+ Avoid: *phase* alone (the pipeline-phase table in `cross-cutting.md` uses *phase* for a
69
+ different, finer-grained partition — ideation/design/execution/wrap-up — so *half* stays
70
+ reserved for this specific planning/execution split).
71
+
72
+ **HITL** (human-in-the-loop) — a workflow state that pauses for explicit operator approval
73
+ before continuing (`hitl.confirm`). A HITL gate is never auto-dismissed by the engine; `--auto`
74
+ can only route *around* one whose objective precondition is already met (see the `--auto`
75
+ routing contract in `cross-cutting.md`).
76
+ Avoid: *prompt* (reserved for LLM input text), *interrupt* (implies an exception, not a planned
77
+ pause point).
78
+
79
+ **WBS** (work-breakdown-structure ID) — the four-digit task identifier (e.g. `0187`) that
80
+ names a task file and its position in the corpus. WBS IDs are assigned once and never reused.
81
+ Avoid: *task ID* alone (acceptable in prose, but *WBS* is the canonical term when precision
82
+ matters — e.g. distinguishing a task WBS from a feature ID).
83
+
84
+ **section-write contract** — the rule that every corpus write goes through
85
+ `spur task update <wbs> --section <name> --from-file <path>` with body-only content (no
86
+ duplicate heading, no same-level sub-headings), gated by the section-status matrix for the
87
+ task's current status. Fully specified in `cross-cutting.md`; this glossary only names the term.
88
+ Avoid: *section edit* alone (too generic — *contract* signals the CLI-gated, matrix-checked
89
+ nature of the write).
90
+
91
+ ## See also
92
+
93
+ - [cross-cutting.md](cross-cutting.md) — the process rules that use these terms (Iron Laws,
94
+ Auto-Decision Principles, the section-editing workflow, pipeline phase table).
95
+ - [spur-dev/SKILL.md](../SKILL.md) — the spine that dispatches by these terms.
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: idea-evaluation
3
+ description: >-
4
+ Template SSOT for the post-discovery idea-evaluation report used by idea-pipeline's
5
+ idea-eval taste gate. Brainstorm fills an instance at .spur/run/idea-eval-report.md.
6
+ see_also:
7
+ - spur-dev
8
+ - brainstorm
9
+ - decision-brief
10
+ ---
11
+
12
+ # Idea Evaluation Report Template
13
+
14
+ The idea-evaluation report is the operator-facing artifact between **discovery** and
15
+ **feature-create** on `/sp:dev-idea`. It follows [decision-brief](decision-brief.md) norms:
16
+ recommendation is mandatory, stakes in plain English, and approve/reject is the terminal choice.
17
+
18
+ **Authorship:** `sp:brainstorm` (discovery) fills a concrete instance to
19
+ `.spur/run/idea-eval-report.md`. The pipeline `idea-eval` state is HITL-only — it does not
20
+ re-author the report.
21
+
22
+ **Sidecar rule:** The enhanced idea does **not** overwrite `vars.idea`. Feature-create reads both
23
+ the original idea and this report.
24
+
25
+ ## Template
26
+
27
+ ```markdown
28
+ # Idea Evaluation Report
29
+
30
+ ## Enhanced Idea
31
+ <one-paragraph refined statement of what the idea actually requires — the "real requirement" after discovery sharpens the vague input>
32
+
33
+ ## Scores
34
+
35
+ | Dimension | Score (0–5) | Rationale |
36
+ |-----------|-------------|-----------|
37
+ | **Urgency** — how soon must this ship? | <0–5> | <one sentence: what breaks or degrades without it; 0 = no time pressure, 5 = blocking users/pipeline now> |
38
+ | **Necessity** — does the product need this at all? | <0–5> | <one sentence: what gap this fills vs workaround quality; 0 = nice-to-have with easy workaround, 5 = core functionality missing> |
39
+
40
+ Score guide:
41
+ - 0 = no signal / not applicable
42
+ - 1 = minimal — workaround is fine for the foreseeable future
43
+ - 2 = low — improves quality of life, not blocking
44
+ - 3 = moderate — noticeable gap; workaround exists but costs effort
45
+ - 4 = high — significant pain point; workaround is fragile or expensive
46
+ - 5 = critical — blocking users, pipeline, or a committed deliverable
47
+
48
+ ## Premises
49
+ <bulleted list of assumptions the idea rests on — things that must be true for the idea to deliver value; if any premise is false, the idea collapses or must be reshaped>
50
+
51
+ ## Pros
52
+ <bulleted list of concrete benefits — what ships, what improves, what risk is reduced>
53
+
54
+ ## Cons
55
+ <bulleted list of costs — complexity added, maintenance burden, scope risk, opportunity cost>
56
+
57
+ ## Better Alternatives
58
+ <bulleted list of alternative approaches (if any) that could achieve a similar outcome with lower cost or risk; "None identified" if the idea is the best known approach>
59
+
60
+ ## Recommendation
61
+ <proceed | reshape | drop> — <one-line rationale linking scores, premises, and pros/cons>
62
+
63
+ Stakes: <plain-English cost of proceeding vs not; reversibility; blast radius>
64
+
65
+ ---
66
+
67
+ **Approve** this evaluation to continue to feature-create.
68
+ **Reject** to cancel the run (no feature created).
69
+ ```
70
+
71
+ ## Pipeline contract
72
+
73
+ | Item | Value |
74
+ |------|--------|
75
+ | Filled instance path | `.spur/run/idea-eval-report.md` |
76
+ | Template home | this file |
77
+ | HITL state | `idea-eval` in `idea-pipeline.yaml` |
78
+ | Approve | continue → `feature-create` |
79
+ | Reject / cancel | → `cancelled` (no feature) |
80
+ | `--auto` | still pauses unless taste pre-cleared (`--approve-taste` → `idea_approved=true`) |
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: inline-pipeline-driver
3
+ description: "Interactive host-session interpreter for task-pipeline.yaml: execute the existing FSM without a workflow agent subprocess while preserving actions, guards, artifacts, and provenance."
4
+ see_also:
5
+ - spur-dev
6
+ - execution-workflow
7
+ - execution-batch
8
+ ---
9
+
10
+ # Inline Pipeline Driver
11
+
12
+ This driver is the interactive control-inversion path granted by ADR-047. It applies only when an
13
+ interactive `/sp:dev-run --mode full` or sequential `/sp:dev-runall` invocation omits `--agent` or
14
+ passes `--agent inline`. A named executor, `--agent auto`, parallel batch mode, `spur workflow run`,
15
+ and `spur agent run` keep the existing subprocess path.
16
+
17
+ The project runtime definition at `.spur/workflows/task-pipeline.yaml` remains the sole FSM definition.
18
+ The driver MUST read that file
19
+ at invocation time. It must not copy the state list, actions, guards, or transition order into a
20
+ command, skill, script, or second workflow.
21
+
22
+ ## Run setup
23
+
24
+ 1. Resolve `<wbs>`, `--auto`, and any explicit `--vars`; read the YAML and overlay its `vars` defaults
25
+ with those invocation values. An explicit `vars.agent` / `vars.implementAgent` is an executor
26
+ selection and therefore chooses the subprocess workflow path.
27
+ 2. Allocate a collision-resistant inline run id (`uuidgen`, with a timestamp/pid fallback), create
28
+ `.spur/run/`, and use `.spur/run/<run-id>.log` as the run log.
29
+ 3. Resolve the host session id from `.spur/context/.session.json`, accepting the normalized hook key
30
+ `session` and the Codex key `session_id` (in that order). If neither is available, allocate
31
+ `host-session-<run-id>` and record that fallback in the log; provenance must never be blank or
32
+ guessed from an executor subprocess.
33
+ 4. Record lifecycle provenance before entering the FSM:
34
+
35
+ ```bash
36
+ spur task run-link <wbs> --source inline-full --run-id <run-id> --json
37
+ ```
38
+
39
+ This is required for the normal `testing → done` provenance guard. It is not a guard bypass.
40
+
41
+ ## YAML interpreter
42
+
43
+ Start at `initialState`. For each current state, execute its `onEnter` actions in declaration order,
44
+ then evaluate outgoing transitions in declaration order and take the first passing guard. Stop only
45
+ at a declared terminal state or a surfaced HITL pause. The `iterationBound` remains mandatory.
46
+
47
+ Action semantics come from the YAML and the workflow action contract:
48
+
49
+ - `shell` — run the expanded command in the project working tree with resolved vars exported as
50
+ environment variables. A non-zero result follows the action's existing failure policy.
51
+ - `note` — append the expanded message to the inline run log.
52
+ - `file.read.into-var` — read the declared file into the declared run variable before subsequent
53
+ actions/guards.
54
+ - `hitl.confirm` — under `profile=auto`, follow the YAML's auto-skip transition. Otherwise pause,
55
+ surface the prompt, and resume from the same state with the operator's answer.
56
+ - `agent.run` — execute the action's slash command, native-subagent-first (task 0508). Do not call
57
+ `spur agent run` and do not re-enter `/sp:dev-run --mode full`. Preserve the YAML options: capture
58
+ `answerFile`; assert `expectFile`; enforce `requireDiff` against a pre-action git snapshot,
59
+ including the task-scope guard; honor declared error policy. `timeoutMs` is recorded as not
60
+ applicable because the host session has no independent kill boundary.
61
+
62
+ **Native-subagent dispatch (R2 eligibility, evaluated before each action):**
63
+
64
+ 1. The invocation is one of the two interactive inline full-pipeline surfaces (`dev-run --mode full`
65
+ or sequential `dev-runall`, omit/`inline`).
66
+ 2. The YAML action kind is `agent.run` and its input is a pure slash command. Shell, note, file,
67
+ guard, and operator-interaction actions remain host-executed.
68
+ 3. The current state/action has no operator-confirmation action, `pause: true`, approve/taste/ask
69
+ decision, or other operator prompt.
70
+ 4. The platform exposes a native subagent that shares the working tree and has read, write, shell,
71
+ and Spur task/run-artifact access.
72
+
73
+ All four pass → dispatch. Any pre-dispatch failure → execute the stage **once** in the host session.
74
+ No token estimate, stage-size threshold, model heuristic, or configuration switch is added.
75
+
76
+ **Dispatch and join:** before dispatch, capture the same pre-action git snapshot used by
77
+ `requireDiff` enforcement. Send only: the stage id, the YAML's exact pure slash command, and
78
+ `execution surface already resolved: native subagent; do not dispatch this stage again`. The WBS/path
79
+ already carried by the slash command is the handoff — do not paste task/session transcripts or embed
80
+ machine-specific session paths. Dispatch exactly one native subagent and wait for it; the inline FSM
81
+ must not advance actions or guards concurrently (one writer at a time). After join, validate
82
+ `answerFile`, `expectFile`, `requireDiff`, task scope, and the action's error policy from the shared
83
+ filesystem — a subagent success message is not evidence. On success append exactly:
84
+
85
+ ```text
86
+ stage <id> executed via subagent <agent-id> (host session <session-id>)
87
+ ```
88
+
89
+ Host fallback retains exactly `stage <id> executed inline in session <session-id>`. If launch fails
90
+ before the subagent starts, log the reason and use host fallback. If a started subagent fails or
91
+ leaves invalid artifacts, do **not** replay the stage in the host — follow the YAML error policy so
92
+ partial mutations are not duplicated.
93
+
94
+ **Host-owned interaction:** the host alone executes operator-confirmation actions, owns
95
+ `pause: true`, and surfaces approve/taste/ask decisions. A subagent that discovers missing authority
96
+ or an operator decision returns a blocker; the host pauses at the current state and presents it. The
97
+ subagent cannot approve, infer consent, or recursively invoke the full pipeline.
98
+
99
+ After every successful inline `agent.run` action append exactly one provenance line (inline or
100
+ subagent form above) to `.spur/run/<run-id>.log`, where `<id>` is the current YAML state id. Also
101
+ log start/failure and the ignored timeout value so an inline run remains auditable without
102
+ fabricating an `AgentRunTracedResult`.
103
+
104
+ Transition guards are not advisory. Execute the declared guard exactly, in order, with the same
105
+ resolved variables and artifacts. `--no-lifecycle` remains bookkeeping only; the YAML's task checks,
106
+ verdict gate, record step, and done guard all remain authoritative.
107
+
108
+ ## Batch use
109
+
110
+ Sequential `/sp:dev-runall` with omit/`inline` runs this driver once per ready WBS, with a fresh run
111
+ id and the same frozen/topologically ordered batch plan. Batch inspection, halt/keep-going policy,
112
+ and reporting remain in `execution-batch.md`. Parallel mode cannot share one host session safely and
113
+ therefore keeps the existing isolated subprocess/worktree path (trigger 4).
114
+
115
+ ## Failure contract
116
+
117
+ Never silently fall back from this interactive inline path to `agent.default`. If the driver cannot
118
+ read the YAML, allocate provenance, execute an action, or evaluate a guard, stop at that state and
119
+ report the run id, state id, original error, and the concrete resume/retry command. The working tree
120
+ and run artifacts are the recovery input.
@@ -0,0 +1,302 @@
1
+ ---
2
+ name: planning-workflow
3
+ description: "Extracted section: the planning half — intake → feature create → AC generation → feature check gate → decomposition → batch-create gate → refine. The full step-by-step procedure for turning a vague description into a validated, decomposed feature."
4
+ see_also:
5
+ - spur-dev
6
+ - decomposition
7
+ - ac-style-guide
8
+ ---
9
+
10
+ # Planning Workflow
11
+
12
+ ```
13
+ vague description
14
+ → intake (clarify scope, constraints — prompt work)
15
+ → spur feature create … ; AC authored/generated (spur agent run, bdd templates)
16
+ → GATE: spur feature check (BDD validator; loop until clean)
17
+ → decomposition (prompt work) → task-batch JSON
18
+ → GATE: task-batch.schema.json + spur task batch-create (atomic: all-or-nothing)
19
+ → design doc (conditional: seam heuristic under default; skip with --skip-design) → docs/design/<slug>.md + 04 index
20
+ ```
21
+
22
+
23
+ The planning half transforms a description into a validated feature file with acceptance
24
+ criteria, then decomposes it into a batch of tasks. Two CLI gates make LLM regressions
25
+ unable to corrupt the corpus: `spur feature check` validates the AC, and
26
+ `task-batch.schema.json` validates the decomposition shape before `spur task batch-create`
27
+ writes anything.
28
+
29
+ ## Step 1: Intake
30
+
31
+ When given a feature description, clarify before creating:
32
+
33
+ 1. **Scope** — what is in, what is explicitly out. Record both.
34
+ 2. **Constraints** — existing systems it must work with, performance/security boundaries.
35
+ 3. **Success criteria** — how will we know it's done? (Feeds AC generation.)
36
+
37
+ Ask only what is ambiguous. A crisp description needs no Q&A loop — proceed directly to feature
38
+ creation.
39
+
40
+ ## Step 2: Feature creation + AC generation
41
+
42
+ ```bash
43
+ spur feature create "<name>" [--parent <id>]
44
+ ```
45
+
46
+ The feature file lands in `docs/features/<ID>_<slug>.md`. Immediately author the `## Goal`
47
+ (single sentence) and `## Scope` (in/out bullets).
48
+
49
+ Then generate **BDD acceptance criteria** in the `## Acceptance Criteria` section using the
50
+ Gherkin template. Conventions:
51
+
52
+ - **R-numbered scenarios:** each scenario carries an `R1, R2, …` prefix in its title for
53
+ cheap, human-readable traceability. (Coverage matching is by **normalized scenario title** —
54
+ the R-prefix is stripped before matching — so keep the title text stable, not just the number.)
55
+ - **Two AC tiers:** core scenarios (the must-pass gate) and edge-case scenarios (advisory
56
+ warnings — the permissive start, per DD-06). Mark edge-case scenarios explicitly.
57
+ - **Scenario-title mapping:** the scenario title is the identity key for traceability edges
58
+ to task files — keep them stable and unique.
59
+ - Generate AC inline (current session) with the BDD template
60
+ (`.spur/templates/bdd/gherkin.md`), or escalate to `spur agent run` only when a
61
+ [subprocess trigger](cross-cutting.md#inline-default-execution-surface) applies. **Thread
62
+ `--agent` through** when the command forwarded one. See the
63
+ [inline-default execution-surface contract](cross-cutting.md#inline-default-execution-surface).
64
+
65
+ Full authoring conventions: see [ac-style-guide.md](ac-style-guide.md).
66
+
67
+ ## Step 3: Feature check gate (loop)
68
+
69
+ ```bash
70
+ spur feature check <id> --json
71
+ ```
72
+
73
+ The BDD validator gate. A non-zero exit means findings:
74
+
75
+ 1. Read each finding from the JSON output.
76
+ 2. Fix the **specific** AC issue — never restructure unrelated scenarios.
77
+ 3. Re-run. Loop until exit 0.
78
+
79
+ This gate catches: malformed Gherkin, missing required scenario elements, traceability gaps.
80
+ A skill regression can never corrupt the corpus — worst case is a rejected write with findings
81
+ the skill can react to.
82
+
83
+ ## Step 4: Decomposition
84
+
85
+ **Default: do not decompose.** A clean feature does not automatically become many tasks. The
86
+ default outcome is one task whose `## Plan` carries the implementation steps; splitting is the
87
+ exception you justify with the rubric. See the `sp:spec-decomposition` skill ("Default to NOT
88
+ decomposing") — read it before this step.
89
+
90
+ 1. **Score the feature with the rubric first.** Compute E/D/L/C/R for the *whole* feature. Record
91
+ the assessment (this is a required artifact, not optional):
92
+ - **Score 0–2 → keep as one task.** Stop. Author one task (Background + Requirements from the
93
+ feature, the implementation steps as its `## Plan`). Do NOT call `batch-create`. You're done
94
+ with decomposition.
95
+ - **Score 3–4 → decomposition optional.** Prefer one task with a rationale unless a clear
96
+ deliverable boundary justifies a split.
97
+ - **Score 5+, or a force-decompose override fires → decompose.** Continue to step 2.
98
+ 2. **Only now design the split** — by deliverable boundary, never by phase or by list-item. Read
99
+ the feature's scenarios (the AC); each resulting task maps to ≥1 scenario by title.
100
+ 3. **Score each candidate child.** Any candidate that scores 0–2 on its own is a `## Plan` step of
101
+ a sibling, not a task — merge it. This is the check that stops a 6-item finding list becoming 6
102
+ tiny tasks.
103
+ 4. Produce a **task-batch JSON** document conforming to `task-batch.schema.json` — a top-level
104
+ JSON **array** of strict task items (no `tasks` wrapper, only documented fields).
105
+
106
+ Decomposition heuristics (apply only after deciding to decompose):
107
+ - **One task = one atomic unit of work** a single agent can complete (target 2–8h; never <2h).
108
+ - **Scenario coverage:** every core scenario maps to ≥1 task; edge-case scenarios may map
109
+ or be deferred.
110
+ - **Sub-tasks:** record `parent_wbs` (quoted, e.g. `"0042"`) for sub-tasks; note ordering in
111
+ `background` prose (the item schema has no `dependencies` field).
112
+ - **Template variants:** choose `feature-impl` for implementation tasks (pulls Goal →
113
+ Background from the linked feature, per B09).
114
+ - **Record the rubric score** in each child's `background` (a trailing line, e.g.
115
+ *"Rubric: E2 D1 L1 C1 R2 = 7 → decompose (force: R=high)."*) — the assessment artifact the
116
+ gate below checks for.
117
+
118
+ The batch JSON is the LLM→CLI contract — see the `sp:spec-decomposition` skill for the
119
+ full schema and conventions.
120
+
121
+ ## Step 5: Batch-create gate
122
+
123
+ **Pre-check (soundness, before the CLI gate).** Re-read each item in the batch JSON against the
124
+ rubric before submitting. Specifically:
125
+
126
+ - Would this item score 0–2 on its own? → it is a Plan step; merge it into a sibling or back into
127
+ the parent. Do not submit it as a task.
128
+ - Is the batch one-item-per-list-entry (one finding → one task, one scenario → one task)? → you
129
+ are reflex-decomposing. Re-score and merge.
130
+ - Does each item carry its rubric-score line in `background`? → if not, the assessment is missing;
131
+ score it before submitting.
132
+
133
+ Only then run the CLI gate:
134
+
135
+ ```bash
136
+ spur task batch-create --file <batch.json>
137
+ ```
138
+
139
+ Atomic: all-or-nothing. If `task-batch.schema.json` validation fails, **nothing is written**
140
+ and findings are returned. The schema validates shape only (it cannot reject over-decomposition —
141
+ that is the pre-check's job above). Common shape failures:
142
+
143
+ - Missing required fields per the template variant's section matrix.
144
+ - Invalid status values (must be lowercase canonical).
145
+ - `feature_id` referencing a non-existent feature.
146
+ - WBS collisions (already-allocated range).
147
+
148
+ Loop until the command exits 0 — then the batch is created and each task appears in the
149
+ feature's `## Tasks` block on next `spur feature refresh`.
150
+
151
+ **If you decomposed a parent task into sub-task files** (the children carry `parent_wbs`), the
152
+ sub-task roster is **auto-generated** — `spur task batch-create` invokes `spur task refresh-roster`
153
+ for each distinct `parent_wbs` after the atomic create lands (task 0178 F1), and transitions
154
+ decomposed parents from `todo` to `wip` (task 0178 F2). You do **not** hand-write the roster;
155
+ re-run `spur task refresh-roster <parent-wbs>` to re-emit it after a child status change outside
156
+ `batch-create`. See `sp:spec-decomposition` ("Parent (umbrella) tasks") for the roster format and
157
+ the parent-completion rule.
158
+
159
+ ## Step 5.5: Design package (unified `--skip-design` only)
160
+
161
+ Two design surfaces, **one operator opt-out** (aligned with `/sp:dev-idea`):
162
+
163
+ | Surface | What | Default |
164
+ |---------|------|---------|
165
+ | **Feature satellite** | `docs/design/<slug>.md` + `04_DESIGN.md` index | On when seam heuristic fires; **ties lean design**; off only with `--skip-design` |
166
+ | **Task `### Design`** | Per-task WHAT/WHY in each batch item's `design` field | **On by default** at decompose/batch-create; off with `--skip-design` |
167
+
168
+ There is **no** `--design` force flag. Design is **on by default**; **`--skip-design`** is the only
169
+ opt-out.
170
+
171
+ **`--skip-design` (unified):** skip the feature satellite **and** leave task `design` empty (scaffold
172
+ only). Refine is the **fallback** that fills blank Design before implement.
173
+
174
+ | Flags | Feature satellite | Task `### Design` in batch |
175
+ |-------|-------------------|----------------------------|
176
+ | (default / `--auto`) | seam heuristic (ties lean **design**) | **author `design` on each item** |
177
+ | `--skip-design` | skip | **omit `design`** (refine later) |
178
+
179
+ A task's in-file `### Design` is code-level and narrow. The feature satellite is cross-cutting. Both
180
+ are part of the same planning "design package" controlled by `--skip-design`.
181
+
182
+ **The seam heuristic (default / `--auto` decision).** A design doc is warranted when the feature
183
+ introduces an **ADR-worthy** change — anything that shifts a boundary another engineer must reason
184
+ about:
185
+
186
+ - a **new command** or a new flag that changes a command's contract,
187
+ - a **new module / package / service** (a new `apps/*` or `packages/*`, a new app-layer service),
188
+ - a **new schema** — a DB table/migration, a Zod config key, a DTO/contract shape,
189
+ - a **new transport / boundary** — an oRPC seam, an auth boundary, a job-queue or EventBus topic.
190
+
191
+ If the work is clearly internal to one module, a bug fix, a doc/chore, or a refactor with no boundary
192
+ change, **skip** — note the skip in the report. **When in doubt, lean design** (same ties rule as
193
+ idea-path `needs_design`). Use `--skip-design` only when the operator wants no satellite and blank
194
+ task Design.
195
+
196
+ **Authoring (skill-prose — no CLI verb).** The `04` index is a hand-curated derived doc
197
+ (constitution §4.5 rule 4 / §6.5), so write it directly, in the fixed **detail-first then index**
198
+ order (§4.5 rule 5 / sync trigger **T9**):
199
+
200
+ 1. **Satellite first.** Write/update `docs/design/<slug>.md`. `<slug>` is the stable grep anchor —
201
+ derive it from the feature name (kebab-case), and **reuse the existing slug** on re-runs. Capture
202
+ the chosen approach + one-line reason, rejected alternatives, key interface/type **signatures**
203
+ (not bodies), invariants, and the surface it touches. Do **not** restate the satellite file format
204
+ here — follow the shape of existing satellites (`docs/design/server-side-adjustment-design.md`,
205
+ `workflow-observability.md`).
206
+ 2. **Index second.** Add or update the satellite's row in `docs/04_DESIGN.md §0` (the `| Satellite |
207
+ Area | Status |` table) — pointer + one-line area + status only, never a restatement of the body.
208
+
209
+ **Idempotency (re-runnable).** `/sp:dev-plan` may run many times for one feature. If the
210
+ satellite already exists: **update in place** — merge new design content into its sections, refresh
211
+ its `updated_at`, and leave its existing `04` index row alone (or adjust only its status). **Never**
212
+ overwrite the whole file, create a second satellite, or add a duplicate index row. The invariant
213
+ (§4.5 rule 1): exactly one `04 §0` row per satellite, every satellite reachable from exactly one row.
214
+
215
+ **Report (no confirmation pause).** Under `--auto`, generation is autonomous — when the heuristic
216
+ fires, author the doc and **report** the chosen slug and a one-line rationale ("authored
217
+ `docs/design/<slug>.md` — new `spur <noun>` command + config key"); when it does not fire, report the
218
+ skip and why. Do not pause to ask; the operator reviews the satellite afterward.
219
+
220
+ ## Step 6: Refine before execute (the spec-completion gate)
221
+
222
+ `batch-create` accepts optional `design` / `plan` / `acceptance_criteria` fields (plus
223
+ `background` / `requirements`). **Default planning path:** the decomposition agent fills `design`
224
+ (and preferably Plan/AC) so tasks land **content-ready**. **`--skip-design`:** leave `design`
225
+ empty — headings only.
226
+
227
+ **Refine is the fallback**, not the primary Design author:
228
+
229
+ ```text
230
+ /sp:dev-refine <wbs> # single task — fills blank Design/AC/Plan if L3 gaps
231
+ /sp:dev-refineall --feature X --auto
232
+ /sp:dev-refineall --feature X --auto --depth ready # implement-ready freeze (no L3-only SKIP)
233
+ ```
234
+
235
+ Under `--auto` + **`--depth standard`** (default), refine **SKIP**s when target sections
236
+ (Background, Requirements, AC, Design, Plan) already have no L3 findings. If Design is still
237
+ placeholder, synthesis runs (standard tier by default; escalates only on gate-fail). Under
238
+ **`--depth ready`**, do not SKIP on L3-clean alone — run the implement-ready checklist in
239
+ [dev-operations.md](dev-operations.md) § refine (frozen APIs, anti-patterns, file targets, handoffs)
240
+ so another agent can implement without inventing design.
241
+
242
+ **Check the variant before you write.** Which sections a task carries is decided by its `template:`
243
+ frontmatter against `.spur/tasks/section-matrix.yaml` — NOT a fixed list. Before authoring any
244
+ section, run `spur task check <wbs> --json` and read `requiredSections` / the L2 findings: they tell
245
+ you exactly what this variant allows at the current status. The default `standard` variant wants
246
+ `Acceptance Criteria` + `Design` + `Plan` at `todo`, but other variants differ — e.g. the `review`
247
+ variant puts findings under `### Background` (`#### Review Findings`) and the fix checklist in
248
+ `### Plan`, and does **not** use `### Requirements`/`### Acceptance Criteria`. Authoring a section
249
+ that isn't in the variant's allowed list produces an L2 "not allowed in this variant/status" warning
250
+ and an off-variant task. Write only what the matrix permits; route findings/checklists into the
251
+ sections the variant actually defines.
252
+
253
+ **Avoid creating off-variant sections in the first place.** There is no section-delete verb —
254
+ intentionally none (the CLI surface stays minimal). Writing an empty body via
255
+ `spur task update <wbs> --section <name> --from-file <empty-file>` currently leaves a **bare
256
+ heading**, not a removal. So once an off-variant section exists, it cannot be cleanly dropped from
257
+ the skill — the prevention (check the variant before writing, above) is the only reliable path. If
258
+ you must correct an off-variant section, overwrite its body with a single line pointing at the
259
+ correct section (e.g. *"See `### Plan` for the fix checklist."*) rather than leaving it empty.
260
+
261
+ **Do this just-in-time, per task, immediately before execution** — not in bulk at decomposition
262
+ time. Design written against a stale snapshot of the codebase rots; design written right before
263
+ `implement` reflects current reality. Refine `0042`, run `0042`; refine `0043`, run `0043`.
264
+
265
+ **Batch refine (optional pre-pass).** When an operator wants every planning-side task under a
266
+ feature filled before a runall, use `/sp:dev-refineall --feature <id> --auto` (batch counterpart
267
+ of `/sp:dev-refine`). It reuses the same per-task refine operation, freezes the set, topo-sorts by
268
+ `dependencies[]`, and emits a batch report — see [dev-operations.md](dev-operations.md) § refineall.
269
+ This does **not** replace just-in-time refine before each implement; it is a bulk pre-pass when the
270
+ feature's tasks are still `backlog`/`todo` placeholders. Prefer `--auto` for batch scale; avoid
271
+ `--next` on large features (that chains each task into run).
272
+
273
+ **Refine arguments** (defined on the `/sp:dev-refine` entry point, passed through verbatim; also
274
+ shared flags on `/sp:dev-refineall`):
275
+
276
+ | Argument | Effect |
277
+ |----------|--------|
278
+ | `--focus <mode>` | Narrows the gap analysis to a subset of domain hints. See the `sp:dev-refine` skill for the full value table (`all`, `requirements`, `background`, `constraints`, `acceptance`, `quick`). Default `all`. |
279
+ | `--depth <standard\|ready>` | Spec depth bar. `standard` (default) = L3 structural completeness + L3 SKIP under `--auto`. `ready` = implement-ready freeze (never L3-only SKIP). See [flag-glossary.md](flag-glossary.md#flag-depth). |
280
+ | `--auto` | Skip interactive Q&A — synthesize improvements from the task content alone. Use for well-scoped tasks where the agent can fill gaps without operator input. **Required for practical batch use** via `dev-refineall`. |
281
+
282
+ **Pre-synthesis skip gate (under `--auto` + `--depth standard`).** Before synthesizing, run `spur task check <wbs> --json`. When the **refine target sections** show no L3 findings, emit a structured SKIP instead of calling the synthesis agent. **Not applied when `--depth ready`.**
283
+
284
+ **Refine target sections (anti-drift lock):** `{Background, Requirements, Acceptance Criteria, Design, Plan}`.
285
+ These must be solid enough that a cheaper implementer cannot invent another path. **Solution is not a refine target** — it is written by implement as the as-built change-map.
286
+
287
+ ```
288
+ SKIP — sections already meet L3: sections-considered=[Background, Requirements, Acceptance Criteria, Design, Plan], reason="no L3 findings for target sections"
289
+ ```
290
+
291
+ This is the expected outcome for a task that is already well-specified. Under `--auto`, a SKIP is not an error — it means no gap was found. The operator can verify by reading the check output or the task file directly. Synthesis is only invoked when a real gap exists in a target section (including empty/placeholder Design or AC).
292
+
293
+ > **Requirements formatting:** author R-items as a GitHub task-list checkbox — `- [ ] R1. <text>`
294
+ > — one per line, so progress is trackable in the file. Keep the `Rn.` (period) token inside the
295
+ > marker so the R-numbering rule recognizes it.
296
+ >
297
+ > The L3 check *tolerates* `- Rn.` and bare `Rn.` for backward compatibility with the existing
298
+ > corpus — that tolerance is **not** permission to emit them. A bare `Rn.` line carries no markdown
299
+ > list marker, so consecutive items collapse into one run-on paragraph in the Board's markdown
300
+ > preview while `spur task check` still passes. Emit the checkbox form on every write path
301
+ > (refine synthesis, `spur task update --section`, and `batch-create` bodies — see
302
+ > `sp:spec-decomposition` → `references/decomposition.md`, "Section bodies are markdown").