@gobing-ai/spur 0.3.62 → 0.3.63
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 +200 -8
- package/config/workflows/history-anatomy.yaml +40 -11
- package/package.json +9 -9
- package/plugins/sp/README.md +2 -2
- package/plugins/sp/commands/dev-find-issue.md +4 -4
- package/plugins/sp/commands/dev-idea.md +3 -3
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/references/environment-lens.md +66 -0
- package/plugins/sp/scripts/history-anatomy-cache.mjs +162 -13
- package/plugins/sp/scripts/history-anatomy-cache.ts +209 -13
- package/plugins/sp/skills/dogfood-testing/references/report-template.md +30 -0
- package/plugins/sp/skills/history-anatomy/SKILL.md +3 -3
- package/plugins/sp/skills/history-anatomy/references/operations.md +21 -8
- package/plugins/sp/skills/history-anatomy/references/report-contract.md +55 -5
- package/plugins/sp/skills/spur-cli/references/agent.md +15 -6
- package/plugins/sp/skills/spur-cli/references/message.md +4 -2
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +6 -4
- package/spur.js +882 -325
- package/web/_astro/{BoardApp.rkWGVwwK.js → BoardApp.CKolAjUz.js} +56 -56
- package/web/_astro/BoardApp.DXD--ybM.js +1 -0
- package/web/_astro/{TaskDetail.B7ODt_bA.js → TaskDetail.Bre7G4gC.js} +1 -1
- package/web/_astro/{arc.C5QRz6AQ.js → arc.7luwOGiC.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.CHptn8gZ.js → architectureDiagram-3BPJPVTR.F6KaHXp-.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.b1nEDkDw.js → blockDiagram-GPEHLZMM.CCGHeRVi.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.BWj8S_Qq.js → c4Diagram-AAUBKEIU.CpqewGmd.js} +1 -1
- package/web/_astro/channel.DxfOFf1l.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.q0BBuE1n.js → chunk-2J33WTMH.CB9vKa5F.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.DP2KDkAU.js → chunk-4BX2VUAB.ifGXoUA3.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.CkCId72p.js → chunk-55IACEB6.VIaRo7l8.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.oHWzxMot.js → chunk-727SXJPM.DzPE41OS.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.DkkgxfMP.js → chunk-AQP2D5EJ.UF2QRXYF.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.lmFJDvRK.js → chunk-FMBD7UC4.D2zXKa1R.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.52jt0eHK.js → chunk-ND2GUHAM.Cb9bDyvx.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.Cg8KEFoD.js → chunk-QZHKN3VN.nUKFBiLD.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.BuOUhxcD.js → classDiagram-4FO5ZUOK.DZg9K9mO.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.BuOUhxcD.js → classDiagram-v2-Q7XG4LA2.DZg9K9mO.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.BRUU8E_0.js → cose-bilkent-S5V4N54A.D9STo90d.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.GDbfFYVV.js → dagre-BM42HDAG.D3IbwhHz.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.CvIDBeJF.js → diagram-2AECGRRQ.BWTDxBe9.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.DMgJjWOX.js → diagram-5GNKFQAL.XnXlonHG.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.njjl-0AP.js → diagram-KO2AKTUF.CywOngCO.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.CcCqgP8M.js → diagram-LMA3HP47.DY1D21Iu.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.Btqd-YVE.js → diagram-OG6HWLK6.DQxb59KA.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.BbhML_Xo.js → erDiagram-TEJ5UH35.CF2U-pQZ.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.CkvsIgY8.js → flowDiagram-I6XJVG4X.BJK4M3in.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.m8IWD_wW.js → ganttDiagram-6RSMTGT7.BSniMzdB.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.5z87HXO-.js → gitGraphDiagram-PVQCEYII.Dxg-yRov.js} +1 -1
- package/web/_astro/index.BVXdIsZV.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.Bvyvsd7Q.js → infoDiagram-5YYISTIA.BY4CgO_n.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.DdWVYO87.js → ishikawaDiagram-YF4QCWOH.BmWDZtwF.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.C3kOlYH1.js → journeyDiagram-JHISSGLW.CpB1YWDP.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.CfKTUHVC.js → kanban-definition-UN3LZRKU.k-fukQX9.js} +1 -1
- package/web/_astro/{linear.CMDHnzgX.js → linear.BNNCobvI.js} +1 -1
- package/web/_astro/{mermaid.core.DN7-WrsP.js → mermaid.core.DnpzzuPU.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.DcQxLvqG.js → mindmap-definition-RKZ34NQL.D9NnlLBu.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.Nu-Inbw6.js → pieDiagram-4H26LBE5.CKhoMiyC.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.Dck2EChs.js → quadrantDiagram-W4KKPZXB.BkAygRlm.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.C--E5XuW.js → requirementDiagram-4Y6WPE33.CX8ibmwc.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.B_0iRNna.js → sankeyDiagram-5OEKKPKP.Dvurpa0Y.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.PKuKr9mk.js → sequenceDiagram-3UESZ5HK.veO8c2tk.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.ClhGHb-O.js → stateDiagram-AJRCARHV.DpMr4CO3.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.Bv6BBnvg.js → stateDiagram-v2-BHNVJYJU.CKjso86_.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.BZm2ZvAH.js → timeline-definition-PNZ67QCA.DayoPp_2.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.Dt6yZXry.js → vennDiagram-CIIHVFJN.XNHf04O9.js} +1 -1
- package/web/_astro/{wardley-L42UT6IY.rUs-E00M.js → wardley-L42UT6IY.CpM_031g.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.BcWgv4cA.js → wardleyDiagram-YWT4CUSO.lIAjSkZJ.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.DH-M-cX9.js → xychartDiagram-2RQKCTM6.D8_2K6U1.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.Z9jMwI9G.js +0 -1
- package/web/_astro/channel.BJtn6CGV.js +0 -1
- package/web/_astro/index.nWve6EHS.css +0 -1
|
@@ -15044,14 +15044,6 @@
|
|
|
15044
15044
|
"reason": "No verdict artifact and the tracked ## Testing section carries no recoverable coverage evidence; tasks predate durable verification recording (F93 fallback state, task 0673).",
|
|
15045
15045
|
"since": "2026-08-25"
|
|
15046
15046
|
},
|
|
15047
|
-
{
|
|
15048
|
-
"kind": "task",
|
|
15049
|
-
"id": "0102",
|
|
15050
|
-
"code": "L4.anchor-subject-mismatch",
|
|
15051
|
-
"severity": "error",
|
|
15052
|
-
"reason": "Point-window matcher residue (probe 2): cited line resolves and is in bounds but does not name the row subject because the matcher reads only the cited lines — see note § L4.anchor-subject-mismatch (2026-08-25), ADR-083.",
|
|
15053
|
-
"since": "2026-08-25"
|
|
15054
|
-
},
|
|
15055
15047
|
{
|
|
15056
15048
|
"kind": "task",
|
|
15057
15049
|
"id": "0384",
|
|
@@ -15339,6 +15331,206 @@
|
|
|
15339
15331
|
"severity": "warning",
|
|
15340
15332
|
"reason": "Anchor path cannot resolve from project root (bare or plugin-relative) or line range exceeds file — see note § L4.stale-line-anchor (2026-08-25), ADR-083.",
|
|
15341
15333
|
"since": "2026-08-25"
|
|
15334
|
+
},
|
|
15335
|
+
{
|
|
15336
|
+
"kind": "feature",
|
|
15337
|
+
"id": "E1",
|
|
15338
|
+
"code": "L4.scenario-unverified",
|
|
15339
|
+
"severity": "warning",
|
|
15340
|
+
"reason": "Linked historical task 0474 has no canonical PASS verdict with MET requirements; accepted until evidence is recovered or rerun, with two-sided removal when it lands.",
|
|
15341
|
+
"since": "2026-08-26"
|
|
15342
|
+
},
|
|
15343
|
+
{
|
|
15344
|
+
"kind": "feature",
|
|
15345
|
+
"id": "F4",
|
|
15346
|
+
"code": "L4.scenario-unverified",
|
|
15347
|
+
"severity": "warning",
|
|
15348
|
+
"reason": "Linked historical task 0418 has no canonical PASS verdict with MET requirements; accepted until evidence is recovered or rerun, with two-sided removal when it lands.",
|
|
15349
|
+
"since": "2026-08-26"
|
|
15350
|
+
},
|
|
15351
|
+
{
|
|
15352
|
+
"kind": "feature",
|
|
15353
|
+
"id": "F91",
|
|
15354
|
+
"code": "L4.scenario-unverified",
|
|
15355
|
+
"severity": "warning",
|
|
15356
|
+
"reason": "Linked historical task 0582 has no canonical PASS verdict with MET requirements; accepted until evidence is recovered or rerun, with two-sided removal when it lands.",
|
|
15357
|
+
"since": "2026-08-26"
|
|
15358
|
+
},
|
|
15359
|
+
{
|
|
15360
|
+
"kind": "feature",
|
|
15361
|
+
"id": "G4",
|
|
15362
|
+
"code": "L4.scenario-unverified",
|
|
15363
|
+
"severity": "warning",
|
|
15364
|
+
"reason": "Linked historical task 0529 has no canonical PASS verdict with MET requirements; accepted until evidence is recovered or rerun, with two-sided removal when it lands.",
|
|
15365
|
+
"since": "2026-08-26"
|
|
15366
|
+
},
|
|
15367
|
+
{
|
|
15368
|
+
"kind": "feature",
|
|
15369
|
+
"id": "I3",
|
|
15370
|
+
"code": "L4.scenario-unverified",
|
|
15371
|
+
"severity": "warning",
|
|
15372
|
+
"reason": "Linked historical tasks 0539/0540 have no canonical PASS verdict with MET requirements; accepted until evidence is recovered or rerun, with two-sided removal when it lands.",
|
|
15373
|
+
"since": "2026-08-26"
|
|
15374
|
+
},
|
|
15375
|
+
{
|
|
15376
|
+
"kind": "feature",
|
|
15377
|
+
"id": "I81",
|
|
15378
|
+
"code": "L4.dogfood-missing",
|
|
15379
|
+
"severity": "warning",
|
|
15380
|
+
"reason": "Self-referential history-anatomy work has no tracked dogfood artifact yet; accepted pending feature verification, with two-sided removal when the artifact lands.",
|
|
15381
|
+
"since": "2026-08-26"
|
|
15382
|
+
},
|
|
15383
|
+
{
|
|
15384
|
+
"kind": "feature",
|
|
15385
|
+
"id": "I81",
|
|
15386
|
+
"code": "L4.scenario-unverified",
|
|
15387
|
+
"severity": "warning",
|
|
15388
|
+
"reason": "Linked tasks 0674/0680 predate canonical PASS recording for these scenarios; accepted until evidence is recovered or rerun, with two-sided removal when it lands.",
|
|
15389
|
+
"since": "2026-08-26"
|
|
15390
|
+
},
|
|
15391
|
+
{
|
|
15392
|
+
"kind": "feature",
|
|
15393
|
+
"id": "J4",
|
|
15394
|
+
"code": "L4.scenario-unverified",
|
|
15395
|
+
"severity": "warning",
|
|
15396
|
+
"reason": "Linked historical tasks 0374-0378 have no canonical PASS verdicts with MET requirements; accepted until evidence is recovered or rerun, with two-sided removal when it lands.",
|
|
15397
|
+
"since": "2026-08-26"
|
|
15398
|
+
},
|
|
15399
|
+
{
|
|
15400
|
+
"kind": "feature",
|
|
15401
|
+
"id": "K",
|
|
15402
|
+
"code": "L4.scenario-unverified",
|
|
15403
|
+
"severity": "warning",
|
|
15404
|
+
"reason": "Linked historical task 0525 has no canonical PASS verdict with MET requirements; accepted until evidence is recovered or rerun, with two-sided removal when it lands.",
|
|
15405
|
+
"since": "2026-08-26"
|
|
15406
|
+
},
|
|
15407
|
+
{
|
|
15408
|
+
"kind": "task",
|
|
15409
|
+
"id": "0342",
|
|
15410
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15411
|
+
"severity": "error",
|
|
15412
|
+
"reason": "Current source line shifts exposed another closed-task point-window mismatch; preserve the historical citation pending the accepted F91 matcher/corpus migration (ADR-083).",
|
|
15413
|
+
"since": "2026-08-26"
|
|
15414
|
+
},
|
|
15415
|
+
{
|
|
15416
|
+
"kind": "task",
|
|
15417
|
+
"id": "0588",
|
|
15418
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15419
|
+
"severity": "error",
|
|
15420
|
+
"reason": "Task 0685 intentionally removed generated demo specs from the tracked tree, invalidating a historical 0588 point anchor; preserve that evidence pending F91 corpus migration (ADR-083).",
|
|
15421
|
+
"since": "2026-08-26"
|
|
15422
|
+
},
|
|
15423
|
+
{
|
|
15424
|
+
"kind": "task",
|
|
15425
|
+
"id": "0609",
|
|
15426
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15427
|
+
"severity": "error",
|
|
15428
|
+
"reason": "Task 0685 intentionally evolved the agent-wait surface and shifted 0609's historical point anchor; preserve that evidence pending F91 corpus migration (ADR-083).",
|
|
15429
|
+
"since": "2026-08-26"
|
|
15430
|
+
},
|
|
15431
|
+
{
|
|
15432
|
+
"kind": "task",
|
|
15433
|
+
"id": "0631",
|
|
15434
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15435
|
+
"severity": "error",
|
|
15436
|
+
"reason": "The reserved 0685 DDL shifted migration-source line windows and exposed closed-task matcher residue; preserve historical citations pending F91 (ADR-083).",
|
|
15437
|
+
"since": "2026-08-26"
|
|
15438
|
+
},
|
|
15439
|
+
{
|
|
15440
|
+
"kind": "task",
|
|
15441
|
+
"id": "0639",
|
|
15442
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15443
|
+
"severity": "error",
|
|
15444
|
+
"reason": "Current config-source line shifts exposed another closed-task point-window mismatch; preserve the historical citation pending F91 (ADR-083).",
|
|
15445
|
+
"since": "2026-08-26"
|
|
15446
|
+
},
|
|
15447
|
+
{
|
|
15448
|
+
"kind": "task",
|
|
15449
|
+
"id": "0645",
|
|
15450
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15451
|
+
"severity": "error",
|
|
15452
|
+
"reason": "Current web-source line shifts exposed another closed-task point-window mismatch; preserve the historical citation pending F91 (ADR-083).",
|
|
15453
|
+
"since": "2026-08-26"
|
|
15454
|
+
},
|
|
15455
|
+
{
|
|
15456
|
+
"kind": "task",
|
|
15457
|
+
"id": "0655",
|
|
15458
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15459
|
+
"severity": "error",
|
|
15460
|
+
"reason": "Current web-source line shifts exposed another closed-task point-window mismatch; preserve the historical citation pending F91 (ADR-083).",
|
|
15461
|
+
"since": "2026-08-26"
|
|
15462
|
+
},
|
|
15463
|
+
{
|
|
15464
|
+
"kind": "task",
|
|
15465
|
+
"id": "0665",
|
|
15466
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15467
|
+
"severity": "error",
|
|
15468
|
+
"reason": "Current workflow-source line shifts exposed another closed-task point-window mismatch; preserve the historical citation pending F91 (ADR-083).",
|
|
15469
|
+
"since": "2026-08-26"
|
|
15470
|
+
},
|
|
15471
|
+
{
|
|
15472
|
+
"kind": "task",
|
|
15473
|
+
"id": "0666",
|
|
15474
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15475
|
+
"severity": "error",
|
|
15476
|
+
"reason": "Current agent-source line shifts exposed another closed-task point-window mismatch; preserve the historical citation pending F91 (ADR-083).",
|
|
15477
|
+
"since": "2026-08-26"
|
|
15478
|
+
},
|
|
15479
|
+
{
|
|
15480
|
+
"kind": "task",
|
|
15481
|
+
"id": "0667",
|
|
15482
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15483
|
+
"severity": "error",
|
|
15484
|
+
"reason": "Current workflow-source line shifts exposed another closed-task point-window mismatch; preserve the historical citation pending F91 (ADR-083).",
|
|
15485
|
+
"since": "2026-08-26"
|
|
15486
|
+
},
|
|
15487
|
+
{
|
|
15488
|
+
"kind": "task",
|
|
15489
|
+
"id": "0669",
|
|
15490
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15491
|
+
"severity": "error",
|
|
15492
|
+
"reason": "Current history-anatomy source/test line shifts exposed closed-task point-window residue; preserve historical citations pending F91 (ADR-083).",
|
|
15493
|
+
"since": "2026-08-26"
|
|
15494
|
+
},
|
|
15495
|
+
{
|
|
15496
|
+
"kind": "task",
|
|
15497
|
+
"id": "0670",
|
|
15498
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15499
|
+
"severity": "error",
|
|
15500
|
+
"reason": "Current ADR line shifts exposed another closed-task point-window mismatch; preserve the historical citation pending F91 (ADR-083).",
|
|
15501
|
+
"since": "2026-08-26"
|
|
15502
|
+
},
|
|
15503
|
+
{
|
|
15504
|
+
"kind": "task",
|
|
15505
|
+
"id": "0674",
|
|
15506
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15507
|
+
"severity": "error",
|
|
15508
|
+
"reason": "Current history-anatomy source line shifts exposed another closed-task point-window mismatch; preserve the historical citation pending F91 (ADR-083).",
|
|
15509
|
+
"since": "2026-08-26"
|
|
15510
|
+
},
|
|
15511
|
+
{
|
|
15512
|
+
"kind": "task",
|
|
15513
|
+
"id": "0676",
|
|
15514
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15515
|
+
"severity": "error",
|
|
15516
|
+
"reason": "Current history-anatomy source/test line shifts exposed closed-task point-window residue; preserve historical citations pending F91 (ADR-083).",
|
|
15517
|
+
"since": "2026-08-26"
|
|
15518
|
+
},
|
|
15519
|
+
{
|
|
15520
|
+
"kind": "task",
|
|
15521
|
+
"id": "0680",
|
|
15522
|
+
"code": "L4.anchor-subject-mismatch",
|
|
15523
|
+
"severity": "error",
|
|
15524
|
+
"reason": "Current history-anatomy source/test line shifts exposed closed-task point-window residue; preserve historical citations pending F91 (ADR-083).",
|
|
15525
|
+
"since": "2026-08-26"
|
|
15526
|
+
},
|
|
15527
|
+
{
|
|
15528
|
+
"kind": "task",
|
|
15529
|
+
"id": "0685",
|
|
15530
|
+
"code": "L4.missing-feature-id",
|
|
15531
|
+
"severity": "warning",
|
|
15532
|
+
"reason": "Standalone operator-design task completed with a canonical PASS but no parent feature existed; do not invent a post-hoc feature edge solely to silence the advisory.",
|
|
15533
|
+
"since": "2026-08-26"
|
|
15342
15534
|
}
|
|
15343
15535
|
]
|
|
15344
15536
|
}
|
|
@@ -31,6 +31,10 @@
|
|
|
31
31
|
# date — YYYY-MM-DD for --date (daily); empty for ad-hoc
|
|
32
32
|
# since — inclusive ISO lower bound (ad-hoc; also normalizes daily via the DST-aware rule)
|
|
33
33
|
# until — inclusive ISO upper bound (ad-hoc)
|
|
34
|
+
# baselineSince — declared home for the baseline-leg lower bound the analyze stage references;
|
|
35
|
+
# actual values flow through the run-scoped env file emitted by resolve-paths
|
|
36
|
+
# (0674 R2/R5 — a referenced var must have a declared home, never an implicit one)
|
|
37
|
+
# baselineUntil — baseline-leg upper bound, same contract as baselineSince
|
|
34
38
|
# focus — ad-hoc focus string (required in ad-hoc mode, rejected in daily)
|
|
35
39
|
# recompute — "true" forces the full analyze/render/enrich/validate path (cache disposition
|
|
36
40
|
# forced-recompute)
|
|
@@ -57,10 +61,14 @@ vars:
|
|
|
57
61
|
date: ""
|
|
58
62
|
since: ""
|
|
59
63
|
until: ""
|
|
64
|
+
baselineSince: ""
|
|
65
|
+
baselineUntil: ""
|
|
60
66
|
focus: ""
|
|
61
67
|
recompute: "false"
|
|
62
68
|
output: ""
|
|
63
|
-
|
|
69
|
+
# 0676 R5: omp went quota-dead (HTTP 429) in the 2026-08-25 dogfood. The literal names a
|
|
70
|
+
# currently-reachable executor; `agent.default` in config still overrides via the precedence chain.
|
|
71
|
+
agent: "claude"
|
|
64
72
|
spurBin: "spur"
|
|
65
73
|
__runId: ""
|
|
66
74
|
stepTimeoutMs: "1800000"
|
|
@@ -110,7 +118,8 @@ states:
|
|
|
110
118
|
command: >-
|
|
111
119
|
h=$(superskill script path sp history-anatomy-cache.mjs);
|
|
112
120
|
node "$h" paths --helper "$h" --report-dir "$reportDir" --date "$date"
|
|
113
|
-
--output "$output" --
|
|
121
|
+
--output "$output" --mode "$mode" --since "$since" --until "$until"
|
|
122
|
+
--out .spur/run/$__runId-paths.txt
|
|
114
123
|
|
|
115
124
|
- id: analyze
|
|
116
125
|
description: >
|
|
@@ -122,11 +131,13 @@ states:
|
|
|
122
131
|
options:
|
|
123
132
|
command: >-
|
|
124
133
|
mkdir -p .spur/run;
|
|
125
|
-
|
|
134
|
+
. .spur/run/$__runId-paths.env;
|
|
135
|
+
$spurBin history analyze --out .spur/run/$__runId-history-anatomy-current.json --since "$HA_SINCE" --until "$HA_UNTIL" --json
|
|
126
136
|
- kind: shell
|
|
127
137
|
options:
|
|
128
138
|
command: >-
|
|
129
|
-
|
|
139
|
+
. .spur/run/$__runId-paths.env;
|
|
140
|
+
$spurBin history analyze --out .spur/run/$__runId-history-anatomy-baseline.json --since "$HA_BASELINE_SINCE" --until "$HA_BASELINE_UNTIL" --json 2>/dev/null || true
|
|
130
141
|
|
|
131
142
|
- id: cache-probe
|
|
132
143
|
description: >
|
|
@@ -138,7 +149,7 @@ states:
|
|
|
138
149
|
- kind: shell
|
|
139
150
|
options:
|
|
140
151
|
command: >-
|
|
141
|
-
. .spur/run/$__runId-paths.
|
|
152
|
+
. .spur/run/$__runId-paths.txt;
|
|
142
153
|
node "$HA_HELPER" probe --artifact .spur/run/$__runId-history-anatomy-current.json
|
|
143
154
|
--baseline .spur/run/$__runId-history-anatomy-baseline.json --target "$HA_TARGET"
|
|
144
155
|
--mode "$mode" --date "$HA_DATE" --recompute "$recompute" --executor "$agent"
|
|
@@ -161,8 +172,14 @@ states:
|
|
|
161
172
|
- id: enrich
|
|
162
173
|
description: >
|
|
163
174
|
Model enrichment via the skill operation sp:history-anatomy enrich (0658 operations.md).
|
|
164
|
-
Consumes the two artifacts; authors the model half of the report.
|
|
175
|
+
Consumes the two artifacts; authors the model half of the report. A porcelain baseline
|
|
176
|
+
is captured before dispatch and asserted after: any working-tree file created outside the
|
|
177
|
+
declared output fails the run (0676 R3).
|
|
165
178
|
onEnter:
|
|
179
|
+
- kind: shell
|
|
180
|
+
options:
|
|
181
|
+
command: >-
|
|
182
|
+
git status --porcelain > .spur/run/$__runId-baseline-enrich.txt || true
|
|
166
183
|
- kind: agent.run
|
|
167
184
|
options:
|
|
168
185
|
agent: ${vars.agent}
|
|
@@ -171,10 +188,14 @@ states:
|
|
|
171
188
|
role: reviewer
|
|
172
189
|
expectFile: .spur/run/${vars.__runId}-candidate.md
|
|
173
190
|
timeoutMs: ${vars.stepTimeoutMs}
|
|
191
|
+
- kind: shell
|
|
192
|
+
options:
|
|
193
|
+
command: >-
|
|
194
|
+
node "$(superskill script path sp history-anatomy-cache.mjs)" assert-clean --baseline .spur/run/$__runId-baseline-enrich.txt --expect .spur/run/$__runId-candidate.md
|
|
174
195
|
|
|
175
196
|
- id: structure-gate
|
|
176
197
|
description: >
|
|
177
|
-
Deterministic structure gate via the helper (0659). Asserts the
|
|
198
|
+
Deterministic structure gate via the helper (0659). Asserts the twelve sections in order,
|
|
178
199
|
per-finding fields, no placeholders, evidence anchors. Not reachable on the hit path from
|
|
179
200
|
enrich — always gated before validation.
|
|
180
201
|
onEnter:
|
|
@@ -187,8 +208,12 @@ states:
|
|
|
187
208
|
- id: validate
|
|
188
209
|
description: >
|
|
189
210
|
Independent evidence validation via the skill operation sp:history-anatomy validate.
|
|
190
|
-
Publication is reachable only from a PASS here.
|
|
211
|
+
Publication is reachable only from a PASS here. Same undeclared-write assertion as enrich (0676 R3).
|
|
191
212
|
onEnter:
|
|
213
|
+
- kind: shell
|
|
214
|
+
options:
|
|
215
|
+
command: >-
|
|
216
|
+
git status --porcelain > .spur/run/$__runId-baseline-validate.txt || true
|
|
192
217
|
- kind: agent.run
|
|
193
218
|
options:
|
|
194
219
|
agent: ${vars.agent}
|
|
@@ -197,6 +222,10 @@ states:
|
|
|
197
222
|
role: reviewer
|
|
198
223
|
expectFile: .spur/run/${vars.__runId}-validation.txt
|
|
199
224
|
timeoutMs: ${vars.stepTimeoutMs}
|
|
225
|
+
- kind: shell
|
|
226
|
+
options:
|
|
227
|
+
command: >-
|
|
228
|
+
node "$(superskill script path sp history-anatomy-cache.mjs)" assert-clean --baseline .spur/run/$__runId-baseline-validate.txt --expect .spur/run/$__runId-validation.txt
|
|
200
229
|
|
|
201
230
|
- id: correct
|
|
202
231
|
description: >
|
|
@@ -219,7 +248,7 @@ states:
|
|
|
219
248
|
- kind: shell
|
|
220
249
|
options:
|
|
221
250
|
command: >-
|
|
222
|
-
. .spur/run/$__runId-paths.
|
|
251
|
+
. .spur/run/$__runId-paths.txt;
|
|
223
252
|
node "$HA_HELPER" refresh --report "$HA_TARGET"
|
|
224
253
|
--out .spur/run/$__runId-publishable.md --disposition hit
|
|
225
254
|
|
|
@@ -233,7 +262,7 @@ states:
|
|
|
233
262
|
- kind: shell
|
|
234
263
|
options:
|
|
235
264
|
command: >-
|
|
236
|
-
. .spur/run/$__runId-paths.
|
|
265
|
+
. .spur/run/$__runId-paths.txt;
|
|
237
266
|
node "$HA_HELPER" stamp --candidate .spur/run/$__runId-candidate.md
|
|
238
267
|
--provenance .spur/run/$__runId-provenance.json
|
|
239
268
|
--out .spur/run/$__runId-publishable.md
|
|
@@ -247,7 +276,7 @@ states:
|
|
|
247
276
|
- kind: shell
|
|
248
277
|
options:
|
|
249
278
|
command: >-
|
|
250
|
-
. .spur/run/$__runId-paths.
|
|
279
|
+
. .spur/run/$__runId-paths.txt;
|
|
251
280
|
mkdir -p "$(dirname "$HA_TARGET")";
|
|
252
281
|
node "$HA_HELPER" publish .spur/run/$__runId-publishable.md "$HA_TARGET"
|
|
253
282
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/spur",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.63",
|
|
4
4
|
"description": "Spur CLI — local-first harness for mainstream coding agents: constraint checking, workflow orchestration, agent health, and history analytics. Bun-native; exposes the `spur` command.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"spur",
|
|
@@ -53,14 +53,14 @@
|
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@commander-js/extra-typings": "^14.0.0",
|
|
56
|
-
"@gobing-ai/ts-db": "^0.4.
|
|
57
|
-
"@gobing-ai/ts-ai-runner": "^0.4.
|
|
58
|
-
"@gobing-ai/ts-dual-workflow-engine": "^0.4.
|
|
59
|
-
"@gobing-ai/ts-infra": "^0.4.
|
|
60
|
-
"@gobing-ai/ts-llm-jsonl-importer": "^0.4.
|
|
61
|
-
"@gobing-ai/ts-rule-engine": "^0.4.
|
|
62
|
-
"@gobing-ai/ts-runtime": "^0.4.
|
|
63
|
-
"@gobing-ai/ts-utils": "^0.4.
|
|
56
|
+
"@gobing-ai/ts-db": "^0.4.43",
|
|
57
|
+
"@gobing-ai/ts-ai-runner": "^0.4.43",
|
|
58
|
+
"@gobing-ai/ts-dual-workflow-engine": "^0.4.43",
|
|
59
|
+
"@gobing-ai/ts-infra": "^0.4.43",
|
|
60
|
+
"@gobing-ai/ts-llm-jsonl-importer": "^0.4.43",
|
|
61
|
+
"@gobing-ai/ts-rule-engine": "^0.4.43",
|
|
62
|
+
"@gobing-ai/ts-runtime": "^0.4.43",
|
|
63
|
+
"@gobing-ai/ts-utils": "^0.4.43",
|
|
64
64
|
"@types/bun": "1.3.14",
|
|
65
65
|
"@types/figlet": "^1.7.0",
|
|
66
66
|
"@types/node-notifier": "8.0.5",
|
package/plugins/sp/README.md
CHANGED
|
@@ -128,7 +128,7 @@ list this README is checked against.
|
|
|
128
128
|
| `dev-debug` | Systematic debugging protocol — reproduce, isolate, diagnose root cause, apply minimal fix, and verify with regression tests |
|
|
129
129
|
| `dev-daily` | Generate a daily summary report from agent usage data, git history, and notes |
|
|
130
130
|
| `dev-dogfood` | Dogfood an agent skill/command/CLI — drive it end-to-end with bounded auto-fix, self-monitor, and emit a comprehensive report |
|
|
131
|
-
| `dev-find-issue` | Generate the daily/ad-hoc history-anatomy diagnostic report over already-imported history — mode contract, closed finding taxonomy,
|
|
131
|
+
| `dev-find-issue` | Generate the daily/ad-hoc history-anatomy diagnostic report over already-imported history — mode contract, closed finding taxonomy, twelve-section report contract, cache branch, atomic publication; forwards to sp:history-anatomy |
|
|
132
132
|
| `dev-find-conflict` | Authority-aware semantic audit across source, task, feature, and project authority files — detect conflicts, resolve claim-specific authority, and route confirmed repairs through owner surfaces |
|
|
133
133
|
| `dev-find-next` | Prompt-first feature frontier prioritizer — ranks the open feature frontier by derived importance/urgency with per-candidate evidence; gates unactionable features; emits tree defects as proposals only |
|
|
134
134
|
| `dev-fixall` | Fix all lint, type, and test errors systematically across the working tree |
|
|
@@ -318,7 +318,7 @@ surface or run one workflow. All skills target the same five core platforms: `cl
|
|
|
318
318
|
| `next-feature` | 1.0 | Prompt-first feature frontier prioritizer — sync-first precondition, B3 actionability gate (cited, never restated), tiered rubric over measured signals, D1–D4 defect proposals conforming to the restructure map schema; backs `/sp:dev-find-next` |
|
|
319
319
|
| `pr-reviewing` | 1.0 | GitHub Codex PR review — PR prepare/reuse, `@codex review` request with per-HEAD dedupe, bounded polling, findings normalization, validated fix + re-review; spine SSOT `pr-review.yaml` + `scripts/pr-reviewing.ts`; backs `/sp:dev-pr-review` |
|
|
320
320
|
| `indexed-context` | 1.0 | Cross-agent project context — anatomy/learnings/pitfalls/buglog/memory in `.spur/context/`; hook-tracked token-ledger; graceful degradation on agents without hooks |
|
|
321
|
-
| `history-anatomy` | 1.0 | Diagnostic interpretation owner over already-imported history — daily/ad-hoc mode contract, closed finding taxonomy,
|
|
321
|
+
| `history-anatomy` | 1.0 | Diagnostic interpretation owner over already-imported history — daily/ad-hoc mode contract, closed finding taxonomy, twelve-section report contract, `enrich`/`validate` rubrics; no workflow launch, no JSONL fallback, no corpus mutation |
|
|
322
322
|
|
|
323
323
|
#### Bounded coexistence and retirement gate — `sp:issue-finding` (HA-S1 0661)
|
|
324
324
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Generate the daily or ad-hoc history-anatomy diagnostic report over already-imported history: the
|
|
2
|
+
description: "Generate the daily or ad-hoc history-anatomy diagnostic report over already-imported history: the twelve-section report contract, closed finding taxonomy, cache branch, bounded correction, and atomic publication. Triggers: find issues, post-mortem, performance analysis, session review, history-anatomy, run the daily report, ad-hoc diagnosis"
|
|
3
3
|
role: reviewer
|
|
4
|
-
argument-hint: "[<focus>] [--mode <daily|ad-hoc>] [--date <YYYY-MM-DD>] [--since <RFC3339>] [--until <RFC3339>] [--recompute] [--agent <
|
|
4
|
+
argument-hint: "[<focus>] [--mode <daily|ad-hoc>] [--date <YYYY-MM-DD>] [--since <RFC3339>] [--until <RFC3339>] [--recompute] [--agent <auto|name>] [--output <path>]"
|
|
5
5
|
allowed-tools: ["Bash", "Read", "Skill"]
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -10,7 +10,7 @@ allowed-tools: ["Bash", "Read", "Skill"]
|
|
|
10
10
|
Wraps the **sp:history-anatomy** skill — the independent owner of diagnostic interpretation over
|
|
11
11
|
already-imported history. The skill resolves the mode contract (daily is the default and uses the
|
|
12
12
|
current local calendar day; ad-hoc requires a focus plus two ordered bounds), owns the report
|
|
13
|
-
contract (
|
|
13
|
+
contract (twelve sections, closed finding taxonomy, evidence rules, recurrence ledger), and
|
|
14
14
|
exposes the `enrich` and `validate` operations the `history-anatomy.yaml` workflow invokes.
|
|
15
15
|
Publication is atomic and gated behind both the deterministic structure gate and independent
|
|
16
16
|
evidence validation. This command never triggers an import.
|
|
@@ -25,7 +25,7 @@ evidence validation. This command never triggers an import.
|
|
|
25
25
|
| `--since` `<RFC3339>` | Inclusive lower bound (ad-hoc; required). | omitted |
|
|
26
26
|
| `--until` `<RFC3339>` | Inclusive upper bound (ad-hoc; required). | omitted |
|
|
27
27
|
| `--recompute` | Force the full analyze/render/enrich/validate path; records disposition forced-recompute. | off |
|
|
28
|
-
| `--agent` `<
|
|
28
|
+
| `--agent` `<auto\|name>` | Execution surface selector. This target is engine-driven (headless): omit resolves through the executor precedence chain to `agent.default`, then the workflow literal. Explicit `--agent inline` is rejected with the stable special error (exit 2). | omitted |
|
|
29
29
|
| `--output` `<path>` | Explicit report output path (ad-hoc; default writes to the run directory). | run dir |
|
|
30
30
|
|
|
31
31
|
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Turn a vague idea into a feature with AC and a decomposed task batch — discovery, idea-eval, feature-create, AC, feature-check, system-design, decompose, batch-create (Design by default), handoff
|
|
3
3
|
role: planner
|
|
4
|
-
argument-hint: "\"<idea>\" [--auto] [--skip-design] [--approve-taste] [--agent <
|
|
4
|
+
argument-hint: "\"<idea>\" [--auto] [--skip-design] [--approve-taste] [--agent <auto|name>]"
|
|
5
5
|
allowed-tools: ["Bash", "Read", "Skill", "AskUserQuestion"]
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -20,7 +20,7 @@ contract below maps to that workflow's transitions.
|
|
|
20
20
|
| `--approve-taste` | With `--auto`: set idea_approved + design_approved so idea-eval / design-approval do not pause. | off |
|
|
21
21
|
| `--idea-approved` | Compatibility alias for idea_approved=true (subset of --approve-taste). | off |
|
|
22
22
|
| `--design-approved` | Compatibility alias for design_approved=true (subset of --approve-taste). | off |
|
|
23
|
-
| `--agent` `<
|
|
23
|
+
| `--agent` `<auto\|name>` | Who runs the model-bearing ideation. The pipeline's `agent.run` stages are headless — they always dispatch a subprocess, so `--agent inline` is rejected there with the stable special error (exit 2). Use `omit` (resolves to `agent.default`), `auto` (tier-resolves an executor), or a name (pins that executor). | agent.default |
|
|
24
24
|
|
|
25
25
|
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
26
26
|
|
|
@@ -31,7 +31,7 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
31
31
|
[--auto] # skip objective HITL only (feature-check, batch-create)
|
|
32
32
|
[--skip-design] # design package off (system-design + task Design)
|
|
33
33
|
[--approve-taste] # with --auto: skip idea-eval + design-approval pauses
|
|
34
|
-
[--agent <
|
|
34
|
+
[--agent <auto|name>] # who runs the model-bearing ideation (default: agent.default)
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
There is **no** `--design` force flag. Design is default-on; only `--skip-design` opts out.
|
package/plugins/sp/plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.63",
|
|
4
4
|
"description": "Spur — a local-first harness engineering toolkit that wraps mainstream coding agents with constraint checking, workflow orchestration, and history analytics.",
|
|
5
5
|
"extensions": {
|
|
6
6
|
"pi": ["./hooks/pi/guard-extension.ts"]
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Environment-improvement lens
|
|
2
|
+
|
|
3
|
+
One mapping turns retrospective "environment" observations into concrete surface improvements
|
|
4
|
+
across the two live report owners: `sp:dogfood-testing` report §6 and `sp:history-anatomy`
|
|
5
|
+
sections 4/9. (The inspiration is an out-of-tree retrospective practice; it is deliberately not
|
|
6
|
+
shipped or invoked by anything in this plugin.)
|
|
7
|
+
|
|
8
|
+
**This file is the single source of truth for the seven categories and the placement rule.**
|
|
9
|
+
Neither report projection restates the table below; each links here as its category table
|
|
10
|
+
(task 0686 / feature I9; accepted design `docs/design/environment-improvement-lens.md`,
|
|
11
|
+
ADR-084/085). There is deliberately no `/sp:dev-retro` command, no CLI change, and no protocol
|
|
12
|
+
bump behind this mapping.
|
|
13
|
+
|
|
14
|
+
## Canonical categories and projections
|
|
15
|
+
|
|
16
|
+
Exactly one file (this one) enumerates these seven names. Encode them **only** in the projected
|
|
17
|
+
field named by each column — never as a history-anatomy `category` (that vocabulary is frozen at
|
|
18
|
+
`reliability | repetition | workflow | performance | coverage | telemetry | positive`).
|
|
19
|
+
|
|
20
|
+
| Retro category | History-anatomy `category` (closed) | History-anatomy `<signal>` | Dogfood class |
|
|
21
|
+
| --- | --- | --- | --- |
|
|
22
|
+
| navigation | `workflow` | `navigation` | `environment` (P3–P2) |
|
|
23
|
+
| automated checks | `reliability` | `automated-checks` | `environment`; action is a gate, not prose |
|
|
24
|
+
| coding standards | `workflow` | `coding-standards` | `environment`; owner surface is review, never implementer |
|
|
25
|
+
| AGENTS.md placement | `workflow` | `agents-md-placement` | `environment`; action = move to skill/reference/check |
|
|
26
|
+
| tool economy | `performance` | `tool-economy` | existing cache-health P3; `environment` when the tool itself is the waste |
|
|
27
|
+
| no-ops | `workflow` | `no-ops` | `environment`; `file:line` of the dead instruction |
|
|
28
|
+
| information access | `telemetry` | `information-access` | existing chained-step `~unknown` P3; `environment` when access is missing |
|
|
29
|
+
|
|
30
|
+
Dogfood class tags are optional and closed: `environment` | `testee` | `waste`. Grammar,
|
|
31
|
+
classification table, and fix-mode boundaries live in the owning projection:
|
|
32
|
+
[`report-template.md` §6](../skills/dogfood-testing/references/report-template.md).
|
|
33
|
+
History-anatomy key grammar and the structure gate live in
|
|
34
|
+
[`report-contract.md`](../skills/history-anatomy/references/report-contract.md).
|
|
35
|
+
|
|
36
|
+
## Placement rule
|
|
37
|
+
|
|
38
|
+
When an observation lands, choose a home in this order — never a new sentence in an
|
|
39
|
+
always-loaded steering file when a lower step fits:
|
|
40
|
+
|
|
41
|
+
1. **Automatable → propose a check.** Anything a linter, typechecker, test, script-contract
|
|
42
|
+
check, or filesystem linter could catch becomes a new-or-tighter automated gate
|
|
43
|
+
(`spur-check`, biome rules, bun tests), not a reminder sentence.
|
|
44
|
+
2. **Coding standard → the review path.** The owner surface is `sp:code-verification`,
|
|
45
|
+
`sp:code-review`, or pipeline review — never the implementer skill.
|
|
46
|
+
3. **Always-loaded steering (`AGENTS.md` / `CLAUDE.md`) → navigation pointer only.** Detail
|
|
47
|
+
moves to a skill, reference, or check; the steering file keeps at most a pointer.
|
|
48
|
+
|
|
49
|
+
## Present-don't-apply
|
|
50
|
+
|
|
51
|
+
Findings projected through this lens are **proposals**, in either owner's report. No projection
|
|
52
|
+
applies a change, produces a diff, or claims to have executed anything. Dogfood bounded fix-mode
|
|
53
|
+
may repair a failed `testee`-class step, but never mutates a finding tagged `environment`;
|
|
54
|
+
class — not the cited file path — decides whether bounded fix may mutate. History-anatomy stays
|
|
55
|
+
report-only. Accepted proposals reach the tree through operator-approved surfaces (`spur task
|
|
56
|
+
create` handoff, manual edit), which remain explicit human gates.
|
|
57
|
+
|
|
58
|
+
## Keep / drop boundary
|
|
59
|
+
|
|
60
|
+
Kept here because both live reports consume it: the seven names above, their projections, and
|
|
61
|
+
this placement rule. Dropped (each needs its own operator decision): installing or invoking the
|
|
62
|
+
out-of-tree retro practice, a standalone retro command, `CODING_STANDARDS.md` as a file, runtime
|
|
63
|
+
parsing of this markdown by validators, automatic remediation of environment findings, and
|
|
64
|
+
folding the lens into wrap-up learnings or `.spur/context/` memory.
|
|
65
|
+
`plugins/sp/skills/issue-finding/` remains the legacy coexistence non-target — it gains nothing
|
|
66
|
+
from this mapping.
|