@gobing-ai/spur 0.3.60 → 0.3.62
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 +2 -2
- package/config/config.global.yaml +68 -57
- package/config/corpus-baseline.json +505 -57
- package/config/plugin-scripts.json +2 -2
- package/config/rules/boundary/config-loading-ownership.yaml +21 -0
- package/config/workflow-composition-baseline.json +1 -1
- package/config/workflows/history-anatomy.yaml +366 -0
- package/config/workflows/wayfinder-resolution.yaml +4 -6
- package/package.json +1 -1
- package/plugins/README.md +5 -4
- package/plugins/sp/README.md +22 -9
- package/plugins/sp/agents/super-planner.md +1 -1
- package/plugins/sp/commands/dev-find-issue.md +25 -46
- package/plugins/sp/commands/dev-pr-review.md +1 -1
- package/plugins/sp/commands/dev-run.md +22 -3
- package/plugins/sp/commands/dev-wrap.md +2 -2
- package/plugins/sp/commands/dev-wrapall.md +2 -2
- package/plugins/sp/lib/artifact-digest.generated.d.mts +7 -0
- package/plugins/sp/lib/artifact-digest.generated.mjs +48 -0
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/references/roles.md +17 -14
- package/plugins/sp/scripts/history-anatomy-cache.mjs +669 -0
- package/plugins/sp/scripts/history-anatomy-cache.ts +818 -0
- package/plugins/sp/scripts/surface-drift-inventory.ts +51 -17
- package/plugins/sp/scripts/validate-commands.ts +11 -4
- package/plugins/sp/skills/code-verification/SKILL.md +1 -1
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +1 -1
- package/plugins/sp/skills/history-anatomy/SKILL.md +67 -0
- package/plugins/sp/skills/history-anatomy/references/modes.md +82 -0
- package/plugins/sp/skills/history-anatomy/references/operations.md +67 -0
- package/plugins/sp/skills/history-anatomy/references/report-contract.md +133 -0
- package/plugins/sp/skills/issue-finding/SKILL.md +1 -1
- package/plugins/sp/skills/next-router/references/routing-table.md +1 -1
- package/plugins/sp/skills/pr-reviewing/SKILL.md +2 -2
- package/plugins/sp/skills/spec-decomposition/references/decomposition.md +1 -1
- package/plugins/sp/skills/spur-cli/references/init.md +1 -1
- package/plugins/sp/skills/spur-cli/references/tasks/l3-guard-cheatsheet.md +1 -1
- package/plugins/sp/skills/spur-cli/references/workflows/operations.md +1 -1
- package/plugins/sp/skills/spur-cli/references/workflows.md +4 -4
- package/plugins/sp/skills/spur-dev/SKILL.md +4 -4
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +4 -4
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +11 -11
- package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +1 -1
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +17 -4
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +8 -1
- package/plugins/sp/skills/spur-dev/references/feature-link-helper.md +3 -2
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +25 -13
- package/plugins/sp/skills/spur-dev/references/gate-checklists.md +1 -1
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +5 -2
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +2 -2
- package/schemas/spur-config.schema.json +1 -1
- package/spur.js +1278 -890
- package/web/_astro/BoardApp.Z9jMwI9G.js +1 -0
- package/web/_astro/BoardApp.rkWGVwwK.js +178 -0
- package/web/_astro/{TaskDetail.B0l1uzsB.js → TaskDetail.B7ODt_bA.js} +1 -1
- package/web/_astro/{arc.DPruHC3P.js → arc.C5QRz6AQ.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.CuOqAck6.js → architectureDiagram-3BPJPVTR.CHptn8gZ.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.Cxb7HDIA.js → blockDiagram-GPEHLZMM.b1nEDkDw.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.Dw7wa-0S.js → c4Diagram-AAUBKEIU.BWj8S_Qq.js} +1 -1
- package/web/_astro/channel.BJtn6CGV.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.MECQitzo.js → chunk-2J33WTMH.q0BBuE1n.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.p3ofhIGE.js → chunk-4BX2VUAB.DP2KDkAU.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.BmQGsPZP.js → chunk-55IACEB6.CkCId72p.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.CwrK23OA.js → chunk-727SXJPM.oHWzxMot.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.CUKI_QXp.js → chunk-AQP2D5EJ.DkkgxfMP.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.7AtDgShM.js → chunk-FMBD7UC4.lmFJDvRK.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.f_YJbTs3.js → chunk-ND2GUHAM.52jt0eHK.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.0q7V3gEg.js → chunk-QZHKN3VN.Cg8KEFoD.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.C_hG3HMK.js → classDiagram-4FO5ZUOK.BuOUhxcD.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.C_hG3HMK.js → classDiagram-v2-Q7XG4LA2.BuOUhxcD.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.vsaaaEMy.js → cose-bilkent-S5V4N54A.BRUU8E_0.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.BN7XFqQ4.js → dagre-BM42HDAG.GDbfFYVV.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.ED6AfryZ.js → diagram-2AECGRRQ.CvIDBeJF.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.Dxllzg8R.js → diagram-5GNKFQAL.DMgJjWOX.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.RuWppieD.js → diagram-KO2AKTUF.njjl-0AP.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.CL32Xn6s.js → diagram-LMA3HP47.CcCqgP8M.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.CUneEhqB.js → diagram-OG6HWLK6.Btqd-YVE.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.DI-92Lec.js → erDiagram-TEJ5UH35.BbhML_Xo.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.69Aqa1FF.js → flowDiagram-I6XJVG4X.CkvsIgY8.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.DdpClZpa.js → ganttDiagram-6RSMTGT7.m8IWD_wW.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.xqWfkvB4.js → gitGraphDiagram-PVQCEYII.5z87HXO-.js} +1 -1
- package/web/_astro/index.nWve6EHS.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.B3G5sfKm.js → infoDiagram-5YYISTIA.Bvyvsd7Q.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.ahVNsoAQ.js → ishikawaDiagram-YF4QCWOH.DdWVYO87.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.PmFHLc-X.js → journeyDiagram-JHISSGLW.C3kOlYH1.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.Co1qOPTd.js → kanban-definition-UN3LZRKU.CfKTUHVC.js} +1 -1
- package/web/_astro/{linear.DoHZ-iRt.js → linear.CMDHnzgX.js} +1 -1
- package/web/_astro/{mermaid.core.DNRElYN2.js → mermaid.core.DN7-WrsP.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.CdfJZidJ.js → mindmap-definition-RKZ34NQL.DcQxLvqG.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.C1A8dby4.js → pieDiagram-4H26LBE5.Nu-Inbw6.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.NmZqjG_c.js → quadrantDiagram-W4KKPZXB.Dck2EChs.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.tY36zYtK.js → requirementDiagram-4Y6WPE33.C--E5XuW.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.rOEGZYjo.js → sankeyDiagram-5OEKKPKP.B_0iRNna.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.Dpnw3S9J.js → sequenceDiagram-3UESZ5HK.PKuKr9mk.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.DGpvQ3Wz.js → stateDiagram-AJRCARHV.ClhGHb-O.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.CbwQdEfu.js → stateDiagram-v2-BHNVJYJU.Bv6BBnvg.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.DAYUpUJT.js → timeline-definition-PNZ67QCA.BZm2ZvAH.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.C7JCCd6-.js → vennDiagram-CIIHVFJN.Dt6yZXry.js} +1 -1
- package/web/_astro/{wardley-L42UT6IY.BGgwOH5_.js → wardley-L42UT6IY.rUs-E00M.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.oIZqzI2l.js → wardleyDiagram-YWT4CUSO.BcWgv4cA.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.DohcJzqm.js → xychartDiagram-2RQKCTM6.DH-M-cX9.js} +1 -1
- package/web/index.html +2 -2
- package/plugins/sp/commands/dev-history-load.md +0 -63
- package/plugins/sp/scripts/history-load.mjs +0 -268
- package/plugins/sp/scripts/history-load.ts +0 -400
- package/web/_astro/BoardApp.BJs3l7O8.js +0 -179
- package/web/_astro/BoardApp.D8InuCYx.js +0 -1
- package/web/_astro/channel.XCf1DcsL.js +0 -1
- package/web/_astro/index.DJl2RAVZ.css +0 -1
|
@@ -50,7 +50,7 @@ ordered guards, and may loop back on itself (e.g. implement → check → fix
|
|
|
50
50
|
| Node typing | none (states are untyped) | `type: action\|gate\|parallel\|decision` |
|
|
51
51
|
| Required keys | `name, initialState, states, transitions` | `kind, name, initialNode, nodes, edges` |
|
|
52
52
|
| `kind` field | optional (defaults to state-machine) | **required** — `kind: transition-flow` |
|
|
53
|
-
| Canonical example | implement→check→fix loop (
|
|
53
|
+
| Canonical example | implement→check→fix loop (`basic.yaml` — soft status-file probe + bounded fixall) | read→validate→transform→write pipeline |
|
|
54
54
|
|
|
55
55
|
**Heuristic:** loops / retries / one-active-state → **state-machine**; pipeline / fan-out / action-per-node → **transition-flow**.
|
|
56
56
|
|
|
@@ -335,7 +335,7 @@ the workflow's actions (`shell`, custom runners) do that; this skill builds and
|
|
|
335
335
|
(transition-flow) wins. Order the specific case before the fallback. Simple shell checks can use
|
|
336
336
|
`action-ok` before an unconditional retry edge; multi-condition gates prefer a **soft status-file
|
|
337
337
|
probe** (always exit 0) with ordered shell guards for PASS / FAIL / exhausted (see
|
|
338
|
-
|
|
338
|
+
`basic.yaml` and `task-pipeline.yaml` quality-gate hop).
|
|
339
339
|
4. **`env.allow` is an allowlist.** `${env.X}` resolves only if `X` is listed under `env.allow`;
|
|
340
340
|
otherwise it resolves empty. A workflow that "loses" an environment value usually forgot to allow it.
|
|
341
341
|
5. **Extensions are fail-closed.** The CLI loads YAML-declared extension modules itself
|
|
@@ -372,9 +372,9 @@ the workflow's actions (`shell`, custom runners) do that; this skill builds and
|
|
|
372
372
|
custom action/guard runners, the trust-gated extension loader, and CLI-vs-library capability gaps.
|
|
373
373
|
- `@gobing-ai/ts-dual-workflow-engine` README — authoritative library reference (both drivers,
|
|
374
374
|
RunLifecycle, persistence, the full event map, every built-in capability).
|
|
375
|
-
-
|
|
375
|
+
- `basic.yaml` — the canonical state-machine implement→soft-check→fixall loop
|
|
376
376
|
(status-file branching + `qualityGateMaxFixAttempts`); copy real shapes from here.
|
|
377
|
-
-
|
|
377
|
+
- `task-pipeline.yaml` — full production pipeline (precheck, quality gate, HITL,
|
|
378
378
|
verify, record) when you need the complete reliability pattern set.
|
|
379
379
|
|
|
380
380
|
## Platform Notes
|
|
@@ -85,7 +85,7 @@ Full procedure: **[references/planning-workflow.md](references/planning-workflow
|
|
|
85
85
|
```
|
|
86
86
|
pick task (spur task list --json)
|
|
87
87
|
→ interactive omit/inline: read task-pipeline.yaml → drive actions + guards in host session
|
|
88
|
-
→ explicit/headless executor: spur workflow run
|
|
88
|
+
→ explicit/headless executor: spur workflow run task-pipeline.yaml --vars '{"wbs":"<wbs>"}'
|
|
89
89
|
→ on HITL pause: surface to operator; resume the selected driver from the paused state
|
|
90
90
|
```
|
|
91
91
|
|
|
@@ -218,10 +218,10 @@ for "what's actually in file Y" or for resources that sit outside the step seque
|
|
|
218
218
|
|
|
219
219
|
- `plugins/sp/references/roles.md` — the Layer-1 role→tier table (`scribe` / `coder` / `reviewer` /
|
|
220
220
|
`planner`, one per tier); the role vocabulary this spine's operations route under.
|
|
221
|
-
-
|
|
222
|
-
-
|
|
221
|
+
- `task-pipeline.yaml` — the execution pipeline definition.
|
|
222
|
+
- `idea-pipeline.yaml` — the front-half state machine (absorbed the retired
|
|
223
223
|
planning-pipeline in D5-K; `/sp:dev-plan` routes here, ADR-072).
|
|
224
|
-
-
|
|
224
|
+
- `templates/bdd/gherkin.md` — the BDD scenario template.
|
|
225
225
|
|
|
226
226
|
## Platform Notes
|
|
227
227
|
|
|
@@ -148,9 +148,9 @@ contract exists to prevent.
|
|
|
148
148
|
> Before 0398 R7 this row was unusable: the tag was required to keep `MET`, but the tag also broke
|
|
149
149
|
> title matching, so the scenario read as unverified. Both halves now hold at once.
|
|
150
150
|
|
|
151
|
-
### What
|
|
151
|
+
### What a done advance requires
|
|
152
152
|
|
|
153
|
-
`spur feature advance <id> --to done
|
|
153
|
+
`spur feature advance <id> --to done` treats a scenario as verified only when **all** of
|
|
154
154
|
these hold:
|
|
155
155
|
|
|
156
156
|
1. A task links to the feature (`feature_id`) and is status `done`.
|
|
@@ -169,7 +169,7 @@ Author one row per scenario declared in the task's own `### Acceptance Criteria`
|
|
|
169
169
|
|
|
170
170
|
## Gherkin template
|
|
171
171
|
|
|
172
|
-
Use the canonical BDD template at
|
|
172
|
+
Use the canonical BDD template at `templates/bdd/gherkin.md`. Key rules:
|
|
173
173
|
|
|
174
174
|
- **Given** establishes preconditions (state, setup).
|
|
175
175
|
- **When** describes the single action under test.
|
|
@@ -210,7 +210,7 @@ Each resolved decision from a grilling interview (Phase 1) becomes one or more G
|
|
|
210
210
|
| A **deferred branch** ("out of scope for now") | A `## Scope` **Out** bullet — *not* a scenario |
|
|
211
211
|
|
|
212
212
|
Number scenarios `R1, R2, …` sequentially, stable forever (the title is the traceability identity
|
|
213
|
-
key). Use the Gherkin template at
|
|
213
|
+
key). Use the Gherkin template at `templates/bdd/gherkin.md`.
|
|
214
214
|
|
|
215
215
|
## AC altitude (task 0584 / ADR-062)
|
|
216
216
|
|
|
@@ -68,7 +68,7 @@ each would be scope creep for one-liner procedures.
|
|
|
68
68
|
| 2 | review | `dev-review` | `Skill()` | `sp:code-verification` (`review`) + `sp:functional-review` + `sp:code-improvement` | `[<wbs\|path>] [--agent <inline\|auto\|name>] [--focus <dims>] [--fix (deprecated)]` |
|
|
69
69
|
| 3 | verify | `dev-verify` | `Skill()` | `sp:code-verification` (`verify`) | `<wbs> [--agent <inline\|auto\|name>] [--fix <none\|blockers-first\|all>] [--focus <lens>] [--bdd] [--auto] [--force] [--next] [--skip-shippable]` |
|
|
70
70
|
| 3a | verifyall | `dev-verifyall` | `Skill()` → agent | `sp:spur-dev` (`verifyall`) | `--tasks <selector> [--feature <id>] [--agent <inline\|auto\|name>] [--fix <none\|blockers-first\|all>] [--focus <lens>] [--bdd] [--auto] [--force] [--next] [--json] [--skip-shippable] [--worktree [<name>]]` |
|
|
71
|
-
| 4 | run | `dev-run` | `Skill()` | `sp:spur-dev` (`run` / `implement`) | `<wbs> [--mode <full\|implement>] [--agent <inline\|auto\|name>] [--auto] [--next] [--wrap] [--continue]` |
|
|
71
|
+
| 4 | run | `dev-run` | `Skill()` | `sp:spur-dev` (`run` / `implement`) | `<wbs> [--mode <full\|implement>] [--agent <inline\|auto\|name>] [--auto] [--next] [--wrap] [--continue] [--worktree [<name>]]` |
|
|
72
72
|
| 5 | refine | `dev-refine` | `Skill()` | `sp:spur-dev` (`refine`) | `<wbs> [--focus <mode>] [--description <text>] [--depth <standard\|ready>] [--agent <inline\|auto\|name>] [--auto] [--next]` |
|
|
73
73
|
| 5a | refineall | `dev-refineall` | `Skill()` | `sp:spur-dev` (`refineall`) | `--feature <id> \| --tasks <selector> [--focus <mode>] [--description <text>] [--depth <standard\|ready>] [--agent <inline\|auto\|name>] [--auto] [--keep-going] [--status <s>] [--json] [--worktree [<name>]]` |
|
|
74
74
|
| 6 | plan | `dev-plan` | `Skill()` | `sp:spur-dev` (`plan`) | `"<description>" [--feature <id>] [--parent <feature-id>] [--agent <inline\|auto\|name>] [--skip-design] [--auto] [--approve-taste]` |
|
|
@@ -140,10 +140,10 @@ must not be changed without updating the backing skill.
|
|
|
140
140
|
### 4. run
|
|
141
141
|
|
|
142
142
|
- **Purpose:** Run a task through the execution pipeline (full) or execute a single pipeline step (implement).
|
|
143
|
-
- **Inputs:** `<wbs>` (required). `--mode <full|implement>` selects the execution mode. `implement` invokes `sp:code-implementation` inline by default. Interactive `full` with omitted `--agent` or explicit `--agent inline` reads `task-pipeline.yaml` and drives its actions/guards in the host session — host-controlled and non-subprocess; **omitted** `--agent` keeps 0508 eligibility (eligible `agent.run` stages dispatch once to a native subagent, host fallback), while explicit `--agent inline` is the zero-dispatch carve-out (every stage executes in the invoking session). `--agent auto`, a name, or headless invocation launches the workflow subprocess. `--agent <inline|auto|name>` selects the execution surface (see [SSOT](cross-cutting.md#inline-default-execution-surface)). `--auto` skips the HITL approve gate / confirmations and propagates down the `--next` chain. `--next` controls chaining only and never changes the mode; a pipeline implement stage must invoke `/sp:dev-run <wbs> --mode implement`. On implement success with `--next`, transition `todo → wip → testing` through the FSM (guards honored — no `--no-lifecycle`) + chain to `/sp:dev-verify <wbs> --auto --next`. On a guard failure, stop as review-pending. **Partial-deliverable rule:** if the task ships only part of its requirements (e.g. an R1/R2 split with the rest in a follow-up task), the `## Solution` section must state that explicitly and the verify verdict will record the scope. `--wrap` hands off to `/sp:dev-wrap <wbs>` after the main step; the `--agent` selector is preserved into that handoff when supplied (omission remains omission), and the wrap hop reports its own trigger-3 subprocess override per the wrap contract.
|
|
143
|
+
- **Inputs:** `<wbs>` (required). `--mode <full|implement>` selects the execution mode. `implement` invokes `sp:code-implementation` inline by default. Interactive `full` with omitted `--agent` or explicit `--agent inline` reads `task-pipeline.yaml` and drives its actions/guards in the host session — host-controlled and non-subprocess; **omitted** `--agent` keeps 0508 eligibility (eligible `agent.run` stages dispatch once to a native subagent, host fallback), while explicit `--agent inline` is the zero-dispatch carve-out (every stage executes in the invoking session). `--agent auto`, a name, or headless invocation launches the workflow subprocess. `--agent <inline|auto|name>` selects the execution surface (see [SSOT](cross-cutting.md#inline-default-execution-surface)). `--auto` skips the HITL approve gate / confirmations and propagates down the `--next` chain. `--next` controls chaining only and never changes the mode; a pipeline implement stage must invoke `/sp:dev-run <wbs> --mode implement`. On implement success with `--next`, transition `todo → wip → testing` through the FSM (guards honored — no `--no-lifecycle`) + chain to `/sp:dev-verify <wbs> --auto --next`. On a guard failure, stop as review-pending. **Partial-deliverable rule:** if the task ships only part of its requirements (e.g. an R1/R2 split with the rest in a follow-up task), the `## Solution` section must state that explicitly and the verify verdict will record the scope. `--worktree [<name>]` runs the full pipeline inside an isolated git worktree (create or reuse; FF-merge on success, retain on failure) — the batch lifecycle in [execution-batch.md § Worktree isolation](execution-batch.md#worktree-isolation---worktree-name) applied to a batch of one; rejected with `--mode implement`. `--wrap` hands off to `/sp:dev-wrap <wbs>` after the main step; the `--agent` selector is preserved into that handoff when supplied (omission remains omission), and the wrap hop reports its own trigger-3 subprocess override per the wrap contract.
|
|
144
144
|
- **Backing:** `sp:spur-dev` skill — `run` operation for the full pipeline (the spine drives it); `sp:code-implementation` competency skill for the implement step (the spine dispatches to it).
|
|
145
145
|
- **Modes:**
|
|
146
|
-
- **`full`** (default): Drive the full pipeline — precheck → implement → test → review → approve(HITL) → verify → record → done. Interactive omit/inline uses [inline-pipeline-driver.md](inline-pipeline-driver.md) (host-controlled; eligible stages may use a native subagent); explicit/headless executor selection invokes `spur workflow run
|
|
146
|
+
- **`full`** (default): Drive the full pipeline — precheck → implement → test → review → approve(HITL) → verify → record → done. Interactive omit/inline uses [inline-pipeline-driver.md](inline-pipeline-driver.md) (host-controlled; eligible stages may use a native subagent); explicit/headless executor selection invokes `spur workflow run task-pipeline.yaml --vars '{"wbs":"<wbs>"}'` (with `profile: auto` when `--auto`). Both monitor/surface HITL and preserve the YAML gates. `--next` never changes this mode.
|
|
147
147
|
- **`implement`** (explicit `--mode implement` only): Execute only the implement step. Read the task's `## Requirements` / `## Design` / `## Plan`, write the code that satisfies them, author the `## Solution` change-map section (file:line + what/why per changed file) via `spur task update <wbs> --section Solution --from-file`. This is the implement step the pipeline calls — it is NOT the pipeline driver. With `--next`: on success, transition `todo → wip → testing` through the FSM (guards honored — no `--no-lifecycle`) + chain to `/sp:dev-verify <wbs> --auto --next`; on a guard failure, stop as review-pending. **Partial-deliverable rule:** if the task ships only part of its requirements (e.g. an R1/R2 split with the rest in a follow-up task), the `## Solution` and `## Review` sections MUST carry a `⚠️ PARTIAL` marker naming the deferred part and the follow-up WBS — see `plugins/sp/commands/dev-run.md` → "Section ownership".
|
|
148
148
|
- **Delegation:** `Skill(skill="sp:spur-dev", args="run-inline $ARGUMENTS")` for interactive full omit/inline (explicit `inline` = zero-dispatch carve-out); `Skill(skill="sp:spur-dev", args="run $ARGUMENTS")` for explicit/headless full mode; `Skill(skill="sp:code-implementation", args="$ARGUMENTS")` for implement mode.
|
|
149
149
|
|
|
@@ -301,33 +301,33 @@ must not be changed without updating the backing skill.
|
|
|
301
301
|
|
|
302
302
|
- **Purpose:** Wrap up a single completed task — capture learnings, record metrics, sync docs, and optionally advance the feature / clean up the branch.
|
|
303
303
|
- **Inputs:** `<wbs>` (required, positional). `--agent <inline|auto|name>` names the wrap's model-bearing executor (default: `agent.default`); wrap is workflow-backed, so omitted `--agent` resolves to `agent.default` under objective trigger 3 (durable auditable run record required) while explicit `--agent inline` is rejected with the stable special error (headless workflow surface), `auto` tier-resolves an executor, and a name pins that executor into `vars.agent` (see [SSOT](cross-cutting.md#inline-default-execution-surface)). `--auto` skips objective confirmations (the branch-cleanup HITL gate still pauses — irreversible). `--merge` triggers branch cleanup (irreversible HITL gate).
|
|
304
|
-
- **Backing:** `spur workflow run
|
|
304
|
+
- **Backing:** `spur workflow run wrapup-pipeline.yaml` — direct workflow invocation (no backing skill; the pipeline IS the procedure).
|
|
305
305
|
- **Behavior:** Resolves the executor (`agent.default` for omit/`inline`, tier-resolved for `auto`, unchanged for a name), emits a pre-dispatch notice naming the subprocess override — `execution surface: subprocess`, `reason: trigger 3 — durable auditable run record required`, `requested agent: <selector>`, `executor: <resolved>` — then builds `--vars '{"tasks":"[\"<wbs>\"]","agent":"<resolved>","profile":"interactive|auto","merge":"true|false"}'` and invokes the wrapup pipeline. The pipeline runs: task-resolve → doc-sync → learning-capture → metrics-record → (feature-transition) → (branch-cleanup) → done. Task statuses are NOT mutated. Branch cleanup is an irreversible HITL gate that always pauses, even under `--auto`.
|
|
306
306
|
- **Vars string typing:** `tasks` is a JSON-encoded **string**, not a JSON array — `spur workflow run --vars` accepts only string values (`--vars values must be strings`); the pipeline's guards parse the string with `jq length`. `jq -nc` guarantees the shape:
|
|
307
307
|
|
|
308
308
|
```bash
|
|
309
309
|
VARS=$(jq -nc --arg tasks "[\"$WBS\"]" --arg agent "$AGENT" --arg profile "$PROFILE" --arg merge "$MERGE" \
|
|
310
310
|
'{tasks:$tasks, agent:$agent, profile:$profile, merge:$merge}')
|
|
311
|
-
spur workflow run
|
|
311
|
+
spur workflow run wrapup-pipeline.yaml --vars "$VARS"
|
|
312
312
|
```
|
|
313
313
|
|
|
314
|
-
- **Delegation:** Direct `spur workflow run
|
|
314
|
+
- **Delegation:** Direct `spur workflow run wrapup-pipeline.yaml` (no `Skill()` call — the command builds the vars JSON and invokes the workflow directly via `Bash`).
|
|
315
315
|
|
|
316
316
|
### 15. wrapall
|
|
317
317
|
|
|
318
318
|
- **Purpose:** Wrap up a batch of completed tasks — capture learnings, record metrics, sync docs, advance a feature through legal lifecycle edges, and optionally clean up branches.
|
|
319
319
|
- **Inputs:** `--since <iso-date>` filters done tasks by frontmatter `updated_at >= date` (v1 approximation). `--feature <id>` selects all tasks under a feature AND advances the feature through legal lifecycle edges (`backlog → active → verifying → done`, guards honored). `--status <s>` (default: `done`) filters by task status. `--agent <inline|auto|name>` names the wrap's model-bearing executor (default: `agent.default`); wrap is workflow-backed, so omitted `--agent` resolves to `agent.default` under objective trigger 3 (durable auditable run record required) while explicit `--agent inline` is rejected with the stable special error (headless workflow surface), `auto` tier-resolves an executor, and a name pins that executor into `vars.agent` (see [SSOT](cross-cutting.md#inline-default-execution-surface)). `--auto` skips objective confirmations. `--merge` triggers branch cleanup (irreversible HITL gate).
|
|
320
|
-
- **Backing:** `spur workflow run
|
|
320
|
+
- **Backing:** `spur workflow run wrapup-pipeline.yaml` — direct workflow invocation.
|
|
321
321
|
- **Behavior:** Resolves the task list via `spur task list --json` (filtered by `--feature`, `--since`, `--status`), resolves the executor (`agent.default` for omitted `--agent`, tier-resolved for `auto`, unchanged for a name; explicit `--agent inline` is rejected with the stable special error), emits a pre-dispatch notice naming the subprocess override — `execution surface: subprocess`, `reason: trigger 3 — durable auditable run record required`, `requested agent: <selector>`, `executor: <resolved>` — then builds `--vars '{"tasks":"[...]","feature":"<id>","agent":"<resolved>","profile":"interactive|auto","merge":"true|false"}'` and invokes the wrapup pipeline. The pipeline runs the same states as `wrap` but with the full task list and optional feature transition. Task statuses are NOT mutated. Feature transitions go through `spur feature update` so lifecycle guards apply. Branch cleanup is an irreversible HITL gate.
|
|
322
322
|
- **Vars string typing:** `tasks` is a JSON-encoded **string**, not a JSON array — `--vars` values must be strings (the CLI rejects raw arrays); `jq -nc` passes the array text through as a string value:
|
|
323
323
|
|
|
324
324
|
```bash
|
|
325
325
|
VARS=$(jq -nc --arg tasks "$TASKS" --arg feature "$FEATURE" --arg agent "$AGENT" --arg profile "$PROFILE" --arg merge "$MERGE" \
|
|
326
326
|
'{tasks:$tasks, feature:$feature, agent:$agent, profile:$profile, merge:$merge}')
|
|
327
|
-
spur workflow run
|
|
327
|
+
spur workflow run wrapup-pipeline.yaml --vars "$VARS"
|
|
328
328
|
```
|
|
329
329
|
|
|
330
|
-
- **Delegation:** Direct `spur workflow run
|
|
330
|
+
- **Delegation:** Direct `spur workflow run wrapup-pipeline.yaml` (no `Skill()` call — the command resolves tasks and invokes the workflow directly via `Bash`).
|
|
331
331
|
|
|
332
332
|
### 16. idea
|
|
333
333
|
|
|
@@ -337,9 +337,9 @@ must not be changed without updating the backing skill.
|
|
|
337
337
|
- `--skip-design` — design package off (system-design + task Design).
|
|
338
338
|
- `--approve-taste` — with `--auto`, skip **all** remaining taste pauses this run (idea-eval + design-approval). Sets `idea_approved=true` and `design_approved=true`.
|
|
339
339
|
Aliases (prefer `--approve-taste`): `--idea-approved` → `idea_approved`; `--design-approved` → `design_approved`. There is **no** `--design` force flag.
|
|
340
|
-
- **Backing:** `spur workflow run
|
|
340
|
+
- **Backing:** `spur workflow run idea-pipeline.yaml` — direct workflow invocation.
|
|
341
341
|
- **Behavior:** Builds vars from the table above and invokes the idea pipeline. Flow: discovery → **idea-eval** (taste; reject → cancelled) → feature-create → ac-generate → feature-check → system-design (conditional) → design-approval (taste) → decompose → batch-create → handoff. STOPS at handoff — no task execution, no pipeline nesting.
|
|
342
|
-
- **Delegation:** Direct `spur workflow run
|
|
342
|
+
- **Delegation:** Direct `spur workflow run idea-pipeline.yaml` (command maps flags → vars, then `Bash`).
|
|
343
343
|
- **Idea-evaluation gate:** After discovery, operator reviews `.spur/run/idea-eval-report.md` ([idea-evaluation.md](idea-evaluation.md)). Approve continues; reject/cancel → no feature. Under `--auto`, still pauses unless taste pre-cleared (`--approve-taste` / alias). Enhanced idea is a sidecar — `vars.idea` is not overwritten.
|
|
344
344
|
- **Design package (`--skip-design` only):**
|
|
345
345
|
|
|
@@ -27,7 +27,7 @@ Invariant: zero `- [ ]` entries (real or placeholder) anywhere in a `done` task
|
|
|
27
27
|
Drive the real `task-pipeline.yaml` FSM where applicable:
|
|
28
28
|
|
|
29
29
|
```
|
|
30
|
-
spur workflow run
|
|
30
|
+
spur workflow run task-pipeline.yaml --vars '{"wbs":"<wbs>"}'
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
If you hand-walk lifecycle statuses (manual `spur task update <wbs> <status>` without the
|
|
@@ -16,7 +16,7 @@ report shape.
|
|
|
16
16
|
|
|
17
17
|
Single-task execution is documented in **[execution-workflow.md](execution-workflow.md)** — this file
|
|
18
18
|
extends that procedure to the batch case. Read that file first for the single-task pipeline contract;
|
|
19
|
-
everything here assumes a task runs through
|
|
19
|
+
everything here assumes a task runs through `task-pipeline.yaml` unchanged.
|
|
20
20
|
|
|
21
21
|
**Zero engine code, zero schema changes (ADR-022).** The batch is orchestration over existing seams —
|
|
22
22
|
the status vocabulary (`packages/domain/src/planning/schema.ts`), the `dependencies[]` frontmatter
|
|
@@ -232,7 +232,7 @@ invocation in its own subagent/worktree-safe context; synthesize outcomes; recov
|
|
|
232
232
|
|
|
233
233
|
### 3.1 Per-task execution reuses the pipeline verbatim (R4)
|
|
234
234
|
|
|
235
|
-
Each task runs through the **standard single-task pipeline** —
|
|
235
|
+
Each task runs through the **standard single-task pipeline** — `task-pipeline.yaml`
|
|
236
236
|
— with no new FSM and no step edits. Interactive sequential omit/inline invokes the host
|
|
237
237
|
[inline pipeline driver](inline-pipeline-driver.md), which interprets that file; explicit/parallel
|
|
238
238
|
execution invokes the workflow engine. The batch loop inspects the result and never redefines a
|
|
@@ -242,7 +242,7 @@ step.
|
|
|
242
242
|
`agent.run` stages runs for many minutes. Always use `--async` + `spur workflow trace` polling:
|
|
243
243
|
|
|
244
244
|
```bash
|
|
245
|
-
RUN=$(spur workflow run
|
|
245
|
+
RUN=$(spur workflow run task-pipeline.yaml \
|
|
246
246
|
--vars '{"wbs":"<wbs>","profile":"auto","agent":"claude"}' --async --json | jq -r '.runId')
|
|
247
247
|
spur workflow trace "$RUN" --json | jq '{runId, status, terminalState}' # poll until status is terminal (done/failed)
|
|
248
248
|
```
|
|
@@ -421,6 +421,15 @@ isolated git worktree instead of the operator's working directory. This section
|
|
|
421
421
|
lifecycle for the sequential batch loop. Per-task worktrees and `--mode parallel` isolation stay out
|
|
422
422
|
of scope (task 0142 Slice A); `--worktree --mode parallel` is rejected.
|
|
423
423
|
|
|
424
|
+
**Single-task `dev-run` (batch of one).** `/sp:dev-run <wbs> --worktree [<name>]` runs this same
|
|
425
|
+
lifecycle with a one-task loop: WT-1…WT-6 apply unchanged, the marker's `command` is `dev-run` and
|
|
426
|
+
its `selector` is the `<wbs>` (so WT-6's command+selector fallback resolves the resume), and the
|
|
427
|
+
derived branch/directory slug is the WBS — `sp/run-<wbs>-<short-id>`. The WT-4 success condition
|
|
428
|
+
"no failed task" reads as "the task reached terminal `done` with no failed stage"; a failing gate, a
|
|
429
|
+
non-PASS verify verdict, or a HITL pause that ends the run take the WT-5 retention path. Only the
|
|
430
|
+
full pipeline is eligible — `--worktree --mode implement` is rejected (WT-7), because that mode is
|
|
431
|
+
the pipeline's implement stage and already runs in the driver's tree.
|
|
432
|
+
|
|
424
433
|
One flag, two modes (see the glossary entry for the ownership rule). Bare `--worktree` is **create
|
|
425
434
|
mode** (cut a fresh branch + sibling tree). `--worktree <name>` is **reuse mode** (attach to a tree
|
|
426
435
|
that already exists); name resolution (§ WT-2 below) runs before WT-1. The deltas each mode applies
|
|
@@ -714,9 +723,13 @@ fallback, because `<name>` was explicit and unambiguous intent.
|
|
|
714
723
|
### WT-7 — Exclusions (R8)
|
|
715
724
|
|
|
716
725
|
- **`dev-next`** does not get `--worktree` — it dispatches a single step; per-step isolation is not
|
|
717
|
-
worth the worktree cost.
|
|
726
|
+
worth the worktree cost. `dev-run` is different: it drives a whole task pipeline, so it does get
|
|
727
|
+
the flag.
|
|
718
728
|
- **`--mode parallel`** is rejected when combined with `--worktree` — per-task worktrees and
|
|
719
729
|
parallel isolation remain task 0142 Slice A.
|
|
730
|
+
- **`--mode implement`** is rejected when combined with `--worktree` on `dev-run` — that mode *is*
|
|
731
|
+
the pipeline's implement stage (bug-742) and runs in whatever tree the driver set up; a second
|
|
732
|
+
worktree would split one task's evidence across two trees.
|
|
720
733
|
- **No** create-with-name (`--worktree <name>` never creates; an unresolvable name is an error),
|
|
721
734
|
no `--worktree-keep` variant, no auto-cleanup of stale worktrees or markers from prior runs.
|
|
722
735
|
|
|
@@ -100,6 +100,13 @@ cache-conservation discipline (`plugins/sp/skills/dogfood-testing/references/mon
|
|
|
100
100
|
> - Without `--auto`: warn the operator before calling `spur workflow run` and prompt for confirmation or a plan-item override via `--vars '{"maxImplementPlanItems":"<count>"}'`.
|
|
101
101
|
> - With `--auto`: automatically append `"maxImplementPlanItems": "<count>"` to `--vars` and log a single-line notice (e.g. `Notice: task <wbs> has N plan items (>8 default cap); injecting maxImplementPlanItems override`).
|
|
102
102
|
|
|
103
|
+
**`--worktree [<name>]` wraps Step 2, on either surface.** When `/sp:dev-run --mode full` carries
|
|
104
|
+
[`--worktree`](flag-glossary.md#flag-worktree), create or adopt the worktree *before* launching the
|
|
105
|
+
pipeline, `cd` into it (`spur workflow run` and the inline driver both resolve cwd from the process),
|
|
106
|
+
and merge-or-retain after the run reports. The lifecycle is
|
|
107
|
+
[execution-batch.md § Worktree isolation](execution-batch.md#worktree-isolation---worktree-name)
|
|
108
|
+
applied to a batch of one. Rejected with `--mode implement`.
|
|
109
|
+
|
|
103
110
|
**Choose the surface before execution.** In an interactive `/sp:dev-run --mode full` invocation,
|
|
104
111
|
omit/`--agent inline` selects the [inline pipeline driver](inline-pipeline-driver.md). Read the YAML
|
|
105
112
|
at invocation time, allocate the inline run id/session provenance, record `task run-link`, and walk
|
|
@@ -120,7 +127,7 @@ VARS=$(jq -nc --arg wbs "$WBS" --arg profile auto '{wbs:$wbs, profile:$profile}'
|
|
|
120
127
|
# optional, when --agent <name|auto> is set:
|
|
121
128
|
# VARS=$(jq -nc --arg wbs "$WBS" --arg profile auto --arg agent "$AGENT" \
|
|
122
129
|
# '{wbs:$wbs, profile:$profile, agent:$agent}')
|
|
123
|
-
RUN=$(spur workflow run
|
|
130
|
+
RUN=$(spur workflow run task-pipeline.yaml --vars "$VARS" --async --json | jq -r '.runId')
|
|
124
131
|
spur workflow trace "$RUN" --follow --output # streams the run; --output shows the agent log surface
|
|
125
132
|
```
|
|
126
133
|
|
|
@@ -44,10 +44,11 @@ When `/sp:dev-verify <wbs>` produces a `PASS` verdict:
|
|
|
44
44
|
- Confirm with the operator before executing `spur feature sync <id>` (in `--auto` mode, apply forward-only proposals).
|
|
45
45
|
|
|
46
46
|
2. **Task missing `feature_id`**:
|
|
47
|
-
- Check
|
|
47
|
+
- Check the task content for the Q&A marker `feature_link_declined: true` (`spur task show <wbs> --json`).
|
|
48
48
|
- If `feature_link_declined: true`: skip linking prompt — explicit operator deferral is preserved.
|
|
49
49
|
- If unlinked and not declined: propose candidate existing features via single-task mode.
|
|
50
|
-
- If operator explicitly declines:
|
|
50
|
+
- If operator explicitly declines: preserve the existing Q&A body, append the marker, and write it through
|
|
51
|
+
`spur task update <wbs> --section Q&A --from-file <body-file>`.
|
|
51
52
|
|
|
52
53
|
## Single-task mode
|
|
53
54
|
|
|
@@ -200,16 +200,25 @@ restrictor. On `dev-refineall` it is instead one of a required pair — supply e
|
|
|
200
200
|
|
|
201
201
|
Select an execution mode: `full|implement` on `dev-run` (full pipeline vs implement-only),
|
|
202
202
|
`sequential|parallel` on `dev-runall` (serial vs fanned-out-independent-subset),
|
|
203
|
-
`fan-out|review-panel|investigation` on `dev-parallel`,
|
|
204
|
-
`briefing|structure|architecture|design|full` on `dev-reverse
|
|
203
|
+
`fan-out|review-panel|investigation` on `dev-parallel`, the reconstruction depth
|
|
204
|
+
`briefing|structure|architecture|design|full` on `dev-reverse`, and `daily|ad-hoc` on
|
|
205
|
+
`dev-find-issue` (the history-anatomy report mode). Mode selection is explicit and orthogonal
|
|
205
206
|
to `--next`.
|
|
206
207
|
|
|
208
|
+
### `--date <YYYY-MM-DD>` — local calendar day selection
|
|
209
|
+
|
|
210
|
+
**Anchor:** `#flag-date`.
|
|
211
|
+
|
|
212
|
+
Select a local calendar day on `dev-find-issue` (daily mode) and `dev-daily` (report date). DST-aware:
|
|
213
|
+
`--date <that-date>` spans the full local calendar day including any daylight-saving shift, never a
|
|
214
|
+
fixed 24-hour offset.
|
|
215
|
+
|
|
207
216
|
### `--task <wbs>` — task work or task narrowing
|
|
208
217
|
|
|
209
218
|
**Anchor:** `#flag-task`.
|
|
210
219
|
|
|
211
220
|
Connect the current command's result to task work, or narrow a history analysis to one task
|
|
212
|
-
(`dev-brainstorm`, `dev-debug`, `dev-dogfood`, `dev-find-next
|
|
221
|
+
(`dev-brainstorm`, `dev-debug`, `dev-dogfood`, `dev-find-next`). The value and
|
|
213
222
|
the effect are per-command — this flag is a family, not one behavior:
|
|
214
223
|
|
|
215
224
|
- `dev-brainstorm` `[<feature-id>]` — **creates** one task from the chosen approach, landing at
|
|
@@ -221,7 +230,6 @@ the effect are per-command — this flag is a family, not one behavior:
|
|
|
221
230
|
id names the target instead of offering rank 1.
|
|
222
231
|
- `dev-debug` `[<wbs>]` — **attaches** findings to an existing task. Optional WBS names it.
|
|
223
232
|
- `dev-dogfood` (no value) — **records** run outcomes against the task under test.
|
|
224
|
-
- `dev-history-load` `<wbs>` — narrows the `analyze` step to that task's messages.
|
|
225
233
|
|
|
226
234
|
### `--since <ref>` — lower bound on a range
|
|
227
235
|
|
|
@@ -250,10 +258,10 @@ Upper bound on a range: a git ref on `dev-changelog` (defaults to `HEAD`), or an
|
|
|
250
258
|
|
|
251
259
|
**Anchor:** `#flag-source`.
|
|
252
260
|
|
|
253
|
-
|
|
254
|
-
`
|
|
255
|
-
|
|
256
|
-
|
|
261
|
+
_(Removed 2026-08-24, HA-S1 0661.)_ The only two commands that consumed this flag;
|
|
262
|
+
`dev-find-issue` (now a `sp:history-anatomy` forwarder) and `dev-history-load` (deleted) no
|
|
263
|
+
longer declare it, so the entry is dead and removed. The underlying `spur history` surfaces
|
|
264
|
+
retain their own `--source` handling.
|
|
257
265
|
|
|
258
266
|
### `--status <s>` — filter by task status
|
|
259
267
|
|
|
@@ -280,7 +288,8 @@ Omit the design package (system-design satellite + task `### Design`) on plannin
|
|
|
280
288
|
|
|
281
289
|
**Anchor:** `#flag-output`.
|
|
282
290
|
|
|
283
|
-
Write the command's result to a file path (`dev-daily`, `dev-reverse`) instead of
|
|
291
|
+
Write the command's result to a file path (`dev-daily`, `dev-find-issue`, `dev-reverse`) instead of
|
|
292
|
+
stdout. On `dev-find-issue` (ad-hoc mode) an explicit path replaces the default run-directory write.
|
|
284
293
|
|
|
285
294
|
### `--merge` — trigger branch cleanup
|
|
286
295
|
|
|
@@ -359,8 +368,9 @@ flag sets both.
|
|
|
359
368
|
|
|
360
369
|
**Anchor:** `#flag-worktree`.
|
|
361
370
|
|
|
362
|
-
Batch commands
|
|
363
|
-
inside an isolated git worktree instead of the operator's
|
|
371
|
+
Batch commands plus single-task `dev-run` (`dev-refineall`, `dev-runall`, `dev-verifyall`,
|
|
372
|
+
`dev-run`): run the entire driver loop inside an isolated git worktree instead of the operator's
|
|
373
|
+
working directory. One flag, two modes:
|
|
364
374
|
|
|
365
375
|
- **Create mode** — bare `--worktree` (no value). Cut a fresh branch from the current HEAD's ref,
|
|
366
376
|
create a sibling worktree with a derived name, run the batch there. On a fully successful batch
|
|
@@ -385,8 +395,10 @@ merges but never removes. This keeps the continue-the-work loop stable — after
|
|
|
385
395
|
**Value binding.** The following token is consumed as `<name>` **only when it does not begin with
|
|
386
396
|
`-`**, so `--worktree --auto` is the bare create form and `--agent`/`--feature`/etc. are never
|
|
387
397
|
swallowed as the name. `--worktree=<name>` is the unambiguous spelling. `/sp:dev-next` does not get
|
|
388
|
-
the flag (single step
|
|
389
|
-
(per-task parallel isolation stays task
|
|
398
|
+
the flag (single *step*; not worth the worktree cost — unlike `dev-run`, which isolates a whole
|
|
399
|
+
task pipeline), `--worktree --mode parallel` is rejected (per-task parallel isolation stays task
|
|
400
|
+
0142), and `--worktree --mode implement` is rejected on `dev-run` (that mode *is* the pipeline's
|
|
401
|
+
implement stage and runs in the driver's tree). The full lifecycle — name resolution, dirty-tree
|
|
390
402
|
precheck, creation or adoption, crash-safe marker, merge-or-retain, and `--continue` re-entry — is
|
|
391
403
|
specified in [execution-batch.md § Worktree isolation](execution-batch.md#worktree-isolation---worktree-name).
|
|
392
404
|
Portable `git worktree` commands only; the git mechanics are reused from
|
|
@@ -14,8 +14,9 @@ interactive `/sp:dev-run --mode full` or sequential `/sp:dev-runall` invocation
|
|
|
14
14
|
passes `--agent inline`. A named executor, `--agent auto`, parallel batch mode, `spur workflow run`,
|
|
15
15
|
and `spur agent run` keep the existing subprocess path.
|
|
16
16
|
|
|
17
|
-
The project runtime definition
|
|
18
|
-
|
|
17
|
+
The project runtime definition — `task-pipeline.yaml`, resolved through the two-tier
|
|
18
|
+
project→bundled model (task 0648/0650, never an unbundled runtime path) — remains the sole
|
|
19
|
+
FSM definition. The driver MUST read that file
|
|
19
20
|
at invocation time. It must not copy the state list, actions, guards, or transition order into a
|
|
20
21
|
command, skill, script, or second workflow.
|
|
21
22
|
|
|
@@ -134,12 +135,14 @@ tasks (0617, 0619) because the sections were hand-written **before** the verdict
|
|
|
134
135
|
**overwrites** a hand-authored `## Testing` with an auto-generated "No requirements recorded" table,
|
|
135
136
|
plus replaces `## Solution` with a bare auto change-map. Creating the artifact first (PASS, with
|
|
136
137
|
requirement rows keyed by scenario title) makes `task record` the compliant path.
|
|
138
|
+
|
|
137
139
|
```bash
|
|
138
140
|
# verdict artifact first (shape: {wbs, verdict, requirements:[{id,status,evidence}], checks:[], source})
|
|
139
141
|
# then the record hop; then re-write Testing/Solution if record's backfill is thinner than intended.
|
|
140
142
|
spur task update <wbs> wip --no-lifecycle
|
|
141
143
|
spur task record <wbs> --solution-from-diff --transition testing
|
|
142
144
|
```
|
|
145
|
+
|
|
143
146
|
The engine now preserves an already-authored Testing when the verdict is UNKNOWN (task-service
|
|
144
147
|
`record` fallback-only, mirroring the Review 0593 precedent) — but the order above is still the
|
|
145
148
|
contract for the standard pipeline.
|
|
@@ -57,7 +57,7 @@ Gherkin template. Conventions:
|
|
|
57
57
|
- **Scenario-title mapping:** the scenario title is the identity key for traceability edges
|
|
58
58
|
to task files — keep them stable and unique.
|
|
59
59
|
- Generate AC inline (current session) with the BDD template
|
|
60
|
-
(
|
|
60
|
+
(`templates/bdd/gherkin.md`), or escalate to `spur agent run` only when a
|
|
61
61
|
[subprocess trigger](cross-cutting.md#inline-default-execution-surface) applies. **Thread
|
|
62
62
|
`--agent` through** when the command forwarded one. See the
|
|
63
63
|
[inline-default execution-surface contract](cross-cutting.md#inline-default-execution-surface).
|
|
@@ -220,7 +220,7 @@ skip and why. Do not pause to ask; the operator reviews the satellite afterward.
|
|
|
220
220
|
## Step 5.6: Idea pipeline (sp:dev-idea) — planning handoff contracts
|
|
221
221
|
|
|
222
222
|
`/sp:dev-idea` runs the same planning half through the idea-pipeline workflow definition
|
|
223
|
-
(
|
|
223
|
+
(`idea-pipeline.yaml` — resolved from an explicit project path or the bundled tree). Two
|
|
224
224
|
artifacts are the contract between the workflow states and the operator:
|
|
225
225
|
|
|
226
226
|
**Goal/Scope intent (feature-create).** The agent writes body-only intent files
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"version": {
|
|
13
13
|
"type": "string",
|
|
14
|
-
"description": "Config schema version (string, not integer). Current recommended: '1.
|
|
14
|
+
"description": "Config schema version (string, not integer). Current recommended: '1.2' (config-1.2 layered global/project merge, ADR-033 executor tiers + planning blocks). '1' remains accepted for backward compatibility."
|
|
15
15
|
},
|
|
16
16
|
"name": {
|
|
17
17
|
"type": "string",
|