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