@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,133 @@
1
+ ---
2
+ name: spur-cli
3
+ description: "The CLI facade for the `spur` command surface - one reference per noun (task/feature/rule/workflow/agent/message/team/init/status/serve): verbs, flags, `--json` shapes, exit codes, the CLI-gated write contract. NOT for driving the lifecycle (that is the spine, sp:spur-dev). Triggers: \"spur task\", \"spur feature\", \"spur rule\", \"spur workflow\", \"spur agent\", \"spur message\", \"spur team\", \"spur status\", \"spur init\", \"spur serve\", \"create a task\", \"task check\", \"batch-create\", or looking up any spur CLI verb or convention."
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: spur
7
+ version: "1.0"
8
+ platforms: "claude-code,codex,openclaw,opencode,antigravity"
9
+ interactions:
10
+ - reference
11
+ - companion
12
+ nouns:
13
+ - task
14
+ - feature
15
+ - rule
16
+ - workflow
17
+ - agent
18
+ - message
19
+ - team
20
+ - status
21
+ - init
22
+ - serve
23
+ openclaw:
24
+ emoji: "🧰"
25
+ ---
26
+
27
+ # spur-cli — the CLI facade for the Spur command surface
28
+
29
+ `spur-cli` is the single reference for operating the **`spur` command-line surface**. Each `spur`
30
+ noun (`task`, `feature`, `rule`, `workflow`, `agent`, `message`, `team`, `init`, `status`, `serve`) has one reference file that documents *what each verb
31
+ is, how to use it well, its flags, `--json` shapes, and exit codes*. This skill is a **facade /
32
+ dispatch reference** — it tells you which verb does what and routes you to the noun's detail. It is
33
+ **not** an orchestrator and contains **no competency logic**: the skill knows *how to invoke*; the
34
+ CLI knows *what is valid*; the **spine** (`sp:spur-dev`) knows *how to drive the lifecycle*.
35
+
36
+ ## Noun routing
37
+
38
+ Pick the noun, read its reference. Each Tier A and Tier B reference owns that noun's full verb catalog and conventions.
39
+
40
+ | Tier | Noun | Operate | Reference |
41
+ |------|------|---------|-----------|
42
+ | **Tier A** | **task** | Task corpus: create (variants), `deps` mutation, canonical `sections` (`init`/`add`/`list`), status lifecycle, `record`/`verdict` artifacts, `run-link`, `check --json` matrix | [references/tasks.md](references/tasks.md) |
43
+ | **Tier A** | **feature** | Feature tree: author with hierarchical IDs (DD-14), acceptance criteria (Gherkin), status lifecycle, move subtrees, `check --json` | [references/features.md](references/features.md) |
44
+ | **Tier A** | **rule** | Constraint quality gate: run presets, author rules, fine-tune, validate rule files/presets, extend engine | [references/rules.md](references/rules.md) |
45
+ | **Tier A** | **workflow** | Dual-mode workflow runtime: author state-machine / transition-flow workflows, validate, run, read traces | [references/workflows.md](references/workflows.md) |
46
+ | **Tier B** | **agent** | Coding-agent execution surface: run prompts via detected/named agents, manage team agent specs, persistent self-draining loop, readiness check | [references/agent.md](references/agent.md) |
47
+ | **Tier B** | **message** | Durable inter-agent messaging: send, inbox, reply, watch | [references/message.md](references/message.md) |
48
+ | **Tier B** | **team** | Team coordination and supervision: assign, status, up/down rosters, start/stop supervised processes | [references/team.md](references/team.md) |
49
+ | **Tier B** | **init** / **status** | Project scaffolding (`init`) + status overview; post-scaffold init validation probes & layout classification | [references/init.md](references/init.md) |
50
+ | **Tier B** | **serve** | Local web server fallback: Task Kanban + team supervisor API | [references/serve.md](references/serve.md) |
51
+ | **Tier C** | **history** / **migrate** / **projects** / **help** | Excluded while immature (see exclusion reasons below). Read `spur <noun> --help` as last resort | Last-resort `--help` |
52
+
53
+ **Execute-First Contract:** Load `sp:spur-cli` references first to execute Tier A and Tier B commands directly without calling `spur --help`. Use `spur <noun> --help` only as a last resort for Tier C nouns, version skew, unlisted long-tail flags, or parity assertion failures.
54
+
55
+ ### Tier C exclusion reasons
56
+
57
+ These nouns are intentionally undocumented - each has a concrete immaturity reason, not an oversight:
58
+
59
+ | Noun | Reason |
60
+ |------|--------|
61
+ | `history` | `report` verb is a TODO stub (`spur history report` prints a marker); surface is still converging. |
62
+ | `migrate` | Zero verbs - bare `spur migrate --json` runs schema migrations. No verb catalog to document. |
63
+ | `projects` | Multi-project management surface (`add`/`remove`/`list`/`start`/`stop`); still evolving and not yet stable enough for a reference. |
64
+ | `help` | Auto-generated by Commander.js; not a real noun. |
65
+
66
+ Each noun's per-topic detail lives one level deeper under `references/<noun>/` (e.g.
67
+ `references/tasks/verbs.md`, `references/tasks/section-editing.md`, `references/features/acceptance-criteria.md`,
68
+ `references/rules/operations.md`, `references/workflows/authoring-workflows.md`).
69
+
70
+ ## When to use
71
+
72
+ Use this skill to:
73
+
74
+ - **Look up a `spur` verb** — what it does, its flags, its `--json` shape, its exit codes.
75
+ - **Operate the corpus directly** — create/edit/list tasks and features, run a rule preset, validate
76
+ or run a workflow, from the command line.
77
+ - **Author within a noun** — write a rule, author a workflow, write acceptance criteria — following
78
+ the noun reference's conventions.
79
+
80
+ Do **not** use this skill for:
81
+
82
+ - **Driving the planning→execution lifecycle** — intake → feature → decomposition → batch-create →
83
+ pipeline run is the spine, **`sp:spur-dev`**. This facade documents the verbs that spine dispatches.
84
+ - **Gate-level constraint *design* across the catalog** — that lives in the `rule` reference's
85
+ authoring/fine-tuning topics, reached through this facade.
86
+
87
+ ## Convention — extending the facade
88
+
89
+ Every `spur` noun is reachable here and nowhere else. **Adding a new noun adds exactly one reference
90
+ file** (`references/<noun>.md`), plus an optional `references/<noun>/` subdir for its per-topic
91
+ detail, plus one row in the Noun-routing table above. Do not create a separate `spur-<noun>` skill —
92
+ the whole point of this facade is that the CLI surface has a single, scalable home.
93
+
94
+ ## What this skill is NOT
95
+
96
+ - **Not the spine.** Driving a task through `task-pipeline.yaml`, HITL surfacing, decomposition, and
97
+ the planning loop is `sp:spur-dev` (the spine). This facade is the verb reference the
98
+ spine and the operator both consult.
99
+ - **Not validation logic.** This skill says *run `check` / `validate`*; the rules those verbs enforce
100
+ live in the CLI (`task check`, `feature check`, `rule run`, `workflow validate`), never restated as
101
+ prose checks here.
102
+ - **Not a competency.** Design, implementation, testing, and review are competency skills, not CLI
103
+ verbs — they are not documented here.
104
+
105
+ ## See also
106
+
107
+ - **[references/agent.md](references/agent.md)** - coding-agent execution surface (`run`, `loop`,
108
+ spec management). Cross-references the
109
+ [dispatch-surface rule](../parallel-execution/references/dispatch-surface.md).
110
+ - **[references/message.md](references/message.md)** - durable inter-agent messaging (`send`,
111
+ `inbox`, `reply`, `watch`).
112
+ - **[references/team.md](references/team.md)** - team coordination and supervision (`assign`,
113
+ `status`, `up`/`down`, `start`/`stop`).
114
+ - **[references/serve.md](references/serve.md)** - local web server fallback (Task Kanban + team
115
+ supervisor API).
116
+ - **[references/init.md](references/init.md)** - `spur init` / `spur status` CLI verbs and
117
+ post-scaffold init validation (Phase 1.5/1.6 probes).
118
+ - **`sp:spur-dev`** - the spine that dispatches these verbs into the planning +
119
+ execution lifecycle. Use it to *drive* work; use this facade to *look up or operate a verb*.
120
+ - **`sp:expert-spur`** — the subagent that loads this facade for multi-step, multi-noun corpus work
121
+ in its own context window.
122
+
123
+ ## Platform Notes
124
+
125
+ ### Claude Code
126
+
127
+ `spur` CLI via the Bash tool; every verb supports `--json` for machine consumption. Invoke this skill
128
+ directly via `Skill(skill="sp:spur-cli", args="<noun> <verb> …")` to look up or operate a verb.
129
+
130
+ ### Codex / OpenClaw / OpenCode / Antigravity
131
+
132
+ Run the `spur` CLI via the Bash tool and parse `--json` output. This facade is the SSOT for the verb
133
+ surface; commands and subagents are thin wrappers over it.
@@ -0,0 +1,179 @@
1
+ ---
2
+ name: spur-cli-agent
3
+ description: "spur-cli noun reference: operate `spur agent` as the coding-agent execution surface - run prompts via detected or named agents, manage team agent specs, run the persistent self-draining loop, and check agent readiness. The concrete levers (--model, --agent) behind the dispatch-surface escalation rule."
4
+ see_also:
5
+ - spur-cli
6
+ ---
7
+
8
+ # spur agent - the coding-agent execution surface
9
+
10
+ `spur agent` is the CLI for **running and inspecting coding agents**. It wraps the agents the
11
+ operator already has installed (Claude Code, Codex, omp, OpenCode, Antigravity, etc.) behind a
12
+ uniform `run` / `loop` / `spec` surface, so the rest of the harness can dispatch work without
13
+ hard-coding a specific agent.
14
+
15
+ This is a **companion reference**, not an orchestrator. It documents *what each verb is and how to
16
+ use it well*. The decision of *when* to escalate from a native subagent to `spur agent run` is owned
17
+ by the **[dispatch-surface rule](../../parallel-execution/references/dispatch-surface.md)** - read
18
+ that before using `run` for fan-out dispatch.
19
+
20
+ ## Verb map
21
+
22
+ | Verb | Purpose | Key flags |
23
+ | ---- | ------- | --------- |
24
+ | `run <prompt>` | Execute a prompt or slash command via a coding agent | `--agent <name>` `--model <name>` `--mode <mode>` `--continue` `--cwd <path>` `--drain` `--json` |
25
+ | `loop` | Persistent self-draining inbox loop for a team member (supervisor-managed) | `--agent <id>` `--poll <ms>` |
26
+ | `list` | List detected coding agents, or team agent specs with `--specs` | `--specs` `--json` |
27
+ | `doctor [agent]` | Check agent readiness | `--json` |
28
+ | `create <id>` | Write a team agent spec to `.spur/agents/<id>.yaml` | `--type` `--tags` `--model` `--autonomy` `--system-prompt` `--name` `--workspace` `--purpose` `--auto-start` `--no-identity-preamble` `--json` |
29
+ | `edit <id>` | Open an agent spec in `$EDITOR`, or print its path | - |
30
+ | `delete <id>` | Remove an agent spec | `--force` |
31
+
32
+ All verbs accept `--json` for machine consumption. **Exit codes:** `0` success, `1` error, `2`
33
+ invalid usage.
34
+
35
+ ## `run` - execute a prompt via a coding agent
36
+
37
+ ```bash
38
+ spur agent run "Fix the login bug in src/auth/" --agent claude
39
+ spur agent run "verify on o3" --agent codex --model o3
40
+ spur agent run "/sp:dev-verify 0040" --agent omp --drain
41
+ ```
42
+
43
+ `run` is the verb the **dispatch-surface rule** escalates to. It executes a prompt (or slash command)
44
+ through a coding agent as an external process, producing a persisted run record under `.spur/run/`.
45
+
46
+ ### Flags
47
+
48
+ | Flag | Purpose |
49
+ |------|---------|
50
+ | `--agent <name>` | Agent name or `auto`. Selects which installed coding agent executes the prompt. |
51
+ | `--model <name>` | Agent model argument (e.g. `o3`, `sonnet`). Passed through to the agent's model flag. |
52
+ | `--mode <mode>` | Agent output mode: `text` or `json`. |
53
+ | `--continue` | Resume the previous agent session instead of starting fresh. |
54
+ | `--cwd <path>` | Working directory for agent execution (default: current directory). |
55
+ | `--drain` | Prepend pending inbox messages addressed to `--agent <id>` before the prompt. |
56
+ | `--json` | Output machine-readable JSON where supported. |
57
+
58
+ ### Dispatch-surface cross-reference
59
+
60
+ `--agent` and `--model` are the **concrete levers** behind dispatch-surface trigger 1 ("Different
61
+ model or coding agent required"). When a step needs a model or coding agent the host session cannot
62
+ provide, `spur agent run --agent <name> --model <name>` is the escalation path. See
63
+ **[dispatch-surface.md](../../parallel-execution/references/dispatch-surface.md)** for the full
64
+ trigger table and the naming requirement (state which trigger applied).
65
+
66
+ **Default:** use the native subagent (`Skill()` / `Task()`) when the host platform provides one.
67
+ `spur agent run` is the exception, not the default - it is justified only by one of the four
68
+ observable triggers (different model/agent, headless step, durable audit record, workspace
69
+ isolation).
70
+
71
+ ### Sandbox reliability note
72
+
73
+ `spur agent run` spawns the target agent as an external process. Under a sandboxed Bash session it
74
+ can fail when the external agent writes its own storage outside the sandbox's allowlist (e.g. omp's
75
+ `AgentStorage` SQLite DB). This is not a reason to abandon `spur agent run` - triggers 1-4 still
76
+ justify it - but ensure the run executes in a context that can write the target agent's storage.
77
+
78
+ ## `loop` - persistent self-draining wrapper
79
+
80
+ ```bash
81
+ spur agent loop --agent worker-1 --poll 2000
82
+ ```
83
+
84
+ `loop` is the **persistent self-draining wrapper** used by the team supervisor. It polls the
85
+ addressed agent's inbox, drains each pending message into an `agent run` invocation, and idles
86
+ between drains. It is not typically invoked directly by the operator - `spur team start` launches it
87
+ under supervision.
88
+
89
+ ### Flags
90
+
91
+ | Flag | Purpose |
92
+ |------|---------|
93
+ | `--agent <id>` | **Required.** Agent spec id / message recipient. |
94
+ | `--poll <ms>` | Idle poll interval in milliseconds (default: `2000`). |
95
+
96
+ The loop runs until `SIGINT` / `SIGTERM`. Each iteration: check inbox -> if messages, drain each
97
+ into `run` with `--drain` -> else sleep for `--poll` ms.
98
+
99
+ ## `list` - detected agents and team specs
100
+
101
+ ```bash
102
+ spur agent list # detected coding agents on this machine
103
+ spur agent list --specs # team agent specs under .spur/agents/
104
+ spur agent list --json # machine-readable
105
+ ```
106
+
107
+ Without `--specs`, lists coding agents detected on the host (by binary on `PATH`). With `--specs`,
108
+ lists team agent specs (`.spur/agents/*.yaml`).
109
+
110
+ ## `doctor` - readiness check
111
+
112
+ ```bash
113
+ spur agent doctor # all detected agents
114
+ spur agent doctor claude # one agent
115
+ spur agent doctor --json # machine-readable
116
+ ```
117
+
118
+ Checks whether each agent is installed and ready to run. Returns exit `1` if any checked agent is
119
+ not ready.
120
+
121
+ ## `create` - author a team agent spec
122
+
123
+ ```bash
124
+ spur agent create worker-1 --type claude --tags team:alpha --model sonnet
125
+ spur agent create reviewer --type codex --autonomy review --auto-start
126
+ ```
127
+
128
+ Writes a team agent spec to `.spur/agents/<id>.yaml`. The spec captures the agent's identity
129
+ (type, model, autonomy, system prompt, tags) so `spur team up` can materialize a roster and `spur
130
+ agent loop` can self-drain its inbox.
131
+
132
+ ### Flags
133
+
134
+ | Flag | Purpose |
135
+ |------|---------|
136
+ | `--type <agent-type>` | Agent spec type (e.g. `claude`, `codex`, `omp`). |
137
+ | `--tags <a,b>` | Comma-separated team identity tags (e.g. `team:alpha,role:worker`). |
138
+ | `--model <name>` | Agent model argument. |
139
+ | `--autonomy <level>` | Autonomy level (e.g. `full`, `review`). |
140
+ | `--system-prompt <text>` | Team identity system prompt. |
141
+ | `--name <name>` | Agent display name. |
142
+ | `--workspace <path>` | Workspace path for this agent. |
143
+ | `--purpose <text>` | Team identity purpose. |
144
+ | `--auto-start` | Auto-start flag (start on `team up` without manual `team start`). |
145
+ | `--no-identity-preamble` | Disable the identity preamble prepended to prompts. |
146
+ | `--json` | Output machine-readable JSON. |
147
+
148
+ ## `edit` - open a spec in `$EDITOR`
149
+
150
+ ```bash
151
+ spur agent edit worker-1
152
+ ```
153
+
154
+ Opens `.spur/agents/<id>.yaml` in `$EDITOR`. If `$EDITOR` is unset, prints the spec path instead.
155
+
156
+ ## `delete` - remove a spec
157
+
158
+ ```bash
159
+ spur agent delete worker-1 --force
160
+ ```
161
+
162
+ `--force` is required (guards against accidental deletion). Removes `.spur/agents/<id>.yaml`.
163
+
164
+ ## What this skill is NOT
165
+
166
+ - **Not the dispatch decision.** *When* to use `spur agent run` vs a native subagent is the
167
+ **[dispatch-surface rule](../../parallel-execution/references/dispatch-surface.md)**, not this
168
+ reference. This reference documents the verbs; that rule decides which surface carries a dispatch.
169
+ - **Not the team orchestrator.** `spur team up` / `spur team start` drive the supervisor lifecycle;
170
+ `spur agent` provides the execution primitives they compose.
171
+
172
+ ## See also
173
+
174
+ - **[dispatch-surface.md](../../parallel-execution/references/dispatch-surface.md)** - native
175
+ subagent vs `spur agent run` decision rule. `--model` and `--agent` are its escalation levers.
176
+ - **`spur team` (see [team.md](team.md))** - team lifecycle that launches `agent loop` under
177
+ supervision.
178
+ - **`spur message` (see [message.md](message.md))** - the inbox `--drain` reads from.
179
+ - **`sp:spur-cli`** SKILL.md - the facade that routes to this reference.
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: feature-acceptance-criteria
3
+ description: Gherkin template, R-numbering, @core/@edge tiers, and traceability mechanics for feature acceptance criteria.
4
+ see_also:
5
+ - spur-cli
6
+ ---
7
+
8
+ # Authoring acceptance criteria
9
+
10
+ AC lives in a feature's `## Acceptance Criteria` section. It is the contract `spur feature check`
11
+ validates (L3 syntax + L4 traceability) and the surface task decomposition maps against. Two
12
+ formats are accepted.
13
+
14
+ ## Gherkin (the default)
15
+
16
+ ```gherkin
17
+ Feature: Planning layer
18
+
19
+ @core
20
+ Scenario: R1 — User can create a task with required fields
21
+ Given a project with a tasks folder
22
+ When the user runs `spur task create "Add validation"`
23
+ Then a task file is written with a fresh WBS
24
+
25
+ @edge
26
+ Scenario: R2 — Task creation fails gracefully on a missing title
27
+ Given a project with a tasks folder
28
+ When the user runs `spur task create` with no title
29
+ Then the CLI exits non-zero with a clear message
30
+ ```
31
+
32
+ ## Checklist (lightweight alternative)
33
+
34
+ For features that don't warrant full Gherkin, a checklist is accepted:
35
+
36
+ ```markdown
37
+ - [ ] R1 — User can create a task with required fields
38
+ - [ ] R2 — Task creation fails gracefully on a missing title
39
+ ```
40
+
41
+ `check` validates whichever format is present. Prefer Gherkin once scenarios have concrete
42
+ given-when-then values; a checklist is fine for early, coarse AC.
43
+
44
+ ## R-numbering
45
+
46
+ Every scenario/item carries an `R1, R2, …` prefix:
47
+
48
+ - **Sequential within a feature**, starting at R1.
49
+ - **Stable forever.** Never renumber once tasks exist — tasks match AC by **normalized scenario
50
+ title** (the `R<n> —` prefix is stripped on comparison), so renumbering around a title is safe
51
+ but *rewording* a title breaks the coverage edge.
52
+ - **One R-number = one scenario.** Don't split one requirement across scenarios under a single
53
+ R-number; don't merge two requirements into one scenario.
54
+
55
+ ## Two tiers — `@core` / `@edge`
56
+
57
+ A planning convention (DD-06 "permissive start"), **not** a `check` gating feature today — the
58
+ validator treats all scenarios uniformly (syntax + traceability). Tags exist so decomposition and
59
+ future tiered gating can tell them apart:
60
+
61
+ - **`@core`** — must ship; covers a committed `## Scope (in)` item; maps to ≥ 1 task in decomposition.
62
+ - **`@edge`** — advisory error/boundary/degraded paths; may be deferred; need not map to a task
63
+ initially.
64
+
65
+ Full rationale and the relationship to decomposition live in `sp:spur-dev`'s AC style guide — this
66
+ reference is the *authoring* surface; that one is the *planning* surface.
67
+
68
+ ## Traceability mechanics (L4)
69
+
70
+ `check`'s L4 layer reads two things:
71
+
72
+ 1. **Incoming edges** — tasks whose frontmatter `feature-id` points at this feature. Create tasks
73
+ with `spur task create … --feature <id>` so the edge exists.
74
+ 2. **Coverage** — which scenarios are claimed by a task (matched on normalized title).
75
+
76
+ L4 flags:
77
+
78
+ - **Orphan scenarios** — AC with no covering task (a gap in decomposition).
79
+ - **Coverage orphans** — a task claims a scenario title that no longer exists (usually a reworded AC).
80
+ - **`verifying` readiness** — moving a feature to `verifying` requires its core AC to be covered.
81
+
82
+ Run `spur feature check <id> --json` before transitioning to `verifying` and clear these.
@@ -0,0 +1,177 @@
1
+ ---
2
+ name: feature-hierarchy-mece
3
+ description: >-
4
+ Explicit rules for creating new feature nodes or extending existing ones —
5
+ MECE roots, cautious root creation, reparent vs merge, depth limits.
6
+ Consumed by spur feature authoring, /sp:dev-plan, /sp:dev-idea, and
7
+ /sp:dev-featurechange.
8
+ see_also:
9
+ - spur-cli
10
+ - feature-verbs
11
+ - feature-roadmap-priority
12
+ - product-planning
13
+ ---
14
+
15
+ # Feature hierarchy: MECE roots and extension rules
16
+
17
+ This is the **normative checklist** before `spur feature create` or any restructure
18
+ (`/sp:dev-featurechange`, `spur feature move`). CLI enforces ID shape (DD-14) and
19
+ ≤9 children; **judgment** here keeps the tree neat for humans and agents.
20
+
21
+ ## Goals of a good tree
22
+
23
+ | Goal | Meaning |
24
+ | --- | --- |
25
+ | **MECE at each sibling set** | Mutually Exclusive, Collectively Exhaustive *for the parent’s Goal* — siblings don’t overlap, and together they cover the parent without a “misc” catch-all as a peer of real capabilities. |
26
+ | **Sparse roots** | Top-level letters (A, B, …) are **product capabilities or roadmap themes**, not every workstream. Prefer a child under an existing root over a new letter. |
27
+ | **Stable IDs** | Never hand-edit IDs. Use `spur feature create --parent` and `spur feature move`. |
28
+ | **Tasks hang on leaves (or near-leaves)** | Implementation work is `spur task` with `feature_id`; features stay *why / what-done-looks-like*. |
29
+
30
+ ---
31
+
32
+ ## Decision procedure: new work arrives
33
+
34
+ Run **in order**. Stop at the first yes.
35
+
36
+ ```text
37
+ 1. Does an existing feature Goal already own this outcome?
38
+ YES → extend that node (Scope / AC / tasks). Do NOT create a sibling root.
39
+ 2. Is this a deliverable slice of an existing capability?
40
+ YES → spur feature create "…" --parent <existing-id>
41
+ 3. Is this a UX/API/schema slice of an existing board or module feature?
42
+ YES → child (or grandchild) of that feature — never a new root letter.
43
+ 4. Is this only a technical package/endpoint/folder rename?
44
+ YES → prose in Notes / Architecture docs — NOT a feature node.
45
+ 5. Is this a new product capability or roadmap theme with no home?
46
+ YES → new root (letter) — only after the root gate below passes.
47
+ ```
48
+
49
+ **Default bias:** extend or reparent under an existing node. New roots are the exception.
50
+
51
+ ---
52
+
53
+ ## Root gate (new top-level letter)
54
+
55
+ A new root is allowed only if **all** hold:
56
+
57
+ 1. **Capability, not project.** Names a durable product surface or theme (e.g. Planning, Rules), not a sprint slogan or one PR.
58
+ 2. **No parent fits.** No existing root’s Goal can absorb it without lying about Scope.
59
+ 3. **MECE with peers.** It does not restate an existing root under a synonym (e.g. “Agent execution” vs “Agent integration” need *distinct* Goals, not two roots for “agents”).
60
+ 4. **Expected children.** You can name ≥1 real child slice or a clear multi-release arc; one-off work is a **task** or a **child**, not a root.
61
+ 5. **Operator confirm** when unsure — prefer AskUserQuestion / decision brief over inventing a letter.
62
+
63
+ If any check fails → **child of best parent** or **task under existing feature**.
64
+
65
+ ---
66
+
67
+ ## MECE rules (siblings under one parent)
68
+
69
+ | Rule | Do | Don’t |
70
+ | --- | --- | --- |
71
+ | **Mutually exclusive** | Sibling Goals partition the parent; overlap goes to one sibling or a shared parent Note. | Two siblings that both “own” the same board tab, CLI noun, or event stream. |
72
+ | **Collectively exhaustive** | Parent Scope is covered by children **or** parent-level AC/tasks when no further split is needed. | Parent with one child that is a full copy of the parent Goal. |
73
+ | **Same grain** | Siblings at one level are comparable slices (all “CLI surfaces”, all “board modules”). | Mixing “foundation epic”, “one CSS tweak”, and “whole platform” as siblings. |
74
+ | **No synonym roots** | One capability → one root; clarify with rename, not a second letter. | `Observability` + `Observabilities board` + `System Events redesign` as three roots. |
75
+ | **Done children stay** | Keep `done`/`cancelled` nodes for history; don’t promote their UX polish to new roots. | Spawning a new root for “table redesign of X” when X already has a feature. |
76
+
77
+ **Smell test:** If two root Goals can be true in the same sentence without “and also”, they may be the same capability.
78
+
79
+ ---
80
+
81
+ ## Extend vs create vs reparent vs merge
82
+
83
+ | Move | When | How |
84
+ | --- | --- | --- |
85
+ | **Extend in place** | Scope/AC grows; same Goal | Edit sections; add tasks with `--feature <id>` |
86
+ | **Create child** | New deliverable under clear parent | `spur feature create "…" --parent <id>` |
87
+ | **Reparent / move** | Node lives under wrong parent; Goal still valid | `spur feature move <id> --parent <new>` (cascade rename) |
88
+ | **Rename-only** | Goal OK; title misleading | Prefer `update --field name` if supported, or document + move only if ID depth must change |
89
+ | **Merge (absorb)** | Two nodes share one Goal; bodies should be one | Prefer: move children under survivor → fold Scope/AC into survivor → cancel or archive source. **Not** a casual `move`. Use mapping + `/sp:dev-featurechange` when batching. |
90
+ | **Archive** | Capability retired | `cancelled` or leave `done`; do not delete history |
91
+
92
+ ---
93
+
94
+ ## Depth and width limits
95
+
96
+ | Constraint | Guidance |
97
+ | --- | --- |
98
+ | **DD-14** | Letter root; one digit per level; ≤9 children per parent (`feature check` L3). |
99
+ | **Prefer depth ≤ 3** | Root → capability slice → delivery slice (e.g. `F` → `F8` → `F81`). Deeper only when each level has a distinct Goal. |
100
+ | **Prefer width ≤ 7** at a level | If you need 8–9 siblings, split themes or introduce an intermediate group feature. |
101
+ | **Group tags ≠ hierarchy** | `tags: [group]` marks a theme container; still use real parents for deliverables. Don’t invent roots only to “hold tags”. |
102
+
103
+ ---
104
+
105
+ ## Naming
106
+
107
+ - **Root:** short capability noun/phrase (`Planning`, `Rules`, `History`).
108
+ - **Child:** verb-able outcome under parent (`Feature management CLI`, `Task Kanban web parity`).
109
+ - **Avoid:** implementation nouns alone (`packages/app`, `drizzle migration`) unless the product *is* that infrastructure.
110
+ - **Avoid:** duplicate “agent / observability / plugin” stems across roots without a written boundary in each Goal.
111
+
112
+ ---
113
+
114
+ ## Positive and negative examples (Spur monorepo)
115
+
116
+ | Pattern | Example | Verdict |
117
+ | --- | --- | --- |
118
+ | Board module + UX slice as child | `F8` Features board → `F81` detail action group | **Good** — same product surface, finer grain |
119
+ | Restructure tooling under Feature CLI | `F3` Feature management CLI → `F31` restructure kit | **Good** — not a new root letter (was root `S`, moved) |
120
+ | Runner vs plugin integration | `B` Agent execution (`spur agent`) vs `H` Agent integration (`plugins/sp`) | **Keep separate** — Goals at `B_agent-execution.md:14` vs `H_agent-integration.md:14`; **reject merge on “agent” alone** |
121
+ | Observability UX as sibling roots | `J` board + `K` System Events table redesign + `L` payload enrichment | **Reparent K,L under J** — not body-merge; not peer roots (audit 0356) |
122
+ | Plugin epics as new letters | `N` dev-next UX, `O` token architecture as roots beside `H` | **Reparent under H** — same plugin plane, finer grain |
123
+ | Workflow observability as board root | `P` workflow run observability as peer of `D` Workflows | **Reparent under D** — object is `spur workflow run`, not board J |
124
+ | Planning validation as root | `Q` AC-verifiable gates as peer of `F` Planning | **Reparent under F** |
125
+ | Status feedback as root | `R` feature status loop as peer of `F` | **Reparent under F** (corpus status is planning) |
126
+ | CLI backbone vs board product | `G` Collaboration (message/team CLI) vs `M` Teams board | **Keep both** — different surfaces; do not merge |
127
+ | One-off polish as root | New letter for “fix button loading” | **Bad** — task under existing feature |
128
+ | Done historical epic as root | `I` sp plugin hands-off ready (`done`) | **Keep** as historical root OK; optional later neatness under H |
129
+
130
+ ### Audit 0356 snapshot (A–R dispositions)
131
+
132
+ Authoritative seed for restructure mapping lives in task 0356 Solution and
133
+ `docs/plans/feature-tree-restructure-map.md` (when written). Summary:
134
+
135
+ | Disposition | Roots |
136
+ | --- | --- |
137
+ | **keep** | A B C D E F G H I J M |
138
+ | **reparent-under:J** | K L |
139
+ | **reparent-under:H** | N O |
140
+ | **reparent-under:D** | P |
141
+ | **reparent-under:F** | Q (→F9; only free F digit) |
142
+ | **reparent-under:F8** | R (→F82; F full at 8/9 children — cannot place both Q and R under F) |
143
+ | **merge-into** | *(none)* |
144
+
145
+ **Rejected merges:** B∪H (name-only overlap); J∪K body-merge (use reparent for K/L).
146
+
147
+ ---
148
+
149
+ ## Checklist: before `spur feature create`
150
+
151
+ - [ ] Searched `spur feature list` / INDEX for an existing owner Goal.
152
+ - [ ] Chose **parent id** (or passed root gate with operator confirm).
153
+ - [ ] Sibling set stays MECE at that parent.
154
+ - [ ] Name is capability/outcome, not a package path.
155
+ - [ ] Will attach tasks with `--feature <new-id>` (or parent if intentionally epic-only).
156
+ - [ ] After create: `spur feature refresh` if INDEX must update; `spur feature check <id>`.
157
+
158
+ ## Checklist: before restructure / `/sp:dev-featurechange`
159
+
160
+ - [ ] Mapping file lists disposition per node (`keep` / `reparent-under` / `merge-into` / `rename-only` / `archive`).
161
+ - [ ] False merges rejected (name overlap ≠ one Goal).
162
+ - [ ] Apply via CLI (`spur feature move`, `spur task update --feature`), not raw ID edits.
163
+ - [ ] Dry-run reviewed; doc rewrites limited to agreed surface (e.g. root `docs/*.md`).
164
+ - [ ] `spur feature refresh` + `spur feature check` after apply.
165
+
166
+ ---
167
+
168
+ ## Where this is enforced
169
+
170
+ | Layer | Role |
171
+ | --- | --- |
172
+ | **This reference** | Agent/human judgment — MECE, root gate, merge vs reparent |
173
+ | **`spur feature create/move/check`** | Deterministic DD-14, children limit, lifecycle |
174
+ | **`/sp:dev-plan` / `/sp:dev-idea`** | Must run the decision procedure before allocate |
175
+ | **`/sp:dev-featurechange`** | Batch restructure against a mapping; must not invent roots |
176
+
177
+ Agents authoring features **must load this file** (via `sp:spur-cli` features references) before creating a root or proposing merges.
@@ -0,0 +1,84 @@
1
+ ---
2
+ name: feature-roadmap-priority
3
+ description: Roadmap hierarchy, priority/status conventions, and feature-tree adjustment guidance for spur feature.
4
+ see_also:
5
+ - spur-cli
6
+ - feature-verbs
7
+ - product-planning
8
+ ---
9
+
10
+ # Roadmap, Priority, And Status
11
+
12
+ `spur feature` is the feature-tree surface for roadmap structure. Use it to represent capability
13
+ hierarchy, lifecycle state, and priority. Keep PM scoring as prose or frontmatter scalar fields
14
+ until a deterministic schema is introduced.
15
+
16
+ ## Hierarchy
17
+
18
+ Feature hierarchy should be user-facing first:
19
+
20
+ - Top-level features are product capabilities or roadmap themes.
21
+ - Children are deliverable slices under that capability.
22
+ - Technical modules, package names, and endpoints belong in prose or notes, not as the primary tree
23
+ shape unless the product itself is developer-facing infrastructure.
24
+
25
+ **Normative create/extend rules (MECE, root gate, merge vs reparent):** see
26
+ [hierarchy-mece.md](hierarchy-mece.md). Load that file before `spur feature create` of a new root or
27
+ any bulk restructure. This section only states the product-facing intent; hierarchy-mece is the
28
+ checklist.
29
+
30
+ Use `spur feature move <id> --parent <id>` to restructure. Never hand-edit IDs; `move` cascade-renames
31
+ descendants and preserves the tree invariant.
32
+
33
+ ## Priority
34
+
35
+ Use the existing scalar field path for priority:
36
+
37
+ ```bash
38
+ spur feature update <id> --field priority --value P1
39
+ ```
40
+
41
+ Recommended meaning:
42
+
43
+ | Priority | Meaning |
44
+ | --- | --- |
45
+ | `P0` | Stop-the-line; current release or production health depends on it. |
46
+ | `P1` | High-value committed work. |
47
+ | `P2` | Important backlog item; sequence after committed work. |
48
+ | `P3` | Opportunistic or exploratory. |
49
+
50
+ When prioritizing many candidates, use the RICE or MoSCoW guidance from `sp:spur-dev`'s product
51
+ planning reference, then write only the chosen scalar priority/status through `spur feature update`.
52
+ Keep the scoring rationale in the feature body or linked planning notes; do not invent hidden
53
+ metadata fields.
54
+
55
+ ## Status
56
+
57
+ Feature statuses are lifecycle states, not priority buckets:
58
+
59
+ | Status | Use for |
60
+ | --- | --- |
61
+ | `backlog` | Accepted idea, not actively being built. |
62
+ | `active` | Current work target; `check` enforces one active goal. |
63
+ | `verifying` | Implementation is believed complete and AC traceability is being checked. |
64
+ | `blocked` | Progress stopped by an explicit dependency or decision. |
65
+ | `done` | Acceptance criteria are satisfied and verified. |
66
+ | `cancelled` | Explicitly cut; keep the record for traceability. |
67
+
68
+ Move status with `spur feature update <id> <status>` and let the lifecycle engine reject illegal
69
+ transitions.
70
+
71
+ ## Roadmap Adjustments
72
+
73
+ For roadmap adjustment work:
74
+
75
+ 1. List the candidate scope with `spur feature list --json` or a specific subtree with
76
+ `spur feature show <id> --json`.
77
+ 2. Apply the product-planning prioritization rubric in-session.
78
+ 3. Present the proposed moves/status/priority changes before mutating if the blast radius spans
79
+ multiple features.
80
+ 4. Apply each accepted deterministic change through `spur feature update` or `spur feature move`.
81
+ 5. Run `spur feature refresh` and `spur feature check --json`.
82
+
83
+ Do not add `/sp:prd-adjust` for this. The current CLI already has the deterministic primitives; the
84
+ PM value is the ranking and tradeoff judgment.