@gobing-ai/spur 0.3.78 → 0.3.81

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 (177) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/config.example.yaml +29 -18
  3. package/config/config.global.yaml +10 -11
  4. package/config/pipeline-budgets.json +34 -2
  5. package/config/plugin-scripts.json +25 -0
  6. package/config/rules/boundary/config-loading-ownership.yaml +0 -3
  7. package/config/rules/boundary/dao-boundary.yaml +4 -17
  8. package/config/rules/boundary/planning-folder-hardcode.yaml +0 -1
  9. package/config/rules/boundary/sp-no-vendor-refs.yaml +3 -2
  10. package/config/rules/boundary/sp-runtime-path.yaml +3 -14
  11. package/config/rules/quality/coverage-gate.yaml +3 -14
  12. package/config/rules/quality/tsdoc-exports.yaml +4 -7
  13. package/config/rules/strict/http-boundaries.yaml +5 -8
  14. package/config/rules/strict/runtime-boundaries.yaml +1 -5
  15. package/config/rules/structure/protected-files.yaml +9 -3
  16. package/config/rules/structure/test-focus-skip.yaml +0 -2
  17. package/config/rules/structure/test-location.yaml +0 -5
  18. package/config/rules/surface/check-cli-surface.yaml +3 -2
  19. package/config/rules/typescript/bun-tooling.yaml +5 -7
  20. package/config/rules/typescript/guarded-happy-dom-register.yaml +0 -2
  21. package/config/rules/typescript/happy-dom-teardown.yaml +0 -2
  22. package/config/rules/typescript/no-biome-suppressions.yaml +0 -2
  23. package/config/rules/typescript/no-debugger.yaml +0 -2
  24. package/config/rules/typescript/no-eslint-suppressions.yaml +0 -4
  25. package/config/rules/typescript/no-leaky-module-mocks.yaml +6 -13
  26. package/config/rules/typescript/no-module-scope-import-calls.yaml +0 -2
  27. package/config/rules/typescript/no-syscall-emulation-in-boundary-mock.yaml +0 -3
  28. package/config/rules/typescript/no-unmocked-module-eval-side-effects.yaml +0 -3
  29. package/config/rules/typescript/output-boundaries.yaml +0 -3
  30. package/config/rules/typescript/prefer-accessible-role-for-button-queries.yaml +0 -3
  31. package/config/rules/ui/ui-import-boundary.yaml +1 -5
  32. package/config/templates/AGENTS.md +26 -23
  33. package/config/templates/docs/00_ADR.md +13 -23
  34. package/config/templates/docs/01_PRD.md +5 -2
  35. package/config/templates/docs/02_ROADMAP.md +9 -13
  36. package/config/templates/docs/03_ARCHITECTURE.md +2 -2
  37. package/config/templates/docs/04_DESIGN.md +12 -31
  38. package/config/templates/docs/05_FEATURES.md +6 -18
  39. package/config/templates/docs/99_PROJECT_CONSTITUTION.md +162 -394
  40. package/config/transition-shims.json +7 -7
  41. package/config/workflows/basic.yaml +4 -0
  42. package/config/workflows/docs-pipeline.yaml +13 -14
  43. package/config/workflows/feature-dev.yaml +20 -65
  44. package/config/workflows/history-anatomy.yaml +22 -1
  45. package/config/workflows/idea-pipeline.yaml +53 -97
  46. package/config/workflows/pr-review.yaml +21 -33
  47. package/config/workflows/task-pipeline.yaml +87 -330
  48. package/config/workflows/wayfinder-resolution.yaml +12 -26
  49. package/config/workflows/wrapup-pipeline.yaml +48 -189
  50. package/package.json +9 -9
  51. package/plugins/sp/README.md +22 -8
  52. package/plugins/sp/agents/expert-spur.md +41 -19
  53. package/plugins/sp/agents/super-reviewer.md +43 -8
  54. package/plugins/sp/lib/idea-handoff.generated.d.mts +17 -0
  55. package/plugins/sp/lib/idea-handoff.generated.mjs +1301 -0
  56. package/plugins/sp/plugin.json +1 -1
  57. package/plugins/sp/scripts/feature-dev-precheck.mjs +146 -0
  58. package/plugins/sp/scripts/feature-dev-precheck.ts +238 -0
  59. package/plugins/sp/scripts/idea-handoff.mjs +27 -0
  60. package/plugins/sp/scripts/idea-handoff.ts +44 -0
  61. package/plugins/sp/scripts/quality-gate.mjs +165 -0
  62. package/plugins/sp/scripts/quality-gate.ts +217 -0
  63. package/plugins/sp/scripts/verify-answer-lint.ts +21 -3
  64. package/plugins/sp/scripts/workflow-step-profile.mjs +319 -0
  65. package/plugins/sp/scripts/workflow-step-profile.ts +456 -0
  66. package/plugins/sp/scripts/wrapup-steps.mjs +350 -0
  67. package/plugins/sp/scripts/wrapup-steps.ts +466 -0
  68. package/plugins/sp/skills/conflict-finding/SKILL.md +6 -0
  69. package/plugins/sp/skills/daily-summary/SKILL.md +1 -1
  70. package/plugins/sp/skills/doc-evolve/SKILL.md +26 -40
  71. package/plugins/sp/skills/doc-evolve/references/operations.md +17 -30
  72. package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +1 -1
  73. package/plugins/sp/skills/spec-decomposition/references/decomposition.md +29 -0
  74. package/plugins/sp/skills/spur-cli/references/agent.md +56 -14
  75. package/plugins/sp/skills/spur-cli/references/message.md +30 -3
  76. package/plugins/sp/skills/spur-cli/references/projects.md +45 -1
  77. package/plugins/sp/skills/spur-cli/references/self.md +5 -4
  78. package/plugins/sp/skills/spur-cli/references/serve.md +5 -4
  79. package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +17 -1
  80. package/plugins/sp/skills/spur-cli/references/tasks.md +32 -2
  81. package/plugins/sp/skills/spur-cli/references/team.md +21 -1
  82. package/plugins/sp/skills/spur-cli/references/workflows/operations.md +6 -3
  83. package/plugins/sp/skills/spur-cli/references/workflows/workflow-fit-and-tuning.md +57 -18
  84. package/plugins/sp/skills/spur-composer/SKILL.md +145 -0
  85. package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +14 -0
  86. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +3 -3
  87. package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +12 -0
  88. package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +46 -4
  89. package/plugins/sp/skills/spur-dev/references/planning-workflow.md +24 -0
  90. package/plugins/sp/skills/spur-doctor/SKILL.md +138 -0
  91. package/plugins/sp/skills/taste-refactoring-api/README.md +43 -0
  92. package/plugins/sp/skills/taste-refactoring-api/SKILL.md +334 -0
  93. package/plugins/sp/skills/taste-refactoring-api/checklists/daily-api-review.md +71 -0
  94. package/plugins/sp/skills/taste-refactoring-api/examples/refactor-example.md +72 -0
  95. package/plugins/sp/skills/taste-refactoring-api/examples/review-template.md +93 -0
  96. package/plugins/sp/skills/taste-refactoring-api/references/api-refactoring-playbook.md +253 -0
  97. package/plugins/sp/skills/taste-refactoring-api/references/protocol-modes.md +79 -0
  98. package/plugins/sp/skills/taste-refactoring-api/references/research-basis.md +58 -0
  99. package/plugins/sp/skills/taste-refactoring-architect/README.md +26 -0
  100. package/plugins/sp/skills/taste-refactoring-architect/SKILL.md +471 -0
  101. package/plugins/sp/skills/taste-refactoring-architect/checklists/daily-architecture-review.md +48 -0
  102. package/plugins/sp/skills/taste-refactoring-architect/examples/refactor-example.md +55 -0
  103. package/plugins/sp/skills/taste-refactoring-architect/examples/review-template.md +51 -0
  104. package/plugins/sp/skills/taste-refactoring-architect/references/architecture-refactoring-playbook.md +173 -0
  105. package/plugins/sp/skills/taste-refactoring-architect/references/research-basis.md +28 -0
  106. package/plugins/sp/skills/taste-refactoring-tests/README.md +28 -0
  107. package/plugins/sp/skills/taste-refactoring-tests/SKILL.md +482 -0
  108. package/plugins/sp/skills/taste-refactoring-tests/checklists/daily-test-review.md +39 -0
  109. package/plugins/sp/skills/taste-refactoring-tests/examples/refactor-example.md +85 -0
  110. package/plugins/sp/skills/taste-refactoring-tests/examples/review-template.md +59 -0
  111. package/plugins/sp/skills/taste-refactoring-tests/references/research-basis.md +47 -0
  112. package/plugins/sp/skills/taste-refactoring-tests/references/test-refactoring-playbook.md +222 -0
  113. package/plugins/sp/skills/taste-refactoring-ui/README.md +12 -0
  114. package/plugins/sp/skills/taste-refactoring-ui/SKILL.md +290 -0
  115. package/plugins/sp/skills/taste-refactoring-ui/checklists/daily-ui-review.md +72 -0
  116. package/plugins/sp/skills/taste-refactoring-ui/examples/review-template.md +51 -0
  117. package/plugins/sp/skills/taste-refactoring-ui/references/refactoring-ui-playbook.md +170 -0
  118. package/plugins/sp/skills/wayfinder/SKILL.md +2 -2
  119. package/plugins/sp/skills/wayfinder/references/pipeline-resolution.md +30 -0
  120. package/schemas/spur-config.schema.json +49 -0
  121. package/spur.js +46936 -44198
  122. package/web/_astro/{BoardApp.CHQ1lycZ.js → BoardApp.B1U26g3I.js} +97 -95
  123. package/web/_astro/BoardApp.Csgyg-lS.js +1 -0
  124. package/web/_astro/{TaskDetail.GKfQJ60c.js → TaskDetail.DwPqpq7v.js} +1 -1
  125. package/web/_astro/{arc.DWEtA3Tx.js → arc.CweZEjN2.js} +1 -1
  126. package/web/_astro/{architectureDiagram-3BPJPVTR.DB42oWmP.js → architectureDiagram-3BPJPVTR.D89pbDuv.js} +1 -1
  127. package/web/_astro/{blockDiagram-GPEHLZMM.rhv-zNQV.js → blockDiagram-GPEHLZMM.BOuTeEpX.js} +1 -1
  128. package/web/_astro/{c4Diagram-AAUBKEIU.Ci4-4VvY.js → c4Diagram-AAUBKEIU.CASbkWZF.js} +1 -1
  129. package/web/_astro/channel.Cx6sXxhq.js +1 -0
  130. package/web/_astro/{chunk-2J33WTMH.Cc9veUgf.js → chunk-2J33WTMH.BKQYtOvY.js} +1 -1
  131. package/web/_astro/{chunk-4BX2VUAB.Bec9c4eI.js → chunk-4BX2VUAB.9sHLdMtG.js} +1 -1
  132. package/web/_astro/{chunk-55IACEB6.DoV8S1iB.js → chunk-55IACEB6.wOLXWlPs.js} +1 -1
  133. package/web/_astro/{chunk-727SXJPM.DwR-Qlyj.js → chunk-727SXJPM.DovFbwg3.js} +1 -1
  134. package/web/_astro/{chunk-AQP2D5EJ.ND_a81WY.js → chunk-AQP2D5EJ.B1Weod1X.js} +1 -1
  135. package/web/_astro/{chunk-FMBD7UC4.Wv_jwG48.js → chunk-FMBD7UC4.TEMS04st.js} +1 -1
  136. package/web/_astro/{chunk-ND2GUHAM.CXKXCMmp.js → chunk-ND2GUHAM.Cp8VT1wQ.js} +1 -1
  137. package/web/_astro/{chunk-QZHKN3VN.nkaoNYQq.js → chunk-QZHKN3VN.BzATdEcP.js} +1 -1
  138. package/web/_astro/{classDiagram-4FO5ZUOK.cMQcVlQu.js → classDiagram-4FO5ZUOK.C9BOCfAO.js} +1 -1
  139. package/web/_astro/{classDiagram-v2-Q7XG4LA2.cMQcVlQu.js → classDiagram-v2-Q7XG4LA2.C9BOCfAO.js} +1 -1
  140. package/web/_astro/{cose-bilkent-S5V4N54A.OaDJ7Mr2.js → cose-bilkent-S5V4N54A.DUnr4UAw.js} +1 -1
  141. package/web/_astro/{cynefin-OW5HDTMX.Chi8IphF.js → cynefin-OW5HDTMX.rYq5uM3D.js} +1 -1
  142. package/web/_astro/{cytoscape.esm.DzSz-X2X.js → cytoscape.esm.BB4DxJjf.js} +1 -1
  143. package/web/_astro/{dagre-BM42HDAG.CzK2t_Fp.js → dagre-BM42HDAG.CWeNKe3I.js} +1 -1
  144. package/web/_astro/{diagram-2AECGRRQ.DRvxlVS7.js → diagram-2AECGRRQ.DCkfls10.js} +1 -1
  145. package/web/_astro/{diagram-5GNKFQAL.CnYvNdwA.js → diagram-5GNKFQAL.D5U4JCka.js} +1 -1
  146. package/web/_astro/{diagram-KO2AKTUF.CpLpMw5R.js → diagram-KO2AKTUF.BZJgqaqG.js} +1 -1
  147. package/web/_astro/{diagram-LMA3HP47.JTb78qUA.js → diagram-LMA3HP47.DoMeHvPR.js} +1 -1
  148. package/web/_astro/{diagram-OG6HWLK6.Bk-1jDIb.js → diagram-OG6HWLK6.B50qwwWX.js} +1 -1
  149. package/web/_astro/{erDiagram-TEJ5UH35.D8hN9GZq.js → erDiagram-TEJ5UH35.DdGPG6LK.js} +1 -1
  150. package/web/_astro/{flowDiagram-I6XJVG4X.-6zQr6m5.js → flowDiagram-I6XJVG4X.QP2MJ12u.js} +1 -1
  151. package/web/_astro/{ganttDiagram-6RSMTGT7.DboLQ9ca.js → ganttDiagram-6RSMTGT7.BI6LgKSy.js} +1 -1
  152. package/web/_astro/{gitGraphDiagram-PVQCEYII.4tYvJKGR.js → gitGraphDiagram-PVQCEYII.npPZiC2G.js} +1 -1
  153. package/web/_astro/index.DayyIngm.css +1 -0
  154. package/web/_astro/{infoDiagram-5YYISTIA.Bd9rXpsB.js → infoDiagram-5YYISTIA.DCJCBVbp.js} +1 -1
  155. package/web/_astro/{ishikawaDiagram-YF4QCWOH.CvMoaf67.js → ishikawaDiagram-YF4QCWOH.BMLV-3I1.js} +1 -1
  156. package/web/_astro/{journeyDiagram-JHISSGLW.Ccy1CA7y.js → journeyDiagram-JHISSGLW.LE58crde.js} +1 -1
  157. package/web/_astro/{kanban-definition-UN3LZRKU.0MaMqHNS.js → kanban-definition-UN3LZRKU.BPbz8rH9.js} +1 -1
  158. package/web/_astro/{linear.CHXgcIbN.js → linear.DhZaBtYh.js} +1 -1
  159. package/web/_astro/{mermaid.core.Ca-kcelG.js → mermaid.core.BD5-jXum.js} +6 -6
  160. package/web/_astro/{mindmap-definition-RKZ34NQL.BUIDlHa0.js → mindmap-definition-RKZ34NQL.MTJyrQ65.js} +1 -1
  161. package/web/_astro/ordinal.BYWQX77i.js +1 -0
  162. package/web/_astro/{pieDiagram-4H26LBE5.2dX3CU1s.js → pieDiagram-4H26LBE5.BrDhDvIS.js} +1 -1
  163. package/web/_astro/{quadrantDiagram-W4KKPZXB.B3LBlRiv.js → quadrantDiagram-W4KKPZXB.71d73_5N.js} +1 -1
  164. package/web/_astro/{requirementDiagram-4Y6WPE33.X12I2uNx.js → requirementDiagram-4Y6WPE33.Bga6UF-z.js} +1 -1
  165. package/web/_astro/{sankeyDiagram-5OEKKPKP.BXohIHqx.js → sankeyDiagram-5OEKKPKP.BnHs4K82.js} +1 -1
  166. package/web/_astro/{sequenceDiagram-3UESZ5HK.C37ZIUzg.js → sequenceDiagram-3UESZ5HK.DsfY2gnj.js} +1 -1
  167. package/web/_astro/{stateDiagram-AJRCARHV.BRgz317z.js → stateDiagram-AJRCARHV.DvsTSc9a.js} +1 -1
  168. package/web/_astro/{stateDiagram-v2-BHNVJYJU.7VYSXN9-.js → stateDiagram-v2-BHNVJYJU.DxzzmHUR.js} +1 -1
  169. package/web/_astro/{timeline-definition-PNZ67QCA.BVNz_HiN.js → timeline-definition-PNZ67QCA.4ZuQmOTt.js} +1 -1
  170. package/web/_astro/{vennDiagram-CIIHVFJN.CHVDkPX4.js → vennDiagram-CIIHVFJN.Ck5Q86SG.js} +1 -1
  171. package/web/_astro/{wardleyDiagram-YWT4CUSO.EQQ_qT9v.js → wardleyDiagram-YWT4CUSO.BK7k2hXr.js} +1 -1
  172. package/web/_astro/{xychartDiagram-2RQKCTM6.DrAT9WoP.js → xychartDiagram-2RQKCTM6.DfCrgauK.js} +1 -1
  173. package/web/index.html +2 -2
  174. package/web/_astro/BoardApp.DV9kx0wo.js +0 -1
  175. package/web/_astro/channel.BAI6xLeV.js +0 -1
  176. package/web/_astro/index.Dcr_8fiK.css +0 -1
  177. package/web/_astro/ordinal.DBvzRdQf.js +0 -1
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: expert-spur
3
3
  description: |
4
- Use PROACTIVELY for "create tasks for this feature", "update all task statuses", "audit task traceability", "create a feature with acceptance criteria", "harden the rule catalog", "author a batch of workflows", or "expert-spur". Multi-step corpus work across `spur task`, `feature`, `rule`, and `workflow`: batch creation, status sweeps, section campaigns, traceability audits, rule hardening, and workflow authoring/refactoring. For one deterministic operation, run the CLI directly.
4
+ Use PROACTIVELY for "create tasks for this feature", "update all task statuses", "audit task traceability", "create a feature with acceptance criteria", "harden the rule catalog", "author a batch of workflows", "compose a workflow", "tune a rule", "apply accepted doctor proposals", "evaluate spur artifact health", "reflect over history findings", or "expert-spur". Multi-step corpus work across `spur task`, `feature`, `rule`, `workflow`, and agent specs: batch creation, status sweeps, section campaigns, traceability audits, rule hardening, workflow authoring/refactoring, composition and tuning (sp:spur-composer), and evaluation/reflection proposal passes (sp:spur-doctor). For one deterministic operation, run the CLI directly. Recurring evolution loops and multi-agent coordination belong to sp:super-planner — never this agent.
5
5
 
6
6
  <example>
7
7
  Context: Batch task status update across a feature.
@@ -12,19 +12,23 @@ description: |
12
12
  tools: [Read, Grep, Glob, Bash, Skill]
13
13
  model: inherit
14
14
  color: green
15
- skills: [sp:spur-cli]
15
+ skills: [sp:spur-cli, sp:spur-composer, sp:spur-doctor]
16
16
  ---
17
17
 
18
18
  # Expert Spur
19
19
 
20
20
  Thin specialist for multi-step Spur **corpus** work. The backend skill `sp:spur-cli` owns noun,
21
21
  verb, flag, output, and exit semantics; this agent selects its task/feature/rule/workflow reference,
22
- sequences operations, and evaluates each result before continuing.
22
+ sequences operations, and evaluates each result before continuing. Composition, tuning, evaluation
23
+ and reflection campaigns are method-backed by `sp:spur-composer` and `sp:spur-doctor`; their verbs
24
+ and flags still resolve through the `sp:spur-cli` references.
23
25
 
24
26
  ## Role
25
27
 
26
- You are the Spur corpus steward: a specialist sequencer over `skill: sp:spur-cli`, not a second
27
- implementation of the CLI or lifecycle spine.
28
+ You are the Spur corpus steward: a specialist sequencer over `skill: sp:spur-cli`, backed by
29
+ `sp:spur-composer` (select, compose, tune, apply) and `sp:spur-doctor` (evaluate, reflect, propose).
30
+ You are not a second implementation of the CLI or lifecycle spine, not a coordinator, and not a
31
+ recurring loop.
28
32
 
29
33
  ## Scope
30
34
 
@@ -34,19 +38,28 @@ Use for:
34
38
  - Cross-corpus traceability or structural audits.
35
39
  - Rule catalog authoring, validation, execution, and hardening.
36
40
  - Workflow fit decisions, authoring/refactoring, validation, dry-runs, and trace comparison.
37
-
38
- Do not use for one CLI invocation. Do not use for planning→implementation→verification lifecycle
39
- or batch task execution; `sp:spur-dev` owns that orchestration. The backend skill covers the other
41
+ - Composition and tuning campaigns via `sp:spur-composer`: catalog selection, the composition
42
+ ladder, trace-driven rule tuning, and applying accepted doctor proposals.
43
+ - Evaluation and reflection campaigns via `sp:spur-doctor`: read-only evidence, history-finding
44
+ reflection, and a proposal table.
45
+
46
+ One bounded campaign per dispatch. Do not use for one CLI invocation. Do not use for
47
+ planning→implementation→verification lifecycle or batch task execution; `sp:spur-dev` owns that
48
+ orchestration. Recurring evolution loops and multi-agent coordination are not this agent's duty —
49
+ they hand off to `sp:super-planner` or a workflow (§ Hand-offs). The backend skill covers the other
40
50
  CLI nouns for direct use, but they are not this corpus specialist's scope.
41
51
 
42
52
  ## Process
43
53
 
44
54
  1. Load `plugins/sp/skills/spur-cli/SKILL.md` and the exact noun reference before invoking a verb.
45
- 2. Resolve and freeze the target set. Report ambiguity instead of guessing identifiers or flags.
46
- 3. Run the noun's read/check/validate path before mutation where available.
47
- 4. Mutate only through `spur`; parse `--json` output when the verb advertises it.
48
- 5. Inspect each result before the next dependent operation; stop on structural or validation failure.
49
- 6. Run affected-input checks after mutation (constitution T11): after task/feature batch writes,
55
+ 2. For compose/tune/apply work, load `plugins/sp/skills/spur-composer/SKILL.md` first; for
56
+ evaluate/reflect/propose work, load `plugins/sp/skills/spur-doctor/SKILL.md` first. Follow the
57
+ owning skill's method; never restate it here.
58
+ 3. Resolve and freeze the target set. Report ambiguity instead of guessing identifiers or flags.
59
+ 4. Run the noun's read/check/validate path before mutation where available.
60
+ 5. Mutate only through `spur`; parse `--json` output when the verb advertises it.
61
+ 6. Inspect each result before the next dependent operation; stop on structural or validation failure.
62
+ 7. Run affected-input checks after mutation (constitution T11): after task/feature batch writes,
50
63
  run `spur task check <wbs>` / `spur feature check <id>` for each changed document and its
51
64
  required linked evidence — not a corpus sweep. The explicit unsuppressed audit
52
65
  (`spur task check --corpus --json`) is reserved for checker-policy changes (T10).
@@ -71,13 +84,19 @@ their runbook here.
71
84
  - Reimplement CLI validation in prose or shell.
72
85
  - Never drive the planning/execution lifecycle; do not run application implementation or task
73
86
  pipelines through this agent.
87
+ - Drive a task batch through execution, chain campaigns into a recurring loop, or dispatch and
88
+ coordinate multiple agents — no batch driving, no recurring loops, no coordination dispatch here;
89
+ they hand off to `sp:super-planner` or a workflow.
90
+ - Use `spur team` or `spur agent loop` — both are forbidden surfaces. Agent specs are reached only
91
+ through `spur agent create|edit|delete|list --specs`.
74
92
 
75
93
  ## Output Format
76
94
 
77
95
  ```markdown
78
96
  ## Spur Corpus Operations Report
79
97
 
80
- **Noun(s):** task | feature | rule | workflow
98
+ **Noun(s):** task | feature | rule | workflow | agent spec
99
+ **Method:** corpus campaign | compose/tune (`sp:spur-composer`) | evaluate/reflect (`sp:spur-doctor`)
81
100
  **Scope:** <resolved ids/files>
82
101
  **Confidence:** HIGH | MEDIUM | LOW
83
102
 
@@ -95,11 +114,14 @@ their runbook here.
95
114
 
96
115
  ## Platform Notes
97
116
 
98
- - Claude Code: use `Skill(skill="sp:spur-cli", args="<noun> <query>")`, then Bash for `spur`.
99
- - Other platforms: invoke `sp:spur-cli` directly; the agent wrapper is optional.
117
+ - Claude Code: load the bound skill the campaign needs — `Skill(skill="sp:spur-cli" | "sp:spur-composer" | "sp:spur-doctor", args="<query>")` — then Bash for `spur`.
118
+ - Other platforms: invoke the bound `sp:*` skill directly; the agent wrapper is optional.
100
119
 
101
- ## Dispatch surface
120
+ ## Hand-offs
102
121
 
103
- If corpus work must be dispatched again, follow
122
+ This agent runs one bounded campaign per dispatch and reports. Batch driving of task pipelines,
123
+ recurring evolution loops, and multi-agent coordination are not dispatch duties here — hand them
124
+ to `sp:super-planner` or a workflow definition. If the operator explicitly asks for a follow-up
125
+ corpus dispatch, its surface contract is
104
126
  [dispatch-surface.md](../skills/parallel-execution/references/dispatch-surface.md): native subagent
105
- by default, `spur agent run` only on a named trigger.
127
+ by default, `spur agent run` only on a named trigger — never `spur team` or `spur agent loop`.
@@ -97,7 +97,8 @@ HITL gate unless `--auto` was passed.
97
97
  - [ ] Establish scope first: WBS mode (task diff) or path mode (source glob). Derive the diff
98
98
  scope the same way `sp:code-verification` Step 3 does.
99
99
  - [ ] Dispatch each requested dimension to its owning skill — do not inline the review logic.
100
- - [ ] Merge findings into a single ranked report (severity: blocker > major > minor > advisory).
100
+ - [ ] Merge findings into a single ranked report, emitting native priority cells
101
+ (`P1 (blocker)` > `P2 (major)` > `P3 (minor)` > `P4 (advisory)` — see Output Format).
101
102
  - [ ] In pipeline mode, write the merged report to the task's `## Review` section via
102
103
  `spur task update <wbs> --section Review --from-file`; in standalone mode, emit as output.
103
104
  - [ ] Cite `file:line` evidence for every finding — no vague "implemented correctly."
@@ -109,6 +110,8 @@ HITL gate unless `--auto` was passed.
109
110
  - [ ] Never edit `task-pipeline.yaml` or reach into a pipeline step.
110
111
  - [ ] Never auto-approve a HITL gate unless `--auto` was passed.
111
112
  - [ ] Never soften a FAIL to PARTIAL, or PARTIAL to PASS, to avoid surfacing.
113
+ - [ ] Never emit a word-only Severity cell, an empty priority scaffold, or a `##`/`###` heading
114
+ inside a `### Review` body — all three fail the existing checkers.
112
115
  - [ ] Never skip a dimension the operator requested with `--focus`.
113
116
 
114
117
  ## Definition of Done Housekeeping
@@ -120,22 +123,44 @@ enforcement checklist. Reference:
120
123
 
121
124
  ## Output Format
122
125
 
126
+ ### Priority vocabulary (task 0818 R3)
127
+
128
+ Emit priorities **natively** — the consumer (`hasPopulatedPriorityTable`,
129
+ `packages/app/src/services/task-check.ts`) requires a `P1`–`P4` cell, and a word-only severity cell
130
+ fails it. One explicit mapping, no transcription step anywhere downstream:
131
+
132
+ | Priority cell | Severity | Meaning |
133
+ | --- | --- | --- |
134
+ | `P1 (blocker)` | blocker | Ships broken or unsafe; blocks the verdict |
135
+ | `P2 (major)` | major | Real defect or structural problem; must be dispositioned |
136
+ | `P3 (minor)` | minor | Localized issue; fix or accept explicitly |
137
+ | `P4 (advisory)` | advisory | Observation, non-blocking |
138
+
139
+ Severity words stay visible in the same cell — the mapping adds the machine-readable label, it does
140
+ not replace the semantics.
141
+
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.
146
+
123
147
  ```markdown
124
- ## Review Report — <wbs|path>
148
+ #### Review Report — <wbs|path>
125
149
 
126
150
  **Scope:** <wbs diff | path glob>
127
151
  **Dimensions:** functional, security, efficiency, correctness, usability, architecture
128
152
  **Verdict:** PASS | PARTIAL | FAIL
129
153
 
130
- ### Findings (ranked)
154
+ ##### Findings (ranked)
131
155
 
132
- | # | Severity | Dimension | Finding | Location |
156
+ | # | Priority | Dimension | Finding | Location |
133
157
  |---|----------|-----------|---------|----------|
134
- | 1 | blocker | security | SQL injection in query builder | `src/api/users.ts:42` |
135
- | 2 | major | architecture | Shallow pass-through UserService | `src/services/users.ts:15` |
136
- | 3 | minor | correctness | Missing error branch in createUser | `src/api/users.ts:48` |
158
+ | 1 | P1 (blocker) | security | SQL injection in query builder | `src/api/users.ts:42` |
159
+ | 2 | P2 (major) | architecture | Shallow pass-through UserService | `src/services/users.ts:15` |
160
+ | 3 | P3 (minor) | correctness | Missing error branch in createUser | `src/api/users.ts:48` |
161
+ | 4 | P4 (advisory) | usability | `createUser` error text omits the field name | `src/api/users.ts:51` |
137
162
 
138
- ### Functional Traceability
163
+ ##### Functional Traceability
139
164
 
140
165
  | Req | Status | Evidence |
141
166
  |-----|--------|----------|
@@ -145,6 +170,16 @@ enforcement checklist. Reference:
145
170
  **Next:** <one-line action>
146
171
  ```
147
172
 
173
+ **No findings.** Never invent a defect to populate the table. Emit one substantive `P4 (advisory)`
174
+ row that states what was reviewed and what was found — placeholder cells (empty, `—`, `n/a`) are
175
+ rejected by the checker, and so they should be:
176
+
177
+ ```markdown
178
+ | # | Priority | Dimension | Finding | Location |
179
+ |---|----------|-----------|---------|----------|
180
+ | 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
+ ```
182
+
148
183
  With `--json`, emit the same shape as a JSON object for machine consumption.
149
184
 
150
185
  ## Out of scope
@@ -0,0 +1,17 @@
1
+ /**
2
+ * GENERATED by scripts/commands/bundle-plugin-lib.ts — do not edit.
3
+ * Source of truth: packages/app/src/workflow/idea-handoff-cli.ts (task 0824).
4
+ */
5
+ export declare interface IdeaHandoffCliEnv {
6
+ __runId?: string;
7
+ featureId?: string;
8
+ spurBin?: string;
9
+ }
10
+ export declare interface IdeaHandoffCliOutcome {
11
+ exitCode: number;
12
+ result?: unknown;
13
+ }
14
+ export declare function runIdeaHandoffCli(
15
+ env: IdeaHandoffCliEnv,
16
+ run?: (input: { runId: string; featureId: string; spurBin: string }) => Promise<unknown>,
17
+ ): Promise<IdeaHandoffCliOutcome>;