@gobing-ai/spur 0.4.14 → 0.4.16
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.global.yaml +21 -8
- package/config/decisions/executor.yaml +53 -0
- package/config/decisions/task-pipeline.yaml +44 -28
- package/config/pipeline-budgets.json +0 -14
- package/config/workflow-candidates.json +18 -0
- package/config/workflows/feature-lifecycle.yaml +9 -16
- package/config/workflows/idea-pipeline.yaml +158 -740
- package/config/workflows/task-pipeline.yaml +66 -54
- package/config/workflows/wrapup-pipeline.yaml +91 -623
- package/package.json +11 -10
- package/plugins/sp/README.md +9 -5
- package/plugins/sp/agents/expert-spur.md +3 -0
- package/plugins/sp/agents/super-planner.md +5 -1
- package/plugins/sp/agents/super-reviewer.md +43 -12
- package/plugins/sp/commands/dev-fixall.md +7 -2
- package/plugins/sp/commands/dev-idea.md +15 -6
- package/plugins/sp/commands/dev-plan.md +1 -1
- package/plugins/sp/commands/dev-pr-review.md +6 -6
- package/plugins/sp/commands/dev-run.md +3 -0
- package/plugins/sp/commands/dev-runall.md +6 -3
- package/plugins/sp/commands/dev-verify.md +1 -1
- package/plugins/sp/commands/dev-wrap.md +1 -1
- package/plugins/sp/commands/dev-wrapall.md +4 -4
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/skills/code-implementation/SKILL.md +8 -8
- package/plugins/sp/skills/code-improvement/SKILL.md +3 -3
- package/plugins/sp/skills/code-review/references/verification-before-completion.md +5 -4
- package/plugins/sp/skills/code-verification/SKILL.md +4 -4
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +27 -11
- package/plugins/sp/skills/functional-review/SKILL.md +1 -1
- package/plugins/sp/skills/functional-review/references/verdict-schema.md +1 -1
- package/plugins/sp/skills/next-router/references/routing-table.md +1 -1
- package/plugins/sp/skills/pr-reviewing/SKILL.md +36 -18
- package/plugins/sp/skills/spec-decomposition/references/decomposition.md +2 -1
- package/plugins/sp/skills/spur-check/SKILL.md +1 -1
- package/plugins/sp/skills/spur-cli/SKILL.md +23 -2
- package/plugins/sp/skills/spur-cli/references/agent.md +12 -0
- package/plugins/sp/skills/spur-cli/references/builder.md +2 -2
- package/plugins/sp/skills/spur-cli/references/decision/lifecycle.md +166 -0
- package/plugins/sp/skills/spur-cli/references/decision.md +146 -16
- package/plugins/sp/skills/spur-cli/references/features.md +19 -0
- package/plugins/sp/skills/spur-cli/references/rules.md +2 -0
- package/plugins/sp/skills/spur-cli/references/tasks.md +14 -1
- package/plugins/sp/skills/spur-cli/references/workflows/authoring-workflows.md +1 -1
- package/plugins/sp/skills/spur-cli/references/workflows/workflow-fit-and-tuning.md +3 -2
- package/plugins/sp/skills/spur-cli/references/workflows.md +9 -0
- package/plugins/sp/skills/spur-composer/SKILL.md +20 -1
- package/plugins/sp/skills/spur-dev/SKILL.md +16 -16
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +2 -1
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +2 -2
- package/plugins/sp/skills/spur-dev/references/decision-points.md +97 -0
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +18 -18
- package/plugins/sp/skills/spur-dev/references/execution-batch-report.md +1 -1
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +19 -10
- package/plugins/sp/skills/spur-dev/references/execution-parallel-isolation.md +4 -4
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +41 -29
- package/plugins/sp/skills/spur-dev/references/execution-worktree-landing.md +34 -2
- package/plugins/sp/skills/spur-dev/references/execution-worktree-setup.md +4 -4
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +3 -3
- package/plugins/sp/skills/spur-dev/references/gate-checklists.md +3 -2
- package/plugins/sp/skills/spur-dev/references/glossary.md +12 -3
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +7 -6
- package/plugins/sp/skills/spur-doctor/SKILL.md +23 -0
- package/plugins/sp/skills/wayfinder/SKILL.md +11 -1
- package/spur.js +25617 -24290
- package/web/_astro/{BoardApp.Bjdp3XWV.js → BoardApp.CC7Mwswv.js} +65 -65
- package/web/_astro/{BoardApp.DCDZxLlQ.js → BoardApp.mWyrWCAR.js} +1 -1
- package/web/_astro/{TaskDetail.B3vBxynO.js → TaskDetail.CtAXuiv8.js} +1 -1
- package/web/_astro/{arc.DcuHTB_T.js → arc.Duf4u60i.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.ClOFWBON.js → architectureDiagram-3BPJPVTR.JoymtqxN.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.otYyr7Zb.js → blockDiagram-GPEHLZMM.BvmhcioC.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.BCjpc9LP.js → c4Diagram-AAUBKEIU.CfaWkgoQ.js} +1 -1
- package/web/_astro/channel.DtEPXXcH.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.D5Wpnpt_.js → chunk-2J33WTMH.B7uR02cD.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.DkQGtWNz.js → chunk-4BX2VUAB.SwiEauYR.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.B7dqjAip.js → chunk-55IACEB6.6ZRCK8PO.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.BDQvnKE2.js → chunk-727SXJPM.Cxra_G3N.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.D92doBX5.js → chunk-AQP2D5EJ.Cxd7gZeX.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.C968oI5G.js → chunk-FMBD7UC4.DCLhFkVc.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.AkkYC1bY.js → chunk-ND2GUHAM.B9AmKcv6.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.sCc-rKKo.js → chunk-QZHKN3VN.DOjCvl6S.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.pOQ9u0mY.js → classDiagram-4FO5ZUOK.BMiT_mNf.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.pOQ9u0mY.js → classDiagram-v2-Q7XG4LA2.BMiT_mNf.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.CRaeD6FY.js → cose-bilkent-S5V4N54A.mLBCEGjI.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.BiCPBu54.js → cynefin-OW5HDTMX.CjDAY0qn.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.C1-q3vkT.js → dagre-BM42HDAG._G_sP8fP.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.BSVOv30O.js → diagram-2AECGRRQ.39OcfSuz.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.CHMkjJ-V.js → diagram-5GNKFQAL.D7v_eNC4.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.CKY9M564.js → diagram-KO2AKTUF.Da1x-lhg.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.B9yNJiTP.js → diagram-LMA3HP47.C8EnzbEb.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.Dk8AUGsk.js → diagram-OG6HWLK6.DPnBj69F.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.BQHR89TZ.js → erDiagram-TEJ5UH35.CXMu2TIh.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.oNkWVgoK.js → flowDiagram-I6XJVG4X.ZklePVtQ.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.Kz2U2nu9.js → ganttDiagram-6RSMTGT7.BhYOkdqk.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.DHIZ_wPq.js → gitGraphDiagram-PVQCEYII.CADyX8a1.js} +1 -1
- package/web/_astro/{infoDiagram-5YYISTIA.D0NJLcv9.js → infoDiagram-5YYISTIA.BsdmwjHt.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.CFEfTWRG.js → ishikawaDiagram-YF4QCWOH.CzjZ3Crd.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.Dc7IE7I4.js → journeyDiagram-JHISSGLW.Bxj-ZH_t.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.D5v0xO9k.js → kanban-definition-UN3LZRKU.Cbg3wVvX.js} +1 -1
- package/web/_astro/{linear.wR5KzXnE.js → linear.DJNUrBI9.js} +1 -1
- package/web/_astro/{mermaid.core.BDQ2FoPd.js → mermaid.core.DVHQV3SF.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.W6_INsia.js → mindmap-definition-RKZ34NQL.DyomosRU.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.61ihbgkK.js → pieDiagram-4H26LBE5.DajtFknN.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.B5lEpFLo.js → quadrantDiagram-W4KKPZXB.Bjq6SjGe.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.CmhVBVX0.js → requirementDiagram-4Y6WPE33.ubBVqGLP.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.D7Vvj9Wf.js → sankeyDiagram-5OEKKPKP.I4q46xd-.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.B1vPLixM.js → sequenceDiagram-3UESZ5HK.DsCgZIa8.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.BnACmrGi.js → stateDiagram-AJRCARHV.DcYjYSqT.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.CW4pnmc3.js → stateDiagram-v2-BHNVJYJU.Dt8yPqiS.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.CkzMCPnC.js → timeline-definition-PNZ67QCA.0YTkoa5F.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.CY4aNdAR.js → vennDiagram-CIIHVFJN.BNl0l1hs.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.BtoU9UFk.js → wardleyDiagram-YWT4CUSO.BYSX6cfn.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6._9ijUUAs.js → xychartDiagram-2RQKCTM6.DzxxpixK.js} +1 -1
- package/web/index.html +1 -1
- package/worker/laya_worker.py +219 -0
- package/config/workflows/feature-verification.yaml +0 -98
- package/config/workflows/pr-review.yaml +0 -209
- package/config/workflows/wayfinder-resolution.yaml +0 -302
- package/plugins/sp/skills/wayfinder/references/pipeline-resolution.md +0 -30
- package/web/_astro/channel.qgOLXjI_.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/spur",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.16",
|
|
4
4
|
"description": "Spur CLI — local-first harness for mainstream coding agents: constraint checking, workflow orchestration, agent health, and history analytics. Bun-native; exposes the `spur` command.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"spur",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"files": [
|
|
33
33
|
"spur.js",
|
|
34
34
|
"config",
|
|
35
|
+
"worker",
|
|
35
36
|
"schemas",
|
|
36
37
|
"board",
|
|
37
38
|
"web",
|
|
@@ -49,7 +50,7 @@
|
|
|
49
50
|
"dev": "bun run src/index.ts",
|
|
50
51
|
"build": "bun run ../../scripts/spur-dev.ts build-cli",
|
|
51
52
|
"build:binaries": "bun run ../../scripts/spur-dev.ts build-binaries",
|
|
52
|
-
"build:bundle": "bun run ../../scripts/spur-dev.ts bundle-web && bun run ../../scripts/spur-dev.ts emit-board-types && bun build src/index.ts --target=bun --outfile spur.js --external @johnhenry/backend-webgpu && bun run ../../scripts/spur-dev.ts bundle-config config && bun run ../../scripts/spur-dev.ts bundle-plugins",
|
|
53
|
+
"build:bundle": "bun run ../../scripts/spur-dev.ts bundle-web && bun run ../../scripts/spur-dev.ts emit-board-types && bun build src/index.ts --target=bun --outfile spur.js --external @johnhenry/backend-webgpu && bun run ../../scripts/spur-dev.ts bundle-config config && bun run ../../scripts/spur-dev.ts bundle-laya-worker && bun run ../../scripts/spur-dev.ts bundle-plugins",
|
|
53
54
|
"test": "bun test tests --coverage --coverage-dir=../../.coverage --pass-with-no-tests",
|
|
54
55
|
"typecheck": "tsc --noEmit",
|
|
55
56
|
"prepack": "bun run build:bundle",
|
|
@@ -57,14 +58,14 @@
|
|
|
57
58
|
},
|
|
58
59
|
"devDependencies": {
|
|
59
60
|
"@commander-js/extra-typings": "^14.0.0",
|
|
60
|
-
"@gobing-ai/ts-db": "^0.5.
|
|
61
|
-
"@gobing-ai/ts-ai-runner": "^0.5.
|
|
62
|
-
"@gobing-ai/ts-dual-workflow-engine": "^0.5.
|
|
63
|
-
"@gobing-ai/ts-infra": "^0.5.
|
|
64
|
-
"@gobing-ai/ts-llm-jsonl-importer": "^0.5.
|
|
65
|
-
"@gobing-ai/ts-rule-engine": "^0.5.
|
|
66
|
-
"@gobing-ai/ts-runtime": "^0.5.
|
|
67
|
-
"@gobing-ai/ts-utils": "^0.5.
|
|
61
|
+
"@gobing-ai/ts-db": "^0.5.32",
|
|
62
|
+
"@gobing-ai/ts-ai-runner": "^0.5.32",
|
|
63
|
+
"@gobing-ai/ts-dual-workflow-engine": "^0.5.32",
|
|
64
|
+
"@gobing-ai/ts-infra": "^0.5.32",
|
|
65
|
+
"@gobing-ai/ts-llm-jsonl-importer": "^0.5.32",
|
|
66
|
+
"@gobing-ai/ts-rule-engine": "^0.5.32",
|
|
67
|
+
"@gobing-ai/ts-runtime": "^0.5.32",
|
|
68
|
+
"@gobing-ai/ts-utils": "^0.5.32",
|
|
68
69
|
"@types/bun": "1.4.3",
|
|
69
70
|
"@types/figlet": "^1.7.0",
|
|
70
71
|
"@types/node-notifier": "8.0.5",
|
package/plugins/sp/README.md
CHANGED
|
@@ -29,7 +29,7 @@ One feature, start to finish — see the Command index below for exact command n
|
|
|
29
29
|
```
|
|
30
30
|
idea/plan vague description → feature + AC + decomposed task batch
|
|
31
31
|
↓
|
|
32
|
-
run <wbs> → pipeline: precheck → implement →
|
|
32
|
+
run <wbs> → pipeline: precheck → implement → gate ⇄ remediate → review → done (decision points route repair, stop and approval)
|
|
33
33
|
↓
|
|
34
34
|
verify <wbs> → traceability + AC verdict (PASS clears the gate; this also runs inside the run step)
|
|
35
35
|
↓
|
|
@@ -95,8 +95,8 @@ list this README is checked against.
|
|
|
95
95
|
|
|
96
96
|
| Command | What it does |
|
|
97
97
|
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
98
|
-
| `dev-idea` | Turn a vague idea into a feature with AC and a decomposed task batch — discovery, idea-eval, feature-create, AC,
|
|
99
|
-
| `dev-plan` | Plan a feature from a written description — intake → feature create → AC generation →
|
|
98
|
+
| `dev-idea` | Turn a vague idea into a feature with AC and a decomposed task batch — discovery, idea-eval, feature-create, AC, system-design, decompose, batch-create, handoff |
|
|
99
|
+
| `dev-plan` | Plan a feature from a written description — intake → feature create → AC generation → decomposition → batch-create |
|
|
100
100
|
| `dev-brainstorm` | Interactive solution design — heuristic discovery interview followed by structured ideation with trade-offs and confidence scoring |
|
|
101
101
|
| `dev-find-way` | Wayfinder — chart a multi-session investigation map, or resolve one map ticket; always in an isolated git worktree + branch (`--worktree`, `--wrap`) |
|
|
102
102
|
| `dev-refine` | Refine task requirements via structured Q&A — clarify scope, elicit missing details, tighten acceptance criteria; `--depth ready` audits and corrects existing claims, freezes the spec, promotes to todo |
|
|
@@ -348,7 +348,7 @@ surface or run one workflow. All skills target the same five core platforms: `cl
|
|
|
348
348
|
| `conflict-finding` | 1.0 | Authority-aware semantic audit — four-pillar (source/task/feature/authority) conflict discovery, claim-specific authority resolution, reproducible evidence, confirmed owner-routed remediation; backs `/sp:dev-find-conflict` |
|
|
349
349
|
| `fleet-join` | 1.0 | Guest fleet occupancy — join as a live guest occupant, loop `spur agent wait --inbox` to pull work, reply through `spur message reply`, then leave; G73 (task 1081) |
|
|
350
350
|
| `next-feature` | 1.0 | Prompt-first feature frontier prioritizer — sync-first precondition, B3 actionability gate (cited, never restated), tiered rubric over measured signals, D1–D4 defect proposals conforming to the restructure map schema; backs `/sp:dev-find-next` |
|
|
351
|
-
| `pr-reviewing` | 1.0 | GitHub Codex PR review — PR prepare/reuse, `@codex review` request with per-HEAD dedupe, bounded polling, findings normalization, validated fix + re-review;
|
|
351
|
+
| `pr-reviewing` | 1.0 | GitHub Codex PR review — PR prepare/reuse, `@codex review` request with per-HEAD dedupe, bounded polling, findings normalization, validated fix + re-review; direct `spur builder pr-status`/`pr-check`/`pr-open`/`pr-review` sequence; backs `/sp:dev-pr-review` |
|
|
352
352
|
| `indexed-context` | 1.0 | Cross-agent project context — anatomy/learnings/pitfalls/buglog/memory in `.spur/context/`; hook-tracked token-ledger; graceful degradation on agents without hooks |
|
|
353
353
|
| `history-anatomy` | 1.0 | Diagnostic interpretation owner over already-imported history — daily/ad-hoc mode contract, closed finding taxonomy, twelve-section report contract, `enrich`/`validate` rubrics; no workflow launch, no JSONL fallback, no corpus mutation |
|
|
354
354
|
| `session-review` | 1.1 | Inline review of the active coding-agent session — compact outcomes, evidence-backed resolved/open issue classification, proposal-only improvements, and next actions; no workflow, import, delegation, or mutation |
|
|
@@ -695,7 +695,11 @@ pipeline owns one lifecycle phase:
|
|
|
695
695
|
| `task-pipeline.yaml` | Single-task execution | `/sp:dev-run` |
|
|
696
696
|
| `idea-pipeline.yaml` | Idea/planning → feature + tasks | `/sp:dev-idea`, `/sp:dev-plan` |
|
|
697
697
|
| `wrapup-pipeline.yaml` | Post-execution wrap-up | `/sp:dev-wrap`, `/sp:dev-wrapall` |
|
|
698
|
-
|
|
698
|
+
|
|
699
|
+
> 1251 (D66): the PR-review and wayfinder-investigate spines were retired — the PR sequencing
|
|
700
|
+
> lives in the `spur builder pr-status | pr-check | pr-open | pr-review` verbs, and the wayfinder
|
|
701
|
+
> investigate hop is a skill procedure in `sp:wayfinder`. 1246 retired the feature-verification
|
|
702
|
+
> wrapper the same way: `feature-lifecycle`'s `verifying` entry calls `spur feature verify`.
|
|
699
703
|
|
|
700
704
|
> 0946 (D64): the `decision-routing-example.yaml` authoring sample was retired from the catalogue
|
|
701
705
|
> (zero runs, example-only — `docs/design/workflow-catalogue-refactor.md` §10); the pattern lives on
|
|
@@ -42,6 +42,9 @@ Use for:
|
|
|
42
42
|
ladder, trace-driven rule tuning, and applying accepted doctor proposals.
|
|
43
43
|
- Evaluation and reflection campaigns via `sp:spur-doctor`: read-only evidence, history-finding
|
|
44
44
|
reflection, and a proposal table.
|
|
45
|
+
- Decision campaigns: catalog health and reliability audits (`spur decision status --json`,
|
|
46
|
+
`--reliability`, `--probe`) through `sp:spur-doctor`'s decision flags, and new or tuned decision
|
|
47
|
+
points through the decision lifecycle and `sp:spur-composer` (shared ids need operator consent).
|
|
45
48
|
|
|
46
49
|
One bounded campaign per dispatch. Do not use for one CLI invocation. Do not use for
|
|
47
50
|
planning→implementation→verification lifecycle or batch task execution; `sp:spur-dev` owns that
|
|
@@ -89,6 +89,9 @@ You own the spaces **between** task runs:
|
|
|
89
89
|
timeout prints one checkpoint and exits 1; the run continues, never cancelled or relaunched) plus
|
|
90
90
|
`.spur/run/<wbs>-verdict.json`, accepted only when the trace's `.run.runId` equals the dispatched
|
|
91
91
|
run and the verdict's mtime ≥ the trace's `.run.startedAt` — otherwise `stale-evidence` (Step 3.3).
|
|
92
|
+
A `failed` run's cause is its decision row (`failure-class` / `review-failure-class` = `stop`, or
|
|
93
|
+
approval `DENIED`); report it per [reporting a run](../skills/spur-dev/references/decision-points.md#reporting-a-run)
|
|
94
|
+
and do not re-judge it before recovery.
|
|
92
95
|
- **One-shot recovery (optional)** - on non-PASS / stuck status, consult next-router **once** for that
|
|
93
96
|
WBS (`recoveryHint` / dry-run plan): print the child command, or dispatch once only when the batch
|
|
94
97
|
was started with `--auto` and cardinality is 1. Never self-loop until done.
|
|
@@ -135,7 +138,8 @@ Your decision-autonomy is **at the batch level**, bounded by the global Decision
|
|
|
135
138
|
| Continue/halt between task runs | Whether to auto-approve a HITL gate inside a task (only `--auto` does, via `vars.profile`) |
|
|
136
139
|
|
|
137
140
|
Surface blockers/HITL **only at the batch boundary** (between task runs). A pipeline run that pauses
|
|
138
|
-
on its
|
|
141
|
+
on its `review`-state approval decision point (interactive profiles only; under `profile=auto` the
|
|
142
|
+
decision point answers itself, and a deferred answer is no objection) is surfaced to the operator as a
|
|
139
143
|
batch-level event: "task 0042 is awaiting approval - `spur workflow continue <run-id> --yes` to
|
|
140
144
|
approve, or provide feedback". You do not answer the gate from inside a step.
|
|
141
145
|
|
|
@@ -70,8 +70,10 @@ Only when invoked under the pipeline do blocker/major findings block a gate.
|
|
|
70
70
|
|
|
71
71
|
Invoked by `task-pipeline.yaml`'s `review` step. The pipeline hands you the task WBS and the
|
|
72
72
|
`--focus` dimensions. You run the review, write findings to the task's `## Review` section, and
|
|
73
|
-
return a PASS/PARTIAL/FAIL verdict
|
|
74
|
-
|
|
73
|
+
return a PASS/PARTIAL/FAIL verdict. `spur task verdict` certifies the answer; a PASS then reaches the
|
|
74
|
+
approval decision point before `done`, and a non-PASS feeds the `review-failure-class` decision
|
|
75
|
+
(`fix` → `remediate`, `stop` → `failed`). `blocker`/`major` findings block certification;
|
|
76
|
+
`minor`/`advisory` are recorded but do not block.
|
|
75
77
|
|
|
76
78
|
### Multi-target coordination (task 1023)
|
|
77
79
|
|
|
@@ -181,11 +183,11 @@ with the commit) drops the row from the sweep; `DEFER(<reason>)` reclassifies a
|
|
|
181
183
|
the cell, not the sentence. `OPEN` states "still live", and `ACCEPTED` marks a non-blocking P4
|
|
182
184
|
observation you are deliberately not acting on; both behave as an ordinary open row.
|
|
183
185
|
|
|
184
|
-
**Pipeline cost of an open finding (1122).** The review
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
block `done`; fixing one invalidates the certified digest and re-runs
|
|
188
|
-
a fresh digest. Only P4 rows and `DEFER`-ed P3 rows are wrap residuals — disposition the finding in
|
|
186
|
+
**Pipeline cost of an open finding (1122).** The review certification runs this same classification
|
|
187
|
+
(`spur task residual <wbs> review-gate`): a PASS whose table still carries an open P1-P3 row is a
|
|
188
|
+
non-PASS review, so the `review-failure-class` decision routes it to `remediate` instead of `done`.
|
|
189
|
+
Open P1-P3 findings block `done`; fixing one invalidates the certified digest and re-runs
|
|
190
|
+
gate → review on a fresh digest. Only P4 rows and `DEFER`-ed P3 rows are wrap residuals — disposition the finding in
|
|
189
191
|
its cell now, while you hold the context, instead of leaving the cost to be rediscovered after a
|
|
190
192
|
full cycle.
|
|
191
193
|
|
|
@@ -220,9 +222,9 @@ shallower.
|
|
|
220
222
|
```
|
|
221
223
|
|
|
222
224
|
The **Verdict line is machine-read** by the task pipeline (session finding after 1088): `review →
|
|
223
|
-
|
|
224
|
-
FAIL, PARTIAL, a missing line, a line split across two lines — routes the run
|
|
225
|
-
`review-
|
|
225
|
+
done` requires a line matching `Verdict: PASS` (plain or bold), and ANYTHING ELSE —
|
|
226
|
+
FAIL, PARTIAL, a missing line, a line split across two lines — routes the run through the
|
|
227
|
+
`review-failure-class` decision into the bounded `remediate` hop. Keep it on one line, in that shape, in every
|
|
226
228
|
review answer; never restate it as prose only.
|
|
227
229
|
|
|
228
230
|
**State `Confidence: HIGH | MEDIUM | LOW` — the gate derives it from your dispositions (ADR-141).**
|
|
@@ -243,6 +245,35 @@ No verdict-artifact field, no receipt level, no per-finding grade, and no operat
|
|
|
243
245
|
(ADR-138 stands for every other carrier). Evidence gaps still belong in the report body: name them,
|
|
244
246
|
then let the dispositions decide the level.
|
|
245
247
|
|
|
248
|
+
**Two artifacts, one `Confidence:` line each (1254).** The body you write into `### Review` states
|
|
249
|
+
the disposition-derived level above. When the pipeline also captures your final answer as the
|
|
250
|
+
certification input for `spur task verdict`, that text is a *second* artifact with a *different*
|
|
251
|
+
consumer, and it carries the **evidence-derived** level (`deriveVerifyConfidence`): PASS with every
|
|
252
|
+
AC row MET on executable evidence (`test`/`command`) is HIGH; a citation-only (`static-ref`),
|
|
253
|
+
`manual-review`, `llm-judge` or `N/A` AC is MEDIUM; a non-PASS verdict or any PARTIAL/UNMET row is
|
|
254
|
+
LOW. It ends with exactly one plain `Verdict: PASS|PARTIAL|FAIL` line preceded by both tables, in
|
|
255
|
+
this exact shape:
|
|
256
|
+
|
|
257
|
+
| Req | Status | Evidence |
|
|
258
|
+
| --- | --- | --- |
|
|
259
|
+
| R1 | MET | `src/api/users.ts:42` |
|
|
260
|
+
|
|
261
|
+
| AC | Status | Evidence Type | Evidence |
|
|
262
|
+
| --- | --- | --- | --- |
|
|
263
|
+
| AC1 — the guard rejects an unsafe input | MET | test | `packages/app/tests/guard.test.ts:12` |
|
|
264
|
+
|
|
265
|
+
One row per declared requirement (`MET | PARTIAL | UNMET`, none omitted or merged) and one row per
|
|
266
|
+
acceptance criterion (`MET | PARTIAL | UNMET | N/A`), with the evidence-type token alone in its own
|
|
267
|
+
cell — `test | command | static-ref | manual-review | llm-judge | n/a`, or a `+` compound when more
|
|
268
|
+
than one kind applies. Evidence cells cite a repo-relative `path:line` or a named test/command. AC
|
|
269
|
+
identities stay the task's own (checklist label, title, bold head, `Scenario:` prefix, bracket tag or
|
|
270
|
+
declared `AC-N` alias): a linked feature's scenario title covers the task that implements it, and a
|
|
271
|
+
task-local criterion is legal as-is — it needs no feature credit.
|
|
272
|
+
Never repeat the section's disposition-derived `Confidence:` line here: a second `Confidence:` line is
|
|
273
|
+
a `confidence-duplicate` rejection of the whole answer, and so is a level the rows do not derive. A
|
|
274
|
+
PASS with executable AC and one accepted P4 therefore certifies as `Confidence: HIGH` in the answer
|
|
275
|
+
while the section keeps `Confidence: MEDIUM`.
|
|
276
|
+
|
|
246
277
|
**Source citations for external claims (one claim contract, 2026-10-12).** A Finding cell or a
|
|
247
278
|
Functional Traceability `Evidence` cell that asserts an external API/library claim carries a
|
|
248
279
|
verifiable citation in the SAME cell — a repo `path:line(-end)`, the external named-origin form
|
|
@@ -258,8 +289,8 @@ as an explicit gap in the report body (above), so a reader can re-check it.
|
|
|
258
289
|
|
|
259
290
|
**Machine-checked at the gate (findings table).** `spur task residual <wbs> review-gate` applies the same two
|
|
260
291
|
predicates to every finding row: a Finding cell carrying one of the verify lint's claim markers with
|
|
261
|
-
no citation form becomes a **blocking** `review-contract` item, so `review →
|
|
262
|
-
run enters `review-
|
|
292
|
+
no citation form becomes a **blocking** `review-contract` item, so `review → done` stops and the
|
|
293
|
+
run enters the `review-failure-class` decision. The `Location` column is deliberately not consulted as a citation —
|
|
263
294
|
that is the rule stated above, and a gate that accepted it would pass every row that has an anchor.
|
|
264
295
|
Functional Traceability `Evidence` cells stay reviewer-enforced (SECUA review): they are free prose
|
|
265
296
|
in a table the gate does not parse.
|
|
@@ -27,12 +27,17 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
27
27
|
|
|
28
28
|
## Implementation
|
|
29
29
|
|
|
30
|
-
Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#10-fixall) (fixall). Pipeline signal: when `--gate-log` is set (the `
|
|
30
|
+
Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#10-fixall) (fixall). Pipeline signal: when `--gate-log` is set (the `remediate` hop), run no full gate — the `gate` state's recheck immediately after is the deciding run (R4, task 0483).
|
|
31
31
|
|
|
32
|
-
When dispatched from the pipeline's
|
|
32
|
+
When dispatched from the pipeline's `remediate` hop (F96, task 0950), the gate log carries a
|
|
33
33
|
`residual artifact` block (`<wbs>-residuals.json`) and the findings file already
|
|
34
34
|
contains the merged residual anchors: treat those items as fix targets, in order,
|
|
35
35
|
alongside gate anchors. The fixer may write `.spur/run/<wbs>-residual-deferrals.json`
|
|
36
36
|
— one `{id, reason}` entry per item — but only for P3 findings or diff markers it
|
|
37
37
|
cannot fix inside the task; the done stage settles deferrals into follow-up tasks.
|
|
38
38
|
|
|
39
|
+
The `remediate` hop is entered only after a `fix` decision (`failure-class` on a red gate,
|
|
40
|
+
`review-failure-class` on a non-PASS review). A `stop` decision ends the run before this command
|
|
41
|
+
runs, so do not invoke it by hand to overrule a `stop`
|
|
42
|
+
([decision points](../skills/spur-dev/references/decision-points.md)).
|
|
43
|
+
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Turn a vague idea into a feature with AC and a decomposed task batch — discovery, idea-eval, feature-create, AC,
|
|
2
|
+
description: Turn a vague idea into a feature with AC and a decomposed task batch — discovery, idea-eval, feature-create, AC, system-design, decompose, batch-create (Design by default), handoff
|
|
3
3
|
role: planner
|
|
4
4
|
argument-hint: "\"<idea>\" | --from-file <path> [--skip-design] [--agent <inline|auto|name>] [--auto]"
|
|
5
5
|
allowed-tools: ["Bash", "Read", "Skill", "AskUserQuestion"]
|
|
@@ -44,10 +44,18 @@ trace records the answering source. `--auto` takes the recommended option at eac
|
|
|
44
44
|
|
|
45
45
|
| Gate | Pauses when | Recommendation comes from | `--auto` takes |
|
|
46
46
|
| --- | --- | --- | --- |
|
|
47
|
-
| idea-eval | after discovery | eval report `## Recommendation` (`proceed` / `reshape` / `drop`) | `proceed`/`reshape` → continue; `drop` → cancel;
|
|
48
|
-
| feature-check | after AC | recorded AC check + requirement coverage | PASS → continue; FAIL → revise AC (cap 3) |
|
|
47
|
+
| idea-eval | after discovery | eval report `## Recommendation` (`proceed` / `reshape` / `drop`); when unparseable, a model answer from the `idea-recommendation` decision | `proceed`/`reshape` → continue; `drop` → cancel; neither → the gate asks, and under `--auto` its `gate-evidence` decision answers (a deferred answer denies) |
|
|
49
48
|
| design-approval | after system-design (skipped by `--skip-design`) | recorded design check | PASS → approve; FAIL → still asks |
|
|
50
|
-
|
|
49
|
+
|
|
50
|
+
The AC check and the batch create are deterministic pipeline steps, not gates: `ac-generate`
|
|
51
|
+
runs `spur feature check` and routes on the recorded result (a FAIL retries the AC loop, cap 3),
|
|
52
|
+
and `batch-create-run` runs `spur task batch-create` and routes on its own recorded result.
|
|
53
|
+
Neither ever pauses, under any profile.
|
|
54
|
+
|
|
55
|
+
The rescue decisions and the gate answers are catalog decision points; their rows and switches
|
|
56
|
+
are in [decision points](../skills/spur-dev/references/decision-points.md). With both switches off
|
|
57
|
+
(the default) no model is called and a `--auto` run with no parseable recommendation stops at
|
|
58
|
+
idea-eval as a denial rather than creating a feature.
|
|
51
59
|
|
|
52
60
|
Flag → vars: `--auto` sets `profile=auto`, `idea_approved=true`, `design_approved=true`;
|
|
53
61
|
`--skip-design` sets `design=skip`.
|
|
@@ -78,5 +86,6 @@ Flag → vars: `--auto` sets `profile=auto`, `idea_approved=true`, `design_appro
|
|
|
78
86
|
- The `start` state persists the operator's idea argument (or the `--from-file` contents)
|
|
79
87
|
**unmodified** to `.spur/run/<run-id>-idea-input.md` (0887 R1); every model-bearing stage prompt
|
|
80
88
|
treats that file as the authoritative ask, and the precheck fails the run when it is empty or missing.
|
|
81
|
-
- Stage contract (discovery → idea-eval → feature-create →
|
|
82
|
-
decompose → batch-create → ready-prepare →
|
|
89
|
+
- Stage contract (discovery → idea-eval → feature-create → ac-generate → system-design
|
|
90
|
+
(conditional) → design-approval → decompose → batch-create-run → ready-prepare →
|
|
91
|
+
handoff-finalize → handoff): `plugins/sp/skills/spur-dev/references/dev-operations.md` § idea.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Plan a feature from a description — intake → feature create → AC generation →
|
|
2
|
+
description: Plan a feature from a description — intake → feature create → AC generation → decomposition → batch-create (Design by default)
|
|
3
3
|
role: planner
|
|
4
4
|
argument-hint: "\"<description>\" [--feature <id>] [--parent <feature-id>] [--skip-design] [--agent <inline|auto|name>] [--auto]"
|
|
5
5
|
allowed-tools: ["Bash", "Read", "Skill", "AskUserQuestion"]
|
|
@@ -17,9 +17,9 @@ and commits the verified ones. The invoking agent orchestrates.
|
|
|
17
17
|
| Flag | Description | Default |
|
|
18
18
|
| --- | --- | --- |
|
|
19
19
|
| `<mode>` | `status\|review\|fix` — status: read-only branch + PR state; review: local branch-diff review (or the GitHub Codex spine with `--codex`); fix: validate, fix and commit findings from either reviewer. | status |
|
|
20
|
-
| `--codex` | `review` only — route through the GitHub Codex spine (`pr-review
|
|
21
|
-
| `--force` | `review --codex` only — request a fresh review of the current HEAD even when it was already reviewed (`
|
|
22
|
-
| `--no-wait` | `review --codex` only — post the request and return `pending` without polling (`
|
|
20
|
+
| `--codex` | `review` only — route through the GitHub Codex spine (`spur builder pr-check` → `pr-open` → `pr-review`) instead of the local `/sp:dev-review`. | off |
|
|
21
|
+
| `--force` | `review --codex` only — request a fresh review of the current HEAD even when it was already reviewed (`pr-review --force`). | off |
|
|
22
|
+
| `--no-wait` | `review --codex` only — post the request and return `pending` without polling (`pr-review --no-wait`). | off |
|
|
23
23
|
| `--base <branch>` | Base branch for the branch report, the `pr-check` diff and a newly created PR. | existing PR base, else repo default |
|
|
24
24
|
| `--agent <inline\|auto\|name>` | Who performs the model-bearing triage/fix. Omit uses the current agent, `inline` forbids dispatch, `auto` resolves the declared role, and a name pins that executor. This does not change the deterministic route. | omit |
|
|
25
25
|
| `<focus>` | Remaining free text — extra review focus for the local review or the Codex request (e.g. `security boundaries and transaction idempotency`). | none |
|
|
@@ -36,9 +36,9 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
36
36
|
|
|
37
37
|
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
38
38
|
- Delegate everything: `Skill(skill="sp:pr-reviewing", args="$ARGUMENTS")`. The skill owns mode
|
|
39
|
-
routing, the local `/sp:dev-review` dispatch, the Codex spine and finding triage/fix.
|
|
40
|
-
|
|
41
|
-
`
|
|
39
|
+
routing, the local `/sp:dev-review` dispatch, the Codex spine and finding triage/fix. The Codex
|
|
40
|
+
path is a direct sequence of the four flat `spur builder pr-<verb>` verbs — `pr-check` →
|
|
41
|
+
`pr-open` → `pr-review` → `pr-status` — each verb's verdict gating the next.
|
|
42
42
|
- Retired modes print one notice line and run their replacement: `full` → `review --codex`;
|
|
43
43
|
`submit` → `review --codex --no-wait`; `rerun` → `review --codex --force`; `collect` → `status`.
|
|
44
44
|
`rules` prints that `AGENTS.md` review-rule authoring belongs to `cc:cc-magents` (the `cc` plugin)
|
|
@@ -50,6 +50,9 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
50
50
|
- Implement step only (`--mode implement`): `Skill(skill="sp:code-implementation", args="$ARGUMENTS")`
|
|
51
51
|
- After a full-mode run settles (done, failed or paused), print the
|
|
52
52
|
[execution summary](../skills/spur-dev/references/dev-operations.md#execution-summary) unless `--no-summary`.
|
|
53
|
+
- Then report the run's decision points (triage lane, failure classes, approval) from their rows
|
|
54
|
+
([reporting a run](../skills/spur-dev/references/decision-points.md#reporting-a-run)). A `failed` or `remediate` route is explained by the row
|
|
55
|
+
that chose it; quote its value, source and reason, never a fresh judgment.
|
|
53
56
|
|
|
54
57
|
**Flags:**
|
|
55
58
|
|
|
@@ -26,7 +26,7 @@ Wraps the **sp:spur-dev** skill.
|
|
|
26
26
|
| `--worktree` `[<name>]` | Run the batch 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. | off |
|
|
27
27
|
| `--no-summary` | Skip the measured execution summary (one row per task run: time, wait, tool calls, total / non-cached tokens) printed after the batch report. | off (summary printed) |
|
|
28
28
|
| `--concurrency` `<n>` | Parallel-mode worker bound: at most `<n>` task pipelines run at once (task 0931); a dependent starts only after its in-set dependencies are integrated onto the base ref. No-op in sequential mode (ignored). | 2 |
|
|
29
|
-
| `--defer-gate` | Opt-in parallel-batch gate policy (task 1111): each task's `
|
|
29
|
+
| `--defer-gate` | Opt-in parallel-batch gate policy (task 1111): each task's `gate` state runs the light tier and writes `DEFERRED`; the batch runs one integrated full gate on the base ref before the feature sync. Requires `--mode parallel`, or `--mode auto` resolved to parallel (dropped with a note otherwise); default off. | off |
|
|
30
30
|
|
|
31
31
|
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
32
32
|
|
|
@@ -82,8 +82,8 @@ FF-merge on success. This is expected, not a bug.
|
|
|
82
82
|
|
|
83
83
|
**`--next` (batch-once wrap).** `--next`
|
|
84
84
|
is chain-to-completion with propagation. On `dev-runall`, each task in the batch runs its
|
|
85
|
-
`task-pipeline.yaml` to terminal status (the pipeline already drives precheck → implement →
|
|
86
|
-
review →
|
|
85
|
+
`task-pipeline.yaml` to terminal status (the pipeline already drives precheck → implement → gate ⇄ remediate →
|
|
86
|
+
review → done); when the batch is complete, the wrap hop runs **once
|
|
87
87
|
for the batch** — mirroring the batch-once shippable gate `dev-verifyall` uses — rather than once
|
|
88
88
|
per task. Without `--next`, `--wrap` is wrap-without-chaining (the single batch wraps without
|
|
89
89
|
advancing the feature lifecycle). **was: `--next` deliberately omitted; the old no-`--next` rationale argued against the old per-task-transition meaning and does not carry.**
|
|
@@ -111,3 +111,6 @@ full distinction.
|
|
|
111
111
|
- Explicit executor (any mode, including `auto`) or parallel mode: `Skill(skill="sp:spur-dev", args="runall $ARGUMENTS")` → `sp:super-planner` agent.
|
|
112
112
|
- After the batch report, print the [execution summary](../skills/spur-dev/references/dev-operations.md#execution-summary) over every attempted run unless
|
|
113
113
|
`--no-summary`.
|
|
114
|
+
- A failed task's report row names the decision row that ended it (`failure-class` or
|
|
115
|
+
`review-failure-class` = `stop`, or approval `DENIED`) per
|
|
116
|
+
[reporting a run](../skills/spur-dev/references/decision-points.md#reporting-a-run); the batch failure policy then applies unchanged.
|
|
@@ -45,7 +45,7 @@ See `sp:code-verification` § Shippable readiness gate.
|
|
|
45
45
|
run `spur task residual <wbs> scan` + `fold` (observe-only; folds the verdict's `residual-sweep` check,
|
|
46
46
|
PASS → PARTIAL when a blocking residual exists) — under every `--fix` mode — then, only on a
|
|
47
47
|
downgrade, re-run `spur task record <wbs> --verdict-file .spur/run/<wbs>-verdict.json` so Testing
|
|
48
|
-
carries the final verdict. Same order as the pipeline `
|
|
48
|
+
carries the final verdict. Same order as the pipeline `done` state's record close (0983): scanning before
|
|
49
49
|
record reads unticked-but-proven boxes and folds a clean PASS to PARTIAL. When the task reaches
|
|
50
50
|
`done` through `--next`, run `spur task residual <wbs> settle` (best-effort). On a folded PARTIAL: the bounded remediation loop has
|
|
51
51
|
already run — a residual-failed task is routed to router C6 (HITL STOP), never another
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Wrap up a single completed task — learnings, metrics, doc-sync, optional
|
|
2
|
+
description: Wrap up a single completed task — learnings, metrics, doc-sync, optional branch cleanup
|
|
3
3
|
role: coder
|
|
4
4
|
argument-hint: "<wbs> [--agent <inline|auto|name>] [--auto] [--merge] [--dry-run]"
|
|
5
5
|
allowed-tools: ["Bash", "Read", "AskUserQuestion"]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Wrap up a batch of completed tasks — learnings, metrics, doc-sync,
|
|
2
|
+
description: Wrap up a batch of completed tasks — learnings, metrics, doc-sync, optional branch cleanup
|
|
3
3
|
role: coder
|
|
4
4
|
argument-hint: "[--since <iso-date>] [--feature <id>] [--status <s>] [--agent <inline|auto|name>] [--auto] [--merge] [--dry-run]"
|
|
5
5
|
allowed-tools: ["Bash", "Read", "AskUserQuestion"]
|
|
@@ -14,7 +14,7 @@ Wraps the **wrapup-pipeline.yaml** workflow.
|
|
|
14
14
|
| Flag | Description | Default |
|
|
15
15
|
| --- | --- | --- |
|
|
16
16
|
| `--since` `<iso-date>` | Wrap tasks completed since a date. | configured |
|
|
17
|
-
| `--feature` `<id>` |
|
|
17
|
+
| `--feature` `<id>` | Select tasks in a feature (selection only — it no longer advances the feature; follow up with `spur feature sync <id>`). | omitted |
|
|
18
18
|
| `--status` `<s>` | Only wrap tasks in a status. | done |
|
|
19
19
|
| `--agent` `<inline\|auto\|name>` | Who runs the wrap's model-bearing steps. Wrap is workflow-backed (headless): `omit` and `--agent inline` resolve identically per task 0687 — tier substitution under objective trigger 3 (durable auditable run record required) with a warning naming the substituted executor; `auto` tier-resolves an executor; a name pins that executor into `vars.agent`. | inline |
|
|
20
20
|
| `--auto` | Skip objective HITL gates. | off |
|
|
@@ -42,8 +42,8 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
42
42
|
```bash
|
|
43
43
|
AGENT=… # omit≡inline → tier-substituted executor + warning; auto tier-resolved; <name> unchanged
|
|
44
44
|
echo "execution surface: subprocess; reason: trigger 3 — durable auditable run record required; requested agent: <inline|auto|name>; executor: $AGENT"
|
|
45
|
-
VARS=$(jq -nc --arg tasks "$TASKS" --arg
|
|
46
|
-
'{tasks:$tasks,
|
|
45
|
+
VARS=$(jq -nc --arg tasks "$TASKS" --arg agent "$AGENT" --arg profile "$PROFILE" --arg merge "$MERGE" \
|
|
46
|
+
'{tasks:$tasks, agent:$agent, profile:$profile, merge:$merge}')
|
|
47
47
|
spur workflow run wrapup-pipeline.yaml --vars "$VARS" [--dry-run]
|
|
48
48
|
```
|
|
49
49
|
|
package/plugins/sp/plugin.json
CHANGED
|
@@ -103,7 +103,7 @@ surfaces is what keeps that gate quiet.
|
|
|
103
103
|
|
|
104
104
|
## Implement scope: do not run the project quality gate
|
|
105
105
|
|
|
106
|
-
During implement, the pipeline's `
|
|
106
|
+
During implement, the pipeline's `gate` state runs `${vars.qualityGateCmd}` (the full project gate:
|
|
107
107
|
`spur self exec check`) immediately after this step and is the gate that actually
|
|
108
108
|
decides pass/fail. Running it inside implement is pure redundancy — it cannot change the outcome and
|
|
109
109
|
only burns wall clock and context budget.
|
|
@@ -118,9 +118,9 @@ only burns wall clock and context budget.
|
|
|
118
118
|
re-select the execution tree inside the call (`cd -- "$TREE"` plus the identity check) instead of
|
|
119
119
|
relying on a `cd` a previous call left behind.
|
|
120
120
|
- **NEVER run** `spur self exec test`, `spur self exec check`, `bun run check`, or any other full-suite /
|
|
121
|
-
project-gate command from inside implement. These belong to the pipeline's `
|
|
121
|
+
project-gate command from inside implement. These belong to the pipeline's `gate` state.
|
|
122
122
|
- **Full-suite budget: at most 2 per task** (task 0436 R2) — counted across the whole task run
|
|
123
|
-
(implement probes + the pipeline `
|
|
123
|
+
(implement probes + the pipeline `gate` state and its rechecks), not per step. When a check fails,
|
|
124
124
|
run the narrow target (`bun test <file> --test-name-pattern <test>`) to green before any full
|
|
125
125
|
suite; reach for the second full run only when the narrow target cannot reproduce the failure.
|
|
126
126
|
- **Consolidate dogfood runs**: one combined real-data execution that exercises all scenarios,
|
|
@@ -128,7 +128,7 @@ only burns wall clock and context budget.
|
|
|
128
128
|
rerunning the same dogfood command with one flag changed, stop and fold the variants into a
|
|
129
129
|
single run — repeated identical commands are loop-detector findings and pure cost.
|
|
130
130
|
- If a targeted probe reveals a failure you cannot fix within implement scope, note it in
|
|
131
|
-
`## Solution` and let the `
|
|
131
|
+
`## Solution` and let the `gate` state's `remediate` hop handle it — do not pre-empt the gate.
|
|
132
132
|
|
|
133
133
|
### Public-surface probe (task 1135 R1/R6/R8)
|
|
134
134
|
|
|
@@ -155,7 +155,7 @@ changed no public surface, report the single line
|
|
|
155
155
|
- the paired-script parity test when `package.json` changed (a half-updated `spur-check` /
|
|
156
156
|
`spur-check:full` chain).
|
|
157
157
|
|
|
158
|
-
The single full project check stays the pipeline `
|
|
158
|
+
The single full project check stays the pipeline `gate` state's job (see the section above); these are
|
|
159
159
|
changed-path checks, not that gate.
|
|
160
160
|
|
|
161
161
|
## Changed-path targeted checks (dependency-aware verification, task 0510 R3 / task 1142 R3)
|
|
@@ -164,14 +164,14 @@ changed-path checks, not that gate.
|
|
|
164
164
|
surface can break a downstream consumer. The matrix below is dependency-aware — domain → app →
|
|
165
165
|
CLI — so a shared change verifies its consumers without recreating the full project check inside
|
|
166
166
|
implement. **It augments narrow behavior tests; it never authorizes `spur self exec check`,
|
|
167
|
-
`spur self exec test`, or another full project check inside implement** — the pipeline's `
|
|
167
|
+
`spur self exec test`, or another full project check inside implement** — the pipeline's `gate` state owns
|
|
168
168
|
that single full gate.
|
|
169
169
|
|
|
170
170
|
**Worker iteration check order (task 1142 R3):**
|
|
171
171
|
1. The **changed-path matrix** below (narrow behavior tests + affected consumers);
|
|
172
172
|
2. `spur task gate <wbs> light` (biome on changed files, per-workspace typecheck, rule presets `rules:pre`/`rules:post`, related tests).
|
|
173
173
|
|
|
174
|
-
Neither step takes the full project gate. The full gate is named only for the pipeline's `
|
|
174
|
+
Neither step takes the full project gate. The full gate is named only for the pipeline's `gate` state (first visit and rechecks).
|
|
175
175
|
|
|
176
176
|
| Changed surface | Required targeted tests | Required typechecks |
|
|
177
177
|
| --- | --- | --- |
|
|
@@ -189,7 +189,7 @@ Neither step takes the full project gate. The full gate is named only for the pi
|
|
|
189
189
|
(a flag the plugin layer consumes) actually changes, so an unconditional parity suite does not
|
|
190
190
|
creep into every plugin edit.
|
|
191
191
|
- Run the applicable rows, then stop: the single full project check belongs to the pipeline's
|
|
192
|
-
`
|
|
192
|
+
`gate` state (`task-pipeline.yaml` `${vars.qualityGateCmd}`).
|
|
193
193
|
- **Mirrored surfaces: an edit lands on all of them.** When the change is one instance of a repeated
|
|
194
194
|
pattern — the same wiring rule on two runbooks, a signature in both a generator and its generated
|
|
195
195
|
`.d.mts`, a command chain in both `spur-check` and `spur-check:full` — grep for the siblings and
|
|
@@ -89,8 +89,8 @@ and the deepening direction. Full definitions and examples in
|
|
|
89
89
|
| **minor** | advisory | Local friction: a module slightly too shallow, coupling that's awkward but not coordinated. |
|
|
90
90
|
| **advisory** | advisory | Deepening opportunity: the code works and is testable, but would be cleaner with a deeper module. Always non-blocking. |
|
|
91
91
|
|
|
92
|
-
**Under the pipeline** (`/sp:dev-review` in a task run), `blocker` and `major` block
|
|
93
|
-
|
|
92
|
+
**Under the pipeline** (`/sp:dev-review` in a task run), `blocker` and `major` block review
|
|
93
|
+
certification (a non-PASS review goes to the `review-failure-class` decision). `minor` and `advisory` are recorded but do not block. **Standalone** reviews
|
|
94
94
|
are advisory-only — the operator decides what to act on.
|
|
95
95
|
|
|
96
96
|
---
|
|
@@ -185,7 +185,7 @@ Each candidate is a structured finding:
|
|
|
185
185
|
When invoked as the `--focus architecture` dimension of `/sp:dev-review`:
|
|
186
186
|
|
|
187
187
|
- The scope is the task's diff (pipeline) or the `path` arg (standalone).
|
|
188
|
-
- `blocker`/`major` candidates block
|
|
188
|
+
- `blocker`/`major` candidates block review certification alongside any SECUA blockers from
|
|
189
189
|
`sp:code-verification`.
|
|
190
190
|
- The candidate list is returned as a **review fragment**; the review coordinator
|
|
191
191
|
(`sp:super-reviewer` — the invoking session under `/sp:dev-review`) merges it into the combined
|
|
@@ -42,10 +42,11 @@ Before reporting a task as complete, a test as passing, a bug as fixed, or a fea
|
|
|
42
42
|
|
|
43
43
|
## Under the pipeline
|
|
44
44
|
|
|
45
|
-
`task-pipeline.yaml`
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
PASS
|
|
45
|
+
`task-pipeline.yaml` enforces this gate deterministically. The `gate` state runs `spur task gate`
|
|
46
|
+
and a red result goes through the `failure-class` decision to `remediate`; the `review` state
|
|
47
|
+
certifies the review answer with `spur task verdict`, which writes the `VerifyVerdict` artifact.
|
|
48
|
+
`review → done` requires that PASS plus the approval decision point, and `done`'s `spur task record`
|
|
49
|
+
close transcribes the verdict to the task's `## Testing` section.
|
|
49
50
|
|
|
50
51
|
Under manual execution (no pipeline), the agent must still run the gates and paste the evidence.
|
|
51
52
|
"Manual" is not an exemption — it just means the agent, not the pipeline, runs the commands.
|
|
@@ -29,7 +29,7 @@ The **verifier** in the Spur execution loop. A coding agent reports "done" with
|
|
|
29
29
|
this skill is the deterministic counterweight that proves — or disproves — the claim against the
|
|
30
30
|
task's own requirements and Acceptance Criteria, then emits the canonical verdict artifact
|
|
31
31
|
through CLI verbs (section writes are owned by the review coordinator and the deterministic
|
|
32
|
-
`record`
|
|
32
|
+
`spur task record` close in `done` — F92 0593 R1).
|
|
33
33
|
|
|
34
34
|
It backs two commands:
|
|
35
35
|
|
|
@@ -321,7 +321,7 @@ spur task residual <wbs> fold
|
|
|
321
321
|
> **Do not write `## Review` directly, ever.** The `## Review` section is owned by the
|
|
322
322
|
> `review` coordinator (`/sp:dev-review` → `sp:super-reviewer`), which merges
|
|
323
323
|
> `functional-review` + `code-verification` review mode + `code-improvement` fragments. The
|
|
324
|
-
> `record`
|
|
324
|
+
> `spur task record` close backfills `## Review` from the verdict artifact **only** if the section is bare
|
|
325
325
|
> (`sectionIsBare` guard, `task-section-bodies.ts`) — a standalone compatibility fallback, never an
|
|
326
326
|
> overwrite of authored Review. Writing `## Review` here destroys the review step's
|
|
327
327
|
> three-dimensional findings.
|
|
@@ -546,7 +546,7 @@ Flags: `--agent <inline|auto|name>` (execution surface — inline default, with
|
|
|
546
546
|
|
|
547
547
|
## When to use
|
|
548
548
|
|
|
549
|
-
- **Verify a task before `done`** — the pipeline's `
|
|
549
|
+
- **Verify a task before `done`** — the pipeline's `review` state certifies it (`spur task verdict`), or a manual `/sp:dev-verify`.
|
|
550
550
|
- **Audit completed work** — `--force` re-verifies a `done` task (compliance, post-merge).
|
|
551
551
|
- **Focused code review** — `/sp:dev-review` for SECUA findings on a diff.
|
|
552
552
|
|
|
@@ -581,7 +581,7 @@ Do **not** use this skill for:
|
|
|
581
581
|
rubric.
|
|
582
582
|
- `plugins/sp/references/roles.md` — the Layer-1 role→tier table; this skill's verify/review modes
|
|
583
583
|
run under the `reviewer` role (0538 R4: this file points at roles.md, it does not restate tiers).
|
|
584
|
-
- `task-pipeline.yaml` — the `
|
|
584
|
+
- `task-pipeline.yaml` — the `review → done` gate that consumes the verdict.
|
|
585
585
|
- **`sp:spur-dev`** — the execution-half umbrella that drives the pipeline this skill gates.
|
|
586
586
|
- [references/code-improvement.md](references/code-improvement.md) — architecture-improvement lens
|
|
587
587
|
for module depth, seam placement, locality, coupling, and testability.
|