@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/config/templates/AGENTS.md +5 -0
- package/config/workflows/idea-pipeline.yaml +205 -33
- package/config/workflows/task-pipeline.yaml +11 -1
- package/package.json +9 -9
- package/plugins/sp/commands/dev-run.md +3 -3
- package/plugins/sp/commands/dev-runall.md +9 -4
- package/plugins/sp/commands/dev-wrap.md +21 -3
- package/plugins/sp/commands/dev-wrapall.md +21 -3
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/skills/code-implementation/SKILL.md +27 -0
- package/plugins/sp/skills/issue-finding/SKILL.md +21 -3
- package/plugins/sp/skills/issue-finding/references/session-formats.md +30 -0
- package/plugins/sp/skills/next-router/references/routing-table.md +2 -2
- package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +9 -0
- package/plugins/sp/skills/spur-cli/SKILL.md +3 -0
- package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +8 -3
- package/plugins/sp/skills/spur-cli/references/tasks.md +25 -1
- package/plugins/sp/skills/spur-dev/SKILL.md +12 -4
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +22 -6
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +13 -13
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +76 -4
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +4 -2
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +2 -2
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +43 -11
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +53 -0
- package/spur.js +529 -290
- package/web/_astro/{BoardApp.8sc6Rb1t.js → BoardApp.BnhkWEOG.js} +99 -99
- package/web/_astro/BoardApp.CxOS4HSo.js +1 -0
- package/web/_astro/{TaskDetail.DOKJP-Kp.js → TaskDetail.B6yiT-U7.js} +1 -1
- package/web/_astro/{arc.CTqmqspU.js → arc.PbmgYm3_.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.B0iBdehs.js → architectureDiagram-3BPJPVTR.BkOMSdmD.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.BHE5UFj5.js → blockDiagram-GPEHLZMM.BtomoUdy.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.DQApkgGM.js → c4Diagram-AAUBKEIU.UzrYwJnF.js} +1 -1
- package/web/_astro/channel.DRRsElzO.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.fPrKLM8v.js → chunk-2J33WTMH.nNChLHkw.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.DExvwBhn.js → chunk-4BX2VUAB.DLYAecPo.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.EjNkjuD6.js → chunk-55IACEB6.t5bzuj1J.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.Dl8xy5rT.js → chunk-727SXJPM.DBV62bIy.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.BSzMBgBs.js → chunk-AQP2D5EJ.BdaPhTPs.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.CAeOHpbb.js → chunk-FMBD7UC4.eoZ88KMf.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.Bbeu_ZOH.js → chunk-ND2GUHAM.QdNDyeSh.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.Da_GaIAZ.js → chunk-QZHKN3VN.DPaToLfx.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.sMfFYSQp.js → classDiagram-4FO5ZUOK.By9BMe7b.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.sMfFYSQp.js → classDiagram-v2-Q7XG4LA2.By9BMe7b.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.PS3IwOH4.js → cose-bilkent-S5V4N54A.DMypl6q_.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.EQCx8a6D.js → dagre-BM42HDAG.p26m9grg.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.aEFQl8v8.js → diagram-2AECGRRQ.C6m3oTIu.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.jyN4tqFX.js → diagram-5GNKFQAL.JCxivn2z.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.DaTVHnme.js → diagram-KO2AKTUF.DifbEd3P.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.DWsGRLAN.js → diagram-LMA3HP47.Bffga-cf.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.DYxmOViu.js → diagram-OG6HWLK6.CUKx5_Cx.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.BKM75coa.js → erDiagram-TEJ5UH35.DaJ9KZR0.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.B7qpqDW5.js → flowDiagram-I6XJVG4X.Do6l5pzg.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.CYBL-hwy.js → ganttDiagram-6RSMTGT7.DqBKgB-3.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.Cz4ly3Kq.js → gitGraphDiagram-PVQCEYII.B3VLSQ22.js} +1 -1
- package/web/_astro/{index.yAse9IaO.css → index.QfZ9SC3X.css} +1 -1
- package/web/_astro/{infoDiagram-5YYISTIA.CIS7cXrJ.js → infoDiagram-5YYISTIA.hK8ZC1oa.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.DQ-pmaOG.js → ishikawaDiagram-YF4QCWOH.C8DXwh9Z.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.DVS6F7UM.js → journeyDiagram-JHISSGLW.mj5aHQDb.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.D8t-G-U6.js → kanban-definition-UN3LZRKU.Dwlhi49r.js} +1 -1
- package/web/_astro/{linear.IO8rTd_n.js → linear.7zBHdlwl.js} +1 -1
- package/web/_astro/{mermaid.core.CjVnvFNf.js → mermaid.core.AYdA0EJr.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.DZoEMTnU.js → mindmap-definition-RKZ34NQL.BSnniHEq.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.86r1QWnX.js → pieDiagram-4H26LBE5.B7EVpA3J.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.DzFA9uPk.js → quadrantDiagram-W4KKPZXB.rg4i8YOY.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.dQvdvfMr.js → requirementDiagram-4Y6WPE33.C4pr792x.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.BvC-VNI8.js → sankeyDiagram-5OEKKPKP.DTXU996O.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.DDQNwHs8.js → sequenceDiagram-3UESZ5HK.D73DOjzi.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.BKwYy-tQ.js → stateDiagram-AJRCARHV.CVkeSaEH.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.KxCiRYYf.js → stateDiagram-v2-BHNVJYJU.DkBGwoN5.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.Bh9NDjOx.js → timeline-definition-PNZ67QCA.DnJ9Yh7G.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.DIM-n6us.js → vennDiagram-CIIHVFJN.DN1tvR4Y.js} +1 -1
- package/web/_astro/{wardley-L42UT6IY.DW15qOFQ.js → wardley-L42UT6IY.D54jJ-7-.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.UTIvjsG9.js → wardleyDiagram-YWT4CUSO.C2grUBbE.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.CQYhkVDS.js → xychartDiagram-2RQKCTM6.D05okBnV.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.ChKnY1JD.js +0 -1
- 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.
|
|
56
|
-
|
|
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
|
|
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
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
|
86
|
+
stage <id> executed via subagent <agent-id> (host session <session-id>)
|
|
66
87
|
```
|
|
67
88
|
|
|
68
|
-
|
|
69
|
-
the
|
|
70
|
-
|
|
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
|