@gobing-ai/spur 0.3.42 → 0.3.44

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 (79) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/templates/AGENTS.md +5 -0
  3. package/config/workflows/idea-pipeline.yaml +205 -33
  4. package/config/workflows/task-pipeline.yaml +11 -1
  5. package/package.json +9 -9
  6. package/plugins/sp/commands/dev-run.md +3 -3
  7. package/plugins/sp/commands/dev-runall.md +9 -4
  8. package/plugins/sp/commands/dev-wrap.md +21 -3
  9. package/plugins/sp/commands/dev-wrapall.md +21 -3
  10. package/plugins/sp/plugin.json +1 -1
  11. package/plugins/sp/skills/code-implementation/SKILL.md +27 -0
  12. package/plugins/sp/skills/issue-finding/SKILL.md +21 -3
  13. package/plugins/sp/skills/issue-finding/references/session-formats.md +30 -0
  14. package/plugins/sp/skills/next-router/references/routing-table.md +2 -2
  15. package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +9 -0
  16. package/plugins/sp/skills/spur-cli/SKILL.md +3 -0
  17. package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +8 -3
  18. package/plugins/sp/skills/spur-cli/references/tasks.md +25 -1
  19. package/plugins/sp/skills/spur-dev/SKILL.md +12 -4
  20. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +22 -6
  21. package/plugins/sp/skills/spur-dev/references/dev-operations.md +13 -13
  22. package/plugins/sp/skills/spur-dev/references/execution-batch.md +76 -4
  23. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +4 -2
  24. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +2 -2
  25. package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +43 -11
  26. package/plugins/sp/skills/spur-dev/references/planning-workflow.md +53 -0
  27. package/spur.js +529 -290
  28. package/web/_astro/{BoardApp.8sc6Rb1t.js → BoardApp.BnhkWEOG.js} +99 -99
  29. package/web/_astro/BoardApp.CxOS4HSo.js +1 -0
  30. package/web/_astro/{TaskDetail.DOKJP-Kp.js → TaskDetail.B6yiT-U7.js} +1 -1
  31. package/web/_astro/{arc.CTqmqspU.js → arc.PbmgYm3_.js} +1 -1
  32. package/web/_astro/{architectureDiagram-3BPJPVTR.B0iBdehs.js → architectureDiagram-3BPJPVTR.BkOMSdmD.js} +1 -1
  33. package/web/_astro/{blockDiagram-GPEHLZMM.BHE5UFj5.js → blockDiagram-GPEHLZMM.BtomoUdy.js} +1 -1
  34. package/web/_astro/{c4Diagram-AAUBKEIU.DQApkgGM.js → c4Diagram-AAUBKEIU.UzrYwJnF.js} +1 -1
  35. package/web/_astro/channel.DRRsElzO.js +1 -0
  36. package/web/_astro/{chunk-2J33WTMH.fPrKLM8v.js → chunk-2J33WTMH.nNChLHkw.js} +1 -1
  37. package/web/_astro/{chunk-4BX2VUAB.DExvwBhn.js → chunk-4BX2VUAB.DLYAecPo.js} +1 -1
  38. package/web/_astro/{chunk-55IACEB6.EjNkjuD6.js → chunk-55IACEB6.t5bzuj1J.js} +1 -1
  39. package/web/_astro/{chunk-727SXJPM.Dl8xy5rT.js → chunk-727SXJPM.DBV62bIy.js} +1 -1
  40. package/web/_astro/{chunk-AQP2D5EJ.BSzMBgBs.js → chunk-AQP2D5EJ.BdaPhTPs.js} +1 -1
  41. package/web/_astro/{chunk-FMBD7UC4.CAeOHpbb.js → chunk-FMBD7UC4.eoZ88KMf.js} +1 -1
  42. package/web/_astro/{chunk-ND2GUHAM.Bbeu_ZOH.js → chunk-ND2GUHAM.QdNDyeSh.js} +1 -1
  43. package/web/_astro/{chunk-QZHKN3VN.Da_GaIAZ.js → chunk-QZHKN3VN.DPaToLfx.js} +1 -1
  44. package/web/_astro/{classDiagram-4FO5ZUOK.sMfFYSQp.js → classDiagram-4FO5ZUOK.By9BMe7b.js} +1 -1
  45. package/web/_astro/{classDiagram-v2-Q7XG4LA2.sMfFYSQp.js → classDiagram-v2-Q7XG4LA2.By9BMe7b.js} +1 -1
  46. package/web/_astro/{cose-bilkent-S5V4N54A.PS3IwOH4.js → cose-bilkent-S5V4N54A.DMypl6q_.js} +1 -1
  47. package/web/_astro/{dagre-BM42HDAG.EQCx8a6D.js → dagre-BM42HDAG.p26m9grg.js} +1 -1
  48. package/web/_astro/{diagram-2AECGRRQ.aEFQl8v8.js → diagram-2AECGRRQ.C6m3oTIu.js} +1 -1
  49. package/web/_astro/{diagram-5GNKFQAL.jyN4tqFX.js → diagram-5GNKFQAL.JCxivn2z.js} +1 -1
  50. package/web/_astro/{diagram-KO2AKTUF.DaTVHnme.js → diagram-KO2AKTUF.DifbEd3P.js} +1 -1
  51. package/web/_astro/{diagram-LMA3HP47.DWsGRLAN.js → diagram-LMA3HP47.Bffga-cf.js} +1 -1
  52. package/web/_astro/{diagram-OG6HWLK6.DYxmOViu.js → diagram-OG6HWLK6.CUKx5_Cx.js} +1 -1
  53. package/web/_astro/{erDiagram-TEJ5UH35.BKM75coa.js → erDiagram-TEJ5UH35.DaJ9KZR0.js} +1 -1
  54. package/web/_astro/{flowDiagram-I6XJVG4X.B7qpqDW5.js → flowDiagram-I6XJVG4X.Do6l5pzg.js} +1 -1
  55. package/web/_astro/{ganttDiagram-6RSMTGT7.CYBL-hwy.js → ganttDiagram-6RSMTGT7.DqBKgB-3.js} +1 -1
  56. package/web/_astro/{gitGraphDiagram-PVQCEYII.Cz4ly3Kq.js → gitGraphDiagram-PVQCEYII.B3VLSQ22.js} +1 -1
  57. package/web/_astro/{index.yAse9IaO.css → index.QfZ9SC3X.css} +1 -1
  58. package/web/_astro/{infoDiagram-5YYISTIA.CIS7cXrJ.js → infoDiagram-5YYISTIA.hK8ZC1oa.js} +1 -1
  59. package/web/_astro/{ishikawaDiagram-YF4QCWOH.DQ-pmaOG.js → ishikawaDiagram-YF4QCWOH.C8DXwh9Z.js} +1 -1
  60. package/web/_astro/{journeyDiagram-JHISSGLW.DVS6F7UM.js → journeyDiagram-JHISSGLW.mj5aHQDb.js} +1 -1
  61. package/web/_astro/{kanban-definition-UN3LZRKU.D8t-G-U6.js → kanban-definition-UN3LZRKU.Dwlhi49r.js} +1 -1
  62. package/web/_astro/{linear.IO8rTd_n.js → linear.7zBHdlwl.js} +1 -1
  63. package/web/_astro/{mermaid.core.CjVnvFNf.js → mermaid.core.AYdA0EJr.js} +4 -4
  64. package/web/_astro/{mindmap-definition-RKZ34NQL.DZoEMTnU.js → mindmap-definition-RKZ34NQL.BSnniHEq.js} +1 -1
  65. package/web/_astro/{pieDiagram-4H26LBE5.86r1QWnX.js → pieDiagram-4H26LBE5.B7EVpA3J.js} +1 -1
  66. package/web/_astro/{quadrantDiagram-W4KKPZXB.DzFA9uPk.js → quadrantDiagram-W4KKPZXB.rg4i8YOY.js} +1 -1
  67. package/web/_astro/{requirementDiagram-4Y6WPE33.dQvdvfMr.js → requirementDiagram-4Y6WPE33.C4pr792x.js} +1 -1
  68. package/web/_astro/{sankeyDiagram-5OEKKPKP.BvC-VNI8.js → sankeyDiagram-5OEKKPKP.DTXU996O.js} +1 -1
  69. package/web/_astro/{sequenceDiagram-3UESZ5HK.DDQNwHs8.js → sequenceDiagram-3UESZ5HK.D73DOjzi.js} +1 -1
  70. package/web/_astro/{stateDiagram-AJRCARHV.BKwYy-tQ.js → stateDiagram-AJRCARHV.CVkeSaEH.js} +1 -1
  71. package/web/_astro/{stateDiagram-v2-BHNVJYJU.KxCiRYYf.js → stateDiagram-v2-BHNVJYJU.DkBGwoN5.js} +1 -1
  72. package/web/_astro/{timeline-definition-PNZ67QCA.Bh9NDjOx.js → timeline-definition-PNZ67QCA.DnJ9Yh7G.js} +1 -1
  73. package/web/_astro/{vennDiagram-CIIHVFJN.DIM-n6us.js → vennDiagram-CIIHVFJN.DN1tvR4Y.js} +1 -1
  74. package/web/_astro/{wardley-L42UT6IY.DW15qOFQ.js → wardley-L42UT6IY.D54jJ-7-.js} +1 -1
  75. package/web/_astro/{wardleyDiagram-YWT4CUSO.UTIvjsG9.js → wardleyDiagram-YWT4CUSO.C2grUBbE.js} +1 -1
  76. package/web/_astro/{xychartDiagram-2RQKCTM6.CQYhkVDS.js → xychartDiagram-2RQKCTM6.D05okBnV.js} +1 -1
  77. package/web/index.html +2 -2
  78. package/web/_astro/BoardApp.ChKnY1JD.js +0 -1
  79. package/web/_astro/channel.B0q9WGrH.js +0 -1
@@ -52,8 +52,10 @@ one thing and yields, so the **pipeline (not the agent) owns the loop**.
52
52
 
53
53
  Interactive omit/`inline` executes these model stages through the
54
54
  [inline pipeline driver](inline-pipeline-driver.md) in the host session and records stage/session
55
- provenance. `--agent <name|auto>`, parallel batches, and headless workflow invocation select the
56
- existing subprocess actions. Direct invocations of the same dev operations remain inline by
55
+ provenance. The host is the controller; eligible `agent.run` stages may dispatch once to a native
56
+ subagent (task 0508), with host fallback and no post-dispatch replay see the driver reference.
57
+ `--agent <name|auto>`, parallel batches, and headless workflow invocation select
58
+ the existing subprocess actions. Direct invocations of the same dev operations remain inline by
57
59
  default. See the [inline-default execution-surface contract](cross-cutting.md#inline-default-execution-surface).
58
60
 
59
61
  > **Single-run & parse discipline (suite run cost control).** Run full quality/test suites (`bun run check` / `spur-check`) at most ONCE per task iteration (task 0436 R2). Parse failure details from the single retained command output rather than re-running full suites repeatedly to inspect errors. Re-run targeted/narrow test files (e.g. `bun test <file> --test-name-pattern <pattern>`) while iterating on fixes, and re-run the full suite only when all targeted fixes pass.
@@ -47,7 +47,7 @@ The value table below is the C3a cross-file parity surface (kept in lockstep wit
47
47
 
48
48
  | Value | Who does the work | Derived surface |
49
49
  | ------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
50
- | `inline` (default when omitted) | Whoever is running this session (interactive) or `agent.default` (headless) | Interactive: inline (host session); headless: subprocess of `agent.default` |
50
+ | `inline` (default when omitted) | Whoever is running this session (interactive) or `agent.default` (headless) | Interactive: inline host-controlled, eligible model stages may use a native subagent (0508); headless: subprocess of `agent.default` |
51
51
  | `auto` | Tier-resolved from the stage's `min_tier` + `fallback` | Subprocess |
52
52
  | `<name>` | That coding agent or configured executor | Inline when it is the current session's agent; subprocess otherwise |
53
53
 
@@ -366,7 +366,7 @@ swallowed as the name. `--worktree=<name>` is the unambiguous spelling. `/sp:dev
366
366
  the flag (single step; not worth the worktree cost), and `--worktree --mode parallel` is rejected
367
367
  (per-task parallel isolation stays task 0142). The full lifecycle — name resolution, dirty-tree
368
368
  precheck, creation or adoption, crash-safe marker, merge-or-retain, and `--continue` re-entry — is
369
- specified in [execution-batch.md § Worktree isolation](execution-batch.md#worktree-isolation---worktree).
369
+ specified in [execution-batch.md § Worktree isolation](execution-batch.md#worktree-isolation---worktree-name).
370
370
  Portable `git worktree` commands only; the git mechanics are reused from
371
371
  [worktree-patterns.md](../../branch-workflow/references/worktree-patterns.md).
372
372
 
@@ -53,21 +53,53 @@ Action semantics come from the YAML and the workflow action contract:
53
53
  actions/guards.
54
54
  - `hitl.confirm` — under `profile=auto`, follow the YAML's auto-skip transition. Otherwise pause,
55
55
  surface the prompt, and resume from the same state with the operator's answer.
56
- - `agent.run` — execute the action's slash command through its backing skill in the current host
57
- session. Do not call `spur agent run` and do not re-enter `/sp:dev-run --mode full`. Preserve the
58
- YAML options: capture `answerFile`; assert `expectFile`; enforce `requireDiff` against a
59
- pre-action git snapshot, including the task-scope guard; honor declared error policy. `timeoutMs`
60
- is recorded as not applicable because the host session has no independent kill boundary.
61
-
62
- After every successful inline `agent.run` action append exactly:
56
+ - `agent.run` — execute the action's slash command, native-subagent-first (task 0508). Do not call
57
+ `spur agent run` and do not re-enter `/sp:dev-run --mode full`. Preserve the YAML options: capture
58
+ `answerFile`; assert `expectFile`; enforce `requireDiff` against a pre-action git snapshot,
59
+ including the task-scope guard; honor declared error policy. `timeoutMs` is recorded as not
60
+ applicable because the host session has no independent kill boundary.
61
+
62
+ **Native-subagent dispatch (R2 eligibility, evaluated before each action):**
63
+
64
+ 1. The invocation is one of the two interactive inline full-pipeline surfaces (`dev-run --mode full`
65
+ or sequential `dev-runall`, omit/`inline`).
66
+ 2. The YAML action kind is `agent.run` and its input is a pure slash command. Shell, note, file,
67
+ guard, and operator-interaction actions remain host-executed.
68
+ 3. The current state/action has no operator-confirmation action, `pause: true`, approve/taste/ask
69
+ decision, or other operator prompt.
70
+ 4. The platform exposes a native subagent that shares the working tree and has read, write, shell,
71
+ and Spur task/run-artifact access.
72
+
73
+ All four pass → dispatch. Any pre-dispatch failure → execute the stage **once** in the host session.
74
+ No token estimate, stage-size threshold, model heuristic, or configuration switch is added.
75
+
76
+ **Dispatch and join:** before dispatch, capture the same pre-action git snapshot used by
77
+ `requireDiff` enforcement. Send only: the stage id, the YAML's exact pure slash command, and
78
+ `execution surface already resolved: native subagent; do not dispatch this stage again`. The WBS/path
79
+ already carried by the slash command is the handoff — do not paste task/session transcripts or embed
80
+ machine-specific session paths. Dispatch exactly one native subagent and wait for it; the inline FSM
81
+ must not advance actions or guards concurrently (one writer at a time). After join, validate
82
+ `answerFile`, `expectFile`, `requireDiff`, task scope, and the action's error policy from the shared
83
+ filesystem — a subagent success message is not evidence. On success append exactly:
63
84
 
64
85
  ```text
65
- stage <id> executed inline in session <session-id>
86
+ stage <id> executed via subagent <agent-id> (host session <session-id>)
66
87
  ```
67
88
 
68
- to `.spur/run/<run-id>.log`, where `<id>` is the current YAML state id. Also log start/failure and
69
- the ignored timeout value so an inline run remains auditable without fabricating an
70
- `AgentRunTracedResult`.
89
+ Host fallback retains exactly `stage <id> executed inline in session <session-id>`. If launch fails
90
+ before the subagent starts, log the reason and use host fallback. If a started subagent fails or
91
+ leaves invalid artifacts, do **not** replay the stage in the host — follow the YAML error policy so
92
+ partial mutations are not duplicated.
93
+
94
+ **Host-owned interaction:** the host alone executes operator-confirmation actions, owns
95
+ `pause: true`, and surfaces approve/taste/ask decisions. A subagent that discovers missing authority
96
+ or an operator decision returns a blocker; the host pauses at the current state and presents it. The
97
+ subagent cannot approve, infer consent, or recursively invoke the full pipeline.
98
+
99
+ After every successful inline `agent.run` action append exactly one provenance line (inline or
100
+ subagent form above) to `.spur/run/<run-id>.log`, where `<id>` is the current YAML state id. Also
101
+ log start/failure and the ignored timeout value so an inline run remains auditable without
102
+ fabricating an `AgentRunTracedResult`.
71
103
 
72
104
  Transition guards are not advisory. Execute the declared guard exactly, in order, with the same
73
105
  resolved variables and artifacts. `--no-lifecycle` remains bookkeeping only; the YAML's task checks,
@@ -217,6 +217,59 @@ fires, author the doc and **report** the chosen slug and a one-line rationale ("
217
217
  `docs/design/<slug>.md` — new `spur <noun>` command + config key"); when it does not fire, report the
218
218
  skip and why. Do not pause to ask; the operator reviews the satellite afterward.
219
219
 
220
+ ## Step 5.6: Idea pipeline (sp:dev-idea) — planning handoff contracts
221
+
222
+ `/sp:dev-idea` runs the same planning half through the idea-pipeline workflow definition
223
+ (`.spur/workflows/idea-pipeline.yaml` — symlinked to the tracked SSOT). Two
224
+ artifacts are the contract between the workflow states and the operator:
225
+
226
+ **Goal/Scope intent (feature-create).** The agent writes body-only intent files
227
+ `.spur/run/<runId>-idea-goal.md` and `.spur/run/<runId>-idea-scope.md`, then persists both through
228
+ the corpus CLI (a missing/empty artifact stops the state before decomposition can begin):
229
+
230
+ ```bash
231
+ spur feature update <id> --section Goal --from-file .spur/run/<runId>-idea-goal.md
232
+ spur feature update <id> --section Scope --from-file .spur/run/<runId>-idea-scope.md
233
+ ```
234
+
235
+ - **Goal is intent only** — a short statement of what the feature achieves. Task breakdowns,
236
+ checklists, and how-to steps **never** enter Goal.
237
+ - **Scope carries explicit boundaries** — in-scope and out-of-scope bullets.
238
+
239
+ **Design review artifact (system-design / design-approval).** One run-scoped file,
240
+ `.spur/run/<runId>-idea-design-review.md`, with fixed headings `## Proposed design`,
241
+ `## Operator feedback`, and `## Reconciliation`:
242
+
243
+ - **First pass:** system-design writes the proposed design under `## Proposed design`.
244
+ - **Rejection:** before answering `no` at the design-approval gate, the operator edits
245
+ `## Operator feedback` with the concrete issue(s).
246
+ - **Retry:** system-design reads that feedback, revises the design/ADR artifacts, records the
247
+ changes under `## Reconciliation`, and — when the feedback invalidates an Acceptance Criteria
248
+ scenario — updates the feature AC through `spur feature update <id> --section
249
+ "Acceptance Criteria" --from-file <file>` (never direct feature-file edits).
250
+ - **Exit gate:** every design exit into decomposition (auto-approved and interactive-approved)
251
+ re-runs `spur feature check <id>`, so stale or invalidated AC cannot proceed.
252
+
253
+ **Task ordering (decompose / handoff-finalize).** Decomposition also emits the private
254
+ run-scoped order sidecar `.spur/run/<runId>-idea-task-order.json` — a JSON array of
255
+ `{ name, depends_on_names[] }` (one entry per batch item, names matching batch item `name`s
256
+ exactly; `[]` when no ordering exists). It is private workflow data, not part of
257
+ `task-batch.schema.json`. A post-decompose validation fails the run on any ambiguous or
258
+ missing title match. After batch creation, `handoff-finalize`:
259
+
260
+ 1. Zips batch item names to the created WBS values from the captured
261
+ `.spur/run/<runId>-idea-batch-create-result.json` (`task batch-create --json` output;
262
+ `wbs[]` is in input order).
263
+ 2. Applies every non-empty `depends_on_names` list through
264
+ `spur task deps <wbs> set <dep-wbs...> --json` — a mapping or CLI error fails the run
265
+ before handoff.
266
+ 3. Refreshes the feature roster with `spur feature refresh --feature <id> --json`.
267
+ 4. Checks each created task (`spur task check <wbs> --json`) and writes
268
+ `.spur/run/<runId>-idea-handoff.md` with exactly **one** next command:
269
+ `/sp:dev-refineall --feature <id> --auto --depth ready` when any task is unready
270
+ (runall is then omitted), otherwise `/sp:dev-runall --feature <id> --auto`. The terminal
271
+ handoff note points at this report.
272
+
220
273
  ## Step 6: Refine before execute (the spec-completion gate)
221
274
 
222
275
  `batch-create` accepts optional `design` / `plan` / `acceptance_criteria` fields (plus