@gobing-ai/spur 0.4.5 → 0.4.7
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 +3 -4
- package/config/config.global.yaml +3 -4
- package/config/rules/quality/coverage-gate.yaml +6 -4
- package/config/rules/strict/runtime-boundaries.yaml +8 -3
- package/config/rules/surface/check-cli-surface.yaml +20 -0
- package/config/transition-shims.json +1 -15
- package/config/workflows/task-lifecycle.yaml +1 -1
- package/package.json +1 -1
- package/plugins/sp/commands/dev-changelog.md +1 -1
- package/plugins/sp/lib/inline-run.generated.mjs +1 -1
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/scripts/commit-guard.mjs +49 -39
- package/plugins/sp/scripts/commit-guard.ts +60 -61
- package/plugins/sp/scripts/persist-out-check.mjs +28 -24
- package/plugins/sp/scripts/persist-out-check.ts +42 -33
- package/plugins/sp/skills/code-verification/SKILL.md +1 -1
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +6 -4
- package/plugins/sp/skills/functional-review/SKILL.md +1 -1
- package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +4 -2
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +3 -1
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +7 -3
- package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +3 -2
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +1 -1
- package/plugins/sp/skills/spur-dev/references/execution-worktree-setup.md +1 -1
- package/plugins/sp/skills/spur-dev/references/gate-checklists.md +1 -1
- package/spur.js +43097 -42239
- package/web/_astro/{BoardApp.hF0RAIrg.js → BoardApp.C5jnkkKP.js} +124 -124
- package/web/_astro/{BoardApp.Niubpe6z.js → BoardApp.CaNvQBD_.js} +1 -1
- package/web/_astro/{TaskDetail.DJpapt38.js → TaskDetail.DGKndhI8.js} +1 -1
- package/web/_astro/{arc.BgKcK0i8.js → arc.DHrwdg3G.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.ChP-Ig0V.js → architectureDiagram-3BPJPVTR.pvKpK1s5.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.BVaCBoeN.js → blockDiagram-GPEHLZMM.BQmRcZsS.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.CHSDpEO5.js → c4Diagram-AAUBKEIU.CCLjHeH1.js} +1 -1
- package/web/_astro/channel.C7wG9RxA.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.MYRcYVRa.js → chunk-2J33WTMH.DL6Yuoma.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.S5j22Zqa.js → chunk-4BX2VUAB.CzlyEI7l.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.gciRPvmZ.js → chunk-55IACEB6.B60EWxp1.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.CdqrSQkX.js → chunk-727SXJPM.c7v_fRLo.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.CyokdHT3.js → chunk-AQP2D5EJ.8BxLWdDc.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.Bg9KJhjW.js → chunk-FMBD7UC4.DmKuxGFT.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.1gxxI-vD.js → chunk-ND2GUHAM.1Zwd4mqV.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.DDEYtCKU.js → chunk-QZHKN3VN.BvYLu-A1.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.Ch3zi37T.js → classDiagram-4FO5ZUOK.CEqRt0WU.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.Ch3zi37T.js → classDiagram-v2-Q7XG4LA2.CEqRt0WU.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.D2q5AINI.js → cose-bilkent-S5V4N54A.C7JiUdj2.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.BA9kC2YT.js → cynefin-OW5HDTMX.B6mZ-1be.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.CHO08nRp.js → dagre-BM42HDAG.BuryfDy6.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.BfFQt0LW.js → diagram-2AECGRRQ.dao39YQM.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.CHMwMTe4.js → diagram-5GNKFQAL.lnGZe4At.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.BJ-7gK-w.js → diagram-KO2AKTUF.uWfhzEfT.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.C5xqcc0t.js → diagram-LMA3HP47.ppq8-198.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.C2pQjfrC.js → diagram-OG6HWLK6.CKSCqDt5.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35._FoNyxgC.js → erDiagram-TEJ5UH35.sFSf2yBN.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.B_ENkT2I.js → flowDiagram-I6XJVG4X.BJQjKLbz.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.B3q8h77C.js → ganttDiagram-6RSMTGT7.DAHKNj2N.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.QWZFDboZ.js → gitGraphDiagram-PVQCEYII.BlmzcW_O.js} +1 -1
- package/web/_astro/index.BCY1JJHd.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.Cs6eEc92.js → infoDiagram-5YYISTIA.DGhjaqsi.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.BU9DJMHA.js → ishikawaDiagram-YF4QCWOH.gKIpgt6F.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.D35k6Jpe.js → journeyDiagram-JHISSGLW.DG3tmP0R.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.DBqcAT4m.js → kanban-definition-UN3LZRKU.CgHDSxkR.js} +1 -1
- package/web/_astro/{linear.D-LSNK8W.js → linear.BuGEpcuM.js} +1 -1
- package/web/_astro/{mermaid.core.CSruWVOa.js → mermaid.core.DBVqkWBp.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.BiFaUsfj.js → mindmap-definition-RKZ34NQL.D-kOcji9.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.D1KTKqb9.js → pieDiagram-4H26LBE5.BvGPwtZt.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.DBHflsMG.js → quadrantDiagram-W4KKPZXB.BKb_9FV6.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.hwX9CNdk.js → requirementDiagram-4Y6WPE33.Cx0fvD8v.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.DkI8mJiE.js → sankeyDiagram-5OEKKPKP.fatULi0W.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.DMz7jBDx.js → sequenceDiagram-3UESZ5HK.ChHyKqco.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.B6Ef2xJ1.js → stateDiagram-AJRCARHV.BdUpKWyj.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.CgoaufB9.js → stateDiagram-v2-BHNVJYJU.fmJxqIm5.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.B3c8h1t-.js → timeline-definition-PNZ67QCA.BayDn5-V.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.BdHPAxAb.js → vennDiagram-CIIHVFJN.Bm2Aggwa.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.BrJXPPAj.js → wardleyDiagram-YWT4CUSO.DI75O-uG.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.CMH5yFsV.js → xychartDiagram-2RQKCTM6.DL90E7Q7.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/channel.DkpvN2tD.js +0 -1
- package/web/_astro/index.BFyW13JJ.css +0 -1
|
@@ -296,7 +296,7 @@ Include the per-requirement traceability table in the report:
|
|
|
296
296
|
fragment to the coordinator (`sp:super-reviewer` — the invoking session under `/sp:dev-review`),
|
|
297
297
|
which writes the combined `## Review`. The
|
|
298
298
|
`record` step transcribes only `## Testing` from the verdict artifact and backfills `## Review`
|
|
299
|
-
only when the section is bare (`sectionIsBare` guard, `task-
|
|
299
|
+
only when the section is bare (`sectionIsBare` guard, `task-section-bodies.ts`); it never overwrites the
|
|
300
300
|
coordinator's authored Review. Keep the priority-table lead stable in the fragment so the L3 gate
|
|
301
301
|
stays satisfied through `record` → `done`.
|
|
302
302
|
|
|
@@ -377,8 +377,10 @@ rows), there is no checklist label: cite each row by its exact scenario title
|
|
|
377
377
|
matches nothing and the verdict is rejected.
|
|
378
378
|
|
|
379
379
|
**Evidence rule (behavior-bearing AC):** an AC row with `status: MET` on a behavior-bearing id
|
|
380
|
-
(no `[advisory]`/`[non-core]`/`[non-behavior]`/`[docs-only]` marker
|
|
381
|
-
`command` evidence; any other evidence type downgrades the row to
|
|
380
|
+
(no `[advisory]`/`[non-core]`/`[non-behavior]`/`[docs-only]` marker **on the AC item in the task
|
|
381
|
+
file**) MUST carry `test` or `command` evidence; any other evidence type downgrades the row to
|
|
382
|
+
`PARTIAL` and caps the verdict. Tags written only in the answer are ignored and reported by the
|
|
383
|
+
advisory `ac-exemption-not-in-task` check.
|
|
382
384
|
|
|
383
385
|
**Worked example** — a minimal PASS-producing answer file:
|
|
384
386
|
|
|
@@ -219,7 +219,9 @@ clean at authoring time.
|
|
|
219
219
|
### Which tags exempt a row from executable evidence
|
|
220
220
|
|
|
221
221
|
A `MET` row is silently demoted to `PARTIAL` unless it carries `test` or `command` evidence — the
|
|
222
|
-
executable-evidence rule. Five tags opt a row out, because not every scenario is behavioral
|
|
222
|
+
executable-evidence rule. Five tags opt a row out, because not every scenario is behavioral. The
|
|
223
|
+
tag counts only when the task author writes it on the AC item in the task file; `spur task verdict`
|
|
224
|
+
ignores (and flags) a tag that appears only in the verify answer:
|
|
223
225
|
|
|
224
226
|
`[doc-only]` · `[docs-only]` · `[non-behavior]` · `[advisory]` · `[non-core]`
|
|
225
227
|
|
|
@@ -590,9 +590,13 @@ host instructions does not add one. An opt-in gate is explicit: `gitmsg --check
|
|
|
590
590
|
- `keepachangelog` (default): `## [<version>] - <date>` header, then category headings per the keepachangelog convention — `### Added` / `### Fixed` / `### Changed` / `### Removed` / `### Other` — mapped from conventional-commit types.
|
|
591
591
|
- `simple`: flat bulleted list grouped by type heading (`### feat`, `### fix`, …).
|
|
592
592
|
6. Emit: with `<file>`, insert the section into that file above its newest `## [` release heading (or after its title when none exists) and touch nothing else in the file; without `<file>`, print it to stdout.
|
|
593
|
-
7.
|
|
594
|
-
|
|
595
|
-
-
|
|
593
|
+
7. **Verify claims before emitting:** scan the generated bullets for API/library claims — bullets asserting what code, APIs, libraries, dependencies, or versions do (skip merge/bookkeeping bullets that assert no such fact). Verify each affected bullet, then append an HTML comment line directly under it: `<!-- src: <citation> · <HIGH|MEDIUM|LOW> -->`.
|
|
594
|
+
- Internal claims (what a commit or the code does): confirm against the commit diff (`git show --stat <hash>`, reading hunks when the summary asserts behavior) or the artifact's presence in the tree; cite `path[:line]` — bare path for whole-file claims, `path:line` for a specific behavior or symbol.
|
|
595
|
+
- External claims (framework/library/version behavior): confirm against official docs for the installed version; cite the URL. Unverifiable → LOW plus the reason in one clause.
|
|
596
|
+
- Confidence: HIGH = the diff/artifact confirms the summary as written; MEDIUM = the evidence is real but narrower than the summary; LOW = cannot be confirmed from available sources.
|
|
597
|
+
8. Self-check before emitting: every short hash in `<since>..<until>` appears exactly once, and every verified bullet carries exactly one `<!-- src: … -->` comment whose level is `HIGH`, `MEDIUM`, or `LOW` — no off-rubric levels, no unannotated claim bullets. Fix any miss, duplicate, or bad level; do not report a verdict.
|
|
598
|
+
9. Reply in at most three lines: the range, bullet counts per category plus verified-claim counts (`x HIGH / y MEDIUM / z LOW`), and the output target.
|
|
599
|
+
- **Invariants:** Bullets are derived from `git log` only; the claim-verification pass (step 7) adds evidence from commit diffs, the working tree, and official docs. No quality gates — no `bun run gate`/lint/typecheck/test/`spur-check`/rule runs, and no edits beyond the one inserted section (its verification comments included). The file is left uncommitted.
|
|
596
600
|
|
|
597
601
|
### 9. gitmsg
|
|
598
602
|
|
|
@@ -139,8 +139,9 @@ silently incomplete (H6 shipped at 23/48 that way, with one verdict carrying an
|
|
|
139
139
|
parses zero AC rows while lint still reports PASS.
|
|
140
140
|
3. A behavioral AC marked `MET` with a non-executable evidence type (`static-ref`,
|
|
141
141
|
`manual-review`, `llm-judge`) is **downgraded to PARTIAL** by `task verdict`, making the whole
|
|
142
|
-
verdict PARTIAL. Use `test`/`command` (grep-based verification counts as `command`)
|
|
143
|
-
AC
|
|
142
|
+
verdict PARTIAL. Use `test`/`command` (grep-based verification counts as `command`). Only the
|
|
143
|
+
task author can exempt an AC, by tagging the AC item in the task file `[non-behavior]`/`[advisory]`;
|
|
144
|
+
the same tag added in the verify answer alone is ignored.
|
|
144
145
|
|
|
145
146
|
**Invariant:** a force-done task has a non-empty `done_reason` naming the timeout, a verdict
|
|
146
147
|
artifact whose AC rows cover every declared scenario, and a green lint/test run recorded in
|
|
@@ -625,7 +625,7 @@ Before launching a full `spur-check-new`:
|
|
|
625
625
|
3. **Promoted code must satisfy the boundary rules `scripts/` never enforced.** A command module
|
|
626
626
|
moving from `scripts/` into `apps/cli/src` must route output through the `CommandOutput` seam (no
|
|
627
627
|
`console.*`), spawn processes via `NodeProcessExecutor` (no `Bun.spawnSync`), get a
|
|
628
|
-
`runtime-boundaries` fs-io exemption for sync reads (mirrors `task.ts`), and a non-command helper
|
|
628
|
+
`runtime-boundaries` fs-io exemption for sync reads (mirrors `commands/task/shared.ts`), and a non-command helper
|
|
629
629
|
must not live in `apps/cli/src/commands/` (the noun scan treats every file there as a noun).
|
|
630
630
|
4. **Doc/TSDoc edits shift `file:line` anchors** cited by other tasks — the per-task gate surfaces
|
|
631
631
|
them as `L4.anchor-subject-mismatch` (0775: the corpus sweep retired; run `spur task check <wbs>`
|
|
@@ -202,7 +202,7 @@ install rule (source: task 0481) — create mode always installs because a fresh
|
|
|
202
202
|
|
|
203
203
|
After creation or adoption, immediately write/adopt the state marker (WT-3), then run the
|
|
204
204
|
existing batch loop (Steps 1–5) with the worktree as process cwd. `spur workflow run` resolves cwd
|
|
205
|
-
from the process (`apps/cli/src/commands/workflow.ts
|
|
205
|
+
from the process (`apps/cli/src/commands/workflow/run.ts`), so no CLI change is needed — `cd` into
|
|
206
206
|
the worktree directory before launching the loop.
|
|
207
207
|
|
|
208
208
|
#### Evidence staging before the first task (create and reuse mode)
|
|
@@ -188,7 +188,7 @@ transition to `done`.
|
|
|
188
188
|
> in-sandbox for the same reason.
|
|
189
189
|
>
|
|
190
190
|
> **Triage without a baseline run:** list the failing test *files*, then grep them for the surface
|
|
191
|
-
> you changed. If your change touches `task
|
|
191
|
+
> you changed. If your change touches `commands/task/` and no failing file references task/lifecycle, the
|
|
192
192
|
> failure is not yours. This costs seconds and mutates nothing — do **not** `git stash` to get a
|
|
193
193
|
> clean baseline on a shared working tree. Treat any failure that does *not* name a port/listen/`ps`
|
|
194
194
|
> cause as yours until proven otherwise; the count is a moving baseline, not a constant.
|