@gobing-ai/spur 0.3.62 → 0.3.64

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 (94) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/corpus-baseline.json +3428 -3796
  3. package/config/workflows/history-anatomy.yaml +40 -11
  4. package/package.json +9 -9
  5. package/plugins/sp/README.md +8 -5
  6. package/plugins/sp/agents/expert-spur.md +20 -4
  7. package/plugins/sp/commands/dev-find-issue.md +4 -4
  8. package/plugins/sp/commands/dev-gitmsg.md +12 -6
  9. package/plugins/sp/commands/dev-gtd.md +8 -19
  10. package/plugins/sp/commands/dev-idea.md +3 -3
  11. package/plugins/sp/commands/dev-plan.md +1 -1
  12. package/plugins/sp/commands/dev-run.md +2 -2
  13. package/plugins/sp/commands/dev-runall.md +2 -2
  14. package/plugins/sp/commands/dev-wrap.md +5 -6
  15. package/plugins/sp/commands/dev-wrapall.md +5 -7
  16. package/plugins/sp/plugin.json +1 -1
  17. package/plugins/sp/references/environment-lens.md +66 -0
  18. package/plugins/sp/scripts/history-anatomy-cache.mjs +165 -15
  19. package/plugins/sp/scripts/history-anatomy-cache.ts +216 -15
  20. package/plugins/sp/skills/dogfood-testing/SKILL.md +14 -1
  21. package/plugins/sp/skills/dogfood-testing/references/report-template.md +30 -0
  22. package/plugins/sp/skills/history-anatomy/SKILL.md +3 -3
  23. package/plugins/sp/skills/history-anatomy/references/operations.md +21 -8
  24. package/plugins/sp/skills/history-anatomy/references/report-contract.md +63 -5
  25. package/plugins/sp/skills/next-router/SKILL.md +4 -4
  26. package/plugins/sp/skills/pr-reviewing/SKILL.md +2 -3
  27. package/plugins/sp/skills/redesign-web-ui/SKILL.md +184 -0
  28. package/plugins/sp/skills/redesign-web-ui/references/audit-checklist.md +121 -0
  29. package/plugins/sp/skills/redesign-web-ui/references/upgrade-techniques.md +66 -0
  30. package/plugins/sp/skills/spur-cli/references/agent.md +16 -7
  31. package/plugins/sp/skills/spur-cli/references/message.md +4 -2
  32. package/plugins/sp/skills/spur-cli/references/workflows/authoring-workflows.md +5 -0
  33. package/plugins/sp/skills/spur-cli/references/workflows/operations.md +20 -5
  34. package/plugins/sp/skills/spur-cli/references/workflows/workflow-fit-and-tuning.md +230 -0
  35. package/plugins/sp/skills/spur-cli/references/workflows.md +26 -4
  36. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +28 -34
  37. package/plugins/sp/skills/spur-dev/references/dev-operations.md +62 -20
  38. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +1 -1
  39. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +18 -8
  40. package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +7 -6
  41. package/spur.js +1012 -372
  42. package/web/_astro/{BoardApp.rkWGVwwK.js → BoardApp.CKolAjUz.js} +56 -56
  43. package/web/_astro/BoardApp.DXD--ybM.js +1 -0
  44. package/web/_astro/{TaskDetail.B7ODt_bA.js → TaskDetail.Bre7G4gC.js} +1 -1
  45. package/web/_astro/{arc.C5QRz6AQ.js → arc.7luwOGiC.js} +1 -1
  46. package/web/_astro/{architectureDiagram-3BPJPVTR.CHptn8gZ.js → architectureDiagram-3BPJPVTR.F6KaHXp-.js} +1 -1
  47. package/web/_astro/{blockDiagram-GPEHLZMM.b1nEDkDw.js → blockDiagram-GPEHLZMM.CCGHeRVi.js} +1 -1
  48. package/web/_astro/{c4Diagram-AAUBKEIU.BWj8S_Qq.js → c4Diagram-AAUBKEIU.CpqewGmd.js} +1 -1
  49. package/web/_astro/channel.DxfOFf1l.js +1 -0
  50. package/web/_astro/{chunk-2J33WTMH.q0BBuE1n.js → chunk-2J33WTMH.CB9vKa5F.js} +1 -1
  51. package/web/_astro/{chunk-4BX2VUAB.DP2KDkAU.js → chunk-4BX2VUAB.ifGXoUA3.js} +1 -1
  52. package/web/_astro/{chunk-55IACEB6.CkCId72p.js → chunk-55IACEB6.VIaRo7l8.js} +1 -1
  53. package/web/_astro/{chunk-727SXJPM.oHWzxMot.js → chunk-727SXJPM.DzPE41OS.js} +1 -1
  54. package/web/_astro/{chunk-AQP2D5EJ.DkkgxfMP.js → chunk-AQP2D5EJ.UF2QRXYF.js} +1 -1
  55. package/web/_astro/{chunk-FMBD7UC4.lmFJDvRK.js → chunk-FMBD7UC4.D2zXKa1R.js} +1 -1
  56. package/web/_astro/{chunk-ND2GUHAM.52jt0eHK.js → chunk-ND2GUHAM.Cb9bDyvx.js} +1 -1
  57. package/web/_astro/{chunk-QZHKN3VN.Cg8KEFoD.js → chunk-QZHKN3VN.nUKFBiLD.js} +1 -1
  58. package/web/_astro/{classDiagram-4FO5ZUOK.BuOUhxcD.js → classDiagram-4FO5ZUOK.DZg9K9mO.js} +1 -1
  59. package/web/_astro/{classDiagram-v2-Q7XG4LA2.BuOUhxcD.js → classDiagram-v2-Q7XG4LA2.DZg9K9mO.js} +1 -1
  60. package/web/_astro/{cose-bilkent-S5V4N54A.BRUU8E_0.js → cose-bilkent-S5V4N54A.D9STo90d.js} +1 -1
  61. package/web/_astro/{dagre-BM42HDAG.GDbfFYVV.js → dagre-BM42HDAG.D3IbwhHz.js} +1 -1
  62. package/web/_astro/{diagram-2AECGRRQ.CvIDBeJF.js → diagram-2AECGRRQ.BWTDxBe9.js} +1 -1
  63. package/web/_astro/{diagram-5GNKFQAL.DMgJjWOX.js → diagram-5GNKFQAL.XnXlonHG.js} +1 -1
  64. package/web/_astro/{diagram-KO2AKTUF.njjl-0AP.js → diagram-KO2AKTUF.CywOngCO.js} +1 -1
  65. package/web/_astro/{diagram-LMA3HP47.CcCqgP8M.js → diagram-LMA3HP47.DY1D21Iu.js} +1 -1
  66. package/web/_astro/{diagram-OG6HWLK6.Btqd-YVE.js → diagram-OG6HWLK6.DQxb59KA.js} +1 -1
  67. package/web/_astro/{erDiagram-TEJ5UH35.BbhML_Xo.js → erDiagram-TEJ5UH35.CF2U-pQZ.js} +1 -1
  68. package/web/_astro/{flowDiagram-I6XJVG4X.CkvsIgY8.js → flowDiagram-I6XJVG4X.BJK4M3in.js} +1 -1
  69. package/web/_astro/{ganttDiagram-6RSMTGT7.m8IWD_wW.js → ganttDiagram-6RSMTGT7.BSniMzdB.js} +1 -1
  70. package/web/_astro/{gitGraphDiagram-PVQCEYII.5z87HXO-.js → gitGraphDiagram-PVQCEYII.Dxg-yRov.js} +1 -1
  71. package/web/_astro/index.BVXdIsZV.css +1 -0
  72. package/web/_astro/{infoDiagram-5YYISTIA.Bvyvsd7Q.js → infoDiagram-5YYISTIA.BY4CgO_n.js} +1 -1
  73. package/web/_astro/{ishikawaDiagram-YF4QCWOH.DdWVYO87.js → ishikawaDiagram-YF4QCWOH.BmWDZtwF.js} +1 -1
  74. package/web/_astro/{journeyDiagram-JHISSGLW.C3kOlYH1.js → journeyDiagram-JHISSGLW.CpB1YWDP.js} +1 -1
  75. package/web/_astro/{kanban-definition-UN3LZRKU.CfKTUHVC.js → kanban-definition-UN3LZRKU.k-fukQX9.js} +1 -1
  76. package/web/_astro/{linear.CMDHnzgX.js → linear.BNNCobvI.js} +1 -1
  77. package/web/_astro/{mermaid.core.DN7-WrsP.js → mermaid.core.DnpzzuPU.js} +4 -4
  78. package/web/_astro/{mindmap-definition-RKZ34NQL.DcQxLvqG.js → mindmap-definition-RKZ34NQL.D9NnlLBu.js} +1 -1
  79. package/web/_astro/{pieDiagram-4H26LBE5.Nu-Inbw6.js → pieDiagram-4H26LBE5.CKhoMiyC.js} +1 -1
  80. package/web/_astro/{quadrantDiagram-W4KKPZXB.Dck2EChs.js → quadrantDiagram-W4KKPZXB.BkAygRlm.js} +1 -1
  81. package/web/_astro/{requirementDiagram-4Y6WPE33.C--E5XuW.js → requirementDiagram-4Y6WPE33.CX8ibmwc.js} +1 -1
  82. package/web/_astro/{sankeyDiagram-5OEKKPKP.B_0iRNna.js → sankeyDiagram-5OEKKPKP.Dvurpa0Y.js} +1 -1
  83. package/web/_astro/{sequenceDiagram-3UESZ5HK.PKuKr9mk.js → sequenceDiagram-3UESZ5HK.veO8c2tk.js} +1 -1
  84. package/web/_astro/{stateDiagram-AJRCARHV.ClhGHb-O.js → stateDiagram-AJRCARHV.DpMr4CO3.js} +1 -1
  85. package/web/_astro/{stateDiagram-v2-BHNVJYJU.Bv6BBnvg.js → stateDiagram-v2-BHNVJYJU.CKjso86_.js} +1 -1
  86. package/web/_astro/{timeline-definition-PNZ67QCA.BZm2ZvAH.js → timeline-definition-PNZ67QCA.DayoPp_2.js} +1 -1
  87. package/web/_astro/{vennDiagram-CIIHVFJN.Dt6yZXry.js → vennDiagram-CIIHVFJN.XNHf04O9.js} +1 -1
  88. package/web/_astro/{wardley-L42UT6IY.rUs-E00M.js → wardley-L42UT6IY.CpM_031g.js} +1 -1
  89. package/web/_astro/{wardleyDiagram-YWT4CUSO.BcWgv4cA.js → wardleyDiagram-YWT4CUSO.lIAjSkZJ.js} +1 -1
  90. package/web/_astro/{xychartDiagram-2RQKCTM6.DH-M-cX9.js → xychartDiagram-2RQKCTM6.D8_2K6U1.js} +1 -1
  91. package/web/index.html +2 -2
  92. package/web/_astro/BoardApp.Z9jMwI9G.js +0 -1
  93. package/web/_astro/channel.BJtn6CGV.js +0 -1
  94. package/web/_astro/index.nWve6EHS.css +0 -1
@@ -36,21 +36,20 @@ answer. Everything below is a consequence of that sentence, not an additional ru
36
36
  **Default: execute the backing skill directly in the current coding-agent session.** Do not invoke
37
37
  `spur agent run` when no escalation trigger applies and the operator did not select subprocess via
38
38
  the `--agent` selector. Omitting `--agent` keeps the default — the backing skill runs in the
39
- current session, and eligible model stages may dispatch once to a native subagent (task 0508). The
40
- explicit value is useful in scripts and audit output but is not the default: explicit `inline`
41
- selects the zero-dispatch carve-out below.
39
+ current session, and eligible model stages may dispatch once to a native subagent (task 0508).
40
+ Explicit `inline` resolves identically (0687 R1: inline is the default selector; R2 generalized
41
+ native-subagent eligibility from omit-only to all inline resolutions).
42
42
 
43
- > **Explicit `--agent inline` is a hard host-session guarantee: all model-bearing work executes in
44
- > the invoking host session never a native subagent, never a subprocess, never a workflow hop.
45
- > The 0508 native-subagent eligibility applies to **omitted** `--agent` only. Headless surfaces
46
- > (`spur agent run`, workflow `agent.run`, serve-side dispatch) reject `inline` with the stable
47
- > special error (exit 2 at the CLI) and take no further action — no dispatch, no `agent.default`
48
- > fallback.**
43
+ > **`--agent inline` (explicit or omitted) is an honest selector, not a dispatch guarantee. On a
44
+ > host session the work runs in-session and eligible model stages may use a native subagent (0508,
45
+ > as generalized by 0687 R2). A headless dispatch surface (`spur agent run`, workflow `agent.run`,
46
+ > serve-side dispatch) cannot host a session; there AgentService substitutes tier resolution and
47
+ > warns once naming the resolved executor (0687 R3) — no rejection, no `exit 2`.**
49
48
 
50
49
  | Value | Who does the work | Derived surface |
51
50
  | --- | --- | --- |
52
51
  | `(omitted)` | The agent running this session | Host session — host-controlled; eligible model stages may use a native subagent (0508) |
53
- | `inline` | The agent running this session | Host session — hard guarantee: zero dispatch, never a subprocess, never a workflow hop; headless surfaces reject `inline` (exit 2, stable special error) |
52
+ | `inline` | The agent running this session | Inline host session — identical to omitted (0687 R1); on headless surfaces tier resolution substitutes with a warning (0687 R3) |
54
53
  | `auto` | The role the caller declared — this command's `role:` frontmatter or the workflow step's `role:` (Layer 1, `plugins/sp/references/roles.md`); with nothing declared, `agent.default`'s role (0542) | Subprocess — a tier-resolved executor pins a specific agent/model, which the host session cannot supply |
55
54
  | `<name>` (coding agent or configured executor) | That executor | Inline when it resolves to the current session's agent; subprocess otherwise |
56
55
 
@@ -58,15 +57,9 @@ The previous `--inline` and `--subprocess` flags (feature H82, task 0413) are co
58
57
  single selector: `--inline` → `--agent inline`, `--subprocess` → `--agent auto`. The old two-flag
59
58
  form is no longer part of the command surface.
60
59
 
61
- This is a prompt-runtime rule owned by the command wrapper and its backing skill, not a branch in
62
- `AgentService`: the current coding agent is already executing the command, so inline means continuing
63
- in that session. Threading an `inline` option through `AiRunner` would still start a subprocess and
64
- would therefore be a false implementation. On a headless surface (`spur agent run` / workflow
65
- `agent.run`) explicit `inline` is **rejected** (ADR-047 G5 amendment) with the stable special error —
66
- headless surfaces cannot host a session: `--agent inline requires a host session: this surface is
67
- headless and never dispatches inline runs (no fallback to agent.default). Use 'auto', a role, or an
68
- executor name.` (exit 2 at the CLI; the exported `AGENT_INLINE_HEADLESS_MESSAGE` in
69
- `agent-service`). No further action is taken — no dispatch, no `agent.default` fallback.
60
+ The explicit-rejection carve-out above was superseded by ADR-087 (task 0687): a headless surface
61
+ substitutes tier resolution with a warning instead of rejecting see the substitution blockquote
62
+ above and `resolveAgent` in `packages/app/src/services/agent-service.ts`.
70
63
 
71
64
  ### Objective triggers override the answer
72
65
 
@@ -81,9 +74,8 @@ cannot satisfy, so it wins regardless:
81
74
  | **Workspace or credential isolation required** | The work must not share the host workspace or credentials. | `trigger 4: workspace or credential isolation required` |
82
75
 
83
76
  A trigger selects subprocess when the selector is omitted, `auto`, or a name, and the applied trigger
84
- must be named in the dispatch or result. Explicit `--agent inline` is the hard host-session carve-out:
85
- a trigger requirement that cannot be satisfied in-session rejects with the stable special error rather
86
- than dispatching a subprocess. When the operator selected a non-current executor and no objective trigger
77
+ must be named in the dispatch or result. Inline selections (omitted or explicit they are now the
78
+ same value, 0687 R1/R2) satisfy trigger requirements in-session where possible. When the operator selected a non-current executor and no objective trigger
87
79
  applies, report `operator override` rather than inventing one of the four. The trigger vocabulary and
88
80
  evidence standard are owned by
89
81
  [dispatch-surface.md](../../parallel-execution/references/dispatch-surface.md). If none can be named
@@ -125,15 +117,15 @@ model stage (task 0508): an eligible `agent.run` stage — pure-slash input, non
125
117
  native subagent with shared-worktree read/write/shell capability — dispatches **once** to that
126
118
  native subagent and joins before the driver continues; any pre-dispatch eligibility failure falls
127
119
  back to one host execution, and a failure after dispatch follows the stage's error policy with no
128
- automatic host replay. Explicit `--agent inline` is the zero-dispatch carve-out: every model stage
129
- executes in the invoking host session — no native-subagent leg. Operator
120
+ automatic host replay. Inline resolution (omitted or explicit, 0687 R1/R2) keeps the native-subagent
121
+ leg for eligible stages. Operator
130
122
  confirmation actions, `pause: true`, and approve/taste/ask decisions stay host-owned. Each inline
131
123
  model stage appends `stage <id> executed inline in session <session-id>` to its run log; a
132
124
  subagent-dispatched stage appends `stage <id> executed via subagent <agent-id> (host session
133
125
  <session-id>)` instead. `dev-plan` remains a workflow subprocess, as do `dev-run`/`dev-runall` with
134
126
  `--agent auto` or a name, parallel batches, and every headless `spur workflow run` / `spur agent
135
127
  run`. `dev-run --mode implement` continues to run its single competency in-session under omitted
136
- `--agent` or explicit `--agent inline` (zero-dispatch).
128
+ `--agent` or explicit `--agent inline` (identical values, 0687 R1).
137
129
 
138
130
  ### Executor precedence chain (R7)
139
131
 
@@ -150,11 +142,11 @@ resolved in this order; first match wins:
150
142
 
151
143
  `--agent auto` tier-resolves an executor (stage `model_policy` → `agent.default` → tier priority)
152
144
  **before** merging, so it enters the chain at step 1 already resolved to a concrete name.
153
- On a headless workflow surface, explicit `--agent inline` is rejected with the stable special error
154
- the surface cannot host a session. Interactive task wrappers consume omitted `--agent` (0508
155
- eligibility) and explicit `inline` (zero-dispatch carve-out) before this chain and use the host
156
- driver. Omitting the flag on a headless surface forwards nothing, so the spawned step resolves to
157
- `agent.default` (step 2) or the YAML literal (step 3).
145
+ On a headless workflow surface, explicit `--agent inline` substitutes tier resolution with a warning
146
+ (0687 R3) instead of rejecting it resolves exactly like an omitted flag. Interactive task wrappers
147
+ consume both inline resolutions identically (0508 eligibility as generalized by 0687 R2) before this
148
+ chain and use the host driver. Omitting the flag on a headless surface forwards nothing, so the
149
+ spawned step resolves to `agent.default` (step 2) or the YAML literal (step 3).
158
150
 
159
151
  ### Implement-only executor override (R6)
160
152
 
@@ -185,11 +177,13 @@ recovery (0482 R1). To confirm recovery is wired, watch the run log for
185
177
  `Escalating: <executor> (tier <t>) failed with resource-exhaustion; retrying on <executor>` — that
186
178
  line, not quota state, is the signal that the fallback ladder fired.
187
179
 
188
- Do not read provider quota from `spur agent doctor`. The doctor resolves provider keys from
180
+ Do not read provider auth or quota from `spur agent doctor`. The doctor resolves provider keys from
189
181
  `${PROVIDER}_API_KEY` env vars and cannot see an agent-owned credential store (e.g. omp's models
190
- config), so its row degrades to `status: usable · auth: no · model: unknown` for GLM-style executors
191
- and is useless as a preflight gate. Exhaustion is detected mid-run by the escalation classifier, not
192
- by any preflight probe.
182
+ config), so it historically degraded to `status: usable · auth: no · model: unknown` for GLM-style
183
+ executors and was useless as a preflight gate. Feature B4 removed the auth signal from the surface
184
+ entirely (no column, no `authenticated` in `--json`) precisely so nothing can read it by mistake;
185
+ the precheck probe classifies on usability alone. Exhaustion is detected mid-run by the escalation
186
+ classifier, not by any preflight probe.
193
187
 
194
188
  ### Explicit subprocess surfaces are unchanged
195
189
 
@@ -74,7 +74,7 @@ each would be scope creep for one-liner procedures.
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]` |
75
75
  | 7 | docs | _(no thin wrapper)_ | `Skill()` | `sp:doc-evolve` | `"<change description>"` |
76
76
  | 8 | changelog | `dev-changelog` | `inline` | git log + conventional-commit grouping | `[--since <ref>] [--until <ref>] [--version <ver>]` |
77
- | 9 | gitmsg | `dev-gitmsg` | `inline` | per-file diff summarygroup → conventional commit | `[--commit] [--squash] [--scope <path>]` |
77
+ | 9 | gitmsg | `dev-gitmsg` | `inline` | bounded diff captureconcern grouping → conventional commit | `[--commit] [--squash] [--all] [--scope <path>]` |
78
78
  | 10 | fixall | `dev-fixall` | `inline` | lint + test fix loop | `[<validation-command>] [--max-retry <n>] [--scope <path>] [--gate-log <path>] [--findings <anchors>]` |
79
79
  | 11 | handover | `dev-handover` | `inline` | structured doc generation | `"<blocker description>"` |
80
80
  | 12 | brainstorm | `dev-brainstorm` | `Skill()` | `sp:brainstorm` (`dev-brainstorm`) | `<topic> [--depth <basic\|detailed\|comprehensive>] [--options <n>] [--agent <inline\|auto\|name>] [--skip-discovery] [--wayfind] [--task [<feature-id>]] [--feature [<parent-id>]] [--next]` |
@@ -140,12 +140,12 @@ 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. `--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.
143
+ - **Inputs:** `<wbs>` (required). `--mode <full|implement>` selects the execution mode. `implement` invokes `sp:code-implementation` inline by default. Interactive `full` resolves the selector uniformly (task 0687): omit ≡ explicit `--agent inline`; full mode reads `task-pipeline.yaml` and drives its actions/guards in the host session — host-controlled and non-subprocess, with 0508 eligibility applying to the resolved-inline selector (eligible `agent.run` stages dispatch once to a native subagent, host fallback)). `--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
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
- - **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.
148
+ - **Delegation:** `Skill(skill="sp:spur-dev", args="run-inline $ARGUMENTS")` for interactive full omit/inline (resolved-inline semantics, task 0687); `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
 
150
150
  ### 5. refine
151
151
 
@@ -252,7 +252,7 @@ must not be changed without updating the backing skill.
252
252
  ### 6. plan
253
253
 
254
254
  - **Purpose:** Plan a feature from a description — intake → feature create → AC generation → feature check gate → decomposition → batch-create (with **Design by default**).
255
- - **Inputs:** `"<description>"` (required). `--feature <id>` links to an existing feature. `--parent <feature-id>` nests under a parent. The planning pipeline's `agent.run` stages always dispatch a subprocess; `--agent <inline|auto|name>` selector accepted — explicit `inline` is rejected on this headless surface with the stable special error (see [SSOT](cross-cutting.md#inline-default-execution-surface)). **Design package flags (unified with `/sp:dev-idea`):**
255
+ - **Inputs:** `"<description>"` (required). `--feature <id>` links to an existing feature. `--parent <feature-id>` nests under a parent. The planning pipeline's `agent.run` stages always dispatch a subprocess; `--agent <inline|auto|name>` selector accepted — `inline` substitutes tier resolution with a warning on this headless surface (task 0687) (see [SSOT](cross-cutting.md#inline-default-execution-surface)). **Design package flags (unified with `/sp:dev-idea`):**
256
256
  - **Default:** author task `design` on every batch item + feature satellite when the seam heuristic fires (**ties lean design**). There is **no** `--design` force flag.
257
257
  - `--skip-design` — skip feature satellite **and** omit task `design` fields (scaffold only; refine fills later). Sole design opt-out.
258
258
  - `--approve-taste` — with `--auto`, pre-clear design-approval taste pause when that gate is used (`design_approved=true`). Alias: `--design-approved`.
@@ -300,7 +300,7 @@ must not be changed without updating the backing skill.
300
300
  ### 14. wrap
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
- - **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).
303
+ - **Inputs:** `<wbs>` (required, positional). `--agent <inline|auto|name>` names the wrap's model-bearing executor (default: `inline`, resolving identically when omitted; task 0687); wrap is workflow-backed (headless), so omit explicit `inline` (task 0687): tier substitution under objective trigger 3 (durable auditable run record required) plus one warning naming the substituted executor. `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
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:
@@ -316,9 +316,9 @@ must not be changed without updating the backing skill.
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
- - **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).
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: `inline`, resolving identically when omitted; task 0687); wrap is workflow-backed (headless), so omit explicit `inline` (task 0687): tier substitution under objective trigger 3 (durable auditable run record required) plus one warning naming the substituted executor. `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
320
  - **Backing:** `spur workflow run wrapup-pipeline.yaml` — direct workflow invocation.
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.
321
+ - **Behavior:** Resolves the task list via `spur task list --json` (filtered by `--feature`, `--since`, `--status`), resolves the executor (omission and explicit `--agent inline` tier-substitute identically with a warning per task 0687, `auto` tier-resolves, a name pins), 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
@@ -378,14 +378,43 @@ is the procedure. The backing is a combination of git CLI, `spur` CLI, and agent
378
378
 
379
379
  ### 9. gitmsg
380
380
 
381
- - **Purpose:** Generate conventional commit message(s) from staged changes via per-file summarization → concern grouping → one message per group.
382
- - **Inputs:** `--scope <path>` (default: all staged changes) — limits diff analysis to a path. `--commit` — execute the commit (off by default; refuses on a multi-group staging unless `--squash`). `--squash` — collapse all concerns into one combined message and let `--commit` proceed on a mixed staging.
383
- - **Backing:** `inline` — per-file diff summary + concern grouping + conventional commit formatting.
381
+ - **Purpose:** Generate conventional commit message(s) for the current change set one bounded diff capture → concern grouping → one message per concern; optionally commit.
382
+ - **Inputs:** `--scope <path>` (default: the whole change set) — path filter; an explicit `--scope` always wins over change-set auto-discovery. `--all` (default: off) widen the change set past the index to every change in the tree: unstaged **and untracked** files. Omitted, the change set is the index only, which keeps pre-commit semantics stable. `--commit` (default: off) — commit the change set, one commit per concern. `--squash` (default: off) — collapse every concern into one message and one commit; implies `--commit`.
383
+ - **Backing:** `inline` — bounded diff capture + concern grouping + conventional commit formatting.
384
384
  - **Behavior:**
385
- 1. Run `git diff --cached --stat` (add `-- <path>` when `--scope` is given) for the outline. If the diff is empty, report "no staged changes" and stop.
386
- 2. Capture the full diff to a temp file (`TEMP_FILE="/tmp/gitdiff_$(date +%s)"; git diff --cached > "$TEMP_FILE" 2>&1`) so analysis reads from disk, not a giant inline blob.
387
- 3. Read `$TEMP_FILE` and write **one sentence per changed file** — what changed and why, not a line count.
388
- 4. **Group the per-file sentences by concern.** For each group derive its commit type, scope, and message:
385
+
386
+ 1. **Gather once a single shell round trip.** No temp file, no second read, no follow-up `git` call for context:
387
+
388
+ ```bash
389
+ # default: RANGE=--cached (the index)
390
+ # --all: RANGE=HEAD (plus untracked, listed below)
391
+ git rev-parse --abbrev-ref HEAD --git-dir --git-common-dir
392
+ git diff $RANGE --stat $PATHSPEC
393
+ git diff $RANGE --name-status $PATHSPEC
394
+ git diff $RANGE -U0 $PATHSPEC ':(exclude)*.lock' ':(exclude)*lock.json' ':(exclude)*.lockb' | head -c 60000
395
+ # --all only:
396
+ git ls-files --others --exclude-standard $PATHSPEC
397
+ ```
398
+
399
+ `$PATHSPEC` is `-- <path>` when `--scope` is given, empty otherwise.
400
+
401
+ **Empty index, no `--all`** — the dead-end this command used to hand back. Reading is
402
+ not a mutation, so the two cases split there:
403
+ - **No committing flag** → re-gather once with `--all` semantics and say so
404
+ (`index empty — read the whole tree instead`). A message-only run has nothing to lose by
405
+ looking wider, and the operator gets an answer instead of an errand.
406
+ - **`--commit` / `--squash`** → stop. Print the worktree counts (`N tracked, M untracked`) and
407
+ the exact re-run line (`/sp:dev-gitmsg <the same flags> --all`). Committing
408
+ untracked files is never inferred from an empty index — that is the operator's call, and it
409
+ is now one paste away rather than a guess.
410
+
411
+ Empty under `--all`, or still empty after the widen → report `no changes in <scope>` and stop.
412
+
413
+ 2. **Stay inside the budget.** `-U0` (no context lines) plus the lockfile exclusions plus the 60 KB cap is the token contract — never re-run the diff with context to "see more", never paste diff hunks into the output. If the cap truncated the diff, say so and derive the message from `--stat` + `--name-status` alone; a large mechanical change rarely needs hunk detail to be typed and scoped correctly.
414
+
415
+ 3. **Summarize only what shapes the message.** One sentence — what changed and _why_, not a line count — for each file whose change is not obvious from its path and status. Skip the obvious ones (generated files, lockfiles, pure renames, `docs/**` under a `docs` group). Past ~12 interesting files, summarize per directory instead of per file.
416
+
417
+ 4. **Group by concern**, and for each group derive type, scope, message:
389
418
  - Type from the dominant change — `feat` (new functionality) · `fix` (bug fix) · `refactor` (restructuring, no behavior change) · `docs` (documentation only) · `chore` (build/config/tooling) · `perf` · `test` · `style`.
390
419
  - Scope from the affected module/package (`cli`, `domain`, `server`, `web`, `app`, …); `--scope` overrides.
391
420
  - Message:
@@ -393,16 +422,29 @@ is the procedure. The backing is a combination of git CLI, `spur` CLI, and agent
393
422
  ```
394
423
  <type>(<scope>): <summary>
395
424
 
396
- <body — optional bullets from the group's per-file sentences>
425
+ <body — why, only when the why is not obvious>
397
426
  ```
398
427
 
399
- Summary: imperative mood, ≤72 chars, lowercase first word, no period. Body: only when the change is non-obvious.
428
+ Summary: imperative mood, ≤72 chars, lowercase first word, no period. Body explains intent and consequence; it never restates the diff. Behavior changes and pure formatting/refactor churn are **different concerns** — never one group.
429
+
430
+ 5. **Resolve the message shape without a round trip to the operator.** `--squash` → one combined
431
+ message (dominant type/scope, one body bullet per group). Otherwise one message per group, in
432
+ dependency order (refactor before the feature that uses it); a single group is that same rule
433
+ with one group.
434
+
435
+ 6. **Report, then commit if asked.** Print the resolved message(s), a copy-paste `git commit` line per message, and a one-line context header: current branch, and `linked worktree` when `--git-dir` differs from `--git-common-dir` and `git rev-parse --show-superproject-working-tree` is empty (a non-empty result means submodule, not worktree). With neither `--commit` nor `--squash`, stop here — the operator commits.
436
+
437
+ 7. **Committing (`--commit` / `--squash`).** The two flags name outcomes, not dimensions: `--commit`
438
+ commits **by concern**, `--squash` commits **everything as one**. `--squash` implies `--commit`,
439
+ so `--commit --squash` is just `--squash`, never an error.
400
440
 
401
- 5. **Resolve groups:** one group emit its message; multiple groups (default) emit one message per group **plus a split recommendation** (stage per concern, re-run); `--squash` collapse to one combined message (dominant type/scope, per-file bullets).
402
- 6. Print the resolved message + a copy-paste `git commit -m` line. With `--commit`: execute it for a single group or under `--squash`; on a multi-group staging without `--squash`, **do not commit** — print the split guidance instead (one `git commit` can't honor per-group messages).
403
- 7. `rm "$TEMP_FILE"` once done no `/tmp` diff residue (the F5 cleanup discipline).
441
+ First scan the captured diff's added lines for credentials (`password`, `secret`, `api[_-]?key`, `token`, `BEGIN [A-Z ]*PRIVATE KEY`, long base64-looking literals). On a hit: print the offending `file:line`, commit nothing, stop. Otherwise:
442
+ - `--all` `git add -A $PATHSPEC` first (this is what stages the untracked files).
443
+ - `--squash`, or `--commit` on a single group `git commit -m "$MESSAGE"`.
444
+ - `--commit` on multiple groups → **commit each group in sequence**: record the full staged file list once, then per group `git reset -q -- <all staged paths>` → `git add -- <that group's paths>` → `git commit -m "<that group's message>"`. This is the split; it needs no re-run and no re-staging by the operator.
445
+ - **Partial-staging guard:** if any path appears in _both_ `git diff --cached --name-only` and `git diff --name-only` (a `git add -p` staging), the sequence above would silently widen those commits to the whole file. Do not split — report the affected paths and commit nothing unless `--squash` was given.
404
446
 
405
- - **Invariants:** Without `--commit`, never runs `git commit` — message only, the operator commits. With `--commit`, only commits when the staging is a single concern OR `--squash` was given a mixed staging without `--squash` is reported, never silently squashed. Never leave the temp diff file behind.
447
+ - **Invariants:** With neither `--commit` nor `--squash`, never runs `git commit` — message only. Neither flag commits across a credential hit, and `--commit` never splits across a partial staging. Without `--all` the change set is the index, so plain `/sp:dev-gitmsg` keeps pre-commit semantics; only `--all` reaches unstaged and untracked files, and only a committing run (`--commit` / `--squash`) stages them. The empty-index widen is read-only and always announced — a committing run never widens its own scope. An explicit `--scope <path>` always bounds the change set, with or without `--all`. One diff capture per run, bounded and context-free — never a second, wider read.
406
448
 
407
449
  ### 10. fixall
408
450
 
@@ -147,7 +147,7 @@ On the subprocess path, when `--agent <value>` is set (passed through from the t
147
147
  `--vars '{"wbs":"<wbs>","agent":"<value>","implementAgent":"<value>"}'`. The pipeline YAML reads
148
148
  `${vars.agent}` for review/verify/test-fix and `${vars.implementAgent}` for implement — setting
149
149
  both keys ensures the pinned executor reaches every hop. The full value-semantics contract (one
150
- rule, value table, objective triggers, and headless `inline` rejection (stable special error) per the ADR-047 G5 amendment)
150
+ rule, value table, objective triggers, and headless `inline` substitution (tier resolution + one warning) per ADR-087)
151
151
  lives in [cross-cutting.md](cross-cutting.md#inline-default-execution-surface) — the SSOT.
152
152
  This file documents only the **workflow-pipeline mechanics**: how the selector reaches `agent.run`
153
153
  steps. Precedence chain: `--agent` / explicit `--vars` → `agent.default` → YAML literal (see SSOT
@@ -47,8 +47,8 @@ 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
- | `(omitted)` | The agent running this session | Host session — host-controlled; eligible model stages may use a native subagent (0508) |
51
- | `inline` | The agent running this session | Host session — hard guarantee: zero dispatch, never a subprocess, never a workflow hop; headless surfaces reject `inline` (exit 2, stable special error) |
50
+ | `(omitted)` | The agent running this session | Host session — host-controlled; eligible model stages may use a native subagent (0508). Identical to explicit `inline` (0687 R1: inline is the default selector) |
51
+ | `inline` | The agent running this session | Host session — eligible model stages may use a native subagent (0508, generalized to explicit inline by 0687 R2); on a headless dispatch surface AgentService substitutes tier resolution with a warning (0687 R3), never a rejection |
52
52
  | `auto` | The role the caller declared — this command's `role:` frontmatter or the workflow step's `role:` (Layer 1, `plugins/sp/references/roles.md`); with nothing declared, `agent.default`'s role (0542) | Subprocess |
53
53
  | `<name>` | That coding agent or configured executor | Inline when it is the current session's agent; subprocess otherwise |
54
54
 
@@ -62,10 +62,10 @@ threaded by `AgentRunActionRunner`; a pin still beats role routing permanently (
62
62
  The previous `--inline` and `--subprocess` flags (feature H82, task 0413) are collapsed into this
63
63
  selector: `--inline` → `--agent inline`, `--subprocess` → `--agent auto`. Those two flags are no
64
64
  longer part of the command surface; their anchors (`#flag-inline`, `#flag-subprocess`) are retained
65
- as stubs below so external links do not dangle. **Superseded (feature G5):** the `--inline` →
66
- `--agent inline` leg of the collapse no longer means "equivalent to omitting the flag" — explicit
67
- `inline` is the zero-dispatch host-session carve-out (see
68
- [cross-cutting.md](cross-cutting.md#inline-default-execution-surface)). Operator-layer vocabulary (task 0405): `agent` names
65
+ as stubs below so external links do not dangle. **Restored equivalence (0687 R1/R2):** the
66
+ `--inline` → `--agent inline` leg of the collapse means "equivalent to omitting the flag" again
67
+ inline is the default selector and omitted/explicit `inline` resolve identically on every surface
68
+ (see [cross-cutting.md](cross-cutting.md#inline-default-execution-surface)). Operator-layer vocabulary (task 0405): `agent` names
69
69
  the concrete coding-agent tool; `executor` remains the domain-layer role and is not a command flag.
70
70
  `inline` and `auto` are reserved values — config validation rejects an executor claiming either.
71
71
 
@@ -177,6 +177,16 @@ all dimensions.
177
177
  Limit the operation to a file or directory path (`dev-arch`, `dev-debug`, `dev-fixall`,
178
178
  `dev-gitmsg`, `dev-gtd`, `dev-simplify`) to bound the working set.
179
179
 
180
+ ### `--all` — widen the operation to everything in its domain
181
+
182
+ **Anchor:** `#flag-all`.
183
+
184
+ Drop the default narrowing and operate on the full set (`dev-gitmsg`, `dev-refresh`). On
185
+ `dev-gitmsg` the default set is the git index, and `--all` widens it to every change in the tree —
186
+ unstaged **and untracked**; on `dev-refresh` the default is one feature or task, and `--all` sweeps
187
+ every feature. An explicit `--scope <path>` still bounds the result, and always wins over
188
+ auto-discovery.
189
+
180
190
  ### `--dry-run` — print the plan without executing
181
191
 
182
192
  **Anchor:** `#flag-dry-run`.
@@ -395,9 +405,9 @@ merges but never removes. This keeps the continue-the-work loop stable — after
395
405
  **Value binding.** The following token is consumed as `<name>` **only when it does not begin with
396
406
  `-`**, so `--worktree --auto` is the bare create form and `--agent`/`--feature`/etc. are never
397
407
  swallowed as the name. `--worktree=<name>` is the unambiguous spelling. `/sp:dev-next` does not get
398
- the flag (single *step*; not worth the worktree cost — unlike `dev-run`, which isolates a whole
408
+ the flag (single _step_; not worth the worktree cost — unlike `dev-run`, which isolates a whole
399
409
  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
410
+ 0142), and `--worktree --mode implement` is rejected on `dev-run` (that mode _is_ the pipeline's
401
411
  implement stage and runs in the driver's tree). The full lifecycle — name resolution, dirty-tree
402
412
  precheck, creation or adoption, crash-safe marker, merge-or-retain, and `--continue` re-entry — is
403
413
  specified in [execution-batch.md § Worktree isolation](execution-batch.md#worktree-isolation---worktree-name).
@@ -10,9 +10,9 @@ see_also:
10
10
  # Inline Pipeline Driver
11
11
 
12
12
  This driver is the interactive control-inversion path granted by ADR-047. It applies only when an
13
- interactive `/sp:dev-run --mode full` or sequential `/sp:dev-runall` invocation omits `--agent` or
14
- passes `--agent inline`. A named executor, `--agent auto`, parallel batch mode, `spur workflow run`,
15
- and `spur agent run` keep the existing subprocess path.
13
+ interactive `/sp:dev-run --mode full` or sequential `/sp:dev-runall` invocation omits `--agent` (now
14
+ the inline default, 0687 R1) or passes `--agent inline`. A named executor, `--agent auto`, parallel
15
+ batch mode, `spur workflow run`, and `spur agent run` keep the existing subprocess path.
16
16
 
17
17
  The project runtime definition — `task-pipeline.yaml`, resolved through the two-tier
18
18
  project→bundled model (task 0648/0650, never an unbundled runtime path) — remains the sole
@@ -72,9 +72,10 @@ Action semantics come from the YAML and the workflow action contract:
72
72
  **Native-subagent dispatch (R2 eligibility, evaluated before each action):**
73
73
 
74
74
  1. The invocation is one of the two interactive inline full-pipeline surfaces (`dev-run --mode full`
75
- or sequential `dev-runall`) with the `--agent` flag **omitted**. Explicit `--agent inline` is the
76
- zero-dispatch carve-out: every model stage executes in the invoking host session the
77
- native-subagent leg below never applies to it.
75
+ or sequential `dev-runall`) and the resolved selector is inline — i.e. `--agent` **omitted**
76
+ (0687 R1 default) or `--agent inline` passed explicitly (0687 R2 generalized from omit-only).
77
+ Explicit inline and omitted resolve identically; a named executor, `auto`, parallel mode,
78
+ `spur workflow run`, and `spur agent run` keep the subprocess path.
78
79
  2. The YAML action kind is `agent.run` and its input is a pure slash command. Shell, note, file,
79
80
  guard, and operator-interaction actions remain host-executed.
80
81
  3. The current state/action has no operator-confirmation action, `pause: true`, approve/taste/ask