@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.
Files changed (79) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/config.example.yaml +3 -4
  3. package/config/config.global.yaml +3 -4
  4. package/config/rules/quality/coverage-gate.yaml +6 -4
  5. package/config/rules/strict/runtime-boundaries.yaml +8 -3
  6. package/config/rules/surface/check-cli-surface.yaml +20 -0
  7. package/config/transition-shims.json +1 -15
  8. package/config/workflows/task-lifecycle.yaml +1 -1
  9. package/package.json +1 -1
  10. package/plugins/sp/commands/dev-changelog.md +1 -1
  11. package/plugins/sp/lib/inline-run.generated.mjs +1 -1
  12. package/plugins/sp/plugin.json +1 -1
  13. package/plugins/sp/scripts/commit-guard.mjs +49 -39
  14. package/plugins/sp/scripts/commit-guard.ts +60 -61
  15. package/plugins/sp/scripts/persist-out-check.mjs +28 -24
  16. package/plugins/sp/scripts/persist-out-check.ts +42 -33
  17. package/plugins/sp/skills/code-verification/SKILL.md +1 -1
  18. package/plugins/sp/skills/code-verification/references/verdict-schema.md +6 -4
  19. package/plugins/sp/skills/functional-review/SKILL.md +1 -1
  20. package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +4 -2
  21. package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +3 -1
  22. package/plugins/sp/skills/spur-dev/references/dev-operations.md +7 -3
  23. package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +3 -2
  24. package/plugins/sp/skills/spur-dev/references/execution-batch.md +1 -1
  25. package/plugins/sp/skills/spur-dev/references/execution-worktree-setup.md +1 -1
  26. package/plugins/sp/skills/spur-dev/references/gate-checklists.md +1 -1
  27. package/spur.js +43097 -42239
  28. package/web/_astro/{BoardApp.hF0RAIrg.js → BoardApp.C5jnkkKP.js} +124 -124
  29. package/web/_astro/{BoardApp.Niubpe6z.js → BoardApp.CaNvQBD_.js} +1 -1
  30. package/web/_astro/{TaskDetail.DJpapt38.js → TaskDetail.DGKndhI8.js} +1 -1
  31. package/web/_astro/{arc.BgKcK0i8.js → arc.DHrwdg3G.js} +1 -1
  32. package/web/_astro/{architectureDiagram-3BPJPVTR.ChP-Ig0V.js → architectureDiagram-3BPJPVTR.pvKpK1s5.js} +1 -1
  33. package/web/_astro/{blockDiagram-GPEHLZMM.BVaCBoeN.js → blockDiagram-GPEHLZMM.BQmRcZsS.js} +1 -1
  34. package/web/_astro/{c4Diagram-AAUBKEIU.CHSDpEO5.js → c4Diagram-AAUBKEIU.CCLjHeH1.js} +1 -1
  35. package/web/_astro/channel.C7wG9RxA.js +1 -0
  36. package/web/_astro/{chunk-2J33WTMH.MYRcYVRa.js → chunk-2J33WTMH.DL6Yuoma.js} +1 -1
  37. package/web/_astro/{chunk-4BX2VUAB.S5j22Zqa.js → chunk-4BX2VUAB.CzlyEI7l.js} +1 -1
  38. package/web/_astro/{chunk-55IACEB6.gciRPvmZ.js → chunk-55IACEB6.B60EWxp1.js} +1 -1
  39. package/web/_astro/{chunk-727SXJPM.CdqrSQkX.js → chunk-727SXJPM.c7v_fRLo.js} +1 -1
  40. package/web/_astro/{chunk-AQP2D5EJ.CyokdHT3.js → chunk-AQP2D5EJ.8BxLWdDc.js} +1 -1
  41. package/web/_astro/{chunk-FMBD7UC4.Bg9KJhjW.js → chunk-FMBD7UC4.DmKuxGFT.js} +1 -1
  42. package/web/_astro/{chunk-ND2GUHAM.1gxxI-vD.js → chunk-ND2GUHAM.1Zwd4mqV.js} +1 -1
  43. package/web/_astro/{chunk-QZHKN3VN.DDEYtCKU.js → chunk-QZHKN3VN.BvYLu-A1.js} +1 -1
  44. package/web/_astro/{classDiagram-4FO5ZUOK.Ch3zi37T.js → classDiagram-4FO5ZUOK.CEqRt0WU.js} +1 -1
  45. package/web/_astro/{classDiagram-v2-Q7XG4LA2.Ch3zi37T.js → classDiagram-v2-Q7XG4LA2.CEqRt0WU.js} +1 -1
  46. package/web/_astro/{cose-bilkent-S5V4N54A.D2q5AINI.js → cose-bilkent-S5V4N54A.C7JiUdj2.js} +1 -1
  47. package/web/_astro/{cynefin-OW5HDTMX.BA9kC2YT.js → cynefin-OW5HDTMX.B6mZ-1be.js} +1 -1
  48. package/web/_astro/{dagre-BM42HDAG.CHO08nRp.js → dagre-BM42HDAG.BuryfDy6.js} +1 -1
  49. package/web/_astro/{diagram-2AECGRRQ.BfFQt0LW.js → diagram-2AECGRRQ.dao39YQM.js} +1 -1
  50. package/web/_astro/{diagram-5GNKFQAL.CHMwMTe4.js → diagram-5GNKFQAL.lnGZe4At.js} +1 -1
  51. package/web/_astro/{diagram-KO2AKTUF.BJ-7gK-w.js → diagram-KO2AKTUF.uWfhzEfT.js} +1 -1
  52. package/web/_astro/{diagram-LMA3HP47.C5xqcc0t.js → diagram-LMA3HP47.ppq8-198.js} +1 -1
  53. package/web/_astro/{diagram-OG6HWLK6.C2pQjfrC.js → diagram-OG6HWLK6.CKSCqDt5.js} +1 -1
  54. package/web/_astro/{erDiagram-TEJ5UH35._FoNyxgC.js → erDiagram-TEJ5UH35.sFSf2yBN.js} +1 -1
  55. package/web/_astro/{flowDiagram-I6XJVG4X.B_ENkT2I.js → flowDiagram-I6XJVG4X.BJQjKLbz.js} +1 -1
  56. package/web/_astro/{ganttDiagram-6RSMTGT7.B3q8h77C.js → ganttDiagram-6RSMTGT7.DAHKNj2N.js} +1 -1
  57. package/web/_astro/{gitGraphDiagram-PVQCEYII.QWZFDboZ.js → gitGraphDiagram-PVQCEYII.BlmzcW_O.js} +1 -1
  58. package/web/_astro/index.BCY1JJHd.css +1 -0
  59. package/web/_astro/{infoDiagram-5YYISTIA.Cs6eEc92.js → infoDiagram-5YYISTIA.DGhjaqsi.js} +1 -1
  60. package/web/_astro/{ishikawaDiagram-YF4QCWOH.BU9DJMHA.js → ishikawaDiagram-YF4QCWOH.gKIpgt6F.js} +1 -1
  61. package/web/_astro/{journeyDiagram-JHISSGLW.D35k6Jpe.js → journeyDiagram-JHISSGLW.DG3tmP0R.js} +1 -1
  62. package/web/_astro/{kanban-definition-UN3LZRKU.DBqcAT4m.js → kanban-definition-UN3LZRKU.CgHDSxkR.js} +1 -1
  63. package/web/_astro/{linear.D-LSNK8W.js → linear.BuGEpcuM.js} +1 -1
  64. package/web/_astro/{mermaid.core.CSruWVOa.js → mermaid.core.DBVqkWBp.js} +4 -4
  65. package/web/_astro/{mindmap-definition-RKZ34NQL.BiFaUsfj.js → mindmap-definition-RKZ34NQL.D-kOcji9.js} +1 -1
  66. package/web/_astro/{pieDiagram-4H26LBE5.D1KTKqb9.js → pieDiagram-4H26LBE5.BvGPwtZt.js} +1 -1
  67. package/web/_astro/{quadrantDiagram-W4KKPZXB.DBHflsMG.js → quadrantDiagram-W4KKPZXB.BKb_9FV6.js} +1 -1
  68. package/web/_astro/{requirementDiagram-4Y6WPE33.hwX9CNdk.js → requirementDiagram-4Y6WPE33.Cx0fvD8v.js} +1 -1
  69. package/web/_astro/{sankeyDiagram-5OEKKPKP.DkI8mJiE.js → sankeyDiagram-5OEKKPKP.fatULi0W.js} +1 -1
  70. package/web/_astro/{sequenceDiagram-3UESZ5HK.DMz7jBDx.js → sequenceDiagram-3UESZ5HK.ChHyKqco.js} +1 -1
  71. package/web/_astro/{stateDiagram-AJRCARHV.B6Ef2xJ1.js → stateDiagram-AJRCARHV.BdUpKWyj.js} +1 -1
  72. package/web/_astro/{stateDiagram-v2-BHNVJYJU.CgoaufB9.js → stateDiagram-v2-BHNVJYJU.fmJxqIm5.js} +1 -1
  73. package/web/_astro/{timeline-definition-PNZ67QCA.B3c8h1t-.js → timeline-definition-PNZ67QCA.BayDn5-V.js} +1 -1
  74. package/web/_astro/{vennDiagram-CIIHVFJN.BdHPAxAb.js → vennDiagram-CIIHVFJN.Bm2Aggwa.js} +1 -1
  75. package/web/_astro/{wardleyDiagram-YWT4CUSO.BrJXPPAj.js → wardleyDiagram-YWT4CUSO.DI75O-uG.js} +1 -1
  76. package/web/_astro/{xychartDiagram-2RQKCTM6.CMH5yFsV.js → xychartDiagram-2RQKCTM6.DL90E7Q7.js} +1 -1
  77. package/web/index.html +2 -2
  78. package/web/_astro/channel.DkpvN2tD.js +0 -1
  79. 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-service.ts`); it never overwrites the
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) MUST carry `test` or
381
- `command` evidence; any other evidence type downgrades the row to `PARTIAL` and caps the verdict.
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. Self-check before emitting: every short hash in `<since>..<until>` appears exactly once. Fix any miss or duplicate; do not report a verdict.
594
- 8. Reply in at most three lines: the range, bullet counts per category, and the output target.
595
- - **Invariants:** Output is derived from `git log` only. No quality gates — no `bun run gate`/lint/typecheck/test/`spur-check`/rule runs, citation or manifest lookups, confidence ratings, or edits beyond the one inserted section. The file is left uncommitted.
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`), or tag the
143
- AC id `[non-behavior]`/`[advisory]` when executable evidence genuinely doesn't apply.
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:124`), so no CLI change is needed — `cd` into
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.ts` and no failing file references task/lifecycle, the
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.