@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/config/config.example.yaml +29 -18
- package/config/config.global.yaml +10 -11
- package/config/pipeline-budgets.json +34 -2
- package/config/plugin-scripts.json +25 -0
- package/config/rules/boundary/config-loading-ownership.yaml +0 -3
- package/config/rules/boundary/dao-boundary.yaml +4 -17
- package/config/rules/boundary/planning-folder-hardcode.yaml +0 -1
- package/config/rules/boundary/sp-no-vendor-refs.yaml +3 -2
- package/config/rules/boundary/sp-runtime-path.yaml +3 -14
- package/config/rules/quality/coverage-gate.yaml +3 -14
- package/config/rules/quality/tsdoc-exports.yaml +4 -7
- package/config/rules/strict/http-boundaries.yaml +5 -8
- package/config/rules/strict/runtime-boundaries.yaml +1 -5
- package/config/rules/structure/protected-files.yaml +9 -3
- package/config/rules/structure/test-focus-skip.yaml +0 -2
- package/config/rules/structure/test-location.yaml +0 -5
- package/config/rules/surface/check-cli-surface.yaml +3 -2
- package/config/rules/typescript/bun-tooling.yaml +5 -7
- package/config/rules/typescript/guarded-happy-dom-register.yaml +0 -2
- package/config/rules/typescript/happy-dom-teardown.yaml +0 -2
- package/config/rules/typescript/no-biome-suppressions.yaml +0 -2
- package/config/rules/typescript/no-debugger.yaml +0 -2
- package/config/rules/typescript/no-eslint-suppressions.yaml +0 -4
- package/config/rules/typescript/no-leaky-module-mocks.yaml +6 -13
- package/config/rules/typescript/no-module-scope-import-calls.yaml +0 -2
- package/config/rules/typescript/no-syscall-emulation-in-boundary-mock.yaml +0 -3
- package/config/rules/typescript/no-unmocked-module-eval-side-effects.yaml +0 -3
- package/config/rules/typescript/output-boundaries.yaml +0 -3
- package/config/rules/typescript/prefer-accessible-role-for-button-queries.yaml +0 -3
- package/config/rules/ui/ui-import-boundary.yaml +1 -5
- package/config/templates/AGENTS.md +26 -23
- package/config/templates/docs/00_ADR.md +13 -23
- package/config/templates/docs/01_PRD.md +5 -2
- package/config/templates/docs/02_ROADMAP.md +9 -13
- package/config/templates/docs/03_ARCHITECTURE.md +2 -2
- package/config/templates/docs/04_DESIGN.md +12 -31
- package/config/templates/docs/05_FEATURES.md +6 -18
- package/config/templates/docs/99_PROJECT_CONSTITUTION.md +162 -394
- package/config/transition-shims.json +7 -7
- package/config/workflows/basic.yaml +4 -0
- package/config/workflows/docs-pipeline.yaml +13 -14
- package/config/workflows/feature-dev.yaml +20 -65
- package/config/workflows/history-anatomy.yaml +22 -1
- package/config/workflows/idea-pipeline.yaml +53 -97
- package/config/workflows/pr-review.yaml +21 -33
- package/config/workflows/task-pipeline.yaml +87 -330
- package/config/workflows/wayfinder-resolution.yaml +12 -26
- package/config/workflows/wrapup-pipeline.yaml +48 -189
- package/package.json +9 -9
- package/plugins/sp/README.md +22 -8
- package/plugins/sp/agents/expert-spur.md +41 -19
- package/plugins/sp/agents/super-reviewer.md +43 -8
- package/plugins/sp/lib/idea-handoff.generated.d.mts +17 -0
- package/plugins/sp/lib/idea-handoff.generated.mjs +1301 -0
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/scripts/feature-dev-precheck.mjs +146 -0
- package/plugins/sp/scripts/feature-dev-precheck.ts +238 -0
- package/plugins/sp/scripts/idea-handoff.mjs +27 -0
- package/plugins/sp/scripts/idea-handoff.ts +44 -0
- package/plugins/sp/scripts/quality-gate.mjs +165 -0
- package/plugins/sp/scripts/quality-gate.ts +217 -0
- package/plugins/sp/scripts/verify-answer-lint.ts +21 -3
- package/plugins/sp/scripts/workflow-step-profile.mjs +319 -0
- package/plugins/sp/scripts/workflow-step-profile.ts +456 -0
- package/plugins/sp/scripts/wrapup-steps.mjs +350 -0
- package/plugins/sp/scripts/wrapup-steps.ts +466 -0
- package/plugins/sp/skills/conflict-finding/SKILL.md +6 -0
- package/plugins/sp/skills/daily-summary/SKILL.md +1 -1
- package/plugins/sp/skills/doc-evolve/SKILL.md +26 -40
- package/plugins/sp/skills/doc-evolve/references/operations.md +17 -30
- package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +1 -1
- package/plugins/sp/skills/spec-decomposition/references/decomposition.md +29 -0
- package/plugins/sp/skills/spur-cli/references/agent.md +56 -14
- package/plugins/sp/skills/spur-cli/references/message.md +30 -3
- package/plugins/sp/skills/spur-cli/references/projects.md +45 -1
- package/plugins/sp/skills/spur-cli/references/self.md +5 -4
- package/plugins/sp/skills/spur-cli/references/serve.md +5 -4
- package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +17 -1
- package/plugins/sp/skills/spur-cli/references/tasks.md +32 -2
- package/plugins/sp/skills/spur-cli/references/team.md +21 -1
- package/plugins/sp/skills/spur-cli/references/workflows/operations.md +6 -3
- package/plugins/sp/skills/spur-cli/references/workflows/workflow-fit-and-tuning.md +57 -18
- package/plugins/sp/skills/spur-composer/SKILL.md +145 -0
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +14 -0
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +3 -3
- package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +12 -0
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +46 -4
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +24 -0
- package/plugins/sp/skills/spur-doctor/SKILL.md +138 -0
- package/plugins/sp/skills/taste-refactoring-api/README.md +43 -0
- package/plugins/sp/skills/taste-refactoring-api/SKILL.md +334 -0
- package/plugins/sp/skills/taste-refactoring-api/checklists/daily-api-review.md +71 -0
- package/plugins/sp/skills/taste-refactoring-api/examples/refactor-example.md +72 -0
- package/plugins/sp/skills/taste-refactoring-api/examples/review-template.md +93 -0
- package/plugins/sp/skills/taste-refactoring-api/references/api-refactoring-playbook.md +253 -0
- package/plugins/sp/skills/taste-refactoring-api/references/protocol-modes.md +79 -0
- package/plugins/sp/skills/taste-refactoring-api/references/research-basis.md +58 -0
- package/plugins/sp/skills/taste-refactoring-architect/README.md +26 -0
- package/plugins/sp/skills/taste-refactoring-architect/SKILL.md +471 -0
- package/plugins/sp/skills/taste-refactoring-architect/checklists/daily-architecture-review.md +48 -0
- package/plugins/sp/skills/taste-refactoring-architect/examples/refactor-example.md +55 -0
- package/plugins/sp/skills/taste-refactoring-architect/examples/review-template.md +51 -0
- package/plugins/sp/skills/taste-refactoring-architect/references/architecture-refactoring-playbook.md +173 -0
- package/plugins/sp/skills/taste-refactoring-architect/references/research-basis.md +28 -0
- package/plugins/sp/skills/taste-refactoring-tests/README.md +28 -0
- package/plugins/sp/skills/taste-refactoring-tests/SKILL.md +482 -0
- package/plugins/sp/skills/taste-refactoring-tests/checklists/daily-test-review.md +39 -0
- package/plugins/sp/skills/taste-refactoring-tests/examples/refactor-example.md +85 -0
- package/plugins/sp/skills/taste-refactoring-tests/examples/review-template.md +59 -0
- package/plugins/sp/skills/taste-refactoring-tests/references/research-basis.md +47 -0
- package/plugins/sp/skills/taste-refactoring-tests/references/test-refactoring-playbook.md +222 -0
- package/plugins/sp/skills/taste-refactoring-ui/README.md +12 -0
- package/plugins/sp/skills/taste-refactoring-ui/SKILL.md +290 -0
- package/plugins/sp/skills/taste-refactoring-ui/checklists/daily-ui-review.md +72 -0
- package/plugins/sp/skills/taste-refactoring-ui/examples/review-template.md +51 -0
- package/plugins/sp/skills/taste-refactoring-ui/references/refactoring-ui-playbook.md +170 -0
- package/plugins/sp/skills/wayfinder/SKILL.md +2 -2
- package/plugins/sp/skills/wayfinder/references/pipeline-resolution.md +30 -0
- package/schemas/spur-config.schema.json +49 -0
- package/spur.js +46936 -44198
- package/web/_astro/{BoardApp.CHQ1lycZ.js → BoardApp.B1U26g3I.js} +97 -95
- package/web/_astro/BoardApp.Csgyg-lS.js +1 -0
- package/web/_astro/{TaskDetail.GKfQJ60c.js → TaskDetail.DwPqpq7v.js} +1 -1
- package/web/_astro/{arc.DWEtA3Tx.js → arc.CweZEjN2.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.DB42oWmP.js → architectureDiagram-3BPJPVTR.D89pbDuv.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.rhv-zNQV.js → blockDiagram-GPEHLZMM.BOuTeEpX.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.Ci4-4VvY.js → c4Diagram-AAUBKEIU.CASbkWZF.js} +1 -1
- package/web/_astro/channel.Cx6sXxhq.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.Cc9veUgf.js → chunk-2J33WTMH.BKQYtOvY.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.Bec9c4eI.js → chunk-4BX2VUAB.9sHLdMtG.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.DoV8S1iB.js → chunk-55IACEB6.wOLXWlPs.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.DwR-Qlyj.js → chunk-727SXJPM.DovFbwg3.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.ND_a81WY.js → chunk-AQP2D5EJ.B1Weod1X.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.Wv_jwG48.js → chunk-FMBD7UC4.TEMS04st.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.CXKXCMmp.js → chunk-ND2GUHAM.Cp8VT1wQ.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.nkaoNYQq.js → chunk-QZHKN3VN.BzATdEcP.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.cMQcVlQu.js → classDiagram-4FO5ZUOK.C9BOCfAO.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.cMQcVlQu.js → classDiagram-v2-Q7XG4LA2.C9BOCfAO.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.OaDJ7Mr2.js → cose-bilkent-S5V4N54A.DUnr4UAw.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.Chi8IphF.js → cynefin-OW5HDTMX.rYq5uM3D.js} +1 -1
- package/web/_astro/{cytoscape.esm.DzSz-X2X.js → cytoscape.esm.BB4DxJjf.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.CzK2t_Fp.js → dagre-BM42HDAG.CWeNKe3I.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.DRvxlVS7.js → diagram-2AECGRRQ.DCkfls10.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.CnYvNdwA.js → diagram-5GNKFQAL.D5U4JCka.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.CpLpMw5R.js → diagram-KO2AKTUF.BZJgqaqG.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.JTb78qUA.js → diagram-LMA3HP47.DoMeHvPR.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.Bk-1jDIb.js → diagram-OG6HWLK6.B50qwwWX.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.D8hN9GZq.js → erDiagram-TEJ5UH35.DdGPG6LK.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.-6zQr6m5.js → flowDiagram-I6XJVG4X.QP2MJ12u.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.DboLQ9ca.js → ganttDiagram-6RSMTGT7.BI6LgKSy.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.4tYvJKGR.js → gitGraphDiagram-PVQCEYII.npPZiC2G.js} +1 -1
- package/web/_astro/index.DayyIngm.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.Bd9rXpsB.js → infoDiagram-5YYISTIA.DCJCBVbp.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.CvMoaf67.js → ishikawaDiagram-YF4QCWOH.BMLV-3I1.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.Ccy1CA7y.js → journeyDiagram-JHISSGLW.LE58crde.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.0MaMqHNS.js → kanban-definition-UN3LZRKU.BPbz8rH9.js} +1 -1
- package/web/_astro/{linear.CHXgcIbN.js → linear.DhZaBtYh.js} +1 -1
- package/web/_astro/{mermaid.core.Ca-kcelG.js → mermaid.core.BD5-jXum.js} +6 -6
- package/web/_astro/{mindmap-definition-RKZ34NQL.BUIDlHa0.js → mindmap-definition-RKZ34NQL.MTJyrQ65.js} +1 -1
- package/web/_astro/ordinal.BYWQX77i.js +1 -0
- package/web/_astro/{pieDiagram-4H26LBE5.2dX3CU1s.js → pieDiagram-4H26LBE5.BrDhDvIS.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.B3LBlRiv.js → quadrantDiagram-W4KKPZXB.71d73_5N.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.X12I2uNx.js → requirementDiagram-4Y6WPE33.Bga6UF-z.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.BXohIHqx.js → sankeyDiagram-5OEKKPKP.BnHs4K82.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.C37ZIUzg.js → sequenceDiagram-3UESZ5HK.DsfY2gnj.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.BRgz317z.js → stateDiagram-AJRCARHV.DvsTSc9a.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.7VYSXN9-.js → stateDiagram-v2-BHNVJYJU.DxzzmHUR.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.BVNz_HiN.js → timeline-definition-PNZ67QCA.4ZuQmOTt.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.CHVDkPX4.js → vennDiagram-CIIHVFJN.Ck5Q86SG.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.EQQ_qT9v.js → wardleyDiagram-YWT4CUSO.BK7k2hXr.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.DrAT9WoP.js → xychartDiagram-2RQKCTM6.DfCrgauK.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.DV9kx0wo.js +0 -1
- package/web/_astro/channel.BAI6xLeV.js +0 -1
- package/web/_astro/index.Dcr_8fiK.css +0 -1
- 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`,
|
|
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`,
|
|
27
|
-
|
|
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
|
-
|
|
39
|
-
|
|
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.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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:
|
|
99
|
-
- Other platforms: invoke `sp
|
|
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
|
-
##
|
|
120
|
+
## Hand-offs
|
|
102
121
|
|
|
103
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
154
|
+
##### Findings (ranked)
|
|
131
155
|
|
|
132
|
-
| # |
|
|
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
|
-
|
|
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>;
|