@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/sbom.json
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"hashes": [
|
|
26
26
|
{
|
|
27
27
|
"alg": "SHA-256",
|
|
28
|
-
"content": "
|
|
28
|
+
"content": "113ecbe403e5275826354f6d5ff12b0e5fb18a7132dc7c6fccd29f06a8afd2e4"
|
|
29
29
|
}
|
|
30
30
|
]
|
|
31
31
|
},
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
"hashes": [
|
|
166
166
|
{
|
|
167
167
|
"alg": "SHA-256",
|
|
168
|
-
"content": "
|
|
168
|
+
"content": "d67d97f37d806a4df5d0d99b9b3f1c2861fcf9f88c051f7fecfbf516bdaf9f88"
|
|
169
169
|
}
|
|
170
170
|
]
|
|
171
171
|
},
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
"hashes": [
|
|
176
176
|
{
|
|
177
177
|
"alg": "SHA-256",
|
|
178
|
-
"content": "
|
|
178
|
+
"content": "7d8155efb51768f3bab376e31b45cb1c5c0b8e3d8e368ed4ecd9fc71500cdb0d"
|
|
179
179
|
}
|
|
180
180
|
]
|
|
181
181
|
},
|
|
@@ -185,7 +185,7 @@
|
|
|
185
185
|
"hashes": [
|
|
186
186
|
{
|
|
187
187
|
"alg": "SHA-256",
|
|
188
|
-
"content": "
|
|
188
|
+
"content": "a91f8c4ff7e19875b9b9972386e4a7178d2cf1cc5b79e20402c72285c28b5eaa"
|
|
189
189
|
}
|
|
190
190
|
]
|
|
191
191
|
},
|
|
@@ -875,7 +875,7 @@
|
|
|
875
875
|
"hashes": [
|
|
876
876
|
{
|
|
877
877
|
"alg": "SHA-256",
|
|
878
|
-
"content": "
|
|
878
|
+
"content": "317a92d035af4867902a3307f2c929ea3e37ac285295aa2d88e2502fddd02e91"
|
|
879
879
|
}
|
|
880
880
|
]
|
|
881
881
|
},
|
|
@@ -885,7 +885,7 @@
|
|
|
885
885
|
"hashes": [
|
|
886
886
|
{
|
|
887
887
|
"alg": "SHA-256",
|
|
888
|
-
"content": "
|
|
888
|
+
"content": "07ccdd6b48acfc3fa11ec2b34ff59a8090881e3d174e56a41ec846c8fa861bc1"
|
|
889
889
|
}
|
|
890
890
|
]
|
|
891
891
|
},
|
|
@@ -895,7 +895,7 @@
|
|
|
895
895
|
"hashes": [
|
|
896
896
|
{
|
|
897
897
|
"alg": "SHA-256",
|
|
898
|
-
"content": "
|
|
898
|
+
"content": "dc7407b60bd01c77b09b818d5640cbf46175551b0029700b3a7cc9da57471fbd"
|
|
899
899
|
}
|
|
900
900
|
]
|
|
901
901
|
},
|
|
@@ -905,7 +905,7 @@
|
|
|
905
905
|
"hashes": [
|
|
906
906
|
{
|
|
907
907
|
"alg": "SHA-256",
|
|
908
|
-
"content": "
|
|
908
|
+
"content": "b04d98605560396754367d0c32a651d2beb46b43651105e91c1a3b5c14d42ec4"
|
|
909
909
|
}
|
|
910
910
|
]
|
|
911
911
|
},
|
|
@@ -1565,7 +1565,7 @@
|
|
|
1565
1565
|
"hashes": [
|
|
1566
1566
|
{
|
|
1567
1567
|
"alg": "SHA-256",
|
|
1568
|
-
"content": "
|
|
1568
|
+
"content": "a197e981c75f2d6d43f9b2f8cb63210d2db724d31a049b2c07b5baf7cd04b458"
|
|
1569
1569
|
}
|
|
1570
1570
|
]
|
|
1571
1571
|
},
|
|
@@ -1575,7 +1575,7 @@
|
|
|
1575
1575
|
"hashes": [
|
|
1576
1576
|
{
|
|
1577
1577
|
"alg": "SHA-256",
|
|
1578
|
-
"content": "
|
|
1578
|
+
"content": "e63b041cc273258ba086fd08f4895cd14037e81e0af5f8ccbad4727034ed466b"
|
|
1579
1579
|
}
|
|
1580
1580
|
]
|
|
1581
1581
|
},
|
|
@@ -1585,7 +1585,7 @@
|
|
|
1585
1585
|
"hashes": [
|
|
1586
1586
|
{
|
|
1587
1587
|
"alg": "SHA-256",
|
|
1588
|
-
"content": "
|
|
1588
|
+
"content": "670bec50dd1b6f13ee2d625e1b212282f901e83ff145b6a3eef72316a6e33175"
|
|
1589
1589
|
}
|
|
1590
1590
|
]
|
|
1591
1591
|
},
|
|
@@ -1995,7 +1995,7 @@
|
|
|
1995
1995
|
"hashes": [
|
|
1996
1996
|
{
|
|
1997
1997
|
"alg": "SHA-256",
|
|
1998
|
-
"content": "
|
|
1998
|
+
"content": "7d04dd31aab709d02be558af81925bbd07474ee2f1d0f442f3ddcabf21e8b522"
|
|
1999
1999
|
}
|
|
2000
2000
|
]
|
|
2001
2001
|
},
|
|
@@ -2005,7 +2005,7 @@
|
|
|
2005
2005
|
"hashes": [
|
|
2006
2006
|
{
|
|
2007
2007
|
"alg": "SHA-256",
|
|
2008
|
-
"content": "
|
|
2008
|
+
"content": "bdc42a00229596a36424f5f72c3579a671f120d98a38b32e86a7755c2f0818a8"
|
|
2009
2009
|
}
|
|
2010
2010
|
]
|
|
2011
2011
|
},
|
|
@@ -2015,7 +2015,7 @@
|
|
|
2015
2015
|
"hashes": [
|
|
2016
2016
|
{
|
|
2017
2017
|
"alg": "SHA-256",
|
|
2018
|
-
"content": "
|
|
2018
|
+
"content": "359aa0bfe40dbc5c6f757f1288d4f873bad4f9549ec5ffc6b6bf9fad778f390f"
|
|
2019
2019
|
}
|
|
2020
2020
|
]
|
|
2021
2021
|
},
|
|
@@ -2025,7 +2025,7 @@
|
|
|
2025
2025
|
"hashes": [
|
|
2026
2026
|
{
|
|
2027
2027
|
"alg": "SHA-256",
|
|
2028
|
-
"content": "
|
|
2028
|
+
"content": "de4b34a133e7fc0389606e8203f8a622f09cbb55be8ec2c1a46a76b6b2eca35e"
|
|
2029
2029
|
}
|
|
2030
2030
|
]
|
|
2031
2031
|
},
|
|
@@ -2275,7 +2275,7 @@
|
|
|
2275
2275
|
"hashes": [
|
|
2276
2276
|
{
|
|
2277
2277
|
"alg": "SHA-256",
|
|
2278
|
-
"content": "
|
|
2278
|
+
"content": "1f29a6394fd77db7aa6e6e123a9e1cdac934a42be6f7c8408601d1974294e30a"
|
|
2279
2279
|
}
|
|
2280
2280
|
]
|
|
2281
2281
|
},
|
|
@@ -2285,7 +2285,7 @@
|
|
|
2285
2285
|
"hashes": [
|
|
2286
2286
|
{
|
|
2287
2287
|
"alg": "SHA-256",
|
|
2288
|
-
"content": "
|
|
2288
|
+
"content": "486ddf11b5ac451d18173d7e6105746ae7ea8491b062e498ee05ac69dfafa2dd"
|
|
2289
2289
|
}
|
|
2290
2290
|
]
|
|
2291
2291
|
},
|
|
@@ -2295,7 +2295,7 @@
|
|
|
2295
2295
|
"hashes": [
|
|
2296
2296
|
{
|
|
2297
2297
|
"alg": "SHA-256",
|
|
2298
|
-
"content": "
|
|
2298
|
+
"content": "3a3b54eb0662739c5996c24b2e9eb7891d75de80592a92718f222b3ab854d8f4"
|
|
2299
2299
|
}
|
|
2300
2300
|
]
|
|
2301
2301
|
},
|
|
@@ -2305,7 +2305,7 @@
|
|
|
2305
2305
|
"hashes": [
|
|
2306
2306
|
{
|
|
2307
2307
|
"alg": "SHA-256",
|
|
2308
|
-
"content": "
|
|
2308
|
+
"content": "c0c05215db1d6372b042870ac9f8530ad7d4e4789638553a32622d7636a7e84f"
|
|
2309
2309
|
}
|
|
2310
2310
|
]
|
|
2311
2311
|
},
|
|
@@ -2735,7 +2735,7 @@
|
|
|
2735
2735
|
"hashes": [
|
|
2736
2736
|
{
|
|
2737
2737
|
"alg": "SHA-256",
|
|
2738
|
-
"content": "
|
|
2738
|
+
"content": "48397bdb099841229022125e0f72e35379412273e3db089e8537560f752d6595"
|
|
2739
2739
|
}
|
|
2740
2740
|
]
|
|
2741
2741
|
},
|
|
@@ -2745,7 +2745,7 @@
|
|
|
2745
2745
|
"hashes": [
|
|
2746
2746
|
{
|
|
2747
2747
|
"alg": "SHA-256",
|
|
2748
|
-
"content": "
|
|
2748
|
+
"content": "86b6632133e8b092fb7445b5076595376fbe01cc16ca72e00d7e1ac5ba770e90"
|
|
2749
2749
|
}
|
|
2750
2750
|
]
|
|
2751
2751
|
},
|
|
@@ -3029,6 +3029,46 @@
|
|
|
3029
3029
|
}
|
|
3030
3030
|
]
|
|
3031
3031
|
},
|
|
3032
|
+
{
|
|
3033
|
+
"type": "file",
|
|
3034
|
+
"name": "dist/markdown-masker.d.ts",
|
|
3035
|
+
"hashes": [
|
|
3036
|
+
{
|
|
3037
|
+
"alg": "SHA-256",
|
|
3038
|
+
"content": "02d6eeb4febec6d8d1c8adcdc371a14d17b79d2b2f1ab9e5dea120a9395bb46b"
|
|
3039
|
+
}
|
|
3040
|
+
]
|
|
3041
|
+
},
|
|
3042
|
+
{
|
|
3043
|
+
"type": "file",
|
|
3044
|
+
"name": "dist/markdown-masker.d.ts.map",
|
|
3045
|
+
"hashes": [
|
|
3046
|
+
{
|
|
3047
|
+
"alg": "SHA-256",
|
|
3048
|
+
"content": "f33d6580baf32166d600113973fd3d1598904feb0eda56fc849de8945376c0b3"
|
|
3049
|
+
}
|
|
3050
|
+
]
|
|
3051
|
+
},
|
|
3052
|
+
{
|
|
3053
|
+
"type": "file",
|
|
3054
|
+
"name": "dist/markdown-masker.js",
|
|
3055
|
+
"hashes": [
|
|
3056
|
+
{
|
|
3057
|
+
"alg": "SHA-256",
|
|
3058
|
+
"content": "7c48423e5fe6e342e948e38f8a24a9f8139161a1feba9773eff0dbd1e63dc67a"
|
|
3059
|
+
}
|
|
3060
|
+
]
|
|
3061
|
+
},
|
|
3062
|
+
{
|
|
3063
|
+
"type": "file",
|
|
3064
|
+
"name": "dist/markdown-masker.js.map",
|
|
3065
|
+
"hashes": [
|
|
3066
|
+
{
|
|
3067
|
+
"alg": "SHA-256",
|
|
3068
|
+
"content": "76957993ae66b90a31413b03bb1029b3670a3a8832ad4d6d06008e459f46f2c9"
|
|
3069
|
+
}
|
|
3070
|
+
]
|
|
3071
|
+
},
|
|
3032
3072
|
{
|
|
3033
3073
|
"type": "file",
|
|
3034
3074
|
"name": "dist/mcp-scan.d.ts",
|
|
@@ -3115,7 +3155,7 @@
|
|
|
3115
3155
|
"hashes": [
|
|
3116
3156
|
{
|
|
3117
3157
|
"alg": "SHA-256",
|
|
3118
|
-
"content": "
|
|
3158
|
+
"content": "a8ab6e6aaf9359630b3c19e5939be4596ce1aea5cf6c550e8222191897f6cde2"
|
|
3119
3159
|
}
|
|
3120
3160
|
]
|
|
3121
3161
|
},
|
|
@@ -3125,7 +3165,7 @@
|
|
|
3125
3165
|
"hashes": [
|
|
3126
3166
|
{
|
|
3127
3167
|
"alg": "SHA-256",
|
|
3128
|
-
"content": "
|
|
3168
|
+
"content": "860db6313c7933e3dd2ea25946bb3a4c7353f0e847e86f101877b00db46dc9a7"
|
|
3129
3169
|
}
|
|
3130
3170
|
]
|
|
3131
3171
|
},
|
|
@@ -3135,7 +3175,7 @@
|
|
|
3135
3175
|
"hashes": [
|
|
3136
3176
|
{
|
|
3137
3177
|
"alg": "SHA-256",
|
|
3138
|
-
"content": "
|
|
3178
|
+
"content": "05ba52d62819411e4201b619edc1ccf3512122858c39e88c6e5a454115548415"
|
|
3139
3179
|
}
|
|
3140
3180
|
]
|
|
3141
3181
|
},
|
|
@@ -3145,7 +3185,7 @@
|
|
|
3145
3185
|
"hashes": [
|
|
3146
3186
|
{
|
|
3147
3187
|
"alg": "SHA-256",
|
|
3148
|
-
"content": "
|
|
3188
|
+
"content": "60f4b3bb18fc211a31a722622521de5e114f13f5f8fc3143fc2225b7a4e6d7c4"
|
|
3149
3189
|
}
|
|
3150
3190
|
]
|
|
3151
3191
|
},
|
|
@@ -5115,7 +5155,7 @@
|
|
|
5115
5155
|
"hashes": [
|
|
5116
5156
|
{
|
|
5117
5157
|
"alg": "SHA-256",
|
|
5118
|
-
"content": "
|
|
5158
|
+
"content": "d82a3f31dd26be6bbecb41c52c3c3c211f3ed5a79602dddfe05c6af5dbe3e695"
|
|
5119
5159
|
}
|
|
5120
5160
|
]
|
|
5121
5161
|
},
|
|
@@ -5125,7 +5165,7 @@
|
|
|
5125
5165
|
"hashes": [
|
|
5126
5166
|
{
|
|
5127
5167
|
"alg": "SHA-256",
|
|
5128
|
-
"content": "
|
|
5168
|
+
"content": "4538de91f604d0881db5c53d9010560be76bd7123133db795bd9a76568b145f4"
|
|
5129
5169
|
}
|
|
5130
5170
|
]
|
|
5131
5171
|
},
|
|
@@ -5135,7 +5175,7 @@
|
|
|
5135
5175
|
"hashes": [
|
|
5136
5176
|
{
|
|
5137
5177
|
"alg": "SHA-256",
|
|
5138
|
-
"content": "
|
|
5178
|
+
"content": "c0f939b0a5f739c9aadec2a8db0cf3320d14be55e09f1397faf47cca5ba326f1"
|
|
5139
5179
|
}
|
|
5140
5180
|
]
|
|
5141
5181
|
},
|
|
@@ -5145,7 +5185,7 @@
|
|
|
5145
5185
|
"hashes": [
|
|
5146
5186
|
{
|
|
5147
5187
|
"alg": "SHA-256",
|
|
5148
|
-
"content": "
|
|
5188
|
+
"content": "c8a91949dc870bd7bd7b0aff06160dc4accc4c5549361d12aa2a55d5df4394d8"
|
|
5149
5189
|
}
|
|
5150
5190
|
]
|
|
5151
5191
|
},
|
|
@@ -5195,7 +5235,7 @@
|
|
|
5195
5235
|
"hashes": [
|
|
5196
5236
|
{
|
|
5197
5237
|
"alg": "SHA-256",
|
|
5198
|
-
"content": "
|
|
5238
|
+
"content": "60d14ae5aa2dc804f0ad66f57f513f67b7a6bb687d23bb77c71ec977bec32ece"
|
|
5199
5239
|
}
|
|
5200
5240
|
]
|
|
5201
5241
|
},
|
|
@@ -5205,7 +5245,7 @@
|
|
|
5205
5245
|
"hashes": [
|
|
5206
5246
|
{
|
|
5207
5247
|
"alg": "SHA-256",
|
|
5208
|
-
"content": "
|
|
5248
|
+
"content": "ab483d4cd8226b3511d77d9fa7cf9147a5f8d369e74feb36fc3af874a962da90"
|
|
5209
5249
|
}
|
|
5210
5250
|
]
|
|
5211
5251
|
},
|
|
@@ -5215,7 +5255,7 @@
|
|
|
5215
5255
|
"hashes": [
|
|
5216
5256
|
{
|
|
5217
5257
|
"alg": "SHA-256",
|
|
5218
|
-
"content": "
|
|
5258
|
+
"content": "5d531906c4877ac3b2ea3eb3e811701755dad32fcf440918b751325f0c12ce1e"
|
|
5219
5259
|
}
|
|
5220
5260
|
]
|
|
5221
5261
|
},
|
|
@@ -5225,7 +5265,7 @@
|
|
|
5225
5265
|
"hashes": [
|
|
5226
5266
|
{
|
|
5227
5267
|
"alg": "SHA-256",
|
|
5228
|
-
"content": "
|
|
5268
|
+
"content": "5dcebc7e2efca9aef03cdbad8d7b7df9656b04aa543132677deec2a1ad6bc7d7"
|
|
5229
5269
|
}
|
|
5230
5270
|
]
|
|
5231
5271
|
},
|
|
@@ -5405,7 +5445,7 @@
|
|
|
5405
5445
|
"hashes": [
|
|
5406
5446
|
{
|
|
5407
5447
|
"alg": "SHA-256",
|
|
5408
|
-
"content": "
|
|
5448
|
+
"content": "2470e1fb045836c22745f1c506652a216167f33ffe00e6cc7bffcda31201c27c"
|
|
5409
5449
|
}
|
|
5410
5450
|
]
|
|
5411
5451
|
},
|
|
@@ -5415,7 +5455,7 @@
|
|
|
5415
5455
|
"hashes": [
|
|
5416
5456
|
{
|
|
5417
5457
|
"alg": "SHA-256",
|
|
5418
|
-
"content": "
|
|
5458
|
+
"content": "fe76974ae87bbb1ed5fa6306d97f186d27fa03303ff3d3af8215b25d7b69cc7f"
|
|
5419
5459
|
}
|
|
5420
5460
|
]
|
|
5421
5461
|
},
|
|
@@ -5425,7 +5465,7 @@
|
|
|
5425
5465
|
"hashes": [
|
|
5426
5466
|
{
|
|
5427
5467
|
"alg": "SHA-256",
|
|
5428
|
-
"content": "
|
|
5468
|
+
"content": "4d90104712c5fc017249ef488494200d6338d065734abed3dd1701770942e8f4"
|
|
5429
5469
|
}
|
|
5430
5470
|
]
|
|
5431
5471
|
},
|
|
@@ -6039,7 +6079,7 @@
|
|
|
6039
6079
|
},
|
|
6040
6080
|
{
|
|
6041
6081
|
"name": "dz:canonical-json-sha256-v2",
|
|
6042
|
-
"value": "
|
|
6082
|
+
"value": "1e9748de4c4d4d9811e919cba7b474764854164546b88b345c30afbda34be75f"
|
|
6043
6083
|
}
|
|
6044
6084
|
]
|
|
6045
6085
|
},
|
|
@@ -6079,7 +6119,7 @@
|
|
|
6079
6119
|
"hashes": [
|
|
6080
6120
|
{
|
|
6081
6121
|
"alg": "SHA-256",
|
|
6082
|
-
"content": "
|
|
6122
|
+
"content": "74734d51f30654d7c436aa87bf8a676b75f6690864c67f63e75b51917192ab30"
|
|
6083
6123
|
}
|
|
6084
6124
|
]
|
|
6085
6125
|
},
|
|
@@ -6259,7 +6299,7 @@
|
|
|
6259
6299
|
"hashes": [
|
|
6260
6300
|
{
|
|
6261
6301
|
"alg": "SHA-256",
|
|
6262
|
-
"content": "
|
|
6302
|
+
"content": "a2ba7dd3db57a406281903fdbc1575dda663b5c873a53ff777e1723d28882d5a"
|
|
6263
6303
|
}
|
|
6264
6304
|
]
|
|
6265
6305
|
},
|
|
@@ -6439,7 +6479,7 @@
|
|
|
6439
6479
|
"hashes": [
|
|
6440
6480
|
{
|
|
6441
6481
|
"alg": "SHA-256",
|
|
6442
|
-
"content": "
|
|
6482
|
+
"content": "1f2b27209260d55f0b4482d61d104ed44cca1d9c9101f9658b525a53dabeff36"
|
|
6443
6483
|
}
|
|
6444
6484
|
]
|
|
6445
6485
|
},
|
|
@@ -6549,7 +6589,7 @@
|
|
|
6549
6589
|
"hashes": [
|
|
6550
6590
|
{
|
|
6551
6591
|
"alg": "SHA-256",
|
|
6552
|
-
"content": "
|
|
6592
|
+
"content": "b65f7e182532d3dd3f666354576c33f26689583a30ee8f84be5238f6d668e613"
|
|
6553
6593
|
}
|
|
6554
6594
|
]
|
|
6555
6595
|
},
|
|
@@ -6619,7 +6659,7 @@
|
|
|
6619
6659
|
"hashes": [
|
|
6620
6660
|
{
|
|
6621
6661
|
"alg": "SHA-256",
|
|
6622
|
-
"content": "
|
|
6662
|
+
"content": "a183b2befb37065b6de85f3ef2f5638283e8b2ebf079a7074bd0abc78cb547a0"
|
|
6623
6663
|
}
|
|
6624
6664
|
]
|
|
6625
6665
|
},
|
|
@@ -6739,7 +6779,7 @@
|
|
|
6739
6779
|
"hashes": [
|
|
6740
6780
|
{
|
|
6741
6781
|
"alg": "SHA-256",
|
|
6742
|
-
"content": "
|
|
6782
|
+
"content": "b7f5a095ecf30d657b387dcf04180840c62560857bdab0e863877de33f77486a"
|
|
6743
6783
|
}
|
|
6744
6784
|
]
|
|
6745
6785
|
},
|
|
@@ -6813,6 +6853,16 @@
|
|
|
6813
6853
|
}
|
|
6814
6854
|
]
|
|
6815
6855
|
},
|
|
6856
|
+
{
|
|
6857
|
+
"type": "file",
|
|
6858
|
+
"name": "src/markdown-masker.ts",
|
|
6859
|
+
"hashes": [
|
|
6860
|
+
{
|
|
6861
|
+
"alg": "SHA-256",
|
|
6862
|
+
"content": "82c3c48c25f400f3a64d1caba3d47357f3db87460f0746f88706f901eb6ff689"
|
|
6863
|
+
}
|
|
6864
|
+
]
|
|
6865
|
+
},
|
|
6816
6866
|
{
|
|
6817
6867
|
"type": "file",
|
|
6818
6868
|
"name": "src/mcp-scan.ts",
|
|
@@ -6839,7 +6889,7 @@
|
|
|
6839
6889
|
"hashes": [
|
|
6840
6890
|
{
|
|
6841
6891
|
"alg": "SHA-256",
|
|
6842
|
-
"content": "
|
|
6892
|
+
"content": "7d738e09de8c61c2876cdff8eb80173a8c5fec209854f9c4c9d39e16078e47af"
|
|
6843
6893
|
}
|
|
6844
6894
|
]
|
|
6845
6895
|
},
|
|
@@ -7339,7 +7389,7 @@
|
|
|
7339
7389
|
"hashes": [
|
|
7340
7390
|
{
|
|
7341
7391
|
"alg": "SHA-256",
|
|
7342
|
-
"content": "
|
|
7392
|
+
"content": "6b979188d59b7467769301fbd5e2207d1268590ff4ec8a6ec56f1b0a8dd9cd27"
|
|
7343
7393
|
}
|
|
7344
7394
|
]
|
|
7345
7395
|
},
|
|
@@ -7359,7 +7409,7 @@
|
|
|
7359
7409
|
"hashes": [
|
|
7360
7410
|
{
|
|
7361
7411
|
"alg": "SHA-256",
|
|
7362
|
-
"content": "
|
|
7412
|
+
"content": "1f89827ae775909abb094ccb471b30d7bd5e1783fa6e04e71fe27afa1a99f7f2"
|
|
7363
7413
|
}
|
|
7364
7414
|
]
|
|
7365
7415
|
},
|
|
@@ -7409,7 +7459,7 @@
|
|
|
7409
7459
|
"hashes": [
|
|
7410
7460
|
{
|
|
7411
7461
|
"alg": "SHA-256",
|
|
7412
|
-
"content": "
|
|
7462
|
+
"content": "451f3419f8fafaef64cc319b155c84c0046cd7c3a0ad6ef2ef893d2e350a1feb"
|
|
7413
7463
|
}
|
|
7414
7464
|
]
|
|
7415
7465
|
},
|
package/src/amendment-trace.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { maskMarkdown } from './markdown-masker.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Amendment traceability — the deterministic half of the Step-8 amendment gate (ADR-001).
|
|
3
5
|
*
|
|
@@ -209,125 +211,6 @@ const AMENDMENT_LIKE = /\bAM-(?:CP-)?\d+\b|^\s*\|\s*\*{0,2}AM-|^ {0,3}#{3,6}\s+A
|
|
|
209
211
|
/** A separator that turns a heading suffix into a DECLARATION rather than a qualifier. */
|
|
210
212
|
const HEADING_DECLARATION_SEPARATOR = /^\s*[:\u2014\u2013-]\s*/;
|
|
211
213
|
|
|
212
|
-
/**
|
|
213
|
-
* The document with every FENCED block blanked out — same length, same line count, so every index
|
|
214
|
-
* computed on the mask addresses the identical byte of the original.
|
|
215
|
-
*
|
|
216
|
-
* A plan is allowed to SHOW the form it may write, and this module must not read the example as the
|
|
217
|
-
* document's own answer. MEASURED 2026-09-06 (Codex round 3, P2): a fenced `## Amendments: None`
|
|
218
|
-
* placed above the real section won the raw heading search, the fence's own body parsed as zero
|
|
219
|
-
* rows, and the explicit-none branch exited 0 WITHOUT EVER LOOKING at the real section, which
|
|
220
|
-
* carried an unresolvable `AM-1`. That is the new false pass NFR-3 forbids. K2 has refused fenced
|
|
221
|
-
* examples from the start (`check-plan-completeness.mjs`, its fence-blindness fix); this is that
|
|
222
|
-
* half of the contract, arriving here.
|
|
223
|
-
*
|
|
224
|
-
* An UNCLOSED fence is reverted rather than trusted — masking may only lose EXAMPLES, never hide a
|
|
225
|
-
* real section, because a hidden section is a skip and a skip is exit 0. The safe direction is
|
|
226
|
-
* chosen explicitly and pinned by a test.
|
|
227
|
-
*/
|
|
228
|
-
function blankLine(line: string): string {
|
|
229
|
-
return ' '.repeat(line.length);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* The document with every NON-RENDERED block blanked out — same length, same line count, so every
|
|
234
|
-
* index computed on the mask addresses the identical byte of the original.
|
|
235
|
-
*
|
|
236
|
-
* ONE BLOCK SCAN, not a stack of regexes. Five rounds of cross-family review found the same class
|
|
237
|
-
* five times — a fenced heading, a fenced row, a fenced pointer, a fence closed by a shorter run,
|
|
238
|
-
* an HTML-commented template — and round 6 found the sixth: `<!--` and `-->` written inside INLINE
|
|
239
|
-
* CODE SPANS in ordinary prose, which a `<!--[\s\S]*?-->` mask happily read as a comment spanning
|
|
240
|
-
* the real section (MEASURED 2026-09-06: `section: NULL`, `skip`, exit 0, the whole section
|
|
241
|
-
* swallowed). Each mask was born to close the previous one's hole, which is the signature of the
|
|
242
|
-
* wrong level: markdown decides what a document CONTAINS at BLOCK level, so that is where this
|
|
243
|
-
* reads. An inline construct cannot open a block, so the code-span case is closed BY CONSTRUCTION
|
|
244
|
-
* rather than by a longer pattern.
|
|
245
|
-
*
|
|
246
|
-
* WHAT THIS IMPLEMENTS, named so the gap is auditable:
|
|
247
|
-
* • CommonMark §4.5 fenced code blocks — opener ``` or ~~~ (three or more, indented ≤3), closed
|
|
248
|
-
* only by a run of the SAME character at least as long, with nothing but whitespace after it.
|
|
249
|
-
* • CommonMark §4.6 HTML blocks, TYPE 2 ONLY (`<!-- … -->`) — start condition `<!--` at the start
|
|
250
|
-
* of a line after at most three spaces; end condition `-->` anywhere on a line, the start line
|
|
251
|
-
* included. This is the rule that makes a code-spanned delimiter a non-event.
|
|
252
|
-
* • CommonMark §4.2 ATX headings are then matched only in what survives (the heading pattern
|
|
253
|
-
* itself is unchanged and allows at most three spaces of indent).
|
|
254
|
-
* • CommonMark §6.1 code spans are deliberately NOT parsed: no inline construct can open a block,
|
|
255
|
-
* so there is nothing left for them to forge.
|
|
256
|
-
*
|
|
257
|
-
* WHAT IT DOES NOT IMPLEMENT (honest, and the reason a fixture outside this list is not covered):
|
|
258
|
-
* indented code blocks (§4.4) — a four-space-indented row still parses as a row, though a
|
|
259
|
-
* four-space-indented heading is not a heading; HTML block types 1 and 3–7 (`<script>`, `<?`,
|
|
260
|
-
* `<!DOCTYPE`, `<![CDATA[`, block tags, generic tags); block quotes and list containers, so a fence
|
|
261
|
-
* nested inside them is matched by its own indentation rather than relative to its container; tabs
|
|
262
|
-
* as indentation; link reference definitions.
|
|
263
|
-
*
|
|
264
|
-
* DELIBERATE DEVIATION: CommonMark runs an unclosed fence (or HTML block) to the end of the
|
|
265
|
-
* document. Here an unclosed block is REVERTED — its lines come back. The asymmetry is the point:
|
|
266
|
-
* masking may lose an EXAMPLE, but hiding a real section turns the gate into `skip`, and a skip is
|
|
267
|
-
* exit 0. Pinned by its own tests, for both fences and comments.
|
|
268
|
-
*/
|
|
269
|
-
function maskNonRendered(md: string): string {
|
|
270
|
-
const lines = md.split('\n');
|
|
271
|
-
const out = lines.slice();
|
|
272
|
-
let state: 'text' | 'fence' | 'html' = 'text';
|
|
273
|
-
let marker = '';
|
|
274
|
-
let markerLength = 0;
|
|
275
|
-
let openedAt = -1;
|
|
276
|
-
for (let i = 0; i < lines.length; i++) {
|
|
277
|
-
const line = lines[i] as string;
|
|
278
|
-
if (state === 'text') {
|
|
279
|
-
const fence = /^ {0,3}(`{3,}|~{3,})([^\n]*)$/.exec(line);
|
|
280
|
-
// CommonMark §4.5: the info string of a BACKTICK fence may not contain a backtick (a tilde
|
|
281
|
-
// fence may). An invalid opener is not an opener — accepting one let a later run close a
|
|
282
|
-
// fence that markdown never opened, exposing a `## Amendments: None` that is really inside an
|
|
283
|
-
// unclosed fence and hiding a real section above it (Codex round 7, P2).
|
|
284
|
-
if (fence && (fence[1] as string)[0] === '`' && (fence[2] as string).includes('`')) {
|
|
285
|
-
continue;
|
|
286
|
-
}
|
|
287
|
-
if (fence) {
|
|
288
|
-
const run = fence[1] as string;
|
|
289
|
-
state = 'fence';
|
|
290
|
-
marker = run[0] as string;
|
|
291
|
-
markerLength = run.length;
|
|
292
|
-
openedAt = i;
|
|
293
|
-
out[i] = blankLine(line);
|
|
294
|
-
continue;
|
|
295
|
-
}
|
|
296
|
-
// §4.6 type 2 START CONDITION: line start, at most three spaces. NOT anywhere in the line —
|
|
297
|
-
// that spelling is what let a code-spanned `<!--` in prose open a comment (round 6, P1).
|
|
298
|
-
const htmlStart = /^ {0,3}<!--/.exec(line);
|
|
299
|
-
if (htmlStart) {
|
|
300
|
-
state = 'html';
|
|
301
|
-
openedAt = i;
|
|
302
|
-
out[i] = blankLine(line);
|
|
303
|
-
// The end condition may be satisfied on the start line itself.
|
|
304
|
-
if (/-->/.test(line)) {
|
|
305
|
-
state = 'text';
|
|
306
|
-
openedAt = -1;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
continue;
|
|
310
|
-
}
|
|
311
|
-
out[i] = blankLine(line);
|
|
312
|
-
if (state === 'fence') {
|
|
313
|
-
const close = /^ {0,3}(`{3,}|~{3,})\s*$/.exec(line);
|
|
314
|
-
if (close) {
|
|
315
|
-
const run = close[1] as string;
|
|
316
|
-
if ((run[0] as string) === marker && run.length >= markerLength) {
|
|
317
|
-
state = 'text';
|
|
318
|
-
openedAt = -1;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
} else if (/-->/.test(line)) {
|
|
322
|
-
state = 'text';
|
|
323
|
-
openedAt = -1;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
// An unclosed block is not trusted: put its lines back (see DELIBERATE DEVIATION above).
|
|
327
|
-
if (openedAt >= 0) for (let i = openedAt; i < lines.length; i++) out[i] = lines[i] as string;
|
|
328
|
-
return out.join('\n');
|
|
329
|
-
}
|
|
330
|
-
|
|
331
214
|
/**
|
|
332
215
|
* How many RENDERED `## Amendments` sections the document opens. More than one is a document that
|
|
333
216
|
* contradicts itself, and until 2026-09-06 the FIRST one answered for all of them: a stale
|
|
@@ -357,7 +240,7 @@ export interface AmendmentAmbiguity {
|
|
|
357
240
|
* conservative direction here is to see more, because every miss is an exit 0.
|
|
358
241
|
*/
|
|
359
242
|
export function amendmentDeclarationAmbiguity(md: string): AmendmentAmbiguity | null {
|
|
360
|
-
const mask =
|
|
243
|
+
const mask = maskMarkdown(md);
|
|
361
244
|
const m = AMENDMENT_HEADING.exec(mask);
|
|
362
245
|
if (m === null) return null;
|
|
363
246
|
const maskLines = mask.split('\n');
|
|
@@ -373,7 +256,7 @@ export function amendmentDeclarationAmbiguity(md: string): AmendmentAmbiguity |
|
|
|
373
256
|
}
|
|
374
257
|
|
|
375
258
|
export function amendmentSectionCount(md: string): number {
|
|
376
|
-
const mask =
|
|
259
|
+
const mask = maskMarkdown(md);
|
|
377
260
|
// DEPTH MATTERS, and the corpus is why (MEASURED 2026-09-06 on the 363-feature census while this
|
|
378
261
|
// refusal was being added): `features/p16-non-js-portability/06_implementation_plan.md` carries
|
|
379
262
|
// `## Amendments` at line 780 and `### Amendments folded in from the challenge panel …` at 845.
|
|
@@ -411,7 +294,7 @@ export function amendmentSectionCount(md: string): number {
|
|
|
411
294
|
* `none-blocking`; an optional whitespace-separated closing `#` sequence is heading furniture.
|
|
412
295
|
*/
|
|
413
296
|
function headingSaysNone(md: string): boolean {
|
|
414
|
-
const m = AMENDMENT_HEADING.exec(
|
|
297
|
+
const m = AMENDMENT_HEADING.exec(maskMarkdown(md));
|
|
415
298
|
if (!m) return false;
|
|
416
299
|
const suffix = m[1 + 1] ?? '';
|
|
417
300
|
const sep = HEADING_DECLARATION_SEPARATOR.exec(suffix);
|
|
@@ -431,7 +314,7 @@ function headingSaysNone(md: string): boolean {
|
|
|
431
314
|
* for them to disagree about where the section is.
|
|
432
315
|
*/
|
|
433
316
|
function amendmentSectionPair(md: string): { raw: string; masked: string } | null {
|
|
434
|
-
const mask =
|
|
317
|
+
const mask = maskMarkdown(md);
|
|
435
318
|
const m = AMENDMENT_HEADING.exec(mask);
|
|
436
319
|
if (!m) return null;
|
|
437
320
|
const start = m.index + (m[0] as string).length;
|