@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,122 @@
1
+ ---
2
+ name: feature-verbs
3
+ description: Per-verb flag detail, JSON shapes, and the four check layers for spur feature.
4
+ see_also:
5
+ - spur-cli
6
+ ---
7
+
8
+ # `spur feature` — verb detail
9
+
10
+ Ground truth for every `spur feature` verb. The CLI is the source of behavior; this mirrors it. If
11
+ a flag isn't listed, it doesn't exist.
12
+
13
+ ## `create <name>`
14
+
15
+ Allocate a feature with a hierarchical ID (DD-14) under the create-lock (serialized allocation;
16
+ fail-loud).
17
+
18
+ | Flag | Effect |
19
+ | ---- | ------ |
20
+ | `--parent <id>` | Child gets the next free digit 1–9 under `<id>`. Omit for a top-level letter ID. |
21
+ | `--folder <path>` | Target a non-default features folder. |
22
+ | `--json` | Emit `{ ref: { id, filePath } }`. |
23
+
24
+ ## `show <id>` / `list`
25
+
26
+ - `show <id>` prints frontmatter + body.
27
+ - `list` filters by `--status <s>` and/or `--priority <p>`. `--json` emits an array.
28
+
29
+ ## `update <id> [status] | --field <key> --value <v> | --section <name> --from-file <path>`
30
+
31
+ Multi-mode. At least one of status, field pair, or section pair is required (exit `2` otherwise).
32
+
33
+ - **Status** (positional): legal transition over `backlog → active → verifying → blocked → done →
34
+ cancelled`. `verifying` is the AC-traceability gate. **One active goal** corpus-wide (enforced by
35
+ `check`).
36
+ - **Field** (`--field` requires `--value`): set a single frontmatter scalar, e.g.
37
+ `--field priority --value P1`.
38
+ - **Section** (`--section` **requires** `--from-file`): replace the entire named section body from a
39
+ file (same file-wins contract as `spur task update --section`).
40
+
41
+ ## `advance <id>`
42
+
43
+ Walk the legal **forward** lifecycle path hop-by-hop until a target status.
44
+
45
+ | Flag | Effect |
46
+ | ---- | ------ |
47
+ | `--to <status>` | Target status (default `done`). Forward path: `backlog → active → verifying → done`. |
48
+ | `--folder <path>` | Custom features folder. |
49
+ | `--json` | Emit `{ id, status, hops: [{ from, to }, …] }`. |
50
+
51
+ No-op (success) when already at the target. Exit `1` if the feature is missing or a hop is illegal.
52
+
53
+ ## `move <id>`
54
+
55
+ Re-parent a subtree. `--parent <new>` cascade-renames `<id>` and **every descendant** to the new
56
+ position; omit `--parent` to lift the subtree to a top-level group. Use this for any structural
57
+ change — never hand-edit an ID, which would orphan descendants and break edges.
58
+
59
+ | Flag | Effect |
60
+ | ---- | ------ |
61
+ | `--parent <id>` | New parent (omit → top-level group). |
62
+ | `--dry-run` | Show old→new ID map + affected tasks without writing. |
63
+ | `--folder` / `--json` | Standard. |
64
+
65
+ ## `refresh`
66
+
67
+ Rebuild **derived docs only**: `INDEX.md` and each feature's `## Tasks` auto-gen region from task
68
+ `feature_id` edges (WBS / title / status). **Files win** for that region; Goal/Scope/AC and feature
69
+ `status` are untouched. Run after task create/link/done or hand-edits that leave the roster stale.
70
+
71
+ | Flag | Effect |
72
+ | ---- | ------ |
73
+ | `--feature <id>` | Rewrite only that feature's `## Tasks` (INDEX.md still fully regenerated). |
74
+ | `--folder` / `--json` | Standard. |
75
+
76
+ **vs `sync`:** `refresh` never changes lifecycle status and never runs transition guards.
77
+
78
+ ## `sync [id]`
79
+
80
+ Align a feature's **frontmatter status** with linked task states. Derives a proposal and, unless
81
+ `--dry-run`, applies legal lifecycle hops (e.g. all tasks terminal → toward `done`; reopened work →
82
+ reopen). Real transitions — gates (dogfood for self-referential workflow features, one-active-goal,
83
+ L4 readiness) may deny a hop.
84
+
85
+ | Flag | Effect |
86
+ | ---- | ------ |
87
+ | `[id]` / `--all` | One feature, or every feature that has linked tasks (one required). |
88
+ | `--dry-run` | Report proposal only; no write. |
89
+ | `--force` | Apply a *reopen* (backward) proposal without interactive confirmation. |
90
+ | `--folder` / `--json` | Standard. JSON: `{ proposal, applied, appliedHops[] }`. |
91
+
92
+ **vs `refresh`:** `sync` never rewrites INDEX.md or `## Tasks` tables.
93
+
94
+ ## `check [id]`
95
+
96
+ The four-layer validator. Bare = whole tree; with an ID = one feature. `--strict` elevates warnings
97
+ to failures. `--json` emits per-feature findings.
98
+
99
+ | Layer | Checks | Severity |
100
+ | ----- | ------ | -------- |
101
+ | **L1** | Zod frontmatter schema | hard error |
102
+ | **L2** | Section-Status-Matrix presence (required sections per status) | warning-first; `gate:true` sections are hard |
103
+ | **L3** | Format rules — BDD AC syntax, one-active-goal, children-limit (≤ 9, corpus-derived) | mixed |
104
+ | **L4** | Traceability — incoming `feature_id` edges, orphan scenarios, coverage orphans, `verifying` readiness | warning-first |
105
+
106
+ A finding carries `{ layer: 'L1'|'L2'|'L3'|'L4', section, severity, message }`. Parse the JSON to
107
+ answer "is H2 ready for `verifying`?" or "which scenarios have no task?" — the rules are CLI code,
108
+ not prose to restate. This is the gate `sp:spur-dev`'s planning half loops on.
109
+
110
+ ## Command surface (quick)
111
+
112
+ ```
113
+ spur feature create <name> [--parent <id>] [--folder] [--json]
114
+ spur feature show <id> [--folder] [--json]
115
+ spur feature update <id> [status] [--field <k> --value <v>] [--section <n> --from-file <p>] [--folder] [--json]
116
+ spur feature advance <id> [--to <status>] [--folder] [--json]
117
+ spur feature list [--status <s>] [--priority <p>] [--folder] [--json]
118
+ spur feature move <id> [--parent <id>] [--dry-run] [--folder] [--json]
119
+ spur feature refresh [--feature <id>] [--folder] [--json]
120
+ spur feature sync [id] | --all [--dry-run] [--force] [--folder] [--json]
121
+ spur feature check [id] [--strict] [--folder] [--json]
122
+ ```
@@ -0,0 +1,234 @@
1
+ ---
2
+ name: spur-cli-features
3
+ description: "spur-cli noun reference: operate `spur feature` as the project's feature CLI — author features with hierarchical IDs (DD-14), write acceptance criteria the validator and decomposition both read, drive the feature lifecycle, move subtrees, and keep traceability honest. The intent-and-AC side of the planning layer that the spine orchestrates against."
4
+ see_also:
5
+ - spur-cli
6
+ ---
7
+
8
+ # spur feature — the feature CLI
9
+
10
+ `spur feature` is the CLI for the **feature tree** — the markdown feature files that capture intent
11
+ (`Goal` / `Scope`) and acceptance criteria, organized by hierarchical IDs (DD-14). Features are the
12
+ *why* and *what-done-looks-like*; tasks (see `spur task`) are the *how*.
13
+
14
+ This is a **companion reference**, not an orchestrator. It documents *what each verb is* and *how
15
+ to author features and AC well*. The end-to-end loop that turns a vague intake into a feature, AC,
16
+ and a decomposed task batch lives in **`sp:spur-dev`** — do not reimplement that loop here (R3).
17
+ When you need to *drive* planning, reach for `sp:spur-dev`; when you need to know *which verb does
18
+ what* or *how to write a scenario*, this skill.
19
+
20
+ ## Verb map
21
+
22
+ | Verb | Purpose | Key flags |
23
+ | ---- | ------- | --------- |
24
+ | `create <name>` | Allocate a feature; assigns a hierarchical ID under the create-lock | `--parent <id>` `--folder` `--json` |
25
+ | `show <id>` | Print one feature's frontmatter + body | `--folder` `--json` |
26
+ | `update <id> [status]` | Lifecycle transition, scalar field set, **or** section replace | `--field <k> --value <v>` `--section <n> --from-file <p>` `--folder` `--json` |
27
+ | `advance <id>` | Walk forward along the legal lifecycle path to a target status | `--to <status>` (default `done`) `--folder` `--json` |
28
+ | `list` | List features, filtered | `--status <s>` `--priority <p>` `--folder` `--json` |
29
+ | `move <id>` | Re-parent a subtree (cascade-rename of descendants) | `--parent <id>` `--dry-run` `--folder` `--json` |
30
+ | `refresh` | Rebuild INDEX + each feature `## Tasks` table from task edges (**docs only**; no status change) | `--feature <id>` `--folder` `--json` |
31
+ | `check [id]` | Validate one feature / the tree; the 4-layer gate | `--strict` `--folder` `--json` |
32
+ | `sync [id]` | Align feature **lifecycle status** with linked task states (real transitions + guards) | `--all` `--dry-run` `--force` `--folder` `--json` |
33
+
34
+ **`refresh` vs `sync` (do not conflate):**
35
+
36
+ | Need | Verb |
37
+ | ---- | ---- |
38
+ | Stale `## Tasks` roster / INDEX after tasks finished or linked | `refresh` |
39
+ | Feature frontmatter `status` should follow task statuses | `sync` (preview with `--dry-run`) |
40
+
41
+ `refresh` never runs lifecycle gates. `sync` never rewrites the Tasks table — run both when you need both.
42
+
43
+ All verbs accept `--json` and `--folder <path>`.
44
+
45
+ ## Hierarchical IDs (DD-14)
46
+
47
+ Feature IDs are positional: a top-level feature is a letter (`H`), a child appends one digit per
48
+ level (`H1`, `H2`, then `H21`, `H22`). Rules the CLI enforces — you don't restate them, you let
49
+ `create` and `check` apply them:
50
+
51
+ - One digit per level; **≤ 9 children** per parent (the corpus-derived limit `check` flags as L3).
52
+ - The parent of an ID is that ID with its **last character dropped** (`H21` → `H2` → `H`).
53
+ - `create --parent H2` takes the **next free digit 1–9** under `H2`; allocation is serialized by
54
+ the create-lock so concurrent creates never collide.
55
+
56
+ ```bash
57
+ spur feature create "Planning layer" --parent H # → H<n>
58
+ spur feature create "Task CLI" --parent H1 # → H1<n>
59
+ ```
60
+
61
+ To restructure, use `move` — never hand-edit an ID. `move <id> --parent <new>` re-parents the
62
+ subtree and **cascade-renames** every descendant; omit `--parent` to lift it to a top-level group.
63
+
64
+ **Before create or restructure (judgment, not CLI):** load
65
+ [features/hierarchy-mece.md](features/hierarchy-mece.md) — MECE sibling sets, **sparse cautious
66
+ roots**, extend-vs-create decision procedure, merge vs reparent, depth/width limits. `/sp:dev-plan`,
67
+ `/sp:dev-idea`, and `/sp:dev-featurechange` must follow that checklist so new work prefers an
68
+ existing parent over a new letter.
69
+
70
+ ## Editing a feature: status, fields, and sections
71
+
72
+ `update` is multi-mode (status, field, and/or section — not all require mutual exclusion, but each
73
+ mode needs its own required args).
74
+
75
+ **Lifecycle transition** (positional status):
76
+
77
+ ```bash
78
+ spur feature update H2 active
79
+ ```
80
+
81
+ Valid statuses: `backlog → active → verifying → blocked → done → cancelled`. The lifecycle engine
82
+ enforces legal transitions; `verifying` is the gate where AC traceability must hold (L4).
83
+ **One active goal** at a time is enforced by `check` (a corpus invariant).
84
+
85
+ **Scalar field set:**
86
+
87
+ ```bash
88
+ spur feature update H2 --field priority --value P1
89
+ ```
90
+
91
+ `--field` requires `--value`. This sets a single frontmatter scalar (e.g. `priority`).
92
+
93
+ **Section replace** (file-wins, same contract as `spur task update --section`):
94
+
95
+ ```bash
96
+ spur feature update H2 --section "Acceptance Criteria" --from-file /tmp/ac.md
97
+ ```
98
+
99
+ `--section` **requires** `--from-file` (exit `2` otherwise). Replaces the whole named section body.
100
+ The `## Tasks` block is still rebuilt by `refresh` (files win for that region).
101
+
102
+ **Advance** (multi-hop forward walk):
103
+
104
+ ```bash
105
+ spur feature advance H2 # walk forward until done (default)
106
+ spur feature advance H2 --to verifying
107
+ ```
108
+
109
+ Walks the legal forward path (`backlog → active → verifying → done`) hop-by-hop until `--to`
110
+ (default `done`). No-op when already at the target.
111
+
112
+ ## Acceptance criteria conventions
113
+
114
+ AC is the contract `check` validates and decomposition maps tasks against. Author scenarios in the
115
+ feature's `## Acceptance Criteria` as Gherkin.
116
+
117
+ ### R-numbering
118
+
119
+ Every scenario carries an `R1, R2, …` prefix in its title:
120
+
121
+ ```gherkin
122
+ Scenario: R1 — User can create a task with required fields
123
+ Scenario: R2 — Task creation fails gracefully on missing title
124
+ ```
125
+
126
+ - **Sequential within a feature** — start at R1 per feature.
127
+ - **Stable forever** — never renumber after tasks are created; a new scenario takes the next free
128
+ number. (Tasks reference AC by *scenario title*, normalized — the R-prefix is stripped on match —
129
+ so a renumber silently breaks coverage.)
130
+ - **One R-number = one scenario** — never split a requirement across scenarios under one R-number,
131
+ never merge two requirements into one scenario.
132
+
133
+ ### Two tiers (authoring convention)
134
+
135
+ Tag scenarios `@core` (must ship; maps to a task in decomposition) or `@edge` (advisory error/edge
136
+ paths; may be deferred). This is a **planning convention** (DD-06), not a `check` gating feature
137
+ today — the validator currently treats all scenarios uniformly — but tagging lets decomposition and
138
+ future tiered gating tell them apart. Full rationale: `sp:spur-dev`'s AC style guide.
139
+
140
+ See [features/acceptance-criteria.md](features/acceptance-criteria.md) for the Gherkin template
141
+ and the checklist-vs-Gherkin two-format note.
142
+
143
+ ## Traceability habits
144
+
145
+ The L4 layer of `check` reads the **task → feature** edges (`feature-id` in task frontmatter) and
146
+ the AC coverage map. Habits that keep it green:
147
+
148
+ - **Create tasks with `--feature <id>`** so the incoming edge exists (`spur task create … --feature H2`).
149
+ - **Match a task to AC by scenario title**, not R-number — coverage is computed on normalized
150
+ titles, so keep titles stable even as you renumber-around them.
151
+ - **Before `verifying`**, run `spur feature check <id> --json` and clear: orphan scenarios (AC with
152
+ no task), coverage orphans (tasks claiming AC that doesn't exist), and broken edges.
153
+ - **Run `refresh` after hand-edits or task status changes** so the `## Tasks` block and tree reflect
154
+ the files (files win). This is **not** `sync` — it does not change feature status.
155
+ - **Scope `refresh` to one feature** with `--feature <id>` when only one feature's task links changed
156
+ (INDEX.md is still regenerated for the whole tree): `spur feature refresh --feature H2`.
157
+
158
+ ## Roadmap and priority habits
159
+
160
+ Use feature hierarchy for user-facing capabilities and roadmap themes; keep technical-module mapping
161
+ as prose or notes unless the product surface is developer infrastructure. Priority is a scalar field
162
+ (`spur feature update <id> --field priority --value P1`), while status is lifecycle state
163
+ (`backlog → active → verifying → blocked → done → cancelled`). Do not conflate the two.
164
+
165
+ **Structure first:** [features/hierarchy-mece.md](features/hierarchy-mece.md) (MECE roots, when to
166
+ extend vs create). **Then priority:** [features/roadmap-priority.md](features/roadmap-priority.md).
167
+
168
+ For roadmap adjustment, apply the RICE/MoSCoW and strategy guidance from `sp:spur-dev`'s product
169
+ planning reference, then apply accepted deterministic changes through `spur feature update`,
170
+ `spur feature move`, `spur feature refresh`, and `spur feature check`.
171
+
172
+ ## The gate — `check --json`
173
+
174
+ ```bash
175
+ spur feature check H2 --json # one feature
176
+ spur feature check --json # whole tree
177
+ spur feature check --strict --json # warnings → failures
178
+ ```
179
+
180
+ The 4-layer validator (frontmatter, AC syntax, children-limit/structure, L4 traceability) emits its
181
+ verdict and findings as JSON. **Query this, don't re-derive it** — the rules live in the CLI, never
182
+ restated as prose here. This is what `sp:spur-dev`'s feature-check gate loop runs.
183
+
184
+ ## Status sync - `sync`
185
+
186
+ `spur feature sync` keeps a feature's **lifecycle status** honest against the states of its linked
187
+ tasks — if all tasks are `done`, the feature should advance to `done`; if tasks reopen, the feature
188
+ reopens. It computes a proposal (`from → to` with a `reason`) and, unless `--dry-run`, applies it
189
+ via real lifecycle transitions (dogfood / one-active-goal / L4 gates may deny a hop).
190
+
191
+ **Not for roster tables.** A stale `## Tasks` line (e.g. task still listed `todo` after it is `done`)
192
+ is fixed with `spur feature refresh`, not `sync`. Use `sync --dry-run` first when you only want to
193
+ see the proposed status hop.
194
+
195
+ ```bash
196
+ spur feature sync H2 --json # one feature
197
+ spur feature sync H2 --dry-run --json # propose only, no write
198
+ spur feature sync --all --json # every feature with linked tasks
199
+ spur feature sync H2 --force # apply a reopen proposal without confirmation
200
+ spur feature sync H2 --folder docs/custom-tasks --json # non-default tasks folder
201
+ ```
202
+
203
+ - **`[id]`** syncs one feature; **`--all`** syncs every feature with linked tasks. One of the two is
204
+ required - exit `2` if neither is given.
205
+ - **`--dry-run`** reports proposed transitions without applying. **`--force`** applies a *reopen*
206
+ proposal (status moving backward) without interactive confirmation.
207
+ - **`--json`** single-feature emits `{ proposal, applied, appliedHops[] }`; `--all` emits
208
+ `{ totalFeatures, evaluated, updatedCount, results[] }` where each result is the single-feature
209
+ shape. `proposal` is
210
+ `{ featureId, from, to, reason, requiresConfirm?, gateBlocked?, gateFindings?, hops? }`.
211
+ - **Exit codes:** `0` success (including NOOP), `1` error, `2` invalid usage (no id and no `--all`).
212
+
213
+ ## What this skill is NOT
214
+
215
+ - **Not the planning loop.** Intake → create → AC generation → check-loop → decomposition →
216
+ batch-create is `sp:spur-dev`'s planning half (R3).
217
+ - **Not validation logic.** This skill says *run `check`*; the layers it enforces are CLI code.
218
+ - **Not tasks.** Task verbs, the WBS lifecycle, and section editing live in **`spur task` (see [tasks.md](tasks.md))**.
219
+
220
+ ## References
221
+
222
+ | Reference | Covers |
223
+ | --------- | ------ |
224
+ | [features/verbs.md](features/verbs.md) | Per-verb flag detail, JSON shapes, the 4 check layers |
225
+ | [features/acceptance-criteria.md](features/acceptance-criteria.md) | Gherkin template, R-numbering, `@core`/`@edge`, traceability mechanics |
226
+ | [features/hierarchy-mece.md](features/hierarchy-mece.md) | MECE roots, create/extend/reparent/merge rules, root gate, depth limits |
227
+ | [features/roadmap-priority.md](features/roadmap-priority.md) | Roadmap hierarchy, priority/status conventions, and feature-tree adjustment workflow |
228
+
229
+ ## See also
230
+
231
+ - **`sp:spur-dev`** — orchestrates these verbs into the planning + execution loop. Use it to
232
+ *drive* planning; use this skill to *look up a verb* or *author AC*.
233
+ - **`spur task` (see [tasks.md](tasks.md))** — the companion for `spur task` (WBS lifecycle, section editing, the
234
+ readiness matrix).
@@ -0,0 +1,119 @@
1
+ ---
2
+ name: init
3
+ description: "spur-cli noun reference for `spur init` and `spur status`: CLI verbs (init scaffold with --name/--force/--minimal, status with --json) plus post-scaffold init validation for /sp:spur-init - Phase 1.5 functional-validation probes and Phase 1.6 rule-glob adaptation."
4
+ see_also:
5
+ - spur-cli
6
+ ---
7
+
8
+ # spur init / spur status - CLI verbs and post-scaffold validation
9
+
10
+ ## CLI verbs
11
+
12
+ | Verb | Purpose | Key flags |
13
+ | ---- | ------- | --------- |
14
+ | `init` | Scaffold a new Spur project in the current directory | `--name <name>` `--force` `--minimal` `--json` |
15
+ | `status [path]` | Show project and git status for a Spur project | `--json` |
16
+
17
+ ### `spur init` - scaffold a Spur project
18
+
19
+ ```bash
20
+ spur init # interactive: prompt for project name
21
+ spur init --name my-project # non-interactive
22
+ spur init --name my-project --force # overwrite existing .spur/ files
23
+ spur init --minimal # skip optional scaffolding (rules, workflows)
24
+ spur init --json # machine-readable
25
+ ```
26
+
27
+ Materializes the `.spur/` directory tree with config, docs, rules, and workflow templates. The
28
+ post-scaffold validation probes (Phase 1.5 / 1.6, below) run immediately after this verb completes.
29
+
30
+ #### Flags
31
+
32
+ | Flag | Purpose |
33
+ |------|---------|
34
+ | `--name <name>` | Project name (skips interactive prompt). |
35
+ | `--force` | Overwrite existing `.spur/` files. Without it, existing files are preserved. |
36
+ | `--minimal` | Skip optional scaffolding (rules presets, workflow templates). Core config + docs only. |
37
+ | `--json` | Output machine-readable JSON instead of interactive summary. |
38
+
39
+ ### `spur status [path]` - project and git status
40
+
41
+ ```bash
42
+ spur status # current directory
43
+ spur status /path/to/project # specific project
44
+ spur status --json # machine-readable
45
+ ```
46
+
47
+ Reports the project's Spur configuration state (init status, feature/task counts, rule preset
48
+ health) and git working-tree status. Optional `[path]` argument targets a different project
49
+ directory.
50
+
51
+ ## Post-scaffold validation
52
+
53
+ Two probes sit between the deterministic scaffold (`spur init`) and the non-deterministic doc
54
+ customization: Phase 1.5 (functional validation) confirms the fresh tree is immediately functional;
55
+ Phase 1.6 (rule glob adaptation) rewrites layout-dependent rule globs so `recommended-pre-check`
56
+ runs clean on this project's layout. The executing agent owns content *adaptation* only — `spur
57
+ init` owns *file materialization* (`04_DESIGN.md` §1.1 "Init ownership contract").
58
+
59
+ ### Phase 1.5 — Functional validation probe
60
+
61
+ Before any customization, confirm the fresh scaffold is immediately functional. If any probe
62
+ fails, STOP and report the gap rather than papering over it with customization:
63
+
64
+ ```
65
+ spur status
66
+ spur task create "__probe__" --template standard # confirms task template + matrix resolve
67
+ spur workflow validate .spur/workflows/task-pipeline.yaml
68
+ ```
69
+
70
+ ### Phase 1.6 — Rule glob adaptation (LLM-as-judge)
71
+
72
+ The bundled `recommended-pre-check` preset ships globs calibrated to Spur's own monorepo
73
+ (`apps/**/*.ts`, `packages/**/*.ts`, `scripts/**/*.ts`). On any other layout these match zero
74
+ files, and `rg` exits 2 ("No files were searched") — surfacing as `kind: "error"` findings that
75
+ obscure real violations. Rather than ship a broken probe, **you (the executing agent) ARE the
76
+ LLM-as-judge**: inspect the project tree and rewrite layout-dependent globs to match reality.
77
+
78
+ **You are NOT creating scaffold files.** Adapted rule files under `.spur/rules/<category>/` are
79
+ customization overlays — the local layer shadows the bundled layer (first-layer-wins by relative
80
+ path, `04_DESIGN.md` §1.1). This is content adaptation of rule globs, exactly analogous to the
81
+ doc edits in Phase 2, not file materialization.
82
+
83
+ Steps:
84
+
85
+ 1. **Detect layout.** Inspect top-level dirs + manifest files to classify the project:
86
+ - Monorepo (Bun workspaces / npm workspaces / pnpm): `apps/` + `packages/` present, or
87
+ `package.json` has a non-empty `workspaces` field.
88
+ - Single-package TS/JS: `src/`, `test/` or `tests/`, single `package.json`, no workspaces.
89
+ - Flat script repo: `.ts`/`.js` files at root or one shallow dir, no `src/`.
90
+ - Polyglot / non-TS (Python/Go/Rust primary): primary source lives under non-TS globs;
91
+ TS rules become correct no-ops and need no adaptation (skip to step 5).
92
+
93
+ 2. **Read the resolved preset.** `spur rule list --preset recommended-pre-check --json` returns
94
+ the category → rule-file map with resolved paths (bundled vs. global vs. local).
95
+
96
+ 3. **For each category** (`typescript`, `structure`, `boundary`, `surface`, `ui`), read the
97
+ resolved rule file and identify layout-dependent `include` globs. The Spur-monorepo anchors
98
+ that almost always need rewriting:
99
+ - `apps/**/*.ts`, `packages/**/*.ts`, `scripts/**/*.ts` → project's actual TS source roots
100
+ - `apps/**/*.test.ts`, `packages/**/*.test.ts` → project's actual test roots
101
+ - `apps/*/package.json`, `packages/*/package.json` → workspace manifests (or root `package.json`)
102
+ - `apps/web/src/**`, `apps/server/src/**` → single web/server entry roots
103
+
104
+ 4. **Write adapted overrides.** For each rule file with layout-dependent globs, copy the bundled
105
+ content to `.spur/rules/<category>/<rule-file>.yaml`, then rewrite only the layout-dependent
106
+ globs to match the detected roots. Preserve all non-layout globs (`**/*.ts`, `**/node_modules/**`,
107
+ `.spur/rules/**`), rule `id`s, evaluators, and severities verbatim. Write via the `Write` tool.
108
+
109
+ 5. **Verify the adaptation.** Re-run the probe that motivated this phase:
110
+ ```
111
+ spur rule run --preset recommended-pre-check --json
112
+ ```
113
+ Acceptance: **zero findings with `kind: "error"`**. Genuine violations surface as
114
+ `kind: "violation"` and are expected on a real codebase — they are NOT adaptation failures.
115
+ If `kind: "error"` findings remain, their globs still mismatch; re-read those rule files and
116
+ widen the adapted globs. Idempotency: if `.spur/rules/<category>/` already holds hand-tuned
117
+ overrides for a rule (differs from the bundled content), skip re-adapting that rule.
118
+
119
+ Phase 2 customization proceeds only after this probe is clean.
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: spur-cli-message
3
+ description: "spur-cli noun reference: operate `spur message` as the durable inter-agent messaging surface - send, inbox, reply, and watch. The inbox that `spur agent run --drain` and `spur agent loop` consume."
4
+ see_also:
5
+ - spur-cli
6
+ ---
7
+
8
+ # spur message - durable inter-agent messaging
9
+
10
+ `spur message` is the CLI for **durable inter-agent messages**. Messages are persisted (not
11
+ ephemeral), so an agent can drain its inbox on the next `run --drain` or `loop` iteration even if it
12
+ was offline when the message was sent. This is the inbox surface that `spur agent run --drain` and
13
+ `spur agent loop` consume.
14
+
15
+ This is a **companion reference**, not an orchestrator. It documents *what each verb is and how to
16
+ use it well*.
17
+
18
+ ## Verb map
19
+
20
+ | Verb | Purpose | Key flags |
21
+ | ---- | ------- | --------- |
22
+ | `send <body>` | Enqueue a message for an agent | `--to <id>` `--from <id>` `--json` |
23
+ | `inbox` | List messages addressed to an agent | `--agent <id>` `--json` |
24
+ | `reply <msg-id> <body>` | Thread a reply to a message | `--json` |
25
+ | `watch` | Follow an agent inbox - surface new messages as they arrive | `--agent <id>` `--interval <ms>` `--json` |
26
+
27
+ All verbs accept `--json` for machine consumption. **Exit codes:** `0` success, `1` error, `2`
28
+ invalid usage.
29
+
30
+ ## `send` - enqueue a message
31
+
32
+ ```bash
33
+ spur message send "Please review PR 42" --to reviewer
34
+ spur message send "Task 0040 is blocked" --to worker-1 --from operator
35
+ spur message send "Done" --to planner --json
36
+ ```
37
+
38
+ Enqueues a durable message addressed to `--to <id>`. The recipient drains it on its next `agent run
39
+ --drain` or `agent loop` iteration. `--from` defaults to `operator`.
40
+
41
+ ### Flags
42
+
43
+ | Flag | Purpose |
44
+ |------|---------|
45
+ | `--to <id>` | **Required.** Recipient agent id. |
46
+ | `--from <id>` | Sender id (default: `operator`). |
47
+ | `--json` | Output machine-readable JSON. |
48
+
49
+ ## `inbox` - list addressed messages
50
+
51
+ ```bash
52
+ spur message inbox --agent worker-1
53
+ spur message inbox --agent worker-1 --json
54
+ ```
55
+
56
+ Lists messages addressed to `--agent <id>`, oldest first. The body is truncated in plain-text output;
57
+ `--json` returns the full body.
58
+
59
+ ## `reply` - thread a reply
60
+
61
+ ```bash
62
+ spur message reply msg-003 "Acknowledged - starting now"
63
+ spur message reply msg-003 "Done" --json
64
+ ```
65
+
66
+ Threads a reply to a specific message id. The reply is addressable to the original sender's inbox.
67
+
68
+ ## `watch` - follow an inbox live
69
+
70
+ ```bash
71
+ spur message watch --agent worker-1
72
+ spur message watch --agent worker-1 --interval 1000 --json
73
+ ```
74
+
75
+ Polls the inbox and surfaces each **new** message exactly once as it arrives. `Ctrl-C` to exit. With
76
+ `--json`, emits one JSON object per new message (machine-consumable); without it, prints plain-text
77
+ lines.
78
+
79
+ ### Flags
80
+
81
+ | Flag | Purpose |
82
+ |------|---------|
83
+ | `--agent <id>` | **Required.** Agent id to watch. |
84
+ | `--interval <ms>` | Poll interval in milliseconds (default: `2000`). Must be a positive integer; exit `2` otherwise. |
85
+ | `--json` | Output one JSON object per new message. |
86
+
87
+ ## What this skill is NOT
88
+
89
+ - **Not the agent runner.** `spur agent run --drain` and `spur agent loop` consume the inbox; this
90
+ reference documents the verbs that *populate* it. See **[agent.md](agent.md)**.
91
+ - **Not real-time transport.** Messages are durable and polled, not pushed. `watch` simulates
92
+ real-time by polling on an interval.
93
+
94
+ ## See also
95
+
96
+ - **`spur agent` (see [agent.md](agent.md))** - `run --drain` and `loop` consume the inbox.
97
+ - **`spur team` (see [team.md](team.md))** - team lifecycle that assigns agents to tasks.
98
+ - **`sp:spur-cli`** SKILL.md - the facade that routes to this reference.