@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/config/corpus-baseline.json +0 -18
- package/config/plugin-scripts.json +8 -0
- package/config/workflow-composition-baseline.json +123 -377
- package/config/workflows/task-pipeline.yaml +32 -3
- package/package.json +9 -9
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/scripts/task-evidence-precheck.ts +181 -0
- package/plugins/sp/scripts/verify-answer-lint.ts +386 -0
- package/plugins/sp/skills/code-verification/SKILL.md +11 -10
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +10 -0
- package/plugins/sp/skills/spur-cli/references/history.md +1 -0
- package/plugins/sp/skills/spur-dev/references/gate-checklists.md +16 -0
- package/spur.js +1262 -260
- package/web/_astro/BoardApp.DHj-03Dp.js +1 -0
- package/web/_astro/{BoardApp.BQFbkeqq.js → BoardApp.DOadeEJV.js} +77 -77
- package/web/_astro/{TaskDetail.Dl2Eaj1w.js → TaskDetail.DKzpkDj5.js} +1 -1
- package/web/_astro/{arc.uG14rp8A.js → arc.Bsa0gprH.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.Dye6uD_x.js → architectureDiagram-3BPJPVTR.LOUZCDBC.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.B9Pkh7Hb.js → blockDiagram-GPEHLZMM.CGee4isG.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.C2x7SC_X.js → c4Diagram-AAUBKEIU.B2CrQJ_O.js} +1 -1
- package/web/_astro/channel.BGL7KSHC.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.D2p4-nWk.js → chunk-2J33WTMH.DJvf8RiP.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.S-6jf33o.js → chunk-4BX2VUAB.B_l35O-Y.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.DVXj4Fdh.js → chunk-55IACEB6.DqbxMswU.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.Dz689FMN.js → chunk-727SXJPM.D_7ZGNjE.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.KxYj5TnI.js → chunk-AQP2D5EJ.Cq6yZ0s8.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.itTQyHQB.js → chunk-FMBD7UC4.BWrlUPYi.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.euSrbJf5.js → chunk-ND2GUHAM.BPLaXFZH.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.OWASJRQy.js → chunk-QZHKN3VN.BtmAEAwZ.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.BLvrlpNO.js → classDiagram-4FO5ZUOK.CWycT7Ia.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.BLvrlpNO.js → classDiagram-v2-Q7XG4LA2.CWycT7Ia.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.XBF-rmyD.js → cose-bilkent-S5V4N54A.DyxjSWon.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.DlCx762Z.js → cynefin-OW5HDTMX.DnNfLBpX.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.D17Rshxv.js → dagre-BM42HDAG.BFAvnjKD.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.AhBIVJC8.js → diagram-2AECGRRQ.BAoNCFeB.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.C9ximjyC.js → diagram-5GNKFQAL.DiiKe7BP.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.CZb7Ru_9.js → diagram-KO2AKTUF.t_uOQWVP.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.BW7LwqoS.js → diagram-LMA3HP47.SB9997cP.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.XC025W0V.js → diagram-OG6HWLK6.Bgsxgf5G.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.CpMXmBDP.js → erDiagram-TEJ5UH35.DO9OAOAc.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.D2ednJWg.js → flowDiagram-I6XJVG4X.CIb41ZyL.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.BjL9FGKO.js → ganttDiagram-6RSMTGT7.Dc8Lk0fV.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.B90g1VGk.js → gitGraphDiagram-PVQCEYII.CpPmMWrl.js} +1 -1
- package/web/_astro/index.C-t8kB0T.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.RqgycKtQ.js → infoDiagram-5YYISTIA.DxBXfQSf.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.Ctn-zt6a.js → ishikawaDiagram-YF4QCWOH.gA6OKtXq.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.DJhT8Ctp.js → journeyDiagram-JHISSGLW.CMEyLMmm.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.BY1QdejI.js → kanban-definition-UN3LZRKU.CKXlUNCr.js} +1 -1
- package/web/_astro/{linear.Di7YObSt.js → linear.CpTGdVx3.js} +1 -1
- package/web/_astro/{mermaid.core.CbxtJS3Q.js → mermaid.core.c8SSCsE5.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.CxvR4g_J.js → mindmap-definition-RKZ34NQL.BH59HDw6.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.jNWqnBHH.js → pieDiagram-4H26LBE5.DmgFXkZR.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.BCp12MbA.js → quadrantDiagram-W4KKPZXB.DyfB7N4J.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.Dxhm4TyR.js → requirementDiagram-4Y6WPE33.DosszoFo.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.BtQXp4J9.js → sankeyDiagram-5OEKKPKP.pBkHhvVN.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.BWEM1R_Q.js → sequenceDiagram-3UESZ5HK.BE8tmkNR.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.BG3wUkWB.js → stateDiagram-AJRCARHV.C4n7vDiG.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.BLtMeFVP.js → stateDiagram-v2-BHNVJYJU.BpgwYlRy.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.D5fHo0az.js → timeline-definition-PNZ67QCA.DvcVKc-W.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.0DcuMluU.js → vennDiagram-CIIHVFJN.BLOk-UOl.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.BZ-dxgHm.js → wardleyDiagram-YWT4CUSO.CIzB7M2o.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.Bg-XWF7z.js → xychartDiagram-2RQKCTM6.CGC_lZ19.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.CTkqrhWd.js +0 -1
- package/web/_astro/channel.Dsvulp7W.js +0 -1
- 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
|
|
251
|
-
`.spur/run/<wbs>-verify-answer.txt
|
|
252
|
-
`.spur/run/<wbs>-verdict.json`, and
|
|
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
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
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** (
|
|
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).
|