@gobing-ai/spur 0.3.87 → 0.3.88
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 +1 -1
- package/config/config.example.yaml +9 -0
- package/config/rules/strict/runtime-boundaries.yaml +1 -0
- package/config/workflows/idea-pipeline.yaml +17 -0
- package/config/workflows/task-pipeline.yaml +25 -0
- package/package.json +9 -9
- package/plugins/sp/README.md +2 -2
- package/plugins/sp/commands/dev-refine.md +25 -7
- package/plugins/sp/commands/dev-refineall.md +9 -6
- package/plugins/sp/lib/idea-handoff.generated.mjs +160 -152
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/skills/spur-cli/references/agent.md +92 -9
- package/plugins/sp/skills/spur-dev/SKILL.md +33 -33
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +81 -24
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +6 -3
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +10 -6
- package/schemas/spur-config.schema.json +14 -2
- package/spur.js +1889 -465
- package/web/_astro/{BoardApp.yBBcFXWP.js → BoardApp.CDUcHlTJ.js} +67 -67
- package/web/_astro/BoardApp.CaCGU_uX.js +1 -0
- package/web/_astro/{TaskDetail.DqFJbRFc.js → TaskDetail.DwTmbQp5.js} +1 -1
- package/web/_astro/{arc.DL-BpHoi.js → arc.BzF71EFI.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.9IdQYyDq.js → architectureDiagram-3BPJPVTR.jvdDahWM.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.BKsFCqTl.js → blockDiagram-GPEHLZMM.zSg4AmFD.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.DhwI0dh1.js → c4Diagram-AAUBKEIU.BkUIUQWH.js} +1 -1
- package/web/_astro/channel.SSVY0JPQ.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.B3QVmQ9S.js → chunk-2J33WTMH.DvfQ_f50.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.DBSuqs9F.js → chunk-4BX2VUAB.DuI4gQqX.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.BSYTWAYD.js → chunk-55IACEB6.D3BWBOpF.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.cWVuxXfS.js → chunk-727SXJPM.3QSi0a9M.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.DpU_Ob3d.js → chunk-AQP2D5EJ.xazCQrAF.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.BykFkyji.js → chunk-FMBD7UC4.B2g6u4rA.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.DwgHlMdY.js → chunk-ND2GUHAM.wWwWs99t.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.CusXUGWM.js → chunk-QZHKN3VN.BD5g3qa9.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.fx0ObzkN.js → classDiagram-4FO5ZUOK.C7CzCdsX.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.fx0ObzkN.js → classDiagram-v2-Q7XG4LA2.C7CzCdsX.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.Z4HgOlsd.js → cose-bilkent-S5V4N54A.Xyiau0gw.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.B5dIZHJu.js → cynefin-OW5HDTMX.BeC5MWas.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.DT70Q_Yw.js → dagre-BM42HDAG.yZbMN9vc.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.DqHA3XBF.js → diagram-2AECGRRQ.Cmo2zQM-.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.BmCem957.js → diagram-5GNKFQAL.D033eSVi.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.sn0-hrE0.js → diagram-KO2AKTUF.CR6k3Y3G.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.BSHe9tVc.js → diagram-LMA3HP47.x7mwu8jz.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.DHIc-86k.js → diagram-OG6HWLK6.D8aTTvUr.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.Bxayrs7v.js → erDiagram-TEJ5UH35.BoBqcKXQ.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.BkzoE_5I.js → flowDiagram-I6XJVG4X.D3mTQdrU.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.okT6CvTo.js → ganttDiagram-6RSMTGT7.H-cqgIh-.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.CJuYbhC7.js → gitGraphDiagram-PVQCEYII.B6s9zbfC.js} +1 -1
- package/web/_astro/{infoDiagram-5YYISTIA.RqLy7nBo.js → infoDiagram-5YYISTIA.BzgCoV6P.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.BwIcoagw.js → ishikawaDiagram-YF4QCWOH.BZzVhy1-.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.UB1VbWtH.js → journeyDiagram-JHISSGLW.BV3195Py.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.AaxMKpTk.js → kanban-definition-UN3LZRKU.BjRd2DWz.js} +1 -1
- package/web/_astro/{linear.Nv_xOUjP.js → linear.BILTgS5N.js} +1 -1
- package/web/_astro/{mermaid.core.Bc4LqQgX.js → mermaid.core.DBy_WKeW.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.oKUvU_qi.js → mindmap-definition-RKZ34NQL.BiEjaI4-.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.DQk0oo03.js → pieDiagram-4H26LBE5.i_8V5pIn.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.BdDjESDa.js → quadrantDiagram-W4KKPZXB.BWaW3MHn.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.C2u9hUeH.js → requirementDiagram-4Y6WPE33.CzddBbtg.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.CDEoiJST.js → sankeyDiagram-5OEKKPKP.X2ww0e-D.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.D_hT_GAT.js → sequenceDiagram-3UESZ5HK.DSA4kTcc.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.DI8RYG0b.js → stateDiagram-AJRCARHV.D0DtFSpR.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.Bkxz4DnP.js → stateDiagram-v2-BHNVJYJU.BfQq0zQv.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.DSY-kH3-.js → timeline-definition-PNZ67QCA.Dmlrgi1m.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.CpaDtuGr.js → vennDiagram-CIIHVFJN.D5mpl00Z.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.DujQWvo8.js → wardleyDiagram-YWT4CUSO.Df4BdzO4.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.DcM5Y4b9.js → xychartDiagram-2RQKCTM6.DiTRreKN.js} +1 -1
- package/web/index.html +1 -1
- package/web/_astro/BoardApp.CJiqp5pS.js +0 -1
- package/web/_astro/channel.CX5453qQ.js +0 -1
package/plugins/sp/plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.88",
|
|
4
4
|
"description": "Spur — a local-first harness engineering toolkit that wraps mainstream coding agents with constraint checking, workflow orchestration, and history analytics.",
|
|
5
5
|
"extensions": {
|
|
6
6
|
"pi": ["./hooks/pi/guard-extension.ts"]
|
|
@@ -23,12 +23,14 @@ that before using `run` for fan-out dispatch.
|
|
|
23
23
|
| ---- | ------- | --------- |
|
|
24
24
|
| `run <prompt>` | Execute a prompt or slash command via a coding agent | `--agent <name>` `--spec <id>` `--model <name>` `--mode <mode>` `--continue` `--cwd <path>` `--drain` `--json` |
|
|
25
25
|
| `wait [<specId>]` | Identity-pinned wait for an occupant run to reach a lifecycle state (G4 wave 2; `--role` selector per 0685) | `--role <name>` `--run <runId>` `--until <state>...` `--timeout <ms>` `--json` |
|
|
26
|
-
| `list` | List detected coding agents, or agent specs with `--specs` (live run status merged from `spur serve`) | `--specs` `--server <url>` `--json` |
|
|
26
|
+
| `list` | List detected coding agents, or agent specs with `--specs` (live run status + member session merged from `spur serve`) | `--specs` `--server <url>` `--json` |
|
|
27
|
+
| `status` | Agent specs with live process status and member session (requires `spur serve`) | `--server <url>` `--json` |
|
|
27
28
|
| `doctor [agent]` | Check agent readiness | `--json` `--probe-health` `--force-refresh` |
|
|
29
|
+
| `usage` | Run-once provider usage capture (codexbar) → quota-owned availability refresh; scheduled externally | `--dry-run` `--source <name>` `--json` |
|
|
28
30
|
| `start <spec-id>` | Start a supervised agent process (requires `spur serve`) | `--server <url>` `--json` |
|
|
29
31
|
| `stop <spec-id>` | Stop a supervised agent process (requires `spur serve`) | `--server <url>` `--json` |
|
|
30
32
|
|
|
31
|
-
`list`, `doctor`, `run`, `wait`, `start`, and `stop` accept `--json` plus `--json-envelope`. The hidden
|
|
33
|
+
`list`, `status`, `doctor`, `run`, `wait`, `start`, and `stop` accept `--json` plus `--json-envelope`. The hidden
|
|
32
34
|
`loop` is a supervisor-internal process surface. **Exit codes:** `0` success, `1` failure, and `2`
|
|
33
35
|
invalid usage; `run` can also propagate the invoked agent's non-zero result.
|
|
34
36
|
|
|
@@ -141,16 +143,30 @@ spur agent list --json # machine-readable
|
|
|
141
143
|
Without `--specs`, lists coding agents detected on the host (by binary on `PATH`). With `--specs`,
|
|
142
144
|
lists agent specs (`.spur/agents/*.yaml`) **with live run status merged from the server's
|
|
143
145
|
supervisor**: each row carries a trailing status column
|
|
144
|
-
(`running` / `stopped` / `errored` / `unknown`)
|
|
145
|
-
|
|
146
|
+
(`running` / `stopped` / `errored` / `unknown`), `pid=<n>` where a process exists, and the member
|
|
147
|
+
session (0897): the session mode plus a shortened resume id (`resume id=3f9c2a1d`), or `-` when the
|
|
148
|
+
member has no recorded session. When `spur serve` is unreachable, the listing falls back to all
|
|
149
|
+
`stopped` with a stderr warning. `--server <url>`
|
|
146
150
|
(default `http://localhost:3000/api`) targets the supervisor API.
|
|
147
151
|
|
|
148
152
|
```bash
|
|
149
153
|
spur agent list --specs
|
|
150
|
-
# planner claude reviewer claude plans the work running pid=4132
|
|
151
|
-
# worker-1 pi worker pi implements stopped
|
|
154
|
+
# planner claude reviewer claude plans the work running pid=4132 resume id=3f9c2a1d
|
|
155
|
+
# worker-1 pi worker pi implements stopped one-shot
|
|
152
156
|
```
|
|
153
157
|
|
|
158
|
+
## `status` - live status + member session per spec
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
spur agent status # id, type, status, pid, session — one row per spec
|
|
162
|
+
spur agent status --json # full objects, session carried whole ({ mode, id })
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Reads the same supervisor feed as `list --specs` (liveness **and** session come from
|
|
166
|
+
`GET /api/processes`; the served project's ledger is the source of the session state). An
|
|
167
|
+
unreachable server reports every spec `stopped` with no session. See
|
|
168
|
+
[Member sessions](#member-sessions-g66) for what the modes mean.
|
|
169
|
+
|
|
154
170
|
## `doctor` - readiness check
|
|
155
171
|
|
|
156
172
|
```bash
|
|
@@ -161,9 +177,21 @@ spur agent doctor --json # machine-readable (role selector: elected-first or
|
|
|
161
177
|
```
|
|
162
178
|
|
|
163
179
|
Checks whether each agent is installed and ready to run. Text mode renders a capability table —
|
|
164
|
-
`STATUS EXECUTOR AGENT MODEL TIER VERSION ROLES` where TIER is the executor's *capability* tier
|
|
165
|
-
(`cheap|standard|capable-*`), MODEL the pinned config model (`—` when undeclared),
|
|
166
|
-
candidate pipeline roles with `*` on the elected one
|
|
180
|
+
`STATUS EXECUTOR AGENT MODEL TIER VERSION CAPS ROLES OWNER SINCE REASON` where TIER is the executor's *capability* tier
|
|
181
|
+
(`cheap|standard|capable-*`), MODEL the pinned config model (`—` when undeclared), ROLES lists
|
|
182
|
+
candidate pipeline roles with `*` on the elected one, CAPS is the runner-declared session
|
|
183
|
+
capability for the underlying agent binary (`r`esume/`d`ir/`s`tdin/`o`utput as ✓/✗; `—` when the
|
|
184
|
+
binary is unknown to the runner; a trailing `⚠` when the detected version core differs from the
|
|
185
|
+
record's `verifiedAgainst` core — branding decorations are not drift, and a record/detection with
|
|
186
|
+
no version core (e.g. `unverified (CLI not installed)`) is unverifiable and never warns; a stale
|
|
187
|
+
executor also emits a `capability-declaration-stale` warning
|
|
188
|
+
on stderr in text mode), and OWNER/SINCE/REASON (0893) show availability provenance on `disabled`
|
|
189
|
+
rows — bare `disabled: true` renders owner `operator` with `—` since/reason; object-form disables
|
|
190
|
+
render their recorded values. A `usage:` footer reports the `agent usage` snapshot (`capturedAt
|
|
191
|
+
(age)`, `(stale)` past 6 h, or `usage: none` when the producer has never run). `--json` stays
|
|
192
|
+
stderr-clean and carries `capabilities`, `capabilityStale: {verifiedAgainst, detected}`, the
|
|
193
|
+
normalized `availability` object, and a top-level `usage` per agent row instead. Exit `1` if any
|
|
194
|
+
checked agent is not ready.
|
|
167
195
|
|
|
168
196
|
## `start` - start a supervised process
|
|
169
197
|
|
|
@@ -188,6 +216,61 @@ Posts to the supervisor API
|
|
|
188
216
|
(`POST /api/agents/:id/stop`) and prints `stopped <id>`. Same server requirement and flags as
|
|
189
217
|
`start`.
|
|
190
218
|
|
|
219
|
+
## `usage` - run-once provider usage capture (quota-owned availability refresh)
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
spur agent usage # capture, record quota observations, drain them
|
|
223
|
+
spur agent usage --dry-run # print would-be changes; write nothing
|
|
224
|
+
spur agent usage --json
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Runs `codexbar usage --format json --provider all` once, writes the snapshot to
|
|
228
|
+
`~/.config/spur/agent-usage.json` (`captured_at`, `source`, `providers[]`, `raw`), maps providers
|
|
229
|
+
to executors via `agent.executors[].agent` (or the model's `<provider>/` prefix), and records
|
|
230
|
+
`owner: quota` availability observations that the standard drain applies — the single availability
|
|
231
|
+
write path. A provider is exhausted when any `primary|secondary|tertiary` window reports
|
|
232
|
+
`usedPercent >= 100`; the window name and `resetsAt` go into the observation reason. Per-provider
|
|
233
|
+
`{ "error": … }` entries are skipped (listed, never treated as recovery); healthy entries still
|
|
234
|
+
apply. A missing codexbar binary or an unparsable payload exits `1` and changes nothing.
|
|
235
|
+
Unmapped providers are listed and never guessed.
|
|
236
|
+
|
|
237
|
+
**Scheduling is external** (cron/launchd, same pattern as `spur history daily`):
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# launchd/cron example — hourly
|
|
241
|
+
0 * * * * /opt/homebrew/bin/spur agent usage >> /tmp/spur-agent-usage.log 2>&1
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
`spur serve` never invokes the producer (asserted by a test, design R4).
|
|
245
|
+
|
|
246
|
+
### Flags
|
|
247
|
+
|
|
248
|
+
| Flag | Purpose |
|
|
249
|
+
| ---- | ------- |
|
|
250
|
+
| `--dry-run` | Print would-be changes (executor, from → to, owner, reason); write neither the snapshot nor any config |
|
|
251
|
+
| `--source <name>` | Usage source implementation; only `codexbar` exists (default) |
|
|
252
|
+
| `--json` | Machine-readable result payload |
|
|
253
|
+
|
|
254
|
+
## Member sessions (G66)
|
|
255
|
+
|
|
256
|
+
Every fleet member loop keeps ONE coding-agent session for its lifetime, in the warmest mode the
|
|
257
|
+
agent supports (`docs/design/session-pinned-dispatch.md` §6):
|
|
258
|
+
|
|
259
|
+
| Mode | Mechanism | `id` |
|
|
260
|
+
| ---- | --------- | ---- |
|
|
261
|
+
| `persistent` | One long-lived stdin process; each drained prompt is injected through `send()` | none — the live process IS the session |
|
|
262
|
+
| `resume` | Each drain re-opens the previous drain's session id | the resume id (rendered shortened) |
|
|
263
|
+
| `one-shot` | A fresh session per drain (one lifetime warning per member) | none |
|
|
264
|
+
|
|
265
|
+
A session **resets** (the ledger records a reason-named `fleet.member-session-reset` row) on:
|
|
266
|
+
`restart` — the persistent process exited and the supervisor's restart policy respawns it;
|
|
267
|
+
`operator` — `spur agent stop` / serve shutdown ended the loop; `failed-drains` — 3 consecutive
|
|
268
|
+
failed drains marked the session poisoned. The next drain opens a fresh session.
|
|
269
|
+
|
|
270
|
+
**No-redelivery invariant:** delivery state lives in the DB, session continuity is agent memory
|
|
271
|
+
only. A settled (delivered) inbox message is never redelivered — resuming a session or resetting
|
|
272
|
+
one never re-sends settled work; only never-started deliveries release and redeliver (0831/0834).
|
|
273
|
+
|
|
191
274
|
## What this skill is NOT
|
|
192
275
|
|
|
193
276
|
- **Not the dispatch decision.** *When* to use `spur agent run` vs a native subagent is the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spur-dev
|
|
3
|
-
description:
|
|
3
|
+
description: 'The thin orchestration spine for the planning→execution lifecycle: intake, feature-check/batch-create gates, the execution pipeline (precheck→implement→test→review→verify→record→done), HITL gating. Dispatches competency skills; never inlines them. Triggers: "run the pipeline", "drive this task", "plan a feature end to end", "continue the pipeline run", or operating the full lifecycle.'
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: spur
|
|
@@ -36,11 +36,11 @@ metadata:
|
|
|
36
36
|
# Spur Dev — The Orchestration Spine
|
|
37
37
|
|
|
38
38
|
`sp:spur-dev` is the **thin orchestration spine** that drives the full planning→execution lifecycle.
|
|
39
|
-
It converts vague intent into shipped work by
|
|
39
|
+
It converts vague intent into shipped work by _orchestrating_, not by doing the work itself: it runs
|
|
40
40
|
the gates (feature-check, batch-create) and the execution pipeline with human-in-the-loop control,
|
|
41
41
|
and **dispatches deep competency skills** for each unit of work — it never inlines them. Every write
|
|
42
|
-
to the corpus goes through a CLI verb that validates before writing — the spine knows
|
|
43
|
-
the
|
|
42
|
+
to the corpus goes through a CLI verb that validates before writing — the spine knows _how to drive
|
|
43
|
+
the lifecycle_; the competency skills know _how to do each job_; the CLI knows _what is valid_.
|
|
44
44
|
|
|
45
45
|
The skill was decomposed **by function** (ADR-028): design, decomposition, implementation, testing,
|
|
46
46
|
and verification each became a standalone competency skill, leaving this spine to orchestrate them.
|
|
@@ -51,14 +51,14 @@ status-transition verbs, are the facade's (`sp:spur-cli`), never this skill's.
|
|
|
51
51
|
|
|
52
52
|
**The competencies the spine dispatches:**
|
|
53
53
|
|
|
54
|
-
| Unit of work
|
|
55
|
-
|
|
|
56
|
-
| Design / ADR judgment (shape a task) | `sp:sys-architecture`
|
|
57
|
-
| Feature/spec → task batch
|
|
58
|
-
| Implement to spec
|
|
59
|
-
| Coverage / test extension
|
|
60
|
-
| Review (multi-dimensional)
|
|
61
|
-
| Test-first discipline (composed in)
|
|
54
|
+
| Unit of work | Competency skill |
|
|
55
|
+
| ------------------------------------ | ----------------------------------------------------------------------- |
|
|
56
|
+
| Design / ADR judgment (shape a task) | `sp:sys-architecture` |
|
|
57
|
+
| Feature/spec → task batch | `sp:spec-decomposition` |
|
|
58
|
+
| Implement to spec | `sp:code-implementation` |
|
|
59
|
+
| Coverage / test extension | `sp:code-testing` |
|
|
60
|
+
| Review (multi-dimensional) | `sp:code-verification` + `sp:functional-review` + `sp:code-improvement` |
|
|
61
|
+
| Test-first discipline (composed in) | `sp:test-driven-development` |
|
|
62
62
|
|
|
63
63
|
CLI verb usage for any `spur` noun lives in the `sp:spur-cli` facade. This spine owns only the
|
|
64
64
|
lifecycle, the gates, and the section-write contract (`cross-cutting.md`).
|
|
@@ -103,26 +103,26 @@ Host-session procedure: **[references/inline-pipeline-driver.md](references/inli
|
|
|
103
103
|
Each step delegates to a CLI verb and is documented in exactly one reference file. Read the
|
|
104
104
|
reference for the half you're operating; do not duplicate its content here.
|
|
105
105
|
|
|
106
|
-
| Step
|
|
107
|
-
|
|
|
108
|
-
| Intake
|
|
109
|
-
| Feature create + AC
|
|
110
|
-
| Feature check gate
|
|
111
|
-
| Decomposition (dispatch)
|
|
112
|
-
| Batch-create gate
|
|
113
|
-
| Design doc
|
|
114
|
-
| Refine
|
|
115
|
-
| Batch refine
|
|
116
|
-
| Task selection
|
|
117
|
-
| Pipeline run
|
|
118
|
-
| Implement (dispatch)
|
|
119
|
-
| Test (dispatch)
|
|
120
|
-
| Review / verify (dispatch) | execution | `sp:dev-review` → `sp:code-verification` + `sp:functional-review` + `sp:code-improvement` | competency skills — the spine dispatches, does not inline
|
|
121
|
-
| Operation catalog
|
|
122
|
-
| Continue
|
|
123
|
-
| Batch run
|
|
124
|
-
| Parallel fan-out
|
|
125
|
-
| All writes (both halves)
|
|
106
|
+
| Step | Half | CLI gate | Reference |
|
|
107
|
+
| -------------------------- | --------- | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
|
108
|
+
| Intake | planning | — (prompt work) | [planning-workflow.md](references/planning-workflow.md) · [product-planning.md](references/product-planning.md) |
|
|
109
|
+
| Feature create + AC | planning | `spur feature create` | [planning-workflow.md](references/planning-workflow.md) · [ac-style-guide.md](references/ac-style-guide.md) |
|
|
110
|
+
| Feature check gate | planning | `spur feature check` | [planning-workflow.md](references/planning-workflow.md) |
|
|
111
|
+
| Decomposition (dispatch) | planning | `task-batch.schema.json` | `sp:spec-decomposition` competency — the spine dispatches, does not inline |
|
|
112
|
+
| Batch-create gate | planning | `spur task batch-create` | [planning-workflow.md](references/planning-workflow.md) |
|
|
113
|
+
| Design doc | planning | — (prompt work; §4.5/T9) | [planning-workflow.md](references/planning-workflow.md) |
|
|
114
|
+
| Refine | planning | `spur task update --section` | [planning-workflow.md](references/planning-workflow.md) |
|
|
115
|
+
| Batch refine | planning | `sp:dev-refineall` → per-task `refine` | [dev-operations.md](references/dev-operations.md) § refineall · [planning-workflow.md](references/planning-workflow.md) |
|
|
116
|
+
| Task selection | execution | `spur task list` | [execution-workflow.md](references/execution-workflow.md) |
|
|
117
|
+
| Pipeline run | execution | inline YAML driver or `spur workflow run` | [execution-workflow.md](references/execution-workflow.md) · [inline-pipeline-driver.md](references/inline-pipeline-driver.md) |
|
|
118
|
+
| Implement (dispatch) | execution | `sp:code-implementation` | competency skill — the spine dispatches, does not inline |
|
|
119
|
+
| Test (dispatch) | execution | `sp:code-testing` | competency skill — the spine dispatches, does not inline |
|
|
120
|
+
| Review / verify (dispatch) | execution | `sp:dev-review` → `sp:code-verification` + `sp:functional-review` + `sp:code-improvement` | competency skills — the spine dispatches, does not inline |
|
|
121
|
+
| Operation catalog | execution | `sp:dev-*` operations | [dev-operations.md](references/dev-operations.md) (spine dispatch table) |
|
|
122
|
+
| Continue | execution | `spur feature update` / `refresh` | [execution-workflow.md](references/execution-workflow.md) |
|
|
123
|
+
| Batch run | execution | `sp:super-planner` + `spur workflow run` | [execution-batch.md](references/execution-batch.md) |
|
|
124
|
+
| Parallel fan-out | execution | `sp:parallel-execution` decision framework | [execution-batch.md](references/execution-batch.md) |
|
|
125
|
+
| All writes (both halves) | — | CLI-gated section editing | [cross-cutting.md](references/cross-cutting.md) · [section-batching.md](references/section-batching.md) (one-writer protocol, F92 0593) |
|
|
126
126
|
|
|
127
127
|
## When to use
|
|
128
128
|
|
|
@@ -180,7 +180,7 @@ CLI does.
|
|
|
180
180
|
section.
|
|
181
181
|
3. **Resolve task IDs through the CLI.** Read a known WBS with `spur task show <wbs> --json`; it
|
|
182
182
|
returns metadata, full content, and `filePath` across configured task folders. Use `spur task
|
|
183
|
-
|
|
183
|
+
path <wbs> --json` only when another tool needs the absolute path. Never search `docs/tasks*` or
|
|
184
184
|
guess `--folder`; reuse the first `show` response throughout the run.
|
|
185
185
|
4. **Check before every write.** Run `spur task check <wbs> --json` to know what sections
|
|
186
186
|
the task needs at its current status. Guessing produces matrix violations.
|
|
@@ -153,10 +153,23 @@ must not be changed without updating the backing skill.
|
|
|
153
153
|
|
|
154
154
|
### 5. refine
|
|
155
155
|
|
|
156
|
-
- **Purpose:** Refine a task's requirements via structured Q&A — clarify scope, elicit missing details, tighten acceptance criteria before execution. Optional **implement-ready** depth freezes Design/Requirements/Plan so another agent can implement without inventing design.
|
|
157
|
-
- **Inputs:** `<wbs>` (required). `--focus <mode>` narrows the gap analysis. `--depth <standard|ready>` (default **`standard`**) sets the depth bar — see [flag-glossary.md](flag-glossary.md#flag-depth). Execution defaults to inline (in-session); `--agent <inline|auto|name>` selector accepted (see [SSOT](cross-cutting.md#inline-default-execution-surface)). `--auto` skips interactive Q&A (synthesis only) and propagates down the `--next` chain. `--next`: advance to the next step — transition `backlog → todo` through the FSM **idempotently** (only when `status == backlog`; a task already at `todo` or past it skips the transition and chains anyway — `status >= todo` ⇒ already advanced) and invoke `/sp:dev-run <wbs> --mode implement --auto --next`. On a guard/refine failure, stop as review-pending.
|
|
156
|
+
- **Purpose:** Refine a task's requirements via structured Q&A — clarify scope, elicit missing details, tighten acceptance criteria before execution. Optional **implement-ready** depth freezes Design/Requirements/Plan so another agent can implement without inventing design, and is also the path for **evaluating and correcting an existing task** — a review-triage filing, a stale backlog capture, or any task whose claims and proposed fixes may no longer hold.
|
|
157
|
+
- **Inputs:** `<wbs>` (required). `--focus <mode>` narrows the gap analysis (values below). `--description <text>` injects operator framing into the Q&A/synthesis. `--depth <standard|ready>` (default **`standard`**) sets the depth bar — see [flag-glossary.md](flag-glossary.md#flag-depth). Execution defaults to inline (in-session); `--agent <inline|auto|name>` selector accepted (see [SSOT](cross-cutting.md#inline-default-execution-surface)). `--auto` skips interactive Q&A (synthesis only) and propagates down the `--next` chain. `--next`: advance to the next step — transition `backlog → todo` through the FSM **idempotently** (only when `status == backlog`; a task already at `todo` or past it skips the transition and chains anyway — `status >= todo` ⇒ already advanced) and invoke `/sp:dev-run <wbs> --mode implement --auto --next`. On a guard/refine failure, stop as review-pending.
|
|
158
|
+
- **Status scope:** refine targets `backlog`/`todo` tasks (the same rule `batch-preflight` applies to refineall). A task at `wip` or later has an implementation built on its current spec. Refine it only on an explicit operator request, never under `--auto` alone, and never move its status backwards.
|
|
159
|
+
- **`--focus` values** (hint bundles for the gap analysis/Q&A; default `all`):
|
|
160
|
+
|
|
161
|
+
| Value | Domain hints | When |
|
|
162
|
+
| --- | --- | --- |
|
|
163
|
+
| `all` | purpose, scope, constraints, dependencies, acceptance criteria, users, timeline | Complete refinement |
|
|
164
|
+
| `requirements` | purpose, scope, acceptance criteria | Standard refinement |
|
|
165
|
+
| `background` | purpose, scope | Thin tasks needing context |
|
|
166
|
+
| `constraints` | constraints, dependencies, timeline | Technical depth |
|
|
167
|
+
| `acceptance` | acceptance criteria, users | Verification focus |
|
|
168
|
+
| `quick` | scope, acceptance criteria | Fast pass |
|
|
169
|
+
|
|
170
|
+
Focus narrows what `--depth standard` looks at. Under `--depth ready` the full checklist still runs, and focus only orders the work.
|
|
158
171
|
- **Backing:** `sp:spur-dev` skill, `refine` operation. Q&A clarifications are presented as decision briefs per [decision-brief.md](decision-brief.md).
|
|
159
|
-
- **Behavior:** Read the task → elicit missing AC/Design/Plan through targeted Q&A (or auto-synthesis) → write each via `spur task update <wbs> --section <name> --from-file`. Done just-in-time, per task, immediately before execution. With `--next`: on success, transition status (idempotently — see Inputs) + chain to dev-run; on failure, stop and surface error.
|
|
172
|
+
- **Behavior:** Read the task → (ready depth) audit the existing content against the current tree → elicit missing or wrong Background/Requirements/AC/Design/Plan through targeted Q&A (or auto-synthesis) → write each via `spur task update <wbs> --section <name> --from-file`. Done just-in-time, per task, immediately before execution. With `--next`: on success, transition status (idempotently — see Inputs) + chain to dev-run; on failure, stop and surface error.
|
|
160
173
|
- **Pre-synthesis skip gate (under `--auto` + `--depth standard` only):** Before invoking synthesis, run `spur task check <wbs> --json`. Filter the findings to the **refine target sections** only:
|
|
161
174
|
`{Background, Requirements, Acceptance Criteria, Design, Plan}`.
|
|
162
175
|
These are the anti-drift surfaces: constraints + planning that cheaper implementers must follow.
|
|
@@ -206,28 +219,72 @@ must not be changed without updating the backing skill.
|
|
|
206
219
|
SKIP — sections already meet implement-ready checklist: depth=ready, sections-considered=[…]
|
|
207
220
|
```
|
|
208
221
|
|
|
209
|
-
**Implement-ready checklist (all must hold for allowed target sections)
|
|
210
|
-
|
|
222
|
+
**Implement-ready checklist (all must hold for allowed target sections).** Each item's `id` is
|
|
223
|
+
the `READY_CHECKLIST_IDS` value (`packages/app/src/services/task-readiness.ts`) that the
|
|
224
|
+
create-time ready preparation and the idea-pipeline ready-prepare stage also use:
|
|
225
|
+
1. **`requirements`** — R-items are observable outcomes; explicit out-of-scope / non-goals; no
|
|
211
226
|
ambiguous “wire it up” without a named seam or file area.
|
|
212
|
-
2.
|
|
227
|
+
2. **`design`** — WHAT / WHY / WHERE; **frozen names** (types, flags, vars, paths) **or** explicit
|
|
213
228
|
“no new API”; precedence / algorithm when behavior is non-obvious; **anti-patterns** (what not
|
|
214
229
|
to implement); primary file/package targets; handoff to dependent tasks (WBS) if any.
|
|
215
|
-
3.
|
|
216
|
-
4.
|
|
217
|
-
|
|
218
|
-
|
|
230
|
+
3. **`plan`** — ordered checklist mappable to R-items; test/verification intent called out.
|
|
231
|
+
4. **`ac`** — every scenario uses an [ac-style-guide.md](ac-style-guide.md) task-side form
|
|
232
|
+
(`- [ ] AC<n> — <title>` or `Scenario: AC<n> — <title>`, with `(req: R<n>)`). `spur task check`
|
|
233
|
+
parses only checkbox and `Scenario:` lines, so any other shape (a plain `- AC1 —` bullet, a bold
|
|
234
|
+
heading) silently escapes its AC checks. When `feature_id` is set, each AC
|
|
235
|
+
title matches a feature scenario title, unless the task is deliberately `ac_altitude:
|
|
236
|
+
task-local`. Given/When/Then stays executable as a verify lens.
|
|
237
|
+
5. **`decisions`** — Q&A open decisions closed or explicitly deferred with owner; links to ADR /
|
|
219
238
|
feature / upstream tasks present when the design depends on them.
|
|
220
|
-
6.
|
|
221
|
-
what it must leave for dependents (no silent re-ownership of upstream contracts).
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
the **current tree**
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
239
|
+
6. **`dependencies`** — if `dependencies[]` exist, Design states what this task assumes from deps
|
|
240
|
+
and what it must leave for dependents (no silent re-ownership of upstream contracts). A
|
|
241
|
+
dependency the Design relies on but `dependencies[]` lacks is added with `spur task deps`.
|
|
242
|
+
7. **`premises`** — every factual claim in Background, Requirements, Design and Plan is checked
|
|
243
|
+
against the **current tree** (read the file, run the query, grep the corpus), not only the gaps.
|
|
244
|
+
This is the **audit pass**; it matters most for a task written earlier or by another agent
|
|
245
|
+
(review-triage filings, stale backlog). Lenses:
|
|
246
|
+
- **Facts** — statuses, `file:line` references, type/field/flag names, counts, "already fixed"
|
|
247
|
+
or "not yet implemented" claims.
|
|
248
|
+
- **Sources** — a cited run, artifact, session or doc exists and says what the task claims. If
|
|
249
|
+
it is gone, say so and restate the claim from code.
|
|
250
|
+
- **Fix soundness** — each proposed fix holds for every caller and mode of the seam it touches,
|
|
251
|
+
does not break a currently valid path, and reuses an existing mechanism before adding one.
|
|
252
|
+
- **Test observability** — each AC names a test layer (and file) that can actually observe the
|
|
253
|
+
behavior. A test that mocks the collaborator carrying the behavior cannot.
|
|
254
|
+
- **Environment** — installed dependency versions match the lockfile and generated artifacts
|
|
255
|
+
are current. If not, the Plan gets a step-0 precondition.
|
|
256
|
+
- **Concurrency** — active worktrees or `wip` tasks touching the same files (`git worktree
|
|
257
|
+
list`, `spur task list --status wip --json`) are recorded in References/Design.
|
|
258
|
+
- **Scope** — the work is not already done, and not owned by another task.
|
|
259
|
+
|
|
260
|
+
Contradictions are corrected in **this** refine (rewrite the claim, or re-point the design at
|
|
261
|
+
ground truth), never deferred to the implementer. `--depth ready` exists so a downstream agent
|
|
262
|
+
does not re-derive the analysis; a frozen design built on a false premise is the worst
|
|
263
|
+
available outcome.
|
|
264
|
+
|
|
265
|
+
**Correction record.** When the audit changes a claim, append a dated block to Background —
|
|
266
|
+
`**Refine corrections (<YYYY-MM-DD>)**`, one line per correction: claim → verified reality →
|
|
267
|
+
resolution. Never delete an earlier block, so the next reader sees what changed and why. Scope
|
|
268
|
+
decisions made along the way also go into Q&A as closed decisions.
|
|
269
|
+
|
|
270
|
+
**Ready finalization.** Once every item holds:
|
|
271
|
+
1. Run `spur task check <wbs> --as todo --json`. Any error means the task is not ready. Fix it,
|
|
272
|
+
or report `failed`.
|
|
273
|
+
2. Fill metadata that is still unset: `spur task update <wbs> --priority <P0–P3>` and
|
|
274
|
+
`--estimate-hours <n>` (both `--json`). Never overwrite a value the operator set.
|
|
275
|
+
3. Promote `backlog → todo` idempotently with `spur task update <wbs> todo --json`, the same FSM
|
|
276
|
+
transition `--next` uses. Create-time ready preparation skips its own promotion when the task
|
|
277
|
+
is already `todo`, and next-router stops routing the task back to refine. Without `--next`,
|
|
278
|
+
refine does not chain into run.
|
|
279
|
+
4. Report the checklist as rows `{id, pass, evidence}`, one per id, in the markdown result and in
|
|
280
|
+
the `--json` object, alongside the corrections count and status before → after.
|
|
281
|
+
|
|
282
|
+
A decision refine cannot close under `--auto` makes the outcome `failed`. Report the concrete
|
|
283
|
+
question, and leave the task at `backlog`.
|
|
284
|
+
|
|
285
|
+
Ready depth is the canonical path for three jobs: the ready competency behind `spur task create`
|
|
286
|
+
(its recovery command), evaluating and correcting an existing task, and freezing multi-package or
|
|
287
|
+
multi-agent handoffs. It is not for every small task. Default remains `standard`.
|
|
231
288
|
|
|
232
289
|
- **SKIP short-circuits synthesis, not `--next`.** A SKIP means no synthesis was needed — it does **not** cancel the `--next` chain. Under `--auto --next`, a SKIP still flows into the (idempotent) status transition and the chained `/sp:dev-run --mode implement`. "`refine --auto --next` on a well-specified task" is therefore effectively "run the implement→verify chain"; an operator who wanted refinement only should drop `--next`.
|
|
233
290
|
- **Delegation:** `Skill(skill="sp:spur-dev", args="refine $ARGUMENTS")`
|
|
@@ -244,13 +301,13 @@ must not be changed without updating the backing skill.
|
|
|
244
301
|
1. Resolve + **freeze** the set at kickoff (never re-query membership mid-batch).
|
|
245
302
|
2. Apply `--status` filter (default `backlog` + `todo`; applied in-agent against the frozen set; `spur task list --status` takes exactly one canonical status per call — see `execution-batch.md` Step 1). Tasks already `done`/`cancelled`/`testing` are excluded unless the operator widens `--status`. Report each exclusion with reason.
|
|
246
303
|
3. Topo-sort by `dependencies[]` (Kahn, WBS-ascending tie-break). Cycle → abort entire batch before any refine. Out-of-set deps: `done` → allow; else → block subtree (same as runall).
|
|
247
|
-
4. For each WBS in order: invoke single-task refine with shared flags **including `--depth`**. Under `--auto` + **`--depth standard`** (default), the per-task **L3 pre-synthesis SKIP gate** still applies. Under **`--depth ready`**, each task runs the implement-ready checklist (no L3-only SKIP).
|
|
304
|
+
4. For each WBS in order: invoke single-task refine with shared flags **including `--depth`**. Under `--auto` + **`--depth standard`** (default), the per-task **L3 pre-synthesis SKIP gate** still applies. Under **`--depth ready`**, each task runs the implement-ready checklist (no L3-only SKIP). That includes the premises audit, the correction record and ready finalization, so a passing task leaves at `todo`.
|
|
248
305
|
5. Failure policy: **stop-the-batch** (default) or `--keep-going` (skip in-batch dependents of a failed refine; continue independents).
|
|
249
|
-
6. Emit a batch report (markdown or `--json`) that records `depth` once at the header.
|
|
306
|
+
6. Emit a batch report (markdown or `--json`) that records `depth` once at the header. Under `--depth ready`, each row also carries the corrections count, status before → after, and failed checklist ids.
|
|
250
307
|
- **Per-task outcome vocabulary:** `refined` (synthesis wrote sections) | `SKIP` (already meets the active depth bar under `--auto`) | `failed` | `skipped` (dep failed under `--keep-going`) | `not-attempted` (halted) | `blocked` (unmet out-of-set dep).
|
|
251
308
|
- **Batch verdict:** `clean` (all attempted tasks `refined` or `SKIP`) | `halted` (a failure stopped the batch) | `aborted` (cycle / unknown selector / empty set after filter).
|
|
252
309
|
- **`--next` is not accepted** (dropped by feature H8, 2026-07-31 — see `plugins/sp/commands/dev-refineall.md` for the removal record). Chain execution explicitly: refineall, then `/sp:dev-runall --feature <id>`.
|
|
253
|
-
- **`--auto` recommendation:** Batch refine without `--auto` requires per-task interactive Q&A and does not scale. Default operator path: `/sp:dev-refineall --feature <id> --auto`. For implement handoffs: `/sp:dev-refineall --feature <id> --auto --depth ready`.
|
|
310
|
+
- **`--auto` recommendation:** Batch refine without `--auto` requires per-task interactive Q&A and does not scale. Default operator path: `/sp:dev-refineall --feature <id> --auto`. For implement handoffs, or to re-audit a feature's filed tasks: `/sp:dev-refineall --feature <id> --auto --depth ready`.
|
|
254
311
|
- **Delegation:** `Skill(skill="sp:spur-dev", args="refineall $ARGUMENTS")` → per task `Skill(skill="sp:spur-dev", args="refine <wbs> $SHARED_FLAGS")` (shared flags include `--depth` when set).
|
|
255
312
|
|
|
256
313
|
### 6. plan
|
|
@@ -174,7 +174,8 @@ establishes a baseline with it before the first change and re-runs it after each
|
|
|
174
174
|
Constrain the operation to a named subset of dimensions — review dimensions on `dev-review`/
|
|
175
175
|
`dev-verify`/`dev-verifyall` (`all|stack|dependencies|data|flows|api|security|quality|performance`),
|
|
176
176
|
a refactor lens set on `dev-refactor` (`api|architect|tests|ui|auto`), a refine focus mode on
|
|
177
|
-
`dev-refine`/`dev-refineall
|
|
177
|
+
`dev-refine`/`dev-refineall` (`all|requirements|background|constraints|acceptance|quick` —
|
|
178
|
+
[dev-operations.md](dev-operations.md) § refine), or a reconstruction lens on `dev-reverse`.
|
|
178
179
|
Narrowing reduces token cost; omitting runs
|
|
179
180
|
all dimensions.
|
|
180
181
|
|
|
@@ -372,10 +373,12 @@ Orthogonal to `--focus` (which _narrows_ domains) and to `--mode` on other comma
|
|
|
372
373
|
| Value (refine family) | Bar | `--auto` SKIP behavior |
|
|
373
374
|
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
|
|
374
375
|
| `standard` (default when omitted) | L3 structural completeness (not empty/placeholder; check-clean for target sections) | **SKIP** when no L3 findings on target sections |
|
|
375
|
-
| `ready` | **Implement-ready** freeze: another agent can implement without inventing design (frozen names/APIs or explicit "no new API", anti-patterns, file targets, handoffs, out-of-scope) | **Do not SKIP** on L3-clean alone — run the ready checklist
|
|
376
|
+
| `ready` | **Implement-ready** freeze: another agent can implement without inventing design (frozen names/APIs or explicit "no new API", anti-patterns, file targets, handoffs, out-of-scope) | **Do not SKIP** on L3-clean alone — audit existing claims, run the ready checklist, rewrite sections until the bar is met, then promote `backlog → todo` |
|
|
376
377
|
|
|
377
378
|
Default for refine stays `standard` so ordinary `refineall --auto` remains cheap. Use `ready` for
|
|
378
|
-
multi-package / multi-agent handoffs
|
|
379
|
+
multi-package / multi-agent handoffs, flaky-pipeline features where a wrong implement is costly, and
|
|
380
|
+
evaluating/correcting an existing task (review-triage filing, stale backlog) whose claims may no
|
|
381
|
+
longer hold.
|
|
379
382
|
Full checklist: [dev-operations.md](dev-operations.md) § refine (depth ready).
|
|
380
383
|
|
|
381
384
|
### `--bdd` — use BDD scenarios as the verification lens
|
|
@@ -301,10 +301,12 @@ the handoff degrades to refineall.
|
|
|
301
301
|
(and preferably Plan/AC) so tasks land **content-ready**. **`--skip-design`:** leave `design`
|
|
302
302
|
empty — headings only.
|
|
303
303
|
|
|
304
|
-
**Refine is the fallback
|
|
304
|
+
**Refine is the fallback** Design author, not the primary one. It is also the audit path for
|
|
305
|
+
tasks that already have content:
|
|
305
306
|
|
|
306
307
|
```text
|
|
307
308
|
/sp:dev-refine <wbs> # single task — fills blank Design/AC/Plan if L3 gaps
|
|
309
|
+
/sp:dev-refine <wbs> --depth ready # evaluate + correct an existing/filed task, then promote to todo
|
|
308
310
|
/sp:dev-refineall --feature X --auto
|
|
309
311
|
/sp:dev-refineall --feature X --auto --depth ready # implement-ready freeze (no L3-only SKIP)
|
|
310
312
|
```
|
|
@@ -314,7 +316,9 @@ Under `--auto` + **`--depth standard`** (default), refine **SKIP**s when target
|
|
|
314
316
|
placeholder, synthesis runs (standard tier by default; escalates only on gate-fail). Under
|
|
315
317
|
**`--depth ready`**, do not SKIP on L3-clean alone — run the implement-ready checklist in
|
|
316
318
|
[dev-operations.md](dev-operations.md) § refine (frozen APIs, anti-patterns, file targets, handoffs)
|
|
317
|
-
so another agent can implement without inventing design.
|
|
319
|
+
so another agent can implement without inventing design. Ready depth also audits every existing
|
|
320
|
+
claim against the current tree, records corrections in Background, and promotes a passing task
|
|
321
|
+
`backlog → todo`.
|
|
318
322
|
|
|
319
323
|
**Check the variant before you write.** Which sections a task carries is decided by its `template:`
|
|
320
324
|
frontmatter against `.spur/tasks/section-matrix.yaml` — NOT a fixed list. Before authoring any
|
|
@@ -344,16 +348,16 @@ feature filled before a runall, use `/sp:dev-refineall --feature <id> --auto` (b
|
|
|
344
348
|
of `/sp:dev-refine`). It reuses the same per-task refine operation, freezes the set, topo-sorts by
|
|
345
349
|
`dependencies[]`, and emits a batch report — see [dev-operations.md](dev-operations.md) § refineall.
|
|
346
350
|
This does **not** replace just-in-time refine before each implement; it is a bulk pre-pass when the
|
|
347
|
-
feature's tasks are still `backlog`/`todo` placeholders. Prefer `--auto` for batch scale
|
|
348
|
-
|
|
351
|
+
feature's tasks are still `backlog`/`todo` placeholders. Prefer `--auto` for batch scale.
|
|
352
|
+
`/sp:dev-refineall` takes no `--next`; chain with `/sp:dev-runall --feature <id>` afterwards.
|
|
349
353
|
|
|
350
354
|
**Refine arguments** (defined on the `/sp:dev-refine` entry point, passed through verbatim; also
|
|
351
355
|
shared flags on `/sp:dev-refineall`):
|
|
352
356
|
|
|
353
357
|
| Argument | Effect |
|
|
354
358
|
|----------|--------|
|
|
355
|
-
| `--focus <mode>` | Narrows the gap analysis to a subset of domain hints.
|
|
356
|
-
| `--depth <standard\|ready>` | Spec depth bar. `standard` (default) = L3 structural completeness + L3 SKIP under `--auto`. `ready` = implement-ready freeze (never L3-only SKIP). See [flag-glossary.md](flag-glossary.md#flag-depth). |
|
|
359
|
+
| `--focus <mode>` | Narrows the gap analysis to a subset of domain hints. Values `all`, `requirements`, `background`, `constraints`, `acceptance`, `quick` — hint table in [dev-operations.md](dev-operations.md) § refine. Default `all`. Under `--depth ready` it only orders the work. |
|
|
360
|
+
| `--depth <standard\|ready>` | Spec depth bar. `standard` (default) = L3 structural completeness + L3 SKIP under `--auto`. `ready` = audit + implement-ready freeze + promote to `todo` (never L3-only SKIP). See [flag-glossary.md](flag-glossary.md#flag-depth). |
|
|
357
361
|
| `--auto` | Skip interactive Q&A — synthesize improvements from the task content alone. Use for well-scoped tasks where the agent can fill gaps without operator input. **Required for practical batch use** via `dev-refineall`. |
|
|
358
362
|
|
|
359
363
|
**Pre-synthesis skip gate (under `--auto` + `--depth standard`).** Before synthesizing, run `spur task check <wbs> --json`. When the **refine target sections** show no L3 findings, emit a structured SKIP instead of calling the synthesis agent. **Not applied when `--depth ready`.**
|
|
@@ -167,8 +167,20 @@
|
|
|
167
167
|
"description": "Capability tier for stage-registry adaptive model routing (ADR-033, 0343). Live values: cheap | standard | capable-1 | capable-2 | capable-3 (1=low output quality, 3=high within the capable band). A stage starts on the cheapest eligible executor meeting its model_policy min_tier. Bare legacy `capable` is accepted at runtime (zod preprocess \u2192 capable-1) during the deprecation window but is not part of this editor enum."
|
|
168
168
|
},
|
|
169
169
|
"disabled": {
|
|
170
|
-
"
|
|
171
|
-
"
|
|
170
|
+
"description": "Routing kill-switch (111; ownership widened 0890): a disabled profile never serves a role, team, stage, or explicit selection, and doctor inventories it without probing. Omitted = enabled. Bare `true` is operator-owned (only humans write booleans); automatic writers emit the object form carrying owner (operator|quota|probe), since (RFC 3339) and reason.",
|
|
171
|
+
"anyOf": [
|
|
172
|
+
{ "type": "boolean" },
|
|
173
|
+
{
|
|
174
|
+
"type": "object",
|
|
175
|
+
"additionalProperties": false,
|
|
176
|
+
"required": ["owner", "since", "reason"],
|
|
177
|
+
"properties": {
|
|
178
|
+
"owner": { "enum": ["operator", "quota", "probe"] },
|
|
179
|
+
"since": { "type": "string", "format": "date-time", "minLength": 1 },
|
|
180
|
+
"reason": { "type": "string", "minLength": 1 }
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
]
|
|
172
184
|
}
|
|
173
185
|
}
|
|
174
186
|
}
|