@gobing-ai/spur 0.3.95 → 0.3.96

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 (155) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/plugin-scripts.json +0 -54
  3. package/config/rules/boundary/sp-script-placement.yaml +19 -0
  4. package/config/rules/strict/runtime-boundaries.yaml +5 -0
  5. package/config/rules/structure/test-location.yaml +2 -0
  6. package/config/rules/typescript/no-syscall-emulation-in-boundary-mock.yaml +1 -1
  7. package/config/rules/typescript/output-boundaries.yaml +15 -2
  8. package/config/script-placement-baseline.json +51 -0
  9. package/config/workflows/feature-verification.yaml +1 -1
  10. package/config/workflows/history-anatomy.yaml +23 -11
  11. package/config/workflows/idea-pipeline.yaml +80 -85
  12. package/config/workflows/pr-review.yaml +18 -9
  13. package/config/workflows/task-pipeline.yaml +42 -95
  14. package/config/workflows/wrapup-pipeline.yaml +89 -37
  15. package/package.json +1 -1
  16. package/plugins/sp/README.md +8 -10
  17. package/plugins/sp/agents/super-reviewer.md +43 -18
  18. package/plugins/sp/commands/dev-fixgha.md +83 -0
  19. package/plugins/sp/commands/dev-gitmsg.md +8 -6
  20. package/plugins/sp/commands/dev-gtd.md +2 -2
  21. package/plugins/sp/commands/dev-idea.md +22 -12
  22. package/plugins/sp/commands/dev-plan.md +8 -9
  23. package/plugins/sp/commands/dev-review.md +22 -13
  24. package/plugins/sp/commands/dev-verifyall.md +1 -1
  25. package/plugins/sp/commands/spur-init.md +2 -2
  26. package/plugins/sp/lib/history-anatomy.generated.d.mts +112 -0
  27. package/plugins/sp/lib/history-anatomy.generated.mjs +686 -0
  28. package/plugins/sp/lib/idea-handoff.generated.mjs +5 -4
  29. package/plugins/sp/lib/inline-run.generated.d.mts +11 -0
  30. package/plugins/sp/lib/inline-run.generated.mjs +25 -8
  31. package/plugins/sp/lib/quality-gate.generated.d.mts +104 -0
  32. package/plugins/sp/lib/quality-gate.generated.mjs +438 -0
  33. package/plugins/sp/lib/residual-scan.generated.d.mts +62 -0
  34. package/plugins/sp/lib/residual-scan.generated.mjs +210 -0
  35. package/plugins/sp/lib/spur-bin.ts +36 -0
  36. package/plugins/sp/lib/step-profile.generated.d.mts +71 -0
  37. package/plugins/sp/lib/step-profile.generated.mjs +174 -0
  38. package/plugins/sp/plugin.json +1 -1
  39. package/plugins/sp/references/roles.md +1 -1
  40. package/plugins/sp/scripts/history-anatomy-cache.mjs +20 -19
  41. package/plugins/sp/scripts/history-anatomy-cache.ts +23 -928
  42. package/plugins/sp/scripts/inline-run-setup.mjs +85 -320
  43. package/plugins/sp/scripts/inline-run-setup.ts +104 -667
  44. package/plugins/sp/scripts/quality-gate.mjs +34 -19
  45. package/plugins/sp/scripts/quality-gate.ts +12 -658
  46. package/plugins/sp/scripts/residual-scan.mjs +135 -156
  47. package/plugins/sp/scripts/residual-scan.ts +102 -499
  48. package/plugins/sp/scripts/script-root.mjs +5 -1
  49. package/plugins/sp/scripts/script-root.ts +5 -1
  50. package/plugins/sp/scripts/workflow-step-profile.mjs +25 -17
  51. package/plugins/sp/scripts/workflow-step-profile.ts +21 -315
  52. package/plugins/sp/scripts/wrapup-drift-probe.mjs +8 -2
  53. package/plugins/sp/scripts/wrapup-drift-probe.ts +3 -2
  54. package/plugins/sp/scripts/wrapup-steps.mjs +10 -32
  55. package/plugins/sp/scripts/wrapup-steps.ts +8 -36
  56. package/plugins/sp/skills/code-improvement/SKILL.md +5 -4
  57. package/plugins/sp/skills/code-verification/SKILL.md +34 -9
  58. package/plugins/sp/skills/code-verification/references/verdict-schema.md +3 -3
  59. package/plugins/sp/skills/functional-review/SKILL.md +7 -4
  60. package/plugins/sp/skills/functional-review/references/verdict-schema.md +1 -1
  61. package/plugins/sp/skills/history-anatomy/references/modes.md +2 -1
  62. package/plugins/sp/skills/next-feature/references/handoff-routing.md +1 -1
  63. package/plugins/sp/skills/next-router/references/routing-table.md +1 -1
  64. package/plugins/sp/skills/spur-cli/SKILL.md +3 -3
  65. package/plugins/sp/skills/spur-cli/references/agent.md +10 -10
  66. package/plugins/sp/skills/spur-cli/references/features.md +17 -6
  67. package/plugins/sp/skills/spur-cli/references/init.md +17 -16
  68. package/plugins/sp/skills/spur-cli/references/self.md +3 -2
  69. package/plugins/sp/skills/spur-cli/references/serve.md +10 -10
  70. package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +21 -6
  71. package/plugins/sp/skills/spur-cli/references/tasks.md +14 -8
  72. package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +4 -3
  73. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +11 -9
  74. package/plugins/sp/skills/spur-dev/references/decision-brief.md +1 -1
  75. package/plugins/sp/skills/spur-dev/references/dev-operations.md +86 -70
  76. package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +3 -3
  77. package/plugins/sp/skills/spur-dev/references/execution-batch.md +77 -34
  78. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +5 -9
  79. package/plugins/sp/skills/spur-dev/references/feature-link-helper.md +3 -3
  80. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +31 -21
  81. package/plugins/sp/skills/spur-dev/references/gate-checklists.md +19 -19
  82. package/plugins/sp/skills/spur-dev/references/idea-evaluation.md +4 -3
  83. package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +29 -3
  84. package/plugins/sp/skills/spur-doctor/SKILL.md +1 -1
  85. package/plugins/sp/skills/sys-architecture/SKILL.md +3 -2
  86. package/spur.js +1495 -369
  87. package/web/_astro/{BoardApp.Cpxntzad.js → BoardApp.BIjMatT1.js} +1 -1
  88. package/web/_astro/{BoardApp.BxJuwD7I.js → BoardApp.GvjIe9Z6.js} +42 -42
  89. package/web/_astro/{TaskDetail.C5bW4WGV.js → TaskDetail.BZM3EAFx.js} +1 -1
  90. package/web/_astro/{arc.CyjRvNMY.js → arc.HkRiZnoI.js} +1 -1
  91. package/web/_astro/{architectureDiagram-3BPJPVTR.B4lWRzJA.js → architectureDiagram-3BPJPVTR.BDdK-tgZ.js} +1 -1
  92. package/web/_astro/{blockDiagram-GPEHLZMM.Be38USQ2.js → blockDiagram-GPEHLZMM.CZ9kOBxx.js} +1 -1
  93. package/web/_astro/{c4Diagram-AAUBKEIU.DT9Fj5Qx.js → c4Diagram-AAUBKEIU.DXK9qeRD.js} +1 -1
  94. package/web/_astro/channel.DlhX2MEt.js +1 -0
  95. package/web/_astro/{chunk-2J33WTMH.SeSBWLg5.js → chunk-2J33WTMH.BTD2WeX5.js} +1 -1
  96. package/web/_astro/{chunk-4BX2VUAB.DoO4VE14.js → chunk-4BX2VUAB.Ci6Qbcvk.js} +1 -1
  97. package/web/_astro/{chunk-55IACEB6.DrmTFA53.js → chunk-55IACEB6.yl3zsj7p.js} +1 -1
  98. package/web/_astro/{chunk-727SXJPM.Bi-TUb_V.js → chunk-727SXJPM.ClXZsfyR.js} +1 -1
  99. package/web/_astro/{chunk-AQP2D5EJ.B-xp8Uhi.js → chunk-AQP2D5EJ.BmKWZBcP.js} +1 -1
  100. package/web/_astro/{chunk-FMBD7UC4.DGWrDnUU.js → chunk-FMBD7UC4.By30fcb7.js} +1 -1
  101. package/web/_astro/{chunk-ND2GUHAM._BagvPDy.js → chunk-ND2GUHAM.24NmrD-k.js} +1 -1
  102. package/web/_astro/{chunk-QZHKN3VN.VOboYWQ0.js → chunk-QZHKN3VN.BN4sKdcS.js} +1 -1
  103. package/web/_astro/{classDiagram-4FO5ZUOK.D_apfHS7.js → classDiagram-4FO5ZUOK.CJpoMPb5.js} +1 -1
  104. package/web/_astro/{classDiagram-v2-Q7XG4LA2.D_apfHS7.js → classDiagram-v2-Q7XG4LA2.CJpoMPb5.js} +1 -1
  105. package/web/_astro/{cose-bilkent-S5V4N54A.DNLU_L-x.js → cose-bilkent-S5V4N54A.BraxQ2Nt.js} +1 -1
  106. package/web/_astro/{cynefin-OW5HDTMX.D8borhV-.js → cynefin-OW5HDTMX.gzoU73oL.js} +1 -1
  107. package/web/_astro/{dagre-BM42HDAG.Uc0lvjcV.js → dagre-BM42HDAG.wyDfWySU.js} +1 -1
  108. package/web/_astro/{diagram-2AECGRRQ.DDIxtDBo.js → diagram-2AECGRRQ.h2_EbMxV.js} +1 -1
  109. package/web/_astro/{diagram-5GNKFQAL.DVoDnD3H.js → diagram-5GNKFQAL.Db6dcs89.js} +1 -1
  110. package/web/_astro/{diagram-KO2AKTUF.CRubTJ-0.js → diagram-KO2AKTUF.NVwzxu_U.js} +1 -1
  111. package/web/_astro/{diagram-LMA3HP47.m9SeYcXQ.js → diagram-LMA3HP47.B-eNgDQk.js} +1 -1
  112. package/web/_astro/{diagram-OG6HWLK6.C6s2ZjV5.js → diagram-OG6HWLK6.Bsa8ZRbJ.js} +1 -1
  113. package/web/_astro/{erDiagram-TEJ5UH35.nSzr5KTj.js → erDiagram-TEJ5UH35.BospRE5Q.js} +1 -1
  114. package/web/_astro/{flowDiagram-I6XJVG4X.DrZcys16.js → flowDiagram-I6XJVG4X.DMzvHwAA.js} +1 -1
  115. package/web/_astro/{ganttDiagram-6RSMTGT7.Do4M1b-K.js → ganttDiagram-6RSMTGT7.Dmdxgd-M.js} +1 -1
  116. package/web/_astro/{gitGraphDiagram-PVQCEYII.BWc9oJ4l.js → gitGraphDiagram-PVQCEYII.CaqdO0rL.js} +1 -1
  117. package/web/_astro/index.EoZlzLK-.css +1 -0
  118. package/web/_astro/{infoDiagram-5YYISTIA.BIdOctFk.js → infoDiagram-5YYISTIA.DDVD9Wn7.js} +1 -1
  119. package/web/_astro/{ishikawaDiagram-YF4QCWOH.CV5SuG2t.js → ishikawaDiagram-YF4QCWOH.EKyCUFsL.js} +1 -1
  120. package/web/_astro/{journeyDiagram-JHISSGLW.CxE-rEJ-.js → journeyDiagram-JHISSGLW.By2-RkYB.js} +1 -1
  121. package/web/_astro/{kanban-definition-UN3LZRKU.BPRdKWs_.js → kanban-definition-UN3LZRKU.ar-WmlyR.js} +1 -1
  122. package/web/_astro/{linear.zRsuuDTE.js → linear.BnzMBgo_.js} +1 -1
  123. package/web/_astro/{mermaid.core.jAJTcMKc.js → mermaid.core.DSqeFu2Y.js} +4 -4
  124. package/web/_astro/{mindmap-definition-RKZ34NQL.BffJxfCr.js → mindmap-definition-RKZ34NQL.1XcF8Wh2.js} +1 -1
  125. package/web/_astro/{pieDiagram-4H26LBE5.CacwWaE3.js → pieDiagram-4H26LBE5.DnItHOdK.js} +1 -1
  126. package/web/_astro/{quadrantDiagram-W4KKPZXB.hXELD06-.js → quadrantDiagram-W4KKPZXB.BQQyrnBt.js} +1 -1
  127. package/web/_astro/{requirementDiagram-4Y6WPE33.DdEbPcqT.js → requirementDiagram-4Y6WPE33.Dmzxun82.js} +1 -1
  128. package/web/_astro/{sankeyDiagram-5OEKKPKP.DgaDocKv.js → sankeyDiagram-5OEKKPKP.BBIeRKYB.js} +1 -1
  129. package/web/_astro/{sequenceDiagram-3UESZ5HK.B0KScnAu.js → sequenceDiagram-3UESZ5HK.CUNVdBBf.js} +1 -1
  130. package/web/_astro/{stateDiagram-AJRCARHV.CV9M_WNc.js → stateDiagram-AJRCARHV.DlFf2sJm.js} +1 -1
  131. package/web/_astro/{stateDiagram-v2-BHNVJYJU.BOAo74Et.js → stateDiagram-v2-BHNVJYJU.DXR7I1H5.js} +1 -1
  132. package/web/_astro/{timeline-definition-PNZ67QCA.CqqepUMe.js → timeline-definition-PNZ67QCA.BcO-GyX2.js} +1 -1
  133. package/web/_astro/{vennDiagram-CIIHVFJN.DDqe4dOG.js → vennDiagram-CIIHVFJN.ChCECmmW.js} +1 -1
  134. package/web/_astro/{wardleyDiagram-YWT4CUSO.B3R9OPdO.js → wardleyDiagram-YWT4CUSO.CRaT12mD.js} +1 -1
  135. package/web/_astro/{xychartDiagram-2RQKCTM6.B3SvgXpQ.js → xychartDiagram-2RQKCTM6.B3lsHVpj.js} +1 -1
  136. package/web/index.html +2 -2
  137. package/plugins/sp/lib/artifact-digest.generated.d.mts +0 -7
  138. package/plugins/sp/lib/artifact-digest.generated.mjs +0 -48
  139. package/plugins/sp/scripts/feature-sync-bounded.mjs +0 -301
  140. package/plugins/sp/scripts/feature-sync-bounded.ts +0 -481
  141. package/plugins/sp/scripts/idea-coverage-check.ts +0 -168
  142. package/plugins/sp/scripts/inline-pipeline-parity-check.ts +0 -298
  143. package/plugins/sp/scripts/record-feature-sync.mjs +0 -63
  144. package/plugins/sp/scripts/record-feature-sync.ts +0 -84
  145. package/plugins/sp/scripts/script-contract-check.ts +0 -506
  146. package/plugins/sp/scripts/stage-registry-adapter.ts +0 -1533
  147. package/plugins/sp/scripts/surface-drift-inventory.ts +0 -989
  148. package/plugins/sp/scripts/task-evidence-precheck.ts +0 -189
  149. package/plugins/sp/scripts/task-size-precheck.ts +0 -212
  150. package/plugins/sp/scripts/transition-shim-check.ts +0 -238
  151. package/plugins/sp/scripts/validate-commands.ts +0 -689
  152. package/plugins/sp/scripts/validate-flag-contracts.ts +0 -890
  153. package/plugins/sp/scripts/verify-answer-lint.ts +0 -549
  154. package/web/_astro/channel.CI6N_tCg.js +0 -1
  155. package/web/_astro/index.CENnIEqT.css +0 -1
@@ -133,11 +133,12 @@ list this README is checked against.
133
133
  | `dev-find-conflict` | Authority-aware semantic audit across source, task, feature, and project authority files — detect conflicts, resolve claim-specific authority, and route confirmed repairs through owner surfaces |
134
134
  | `dev-find-next` | Prompt-first feature frontier prioritizer — ranks the open feature frontier by derived importance/urgency with per-candidate evidence; gates unactionable features; emits tree defects as proposals only |
135
135
  | `dev-fixall` | Fix all lint, type, and test errors systematically across the working tree |
136
+ | `dev-fixgha` | Find and fix failing GitHub Actions runs — gh fetch → diagnose → root-cause fix → commit → push → re-verify until green; optional context/filter argument |
136
137
  | `dev-simplify` | Simplify recently-changed code for clarity without changing behavior — incremental, test-after-each, revert on regression |
137
138
  | `dev-refactor` | Lens-routed refactoring with a preservation contract — taste lenses (api/architect/tests/ui) classify findings on the shared schema; cutting/breaking changes pause for operator approval; forwards to sp:code-refactoring |
138
139
  | `dev-arch` | Survey a codebase (or module tree) for shallow modules and deepening opportunities — emit a ranked MARKDOWN candidate report that feeds the planning half; never auto-refactors |
139
140
  | `dev-reverse` | Reverse-engineer a codebase — analyze unfamiliar repos, generate HLD/architecture docs, audit quality/security, and produce onboarding documentation |
140
- | `dev-gitmsg` | Generate conventional commit message(s) from the current change set via one bounded diff capture, optionally commit |
141
+ | `dev-gitmsg` | Generate conventional commit message(s) from the current change set via one bounded gather call, optionally commit |
141
142
  | `dev-gtd` | Get things done — quality gate (auto-fix) → conventional commit → push → gh verify in one flow; optional act CI simulation via `--act` |
142
143
  | `dev-changelog` | Generate changelog from git commits |
143
144
 
@@ -269,9 +270,9 @@ plugins/sp/
269
270
  │ # + careful-guard.{ts,test.ts} + context-hooks.test.ts + token-estimate.test.ts
270
271
  │ # + shared policy modules: agent-hint.ts, destructive-policy.{ts,test.ts}, task-file-policy.{ts,test.ts}
271
272
  │ # + pi/guard-extension.{ts,test.ts} (plugin.json `extensions.pi` entry point)
272
- ├── scripts/ # Executable helpers, split from prompts (ADR-031) — validate-commands.ts (thin-wrapper validator), batch-preflight.ts + scripts/<skill>/
273
+ ├── scripts/ # Executable helpers, split from prompts (ADR-031) — batch-preflight.ts + scripts/<skill>/
273
274
  │ # (daily-summary: {daily-summary, logger}.ts; dogfood-testing: {detect-pipeline-driving, validate-report}.ts)
274
- ├── tests/ # Plugin tests — command-contract.test.ts + skill-structure.test.ts + batch-preflight.test.ts + per-skill suites
275
+ ├── tests/ # Plugin tests — skill-structure.test.ts + batch-preflight.test.ts + per-skill suites (command-contract moved to scripts/commands/)
275
276
  ├── evals/ # Skill behavioral eval harness (scenarios + judge + run-eval runner)
276
277
  ├── plugin.json # Marketplace entry
277
278
  └── README.md # This file
@@ -399,7 +400,7 @@ hand-editable source for the operator command surface. Per-platform adapters are
399
400
  output** owned by `superskill` (`superskill install sp`) and never committed here. Plugin `sp` ships
400
401
  no per-platform artifacts — only the platform-independent thin wrappers.
401
402
 
402
- **Thin-wrapper contract** is enforced by `scripts/validate-commands.ts`:
403
+ **Thin-wrapper contract** is enforced by `scripts/commands/validate-commands.ts`:
403
404
 
404
405
  ```bash
405
406
  bun run validate-commands # validate all 39 commands
@@ -415,7 +416,7 @@ gate (a) is strengthened: the ordered three-heading set `## Argument Flags` →
415
416
  `## Implementation` is required, and gate (e) checks the `argument-hint` is syntax-only (no
416
417
  Markdown links), the `## Argument Flags` table has exactly `Flag | Description | Default` columns,
417
418
  the command carries exactly one glossary reference, and canonical hint tokens have bidirectional
418
- parity with table rows. The same gates are tested in `tests/command-contract.test.ts` and
419
+ parity with table rows. The same gates are tested in `scripts/commands/command-contract.test.ts` and
419
420
  `tests/command-flag-parity.test.ts`. See
420
421
  `docs/design/dev-command-argument-contract.md` for the full contract.
421
422
 
@@ -506,15 +507,12 @@ hold `SKILL.md` and prompt-side companions only.
506
507
  | `hooks/context-*.ts` | Runtime for the three registered context hooks (session-start, post-tool, session-stop) — token-cost estimation + ledger append for `sp:indexed-context` |
507
508
  | `hooks/careful-guard.ts` | Opt-in destructive-command guard (unwired — see Hooks above) |
508
509
  | `scripts/batch-preflight.ts` | Pure TABLE A STOP evaluation for `super-planner` — skip doomed pipeline launches without spawning a Skill subprocess; recovery hints map stuck statuses to a single `/sp:dev-*` hop |
509
- | `scripts/workflow-step-profile.ts` | Read-only step profile from `spur workflow trace` — per node and action-kind durations, idle gaps, session mode and `cacheHit` coverage, plus the ADR-115 cache-window flags `sp:spur-doctor` turns into workflow-optimization proposals |
510
+ | `scripts/workflow-step-profile.ts` | Thin glue over the generated lib bundle (`lib/step-profile.generated.mjs` from `packages/app/src/workflow/step-profile.ts`) — read-only step profile from `spur workflow trace`: per node and action-kind durations, idle gaps, session mode and `cacheHit` coverage, plus the ADR-115 cache-window flags `sp:spur-doctor` turns into workflow-optimization proposals |
510
511
  | `scripts/dogfood-testing/detect-pipeline-driving.ts` | Word-boundary detector for pipeline-driving testees (leading-space invariant) |
511
512
  | `scripts/dogfood-testing/validate-report.ts` | Pure `validateReport(md)` — footer-mandatory + 7-check finalize-or-abort contract with stable error codes |
512
513
  | `scripts/daily-summary/{daily-summary,logger}.ts` | ccusage + git-history orchestration helpers for `sp:daily-summary` |
513
- | `scripts/feature-sync-bounded.ts` | Bounded retry-suppression wrapper for `spur feature sync` during batch/wrap-up runs — suppresses identical L4-blocked repeats |
514
- | `scripts/stage-registry-adapter.ts` | dev-next golden-path adapter over the canonical stage registry — TABLE A/B/C resolution bridge for the status-aware facade |
515
- | `scripts/task-size-precheck.ts` | Pipeline size precheck guard (R2) — evaluates R-item/Plan-count limits to PASS/FAIL |
516
514
  | `scripts/task-diffstat.ts` | 0943 triage-lane diffstat producer — numstat + untracked scan vs the run base; writes `<wbs>-diffstat.json` with the sensitive-path flag; fails safe (sensitive) |
517
- | `scripts/validate-flag-contracts.ts` | Mechanical consistency gate — compares flag claims across command files, flag-glossary, cross-cutting, dev-operations, and ADR; reports disagreements |
515
+ | `scripts/commands/validate-flag-contracts.ts` | Mechanical consistency gate — compares flag claims across command files, flag-glossary, cross-cutting, dev-operations, and ADR; reports disagreements |
518
516
  | `*.test.ts` | Unit suites — in `hooks/` for guards, in `tests/<skill>/` per ADR-031 pairing |
519
517
 
520
518
  **Design principle:** Scripts are **deterministic enforcement**. Unlike skills (which are advisory
@@ -26,7 +26,8 @@ skills: [sp:code-verification, sp:functional-review, sp:code-improvement]
26
26
 
27
27
  The **review specialist** for the sp plugin. Runs the multi-dimensional review defined by
28
28
  `/sp:dev-review` — functional traceability, SECUA quality, and architectural depth — either
29
- standalone (a source path or a task WBS) or as the pipeline's Phase 7 review step.
29
+ standalone (a task, a task set, a source path, or a path list) or as the pipeline's Phase 7
30
+ review step.
30
31
 
31
32
  ## Role
32
33
 
@@ -44,8 +45,8 @@ write `## Review`. This coordinator is the single `## Review` writer in coordina
44
45
  fallback only and never overwrites authored Review.
45
46
 
46
47
  Your job: establish scope, dispatch each requested dimension to its skill, collect findings, merge
47
- them into a ranked report, and write the report to the task's `## Review` section (pipeline mode) or
48
- emit it as advisory output (standalone mode).
48
+ them into a ranked report, and write the report to the task's `## Review` section (per task target)
49
+ or emit it as advisory output (path target).
49
50
 
50
51
  ## When to use
51
52
 
@@ -57,9 +58,13 @@ emit it as advisory output (standalone mode).
57
58
 
58
59
  ### Direct-Entry (standalone)
59
60
 
60
- Invoked by the operator or `/sp:dev-review <wbs|path>`. You run the full multi-dimensional review
61
- and emit the ranked findings. Advisory by default — the operator decides what to act on. Only
62
- when invoked under the pipeline (or with `--next`) do blocker/major findings block a gate.
61
+ Invoked by the operator or `/sp:dev-review` — usually as the coordinator definition the
62
+ invoking session acts under (`/sp:dev-review` runs its review inline; it does not dispatch this
63
+ agent). The target kind decides the output contract: **WBS target → the merged report is written
64
+ to the task's `## Review` section** (via `spur task update <wbs> --section Review --from-file`);
65
+ **path target → advisory output only** (no task mutation). With multiple targets the contract
66
+ applies per target — see [Multi-target coordination](#multi-target-coordination-task-1023) below.
67
+ Only when invoked under the pipeline do blocker/major findings block a gate.
63
68
 
64
69
  ### Pipeline Phase 7
65
70
 
@@ -68,12 +73,29 @@ Invoked by `task-pipeline.yaml`'s `review` step. The pipeline hands you the task
68
73
  return a PASS/PARTIAL/FAIL verdict to the pipeline's `approve(HITL)` gate. `blocker`/`major`
69
74
  findings block the gate; `minor`/`advisory` are recorded but do not block.
70
75
 
76
+ ### Multi-target coordination (task 1023)
77
+
78
+ - **Task targets (`--tasks <selector>` / `--feature <id>[,<id>]`).** The set resolves once through
79
+ the batch selector grammar ([execution-batch.md § Step 1](../skills/spur-dev/references/execution-batch.md#step-1--selector-resolution-r1))
80
+ and freezes. Fan out one WBS-mode review per task and write each task's **own** merged
81
+ `## Review` — never merge two tasks into one Review. Tasks in `backlog`/`todo`/`blocked` are
82
+ reported **NOT-STARTED** and skipped (§ 3a outcome vocabulary); a per-task failure does not stop
83
+ the remaining tasks. End the run with a combined summary table (WBS, verdict, P1/P2 counts).
84
+ - **Path targets (`--scope <path>[,<path>]`).** Paths must exist, are normalized, and
85
+ nested/duplicate paths are merged. Run one path-scope sub-review (Step 3p) per surviving path —
86
+ each eligible for native-subagent dispatch per
87
+ [dispatch-surface.md](../skills/parallel-execution/references/dispatch-surface.md) — then merge
88
+ the fragments, run **one** cross-path architecture pass (`sp:code-improvement` over the
89
+ inter-path imports), and emit **one** advisory report. No task mutation.
90
+ - **`--triage` with multiple targets** buckets findings across all targets once; identical
91
+ `file:line` findings are deduped before bucketing.
92
+
71
93
  ## Skill invocation
72
94
 
73
95
  | Platform | Invocation |
74
96
  | ---------- | ----------- |
75
- | Claude Code | Spawned by `/sp:dev-review` → `Skill(skill="sp:code-verification"/"sp:functional-review"/"sp:code-improvement", args="...")` dispatch |
76
- | Other platforms | Invoke the three skills' review modes directly; this agent is the dispatcher |
97
+ | Claude Code | The review coordinator dispatches `Skill(skill="sp:code-verification"/"sp:functional-review"/"sp:code-improvement", args="...")` — under `/sp:dev-review` the coordinator is the invoking session (this agent is not dispatched); when this agent is dispatched directly, it dispatches the same skills |
98
+ | Other platforms | The coordinator invokes the three skills' review modes directly — this agent when dispatched, the invoking session under `/sp:dev-review` |
77
99
 
78
100
  ## Dispatch surface
79
101
 
@@ -94,13 +116,17 @@ HITL gate unless `--auto` was passed.
94
116
 
95
117
  ### Always
96
118
 
97
- - [ ] Establish scope first: WBS mode (task diff) or path mode (source glob). Derive the diff
98
- scope the same way `sp:code-verification` Step 3 does.
119
+ - [ ] Establish scope first per target kind: task targets (task diff → `sp:code-verification`
120
+ Step 3, one review per task) or path targets (tracked files under the path →
121
+ `sp:code-verification` Step 3p, one sub-review per path). Defer to that recipe — no
122
+ restated copy.
99
123
  - [ ] Dispatch each requested dimension to its owning skill — do not inline the review logic.
100
124
  - [ ] Merge findings into a single ranked report, emitting native priority cells
101
125
  (`P1 (blocker)` > `P2 (major)` > `P3 (minor)` > `P4 (advisory)` — see Output Format).
102
- - [ ] In pipeline mode, write the merged report to the task's `## Review` section via
103
- `spur task update <wbs> --section Review --from-file`; in standalone mode, emit as output.
126
+ - [ ] With a WBS target (standalone or pipeline), write the merged report to that task's
127
+ `## Review` section via `spur task update <wbs> --section Review --from-file` — per task
128
+ under a task set, then the combined summary table; with a path target, emit as advisory
129
+ output (one merged report for a path list, including the cross-path architecture pass).
104
130
  - [ ] Cite `file:line` evidence for every finding — no vague "implemented correctly."
105
131
  - [ ] Apply the honesty gate: no PASS verdict without fresh, pasted verification evidence.
106
132
 
@@ -139,10 +165,11 @@ fails it. One explicit mapping, no transcription step anywhere downstream:
139
165
  Severity words stay visible in the same cell — the mapping adds the machine-readable label, it does
140
166
  not replace the semantics.
141
167
 
142
- **Section-relative headings.** In pipeline mode the report body is written *into* the task's
143
- `### Review` section, so every heading inside it MUST be `####` or deeper. A `##`/`###` heading in
144
- the body becomes a new top-level task section and corrupts the document. In standalone mode
145
- (emitted as output, not written to a task) the same body may be rendered one level shallower.
168
+ **Section-relative headings.** In WBS mode (standalone or pipeline) the report body is written
169
+ *into* the task's `### Review` section, so every heading inside it MUST be `####` or deeper. A
170
+ `##`/`###` heading in the body becomes a new top-level task section and corrupts the document. With
171
+ a path target (emitted as output, not written to a task) the same body may be rendered one level
172
+ shallower.
146
173
 
147
174
  ```markdown
148
175
  #### Review Report — <wbs|path>
@@ -180,8 +207,6 @@ rejected by the checker, and so they should be:
180
207
  | 1 | P4 (advisory) | — | No P1–P3 findings: 6 changed files reviewed across all six dimensions; R1–R3 traceable to tests | `packages/app/src/workflow/proof-input-fingerprint.ts:102-160` |
181
208
  ```
182
209
 
183
- With `--json`, emit the same shape as a JSON object for machine consumption.
184
-
185
210
  ## Out of scope
186
211
 
187
212
  - Implementing fixes (that's `sp:code-implementation` / `sp:super-coder`).
@@ -0,0 +1,83 @@
1
+ ---
2
+ description: Find and fix failing GitHub Actions runs — gh fetch → diagnose → root-cause fix → commit → push → re-verify until green
3
+ role: coder
4
+ argument-hint: "[<context>] [--max-retry <n>] [--no-push]"
5
+ allowed-tools: ["Bash", "Read", "Write", "Edit", "Grep", "Glob"]
6
+ ---
7
+
8
+ # Dev Fixgha
9
+
10
+ Self-contained all-in-one GitHub Actions repair loop (no backing skill): fetch failing runs with
11
+ `gh`, diagnose each from its failed-step log, fix the root cause locally, commit, push, and watch the
12
+ new runs — repeating until every in-scope workflow is green. Invoking this command is the operator's
13
+ explicit request to edit `.github/workflows/` when the root cause lives there.
14
+
15
+ ## Argument Flags
16
+
17
+ | Flag | Description | Default |
18
+ | --- | --- | --- |
19
+ | `<context>` | Free-text context and/or search filter: a workflow name or file, run ID/URL, PR number, branch, job/step name, or a hint about the failure. Narrows which runs are in scope and seeds the diagnosis. | latest failing run per workflow on the current branch |
20
+ | `--max-retry <n>` | Max fix → push → verify iterations before stopping with the remaining failures. | 3 |
21
+ | `--no-push` | Fix and commit locally but do not push or re-verify on GitHub. | off |
22
+
23
+ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
24
+
25
+ ## Usage
26
+
27
+ /sp:dev-fixgha [<context>] [--max-retry <n>] [--no-push]
28
+
29
+ ## Implementation
30
+
31
+ Execute the stages below in order. Parse `gh` output with `--json` / `--jq`; never scrape tables.
32
+ A stage that cannot succeed after `--max-retry` iterations stops the run with the specific failing
33
+ output — do not silently skip a real failure.
34
+
35
+ **1 — Preflight.** `gh auth status` must pass (otherwise stop and tell the operator to run
36
+ `! gh auth login`). Resolve the repo (`gh repo view --json nameWithOwner`), the current branch, and
37
+ `HEAD`. The working tree must be clean of unrelated changes (one writer per tree) — if it is not,
38
+ stop and report instead of mixing them into CI-fix commits.
39
+
40
+ **2 — Collect failing runs.** Build the in-scope set from `<context>`:
41
+
42
+ - run ID / URL → that run (`gh run view <id> --json databaseId,workflowName,headBranch,headSha,conclusion,jobs,url`);
43
+ - PR number → `gh pr checks <n> --json name,state,link,workflow` (failed checks only);
44
+ - workflow name/file → `gh run list --workflow <wf> --branch <branch> --limit 10 --json databaseId,workflowName,headSha,status,conclusion,event,url`;
45
+ - otherwise → `gh run list --branch <branch> --limit 30 --json …` and keep the **latest** run per
46
+ workflow whose `conclusion` is `failure`, `startup_failure`, or `timed_out`. An older failure
47
+ already superseded by a green run of the same workflow is out of scope.
48
+
49
+ Free text that is not an identifier narrows by workflow/job/step name and is carried into diagnosis.
50
+ If `actionlint` is on `PATH`, also run it over `.github/workflows/` and add its findings as
51
+ static issues. Nothing failing and no static findings → report "all GitHub Actions green" and stop.
52
+
53
+ **3 — Diagnose each failure.** Pull only the failing output: `gh run view <id> --log-failed`
54
+ (bounded — keep the tail around the first error per failed step, not the whole log). Classify:
55
+
56
+ | Class | Signal | Action |
57
+ | --- | --- | --- |
58
+ | Code | test / lint / typecheck / build error | Reproduce locally with the failing step's command, then fix the source. |
59
+ | Workflow | YAML / expression error, bad action ref or deprecated version, missing `permissions`, wrong runner/tool version, cache/path mismatch | Fix the workflow file minimally. |
60
+ | Environment | CI-only behavior (OS, root vs non-root, missing binary, timezone, case-sensitive FS) | Fix the code or workflow so both environments are correct — never weaken a correct test. |
61
+ | Transient | network/registry timeout, runner outage, rate limit, no code/workflow cause | `gh run rerun <id> --failed` once; if it fails again, reclassify. |
62
+ | External | missing/expired secret, repo setting, billing, third-party outage | Cannot be fixed from the tree — record and report for the operator. |
63
+
64
+ **4 — Fix.** Root cause only, surgical diff. Forbidden shortcuts: `continue-on-error`, `if: false`,
65
+ deleting or skipping jobs/steps/tests, loosening thresholds, `--no-verify`, force-push, and any edit
66
+ to secrets. After fixing, run the local quality gate (`bun run check`, or the project's equivalent);
67
+ if red, run `/sp:dev-fixall "<gate-command>"` before continuing.
68
+
69
+ **5 — Commit.** Follow the gitmsg procedure in
70
+ [dev-operations.md](../skills/spur-dev/references/dev-operations.md#9-gitmsg) to produce one
71
+ conventional commit per iteration (typically `fix(ci): …` for workflow changes, or the owning
72
+ `fix(<scope>): …` for code), whose body names the run IDs it addresses. Commit with the
73
+ repository's hooks enabled.
74
+
75
+ **6 — Push and re-verify.** Skip when `--no-push` (report the commits and stop). Otherwise
76
+ `git push` (set upstream if missing; on rejection, pull `--rebase` then retry — never force). Find
77
+ the runs for the pushed SHA (`gh run list --commit <sha> --json databaseId,workflowName,status,conclusion`;
78
+ poll briefly — runs can take a few seconds to appear), then `gh run watch <id> --exit-status` for
79
+ each in-scope workflow. Any new failure feeds back into stage 3. Stop when all in-scope workflows
80
+ are green or `--max-retry` iterations are spent.
81
+
82
+ **7 — Report.** One table: workflow · run ID · class · root cause · fix (`path:line`) · commit ·
83
+ final status. List External/unfixed items separately with the exact operator action required.
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Generate conventional commit message(s) from the current change set via one bounded diff capture, optionally commit
2
+ description: Generate conventional commit message(s) from the current change set via one bounded gather call, optionally commit
3
3
  role: scribe
4
4
  argument-hint: "[--commit] [--squash] [--all] [--scope <path>]"
5
5
  allowed-tools: ["Bash", "Read"]
@@ -28,8 +28,10 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
28
28
 
29
29
  Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#9-gitmsg) (gitmsg).
30
30
 
31
- One diff capture per run — `-U0`, lockfiles excluded, 60 KB cap — is the token contract; never re-read
32
- the diff wider. Neither `--commit` nor `--squash` → messages only. `--commit` → one commit per concern, split automatically,
33
- so the operator is never asked to re-stage and re-run. `--squash` → one commit for everything.
34
- An empty index widens to the whole tree only on a message-only run, and says so; a committing run
35
- stops there and prints the exact `--all` re-run line instead of guessing.
31
+ One gather call per run (per-file-capped `-U0` diff including untracked content, recent subjects for
32
+ scope vocabulary, secret and partial-staging guards — git + shell only), then at most one commit call.
33
+ Never re-read the diff wider. Neither `--commit` nor `--squash` → messages only. `--commit` → one
34
+ commit per concern, split automatically, so the operator is never asked to re-stage and re-run.
35
+ `--squash` → one commit for everything. An empty index widens to the whole tree only on a
36
+ message-only run, and says so; a committing run stops there and prints the exact `--all` re-run line
37
+ instead of guessing.
@@ -63,8 +63,8 @@ Then stop the run (this stage failed). The operator can proceed by re-running wi
63
63
 
64
64
  **3 — Generate a conventional commit message.** Follow the gitmsg procedure (the same one
65
65
  `/sp:dev-gitmsg` runs) — see
66
- [dev-operations.md](../skills/spur-dev/references/dev-operations.md#9-gitmsg): one bounded diff
67
- capture, concern grouping, conventional `<type>(<scope>): <summary>` formatting. Two deviations
66
+ [dev-operations.md](../skills/spur-dev/references/dev-operations.md#9-gitmsg): one bounded gather
67
+ call, concern grouping, conventional `<type>(<scope>): <summary>` formatting. Two deviations
68
68
  belong to this flow: read the change set with `--all` semantics (this stage commits everything the
69
69
  gate just proved green, not only what happens to be staged), and resolve multiple concerns to a
70
70
  **single combined message** (dominant type/scope, one body bullet per concern) so the push is
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: Turn a vague idea into a feature with AC and a decomposed task batch — discovery, idea-eval, feature-create, AC, feature-check, system-design, decompose, batch-create (Design by default), handoff
3
3
  role: planner
4
- argument-hint: "\"<idea>\" [--from-file <path>] [--auto] [--skip-design] [--approve-taste] [--agent <inline|auto|name>]"
4
+ argument-hint: "\"<idea>\" | --from-file <path> [--skip-design] [--agent <inline|auto|name>] [--auto]"
5
5
  allowed-tools: ["Bash", "Read", "Skill", "AskUserQuestion"]
6
6
  ---
7
7
 
@@ -16,29 +16,39 @@ contract below maps to that workflow's transitions.
16
16
  | --- | --- | --- |
17
17
  | `"<idea>"` | Vague idea to turn into a feature with AC and tasks. | required (or `--from-file`) |
18
18
  | `--from-file` `<path>` | Read the idea from a file instead of the positional argument. Mutually exclusive with `"<idea>"` — exactly one must be present. The file's contents become the verbatim idea text (trimmed of surrounding whitespace only). Useful for long or multiline asks that are awkward to quote. | off |
19
- | `--auto` | Skip objective HITL gates only (taste gates still pause). | off |
20
- | `--skip-design` | Omit system-design and per-task Design. | off |
21
- | `--approve-taste` | With `--auto`: set idea_approved + design_approved so idea-eval / design-approval do not pause. | off |
22
- | `--idea-approved` | Compatibility alias for idea_approved=true (subset of --approve-taste). | off |
23
- | `--design-approved` | Compatibility alias for design_approved=true (subset of --approve-taste). | off |
19
+ | `--skip-design` | Omit system-design (and its approval gate) and per-task Design. | off |
24
20
  | `--agent` `<inline\|auto\|name>` | Who runs the model-bearing ideation. Omission and `inline` drive `idea-pipeline.yaml` in this session with zero external agent/workflow processes; `auto` tier-resolves an executor and a name pins one, both through the async workflow worker. | inline |
21
+ | `--auto` | Accept the pipeline's recommendation at every operator gate (see below). | off |
25
22
 
26
23
  For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
27
24
 
28
25
  ## Usage
29
26
 
30
27
  ```
31
- /sp:dev-idea "<idea>"
32
- [--auto] # skip objective HITL only (feature-check, batch-create)
33
- [--skip-design] # design package off (system-design + task Design)
34
- [--approve-taste] # with --auto: skip idea-eval + design-approval pauses
28
+ /sp:dev-idea "<idea>" | --from-file <path>
29
+ [--skip-design] # design package off (system-design + task Design)
35
30
  [--agent <inline|auto|name>] # inline is the current session; auto/name are async workers
31
+ [--auto] # no operator pauses; follow each gate's recommendation
36
32
  ```
37
33
 
38
34
  There is **no** `--design` force flag. Design is default-on; only `--skip-design` opts out.
39
35
 
40
- **Aliases (one-release / scripts):** `--idea-approved` and `--design-approved` still map into the same
41
- vars as subsets of `--approve-taste` (`idea_approved` / `design_approved`). Prefer `--approve-taste`.
36
+ **Removed flags:** `--approve-taste`, `--idea-approved`, and `--design-approved` are folded into
37
+ `--auto`. If passed, ignore them with a one-line notice; do not treat them as `--auto`.
38
+
39
+ **Operator gates.** Every gate is asked as one `AskUserQuestion` [decision brief](../skills/spur-dev/references/decision-brief.md):
40
+ the recommended option first, then options with their reasoning. The operator picks; they never
41
+ type a yes/no. `--auto` takes the recommended option at each gate without asking.
42
+
43
+ | Gate | Pauses when | Recommendation comes from | `--auto` takes |
44
+ | --- | --- | --- | --- |
45
+ | idea-eval | after discovery | eval report `## Recommendation` (`proceed` / `reshape` / `drop`) | `proceed`/`reshape` → continue; `drop` → cancel; missing → still asks |
46
+ | feature-check | after AC | recorded AC check + requirement coverage | PASS → continue; FAIL → revise AC (cap 3) |
47
+ | design-approval | after system-design (skipped by `--skip-design`) | recorded design check | PASS → approve; FAIL → still asks |
48
+ | batch-create | after decompose | batch schema + task-order sidecar validation | create the batch |
49
+
50
+ Flag → vars: `--auto` sets `profile=auto`, `idea_approved=true`, `design_approved=true`;
51
+ `--skip-design` sets `design=skip`.
42
52
 
43
53
  ## Implementation
44
54
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: Plan a feature from a description — intake → feature create → AC generation → feature check gate → decomposition → batch-create (Design by default)
3
3
  role: planner
4
- argument-hint: "\"<description>\" [--feature <id>] [--parent <feature-id>] [--agent <inline|auto|name>] [--skip-design] [--auto] [--approve-taste]"
4
+ argument-hint: "\"<description>\" [--feature <id>] [--parent <feature-id>] [--skip-design] [--agent <inline|auto|name>] [--auto]"
5
5
  allowed-tools: ["Bash", "Read", "Skill", "AskUserQuestion"]
6
6
  ---
7
7
 
@@ -18,8 +18,7 @@ Wraps the **sp:spur-dev** skill.
18
18
  | `--parent` `<feature-id>` | Create under a parent feature. | omitted |
19
19
  | `--agent` `<inline\|auto\|name>` | Who runs the model-bearing planning. Omission and `inline` drive `idea-pipeline.yaml` in this session with zero external agent/workflow processes; `auto` tier-resolves an executor and a name pins one, both through the async workflow worker. | inline |
20
20
  | `--skip-design` | Omit the system-design hop. | off |
21
- | `--auto` | Skip objective HITL gates. | off |
22
- | `--approve-taste` | With --auto: skip design-approval pause. | off |
21
+ | `--auto` | Accept the pipeline's recommendation at every operator gate (same gate table as `/sp:dev-idea`). | off |
23
22
 
24
23
  For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
25
24
 
@@ -27,18 +26,18 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
27
26
 
28
27
  ```
29
28
  /sp:dev-plan "<description>"
30
- [--feature <id>] [--parent <feature-id>] [--agent <inline|auto|name>]
31
- [--auto] # skip objective HITL where the plan path supports it
32
- [--skip-design] # design package off (satellite + task Design)
33
- [--approve-taste] # with --auto: skip design-approval taste pause when applicable
29
+ [--feature <id>] [--parent <feature-id>]
30
+ [--skip-design] # design package off (satellite + task Design)
31
+ [--agent <inline|auto|name>]
32
+ [--auto] # no operator pauses; follow each gate's recommendation
34
33
  ```
35
34
 
36
35
  **Design package (unified with `/sp:dev-idea`):** Design is **on by default**. Default fills
37
36
  per-task `### Design` in the batch and the feature satellite when the seam heuristic fires
38
37
  (ties lean **design**). There is **no** `--design` force flag — only **`--skip-design`** opts out.
39
38
 
40
- **Taste re-entry:** `--approve-taste` is the same flag as on `dev-idea` (sets prior design approval
41
- for taste gates). Alias: `--design-approved` (prefer `--approve-taste`).
39
+ **Removed flags:** `--approve-taste` and `--design-approved` are folded into `--auto` (same
40
+ contract as `/sp:dev-idea`). If passed, ignore them with a one-line notice.
42
41
 
43
42
  ## Implementation
44
43
 
@@ -1,8 +1,8 @@
1
1
  ---
2
- description: "Review code for a task or path — multi-dimensional review across functional traceability, SECUA quality, and architectural depth. With --triage: fix small findings directly, then file the rest as implement-ready tasks. Triggers: \"review this\", \"check the code\", \"SECUA review\", \"dev review\", \"audit this\", \"triage review findings\"."
2
+ description: "Review code for a task set or paths — multi-dimensional review across functional traceability, SECUA quality, and architectural depth. With --triage: fix small findings directly, then file the rest as implement-ready tasks. Triggers: \"review this\", \"check the code\", \"SECUA review\", \"dev review\", \"audit this\", \"triage review findings\"."
3
3
  role: reviewer
4
- argument-hint: "[<wbs|path>] [--agent <inline|auto|name>] [--focus <dims>] [--triage] [--worktree [<name>]]"
5
- allowed-tools: ["Bash", "Read", "Skill"]
4
+ argument-hint: "[--tasks <selector> | --feature <id>[,<id>] | --scope <path>[,<path>]] [--agent <inline|auto|name>] [--focus <dims>] [--triage] [--worktree [<name>]] [--auto]"
5
+ allowed-tools: ["Bash", "Read", "Skill", "Edit", "Write"]
6
6
  ---
7
7
 
8
8
  # Dev Review
@@ -13,19 +13,24 @@ Wraps the **sp:functional-review**, **sp:code-verification**, and **sp:code-impr
13
13
 
14
14
  | Flag | Description | Default |
15
15
  | --- | --- | --- |
16
- | `[<wbs\|path>]` | Task WBS or source path to review. | cwd |
16
+ | `--tasks <selector>` | Review a task set — batch selector grammar ([execution-batch.md § Step 1](../skills/spur-dev/references/execution-batch.md#step-1--selector-resolution-r1)): comma WBS list or `feature:<id>`; status pseudo-lists and `ready` are rejected for review (they select work to do, not work to review). Resolved once, frozen; one WBS-mode review per task, each writing its own merged `## Review`; the run ends with a combined summary table (WBS, verdict, P1/P2 counts). | — |
17
+ | `--feature <id>[,<id>]` | Sugar for the union of the `feature:<id>` sets — resolved once, frozen, then reviewed as `--tasks`. | — |
18
+ | `--scope <path>[,<path>]` | Advisory review of the tracked files under one or more paths: paths must exist (exit 2 otherwise), are normalized, duplicates dropped and nested paths collapse to the ancestor (`--scope apps,apps/cli` → `apps`); one sub-review per path, one merged report with a cross-path architecture pass; no task mutation. | — |
19
+ | `[<wbs\|path>]` | **Deprecated positional alias** (one release): a `^\d{4}$` token with a resolvable task → `--tasks <wbs>`; an existing path → `--scope <path>`; otherwise exit 2. Prints a deprecation warning naming the replacement. | — |
17
20
  | `--agent` `<inline\|auto\|name>` | Who runs the model-bearing review. | omit |
18
- | `--focus` `<dims>` | Review dimensions (functional / SECUA / architecture). | all |
19
- | `--triage` | After the review: fix small findings directly, file the rest as one or more implement-ready tasks. | off (report-only) |
20
- | `--worktree` `[<name>]` | Run the triage in an isolated git worktree; FF-merge on success, retain on failure. Bare `--worktree` creates a fresh tree; `--worktree <name>` adopts an existing worktree by name/path/branch. Requires `--triage`. | off |
21
+ | `--focus` `<dims>` | Review dimensions — vocabulary and skill routing: [code-verification/SKILL.md](../skills/code-verification/SKILL.md) review mode (SSOT). | all |
22
+ | `--triage` | After the review: bucket findings across all targets once (identical `file:line` findings deduped), fix small findings directly, file the rest as one or more implement-ready tasks. | off (report-only) |
23
+ | `--worktree` `[<name>]` | Run the triage in an isolated git worktree; FF-merge on success, retain on failure. Bare `--worktree` creates a fresh tree; `--worktree <name>` adopts an existing worktree by name/path/branch. Multi-target aware (below). Requires `--triage`. | off |
24
+ | `--auto` | Skip objective HITL confirmations. | off |
21
25
 
22
26
  For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
23
27
 
24
28
  ## Usage
25
29
 
26
30
  ```
27
- /sp:dev-review [<wbs|path>] [--agent <inline|auto|name>] [--focus <dims>] [--triage] [--worktree [<name>]]
28
- /sp:dev-review scripts --triage
31
+ /sp:dev-review [--tasks <selector> | --feature <id>[,<id>] | --scope <path>[,<path>]] [--agent <inline|auto|name>] [--focus <dims>] [--triage] [--worktree [<name>]] [--auto]
32
+ /sp:dev-review --tasks 0962,0963 --triage
33
+ /sp:dev-review --scope apps,packages,plugins,scripts
29
34
  /sp:dev-review 0962 --triage --worktree
30
35
  ```
31
36
 
@@ -34,10 +39,14 @@ Put the target first: a bare token after `--worktree` is read as the worktree na
34
39
  ## Implementation
35
40
 
36
41
  - Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
37
- - WBS mode (`<wbs>`): `Skill(skill="sp:functional-review", args="<wbs> $ARGUMENTS")` + `Skill(skill="sp:code-verification", args="review $ARGUMENTS")` + `Skill(skill="sp:code-improvement", args="<wbs> $ARGUMENTS")` (functional traceability + SECUA framework + architectural depth; the three skills return review fragments and the coordinator (`sp:super-reviewer`) writes the combined `## Review` — F92 0593 R1)
38
- - Path mode (`<path>`): `Skill(skill="sp:code-verification", args="review $ARGUMENTS")` + `Skill(skill="sp:code-improvement", args="<path> $ARGUMENTS")` (advisory SECUA quality + architectural depth; performs no task mutation)
39
- - `--triage`: after the review returns, run the triage protocol in [dev-operations.md § 2. review](../skills/spur-dev/references/dev-operations.md#2-review) **inline in this session** — the review skills and `sp:super-reviewer` stay report-only.
42
+ - **Selector validation (before any review runs).** Exactly one target kind per invocation: `--tasks`, `--feature`, or `--scope`. More than one → exit 2 naming the conflicting selectors (a positional beside an explicit selector is a second target kind → exit 2); none (and no positional) → exit 2 with usage — there is no implicit `cwd` target. The set is resolved once and frozen through the [execution-batch.md § Step 1](../skills/spur-dev/references/execution-batch.md#step-1--selector-resolution-r1) batch resolver — no review-specific parser; `--feature <id>[,<id>]` is sugar for the union of the `feature:<id>` sets.
43
+ - **WBS mode (per task target):** `Skill(skill="sp:functional-review", args="<wbs> $FLAGS")` + `Skill(skill="sp:code-verification", args="review <wbs> $FLAGS")` + `Skill(skill="sp:code-improvement", args="<wbs> $FLAGS")` (functional traceability + SECUA framework + architectural depth — each skill receives its one resolved WBS exactly once plus `$FLAGS` = `$ARGUMENTS` minus the selector (`--tasks`/`--feature`/`--scope` or positional) and its value, never the raw selector, and returns a review fragment only — F92 0593 R1)
44
+ - **Task fan-out (`--tasks` / `--feature`).** One WBS-mode review per task in the frozen set. Tasks in `backlog`/`todo`/`blocked` are reported NOT-STARTED and skipped (§ 3a outcome vocabulary); a per-task failure does not stop the remaining tasks. Each implemented task gets its own merged `## Review`; the run ends with a combined summary table (WBS, verdict, P1/P2 counts).
45
+ - Coordinator = this session. No `sp:super-reviewer` subagent is dispatched: act as the review coordinator defined in [agents/super-reviewer.md](../agents/super-reviewer.md) — merge the fragments per its Output Format (native `P1`–`P4` priority cells, section-relative headings) and, for every task target (standalone or pipeline), write that task's combined `## Review` via `spur task update <wbs> --section Review --from-file`. Path mode emits advisory output only.
46
+ - **Path mode (per path target):** `Skill(skill="sp:code-verification", args="review <path> $FLAGS")` + `Skill(skill="sp:code-improvement", args="<path> $FLAGS")` (advisory SECUA quality + architectural depth — one normalized path forwarded once plus `$FLAGS`; performs no task mutation). Under `--scope <path>[,<path>]`: paths must exist (exit 2 otherwise), are normalized, duplicates dropped and nested paths collapse to the ancestor (`--scope apps,apps/cli` → `apps`); each surviving path gets a sub-review (Step 3p path scope), eligible for native-subagent dispatch per [dispatch-surface.md](../skills/parallel-execution/references/dispatch-surface.md); the coordinator merges the sub-reviews, runs **one** cross-path architecture pass (`sp:code-improvement` over the inter-path imports), and emits **one** advisory report. No task mutation.
47
+ - **Positional alias (deprecated).** A positional `<wbs|path>` is accepted for one release: a `^\d{4}$` token with a resolvable task behaves as `--tasks <wbs>`; an existing path as `--scope <path>`; otherwise exit 2. Print a deprecation warning naming the replacement selector; removal is a follow-up.
48
+ - `--triage`: after the review returns, run the triage protocol in [dev-operations.md § 2. review](../skills/spur-dev/references/dev-operations.md#2-review) **inline in this session** — the review skills and `sp:super-reviewer` stay report-only. With multiple targets, bucket the findings across all targets once (identical `file:line` findings deduped before bucketing). `Edit`/`Write` in `allowed-tools` exist only for these direct fixes.
40
49
  - Without `--worktree`, every write lands in the current working tree on the current branch: no branch creation, no checkout, no commit.
41
- - `--worktree [<name>]`: the [execution-batch.md § Worktree isolation](../skills/spur-dev/references/execution-batch.md#worktree-isolation---worktree-name) lifecycle as a run of one (marker `command` = `dev-review`, `selector` = the target). Rejected without `--triage`.
50
+ - `--worktree [<name>]`: the [execution-batch.md § Worktree isolation](../skills/spur-dev/references/execution-batch.md#worktree-isolation---worktree-name) lifecycle as a run of one (marker `command` = `dev-review`, `selector` = the full normalized target list). Admission requires every target to resolve before the tree is cut. Branch slug: `sp/review-<first>-and-<N>-<short-id>` for a multi-target run (N = target count), `sp/review-<slug>-<short-id>` for a single target (the WBS or the path's basename). Rejected without `--triage`.
42
51
  While it runs, fixes and filed tasks land in the worktree copy; the main tree shows them only after the FF-merge.
43
52
  - `--fix`: Deprecated (still accepted: no-op + warning; route remediation to `--triage` or `/sp:dev-verify --fix`). **`--next` removed** (feature H8, 2026-07-31) — it was a deprecated no-op; route progression to `/sp:dev-next`. **was: `--next` deprecated no-op.**
@@ -49,7 +49,7 @@ the FF-merge on success. Expected, not a bug.
49
49
 
50
50
  **`--next` (per-task lifecycle chaining):** `--next`
51
51
  is chain-to-completion with propagation. For each task whose verdict is **PASS**, the chain's first
52
- hop transitions `testing → done` through the FSM with the `--strict-core` Review L3 guard honored;
52
+ hop transitions `testing → done` through the FSM with the `--as done` Review L3 guard honored;
53
53
  a task whose verdict is **PARTIAL** or **FAIL** does **not** transition (it stays `testing` as
54
54
  review-pending) — that task's chain halts, reporting the verdict. One task's non-PASS never blocks
55
55
  another task's transition — each task's verdict is its own, and each task's chain is independent.
@@ -7,7 +7,7 @@ allowed-tools: ["Bash", "Read", "Write", "Skill"]
7
7
 
8
8
  # Spur Init
9
9
 
10
- Wraps **spur init** (deterministic scaffold) + **sp:doc-evolve** (project customization).
10
+ Wraps **spur self init** (deterministic scaffold) + **sp:doc-evolve** (project customization).
11
11
 
12
12
  ## Usage
13
13
 
@@ -16,7 +16,7 @@ Wraps **spur init** (deterministic scaffold) + **sp:doc-evolve** (project custom
16
16
  ## Implementation
17
17
 
18
18
  ```bash
19
- spur init --json $ARGUMENTS
19
+ spur self init --json $ARGUMENTS
20
20
  ```
21
21
  - Parse the JSON envelope once and retain it as `scaffoldResult`; summarize its created/skipped files in one block.
22
22
  - Customize (Phase 2): `Skill(skill="sp:doc-evolve", args="customize --project <scaffoldResult.project>")`.