@gobing-ai/spur 0.3.57 → 0.3.58
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 +264 -56
- package/config/workflow-composition-baseline.json +1 -1
- package/config/workflows/wrapup-pipeline.yaml +31 -1
- package/package.json +9 -9
- package/plugins/README.md +1 -1
- package/plugins/sp/README.md +1 -1
- package/plugins/sp/agents/expert-spur.md +1 -1
- package/plugins/sp/commands/dev-feature-change.md +2 -2
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +2 -2
- package/plugins/sp/skills/spur-cli/references/features/roadmap-priority.md +1 -1
- package/plugins/sp/skills/spur-cli/references/features/verbs.md +1 -1
- package/plugins/sp/skills/spur-cli/references/features.md +5 -2
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +1 -1
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +1 -1
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +1 -1
- package/spur.js +3523 -248
- package/web/_astro/BoardApp.CrusGeQ4.js +1 -0
- package/web/_astro/BoardApp.P8SRAD5Q.js +179 -0
- package/web/_astro/{TaskDetail.DN_RxS-2.js → TaskDetail.DHjEt5vl.js} +1 -1
- package/web/_astro/{arc.CldTHRg-.js → arc.XgRC1Ij_.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.DQ4T9oeU.js → architectureDiagram-3BPJPVTR.DOZWrfHc.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.CGDaXH8J.js → blockDiagram-GPEHLZMM.ClQnCGf_.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.Cqsc2iub.js → c4Diagram-AAUBKEIU.CKCtUD0Y.js} +1 -1
- package/web/_astro/channel.CmK546kO.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.CQSKsRmq.js → chunk-2J33WTMH.c7J8OHq5.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.Pv1HCtp8.js → chunk-4BX2VUAB.C-A1Dv27.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.-9MseOIk.js → chunk-55IACEB6.C4kGGALB.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.M3OI1DF7.js → chunk-727SXJPM.Bith2NHt.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.NfHka5Ca.js → chunk-AQP2D5EJ.qeSXhsVY.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.B2suYe3s.js → chunk-FMBD7UC4.DdQQnTAy.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.BfJ7aucP.js → chunk-ND2GUHAM.BZYQVeZd.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN._582hZVc.js → chunk-QZHKN3VN.BiUWwHaV.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK._tttU_jk.js → classDiagram-4FO5ZUOK.OGRhcldh.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2._tttU_jk.js → classDiagram-v2-Q7XG4LA2.OGRhcldh.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.C4rVATLQ.js → cose-bilkent-S5V4N54A.DxYklM_j.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.8BLRi7f9.js → dagre-BM42HDAG.BSb2dEbo.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.D6lwUZos.js → diagram-2AECGRRQ.mOrItPK2.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.Cl_rMiVT.js → diagram-5GNKFQAL.C99r7J3C.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.DhMExHLp.js → diagram-KO2AKTUF.BKbnisJO.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.3OAxzH_o.js → diagram-LMA3HP47.D8FJGo4V.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.Uh9RLucG.js → diagram-OG6HWLK6.DVBs7n4Q.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.izzElG0c.js → erDiagram-TEJ5UH35.CddMTl4l.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.BlGwp5qM.js → flowDiagram-I6XJVG4X.B7WclnjQ.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.je7Vf8dN.js → ganttDiagram-6RSMTGT7.CRh7ggvz.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.DNk0Ycop.js → gitGraphDiagram-PVQCEYII.du-L7V8A.js} +1 -1
- package/web/_astro/index.B4x8fe52.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.K2HhGyWH.js → infoDiagram-5YYISTIA.CClGl9Px.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.BbbOW4IN.js → ishikawaDiagram-YF4QCWOH.BuTETIPz.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.B1UaZKqN.js → journeyDiagram-JHISSGLW.Cyg1zCiE.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.9tsw5QFd.js → kanban-definition-UN3LZRKU.aH8eDXwX.js} +1 -1
- package/web/_astro/{linear.I9dvtu-j.js → linear.paE_RY_i.js} +1 -1
- package/web/_astro/{mermaid.core.5bKJsMgf.js → mermaid.core.BhdKkI85.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.BC5MqSn6.js → mindmap-definition-RKZ34NQL.aZNfv8Nx.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.B8GIMyxD.js → pieDiagram-4H26LBE5.5psni0hC.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.K_aZSM_u.js → quadrantDiagram-W4KKPZXB.DcGPGrFd.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.B_V5kzfT.js → requirementDiagram-4Y6WPE33.BwPD2lzi.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.DyV2quLS.js → sankeyDiagram-5OEKKPKP.B3jGVk0l.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.BlKvPnBv.js → sequenceDiagram-3UESZ5HK.BdWsx3LW.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.C1lYUMdS.js → stateDiagram-AJRCARHV.DRpG4ClZ.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.DJWjr3QV.js → stateDiagram-v2-BHNVJYJU.Su0ML9Wo.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.CYYiXVlv.js → timeline-definition-PNZ67QCA.Cg_Uv8A5.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.zYjQKa_S.js → vennDiagram-CIIHVFJN.DVouKT4b.js} +1 -1
- package/web/_astro/{wardley-L42UT6IY.BGrWTY3D.js → wardley-L42UT6IY.CexIVQli.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.CkXxtcI1.js → wardleyDiagram-YWT4CUSO.ChSAzcvx.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.BhKH3KG3.js → xychartDiagram-2RQKCTM6.CN-Yp50J.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.DCLSB3Zs.js +0 -179
- package/web/_astro/BoardApp.Dx5gzAhb.js +0 -1
- package/web/_astro/channel.CrBJYpxo.js +0 -1
- package/web/_astro/index.V6Q7nhed.css +0 -1
|
@@ -33,6 +33,14 @@
|
|
|
33
33
|
"reason": "Linked task lacks a PASS verdict with MET requirement — verification pending, see note § L4.scenario-unverified.",
|
|
34
34
|
"since": "2026-08-17"
|
|
35
35
|
},
|
|
36
|
+
{
|
|
37
|
+
"kind": "feature",
|
|
38
|
+
"id": "D",
|
|
39
|
+
"code": "L4.dogfood-missing",
|
|
40
|
+
"severity": "warning",
|
|
41
|
+
"reason": "feature touches workflow infra but predates the dogfood artifact requirement; artifact not backfilled",
|
|
42
|
+
"since": "2026-08-21"
|
|
43
|
+
},
|
|
36
44
|
{
|
|
37
45
|
"kind": "feature",
|
|
38
46
|
"id": "D3",
|
|
@@ -41,6 +49,14 @@
|
|
|
41
49
|
"reason": "feature touches workflow infra but predates the dogfood artifact requirement; artifact not backfilled",
|
|
42
50
|
"since": "2026-08-21"
|
|
43
51
|
},
|
|
52
|
+
{
|
|
53
|
+
"kind": "feature",
|
|
54
|
+
"id": "E",
|
|
55
|
+
"code": "L4.dogfood-missing",
|
|
56
|
+
"severity": "warning",
|
|
57
|
+
"reason": "feature touches workflow infra but predates the dogfood artifact requirement; artifact not backfilled",
|
|
58
|
+
"since": "2026-08-21"
|
|
59
|
+
},
|
|
44
60
|
{
|
|
45
61
|
"kind": "feature",
|
|
46
62
|
"id": "E2",
|
|
@@ -81,6 +97,14 @@
|
|
|
81
97
|
"reason": "Accepted backlog: L4.orphan-scenarios",
|
|
82
98
|
"since": "2026-08-19"
|
|
83
99
|
},
|
|
100
|
+
{
|
|
101
|
+
"kind": "feature",
|
|
102
|
+
"id": "E9",
|
|
103
|
+
"code": "L4.scenario-unverified",
|
|
104
|
+
"severity": "warning",
|
|
105
|
+
"reason": "Accepted clean-checkout limitation: E9 PASS verdict artifacts are runtime-only under .spur/run; tracked task Testing sections retain the verification evidence.",
|
|
106
|
+
"since": "2026-08-22"
|
|
107
|
+
},
|
|
84
108
|
{
|
|
85
109
|
"kind": "feature",
|
|
86
110
|
"id": "F1",
|
|
@@ -231,6 +255,14 @@
|
|
|
231
255
|
"reason": "Linked task lacks a PASS verdict with MET requirement — verification pending, see note § L4.scenario-unverified.",
|
|
232
256
|
"since": "2026-08-17"
|
|
233
257
|
},
|
|
258
|
+
{
|
|
259
|
+
"kind": "feature",
|
|
260
|
+
"id": "H",
|
|
261
|
+
"code": "L4.dogfood-missing",
|
|
262
|
+
"severity": "warning",
|
|
263
|
+
"reason": "feature touches workflow infra but predates the dogfood artifact requirement; artifact not backfilled",
|
|
264
|
+
"since": "2026-08-21"
|
|
265
|
+
},
|
|
234
266
|
{
|
|
235
267
|
"kind": "feature",
|
|
236
268
|
"id": "H1",
|
|
@@ -3423,6 +3455,14 @@
|
|
|
3423
3455
|
"reason": "Closed before the numeric coverage-claim requirement existed — see note § L3.testing-coverage.",
|
|
3424
3456
|
"since": "2026-08-17"
|
|
3425
3457
|
},
|
|
3458
|
+
{
|
|
3459
|
+
"kind": "task",
|
|
3460
|
+
"id": "0067",
|
|
3461
|
+
"code": "L4.anchor-subject-mismatch",
|
|
3462
|
+
"severity": "error",
|
|
3463
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
3464
|
+
"since": "2026-08-21"
|
|
3465
|
+
},
|
|
3426
3466
|
{
|
|
3427
3467
|
"kind": "task",
|
|
3428
3468
|
"id": "0068",
|
|
@@ -5016,6 +5056,14 @@
|
|
|
5016
5056
|
"reason": "Done tasks carry unflipped planning checkboxes; flipping post-close rewrites history — remediation is separate work, see note § L3.unchecked-checklist.",
|
|
5017
5057
|
"since": "2026-08-17"
|
|
5018
5058
|
},
|
|
5059
|
+
{
|
|
5060
|
+
"kind": "task",
|
|
5061
|
+
"id": "0107",
|
|
5062
|
+
"code": "L4.anchor-subject-mismatch",
|
|
5063
|
+
"severity": "error",
|
|
5064
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
5065
|
+
"since": "2026-08-21"
|
|
5066
|
+
},
|
|
5019
5067
|
{
|
|
5020
5068
|
"kind": "task",
|
|
5021
5069
|
"id": "0108",
|
|
@@ -5039,6 +5087,14 @@
|
|
|
5039
5087
|
"reason": "Done tasks carry unflipped planning checkboxes; flipping post-close rewrites history — remediation is separate work, see note § L3.unchecked-checklist.",
|
|
5040
5088
|
"since": "2026-08-17"
|
|
5041
5089
|
},
|
|
5090
|
+
{
|
|
5091
|
+
"kind": "task",
|
|
5092
|
+
"id": "0108",
|
|
5093
|
+
"code": "L4.anchor-subject-mismatch",
|
|
5094
|
+
"severity": "error",
|
|
5095
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
5096
|
+
"since": "2026-08-21"
|
|
5097
|
+
},
|
|
5042
5098
|
{
|
|
5043
5099
|
"kind": "task",
|
|
5044
5100
|
"id": "0109",
|
|
@@ -5669,14 +5725,6 @@
|
|
|
5669
5725
|
"reason": "Task predates DD-07 feature_id requirement or was authored unlinked — see note § L4.missing-feature-id.",
|
|
5670
5726
|
"since": "2026-08-17"
|
|
5671
5727
|
},
|
|
5672
|
-
{
|
|
5673
|
-
"kind": "task",
|
|
5674
|
-
"id": "0132",
|
|
5675
|
-
"code": "L4.stale-line-anchor",
|
|
5676
|
-
"severity": "warning",
|
|
5677
|
-
"reason": "Anchor written with an incomplete path; qualification migration (task 0583) owns the mechanical repair — see note § L4.stale-line-anchor.",
|
|
5678
|
-
"since": "2026-08-17"
|
|
5679
|
-
},
|
|
5680
5728
|
{
|
|
5681
5729
|
"kind": "task",
|
|
5682
5730
|
"id": "0133",
|
|
@@ -6127,6 +6175,14 @@
|
|
|
6127
6175
|
"reason": "Gate postdates the task: Review carries the older prose-verdict form — see note § L3.review-priority-table.",
|
|
6128
6176
|
"since": "2026-08-17"
|
|
6129
6177
|
},
|
|
6178
|
+
{
|
|
6179
|
+
"kind": "task",
|
|
6180
|
+
"id": "0148",
|
|
6181
|
+
"code": "L4.anchor-subject-mismatch",
|
|
6182
|
+
"severity": "error",
|
|
6183
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
6184
|
+
"since": "2026-08-21"
|
|
6185
|
+
},
|
|
6130
6186
|
{
|
|
6131
6187
|
"kind": "task",
|
|
6132
6188
|
"id": "0148",
|
|
@@ -6358,6 +6414,14 @@
|
|
|
6358
6414
|
"reason": "Done tasks carry unflipped planning checkboxes; flipping post-close rewrites history — remediation is separate work, see note § L3.unchecked-checklist.",
|
|
6359
6415
|
"since": "2026-08-17"
|
|
6360
6416
|
},
|
|
6417
|
+
{
|
|
6418
|
+
"kind": "task",
|
|
6419
|
+
"id": "0157",
|
|
6420
|
+
"code": "L4.anchor-subject-mismatch",
|
|
6421
|
+
"severity": "error",
|
|
6422
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
6423
|
+
"since": "2026-08-21"
|
|
6424
|
+
},
|
|
6361
6425
|
{
|
|
6362
6426
|
"kind": "task",
|
|
6363
6427
|
"id": "0157",
|
|
@@ -6438,6 +6502,14 @@
|
|
|
6438
6502
|
"reason": "Done tasks carry unflipped planning checkboxes; flipping post-close rewrites history — remediation is separate work, see note § L3.unchecked-checklist.",
|
|
6439
6503
|
"since": "2026-08-17"
|
|
6440
6504
|
},
|
|
6505
|
+
{
|
|
6506
|
+
"kind": "task",
|
|
6507
|
+
"id": "0160",
|
|
6508
|
+
"code": "L4.anchor-subject-mismatch",
|
|
6509
|
+
"severity": "error",
|
|
6510
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
6511
|
+
"since": "2026-08-21"
|
|
6512
|
+
},
|
|
6441
6513
|
{
|
|
6442
6514
|
"kind": "task",
|
|
6443
6515
|
"id": "0160",
|
|
@@ -6542,6 +6614,14 @@
|
|
|
6542
6614
|
"reason": "Accumulated anchor drift, surfaced for the first time by task 0583's content-matching rule. The cited lines resolve and are in bounds, but no longer name the requirement row's subject — a later task edited the file and pushed the anchor onto unrelated code. Spot-verified true positives (an import block cited for a component's hooks; a severity-parsing block cited for `runL4Rollup`). Repairing 1,300+ historical citations is its own campaign; the rule ships at warning severity until then (0583 R6).",
|
|
6543
6615
|
"since": "2026-08-18"
|
|
6544
6616
|
},
|
|
6617
|
+
{
|
|
6618
|
+
"kind": "task",
|
|
6619
|
+
"id": "0164",
|
|
6620
|
+
"code": "L4.testing-verdict-stub",
|
|
6621
|
+
"severity": "warning",
|
|
6622
|
+
"reason": "record UNKNOWN stub in Testing — pre-existing (0625 R3); promotion to error requires corpus migration",
|
|
6623
|
+
"since": "2026-08-21"
|
|
6624
|
+
},
|
|
6545
6625
|
{
|
|
6546
6626
|
"kind": "task",
|
|
6547
6627
|
"id": "0165",
|
|
@@ -6574,6 +6654,14 @@
|
|
|
6574
6654
|
"reason": "Task predates DD-07 feature_id requirement or was authored unlinked — see note § L4.missing-feature-id.",
|
|
6575
6655
|
"since": "2026-08-17"
|
|
6576
6656
|
},
|
|
6657
|
+
{
|
|
6658
|
+
"kind": "task",
|
|
6659
|
+
"id": "0165",
|
|
6660
|
+
"code": "L4.testing-verdict-stub",
|
|
6661
|
+
"severity": "warning",
|
|
6662
|
+
"reason": "record UNKNOWN stub in Testing — pre-existing (0625 R3); promotion to error requires corpus migration",
|
|
6663
|
+
"since": "2026-08-21"
|
|
6664
|
+
},
|
|
6577
6665
|
{
|
|
6578
6666
|
"kind": "task",
|
|
6579
6667
|
"id": "0166",
|
|
@@ -7099,14 +7187,6 @@
|
|
|
7099
7187
|
"reason": "Gate postdates the task: Review carries the older prose-verdict form — see note § L3.review-priority-table.",
|
|
7100
7188
|
"since": "2026-08-17"
|
|
7101
7189
|
},
|
|
7102
|
-
{
|
|
7103
|
-
"kind": "task",
|
|
7104
|
-
"id": "0185",
|
|
7105
|
-
"code": "L4.anchor-subject-mismatch",
|
|
7106
|
-
"severity": "error",
|
|
7107
|
-
"reason": "Accumulated anchor drift, surfaced for the first time by task 0583's content-matching rule. The cited lines resolve and are in bounds, but no longer name the requirement row's subject — a later task edited the file and pushed the anchor onto unrelated code. Spot-verified true positives (an import block cited for a component's hooks; a severity-parsing block cited for `runL4Rollup`). Repairing 1,300+ historical citations is its own campaign; the rule ships at warning severity until then (0583 R6).",
|
|
7108
|
-
"since": "2026-08-18"
|
|
7109
|
-
},
|
|
7110
7190
|
{
|
|
7111
7191
|
"kind": "task",
|
|
7112
7192
|
"id": "0185",
|
|
@@ -7209,14 +7289,6 @@
|
|
|
7209
7289
|
"reason": "Accumulated anchor drift, surfaced for the first time by task 0583's content-matching rule. The cited lines resolve and are in bounds, but no longer name the requirement row's subject — a later task edited the file and pushed the anchor onto unrelated code. Spot-verified true positives (an import block cited for a component's hooks; a severity-parsing block cited for `runL4Rollup`). Repairing 1,300+ historical citations is its own campaign; the rule ships at warning severity until then (0583 R6).",
|
|
7210
7290
|
"since": "2026-08-18"
|
|
7211
7291
|
},
|
|
7212
|
-
{
|
|
7213
|
-
"kind": "task",
|
|
7214
|
-
"id": "0189",
|
|
7215
|
-
"code": "L4.stale-line-anchor",
|
|
7216
|
-
"severity": "warning",
|
|
7217
|
-
"reason": "Anchor written with an incomplete path; qualification migration (task 0583) owns the mechanical repair — see note § L4.stale-line-anchor.",
|
|
7218
|
-
"since": "2026-08-17"
|
|
7219
|
-
},
|
|
7220
7292
|
{
|
|
7221
7293
|
"kind": "task",
|
|
7222
7294
|
"id": "0190",
|
|
@@ -8066,14 +8138,6 @@
|
|
|
8066
8138
|
"reason": "Accumulated anchor drift, surfaced for the first time by task 0583's content-matching rule. The cited lines resolve and are in bounds, but no longer name the requirement row's subject — a later task edited the file and pushed the anchor onto unrelated code. Spot-verified true positives (an import block cited for a component's hooks; a severity-parsing block cited for `runL4Rollup`). Repairing 1,300+ historical citations is its own campaign; the rule ships at warning severity until then (0583 R6).",
|
|
8067
8139
|
"since": "2026-08-18"
|
|
8068
8140
|
},
|
|
8069
|
-
{
|
|
8070
|
-
"kind": "task",
|
|
8071
|
-
"id": "0231",
|
|
8072
|
-
"code": "L4.stale-line-anchor",
|
|
8073
|
-
"severity": "warning",
|
|
8074
|
-
"reason": "Anchor written with an incomplete path; qualification migration (task 0583) owns the mechanical repair — see note § L4.stale-line-anchor.",
|
|
8075
|
-
"since": "2026-08-17"
|
|
8076
|
-
},
|
|
8077
8141
|
{
|
|
8078
8142
|
"kind": "task",
|
|
8079
8143
|
"id": "0232",
|
|
@@ -8728,6 +8792,14 @@
|
|
|
8728
8792
|
"reason": "R-item(s) written without the [ ] checkbox marker — pre-existing structural debt; repair with `spur task check --fix` (task 0619).",
|
|
8729
8793
|
"since": "2026-08-21"
|
|
8730
8794
|
},
|
|
8795
|
+
{
|
|
8796
|
+
"kind": "task",
|
|
8797
|
+
"id": "0254",
|
|
8798
|
+
"code": "L4.anchor-subject-mismatch",
|
|
8799
|
+
"severity": "error",
|
|
8800
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
8801
|
+
"since": "2026-08-21"
|
|
8802
|
+
},
|
|
8731
8803
|
{
|
|
8732
8804
|
"kind": "task",
|
|
8733
8805
|
"id": "0255",
|
|
@@ -8760,6 +8832,14 @@
|
|
|
8760
8832
|
"reason": "Closed before the numeric coverage-claim requirement existed — see note § L3.testing-coverage.",
|
|
8761
8833
|
"since": "2026-08-17"
|
|
8762
8834
|
},
|
|
8835
|
+
{
|
|
8836
|
+
"kind": "task",
|
|
8837
|
+
"id": "0256",
|
|
8838
|
+
"code": "L4.anchor-subject-mismatch",
|
|
8839
|
+
"severity": "error",
|
|
8840
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
8841
|
+
"since": "2026-08-21"
|
|
8842
|
+
},
|
|
8763
8843
|
{
|
|
8764
8844
|
"kind": "task",
|
|
8765
8845
|
"id": "0257",
|
|
@@ -8792,6 +8872,14 @@
|
|
|
8792
8872
|
"reason": "Closed before the numeric coverage-claim requirement existed — see note § L3.testing-coverage.",
|
|
8793
8873
|
"since": "2026-08-17"
|
|
8794
8874
|
},
|
|
8875
|
+
{
|
|
8876
|
+
"kind": "task",
|
|
8877
|
+
"id": "0258",
|
|
8878
|
+
"code": "L4.anchor-subject-mismatch",
|
|
8879
|
+
"severity": "error",
|
|
8880
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
8881
|
+
"since": "2026-08-21"
|
|
8882
|
+
},
|
|
8795
8883
|
{
|
|
8796
8884
|
"kind": "task",
|
|
8797
8885
|
"id": "0259",
|
|
@@ -9056,6 +9144,14 @@
|
|
|
9056
9144
|
"reason": "Accumulated anchor drift, surfaced for the first time by task 0583's content-matching rule. The cited lines resolve and are in bounds, but no longer name the requirement row's subject — a later task edited the file and pushed the anchor onto unrelated code. Spot-verified true positives (an import block cited for a component's hooks; a severity-parsing block cited for `runL4Rollup`). Repairing 1,300+ historical citations is its own campaign; the rule ships at warning severity until then (0583 R6).",
|
|
9057
9145
|
"since": "2026-08-18"
|
|
9058
9146
|
},
|
|
9147
|
+
{
|
|
9148
|
+
"kind": "task",
|
|
9149
|
+
"id": "0270",
|
|
9150
|
+
"code": "L4.anchor-subject-mismatch",
|
|
9151
|
+
"severity": "error",
|
|
9152
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
9153
|
+
"since": "2026-08-21"
|
|
9154
|
+
},
|
|
9059
9155
|
{
|
|
9060
9156
|
"kind": "task",
|
|
9061
9157
|
"id": "0270",
|
|
@@ -10002,14 +10098,6 @@
|
|
|
10002
10098
|
"reason": "Accumulated anchor drift, surfaced for the first time by task 0583's content-matching rule. The cited lines resolve and are in bounds, but no longer name the requirement row's subject — a later task edited the file and pushed the anchor onto unrelated code. Spot-verified true positives (an import block cited for a component's hooks; a severity-parsing block cited for `runL4Rollup`). Repairing 1,300+ historical citations is its own campaign; the rule ships at warning severity until then (0583 R6).",
|
|
10003
10099
|
"since": "2026-08-18"
|
|
10004
10100
|
},
|
|
10005
|
-
{
|
|
10006
|
-
"kind": "task",
|
|
10007
|
-
"id": "0313",
|
|
10008
|
-
"code": "L4.stale-line-anchor",
|
|
10009
|
-
"severity": "warning",
|
|
10010
|
-
"reason": "Anchor written with an incomplete path; qualification migration (task 0583) owns the mechanical repair — see note § L4.stale-line-anchor.",
|
|
10011
|
-
"since": "2026-08-17"
|
|
10012
|
-
},
|
|
10013
10101
|
{
|
|
10014
10102
|
"kind": "task",
|
|
10015
10103
|
"id": "0314",
|
|
@@ -10244,14 +10332,6 @@
|
|
|
10244
10332
|
"reason": "Accepted: spike/meta/brainstorm tasks whose contract was a question, not a behavior — see note § L3.requirements-empty.",
|
|
10245
10333
|
"since": "2026-08-17"
|
|
10246
10334
|
},
|
|
10247
|
-
{
|
|
10248
|
-
"kind": "task",
|
|
10249
|
-
"id": "0323",
|
|
10250
|
-
"code": "L4.anchor-subject-mismatch",
|
|
10251
|
-
"severity": "error",
|
|
10252
|
-
"reason": "Accumulated anchor drift, surfaced for the first time by task 0583's content-matching rule. The cited lines resolve and are in bounds, but no longer name the requirement row's subject — a later task edited the file and pushed the anchor onto unrelated code. Spot-verified true positives (an import block cited for a component's hooks; a severity-parsing block cited for `runL4Rollup`). Repairing 1,300+ historical citations is its own campaign; the rule ships at warning severity until then (0583 R6).",
|
|
10253
|
-
"since": "2026-08-18"
|
|
10254
|
-
},
|
|
10255
10335
|
{
|
|
10256
10336
|
"kind": "task",
|
|
10257
10337
|
"id": "0324",
|
|
@@ -11565,6 +11645,14 @@
|
|
|
11565
11645
|
"reason": "Done tasks carry unflipped planning checkboxes; flipping post-close rewrites history — remediation is separate work, see note § L3.unchecked-checklist.",
|
|
11566
11646
|
"since": "2026-08-17"
|
|
11567
11647
|
},
|
|
11648
|
+
{
|
|
11649
|
+
"kind": "task",
|
|
11650
|
+
"id": "0394",
|
|
11651
|
+
"code": "L4.testing-verdict-stub",
|
|
11652
|
+
"severity": "warning",
|
|
11653
|
+
"reason": "record UNKNOWN stub in Testing — pre-existing (0625 R3); promotion to error requires corpus migration",
|
|
11654
|
+
"since": "2026-08-21"
|
|
11655
|
+
},
|
|
11568
11656
|
{
|
|
11569
11657
|
"kind": "task",
|
|
11570
11658
|
"id": "0394",
|
|
@@ -13204,14 +13292,6 @@
|
|
|
13204
13292
|
"reason": "R-item(s) written without the [ ] checkbox marker — pre-existing structural debt; repair with `spur task check --fix` (task 0619).",
|
|
13205
13293
|
"since": "2026-08-21"
|
|
13206
13294
|
},
|
|
13207
|
-
{
|
|
13208
|
-
"kind": "task",
|
|
13209
|
-
"id": "0476",
|
|
13210
|
-
"code": "L4.anchor-subject-mismatch",
|
|
13211
|
-
"severity": "error",
|
|
13212
|
-
"reason": "Accumulated anchor drift, surfaced by promotion of anchor-subject matching rule following later file edits.",
|
|
13213
|
-
"since": "2026-08-18"
|
|
13214
|
-
},
|
|
13215
13295
|
{
|
|
13216
13296
|
"kind": "task",
|
|
13217
13297
|
"id": "0476",
|
|
@@ -13884,6 +13964,14 @@
|
|
|
13884
13964
|
"reason": "Accumulated anchor drift, surfaced for the first time by task 0583's content-matching rule. The cited lines resolve and are in bounds, but no longer name the requirement row's subject — a later task edited the file and pushed the anchor onto unrelated code. Spot-verified true positives (an import block cited for a component's hooks; a severity-parsing block cited for `runL4Rollup`). Repairing 1,300+ historical citations is its own campaign; the rule ships at warning severity until then (0583 R6).",
|
|
13885
13965
|
"since": "2026-08-18"
|
|
13886
13966
|
},
|
|
13967
|
+
{
|
|
13968
|
+
"kind": "task",
|
|
13969
|
+
"id": "0523",
|
|
13970
|
+
"code": "L4.anchor-subject-mismatch",
|
|
13971
|
+
"severity": "error",
|
|
13972
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
13973
|
+
"since": "2026-08-21"
|
|
13974
|
+
},
|
|
13887
13975
|
{
|
|
13888
13976
|
"kind": "task",
|
|
13889
13977
|
"id": "0524",
|
|
@@ -14076,6 +14164,14 @@
|
|
|
14076
14164
|
"reason": "Done tasks carry unflipped planning checkboxes; flipping post-close rewrites history — remediation is separate work, see note § L3.unchecked-checklist.",
|
|
14077
14165
|
"since": "2026-08-17"
|
|
14078
14166
|
},
|
|
14167
|
+
{
|
|
14168
|
+
"kind": "task",
|
|
14169
|
+
"id": "0547",
|
|
14170
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14171
|
+
"severity": "error",
|
|
14172
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14173
|
+
"since": "2026-08-21"
|
|
14174
|
+
},
|
|
14079
14175
|
{
|
|
14080
14176
|
"kind": "task",
|
|
14081
14177
|
"id": "0549",
|
|
@@ -14436,6 +14532,38 @@
|
|
|
14436
14532
|
"reason": "Accumulated anchor drift, surfaced for the first time by task 0583's content-matching rule. The cited lines resolve and are in bounds, but no longer name the requirement row's subject — a later task edited the file and pushed the anchor onto unrelated code. Spot-verified true positives (an import block cited for a component's hooks; a severity-parsing block cited for `runL4Rollup`). Repairing 1,300+ historical citations is its own campaign; the rule ships at warning severity until then (0583 R6).",
|
|
14437
14533
|
"since": "2026-08-18"
|
|
14438
14534
|
},
|
|
14535
|
+
{
|
|
14536
|
+
"kind": "task",
|
|
14537
|
+
"id": "0578",
|
|
14538
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14539
|
+
"severity": "error",
|
|
14540
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14541
|
+
"since": "2026-08-21"
|
|
14542
|
+
},
|
|
14543
|
+
{
|
|
14544
|
+
"kind": "task",
|
|
14545
|
+
"id": "0579",
|
|
14546
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14547
|
+
"severity": "error",
|
|
14548
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14549
|
+
"since": "2026-08-21"
|
|
14550
|
+
},
|
|
14551
|
+
{
|
|
14552
|
+
"kind": "task",
|
|
14553
|
+
"id": "0580",
|
|
14554
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14555
|
+
"severity": "error",
|
|
14556
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14557
|
+
"since": "2026-08-21"
|
|
14558
|
+
},
|
|
14559
|
+
{
|
|
14560
|
+
"kind": "task",
|
|
14561
|
+
"id": "0581",
|
|
14562
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14563
|
+
"severity": "error",
|
|
14564
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14565
|
+
"since": "2026-08-21"
|
|
14566
|
+
},
|
|
14439
14567
|
{
|
|
14440
14568
|
"kind": "task",
|
|
14441
14569
|
"id": "0582",
|
|
@@ -14476,6 +14604,14 @@
|
|
|
14476
14604
|
"reason": "One box stays unchecked on purpose: AC4 (live preflight repro on the base branch) is PARTIAL, not MET — `gh auth status` fails against the keyring in the sandbox and the tree is dirty, so both earlier preflight guards fire before the base-branch check is reached. The behaviour is proven by the in-process tests under AC1. Remove this entry once AC4 is run on a clean tree with working `gh` auth.",
|
|
14477
14605
|
"since": "2026-08-18"
|
|
14478
14606
|
},
|
|
14607
|
+
{
|
|
14608
|
+
"kind": "task",
|
|
14609
|
+
"id": "0587",
|
|
14610
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14611
|
+
"severity": "error",
|
|
14612
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14613
|
+
"since": "2026-08-21"
|
|
14614
|
+
},
|
|
14479
14615
|
{
|
|
14480
14616
|
"kind": "task",
|
|
14481
14617
|
"id": "0587",
|
|
@@ -14524,6 +14660,14 @@
|
|
|
14524
14660
|
"reason": "R-item(s) written without the [ ] checkbox marker — pre-existing structural debt; repair with `spur task check --fix` (task 0619).",
|
|
14525
14661
|
"since": "2026-08-21"
|
|
14526
14662
|
},
|
|
14663
|
+
{
|
|
14664
|
+
"kind": "task",
|
|
14665
|
+
"id": "0592",
|
|
14666
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14667
|
+
"severity": "error",
|
|
14668
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14669
|
+
"since": "2026-08-21"
|
|
14670
|
+
},
|
|
14527
14671
|
{
|
|
14528
14672
|
"kind": "task",
|
|
14529
14673
|
"id": "0593",
|
|
@@ -14532,6 +14676,14 @@
|
|
|
14532
14676
|
"reason": "R-item(s) written without the [ ] checkbox marker — pre-existing structural debt; repair with `spur task check --fix` (task 0619).",
|
|
14533
14677
|
"since": "2026-08-21"
|
|
14534
14678
|
},
|
|
14679
|
+
{
|
|
14680
|
+
"kind": "task",
|
|
14681
|
+
"id": "0593",
|
|
14682
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14683
|
+
"severity": "error",
|
|
14684
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14685
|
+
"since": "2026-08-21"
|
|
14686
|
+
},
|
|
14535
14687
|
{
|
|
14536
14688
|
"kind": "task",
|
|
14537
14689
|
"id": "0594",
|
|
@@ -14644,6 +14796,54 @@
|
|
|
14644
14796
|
"reason": "post-done drift; eval-pipeline.ts:205 lines (node_modules symlink) do not name row subject",
|
|
14645
14797
|
"since": "2026-08-21"
|
|
14646
14798
|
},
|
|
14799
|
+
{
|
|
14800
|
+
"kind": "task",
|
|
14801
|
+
"id": "0612",
|
|
14802
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14803
|
+
"severity": "error",
|
|
14804
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14805
|
+
"since": "2026-08-21"
|
|
14806
|
+
},
|
|
14807
|
+
{
|
|
14808
|
+
"kind": "task",
|
|
14809
|
+
"id": "0614",
|
|
14810
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14811
|
+
"severity": "error",
|
|
14812
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14813
|
+
"since": "2026-08-21"
|
|
14814
|
+
},
|
|
14815
|
+
{
|
|
14816
|
+
"kind": "task",
|
|
14817
|
+
"id": "0616",
|
|
14818
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14819
|
+
"severity": "error",
|
|
14820
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14821
|
+
"since": "2026-08-21"
|
|
14822
|
+
},
|
|
14823
|
+
{
|
|
14824
|
+
"kind": "task",
|
|
14825
|
+
"id": "0617",
|
|
14826
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14827
|
+
"severity": "error",
|
|
14828
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14829
|
+
"since": "2026-08-21"
|
|
14830
|
+
},
|
|
14831
|
+
{
|
|
14832
|
+
"kind": "task",
|
|
14833
|
+
"id": "0619",
|
|
14834
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14835
|
+
"severity": "error",
|
|
14836
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14837
|
+
"since": "2026-08-21"
|
|
14838
|
+
},
|
|
14839
|
+
{
|
|
14840
|
+
"kind": "task",
|
|
14841
|
+
"id": "0620",
|
|
14842
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14843
|
+
"severity": "error",
|
|
14844
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14845
|
+
"since": "2026-08-21"
|
|
14846
|
+
},
|
|
14647
14847
|
{
|
|
14648
14848
|
"kind": "task",
|
|
14649
14849
|
"id": "0622",
|
|
@@ -14660,6 +14860,14 @@
|
|
|
14660
14860
|
"reason": "done task retains 6 unchecked boxes; historical ship state, not re-openable in this batch",
|
|
14661
14861
|
"since": "2026-08-21"
|
|
14662
14862
|
},
|
|
14863
|
+
{
|
|
14864
|
+
"kind": "task",
|
|
14865
|
+
"id": "0622",
|
|
14866
|
+
"code": "L4.anchor-subject-mismatch",
|
|
14867
|
+
"severity": "error",
|
|
14868
|
+
"reason": "bare Solution change-map row cites a line that does not name its path-derived subject — 0625 R4 widening; pre-existing citation, baselined not re-authored",
|
|
14869
|
+
"since": "2026-08-21"
|
|
14870
|
+
},
|
|
14663
14871
|
{
|
|
14664
14872
|
"kind": "task",
|
|
14665
14873
|
"id": "0622",
|
|
@@ -482,7 +482,7 @@
|
|
|
482
482
|
},
|
|
483
483
|
"feature-transition:onEnter:0": {
|
|
484
484
|
"kind": "shell",
|
|
485
|
-
"invocation": "if [ -z \"$feature\" ]; then\n echo \"feature-transition: vars.feature is empty — refusing no-op feature sync (mis-invocation, not a blocked sync)\" >&2;\n exit 1;\nfi; if [ -f plugins/sp/scripts/feature-sync-bounded.ts ]; then\n bun plugins/sp/scripts/feature-sync-bounded.ts \"$feature\" --spur-bin \"$spurBin\" --json;\nelse\n $spurBin feature sync \"$feature\" --json;\nfi; exit 0",
|
|
485
|
+
"invocation": "if [ -z \"$feature\" ]; then\n echo \"feature-transition: vars.feature is empty — refusing no-op feature sync (mis-invocation, not a blocked sync)\" >&2;\n exit 1;\nfi; SYNC_OUTPUT=$(if [ -f plugins/sp/scripts/feature-sync-bounded.ts ]; then\n bun plugins/sp/scripts/feature-sync-bounded.ts \"$feature\" --spur-bin \"$spurBin\" --json;\nelse\n $spurBin feature sync \"$feature\" --json;\nfi); SYNC_RC=$?; printf '%s\\n' \"$SYNC_OUTPUT\"; APPLIED=$(printf '%s' \"$SYNC_OUTPUT\" | jq -r '.applied // false' 2>/dev/null || echo false); if [ \"$APPLIED\" = \"true\" ] || [ \"$SYNC_RC\" -ne 0 ]; then\n echo \"feature-transition: sync applied or failed after a possible partial transition for $feature — running corpus-aware gate: $featureGateCmd\";\n if sh -c \"$featureGateCmd\"; then\n echo \"feature-transition: corpus-aware gate PASS for feature $feature\";\n else\n echo \"feature-transition: corpus-aware gate FAIL for feature $feature — inspect findings before reporting the transition complete\" >&2;\n fi;\nelse\n echo \"feature-transition: sync did not apply a transition (rc=$SYNC_RC, applied=$APPLIED) — corpus-aware gate skipped\";\nfi; exit 0",
|
|
486
486
|
"stateEffect": "write",
|
|
487
487
|
"evidenceEffect": "none",
|
|
488
488
|
"disposition": "EXT"
|
|
@@ -51,6 +51,15 @@ vars:
|
|
|
51
51
|
spurBin: "spur"
|
|
52
52
|
agent: "omp"
|
|
53
53
|
stepTimeoutMs: "1800000"
|
|
54
|
+
# Corpus-aware quality gate for the feature-transition hop (R1, task 0625).
|
|
55
|
+
# The per-task gate (`spur-check`) deliberately excludes corpus-check — the only
|
|
56
|
+
# sweep that observes feature-level findings — so a transition that arms one
|
|
57
|
+
# would go green. A feature transition happens once per feature, so the ~41 s
|
|
58
|
+
# corpus sweep is paid once here. Soft by design: the gate reports PASS/FAIL
|
|
59
|
+
# and lets the operator decide; it never hard-fails the wrap-up shell.
|
|
60
|
+
# TRUSTED CONFIG ONLY — this string is executed via `sh -c` (same surface as
|
|
61
|
+
# task-pipeline's qualityGateCmd). Never interpolate untrusted input into it.
|
|
62
|
+
featureGateCmd: "bun run spur-check-new"
|
|
54
63
|
__hitlAnswer: ""
|
|
55
64
|
|
|
56
65
|
states:
|
|
@@ -152,6 +161,14 @@ states:
|
|
|
152
161
|
# description promises against). `feature-sync-bounded.ts` is a Spur-monorepo
|
|
153
162
|
# path (`spur init` does not scaffold `plugins/sp/`), so seeded projects fall
|
|
154
163
|
# back to the plain `spur feature sync` verb.
|
|
164
|
+
# R1 (0625): a feature transition that changed state may have armed a
|
|
165
|
+
# feature-level finding the per-task fast gate (spur-check) never sees.
|
|
166
|
+
# Run the corpus-aware gate after an applied sync OR a non-zero exit that
|
|
167
|
+
# may follow a partial multi-hop transition, then report PASS/FAIL. Soft
|
|
168
|
+
# by design: the operator decides, and wrap-up never hard-fails here.
|
|
169
|
+
# NOTE: do not add
|
|
170
|
+
# `#` comments INSIDE the folded shell string — YAML `>-` folds them onto
|
|
171
|
+
# the following statement line and comments it out.
|
|
155
172
|
- kind: shell
|
|
156
173
|
options:
|
|
157
174
|
command: >-
|
|
@@ -159,10 +176,23 @@ states:
|
|
|
159
176
|
echo "feature-transition: vars.feature is empty — refusing no-op feature sync (mis-invocation, not a blocked sync)" >&2;
|
|
160
177
|
exit 1;
|
|
161
178
|
fi;
|
|
162
|
-
if [ -f plugins/sp/scripts/feature-sync-bounded.ts ]; then
|
|
179
|
+
SYNC_OUTPUT=$(if [ -f plugins/sp/scripts/feature-sync-bounded.ts ]; then
|
|
163
180
|
bun plugins/sp/scripts/feature-sync-bounded.ts "$feature" --spur-bin "$spurBin" --json;
|
|
164
181
|
else
|
|
165
182
|
$spurBin feature sync "$feature" --json;
|
|
183
|
+
fi);
|
|
184
|
+
SYNC_RC=$?;
|
|
185
|
+
printf '%s\n' "$SYNC_OUTPUT";
|
|
186
|
+
APPLIED=$(printf '%s' "$SYNC_OUTPUT" | jq -r '.applied // false' 2>/dev/null || echo false);
|
|
187
|
+
if [ "$APPLIED" = "true" ] || [ "$SYNC_RC" -ne 0 ]; then
|
|
188
|
+
echo "feature-transition: sync applied or failed after a possible partial transition for $feature — running corpus-aware gate: $featureGateCmd";
|
|
189
|
+
if sh -c "$featureGateCmd"; then
|
|
190
|
+
echo "feature-transition: corpus-aware gate PASS for feature $feature";
|
|
191
|
+
else
|
|
192
|
+
echo "feature-transition: corpus-aware gate FAIL for feature $feature — inspect findings before reporting the transition complete" >&2;
|
|
193
|
+
fi;
|
|
194
|
+
else
|
|
195
|
+
echo "feature-transition: sync did not apply a transition (rc=$SYNC_RC, applied=$APPLIED) — corpus-aware gate skipped";
|
|
166
196
|
fi;
|
|
167
197
|
exit 0
|
|
168
198
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/spur",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.58",
|
|
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.41",
|
|
57
|
+
"@gobing-ai/ts-ai-runner": "^0.4.41",
|
|
58
|
+
"@gobing-ai/ts-dual-workflow-engine": "^0.4.41",
|
|
59
|
+
"@gobing-ai/ts-infra": "^0.4.41",
|
|
60
|
+
"@gobing-ai/ts-llm-jsonl-importer": "^0.4.41",
|
|
61
|
+
"@gobing-ai/ts-rule-engine": "^0.4.41",
|
|
62
|
+
"@gobing-ai/ts-runtime": "^0.4.41",
|
|
63
|
+
"@gobing-ai/ts-utils": "^0.4.41",
|
|
64
64
|
"@types/bun": "1.3.14",
|
|
65
65
|
"@types/figlet": "^1.7.0",
|
|
66
66
|
"@types/node-notifier": "8.0.5",
|
package/plugins/README.md
CHANGED
|
@@ -345,7 +345,7 @@ All planning entities (tasks and features) share a common lifecycle, managed by
|
|
|
345
345
|
| **check** | `spur task check` | `spur feature check` | 4-layer readiness matrix (schema, sections, traceability, AC) |
|
|
346
346
|
| **update** | `spur task update <wbs> [status]` | `spur feature update <id> [status]` | Lifecycle transition or scalar field set |
|
|
347
347
|
| **record** | `spur task record <wbs>` | — | Write Testing/Review from a verify verdict; optional Solution backfill (never transitions to `done`) |
|
|
348
|
-
| **refresh** | `spur task refresh` | `spur feature refresh`
|
|
348
|
+
| **refresh** | `spur task refresh` | `spur feature refresh --feature <id> \| --all` | Index + feature-tree roll-up regeneration |
|
|
349
349
|
|
|
350
350
|
The **workflow** and **rule** engines have their own lifecycles (author → validate → run → trace / refine), documented in their respective `sp:spur-cli` references.
|
|
351
351
|
|