@dzhechkov/harness-core 0.8.21 → 0.8.24
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/.dz-manifest.json +68 -48
- package/README.md +163 -0
- package/dist/amendment-trace.d.ts.map +1 -1
- package/dist/amendment-trace.js +5 -140
- package/dist/amendment-trace.js.map +1 -1
- package/dist/claude-hooks-assets.d.ts +3 -3
- package/dist/claude-hooks-assets.d.ts.map +1 -1
- package/dist/claude-hooks-assets.js +24 -11
- package/dist/claude-hooks-assets.js.map +1 -1
- package/dist/discrimination-gate.d.ts.map +1 -1
- package/dist/discrimination-gate.js +2 -1
- package/dist/discrimination-gate.js.map +1 -1
- package/dist/feature-adr-routing.d.ts +3 -1
- package/dist/feature-adr-routing.d.ts.map +1 -1
- package/dist/feature-adr-routing.js +17 -10
- package/dist/feature-adr-routing.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/loop-blobs.generated.js +2 -2
- package/dist/loop-blobs.generated.js.map +1 -1
- package/dist/markdown-masker.d.ts +21 -0
- package/dist/markdown-masker.d.ts.map +1 -0
- package/dist/markdown-masker.js +119 -0
- package/dist/markdown-masker.js.map +1 -0
- package/dist/mutation-gate.d.ts +16 -7
- package/dist/mutation-gate.d.ts.map +1 -1
- package/dist/mutation-gate.js +141 -30
- package/dist/mutation-gate.js.map +1 -1
- package/dist/statusline.d.ts +14 -0
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +24 -1
- package/dist/statusline.js.map +1 -1
- package/dist/store-counts.d.ts +12 -0
- package/dist/store-counts.d.ts.map +1 -1
- package/dist/store-counts.js +30 -12
- package/dist/store-counts.js.map +1 -1
- package/dist/swarm-brief.d.ts.map +1 -1
- package/dist/swarm-brief.js +13 -144
- package/dist/swarm-brief.js.map +1 -1
- package/package.json +5 -5
- package/sbom.json +97 -47
- package/src/amendment-trace.ts +6 -123
- package/src/claude-hooks-assets.ts +24 -11
- package/src/discrimination-gate.ts +2 -1
- package/src/feature-adr-routing.ts +21 -11
- package/src/index.ts +2 -0
- package/src/loop-blobs.generated.ts +2 -2
- package/src/markdown-masker.ts +109 -0
- package/src/mutation-gate.ts +167 -31
- package/src/statusline.ts +35 -1
- package/src/store-counts.ts +44 -13
- package/src/swarm-brief.ts +13 -104
package/.dz-manifest.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
"path": "README.md",
|
|
12
|
-
"sha256": "
|
|
12
|
+
"sha256": "113ecbe403e5275826354f6d5ff12b0e5fb18a7132dc7c6fccd29f06a8afd2e4"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "dist/__tests__/golden-baseline.test.d.ts",
|
|
@@ -65,15 +65,15 @@
|
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
"path": "dist/amendment-trace.d.ts.map",
|
|
68
|
-
"sha256": "
|
|
68
|
+
"sha256": "d67d97f37d806a4df5d0d99b9b3f1c2861fcf9f88c051f7fecfbf516bdaf9f88"
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
"path": "dist/amendment-trace.js",
|
|
72
|
-
"sha256": "
|
|
72
|
+
"sha256": "7d8155efb51768f3bab376e31b45cb1c5c0b8e3d8e368ed4ecd9fc71500cdb0d"
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
"path": "dist/amendment-trace.js.map",
|
|
76
|
-
"sha256": "
|
|
76
|
+
"sha256": "a91f8c4ff7e19875b9b9972386e4a7178d2cf1cc5b79e20402c72285c28b5eaa"
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
79
|
"path": "dist/apply.d.ts",
|
|
@@ -349,19 +349,19 @@
|
|
|
349
349
|
},
|
|
350
350
|
{
|
|
351
351
|
"path": "dist/claude-hooks-assets.d.ts",
|
|
352
|
-
"sha256": "
|
|
352
|
+
"sha256": "317a92d035af4867902a3307f2c929ea3e37ac285295aa2d88e2502fddd02e91"
|
|
353
353
|
},
|
|
354
354
|
{
|
|
355
355
|
"path": "dist/claude-hooks-assets.d.ts.map",
|
|
356
|
-
"sha256": "
|
|
356
|
+
"sha256": "07ccdd6b48acfc3fa11ec2b34ff59a8090881e3d174e56a41ec846c8fa861bc1"
|
|
357
357
|
},
|
|
358
358
|
{
|
|
359
359
|
"path": "dist/claude-hooks-assets.js",
|
|
360
|
-
"sha256": "
|
|
360
|
+
"sha256": "dc7407b60bd01c77b09b818d5640cbf46175551b0029700b3a7cc9da57471fbd"
|
|
361
361
|
},
|
|
362
362
|
{
|
|
363
363
|
"path": "dist/claude-hooks-assets.js.map",
|
|
364
|
-
"sha256": "
|
|
364
|
+
"sha256": "b04d98605560396754367d0c32a651d2beb46b43651105e91c1a3b5c14d42ec4"
|
|
365
365
|
},
|
|
366
366
|
{
|
|
367
367
|
"path": "dist/clean-room-smoke.d.ts",
|
|
@@ -625,15 +625,15 @@
|
|
|
625
625
|
},
|
|
626
626
|
{
|
|
627
627
|
"path": "dist/discrimination-gate.d.ts.map",
|
|
628
|
-
"sha256": "
|
|
628
|
+
"sha256": "a197e981c75f2d6d43f9b2f8cb63210d2db724d31a049b2c07b5baf7cd04b458"
|
|
629
629
|
},
|
|
630
630
|
{
|
|
631
631
|
"path": "dist/discrimination-gate.js",
|
|
632
|
-
"sha256": "
|
|
632
|
+
"sha256": "e63b041cc273258ba086fd08f4895cd14037e81e0af5f8ccbad4727034ed466b"
|
|
633
633
|
},
|
|
634
634
|
{
|
|
635
635
|
"path": "dist/discrimination-gate.js.map",
|
|
636
|
-
"sha256": "
|
|
636
|
+
"sha256": "670bec50dd1b6f13ee2d625e1b212282f901e83ff145b6a3eef72316a6e33175"
|
|
637
637
|
},
|
|
638
638
|
{
|
|
639
639
|
"path": "dist/downloads.d.ts",
|
|
@@ -797,19 +797,19 @@
|
|
|
797
797
|
},
|
|
798
798
|
{
|
|
799
799
|
"path": "dist/feature-adr-routing.d.ts",
|
|
800
|
-
"sha256": "
|
|
800
|
+
"sha256": "7d04dd31aab709d02be558af81925bbd07474ee2f1d0f442f3ddcabf21e8b522"
|
|
801
801
|
},
|
|
802
802
|
{
|
|
803
803
|
"path": "dist/feature-adr-routing.d.ts.map",
|
|
804
|
-
"sha256": "
|
|
804
|
+
"sha256": "bdc42a00229596a36424f5f72c3579a671f120d98a38b32e86a7755c2f0818a8"
|
|
805
805
|
},
|
|
806
806
|
{
|
|
807
807
|
"path": "dist/feature-adr-routing.js",
|
|
808
|
-
"sha256": "
|
|
808
|
+
"sha256": "359aa0bfe40dbc5c6f757f1288d4f873bad4f9549ec5ffc6b6bf9fad778f390f"
|
|
809
809
|
},
|
|
810
810
|
{
|
|
811
811
|
"path": "dist/feature-adr-routing.js.map",
|
|
812
|
-
"sha256": "
|
|
812
|
+
"sha256": "de4b34a133e7fc0389606e8203f8a622f09cbb55be8ec2c1a46a76b6b2eca35e"
|
|
813
813
|
},
|
|
814
814
|
{
|
|
815
815
|
"path": "dist/feature-adr-setup.d.ts",
|
|
@@ -909,19 +909,19 @@
|
|
|
909
909
|
},
|
|
910
910
|
{
|
|
911
911
|
"path": "dist/index.d.ts",
|
|
912
|
-
"sha256": "
|
|
912
|
+
"sha256": "1f29a6394fd77db7aa6e6e123a9e1cdac934a42be6f7c8408601d1974294e30a"
|
|
913
913
|
},
|
|
914
914
|
{
|
|
915
915
|
"path": "dist/index.d.ts.map",
|
|
916
|
-
"sha256": "
|
|
916
|
+
"sha256": "486ddf11b5ac451d18173d7e6105746ae7ea8491b062e498ee05ac69dfafa2dd"
|
|
917
917
|
},
|
|
918
918
|
{
|
|
919
919
|
"path": "dist/index.js",
|
|
920
|
-
"sha256": "
|
|
920
|
+
"sha256": "3a3b54eb0662739c5996c24b2e9eb7891d75de80592a92718f222b3ab854d8f4"
|
|
921
921
|
},
|
|
922
922
|
{
|
|
923
923
|
"path": "dist/index.js.map",
|
|
924
|
-
"sha256": "
|
|
924
|
+
"sha256": "c0c05215db1d6372b042870ac9f8530ad7d4e4789638553a32622d7636a7e84f"
|
|
925
925
|
},
|
|
926
926
|
{
|
|
927
927
|
"path": "dist/integration-apply.d.ts",
|
|
@@ -1093,11 +1093,11 @@
|
|
|
1093
1093
|
},
|
|
1094
1094
|
{
|
|
1095
1095
|
"path": "dist/loop-blobs.generated.js",
|
|
1096
|
-
"sha256": "
|
|
1096
|
+
"sha256": "48397bdb099841229022125e0f72e35379412273e3db089e8537560f752d6595"
|
|
1097
1097
|
},
|
|
1098
1098
|
{
|
|
1099
1099
|
"path": "dist/loop-blobs.generated.js.map",
|
|
1100
|
-
"sha256": "
|
|
1100
|
+
"sha256": "86b6632133e8b092fb7445b5076595376fbe01cc16ca72e00d7e1ac5ba770e90"
|
|
1101
1101
|
},
|
|
1102
1102
|
{
|
|
1103
1103
|
"path": "dist/loop-lint.d.ts",
|
|
@@ -1211,6 +1211,22 @@
|
|
|
1211
1211
|
"path": "dist/managed-hooks.js.map",
|
|
1212
1212
|
"sha256": "3dd35138730b1e1f509454c06e13455a6dbb5389bc546213c71bba13ce5fbdd7"
|
|
1213
1213
|
},
|
|
1214
|
+
{
|
|
1215
|
+
"path": "dist/markdown-masker.d.ts",
|
|
1216
|
+
"sha256": "02d6eeb4febec6d8d1c8adcdc371a14d17b79d2b2f1ab9e5dea120a9395bb46b"
|
|
1217
|
+
},
|
|
1218
|
+
{
|
|
1219
|
+
"path": "dist/markdown-masker.d.ts.map",
|
|
1220
|
+
"sha256": "f33d6580baf32166d600113973fd3d1598904feb0eda56fc849de8945376c0b3"
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
"path": "dist/markdown-masker.js",
|
|
1224
|
+
"sha256": "7c48423e5fe6e342e948e38f8a24a9f8139161a1feba9773eff0dbd1e63dc67a"
|
|
1225
|
+
},
|
|
1226
|
+
{
|
|
1227
|
+
"path": "dist/markdown-masker.js.map",
|
|
1228
|
+
"sha256": "76957993ae66b90a31413b03bb1029b3670a3a8832ad4d6d06008e459f46f2c9"
|
|
1229
|
+
},
|
|
1214
1230
|
{
|
|
1215
1231
|
"path": "dist/mcp-scan.d.ts",
|
|
1216
1232
|
"sha256": "169ac81c9da301f7b12d43c20443f915c4abe8004447af5d165e1871c1db261d"
|
|
@@ -1245,19 +1261,19 @@
|
|
|
1245
1261
|
},
|
|
1246
1262
|
{
|
|
1247
1263
|
"path": "dist/mutation-gate.d.ts",
|
|
1248
|
-
"sha256": "
|
|
1264
|
+
"sha256": "a8ab6e6aaf9359630b3c19e5939be4596ce1aea5cf6c550e8222191897f6cde2"
|
|
1249
1265
|
},
|
|
1250
1266
|
{
|
|
1251
1267
|
"path": "dist/mutation-gate.d.ts.map",
|
|
1252
|
-
"sha256": "
|
|
1268
|
+
"sha256": "860db6313c7933e3dd2ea25946bb3a4c7353f0e847e86f101877b00db46dc9a7"
|
|
1253
1269
|
},
|
|
1254
1270
|
{
|
|
1255
1271
|
"path": "dist/mutation-gate.js",
|
|
1256
|
-
"sha256": "
|
|
1272
|
+
"sha256": "05ba52d62819411e4201b619edc1ccf3512122858c39e88c6e5a454115548415"
|
|
1257
1273
|
},
|
|
1258
1274
|
{
|
|
1259
1275
|
"path": "dist/mutation-gate.js.map",
|
|
1260
|
-
"sha256": "
|
|
1276
|
+
"sha256": "60f4b3bb18fc211a31a722622521de5e114f13f5f8fc3143fc2225b7a4e6d7c4"
|
|
1261
1277
|
},
|
|
1262
1278
|
{
|
|
1263
1279
|
"path": "dist/name-check.d.ts",
|
|
@@ -2045,19 +2061,19 @@
|
|
|
2045
2061
|
},
|
|
2046
2062
|
{
|
|
2047
2063
|
"path": "dist/statusline.d.ts",
|
|
2048
|
-
"sha256": "
|
|
2064
|
+
"sha256": "d82a3f31dd26be6bbecb41c52c3c3c211f3ed5a79602dddfe05c6af5dbe3e695"
|
|
2049
2065
|
},
|
|
2050
2066
|
{
|
|
2051
2067
|
"path": "dist/statusline.d.ts.map",
|
|
2052
|
-
"sha256": "
|
|
2068
|
+
"sha256": "4538de91f604d0881db5c53d9010560be76bd7123133db795bd9a76568b145f4"
|
|
2053
2069
|
},
|
|
2054
2070
|
{
|
|
2055
2071
|
"path": "dist/statusline.js",
|
|
2056
|
-
"sha256": "
|
|
2072
|
+
"sha256": "c0f939b0a5f739c9aadec2a8db0cf3320d14be55e09f1397faf47cca5ba326f1"
|
|
2057
2073
|
},
|
|
2058
2074
|
{
|
|
2059
2075
|
"path": "dist/statusline.js.map",
|
|
2060
|
-
"sha256": "
|
|
2076
|
+
"sha256": "c8a91949dc870bd7bd7b0aff06160dc4accc4c5549361d12aa2a55d5df4394d8"
|
|
2061
2077
|
},
|
|
2062
2078
|
{
|
|
2063
2079
|
"path": "dist/stem.d.ts",
|
|
@@ -2077,19 +2093,19 @@
|
|
|
2077
2093
|
},
|
|
2078
2094
|
{
|
|
2079
2095
|
"path": "dist/store-counts.d.ts",
|
|
2080
|
-
"sha256": "
|
|
2096
|
+
"sha256": "60d14ae5aa2dc804f0ad66f57f513f67b7a6bb687d23bb77c71ec977bec32ece"
|
|
2081
2097
|
},
|
|
2082
2098
|
{
|
|
2083
2099
|
"path": "dist/store-counts.d.ts.map",
|
|
2084
|
-
"sha256": "
|
|
2100
|
+
"sha256": "ab483d4cd8226b3511d77d9fa7cf9147a5f8d369e74feb36fc3af874a962da90"
|
|
2085
2101
|
},
|
|
2086
2102
|
{
|
|
2087
2103
|
"path": "dist/store-counts.js",
|
|
2088
|
-
"sha256": "
|
|
2104
|
+
"sha256": "5d531906c4877ac3b2ea3eb3e811701755dad32fcf440918b751325f0c12ce1e"
|
|
2089
2105
|
},
|
|
2090
2106
|
{
|
|
2091
2107
|
"path": "dist/store-counts.js.map",
|
|
2092
|
-
"sha256": "
|
|
2108
|
+
"sha256": "5dcebc7e2efca9aef03cdbad8d7b7df9656b04aa543132677deec2a1ad6bc7d7"
|
|
2093
2109
|
},
|
|
2094
2110
|
{
|
|
2095
2111
|
"path": "dist/store-guard.d.ts",
|
|
@@ -2161,15 +2177,15 @@
|
|
|
2161
2177
|
},
|
|
2162
2178
|
{
|
|
2163
2179
|
"path": "dist/swarm-brief.d.ts.map",
|
|
2164
|
-
"sha256": "
|
|
2180
|
+
"sha256": "2470e1fb045836c22745f1c506652a216167f33ffe00e6cc7bffcda31201c27c"
|
|
2165
2181
|
},
|
|
2166
2182
|
{
|
|
2167
2183
|
"path": "dist/swarm-brief.js",
|
|
2168
|
-
"sha256": "
|
|
2184
|
+
"sha256": "fe76974ae87bbb1ed5fa6306d97f186d27fa03303ff3d3af8215b25d7b69cc7f"
|
|
2169
2185
|
},
|
|
2170
2186
|
{
|
|
2171
2187
|
"path": "dist/swarm-brief.js.map",
|
|
2172
|
-
"sha256": "
|
|
2188
|
+
"sha256": "4d90104712c5fc017249ef488494200d6338d065734abed3dd1701770942e8f4"
|
|
2173
2189
|
},
|
|
2174
2190
|
{
|
|
2175
2191
|
"path": "dist/sync-upstream.d.ts",
|
|
@@ -2413,7 +2429,7 @@
|
|
|
2413
2429
|
},
|
|
2414
2430
|
{
|
|
2415
2431
|
"path": "package.json",
|
|
2416
|
-
"sha256": "
|
|
2432
|
+
"sha256": "1e9748de4c4d4d9811e919cba7b474764854164546b88b345c30afbda34be75f"
|
|
2417
2433
|
},
|
|
2418
2434
|
{
|
|
2419
2435
|
"path": "src/__tests__/golden-baseline.test.ts",
|
|
@@ -2429,7 +2445,7 @@
|
|
|
2429
2445
|
},
|
|
2430
2446
|
{
|
|
2431
2447
|
"path": "src/amendment-trace.ts",
|
|
2432
|
-
"sha256": "
|
|
2448
|
+
"sha256": "74734d51f30654d7c436aa87bf8a676b75f6690864c67f63e75b51917192ab30"
|
|
2433
2449
|
},
|
|
2434
2450
|
{
|
|
2435
2451
|
"path": "src/apply.ts",
|
|
@@ -2501,7 +2517,7 @@
|
|
|
2501
2517
|
},
|
|
2502
2518
|
{
|
|
2503
2519
|
"path": "src/claude-hooks-assets.ts",
|
|
2504
|
-
"sha256": "
|
|
2520
|
+
"sha256": "a2ba7dd3db57a406281903fdbc1575dda663b5c873a53ff777e1723d28882d5a"
|
|
2505
2521
|
},
|
|
2506
2522
|
{
|
|
2507
2523
|
"path": "src/clean-room-smoke.ts",
|
|
@@ -2573,7 +2589,7 @@
|
|
|
2573
2589
|
},
|
|
2574
2590
|
{
|
|
2575
2591
|
"path": "src/discrimination-gate.ts",
|
|
2576
|
-
"sha256": "
|
|
2592
|
+
"sha256": "1f2b27209260d55f0b4482d61d104ed44cca1d9c9101f9658b525a53dabeff36"
|
|
2577
2593
|
},
|
|
2578
2594
|
{
|
|
2579
2595
|
"path": "src/downloads.ts",
|
|
@@ -2617,7 +2633,7 @@
|
|
|
2617
2633
|
},
|
|
2618
2634
|
{
|
|
2619
2635
|
"path": "src/feature-adr-routing.ts",
|
|
2620
|
-
"sha256": "
|
|
2636
|
+
"sha256": "b65f7e182532d3dd3f666354576c33f26689583a30ee8f84be5238f6d668e613"
|
|
2621
2637
|
},
|
|
2622
2638
|
{
|
|
2623
2639
|
"path": "src/feature-adr-setup.ts",
|
|
@@ -2645,7 +2661,7 @@
|
|
|
2645
2661
|
},
|
|
2646
2662
|
{
|
|
2647
2663
|
"path": "src/index.ts",
|
|
2648
|
-
"sha256": "
|
|
2664
|
+
"sha256": "a183b2befb37065b6de85f3ef2f5638283e8b2ebf079a7074bd0abc78cb547a0"
|
|
2649
2665
|
},
|
|
2650
2666
|
{
|
|
2651
2667
|
"path": "src/integration-apply.ts",
|
|
@@ -2693,7 +2709,7 @@
|
|
|
2693
2709
|
},
|
|
2694
2710
|
{
|
|
2695
2711
|
"path": "src/loop-blobs.generated.ts",
|
|
2696
|
-
"sha256": "
|
|
2712
|
+
"sha256": "b7f5a095ecf30d657b387dcf04180840c62560857bdab0e863877de33f77486a"
|
|
2697
2713
|
},
|
|
2698
2714
|
{
|
|
2699
2715
|
"path": "src/loop-lint.ts",
|
|
@@ -2723,6 +2739,10 @@
|
|
|
2723
2739
|
"path": "src/managed-hooks.ts",
|
|
2724
2740
|
"sha256": "1f0be6f14dadbd303a7f5910731924b4fba25eca19beb72f4709e19f4175fa8f"
|
|
2725
2741
|
},
|
|
2742
|
+
{
|
|
2743
|
+
"path": "src/markdown-masker.ts",
|
|
2744
|
+
"sha256": "82c3c48c25f400f3a64d1caba3d47357f3db87460f0746f88706f901eb6ff689"
|
|
2745
|
+
},
|
|
2726
2746
|
{
|
|
2727
2747
|
"path": "src/mcp-scan.ts",
|
|
2728
2748
|
"sha256": "cb1c62c61408f32c35a08b34ed5e788bec5a5b33ff9c2a7f4449f9162b7b606d"
|
|
@@ -2733,7 +2753,7 @@
|
|
|
2733
2753
|
},
|
|
2734
2754
|
{
|
|
2735
2755
|
"path": "src/mutation-gate.ts",
|
|
2736
|
-
"sha256": "
|
|
2756
|
+
"sha256": "7d738e09de8c61c2876cdff8eb80173a8c5fec209854f9c4c9d39e16078e47af"
|
|
2737
2757
|
},
|
|
2738
2758
|
{
|
|
2739
2759
|
"path": "src/name-check.ts",
|
|
@@ -2933,7 +2953,7 @@
|
|
|
2933
2953
|
},
|
|
2934
2954
|
{
|
|
2935
2955
|
"path": "src/statusline.ts",
|
|
2936
|
-
"sha256": "
|
|
2956
|
+
"sha256": "6b979188d59b7467769301fbd5e2207d1268590ff4ec8a6ec56f1b0a8dd9cd27"
|
|
2937
2957
|
},
|
|
2938
2958
|
{
|
|
2939
2959
|
"path": "src/stem.ts",
|
|
@@ -2941,7 +2961,7 @@
|
|
|
2941
2961
|
},
|
|
2942
2962
|
{
|
|
2943
2963
|
"path": "src/store-counts.ts",
|
|
2944
|
-
"sha256": "
|
|
2964
|
+
"sha256": "1f89827ae775909abb094ccb471b30d7bd5e1783fa6e04e71fe27afa1a99f7f2"
|
|
2945
2965
|
},
|
|
2946
2966
|
{
|
|
2947
2967
|
"path": "src/store-guard.ts",
|
|
@@ -2961,7 +2981,7 @@
|
|
|
2961
2981
|
},
|
|
2962
2982
|
{
|
|
2963
2983
|
"path": "src/swarm-brief.ts",
|
|
2964
|
-
"sha256": "
|
|
2984
|
+
"sha256": "451f3419f8fafaef64cc319b155c84c0046cd7c3a0ad6ef2ef893d2e350a1feb"
|
|
2965
2985
|
},
|
|
2966
2986
|
{
|
|
2967
2987
|
"path": "src/sync-upstream.ts",
|
|
@@ -3025,5 +3045,5 @@
|
|
|
3025
3045
|
}
|
|
3026
3046
|
]
|
|
3027
3047
|
},
|
|
3028
|
-
"signature": "
|
|
3048
|
+
"signature": "xDbSIzIdSdjWSi41B4Yhj8lQ9BfdBz4X6+79STg5dE7/5aPJmQH1apABdu2o3dsB3kYT+rXQZOFuRAKJWcbnDA=="
|
|
3029
3049
|
}
|
package/README.md
CHANGED
|
@@ -3,6 +3,37 @@
|
|
|
3
3
|
Shared logic for the DZ harness — the engine behind `@dzhechkov/harness-cli`
|
|
4
4
|
and any other consumer.
|
|
5
5
|
|
|
6
|
+
`countLearningStoreRowsReadonly()` reports the mirror as TWO figures, deliberately not one.
|
|
7
|
+
`vectorRows` stays the whole mirror (lessons + backlog ideas + book units) because the store guard
|
|
8
|
+
reads it as an integrity signal against a recorded high-water mark; narrowing it would present a
|
|
9
|
+
healthy store as a collapse. `vectorLessonRows` counts mirrored LESSONS only (`dz-teach` and
|
|
10
|
+
`dz-learning`) and is the figure comparable with `lexicalRows`. It survives the metadata fallback
|
|
11
|
+
path whenever `task_type` is still readable, and is absent when the mirror cannot be decomposed —
|
|
12
|
+
absent means "unknown", which the panel must report rather than treat as agreement.
|
|
13
|
+
`statuslineData().patternMirror` is absent on equal counts AND when there is no mirror at all —
|
|
14
|
+
nothing to compare, and a permanently-lit indicator on every project without a vector tier would
|
|
15
|
+
carry no information. It is `{ state: 'different', lexical, vector }` on divergence, and
|
|
16
|
+
`{ state: 'unavailable' }` only when the mirror EXISTS but cannot be read or decomposed: that is a
|
|
17
|
+
tool failure and it is worth saying out loud. `statuslineData().brainKuCounts` carries the KU volume of each brain source in
|
|
18
|
+
brain order; an empty array means the volumes could not be listed, never that the sources are empty.
|
|
19
|
+
|
|
20
|
+
## Shared Markdown masking
|
|
21
|
+
|
|
22
|
+
`maskMarkdown` in `src/markdown-masker.ts` is the single implementation used by amendment-trace
|
|
23
|
+
and swarm-brief; the standalone plan-completeness gate carries a byte-identical `.mjs` copy.
|
|
24
|
+
It blanks fenced blocks and HTML comments while preserving UTF-16 offsets and newlines.
|
|
25
|
+
It is not a complete CommonMark parser. Reader policies remain explicit: amendment-trace restores
|
|
26
|
+
unclosed blocks; swarm-brief and K2 hide them through EOF. Brief also retains list barriers and
|
|
27
|
+
nested-comment ambiguity diagnostics through the line callbacks. Its `inlineComments` policy also
|
|
28
|
+
retains comments after prose, while paired backtick runs on the same line protect code-span delimiters.
|
|
29
|
+
|
|
30
|
+
The four-space indented-code gap is **not closed** for amendment-trace or K2 in this feature.
|
|
31
|
+
Its single implementation address is `src/markdown-masker.ts`. Contrary to the original plan's
|
|
32
|
+
premise, swarm-brief already masked indented code; its `indentedCode` option preserves that behavior.
|
|
33
|
+
The default remains off. Future work must decide the other readers' policy at this one address.
|
|
34
|
+
Regenerate every gate copy from this source and run `npx vitest run test/markdown-masker.test.ts`
|
|
35
|
+
from this package; byte equality is tested, including the installed and packaged gate locations.
|
|
36
|
+
|
|
6
37
|
## Per-turn admission debt (`session-retro.ts`)
|
|
7
38
|
|
|
8
39
|
The engine behind `dz retro` and `dz retro --scan-tail`: it turns a session transcript into events,
|
|
@@ -68,6 +99,34 @@ The engine is vendored (215 lines, MIT, zero imports) rather than imported: its
|
|
|
68
99
|
in `agentdb`'s exports map, and a ranking feature that quietly stops ranking looks exactly like one
|
|
69
100
|
that works.
|
|
70
101
|
|
|
102
|
+
## Per-stage Codex model matrix
|
|
103
|
+
|
|
104
|
+
With `primary: 'codex'`, the budget table always selects models by stage. The
|
|
105
|
+
optional `RoutingEnv.complexityTier` (`S`, `M`, `L`, or `XL`) affects only planning;
|
|
106
|
+
the workflow twins read it from `args.tier`. Omitting the tier selects S/M planning:
|
|
107
|
+
flagship (workhorse in eco). Explicit model overrides retain their existing precedence.
|
|
108
|
+
|
|
109
|
+
| Stage | Normal / hybrid Codex axis | Eco Codex axis |
|
|
110
|
+
|---|---|---|
|
|
111
|
+
| Router | Terra · medium | Luna · medium |
|
|
112
|
+
| Requirements | Sol · medium | Terra · medium |
|
|
113
|
+
| Research (evidence collection) | Terra · medium | Luna · medium |
|
|
114
|
+
| ADR | Astra · high | Sol · high |
|
|
115
|
+
| QCSD / ideation | Sol · high | Terra · high |
|
|
116
|
+
| DDD | Sol · high | Terra · high |
|
|
117
|
+
| Architecture | Astra · high | Sol · high |
|
|
118
|
+
| Plan · S/M | Sol · high | Terra · high |
|
|
119
|
+
| Plan · L/XL | Astra · high | Sol · high |
|
|
120
|
+
| Code | Sol · high | Terra · high |
|
|
121
|
+
| QE | Claude Sonnet (independent family) | Claude Sonnet (independent family) |
|
|
122
|
+
| Fleet | Sol · high | Terra · high |
|
|
123
|
+
|
|
124
|
+
`CODEX_TIERS` names roles: **premium** (`gpt-6-astra`) for consequential decisions;
|
|
125
|
+
**flagship** (`gpt-5.6-sol`) for direct work; **workhorse** (`gpt-5.6-terra`) for
|
|
126
|
+
evidence; **high-volume** (`gpt-5.6-luna`) for mechanics. Eco lowers each selected
|
|
127
|
+
Codex tier by one level; these are capability assignments, not measured prices.
|
|
128
|
+
Claude-primary cells and the cross-family QE rule retain their existing behavior.
|
|
129
|
+
|
|
71
130
|
## What it provides
|
|
72
131
|
|
|
73
132
|
### Evidence-gated companion integrations
|
|
@@ -111,12 +170,77 @@ explicit skills-only short circuit. `--no-verify` cannot authorize emission. A C
|
|
|
111
170
|
| `reqe` | `shouldEmitReqeDebt`, `buildReqeDebt`, `parseReqeDebt`, `buildReqeBrief`, `extractReportGrade`, `settleReqeDebt`, `renderReqeList`, `REQE_SCOPE` | The pure half of `dz reqe` — the re-QE debt ledger: when feature-adr's usage-adaptive override made Step-8 QE run on the coder's OWN family (the cross-model guard consciously suspended, FR-2.9), the run records a debt in `features/<slug>/.fa-state/reqe-due.json`. Emission is the NARROW case only (same-family + the ` (usage-switched)` label — never every switch, never the no-override Claude belt); settlement is FAIL-CLOSED: an existing, non-trivial report naming exactly ONE line-anchored grade (`GRADE A-F` boilerplate and `A through F` ranges refused, ambiguity refused), never the run's own 08_qe_report.md. Debts carry the emitting run's stamp so an old settlement never immunizes a fresh run. HONEST SCOPE printed everywhere: nothing re-runs QE automatically; the validator proves procedural soundness, not authorship. RU: снятый под лимитом гард «кодер не ревьюит сам себя» становится долгом на диске, а не памяткой |
|
|
112
171
|
| `trace-bundle` | `buildBundle`, `serializeBundle`, `parseBundle`, `selectLedgerRows`, `resolveRunMeta`, `foldAttribution`, `planImport` | The PURE half of `dz workflow-trace export/import` — one run's telemetry as one movable file. No fs, no clock, no randomness: it DECIDES and the caller does the I/O, which is what makes the fail-closed import testable without ever pointing a test at a real project (`planImport` returns the refusals as a VALUE, not as a side effect). Run addressing is the existing one, reused rather than rebuilt. Carries EVENTS, not aggregates: the single derived value travels alongside the records it was folded from, marked derived and naming its rule, so deleting it loses nothing but convenience — last-writer-wins by timestamp is a stated CHOICE, not a truth. `resolveRunMeta` reads the harness's own workflow records and judges each RECORD, not the slug: one historical sibling must not poison a usable one (MEASURED: 1 slug of 32 was being thrown away whole). Its reason set is closed and exactly one value is ACTIONABLE — `layout-unrecognised` means the harness layout changed; `predates-model-routing` means history. That split exists because the actionable reason fired on 3 of 32 slugs of untouched data, and an alarm that sounds on normal operation is not an alarm. RECOGNISE-OR-REFUSE: a record whose fields are gone yields a reason and NO data, never a half-parse that would report a model-blind run as model-known |
|
|
113
172
|
| `statusline` | `statuslineData`, `readFeatureAdrState`, `writeFeatureAdrState`, `writeFeatureAdrStateDetailed`, `renderFeatureAdrPhaseLine`, `featureAdrStateDir`, `featureAdrStatePath`, `FeatureAdrState`, `WriteFeatureAdrStateInput`, `WriteFeatureAdrStateResult` | The live self-learning panel behind `dz statusline`, plus the LIVE-RUN segment two producers share. Each producer owns a per-slug slot under `.dz/feature-adr/learning-state/` and stamps `kind: 'feature-adr' \| 'loop'` (absent ⇒ `feature-adr`, so legacy states keep their meaning); `readFeatureAdrState` arbitrates by `(kind rank, ts)` — a fresh `feature-adr` state OUTRANKS any `loop` state, because a generated loop writes zero recalled/stored counters far more often and plain freshest-wins would empty the panel of the very thing it exists to show. Candidates are stat'ed and ordered newest-first BEFORE the bounded slice, so truncation can only ever drop the least-recent slot — a cap over an unsorted listing could hide the live slot behind older ones (MEASURED: 81 slots, the live one invisible). The render path is strictly READ-ONLY (~300 ms budget); housekeeping — a 24 h prune — belongs to the write path alone. Hostile slugs are sanitized to one bounded filename component and cannot escape the directory. Nothing older than 30 minutes is surfaced |
|
|
173
|
+
|
|
174
|
+
`writeFeatureAdrStateDetailed` scopes its monotonic guard by equal, non-empty `runId` values;
|
|
175
|
+
different ids open a new phase and two absent ids retain legacy behavior. The staged workflow mints
|
|
176
|
+
and carries such an id in its shell command, and the CLI adapter forwards every non-empty `--run-id`
|
|
177
|
+
into this core input. Empty or omitted values are still absent from state, preserving the legacy
|
|
178
|
+
compatibility path.
|
|
114
179
|
| `operations` | `runInit`, `runSync`, `runVerify`, `runDoctor` | The harness operations, returning structured reports. `InitReport` and `SyncReport` carry an additive, always-present `failures: readonly SkillLoadFailure[]` (empty when nothing failed): a single unloadable `SKILL.md` used to throw out of the whole loop, so `dz init`/`dz install`/`dz sync` reported NOTHING at all. They now skip, collect and name — skipping without a record would only trade a loud failure for a silent one. `runDoctor` is deliberately untouched: it was never a throw site, and a negative test asserts it gained no `failures` field |
|
|
115
180
|
| `release` | `collectPackageFacts`, `selectAffectedPackages`, `planReleaseGates`, `classifyGateExecutions`, `buildFailureIssue`, `firstOutputLine` | Pure verified-release engine behind `dz release`: plans 4 HARD gates (tests / `pnpm audit --prod` / `node --check` / bin smoke-boot) as DATA and classifies injected results fail-closed — an unbuilt package (declared `build` script, no dist JS) is a `MISSING_DIST` failure, a template-only pack is a named `SKIP_NO_ARTIFACTS` skip, `selectAffectedPackages` fail-opens to the full set when the changed-file list is unavailable |
|
|
116
181
|
| `parity` | `TARGET_CAPABILITIES`, `PARITY_FEATURES`, `computeParity`, `buildParityMatrix` | Declarative target-parity model behind `dz parity`: verified capability flags per target × feature FORMS with requirements; the feature×target matrix is always COMPUTED (never hand-written), and the model must classify exactly `TARGET_NAMES` — an unclassified new target refuses to compile |
|
|
117
182
|
| `delivery-check` | `PLANE_SPECS`, `collectDeliveryFacts`, `planDeliveryCheck`, `renderDeliveryBrief`, `classifyDelivery`, `renderDeliveryReview` | Pure portable Step-10 Delivery Gate engine behind `dz delivery-check`: the four review planes as shared DATA (prose-identical to the workflow's inline `planePrompts`, held by a drift-guard test), a deterministic plan/classify over injected facts+findings, and the FAIL-CLOSED hand-off verdict — `ready` only off complete, cross-validated, clean evidence; classification reads only numeric severity counts so injected instruction-like text cannot move the verdict. No `child_process`; the only fs is `existsSync` in `collectDeliveryFacts` |
|
|
118
183
|
| `skills-verify` | `scanSkillsLayout`, `parseInitFacts`, `verifyRegistration`, `registrationExitCode`, `renderRegistrationReport` | Pure registration-gate engine behind `dz skills-verify`: a static scan of `.claude/skills/` (which dirs CAN register + the shapes that never can) and a **sealed** verdict over one atomic evidence bundle (`RegistrationEvidence` = the whole scan + a tagged probe result + a provenance record). Cardinality and parse integrity are derived INSIDE from the raw `system/init` stream, so no caller can omit or falsify them. FAIL-CLOSED: an unobservable registration is `inconclusive`, never `pass`; a plugin-shaped container is advisory and its fate is decided by whether the session says that plugin LOADED, never by the layout. Also exports `findNonRegistrableSkillDirs` — the publish-time guard fact behind the `skills-registrable` rule (a pack counts only if it already has one registrable skill; a dir is flagged only when a `SKILL.md` exists inside but below depth 1 — the discriminator was chosen after MEASURING the real packs, since a naive rule flagged ~40 healthy dirs across 9 npx toolkits). Plugin containers are attributed by `init.plugins[].path`, never by directory name; a container whose plugin did not load FAILS, one that loaded PASSES with an advisory that its individual skills are unverified (modelling Claude Code's command-name resolution produced a new wrong verdict in every review round — the gap is disclosed, not guessed). Sees SLASH COMMANDS too: `InitFacts.slash_commands` carries the session's command listing (MEASURED on Claude Code 2.1.233 — `system/init` emits `slash_commands`, and a plugin command registers as `<plugin>:<file basename>`, not as its frontmatter name), `RegistrationEvidence.expectedCommands` names what must appear, and an ABSENT `slash_commands` key is `inconclusive` exactly like an absent `skills` key — never an empty list, because schema drift and "the commands did not load" are different facts. `declaredPluginSurface(dir)` derives the expected names from a plugin's own manifest so a gate run cannot drift from the manifest it checks, and returns `null` (never an empty, vacuously-passing expectation) for an unreadable one. Also ships the ADVISORY content layer (`buildContentProbePrompt` / `classifyContentProbe`): registration is not usability, so an extra model turn asks for a VERBATIM quote as evidence — advisory by construction, it never gates. No `child_process` — the CLI owns the probe |
|
|
119
184
|
|
|
185
|
+
### Mutation registry: entry-scoped refusal and declared gaps
|
|
186
|
+
|
|
187
|
+
Run outcomes distinguish **green**, **tests-failed**, **runner-infrastructure**, and
|
|
188
|
+
**unknown-nonzero**. The existing API keeps its names: the exit code identifies green;
|
|
189
|
+
`classifyRunFailure(output)` classifies nonzero runs as `assertions` (tests-failed),
|
|
190
|
+
`runner-infrastructure`, or `unrecognised` (unknown-nonzero), with `file-load` retained for
|
|
191
|
+
collection/import failures. Callers must check the exit code before classifying a red run.
|
|
192
|
+
|
|
193
|
+
`runner-infrastructure` requires both an explicitly parsed zero failing-test count and the
|
|
194
|
+
Vitest pattern `[vitest-worker]: Timeout calling "<method>"`. Its closed reason is
|
|
195
|
+
`worker-rpc-timeout`; evidence names the actual RPC method. A missing count or a zero without
|
|
196
|
+
that pattern remains `unrecognised`. Existing assertion and collection checks take precedence;
|
|
197
|
+
the `node --test` / TAP classification is unchanged.
|
|
198
|
+
|
|
199
|
+
**`runner-infrastructure` is NOT green.** It renames a red run, it never passes one: a run that
|
|
200
|
+
carries it still fails, and no caller may treat it as success. The point is that the operator is
|
|
201
|
+
told *what* broke — the runner's own worker RPC, with zero failing tests — instead of reading a
|
|
202
|
+
bare nonzero exit code and guessing. `discrimination-gate` deliberately narrows the new kind back
|
|
203
|
+
to `unrecognised` at its intake: that gate has no infrastructure policy, so its behaviour stays
|
|
204
|
+
byte-identical, and the narrowing is a single commented line rather than a silent widening of its
|
|
205
|
+
own `EvidenceFailureKind` vocabulary.
|
|
206
|
+
|
|
207
|
+
**Infrastructure is not green.** The baseline and restored-baseline reports name the cause
|
|
208
|
+
through `attributeBaselineRedness`; the baseline stays an error and the restored run stays
|
|
209
|
+
`INCONCLUSIVE`. Under mutation, the parsed zero fails the minimum-failing-test contract
|
|
210
|
+
(`BELOW_MIN`), never `PROVEN`. Unknown nonzero runs also remain failures. This identifies a
|
|
211
|
+
runner timeout; it does not fix the contention that caused it or suppress unhandled errors.
|
|
212
|
+
|
|
213
|
+
`parseMutationRegistry` keeps valid mutation entries executable when a neighbouring entry is malformed.
|
|
214
|
+
The malformed row becomes `ENTRY_INVALID`, is counted as `entryInvalid`, and still makes the aggregate
|
|
215
|
+
gate verdict fail. Invalid JSON or an invalid registry envelope remains a setup error; entry-scoped
|
|
216
|
+
handling does not reinterpret a document that cannot be parsed.
|
|
217
|
+
|
|
218
|
+
An unexecutable protection can be declared in the registry without supplying a mutation:
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"id": "workflow-outside-package",
|
|
223
|
+
"property": "The workflow keeps its cross-family QE guard.",
|
|
224
|
+
"file": "../../../.claude/workflows/feature-adr.js",
|
|
225
|
+
"uncoverable": true,
|
|
226
|
+
"reason": "The mutation executor is confined to its package scratch copy."
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
The reason must be a non-empty string. A reason-bearing declaration becomes `COVERAGE_GAP`, is counted
|
|
231
|
+
separately as `coverageGaps`, runs no mutation, and — since the owner's decision of 2026-09-09
|
|
232
|
+
(option A) — does **not** fail the aggregate verdict. A declared gap is a DEBT, not a breakage: some
|
|
233
|
+
protections are uncoverable by construction (the orchestrator script lives outside every package),
|
|
234
|
+
so failing on them would pin this package's gate red forever, and a lamp that is always on is read
|
|
235
|
+
exactly like a lamp that is off. What the mechanism owes is COUNTABILITY, and the summary delivers
|
|
236
|
+
it: gaps get their own line, their own per-entry verdict, and a `⚠` marker distinct from a failure's
|
|
237
|
+
`✗`, so a gap can never be mistaken for a proven protection. `ENTRY_INVALID` still fails — a
|
|
238
|
+
malformed entry is a broken claim rather than a declared one, and its author can fix it today.
|
|
239
|
+
This is an author's
|
|
240
|
+
visible declaration, not measured proof that the stated reason is correct. In particular, declaring an
|
|
241
|
+
outside-package file does not make that path mutable: an ordinary mutation entry with the same path is
|
|
242
|
+
still `ENTRY_INVALID`, and the executor's package boundary is unchanged.
|
|
243
|
+
|
|
120
244
|
## The additive guarantee
|
|
121
245
|
|
|
122
246
|
`applyEmitResult` is the only part of the harness that writes to disk. It is
|
|
@@ -310,6 +434,23 @@ stderr). A decider that fails to load now prints ONE `DZ-DESTRUCTIVE-WARN: guard
|
|
|
310
434
|
<reason>` line and records `destructive-not-loaded` in `helper-errors.jsonl`; it still fails open,
|
|
311
435
|
but never quietly.
|
|
312
436
|
|
|
437
|
+
The Claude hook has three operating states:
|
|
438
|
+
|
|
439
|
+
| State | Behaviour |
|
|
440
|
+
| --- | --- |
|
|
441
|
+
| Full: the decider loads and returns a readable verdict | Existing policy: refuse with exit 2, allow silently, or pass an undecidable command with its warning and limits. The built-in literal check does not participate. |
|
|
442
|
+
| Narrow: no decider loads | Refuse textual literal recursive `rm` commands (for example `rm -rf .dz`); pass everything else with exactly one `DZ-DESTRUCTIVE-WARN:` stderr line on **every** invocation, including repeated commands. The line explicitly names partial protection, the observed loading failure, and how to restore full protection. Bootstrap commands such as `npm ci`, `npm install`, `npm run build`, and `pnpm install` can run. |
|
|
443
|
+
| Runtime failure: loading unexpectedly rejects, or the loaded decider throws/returns an unreadable verdict | Existing behaviour: exit 0 with a warning; this is not an established safety verdict. |
|
|
444
|
+
|
|
445
|
+
The narrow check recognises the literal `rm` word followed by short options containing `r`/`R`
|
|
446
|
+
or `--recursive`. It is a textual pattern, not a shell parser: quoting, substitutions and nested
|
|
447
|
+
shell constructs are not interpreted, so crafted deletion can pass and quoted command-like text
|
|
448
|
+
can be refused. Non-recursive deletion such as `rm .dz/agentdb.db` also passes in this state.
|
|
449
|
+
Missing build output does **not** imply that the project contains no valuable data. Full protection
|
|
450
|
+
requires a working decider: build harness-core in this repository, or reinstall the CLI and repeat
|
|
451
|
+
`dz setup --target claude-code` for a consumer installation. The Codex helper's loading-failure
|
|
452
|
+
behaviour described above is unchanged.
|
|
453
|
+
|
|
313
454
|
The registry currently contains 121 `guard-*` entries. R17's exhaustive anchor census identifies
|
|
314
455
|
the anchors displaced by the source refactor; new/repointed entries are staged separately under
|
|
315
456
|
`scratchpad/` until the owner lands the registry mutation. `dz mutation-gate` proves each accepted
|
|
@@ -477,6 +618,25 @@ transition (plus a refusal REASON the CLI can print), and `kind`-carrying ledger
|
|
|
477
618
|
to every cost reader (`planLedgerBackfill`, `selectLedgerRows`, `assembleTimeline`). See the phase
|
|
478
619
|
telemetry paragraph above. Seven named guards in this package are `DEFENDED` under `dz mutation-gate`.
|
|
479
620
|
|
|
621
|
+
`0.8.22` — **the run verdict, the routing table, the panel and the registry all stopped overstating
|
|
622
|
+
what they know.** `classifyRunFailure` gains the kind `runner-infrastructure` with the closed reason
|
|
623
|
+
`worker-rpc-timeout`: it is claimed only when the parsed failing-test count is exactly zero AND the
|
|
624
|
+
runner's own worker-RPC pattern is present, so a nonzero exit with no explanation stays
|
|
625
|
+
`unrecognised` rather than being guessed at — and the new kind is narrowed back to `unrecognised` at
|
|
626
|
+
`discrimination-gate`'s intake by one commented line, because that gate has no policy for it and its
|
|
627
|
+
behaviour must not change. `budgetTable`'s Codex half is now PER-STAGE (premium for ADR and
|
|
628
|
+
architecture, flagship for direct work, workhorse for evidence gathering), with `CODEX_TIERS.premium
|
|
629
|
+
= gpt-6-astra` and an optional `RoutingEnv.complexityTier` whose absence means S/M rather than
|
|
630
|
+
switching the matrix off. `countLearningStoreRowsReadonly` reports the mirror as TWO figures:
|
|
631
|
+
`vectorRows` stays the whole mirror because the store guard reads it as an integrity signal against
|
|
632
|
+
a recorded high-water mark, while the new `vectorLessonRows` is the lesson-only count the panel
|
|
633
|
+
compares with the lexical tier. `statuslineData` gains `patternMirror` (absent on parity AND when
|
|
634
|
+
there is no mirror at all; `unavailable` only when a mirror EXISTS and cannot be read or decomposed)
|
|
635
|
+
and `brainKuCounts`. Registry entries may declare `uncoverable: true` with a mandatory `reason`:
|
|
636
|
+
such an entry becomes `COVERAGE_GAP`, is counted separately, carries a `⚠` marker distinct from a
|
|
637
|
+
failure's `✗`, and — by owner decision — does not fail the aggregate verdict, while `ENTRY_INVALID`
|
|
638
|
+
still does.
|
|
639
|
+
|
|
480
640
|
Unreleased — adds the pure `course-staleness` classifier. Missing provenance is explicitly
|
|
481
641
|
`E2 UNSTAMPED` and is tested not to equal `S0 SHIPPED`; version ordering uses the existing semver
|
|
482
642
|
comparator while all registry and filesystem I/O remains outside the classifier.
|
|
@@ -950,6 +1110,9 @@ appendTransition(root, { id, from: 'new', to: 'shipped', ts, by: 'backlog ship'
|
|
|
950
1110
|
Причины первых двух групп вычисляются резолвером; причины последней группы описывают выбор текущей
|
|
951
1111
|
ступени, включая откаты, второй precision-проход, challenge panel и learned-cost. `fallback-rung`
|
|
952
1112
|
намеренно не пересказывает исход предыдущей ступени: тот уже принадлежит её собственной строке outcome.
|
|
1113
|
+
В staged workflow общий блок Claude-плана задаёт причину условно на шве dispatch: только
|
|
1114
|
+
`planIsCodex === true` означает, что перед ним уже была Codex-попытка и потому ставится
|
|
1115
|
+
`fallback-rung`; при первичном выборе Claude сохраняется исходная причина маршрута.
|
|
953
1116
|
Отдельно стоит `codex-refused-before-dispatch`: id ответил на пробу, но ступень так и не построила
|
|
954
1117
|
диспатч (непригодный ref области ревью, небезопасный id, отклонённый exec-план). Ни один агент не
|
|
955
1118
|
запускался, поэтому следующая ступень — НЕ `fallback-after-no-deliverable`: та причина утверждает, что
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amendment-trace.d.ts","sourceRoot":"","sources":["../src/amendment-trace.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"amendment-trace.d.ts","sourceRoot":"","sources":["../src/amendment-trace.ts"],"names":[],"mappings":"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"}
|