@gobing-ai/spur 0.4.12 → 0.4.14

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 (63) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/rules/boundary/config-loading-ownership.yaml +1 -1
  3. package/config/rules/strict/runtime-boundaries.yaml +2 -2
  4. package/config/rules/typescript/output-boundaries.yaml +4 -10
  5. package/config/workflows/task-pipeline.yaml +2 -2
  6. package/package.json +1 -1
  7. package/plugins/sp/commands/dev-run.md +1 -1
  8. package/plugins/sp/plugin.json +1 -1
  9. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +3 -3
  10. package/plugins/sp/skills/spur-dev/references/dev-operations.md +4 -4
  11. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +1 -1
  12. package/plugins/sp/skills/spur-dev/references/idea-evaluation.md +1 -1
  13. package/spur.js +251 -246
  14. package/web/_astro/{BoardApp.BMprmPRc.js → BoardApp.Bjdp3XWV.js} +36 -36
  15. package/web/_astro/{BoardApp.B5rTVNd_.js → BoardApp.DCDZxLlQ.js} +1 -1
  16. package/web/_astro/{TaskDetail.Ddsur8qd.js → TaskDetail.B3vBxynO.js} +1 -1
  17. package/web/_astro/{arc.DLqVVBxP.js → arc.DcuHTB_T.js} +1 -1
  18. package/web/_astro/{architectureDiagram-3BPJPVTR.C-Pk3uAi.js → architectureDiagram-3BPJPVTR.ClOFWBON.js} +1 -1
  19. package/web/_astro/{blockDiagram-GPEHLZMM.BRO1i_Nm.js → blockDiagram-GPEHLZMM.otYyr7Zb.js} +1 -1
  20. package/web/_astro/{c4Diagram-AAUBKEIU.BU_cWu6e.js → c4Diagram-AAUBKEIU.BCjpc9LP.js} +1 -1
  21. package/web/_astro/channel.qgOLXjI_.js +1 -0
  22. package/web/_astro/{chunk-2J33WTMH.D2VXiQ2t.js → chunk-2J33WTMH.D5Wpnpt_.js} +1 -1
  23. package/web/_astro/{chunk-4BX2VUAB.BcHT772J.js → chunk-4BX2VUAB.DkQGtWNz.js} +1 -1
  24. package/web/_astro/{chunk-55IACEB6.DhDtICmo.js → chunk-55IACEB6.B7dqjAip.js} +1 -1
  25. package/web/_astro/{chunk-727SXJPM.BoKHp7gV.js → chunk-727SXJPM.BDQvnKE2.js} +1 -1
  26. package/web/_astro/{chunk-AQP2D5EJ.Chu4JRpE.js → chunk-AQP2D5EJ.D92doBX5.js} +1 -1
  27. package/web/_astro/{chunk-FMBD7UC4.wHdwKPlq.js → chunk-FMBD7UC4.C968oI5G.js} +1 -1
  28. package/web/_astro/{chunk-ND2GUHAM.ffN-M1JB.js → chunk-ND2GUHAM.AkkYC1bY.js} +1 -1
  29. package/web/_astro/{chunk-QZHKN3VN.FRubwg4S.js → chunk-QZHKN3VN.sCc-rKKo.js} +1 -1
  30. package/web/_astro/{classDiagram-4FO5ZUOK.c22tQsc_.js → classDiagram-4FO5ZUOK.pOQ9u0mY.js} +1 -1
  31. package/web/_astro/{classDiagram-v2-Q7XG4LA2.c22tQsc_.js → classDiagram-v2-Q7XG4LA2.pOQ9u0mY.js} +1 -1
  32. package/web/_astro/{cose-bilkent-S5V4N54A.B9c6fiSj.js → cose-bilkent-S5V4N54A.CRaeD6FY.js} +1 -1
  33. package/web/_astro/{cynefin-OW5HDTMX.DrZsrUHl.js → cynefin-OW5HDTMX.BiCPBu54.js} +1 -1
  34. package/web/_astro/{dagre-BM42HDAG.DG1U4b3y.js → dagre-BM42HDAG.C1-q3vkT.js} +1 -1
  35. package/web/_astro/{diagram-2AECGRRQ.CH15b-K3.js → diagram-2AECGRRQ.BSVOv30O.js} +1 -1
  36. package/web/_astro/{diagram-5GNKFQAL.BH1j7twR.js → diagram-5GNKFQAL.CHMkjJ-V.js} +1 -1
  37. package/web/_astro/{diagram-KO2AKTUF.q2zCkbAj.js → diagram-KO2AKTUF.CKY9M564.js} +1 -1
  38. package/web/_astro/{diagram-LMA3HP47.BLaaZnHV.js → diagram-LMA3HP47.B9yNJiTP.js} +1 -1
  39. package/web/_astro/{diagram-OG6HWLK6.BcpRdQwI.js → diagram-OG6HWLK6.Dk8AUGsk.js} +1 -1
  40. package/web/_astro/{erDiagram-TEJ5UH35.D7KBlqfM.js → erDiagram-TEJ5UH35.BQHR89TZ.js} +1 -1
  41. package/web/_astro/{flowDiagram-I6XJVG4X.D_gmuRqg.js → flowDiagram-I6XJVG4X.oNkWVgoK.js} +1 -1
  42. package/web/_astro/{ganttDiagram-6RSMTGT7.DzgWYniD.js → ganttDiagram-6RSMTGT7.Kz2U2nu9.js} +1 -1
  43. package/web/_astro/{gitGraphDiagram-PVQCEYII.576i3hm3.js → gitGraphDiagram-PVQCEYII.DHIZ_wPq.js} +1 -1
  44. package/web/_astro/{infoDiagram-5YYISTIA.DMCclBiz.js → infoDiagram-5YYISTIA.D0NJLcv9.js} +1 -1
  45. package/web/_astro/{ishikawaDiagram-YF4QCWOH.9Kyca4SH.js → ishikawaDiagram-YF4QCWOH.CFEfTWRG.js} +1 -1
  46. package/web/_astro/{journeyDiagram-JHISSGLW.chbdG-8q.js → journeyDiagram-JHISSGLW.Dc7IE7I4.js} +1 -1
  47. package/web/_astro/{kanban-definition-UN3LZRKU.Bds54-e0.js → kanban-definition-UN3LZRKU.D5v0xO9k.js} +1 -1
  48. package/web/_astro/{linear.D5ND9GN_.js → linear.wR5KzXnE.js} +1 -1
  49. package/web/_astro/{mermaid.core.D9N_PGbj.js → mermaid.core.BDQ2FoPd.js} +4 -4
  50. package/web/_astro/{mindmap-definition-RKZ34NQL.t0xop5vp.js → mindmap-definition-RKZ34NQL.W6_INsia.js} +1 -1
  51. package/web/_astro/{pieDiagram-4H26LBE5.DqgKh6hM.js → pieDiagram-4H26LBE5.61ihbgkK.js} +1 -1
  52. package/web/_astro/{quadrantDiagram-W4KKPZXB.DeuHVi2t.js → quadrantDiagram-W4KKPZXB.B5lEpFLo.js} +1 -1
  53. package/web/_astro/{requirementDiagram-4Y6WPE33.BdYFSG4W.js → requirementDiagram-4Y6WPE33.CmhVBVX0.js} +1 -1
  54. package/web/_astro/{sankeyDiagram-5OEKKPKP.k1LPPETJ.js → sankeyDiagram-5OEKKPKP.D7Vvj9Wf.js} +1 -1
  55. package/web/_astro/{sequenceDiagram-3UESZ5HK.DdyfpzoG.js → sequenceDiagram-3UESZ5HK.B1vPLixM.js} +1 -1
  56. package/web/_astro/{stateDiagram-AJRCARHV.DSEI8il0.js → stateDiagram-AJRCARHV.BnACmrGi.js} +1 -1
  57. package/web/_astro/{stateDiagram-v2-BHNVJYJU.CoMnQRKo.js → stateDiagram-v2-BHNVJYJU.CW4pnmc3.js} +1 -1
  58. package/web/_astro/{timeline-definition-PNZ67QCA.DM1AHNm-.js → timeline-definition-PNZ67QCA.CkzMCPnC.js} +1 -1
  59. package/web/_astro/{vennDiagram-CIIHVFJN.C-cJmVtl.js → vennDiagram-CIIHVFJN.CY4aNdAR.js} +1 -1
  60. package/web/_astro/{wardleyDiagram-YWT4CUSO.D0xMzKPb.js → wardleyDiagram-YWT4CUSO.BtoU9UFk.js} +1 -1
  61. package/web/_astro/{xychartDiagram-2RQKCTM6.BH5xJcEq.js → xychartDiagram-2RQKCTM6._9ijUUAs.js} +1 -1
  62. package/web/index.html +1 -1
  63. package/web/_astro/channel.Bs3Illhy.js +0 -1
@@ -7,7 +7,7 @@
7
7
  "plugins": [
8
8
  {
9
9
  "name": "sp",
10
- "version": "0.4.12",
10
+ "version": "0.4.14",
11
11
  "source": "./plugins/sp"
12
12
  }
13
13
  ]
@@ -67,7 +67,7 @@ rules:
67
67
  exclude:
68
68
  - "packages/config/src/**"
69
69
  - "apps/cli/src/index.ts"
70
- - "apps/cli/src/workflow-transport.ts" # boot-free composition root of `spur workflow inline|commit-guard` (PR-4)
70
+ - "apps/cli/src/workflow-transport.ts" # boot-free composition root of `spur workflow commit-guard|persist-*` (PR-4)
71
71
  - "apps/server/src/serve.ts"
72
72
  - "apps/server/src/context.ts"
73
73
  - "**/tests/**"
@@ -101,8 +101,8 @@ rules:
101
101
  - "packages/app/src/services/history-anatomy.ts" # deterministic history-anatomy cache core (task 1005 R2): fsync'd tmp+rename atomic publish, readdir digest scans and sync report reads must stay byte-stable; bundled standalone for the bare-node plugin twin (mirrors agent-usage-producer.ts / history-service.ts exemptions)
102
102
  - "packages/app/src/observability/workflow-run-log-sink.ts" # sync FD append for mid-run tail-able all-in-one run log (task 0426 / feature D2); append() is sync from the observability bus
103
103
  - "packages/app/src/observability/agent-run-log.ts" # same primitive as the sink above for the per-run agent stream (task 1076 R1, ADR-132); append() is sync from the agent service's own onOutput hook, and the byte cap needs the FD position it tracks
104
- # Inline-driver transports (script-absorption PR-4, `spur workflow inline|commit-guard`): moved
105
- # verbatim from the plugin scripts with their golden output pinned; synchronous probes and
104
+ # Workflow transports (script-absorption PR-4, `spur workflow commit-guard`): moved
105
+ # verbatim from the plugin scripts; synchronous probes and
106
106
  # atomic tmp+rename snapshot writes inside one short-lived CLI process.
107
107
  - "packages/app/src/workflow/commit-guard.ts" # .spur/run/<run>-tree-start.json atomic snapshot + target conflict-marker reads
108
108
  - "packages/app/src/workflow/persist-check.ts" # recursive evidence-tree listing + byte comparison of both trees
@@ -17,11 +17,6 @@ rules:
17
17
  type: rg
18
18
  config:
19
19
  pattern: "console\\.(log|error|warn|info|debug|dir|time|trace)"
20
- # Task 1006 R3: the inline-run driver's fail-closed stderr lines moved here from the
21
- # plugin script (byte-stable driver contract, emitted through the bundled lib under
22
- # bare node); the output seam is a CLI-layer dependency the app service cannot take.
23
- exclude:
24
- - "packages/app/src/services/inline-run-setup.ts"
25
20
 
26
21
  - id: no-raw-stdout-stderr
27
22
  description: "Use the output seam (ts-utils echo/echoError) instead of process.stdout/stderr.write directly."
@@ -30,10 +25,9 @@ rules:
30
25
  type: rg
31
26
  config:
32
27
  pattern: "process\\.(stdout|stderr)\\.write"
33
- # Tasks 1006 R1/R3: gate receipts (`check-receipt/v1`, one JSON line — the runner's parsed
34
- # stdout contract) and the inline driver's stdout lines moved here from the plugin scripts.
35
- # Both must stay byte-stable through the bundled libs under bare node; the seam would
36
- # rewrite framing the CLI/tests parse. Mirrors the history-anatomy bundling exemptions.
28
+ # Task 1006 R1: gate receipts (`check-receipt/v1`, one JSON line — the runner's parsed
29
+ # stdout contract) moved here from the plugin script. It must stay byte-stable through the
30
+ # bundled lib under bare node; the seam would rewrite framing the CLI/tests parse. Mirrors
31
+ # the history-anatomy bundling exemptions.
37
32
  exclude:
38
33
  - "packages/app/src/services/quality-gate.ts"
39
- - "packages/app/src/services/inline-run-setup.ts"
@@ -114,8 +114,8 @@ vars:
114
114
  # Timeout for the `implement` step specifically (R2a). Implementation is the
115
115
  # heaviest agent.run step (full read/write/test-probe loop); the old 600s default
116
116
  # failed five consecutive dogfood runs (bugs 742/744/746/748). Default is 45 min
117
- # (task 1108); inline hosts receive it only when their dispatch tool accepts a
118
- # timeout (inline-pipeline-driver.md § Timeout boundary).
117
+ # (task 1108); the host executor forwards it only when the host's dispatch tool
118
+ # accepts a timeout.
119
119
  # Override per run: `--vars '{"implementTimeoutMs":"3600000"}'`.
120
120
  implementTimeoutMs: "2700000"
121
121
  # Answer captured by the review's approval decision point: "yes" | "no" | "cancel"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gobing-ai/spur",
3
- "version": "0.4.12",
3
+ "version": "0.4.14",
4
4
  "description": "Spur CLI — local-first harness for mainstream coding agents: constraint checking, workflow orchestration, agent health, and history analytics. Bun-native; exposes the `spur` command.",
5
5
  "keywords": [
6
6
  "spur",
@@ -53,7 +53,7 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
53
53
 
54
54
  **Flags:**
55
55
 
56
- - `--auto` | `--agent <inline|auto|name>` — Skip objective HITL confirmations (taste/irreversible gates still pause). `--agent` names who does the model-bearing work. Interactive omit/`inline` keeps the controller and implement-only stages in this session; full mode reads `task-pipeline.yaml` as the SSOT and interprets its actions/guards through the inline driver, whose eligible `agent.run` stages dispatch once to a native subagent and otherwise run in the host (0508 eligibility — task 0687 resolved-inline) It records `stage <id> executed inline in session <session-id>` or `stage <id> executed via subagent <agent-id> (host session <session-id>)` in the run log. `auto` or a name is merged into `vars.agent` and `vars.implementAgent` and keeps the existing subprocess workflow; `--agent fleet` maps the run to `vars.executor: 'fleet'` instead (fleet dispatch, 0942). Headless `spur workflow run` / `spur agent run` is unchanged. See the [execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
56
+ - `--auto` | `--agent <inline|auto|name>` — Skip objective HITL confirmations (taste/irreversible gates still pause). `--agent` names who does the model-bearing work. Interactive omit/`inline` keeps the controller and implement-only stages in this session; full mode reads `task-pipeline.yaml` as the SSOT and runs on the host executor (`vars.executor: 'host'`; the engine walks its actions/guards and `spur workflow continue` advances each pause), whose eligible `agent.run` stages dispatch once to a native subagent and otherwise run in the host (0508 eligibility — task 0687 resolved-inline) It records `stage <id> executed inline in session <session-id>` or `stage <id> executed via subagent <agent-id> (host session <session-id>)` in the run log. `auto` or a name is merged into `vars.agent` and `vars.implementAgent` and keeps the existing subprocess workflow; `--agent fleet` maps the run to `vars.executor: 'fleet'` instead (fleet dispatch, 0942). Headless `spur workflow run` / `spur agent run` is unchanged. See the [execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
57
57
  - `--escalation-file <path>` (implement step only, 0933) — names the Q/A escalation transcript
58
58
  (default `.spur/run/<wbs>-escalation.md`). Absent on a first attempt means "no prior
59
59
  escalations". When the implement agent needs an operator decision it appends its question to
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "sp",
3
- "version": "0.4.12",
3
+ "version": "0.4.14",
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
  }
@@ -239,13 +239,13 @@ Inline avoids process startup and preserves the host session's context and tools
239
239
  subprocess dispatch it provides **no isolated workspace**, **no per-stage subprocess action
240
240
  record**, **no independent timeout or abort boundary**, and **no tier-selected executor**: the
241
241
  executor is the current coding agent. Interactive pipelines retain a run log and session provenance
242
- through the inline driver; task pipelines additionally record a task run-link. If process isolation or an independently killable
242
+ through the host executor; task pipelines additionally record a task run-link. If process isolation or an independently killable
243
243
  stage is required, select the subprocess path (`--agent auto` or `--agent <name>`).
244
244
 
245
245
  ## Shared startup contract (task 0814 R1/R3/R4/R6/R7/R8)
246
246
 
247
247
  The workflow-backed dev commands (`dev-run`, `dev-runall`, `dev-refineall`, `dev-verifyall`) share one
248
- startup order. The order is load-bearing and applies on both the inline driver and the subprocess
248
+ startup order. The order is load-bearing and applies on both the host executor and the subprocess
249
249
  path. Runs that resolve a workflow definition publish the generated plan as their first action
250
250
  (1105 R1); skill-only operations (refine/verify batches with no nested workflow) display their owned
251
251
  procedure and do not fabricate a workflow YAML.
@@ -571,7 +571,7 @@ does not earn another full-gate run:
571
571
  final gate.
572
572
  3. **Red alone**, or a failure that is not a timeout → it is a real failure. Fix it.
573
573
  4. Give the test an explicit per-test timeout and a WHY comment (see
574
- `plugins/sp/tests/inline-run-close-reason.test.ts:100-102`) as soon as EITHER (a) the same test
574
+ `plugins/sp/tests/helpers/cli-surface.test.ts:81`) as soon as EITHER (a) the same test
575
575
  load-flakes in two separate runs, OR (b) it times out once **outside the change scope** and then
576
576
  passes green alone on three consecutive isolated reruns. **Prefer making the test cheap or
577
577
  hermetic first** — a test that hashes the live checkout transitively, or writes a probe file into
@@ -76,7 +76,7 @@ each would be scope creep for one-liner procedures.
76
76
  | 4 | run | `dev-run` | `Skill()` | `sp:spur-dev` (`run` / `implement`) | `<wbs> [--mode <full\|implement>] [--agent <inline\|auto\|name>] [--auto] [--next] [--wrap] [--continue] [--worktree [<name>]] [--no-summary]` |
77
77
  | 5 | refine | `dev-refine` | `Skill()` | `sp:spur-dev` (`refine`) | `<wbs> [--focus <mode>] [--description <text>] [--depth <standard\|ready>] [--agent <inline\|auto\|name>] [--auto] [--next]` |
78
78
  | 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>]]` |
79
- | 6 | plan | `dev-plan` | `Skill()` | inline driver (`idea-pipeline`) or async workflow | `"<description>" [--feature <id>] [--parent <feature-id>] [--skip-design] [--agent <inline\|auto\|name>] [--auto]` |
79
+ | 6 | plan | `dev-plan` | `Skill()` | host executor (`idea-pipeline`) or async workflow | `"<description>" [--feature <id>] [--parent <feature-id>] [--skip-design] [--agent <inline\|auto\|name>] [--auto]` |
80
80
  | 7 | docs | _(no thin wrapper)_ | `Skill()` | `sp:doc-evolve` | `"<change description>"` |
81
81
  | 8 | changelog | `dev-changelog` | `inline` | git log + conventional-commit grouping | `[<file>] [--since <ref>] [--until <ref>] [--version <ver>]` |
82
82
  | 9 | gitmsg | `dev-gitmsg` | `inline` | bounded diff capture → concern grouping → conventional commit | `[--commit] [--squash] [--all] [--scope <path>] [--check <cmd>]` |
@@ -89,7 +89,7 @@ each would be scope creep for one-liner procedures.
89
89
  | 13 | runall | `dev-runall` | `Skill()` → agent | `sp:spur-dev` (`runall`) → `sp:super-planner` | `--tasks <selector> [--feature <id>] [--mode <sequential\|parallel\|auto>] [--concurrency <n>] [--keep-going] [--auto] [--agent <inline\|auto\|name>] [--json] [--wrap] [--next] [--continue] [--worktree [<name>]] [--no-summary] [--defer-gate]` |
90
90
  | 14 | wrap | `dev-wrap` | `Skill()` | `spur workflow run` (wrapup-pipeline) | `<wbs> [--agent <inline\|auto\|name>] [--auto] [--merge] [--dry-run]` |
91
91
  | 15 | wrapall | `dev-wrapall` | `Skill()` | `spur workflow run` (wrapup-pipeline) | `[--since <iso>] [--feature <id>] [--status <s>] [--agent <inline\|auto\|name>] [--auto] [--merge] [--dry-run]` |
92
- | 16 | idea | `dev-idea` | `Skill()` | inline driver (`idea-pipeline`) or async workflow | `"<idea>" \| --from-file <path> [--skip-design] [--agent <inline\|auto\|name>] [--auto]` |
92
+ | 16 | idea | `dev-idea` | `Skill()` | host executor (`idea-pipeline`) or async workflow | `"<idea>" \| --from-file <path> [--skip-design] [--agent <inline\|auto\|name>] [--auto]` |
93
93
  | 17 | refactor | `dev-refactor` | `Skill()` | `sp:code-refactoring` skill (thin wrapper, ADR-032) | `[<description>] [--scope <path>] [--focus <api\|architect\|tests\|ui\|auto>] [--fix <none\|blockers-first\|all>] [--check <cmd>] [--agent <inline\|auto\|name>] [--auto]` |
94
94
 
95
95
  ## Skill-backed operations
@@ -537,9 +537,9 @@ gate commands, pending questions and approval requirements.>
537
537
  `--from-file` contents) unmodified to `.spur/run/<run-id>-idea-input.md` (0887 R1); the precheck
538
538
  fails the run when that file is empty or missing, and every model-bearing stage prompt treats
539
539
  it as the authoritative ask (R2).
540
- - **Backing:** `idea-pipeline.yaml` through the inline driver for omitted/`inline`, or `spur workflow run idea-pipeline.yaml --async` for `auto`/name.
540
+ - **Backing:** `idea-pipeline.yaml` on the host executor (`vars.executor: host`, advanced by `spur workflow continue`) for omitted/`inline`, or `spur workflow run idea-pipeline.yaml --async` for `auto`/name.
541
541
  - **Behavior:** Builds vars from the table above and drives 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 (`--skip-ready`) → ready-prepare (ready checklist per created task + ready-evidence sidecar, 0788) → handoff. STOPS at handoff — no task execution, no pipeline nesting. Headless runs use one `trace --follow`; cancellation is reported stopped only when `workflow cancel --json` returns `killed: true`.
542
- - **Delegation:** Host-session inline driver by default; explicit executor selection uses the async workflow worker.
542
+ - **Delegation:** Host executor (this session answers each work item) by default; explicit executor selection uses the async workflow worker.
543
543
  - **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`, follows the report's recommendation (`drop` → cancelled; missing recommendation → pauses). Enhanced idea is a sidecar — `vars.idea` is not overwritten.
544
544
  - **Design package (`--skip-design` only):**
545
545
 
@@ -101,7 +101,7 @@ cache-conservation discipline (`plugins/sp/skills/dogfood-testing/references/mon
101
101
 
102
102
  **`--worktree [<name>]` wraps Step 2, on either surface.** When `/sp:dev-run --mode full` carries
103
103
  [`--worktree`](flag-glossary.md#flag-worktree), create or adopt the worktree *before* launching the
104
- pipeline, `cd` into it (`spur workflow run` and the inline driver both resolve cwd from the process),
104
+ pipeline, `cd` into it (`spur workflow run` and `spur workflow continue` both resolve cwd from the process),
105
105
  and merge-or-retain after the run reports. The lifecycle is
106
106
  [execution-batch.md § Worktree isolation](execution-batch.md#worktree-isolation---worktree-name)
107
107
  applied to a batch of one. Rejected with `--mode implement`.
@@ -21,7 +21,7 @@ re-author the report.
21
21
 
22
22
  **Sidecar rule:** The enhanced idea does **not** overwrite `vars.idea`. Feature-create reads both
23
23
  the original idea and this report. The operator's verbatim ask of record is the run's
24
- `.spur/run/<run-id>-idea-input.md` (persisted by the pipeline `start` state / the inline driver
24
+ `.spur/run/<run-id>-idea-input.md` (persisted by the pipeline `start` state on every executor surface
25
25
  before any processing); the `## Requirement inventory` items trace back to it.
26
26
 
27
27
  ## Template