@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.
Files changed (69) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/config.example.yaml +9 -0
  3. package/config/rules/strict/runtime-boundaries.yaml +1 -0
  4. package/config/workflows/idea-pipeline.yaml +17 -0
  5. package/config/workflows/task-pipeline.yaml +25 -0
  6. package/package.json +9 -9
  7. package/plugins/sp/README.md +2 -2
  8. package/plugins/sp/commands/dev-refine.md +25 -7
  9. package/plugins/sp/commands/dev-refineall.md +9 -6
  10. package/plugins/sp/lib/idea-handoff.generated.mjs +160 -152
  11. package/plugins/sp/plugin.json +1 -1
  12. package/plugins/sp/skills/spur-cli/references/agent.md +92 -9
  13. package/plugins/sp/skills/spur-dev/SKILL.md +33 -33
  14. package/plugins/sp/skills/spur-dev/references/dev-operations.md +81 -24
  15. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +6 -3
  16. package/plugins/sp/skills/spur-dev/references/planning-workflow.md +10 -6
  17. package/schemas/spur-config.schema.json +14 -2
  18. package/spur.js +1889 -465
  19. package/web/_astro/{BoardApp.yBBcFXWP.js → BoardApp.CDUcHlTJ.js} +67 -67
  20. package/web/_astro/BoardApp.CaCGU_uX.js +1 -0
  21. package/web/_astro/{TaskDetail.DqFJbRFc.js → TaskDetail.DwTmbQp5.js} +1 -1
  22. package/web/_astro/{arc.DL-BpHoi.js → arc.BzF71EFI.js} +1 -1
  23. package/web/_astro/{architectureDiagram-3BPJPVTR.9IdQYyDq.js → architectureDiagram-3BPJPVTR.jvdDahWM.js} +1 -1
  24. package/web/_astro/{blockDiagram-GPEHLZMM.BKsFCqTl.js → blockDiagram-GPEHLZMM.zSg4AmFD.js} +1 -1
  25. package/web/_astro/{c4Diagram-AAUBKEIU.DhwI0dh1.js → c4Diagram-AAUBKEIU.BkUIUQWH.js} +1 -1
  26. package/web/_astro/channel.SSVY0JPQ.js +1 -0
  27. package/web/_astro/{chunk-2J33WTMH.B3QVmQ9S.js → chunk-2J33WTMH.DvfQ_f50.js} +1 -1
  28. package/web/_astro/{chunk-4BX2VUAB.DBSuqs9F.js → chunk-4BX2VUAB.DuI4gQqX.js} +1 -1
  29. package/web/_astro/{chunk-55IACEB6.BSYTWAYD.js → chunk-55IACEB6.D3BWBOpF.js} +1 -1
  30. package/web/_astro/{chunk-727SXJPM.cWVuxXfS.js → chunk-727SXJPM.3QSi0a9M.js} +1 -1
  31. package/web/_astro/{chunk-AQP2D5EJ.DpU_Ob3d.js → chunk-AQP2D5EJ.xazCQrAF.js} +1 -1
  32. package/web/_astro/{chunk-FMBD7UC4.BykFkyji.js → chunk-FMBD7UC4.B2g6u4rA.js} +1 -1
  33. package/web/_astro/{chunk-ND2GUHAM.DwgHlMdY.js → chunk-ND2GUHAM.wWwWs99t.js} +1 -1
  34. package/web/_astro/{chunk-QZHKN3VN.CusXUGWM.js → chunk-QZHKN3VN.BD5g3qa9.js} +1 -1
  35. package/web/_astro/{classDiagram-4FO5ZUOK.fx0ObzkN.js → classDiagram-4FO5ZUOK.C7CzCdsX.js} +1 -1
  36. package/web/_astro/{classDiagram-v2-Q7XG4LA2.fx0ObzkN.js → classDiagram-v2-Q7XG4LA2.C7CzCdsX.js} +1 -1
  37. package/web/_astro/{cose-bilkent-S5V4N54A.Z4HgOlsd.js → cose-bilkent-S5V4N54A.Xyiau0gw.js} +1 -1
  38. package/web/_astro/{cynefin-OW5HDTMX.B5dIZHJu.js → cynefin-OW5HDTMX.BeC5MWas.js} +1 -1
  39. package/web/_astro/{dagre-BM42HDAG.DT70Q_Yw.js → dagre-BM42HDAG.yZbMN9vc.js} +1 -1
  40. package/web/_astro/{diagram-2AECGRRQ.DqHA3XBF.js → diagram-2AECGRRQ.Cmo2zQM-.js} +1 -1
  41. package/web/_astro/{diagram-5GNKFQAL.BmCem957.js → diagram-5GNKFQAL.D033eSVi.js} +1 -1
  42. package/web/_astro/{diagram-KO2AKTUF.sn0-hrE0.js → diagram-KO2AKTUF.CR6k3Y3G.js} +1 -1
  43. package/web/_astro/{diagram-LMA3HP47.BSHe9tVc.js → diagram-LMA3HP47.x7mwu8jz.js} +1 -1
  44. package/web/_astro/{diagram-OG6HWLK6.DHIc-86k.js → diagram-OG6HWLK6.D8aTTvUr.js} +1 -1
  45. package/web/_astro/{erDiagram-TEJ5UH35.Bxayrs7v.js → erDiagram-TEJ5UH35.BoBqcKXQ.js} +1 -1
  46. package/web/_astro/{flowDiagram-I6XJVG4X.BkzoE_5I.js → flowDiagram-I6XJVG4X.D3mTQdrU.js} +1 -1
  47. package/web/_astro/{ganttDiagram-6RSMTGT7.okT6CvTo.js → ganttDiagram-6RSMTGT7.H-cqgIh-.js} +1 -1
  48. package/web/_astro/{gitGraphDiagram-PVQCEYII.CJuYbhC7.js → gitGraphDiagram-PVQCEYII.B6s9zbfC.js} +1 -1
  49. package/web/_astro/{infoDiagram-5YYISTIA.RqLy7nBo.js → infoDiagram-5YYISTIA.BzgCoV6P.js} +1 -1
  50. package/web/_astro/{ishikawaDiagram-YF4QCWOH.BwIcoagw.js → ishikawaDiagram-YF4QCWOH.BZzVhy1-.js} +1 -1
  51. package/web/_astro/{journeyDiagram-JHISSGLW.UB1VbWtH.js → journeyDiagram-JHISSGLW.BV3195Py.js} +1 -1
  52. package/web/_astro/{kanban-definition-UN3LZRKU.AaxMKpTk.js → kanban-definition-UN3LZRKU.BjRd2DWz.js} +1 -1
  53. package/web/_astro/{linear.Nv_xOUjP.js → linear.BILTgS5N.js} +1 -1
  54. package/web/_astro/{mermaid.core.Bc4LqQgX.js → mermaid.core.DBy_WKeW.js} +4 -4
  55. package/web/_astro/{mindmap-definition-RKZ34NQL.oKUvU_qi.js → mindmap-definition-RKZ34NQL.BiEjaI4-.js} +1 -1
  56. package/web/_astro/{pieDiagram-4H26LBE5.DQk0oo03.js → pieDiagram-4H26LBE5.i_8V5pIn.js} +1 -1
  57. package/web/_astro/{quadrantDiagram-W4KKPZXB.BdDjESDa.js → quadrantDiagram-W4KKPZXB.BWaW3MHn.js} +1 -1
  58. package/web/_astro/{requirementDiagram-4Y6WPE33.C2u9hUeH.js → requirementDiagram-4Y6WPE33.CzddBbtg.js} +1 -1
  59. package/web/_astro/{sankeyDiagram-5OEKKPKP.CDEoiJST.js → sankeyDiagram-5OEKKPKP.X2ww0e-D.js} +1 -1
  60. package/web/_astro/{sequenceDiagram-3UESZ5HK.D_hT_GAT.js → sequenceDiagram-3UESZ5HK.DSA4kTcc.js} +1 -1
  61. package/web/_astro/{stateDiagram-AJRCARHV.DI8RYG0b.js → stateDiagram-AJRCARHV.D0DtFSpR.js} +1 -1
  62. package/web/_astro/{stateDiagram-v2-BHNVJYJU.Bkxz4DnP.js → stateDiagram-v2-BHNVJYJU.BfQq0zQv.js} +1 -1
  63. package/web/_astro/{timeline-definition-PNZ67QCA.DSY-kH3-.js → timeline-definition-PNZ67QCA.Dmlrgi1m.js} +1 -1
  64. package/web/_astro/{vennDiagram-CIIHVFJN.CpaDtuGr.js → vennDiagram-CIIHVFJN.D5mpl00Z.js} +1 -1
  65. package/web/_astro/{wardleyDiagram-YWT4CUSO.DujQWvo8.js → wardleyDiagram-YWT4CUSO.Df4BdzO4.js} +1 -1
  66. package/web/_astro/{xychartDiagram-2RQKCTM6.DcM5Y4b9.js → xychartDiagram-2RQKCTM6.DiTRreKN.js} +1 -1
  67. package/web/index.html +1 -1
  68. package/web/_astro/BoardApp.CJiqp5pS.js +0 -1
  69. package/web/_astro/channel.CX5453qQ.js +0 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sp",
3
- "version": "0.3.87",
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`) and `pid=<n>` where a process exists. When `spur serve`
145
- is unreachable, the listing falls back to all `stopped` with a stderr warning. `--server <url>`
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), and ROLES lists
166
- candidate pipeline roles with `*` on the elected one. Exit `1` if any checked agent is not ready.
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: "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."
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 *orchestrating*, not by doing the work itself: it runs
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 *how to drive
43
- the lifecycle*; the competency skills know *how to do each job*; the CLI knows *what is valid*.
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 | 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` |
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 | 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) |
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
- path <wbs> --json` only when another tool needs the absolute path. Never search `docs/tasks*` or
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
- 1. **Requirements** — R-items are observable outcomes; explicit out-of-scope / non-goals; no
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. **Design** — WHAT / WHY / WHERE; **frozen names** (types, flags, vars, paths) **or** explicit
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. **Plan** — ordered checklist mappable to R-items; test/verification intent called out.
216
- 4. **Acceptance Criteria** — scenarios still match feature R-titles when `feature_id` is set;
217
- Given/When/Then still executable as a verify lens.
218
- 5. **Q&A / References** — open decisions closed or explicitly deferred with owner; links to ADR /
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. **Cross-task** — if `dependencies[]` exist, Design states what this task assumes from deps and
221
- what it must leave for dependents (no silent re-ownership of upstream contracts).
222
- 7. **Premise verification** — every factual claim in Background and Requirements that the Design
223
- depends on (a status, a file/table/location, an already-landed fix, a count) is checked against
224
- the **current tree** — read the file, run the query, grep the corpus. Contradictions are
225
- corrected in **this** refine (rewrite the claim, or re-point the design at ground truth), never
226
- deferred to the implementer. `--depth ready` exists so a downstream agent does not re-derive the
227
- analysis; a frozen design built on a false premise is the worst available outcome.
228
-
229
- Ready depth is for multi-package work, multi-agent implement handoffs, and costly pipeline
230
- failures — not for every small task. Default remains `standard`.
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`, or a reconstruction lens on `dev-reverse`.
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; rewrite sections until the bar is met |
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 and flaky-pipeline features where a wrong implement is costly.
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**, not the primary Design author:
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; avoid
348
- `--next` on large features (that chains each task into run).
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. See the `sp:dev-refine` skill for the full value table (`all`, `requirements`, `background`, `constraints`, `acceptance`, `quick`). Default `all`. |
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
- "type": "boolean",
171
- "description": "Routing kill-switch (111): a disabled profile never serves a role, team, stage, or explicit selection, and doctor inventories it without probing. Omitted = enabled; only true/false accepted (no string/number/null coercion)."
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
  }