@gobing-ai/spur 0.4.2 → 0.4.4
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/decisions/maker-liveness.yaml +39 -0
- package/config/plugin-scripts.json +0 -4
- package/config/rules/README.md +1 -0
- package/config/rules/docs/sourced-api-claims.yaml +56 -12
- package/config/rules/docs/verdict-confidence.yaml +68 -0
- package/config/rules/quality/coverage-gate.yaml +13 -0
- package/config/rules/recommended-pre-check.yaml +6 -2
- package/config/rules/strict/runtime-boundaries.yaml +10 -0
- package/config/rules/surface/check-cli-surface.yaml +1 -3
- package/config/script-placement-baseline.json +1 -19
- package/config/templates/AGENTS.md +7 -0
- package/config/workflows/feature-lifecycle.yaml +46 -1
- package/config/workflows/feature-verification.yaml +20 -1
- package/config/workflows/task-lifecycle.yaml +50 -0
- package/config/workflows/task-pipeline.yaml +15 -9
- package/package.json +10 -10
- package/plugins/sp/README.md +22 -16
- package/plugins/sp/agents/super-reviewer.md +46 -0
- package/plugins/sp/bunfig.toml +8 -5
- package/plugins/sp/commands/dev-changelog.md +1 -1
- package/plugins/sp/commands/dev-gitmsg.md +6 -2
- package/plugins/sp/commands/dev-handover.md +1 -0
- package/plugins/sp/commands/dev-job-dump.md +2 -1
- package/plugins/sp/commands/dev-refine.md +14 -2
- package/plugins/sp/commands/dev-refineall.md +7 -1
- package/plugins/sp/commands/dev-review.md +1 -0
- package/plugins/sp/hooks/careful-guard.ts +1 -1
- package/plugins/sp/hooks/context-post-tool.ts +7 -427
- package/plugins/sp/hooks/context-session-start.ts +5 -213
- package/plugins/sp/hooks/context-session-stop.ts +5 -191
- package/plugins/sp/hooks/pi/guard-extension.ts +6 -5
- package/plugins/sp/hooks/task-write-guard.ts +1 -1
- package/plugins/sp/{hooks → lib}/agent-hint.ts +1 -1
- package/plugins/sp/lib/context-post-tool.ts +432 -0
- package/plugins/sp/lib/context-session-start.ts +214 -0
- package/plugins/sp/lib/context-session-stop.ts +196 -0
- package/plugins/sp/lib/dogfood-pipeline.ts +265 -0
- package/plugins/sp/lib/dogfood-report.ts +278 -0
- package/plugins/sp/lib/history-anatomy.generated.mjs +18 -18
- package/plugins/sp/lib/idea-handoff.generated.mjs +91 -91
- package/plugins/sp/lib/inline-run-app.ts +40 -0
- package/plugins/sp/lib/inline-run.generated.d.mts +3 -3
- package/plugins/sp/lib/inline-run.generated.mjs +1425 -212
- package/plugins/sp/lib/plan-projection.generated.d.mts +150 -0
- package/plugins/sp/lib/plan-projection.generated.mjs +623 -9
- package/plugins/sp/lib/quality-gate.generated.d.mts +1 -0
- package/plugins/sp/lib/quality-gate.generated.mjs +13809 -13969
- package/plugins/sp/lib/residual-scan.generated.d.mts +20 -1
- package/plugins/sp/lib/residual-scan.generated.mjs +120 -25
- package/plugins/sp/lib/run-summary-core.ts +34 -370
- package/plugins/sp/lib/step-profile.generated.mjs +8 -8
- package/plugins/sp/lib/transcript.ts +37 -228
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/scripts/batch-plan.mjs +619 -11
- package/plugins/sp/scripts/batch-preflight.mjs +57 -13
- package/plugins/sp/scripts/batch-preflight.ts +35 -295
- package/plugins/sp/scripts/commit-guard.mjs +6 -6
- package/plugins/sp/scripts/daily-summary/daily-summary.mjs +127 -108
- package/plugins/sp/scripts/daily-summary/daily-summary.ts +111 -104
- package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.mjs +13 -12
- package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +7 -265
- package/plugins/sp/scripts/dogfood-testing/validate-report.mjs +7 -4
- package/plugins/sp/scripts/dogfood-testing/validate-report.ts +6 -272
- package/plugins/sp/scripts/feature-verification-steps.mjs +20 -125
- package/plugins/sp/scripts/feature-verification-steps.ts +57 -181
- package/plugins/sp/scripts/history-anatomy-cache.mjs +19 -19
- package/plugins/sp/scripts/idea-handoff.mjs +2 -2
- package/plugins/sp/scripts/inline-run-dispatch.mjs +25 -24
- package/plugins/sp/scripts/inline-run-dispatch.ts +1 -21
- package/plugins/sp/scripts/inline-run-setup.mjs +164 -137
- package/plugins/sp/scripts/inline-run-setup.ts +1 -21
- package/plugins/sp/scripts/persist-out-check.mjs +5 -5
- package/plugins/sp/scripts/pr-reviewing.mjs +13 -13
- package/plugins/sp/scripts/quality-gate.mjs +13730 -13887
- package/plugins/sp/scripts/residual-scan.mjs +129 -31
- package/plugins/sp/scripts/residual-scan.ts +16 -13
- package/plugins/sp/scripts/run-summary.mjs +166 -112
- package/plugins/sp/scripts/run-summary.ts +7 -5
- package/plugins/sp/scripts/script-root.mjs +6 -6
- package/plugins/sp/scripts/session-timeline.mjs +62 -35
- package/plugins/sp/scripts/task-diffstat.mjs +19 -9
- package/plugins/sp/scripts/task-diffstat.ts +8 -39
- package/plugins/sp/scripts/workflow-step-profile.mjs +12 -12
- package/plugins/sp/scripts/wrapup-drift-probe.mjs +9 -9
- package/plugins/sp/scripts/wrapup-steps.mjs +25 -25
- package/plugins/sp/skills/code-implementation/SKILL.md +7 -1
- package/plugins/sp/skills/code-verification/references/secu-review.md +2 -1
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +4 -0
- package/plugins/sp/skills/dogfood-testing/SKILL.md +2 -2
- package/plugins/sp/skills/next-feature/SKILL.md +1 -1
- package/plugins/sp/skills/next-router/SKILL.md +3 -1
- package/plugins/sp/skills/next-router/references/routing-table.md +9 -3
- package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +1 -1
- package/plugins/sp/skills/source-driven-development/SKILL.md +7 -4
- package/plugins/sp/skills/spur-cli/references/builder.md +3 -2
- package/plugins/sp/skills/spur-cli/references/decision.md +32 -7
- package/plugins/sp/skills/spur-cli/references/features.md +46 -5
- package/plugins/sp/skills/spur-cli/references/tasks.md +24 -4
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +8 -1
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +37 -11
- package/plugins/sp/skills/spur-dev/references/execution-batch-report.md +1 -1
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +19 -6
- package/plugins/sp/skills/spur-dev/references/execution-worktree-landing.md +22 -0
- package/plugins/sp/skills/spur-dev/references/execution-worktree-setup.md +14 -0
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +4 -2
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +49 -12
- package/schemas/section-matrix.schema.json +3 -2
- package/spur.js +66591 -73262
- package/web/_astro/{BoardApp.B3GQZvj8.js → BoardApp.Niubpe6z.js} +1 -1
- package/web/_astro/{BoardApp.BT7L2kSb.js → BoardApp.hF0RAIrg.js} +150 -150
- package/web/_astro/TaskDetail.DJpapt38.js +1 -0
- package/web/_astro/{arc.vaT7tPOB.js → arc.BgKcK0i8.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.DRMmTjkN.js → architectureDiagram-3BPJPVTR.ChP-Ig0V.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.cla0LO_q.js → blockDiagram-GPEHLZMM.BVaCBoeN.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.D4YAIBKn.js → c4Diagram-AAUBKEIU.CHSDpEO5.js} +1 -1
- package/web/_astro/channel.DkpvN2tD.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.BrSJbMRZ.js → chunk-2J33WTMH.MYRcYVRa.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.CuLMgKF5.js → chunk-4BX2VUAB.S5j22Zqa.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.zkvgu54F.js → chunk-55IACEB6.gciRPvmZ.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.DxWkACh8.js → chunk-727SXJPM.CdqrSQkX.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.42XrmIlH.js → chunk-AQP2D5EJ.CyokdHT3.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.Bao2wMK9.js → chunk-FMBD7UC4.Bg9KJhjW.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.BhydojD1.js → chunk-ND2GUHAM.1gxxI-vD.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.CmZ82g-H.js → chunk-QZHKN3VN.DDEYtCKU.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.Blr83Gt_.js → classDiagram-4FO5ZUOK.Ch3zi37T.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.Blr83Gt_.js → classDiagram-v2-Q7XG4LA2.Ch3zi37T.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.qmfv0SPn.js → cose-bilkent-S5V4N54A.D2q5AINI.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.BtELhXPR.js → cynefin-OW5HDTMX.BA9kC2YT.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.AWmaAvXo.js → dagre-BM42HDAG.CHO08nRp.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.DdH34KDi.js → diagram-2AECGRRQ.BfFQt0LW.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.BmNPix1k.js → diagram-5GNKFQAL.CHMwMTe4.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.BNQd_Ppo.js → diagram-KO2AKTUF.BJ-7gK-w.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.BAPgDi0e.js → diagram-LMA3HP47.C5xqcc0t.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.DZ4zyLdC.js → diagram-OG6HWLK6.C2pQjfrC.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.Q1TySMmw.js → erDiagram-TEJ5UH35._FoNyxgC.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.BXhFBicG.js → flowDiagram-I6XJVG4X.B_ENkT2I.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.vHSgcuo2.js → ganttDiagram-6RSMTGT7.B3q8h77C.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.Bi1f73C7.js → gitGraphDiagram-PVQCEYII.QWZFDboZ.js} +1 -1
- package/web/_astro/index.BFyW13JJ.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.DPvXZEWm.js → infoDiagram-5YYISTIA.Cs6eEc92.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.Cz829fsV.js → ishikawaDiagram-YF4QCWOH.BU9DJMHA.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.enRnB9Me.js → journeyDiagram-JHISSGLW.D35k6Jpe.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.DnTNk6d2.js → kanban-definition-UN3LZRKU.DBqcAT4m.js} +1 -1
- package/web/_astro/{linear.BzGnBwNL.js → linear.D-LSNK8W.js} +1 -1
- package/web/_astro/{mermaid.core.CSbTpIVz.js → mermaid.core.CSruWVOa.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.DGJDy8zT.js → mindmap-definition-RKZ34NQL.BiFaUsfj.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.HSPdi5_8.js → pieDiagram-4H26LBE5.D1KTKqb9.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.6Gv8mz2Y.js → quadrantDiagram-W4KKPZXB.DBHflsMG.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.CnBCtFwa.js → requirementDiagram-4Y6WPE33.hwX9CNdk.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.5M8VWAu8.js → sankeyDiagram-5OEKKPKP.DkI8mJiE.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.DN41XN-U.js → sequenceDiagram-3UESZ5HK.DMz7jBDx.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.ErOO3W8j.js → stateDiagram-AJRCARHV.B6Ef2xJ1.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.B_ZHICM-.js → stateDiagram-v2-BHNVJYJU.CgoaufB9.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.CWdosr07.js → timeline-definition-PNZ67QCA.B3c8h1t-.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.BHzYjNV5.js → vennDiagram-CIIHVFJN.BdHPAxAb.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.h8x4IwPX.js → wardleyDiagram-YWT4CUSO.BrJXPPAj.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.RTapW2X8.js → xychartDiagram-2RQKCTM6.CMH5yFsV.js} +1 -1
- package/web/index.html +2 -2
- package/web/spur_logo.svg +1 -1
- package/config/proportional-route-table.ts +0 -155
- package/plugins/sp/scripts/daily-summary/logger.ts +0 -28
- package/web/_astro/TaskDetail.Cxov1_N_.js +0 -1
- package/web/_astro/channel.D4nG9YLf.js +0 -1
- package/web/_astro/index.BhSwN8yY.css +0 -1
- /package/plugins/sp/{hooks → lib}/context-owner.ts +0 -0
- /package/plugins/sp/{hooks → lib}/destructive-policy.ts +0 -0
- /package/plugins/sp/{hooks → lib}/task-file-policy.ts +0 -0
package/plugins/sp/README.md
CHANGED
|
@@ -272,15 +272,18 @@ plugins/sp/
|
|
|
272
272
|
│ └── wayfinder/ # Multi-session investigation maps (SKILL.md only)
|
|
273
273
|
├── commands/ # Slash-command wrappers — the SSOT (hand-editable thin wrappers; see Commands below)
|
|
274
274
|
├── agents/ # 4 specialist subagents (expert-spur, super-coder, super-planner, super-reviewer)
|
|
275
|
-
├── hooks/ # hooks.json +
|
|
276
|
-
│ # +
|
|
277
|
-
│ # +
|
|
278
|
-
│ #
|
|
279
|
-
|
|
275
|
+
├── hooks/ # hooks.json + one thin entry per registered identity
|
|
276
|
+
│ # + task-write-guard.ts (compat shim) + careful-guard.ts (opt-in, unwired)
|
|
277
|
+
│ # + pi/guard-extension.ts (plugin.json `extensions.pi` entry point)
|
|
278
|
+
│ # entries delegate to lib cores (task 1174); hook suites live in tests/hooks/
|
|
279
|
+
├── lib/ # Handwritten plugin cores — context-{post-tool,session-start,session-stop}.ts,
|
|
280
|
+
│ # agent-hint.ts, context-owner.ts, destructive-policy.ts, task-file-policy.ts,
|
|
281
|
+
│ # env.ts, plus generated *.generated.mjs|.d.mts bundles over packages/app
|
|
280
282
|
├── scripts/ # Executable helpers, split from prompts (ADR-031) — batch-preflight.ts + scripts/<skill>/
|
|
281
|
-
│ # (daily-summary:
|
|
282
|
-
├── tests/ # Plugin tests — skill-structure.test.ts +
|
|
283
|
-
|
|
283
|
+
│ # (daily-summary: daily-summary.ts; dogfood-testing: {detect-pipeline-driving, validate-report}.ts)
|
|
284
|
+
├── tests/ # Plugin tests — skill-structure.test.ts + hooks/ (guard, context, Pi suites)
|
|
285
|
+
│ # + evals/ (behavioral eval corpus + judge; see tests/evals/README.md,
|
|
286
|
+
│ # runner at scripts/commands/skill-eval.ts) + per-skill suites
|
|
284
287
|
├── plugin.json # Marketplace entry
|
|
285
288
|
└── README.md # This file
|
|
286
289
|
```
|
|
@@ -512,8 +515,9 @@ hint on first launch, and `context-session-stop` closes out the session record.
|
|
|
512
515
|
`SPUR_SPEC_ID` is set, so outside a fleet it makes no call. `fleet-guest-stop` delivers pending
|
|
513
516
|
inbox work to a session joined as a fleet guest at turn end; any other session passes through.
|
|
514
517
|
|
|
515
|
-
**Available but unwired:** `careful-guard.ts` ships in `hooks/` (
|
|
516
|
-
`PreToolUse` guard that asks before destructive
|
|
518
|
+
**Available but unwired:** `careful-guard.ts` ships in `hooks/` (its suite is
|
|
519
|
+
`tests/hooks/careful-guard.test.ts`) as an opt-in `PreToolUse` guard that asks before destructive
|
|
520
|
+
shell commands (`rm -rf`, `DROP TABLE`,
|
|
517
521
|
`git push --force`, …) — it is **not** registered in `hooks.json`. Fail-open by contract; escape
|
|
518
522
|
hatch `SPUR_CAREFUL=off`.
|
|
519
523
|
|
|
@@ -529,19 +533,21 @@ hold `SKILL.md` and prompt-side companions only.
|
|
|
529
533
|
| Script | Role |
|
|
530
534
|
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
531
535
|
| `hooks/task-write-guard.ts` | Compatibility shim for older installs that still execute the script path directly. Forwards stdin to the stable PATH command `superskill hook run sp task-write-guard`, mirrors parseable PreToolUse decisions, and fails open if the runtime is unavailable. Performs no source-tree CLI lookup. |
|
|
532
|
-
| `hooks/context-*.ts` |
|
|
536
|
+
| `hooks/context-*.ts` | argv/stdin entries for the three registered context hooks; the capture, ledger and session logic is the `lib/context-*.ts` core (task 1174) |
|
|
533
537
|
| `hooks/{agent-lifecycle,fleet-guest-stop}.ts` | Fleet hooks (1080/1081): member lifecycle reports via `spur agent report`; turn-end inbox delivery to joined guests |
|
|
534
|
-
| `hooks/careful-guard.ts` | Opt-in destructive-command guard (unwired — see Hooks above)
|
|
538
|
+
| `hooks/careful-guard.ts` | Opt-in destructive-command guard (unwired — see Hooks above); policy is `lib/destructive-policy.ts` |
|
|
539
|
+
| `lib/context-{post-tool,session-start,session-stop}.ts` | Redaction-capped ledger append, session open/ownership and owner-gated teardown for `sp:indexed-context` |
|
|
540
|
+
| `lib/{agent-hint,context-owner,destructive-policy,task-file-policy}.ts` | Shared hook cores — agent/model hint resolution, host-native session owner derivation, destructive-command classification, task-file matching |
|
|
535
541
|
| `scripts/batch-preflight.ts` | Pure TABLE A STOP evaluation for `super-planner` — skip doomed pipeline launches without spawning a Skill subprocess; recovery hints map stuck statuses to a single `/sp:dev-*` hop |
|
|
536
542
|
| `scripts/workflow-step-profile.ts` | Thin glue over the generated lib bundle (`lib/step-profile.generated.mjs` from `packages/app/src/workflow/step-profile.ts`) — read-only step profile from `spur workflow trace`: per node and action-kind durations, idle gaps, session mode and `cacheHit` coverage, plus the ADR-115 cache-window flags `sp:spur-doctor` turns into workflow-optimization proposals |
|
|
537
|
-
| `scripts/dogfood-testing/detect-pipeline-driving.ts` |
|
|
538
|
-
| `scripts/dogfood-testing/validate-report.ts` |
|
|
539
|
-
| `scripts/daily-summary/
|
|
543
|
+
| `scripts/dogfood-testing/detect-pipeline-driving.ts` | Live Phase 1.0 CLI gate over `lib/dogfood-pipeline.ts` — word-boundary detector for pipeline-driving testees (leading-space invariant) |
|
|
544
|
+
| `scripts/dogfood-testing/validate-report.ts` | CLI entry over `lib/dogfood-report.ts` — pure `validateReport(md)`, footer-mandatory + 7-check finalize-or-abort contract with stable error codes |
|
|
545
|
+
| `scripts/daily-summary/daily-summary.ts` | ccusage + git-history orchestration helpers for `sp:daily-summary`, with its own console toggle |
|
|
540
546
|
| `scripts/task-diffstat.ts` | 0943 triage-lane diffstat producer — numstat + untracked scan vs the run base; writes `<wbs>-diffstat.json` with the sensitive-path flag; fails safe (sensitive) |
|
|
541
547
|
| `scripts/run-summary.ts` | Measured execution summary `/sp:dev-run` / `/sp:dev-runall` print by default (`--no-summary` skips) — windows the host transcript by `spur workflow progress` attempt timestamps; per stage/run time, wait, tool calls, total / non-cached tokens; `n/a` for subprocess windows |
|
|
542
548
|
| `scripts/session-timeline.ts` | Measured Time/Wait/Token evidence for `sp:session-review` — reads the active Claude Code transcript read-only, one segment per operator prompt, usage deduplicated by message id, tokens split total / non-cached; `{available:false}` exit 0 when no transcript |
|
|
543
549
|
| `scripts/commands/validate-flag-contracts.ts` | Mechanical consistency gate — compares flag claims across command files, flag-glossary, cross-cutting, dev-operations, and ADR; reports disagreements |
|
|
544
|
-
| `*.test.ts` | Unit suites —
|
|
550
|
+
| `*.test.ts` | Unit suites — `tests/hooks/` for the hook entries and their lib cores, `tests/<skill>/` per ADR-031 pairing |
|
|
545
551
|
|
|
546
552
|
**Design principle:** Scripts are **deterministic enforcement**. Unlike skills (which are advisory
|
|
547
553
|
knowledge consumed by the LLM), scripts run as code and make binary allow/deny decisions. They are
|
|
@@ -200,6 +200,7 @@ shallower.
|
|
|
200
200
|
**Scope:** <wbs diff | path glob>
|
|
201
201
|
**Dimensions:** functional, security, efficiency, correctness, usability, architecture
|
|
202
202
|
**Verdict:** PASS | PARTIAL | FAIL
|
|
203
|
+
**Confidence:** HIGH | MEDIUM | LOW
|
|
203
204
|
##### Findings (ranked)
|
|
204
205
|
|
|
205
206
|
| # | Priority | Dimension | Finding | Location | Disposition |
|
|
@@ -225,6 +226,51 @@ FAIL, PARTIAL, a missing line, a line split across two lines — routes the run
|
|
|
225
226
|
`review-fail-triage` and its bounded repair hop. Keep it on one line, in that shape, in every
|
|
226
227
|
review answer; never restate it as prose only.
|
|
227
228
|
|
|
229
|
+
**The Confidence line is machine-read too (one confidence contract, 2026-10-12).** Every review
|
|
230
|
+
report carries exactly one `Confidence: HIGH | MEDIUM | LOW` line, stated at the level the review can
|
|
231
|
+
actually defend — the same enum and the same earning rule the verify answer uses
|
|
232
|
+
([verdict-schema.md](../skills/code-verification/references/verdict-schema.md) § Confidence level):
|
|
233
|
+
|
|
234
|
+
- `HIGH` — every requirement row is `MET`, every finding carries a disposition, and the report cites
|
|
235
|
+
its evidence. `HIGH` says the evidence needs no re-check.
|
|
236
|
+
- `MEDIUM` — the verdict holds but evidence gaps remain; name them.
|
|
237
|
+
- `LOW` — the verdict rests on unverified assumptions that could plausibly flip it; name them.
|
|
238
|
+
|
|
239
|
+
A missing line, a level outside the enum, or a `HIGH` the rows do not earn turns an otherwise usable
|
|
240
|
+
PASS into a refused one: consumer repositories gate the review answer artifact and every level it
|
|
241
|
+
claims, exactly as they gate the verify answer. This is a contract change — review answers written
|
|
242
|
+
before it were never asked for a level, so pre-adoption artifacts read as debt, not defects.
|
|
243
|
+
|
|
244
|
+
**Machine-checked at the gate.** The pipeline's own review PASS edges enforce the line before verify:
|
|
245
|
+
`residual-scan review-gate` reads the recorded `### Review` body, and a missing, duplicated or
|
|
246
|
+
out-of-enum level becomes a **blocking** `review-contract` item — `review → verify` stops and the run
|
|
247
|
+
enters `review-fail-triage` with the bounded repair hop, exactly as an open P1–P3 row does. The gate
|
|
248
|
+
checks the recorded section's presence and vocabulary; the same scanner grades the answer passed
|
|
249
|
+
by both PASS edges and refuses a `LOW` (or ungraded) PASS unless the operator sets
|
|
250
|
+
`ackLowConfidence` exactly to `true` (task 1204 — the same policy the verify
|
|
251
|
+
chain enforces), so whether a level is *earned* stays a judgement call (see the earning rule above):
|
|
252
|
+
the report must still argue it.
|
|
253
|
+
|
|
254
|
+
**Source citations for external claims (one claim contract, 2026-10-12).** A Finding cell or a
|
|
255
|
+
Functional Traceability `Evidence` cell that asserts an external API/library claim carries a
|
|
256
|
+
verifiable citation in the SAME cell — a repo `path:line(-end)`, the external named-origin form
|
|
257
|
+
(@origin `path` line N, line number outside the backticks), or an http(s) URL. It is the verify
|
|
258
|
+
answer's rule verbatim, owned by
|
|
259
|
+
[verdict-schema.md](../skills/code-verification/references/verdict-schema.md) § Source citations
|
|
260
|
+
for external claims — claim markers and accepted forms are defined once there and are not restated
|
|
261
|
+
here. The findings table's `Location` column does not stand in for it: `Location` anchors the
|
|
262
|
+
finding's subject, not the claim's source. Cell-free receipts (test counts, reviewed-log notes)
|
|
263
|
+
assert no external claim and need no citation. An uncited external claim is an assumption, so it
|
|
264
|
+
caps the level the report can defend (above).
|
|
265
|
+
|
|
266
|
+
**Machine-checked at the gate (findings table).** `residual-scan review-gate` applies the same two
|
|
267
|
+
predicates to every finding row: a Finding cell carrying one of the verify lint's claim markers with
|
|
268
|
+
no citation form becomes a **blocking** `review-contract` item, so `review → verify` stops and the
|
|
269
|
+
run enters `review-fail-triage`. The `Location` column is deliberately not consulted as a citation —
|
|
270
|
+
that is the rule stated above, and a gate that accepted it would pass every row that has an anchor.
|
|
271
|
+
Functional Traceability `Evidence` cells stay reviewer-enforced (SECUA review): they are free prose
|
|
272
|
+
in a table the gate does not parse.
|
|
273
|
+
|
|
228
274
|
**No findings.** Never invent a defect to populate the table. Emit one substantive `P4 (advisory)`
|
|
229
275
|
row that states what was reviewed and what was found — placeholder cells (empty, `—`, `n/a`) are
|
|
230
276
|
rejected by the checker, and so they should be:
|
package/plugins/sp/bunfig.toml
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
# Workspace-local test config (task 1127 R8/AC7, mirroring apps/cli's 0699 R3 precedent): without
|
|
2
|
-
# it, `cd plugins/sp && bun test` — the run AGENTS.md prescribes — skipped the root preload
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
2
|
+
# it, `cd plugins/sp && bun test` — the run AGENTS.md prescribes — skipped the root preload, so these
|
|
3
|
+
# suites lost the shared test setup (logger muting, the util shims, and the hermeticity env that keeps
|
|
4
|
+
# tests off the operator's real ~/.config/spur/ config, projects registry and slash-command catalog).
|
|
5
|
+
# Coverage stays gated by the root bunfig (bun run test).
|
|
6
|
+
#
|
|
7
|
+
# Historical: this comment once justified the preload by a host-wide `full-gate.lock` wait. That lock
|
|
8
|
+
# was deleted in `refactor(gate): remove gate-lock mechanism and simplify quality-gate`; the preload
|
|
9
|
+
# is still required, for the reasons above (task 1173 R5).
|
|
7
10
|
[test]
|
|
8
11
|
preload = ["../../tests/setup.ts"]
|
|
@@ -26,5 +26,5 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
26
26
|
|
|
27
27
|
## Implementation
|
|
28
28
|
|
|
29
|
-
Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#8-changelog) (changelog). This is a docs-only generator: run no quality gates (lint, tests, `spur-check`, rules, citation checks).
|
|
29
|
+
Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#8-changelog) (changelog). This is a docs-only generator: run no quality gates (`bun run gate`, lint, typecheck, tests, `spur-check`, rules, citation checks) — a generic "verify before finishing" rule does not apply here.
|
|
30
30
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Generate conventional commit message(s) from the current change set via one bounded gather call, optionally commit
|
|
3
3
|
role: scribe
|
|
4
|
-
argument-hint: "[--commit] [--squash] [--all] [--scope <path>]"
|
|
4
|
+
argument-hint: "[--commit] [--squash] [--all] [--scope <path>] [--check <cmd>]"
|
|
5
5
|
allowed-tools: ["Bash", "Read"]
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -17,12 +17,13 @@ Implements an inline procedure — see [dev-operations.md](../skills/spur-dev/re
|
|
|
17
17
|
| `--squash` | Collapse every concern into one message and one commit; implies `--commit`. | off |
|
|
18
18
|
| `--all` | Widen the change set past the index to every change in the tree — unstaged **and untracked**. | off |
|
|
19
19
|
| `--scope` `<path>` | Path filter on the change set; always wins over change-set auto-discovery. | the whole change set |
|
|
20
|
+
| `--check` `<cmd>` | Run `<cmd>` (e.g. `"bun run gate"`) once before committing; non-zero → commit nothing. | off |
|
|
20
21
|
|
|
21
22
|
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
22
23
|
|
|
23
24
|
## Usage
|
|
24
25
|
|
|
25
|
-
/sp:dev-gitmsg [--commit] [--squash] [--all] [--scope <path>]
|
|
26
|
+
/sp:dev-gitmsg [--commit] [--squash] [--all] [--scope <path>] [--check <cmd>]
|
|
26
27
|
|
|
27
28
|
## Implementation
|
|
28
29
|
|
|
@@ -35,3 +36,6 @@ commit per concern, split automatically, so the operator is never asked to re-st
|
|
|
35
36
|
`--squash` → one commit for everything. An empty index widens to the whole tree only on a
|
|
36
37
|
message-only run, and says so; a committing run stops there and prints the exact `--all` re-run line
|
|
37
38
|
instead of guessing.
|
|
39
|
+
No quality gate (`bun run gate`, lint, typecheck, tests, `spur-check`) runs unless `--check <cmd>`
|
|
40
|
+
names one — then it runs once, before any commit, and a failure commits nothing. Gate → auto-fix →
|
|
41
|
+
commit is `/sp:dev-gtd --no-push`.
|
|
@@ -24,4 +24,5 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
24
24
|
## Implementation
|
|
25
25
|
|
|
26
26
|
Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#11-handover) (handover).
|
|
27
|
+
Run no quality gate (`bun run gate`, lint, typecheck, tests, `spur-check`); cite results already on record.
|
|
27
28
|
|
|
@@ -24,6 +24,7 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
24
24
|
## Implementation
|
|
25
25
|
|
|
26
26
|
Follow [job-dump](../skills/spur-dev/references/dev-operations.md#11a-job-dump), using the shared
|
|
27
|
-
handoff template to capture the current job and its remaining work.
|
|
27
|
+
handoff template to capture the current job and its remaining work. Run no quality gate
|
|
28
|
+
(`bun run gate`, lint, typecheck, tests, `spur-check`); copy existing gate results or write `not run`.
|
|
28
29
|
|
|
29
30
|
Skill(skill="sp:spur-dev", args="job-dump $ARGUMENTS")
|
|
@@ -18,6 +18,14 @@ Wraps the **sp:spur-dev** skill. Three jobs:
|
|
|
18
18
|
`standard` checks only that target sections are structurally complete. It never re-checks what
|
|
19
19
|
they say. Use `ready` whenever the existing content itself is in doubt.
|
|
20
20
|
|
|
21
|
+
**Refine never writes `feature_id`.** It may *report* an orphan task in its result, but linking a
|
|
22
|
+
task to a feature is an operator decision with a lifecycle blast radius: `spur task update <wbs>
|
|
23
|
+
--feature <id>` reopens a `verifying` parent unless `--no-reopen` is passed. Route linking through
|
|
24
|
+
the opt-in [feature-link helper](../skills/spur-dev/references/feature-link-helper.md) (never
|
|
25
|
+
gate-time, never automatic, always confirmed) — observed 2026-10-13: the ready-preparation refine
|
|
26
|
+
that `spur task create` dispatches by default linked a fresh task to `P1` on its own and demoted
|
|
27
|
+
that feature `verifying → active`.
|
|
28
|
+
|
|
21
29
|
## Argument Flags
|
|
22
30
|
|
|
23
31
|
| Flag | Description | Default |
|
|
@@ -47,9 +55,13 @@ implement without inventing design:
|
|
|
47
55
|
1. Audit every existing claim against the current tree: facts, cited sources, fix soundness across
|
|
48
56
|
all callers, test observability, environment, concurrent work, and scope.
|
|
49
57
|
2. Correct what is wrong and record each change in a dated `**Refine corrections (<date>)**` block
|
|
50
|
-
in Background.
|
|
58
|
+
in Background. When the task bundles several issues, triage each one. An issue that is invalid,
|
|
59
|
+
already fixed or owned elsewhere is removed together with its R-items, Design/Solution notes,
|
|
60
|
+
Plan steps and ACs. If no issue stays valid, cancel the task (`spur task update <wbs> cancelled`)
|
|
61
|
+
and report `cancelled` instead of promoting it.
|
|
51
62
|
3. Run `spur task check <wbs> --as todo --json`, fill unset priority/estimate, and promote
|
|
52
|
-
`backlog → todo`.
|
|
63
|
+
`backlog → todo`. If triage dropped issues, re-estimate and record old → new. Also record a
|
|
64
|
+
title that still names dropped scope; the CLI cannot rename a task.
|
|
53
65
|
4. Report checklist rows `{id, pass, evidence}`.
|
|
54
66
|
|
|
55
67
|
Refine targets `backlog`/`todo` tasks; a `wip`-or-later task needs explicit operator consent and is
|
|
@@ -54,7 +54,13 @@ not a bug.
|
|
|
54
54
|
**Depth:** default `standard` keeps the cheap L3 SKIP gate under `--auto`. Use
|
|
55
55
|
`--depth ready` when handing a feature to another implementer (frozen Design/Requirements/Plan),
|
|
56
56
|
or when the tasks' existing content is in doubt; thread `--depth` into each per-task refine. Ready
|
|
57
|
-
report rows add corrections count, status before → after, and failed checklist ids.
|
|
57
|
+
report rows add corrections count, dropped issues, status before → after, and failed checklist ids.
|
|
58
|
+
Each task's issues are triaged one by one: invalid ones are dropped with their fixes, and a task
|
|
59
|
+
with no valid issue left is `cancelled`. The ready report also proposes merges between overlapping
|
|
60
|
+
tasks, ordering or a shared step for complementary ones, and owning features for tasks without a
|
|
61
|
+
`feature_id`. It executes neither unless
|
|
62
|
+
`--description` names the task and action, for example
|
|
63
|
+
`--description "cancel 0273 and merge its issues into 0269; link 0260 and 0274 to G11"`.
|
|
58
64
|
|
|
59
65
|
> **`--next` dropped** (feature H8, 2026-07-31). Batch-level chaining was a token bomb — each refine
|
|
60
66
|
> hop is an LLM call, and a large feature means N refine chains fanned out at once. For batch
|
|
@@ -43,6 +43,7 @@ Put the target first: a bare token after `--worktree` is read as the worktree na
|
|
|
43
43
|
- **WBS mode (per task target):** `Skill(skill="sp:functional-review", args="<wbs> $FLAGS")` + `Skill(skill="sp:code-verification", args="review <wbs> $FLAGS")` + `Skill(skill="sp:code-improvement", args="<wbs> $FLAGS")` (functional traceability + SECUA framework + architectural depth — each skill receives its one resolved WBS exactly once plus `$FLAGS` = `$ARGUMENTS` minus the selector (`--tasks`/`--feature`/`--scope` or positional) and its value, never the raw selector, and returns a review fragment only — F92 0593 R1)
|
|
44
44
|
- **Task fan-out (`--tasks` / `--feature`).** One WBS-mode review per task in the frozen set. Tasks in `backlog`/`todo`/`blocked` are reported NOT-STARTED and skipped (§ 3a outcome vocabulary); a per-task failure does not stop the remaining tasks. Each implemented task gets its own merged `## Review`; the run ends with a combined summary table (WBS, verdict, P1/P2 counts).
|
|
45
45
|
- Coordinator = this session. No `sp:super-reviewer` subagent is dispatched: act as the review coordinator defined in [agents/super-reviewer.md](../agents/super-reviewer.md) — merge the fragments per its Output Format (native `P1`–`P4` priority cells, section-relative headings) and, for every task target (standalone or pipeline), write that task's combined `## Review` via `spur task update <wbs> --section Review --from-file`. Path mode emits advisory output only.
|
|
46
|
+
- **Answer contract (pipeline dispatches).** The captured review answer (`.spur/run/<runId>-review-answer.txt`) must carry exactly one `Verdict: PASS|FAIL` line and exactly one `Confidence: HIGH|MEDIUM|LOW` line stating how strongly the review stands behind its verdict — HIGH = the reviewer re-executed the checks behind the verdict, MEDIUM = partial reliance on prior/external evidence, LOW = key evidence not re-executed. The pipeline's PASS edges admit HIGH/MEDIUM unadorned; LOW or an absent line crosses only with the operator's `ackLowConfidence` (same policy as the verify confidence gate, task 1068).
|
|
46
47
|
- **Path mode (per path target):** `Skill(skill="sp:code-verification", args="review <path> $FLAGS")` + `Skill(skill="sp:code-improvement", args="<path> $FLAGS")` (advisory SECUA quality + architectural depth — one normalized path forwarded once plus `$FLAGS`; performs no task mutation). Under `--scope <path>[,<path>]`: paths must exist (exit 2 otherwise), are normalized, duplicates dropped and nested paths collapse to the ancestor (`--scope apps,apps/cli` → `apps`); each surviving path gets a sub-review (Step 3p path scope), eligible for native-subagent dispatch per [dispatch-surface.md](../skills/parallel-execution/references/dispatch-surface.md); the coordinator merges the sub-reviews, runs **one** cross-path architecture pass (`sp:code-improvement` over the inter-path imports), and emits **one** advisory report. No task mutation.
|
|
47
48
|
- **Positional alias (deprecated).** A positional `<wbs|path>` is accepted for one release: a `^\d{4}$` token with a resolvable task behaves as `--tasks <wbs>`; an existing path as `--scope <path>`; otherwise exit 2. Print a deprecation warning naming the replacement selector; removal is a follow-up.
|
|
48
49
|
- `--triage`: after the review returns, run the triage protocol in [dev-operations.md § 2. review](../skills/spur-dev/references/dev-operations.md#2-review) **inline in this session** — the review skills and `sp:super-reviewer` stay report-only. With multiple targets, bucket the findings across all targets once (identical `file:line` findings deduped before bucketing). `Edit`/`Write` in `allowed-tools` exist only for these direct fixes.
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
* adapter. This file owns the Claude Code payload/decision shape only.
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
+
import { classifyCommand } from '../lib/destructive-policy';
|
|
25
26
|
import { getEnvVar } from '../lib/env';
|
|
26
|
-
import { classifyCommand } from './destructive-policy';
|
|
27
27
|
|
|
28
28
|
interface ToolPayload {
|
|
29
29
|
tool_name?: string;
|