@gobing-ai/spur 0.3.69 → 0.3.70

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 (67) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/corpus-baseline.json +0 -18
  3. package/config/plugin-scripts.json +8 -0
  4. package/config/workflow-composition-baseline.json +123 -377
  5. package/config/workflows/task-pipeline.yaml +32 -3
  6. package/package.json +9 -9
  7. package/plugins/sp/plugin.json +1 -1
  8. package/plugins/sp/scripts/task-evidence-precheck.ts +181 -0
  9. package/plugins/sp/scripts/verify-answer-lint.ts +386 -0
  10. package/plugins/sp/skills/code-verification/SKILL.md +11 -10
  11. package/plugins/sp/skills/code-verification/references/verdict-schema.md +10 -0
  12. package/plugins/sp/skills/spur-cli/references/history.md +1 -0
  13. package/plugins/sp/skills/spur-dev/references/gate-checklists.md +16 -0
  14. package/spur.js +1262 -260
  15. package/web/_astro/BoardApp.DHj-03Dp.js +1 -0
  16. package/web/_astro/{BoardApp.BQFbkeqq.js → BoardApp.DOadeEJV.js} +77 -77
  17. package/web/_astro/{TaskDetail.Dl2Eaj1w.js → TaskDetail.DKzpkDj5.js} +1 -1
  18. package/web/_astro/{arc.uG14rp8A.js → arc.Bsa0gprH.js} +1 -1
  19. package/web/_astro/{architectureDiagram-3BPJPVTR.Dye6uD_x.js → architectureDiagram-3BPJPVTR.LOUZCDBC.js} +1 -1
  20. package/web/_astro/{blockDiagram-GPEHLZMM.B9Pkh7Hb.js → blockDiagram-GPEHLZMM.CGee4isG.js} +1 -1
  21. package/web/_astro/{c4Diagram-AAUBKEIU.C2x7SC_X.js → c4Diagram-AAUBKEIU.B2CrQJ_O.js} +1 -1
  22. package/web/_astro/channel.BGL7KSHC.js +1 -0
  23. package/web/_astro/{chunk-2J33WTMH.D2p4-nWk.js → chunk-2J33WTMH.DJvf8RiP.js} +1 -1
  24. package/web/_astro/{chunk-4BX2VUAB.S-6jf33o.js → chunk-4BX2VUAB.B_l35O-Y.js} +1 -1
  25. package/web/_astro/{chunk-55IACEB6.DVXj4Fdh.js → chunk-55IACEB6.DqbxMswU.js} +1 -1
  26. package/web/_astro/{chunk-727SXJPM.Dz689FMN.js → chunk-727SXJPM.D_7ZGNjE.js} +1 -1
  27. package/web/_astro/{chunk-AQP2D5EJ.KxYj5TnI.js → chunk-AQP2D5EJ.Cq6yZ0s8.js} +1 -1
  28. package/web/_astro/{chunk-FMBD7UC4.itTQyHQB.js → chunk-FMBD7UC4.BWrlUPYi.js} +1 -1
  29. package/web/_astro/{chunk-ND2GUHAM.euSrbJf5.js → chunk-ND2GUHAM.BPLaXFZH.js} +1 -1
  30. package/web/_astro/{chunk-QZHKN3VN.OWASJRQy.js → chunk-QZHKN3VN.BtmAEAwZ.js} +1 -1
  31. package/web/_astro/{classDiagram-4FO5ZUOK.BLvrlpNO.js → classDiagram-4FO5ZUOK.CWycT7Ia.js} +1 -1
  32. package/web/_astro/{classDiagram-v2-Q7XG4LA2.BLvrlpNO.js → classDiagram-v2-Q7XG4LA2.CWycT7Ia.js} +1 -1
  33. package/web/_astro/{cose-bilkent-S5V4N54A.XBF-rmyD.js → cose-bilkent-S5V4N54A.DyxjSWon.js} +1 -1
  34. package/web/_astro/{cynefin-OW5HDTMX.DlCx762Z.js → cynefin-OW5HDTMX.DnNfLBpX.js} +1 -1
  35. package/web/_astro/{dagre-BM42HDAG.D17Rshxv.js → dagre-BM42HDAG.BFAvnjKD.js} +1 -1
  36. package/web/_astro/{diagram-2AECGRRQ.AhBIVJC8.js → diagram-2AECGRRQ.BAoNCFeB.js} +1 -1
  37. package/web/_astro/{diagram-5GNKFQAL.C9ximjyC.js → diagram-5GNKFQAL.DiiKe7BP.js} +1 -1
  38. package/web/_astro/{diagram-KO2AKTUF.CZb7Ru_9.js → diagram-KO2AKTUF.t_uOQWVP.js} +1 -1
  39. package/web/_astro/{diagram-LMA3HP47.BW7LwqoS.js → diagram-LMA3HP47.SB9997cP.js} +1 -1
  40. package/web/_astro/{diagram-OG6HWLK6.XC025W0V.js → diagram-OG6HWLK6.Bgsxgf5G.js} +1 -1
  41. package/web/_astro/{erDiagram-TEJ5UH35.CpMXmBDP.js → erDiagram-TEJ5UH35.DO9OAOAc.js} +1 -1
  42. package/web/_astro/{flowDiagram-I6XJVG4X.D2ednJWg.js → flowDiagram-I6XJVG4X.CIb41ZyL.js} +1 -1
  43. package/web/_astro/{ganttDiagram-6RSMTGT7.BjL9FGKO.js → ganttDiagram-6RSMTGT7.Dc8Lk0fV.js} +1 -1
  44. package/web/_astro/{gitGraphDiagram-PVQCEYII.B90g1VGk.js → gitGraphDiagram-PVQCEYII.CpPmMWrl.js} +1 -1
  45. package/web/_astro/index.C-t8kB0T.css +1 -0
  46. package/web/_astro/{infoDiagram-5YYISTIA.RqgycKtQ.js → infoDiagram-5YYISTIA.DxBXfQSf.js} +1 -1
  47. package/web/_astro/{ishikawaDiagram-YF4QCWOH.Ctn-zt6a.js → ishikawaDiagram-YF4QCWOH.gA6OKtXq.js} +1 -1
  48. package/web/_astro/{journeyDiagram-JHISSGLW.DJhT8Ctp.js → journeyDiagram-JHISSGLW.CMEyLMmm.js} +1 -1
  49. package/web/_astro/{kanban-definition-UN3LZRKU.BY1QdejI.js → kanban-definition-UN3LZRKU.CKXlUNCr.js} +1 -1
  50. package/web/_astro/{linear.Di7YObSt.js → linear.CpTGdVx3.js} +1 -1
  51. package/web/_astro/{mermaid.core.CbxtJS3Q.js → mermaid.core.c8SSCsE5.js} +4 -4
  52. package/web/_astro/{mindmap-definition-RKZ34NQL.CxvR4g_J.js → mindmap-definition-RKZ34NQL.BH59HDw6.js} +1 -1
  53. package/web/_astro/{pieDiagram-4H26LBE5.jNWqnBHH.js → pieDiagram-4H26LBE5.DmgFXkZR.js} +1 -1
  54. package/web/_astro/{quadrantDiagram-W4KKPZXB.BCp12MbA.js → quadrantDiagram-W4KKPZXB.DyfB7N4J.js} +1 -1
  55. package/web/_astro/{requirementDiagram-4Y6WPE33.Dxhm4TyR.js → requirementDiagram-4Y6WPE33.DosszoFo.js} +1 -1
  56. package/web/_astro/{sankeyDiagram-5OEKKPKP.BtQXp4J9.js → sankeyDiagram-5OEKKPKP.pBkHhvVN.js} +1 -1
  57. package/web/_astro/{sequenceDiagram-3UESZ5HK.BWEM1R_Q.js → sequenceDiagram-3UESZ5HK.BE8tmkNR.js} +1 -1
  58. package/web/_astro/{stateDiagram-AJRCARHV.BG3wUkWB.js → stateDiagram-AJRCARHV.C4n7vDiG.js} +1 -1
  59. package/web/_astro/{stateDiagram-v2-BHNVJYJU.BLtMeFVP.js → stateDiagram-v2-BHNVJYJU.BpgwYlRy.js} +1 -1
  60. package/web/_astro/{timeline-definition-PNZ67QCA.D5fHo0az.js → timeline-definition-PNZ67QCA.DvcVKc-W.js} +1 -1
  61. package/web/_astro/{vennDiagram-CIIHVFJN.0DcuMluU.js → vennDiagram-CIIHVFJN.BLOk-UOl.js} +1 -1
  62. package/web/_astro/{wardleyDiagram-YWT4CUSO.BZ-dxgHm.js → wardleyDiagram-YWT4CUSO.CIzB7M2o.js} +1 -1
  63. package/web/_astro/{xychartDiagram-2RQKCTM6.Bg-XWF7z.js → xychartDiagram-2RQKCTM6.CGC_lZ19.js} +1 -1
  64. package/web/index.html +2 -2
  65. package/web/_astro/BoardApp.CTkqrhWd.js +0 -1
  66. package/web/_astro/channel.Dsvulp7W.js +0 -1
  67. package/web/_astro/index.BVXdIsZV.css +0 -1
@@ -247,9 +247,10 @@ completion gate (`PARTIAL`/`FAIL` route the pipeline to `failed`).
247
247
  ### Step 10 — Emit the verdict artifact (the only verify output)
248
248
 
249
249
  Assemble the evidence and **emit the canonical verdict artifact** — verification writes no task
250
- section (F92 0593 R1). Under the pipeline, the output is captured as
251
- `.spur/run/<wbs>-verify-answer.txt`; a deterministic shell step derives
252
- `.spur/run/<wbs>-verdict.json`, and the `record` step transcribes `## Testing` from it.
250
+ section (F92 0593 R1). Under the pipeline **you** write
251
+ `.spur/run/<wbs>-verify-answer.txt` (0726 R3: host `expectFile`, never captured/overwritten); a
252
+ deterministic shell step lints it and derives `.spur/run/<wbs>-verdict.json`, and `record`
253
+ transcribes `## Testing` from it.
253
254
 
254
255
  **Standalone** (`/sp:dev-verify` outside the pipeline), write the artifact yourself, then invoke
255
256
  the deterministic Testing writer `spur task record` (section authorship never happens here):
@@ -306,14 +307,14 @@ The per-requirement traceability table MUST use `| Req | Status | Evidence |` (e
306
307
  The parser is tolerant of these variants (defense-in-depth), but the authoring contract is
307
308
  canonical.
308
309
 
309
- **Under the pipeline** (`task-pipeline.yaml`), `agent.run answerFile` captures this whole output to
310
- `.spur/run/<wbs>-verify-answer.txt`. A deterministic shell step then derives
311
- `.spur/run/<wbs>-verdict.json` from it plus an independent `spur task check` (R9; the agent
312
- reporting PASS in prose is necessary but not sufficient the artifact is never left to the agent's
313
- discretion). Section transcription follows the Step 10 contract (record `## Testing`; bare-only
314
- Review fallback; verify never writes sections).
310
+ Under the pipeline, the verifier owns the answer file `.spur/run/<wbs>-verify-answer.txt` (0726
311
+ R3): `Verdict: PARTIAL` first, append one row at a time, replace the verdict line only when all
312
+ rows are certified interruptions leave lintable partial rows; retries fill only missing IDs.
313
+ Host: `expectFile` `verify-answer-lint.ts` verdict + `spur task check` (R9). Vocabularies,
314
+ rejection classes, and the AC identity rule: `references/verdict-schema.md`. Sections follow the
315
+ Step 10 contract.
315
316
 
316
- **Standalone** (`/sp:dev-verify` outside the pipeline — no answer-file capture exists), write the
317
+ **Standalone** (outside the pipeline — no host lint/derive step), write the answer file and
317
318
  artifact yourself; shape and field-by-field contract in
318
319
  [references/verdict-schema.md](references/verdict-schema.md):
319
320
 
@@ -106,6 +106,16 @@ For answer files, emit a matching parseable table:
106
106
  | Scenario: CLI emits JSON | MET | test | `apps/cli/tests/foo.test.ts:42` |
107
107
  ```
108
108
 
109
+ **Authoring contract under the pipeline (0726 R3).** The verifier owns the answer file: write
110
+ `Verdict: PARTIAL` first, append one complete row at a time, and replace the first verdict line only
111
+ after every row is certified. `verify-answer-lint.ts` gates the file before `spur task verdict
112
+ --from-answer` and rejects, with row-level diagnostics: missing/duplicate/unknown requirement IDs,
113
+ AC ids that do not exactly match a task AC checklist label (or its leading token, e.g. `AC1`) or a
114
+ linked feature scenario title, invalid status (`MET | PARTIAL | UNMET` for requirements;
115
+ `N/A` additionally allowed for AC), invalid evidence type (`test | command | static-ref |
116
+ manual-review | llm-judge | n/a`, or a `+` compound), and empty evidence. Interrupted runs keep the
117
+ rows that pass the lint and complete only the missing IDs on retry.
118
+
109
119
  ## Checks evidence
110
120
 
111
121
  Wave C verification can emit the following additive `checks[]` rows:
@@ -22,6 +22,7 @@ live in `packages/app/src/services/history-service.ts` (`FanOutResult`, `DailyRe
22
22
  | `analyze` | Aggregate imported rows and write a versioned forensic artifact | `--since <iso>` `--until <iso>` `--source <source>` `--session <id>` `--run <runId>` `--task <wbs>` `--top <n>` `--out <path>` `--json` |
23
23
  | `report [path]` | Purely render an existing artifact; default to `latest.json` | `--mode <name>` `--task <wbs>` `--top <n>` `--json` |
24
24
  | `daily` | Run import-all → analyze → artifact → 90-day report pruning once | `--since <iso>` `--until <iso>` `--root <path>` `--source-timeout <ms>` `--mode <name>` `--json` |
25
+ | `reset` | Destructively wipe every `history_*` table for a clean re-import; refuses without `--yes` | `--yes` `--json` |
25
26
 
26
27
  Every JSON-capable verb also advertises `--json-envelope`; use the facade's machine-output contract.
27
28
 
@@ -72,6 +72,16 @@ Entered before `task-pipeline.yaml` `precheck` state runs `spur task check <wbs>
72
72
  - [ ] The `## Plan` section is an ordered checklist (not prose).
73
73
  - [ ] The `## Design` section, if present, does not contradict the parent feature's design.
74
74
  - [ ] No `TODO`, `TBD`, or `???` placeholders in Requirements, AC, Design, or Plan.
75
+ - [ ] The evidence-channel precheck (0726 R2) status file is consulted by the
76
+ pipeline guard: `plugins/sp/scripts/task-evidence-precheck.ts` parses the task
77
+ content for an exact `evidence-channel: history_tool_call.args_raw[pi]`
78
+ declaration and, when present, counts live pi rows with `args_raw` on
79
+ `.spur/spur.db` via bun:sqlite. Tasks without a declaration pass without opening
80
+ SQLite; unknown declarations, a missing database/table, and a zero count write
81
+ FAIL. Both precheck guard conjuncts (`precheck-size.status` and
82
+ `precheck-evidence.status`) must read PASS — tasks declaring a live-data
83
+ evidence channel must import real history (safe importer, non-dry-run) before
84
+ implementation begins.
75
85
 
76
86
  ## review gate
77
87
 
@@ -90,6 +100,12 @@ Entered before `task-pipeline.yaml` `review` state dispatches `sp:code-verificat
90
100
 
91
101
  Entered before `task-pipeline.yaml` `verify` state produces a task verdict.
92
102
 
103
+ - [ ] The verify answer file (`.spur/run/<wbs>-verify-answer.txt`) is lint-clean before
104
+ verdict derivation: `plugins/sp/scripts/verify-answer-lint.ts <wbs>` (0726 R3)
105
+ rejects missing/duplicate/unknown R IDs, AC identities that are not an exact task
106
+ checklist label or linked-feature scenario title, invalid status/evidence-type
107
+ values, and empty evidence on any row. A lint failure fails the verify
108
+ step (fail-closed) before `spur task verdict` runs.
93
109
  - [ ] `spur task check <wbs> --strict-core --json` returns PASS.
94
110
  - [ ] Every AC scenario has a corresponding verify command that exited 0.
95
111
  - [ ] The `## Solution` section is filled (not the placeholder comment).