@dzhechkov/harness-core 0.8.41 → 0.8.43
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 +92 -32
- package/README.md +86 -2
- package/dist/architecture.d.ts.map +1 -1
- package/dist/architecture.js +0 -0
- package/dist/architecture.js.map +1 -1
- package/dist/guard.d.ts +4 -0
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +60 -3
- package/dist/guard.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/memory-index-check.d.ts +26 -0
- package/dist/memory-index-check.d.ts.map +1 -0
- package/dist/memory-index-check.js +75 -0
- package/dist/memory-index-check.js.map +1 -0
- package/dist/publish.d.ts +14 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +61 -44
- package/dist/publish.js.map +1 -1
- package/dist/release-line.d.ts +15 -1
- package/dist/release-line.d.ts.map +1 -1
- package/dist/release-line.js +40 -13
- package/dist/release-line.js.map +1 -1
- package/dist/session-retro.d.ts +8 -5
- package/dist/session-retro.d.ts.map +1 -1
- package/dist/session-retro.js +36 -11
- package/dist/session-retro.js.map +1 -1
- package/dist/text-mangling.d.ts +10 -0
- package/dist/text-mangling.d.ts.map +1 -0
- package/dist/text-mangling.js +23 -0
- package/dist/text-mangling.js.map +1 -0
- package/dist/tree-sync.d.ts +5 -0
- package/dist/tree-sync.d.ts.map +1 -0
- package/dist/tree-sync.js +13 -0
- package/dist/tree-sync.js.map +1 -0
- package/package.json +8 -8
- package/sbom.json +181 -31
- package/src/architecture.ts +0 -0
- package/src/guard.ts +62 -3
- package/src/index.ts +11 -1
- package/src/memory-index-check.ts +80 -0
- package/src/publish.ts +67 -43
- package/src/release-line.ts +60 -16
- package/src/session-retro.ts +51 -15
- package/src/text-mangling.ts +29 -0
- package/src/tree-sync.ts +17 -0
package/sbom.json
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"hashes": [
|
|
26
26
|
{
|
|
27
27
|
"alg": "SHA-256",
|
|
28
|
-
"content": "
|
|
28
|
+
"content": "3d7cfbd07df446a36b1f8f93aeeb4d4dfb9c1d5659b0be7fb5788e130b9ff685"
|
|
29
29
|
}
|
|
30
30
|
]
|
|
31
31
|
},
|
|
@@ -405,7 +405,7 @@
|
|
|
405
405
|
"hashes": [
|
|
406
406
|
{
|
|
407
407
|
"alg": "SHA-256",
|
|
408
|
-
"content": "
|
|
408
|
+
"content": "c6dcbe1c8ddb221aace37ef1518afc357b2b541a440619265d435d6c4b24cc54"
|
|
409
409
|
}
|
|
410
410
|
]
|
|
411
411
|
},
|
|
@@ -415,7 +415,7 @@
|
|
|
415
415
|
"hashes": [
|
|
416
416
|
{
|
|
417
417
|
"alg": "SHA-256",
|
|
418
|
-
"content": "
|
|
418
|
+
"content": "c93a224929b4b864f60c0812f526acf7d07a9f4e138aae576687cadafc90f4b5"
|
|
419
419
|
}
|
|
420
420
|
]
|
|
421
421
|
},
|
|
@@ -425,7 +425,7 @@
|
|
|
425
425
|
"hashes": [
|
|
426
426
|
{
|
|
427
427
|
"alg": "SHA-256",
|
|
428
|
-
"content": "
|
|
428
|
+
"content": "a9a6486b8e1de9c1d05a37b391bcb54cb5a257f671ceb5ebe4b7e366a9631ea2"
|
|
429
429
|
}
|
|
430
430
|
]
|
|
431
431
|
},
|
|
@@ -2795,7 +2795,7 @@
|
|
|
2795
2795
|
"hashes": [
|
|
2796
2796
|
{
|
|
2797
2797
|
"alg": "SHA-256",
|
|
2798
|
-
"content": "
|
|
2798
|
+
"content": "bfdd98ddc96aa86d974a84c3533d4698d7b08c2009a8a1b37e7412faccea723c"
|
|
2799
2799
|
}
|
|
2800
2800
|
]
|
|
2801
2801
|
},
|
|
@@ -2805,7 +2805,7 @@
|
|
|
2805
2805
|
"hashes": [
|
|
2806
2806
|
{
|
|
2807
2807
|
"alg": "SHA-256",
|
|
2808
|
-
"content": "
|
|
2808
|
+
"content": "e5877b5c58e9705ec7d076366d303df64e5e25458ddb3bd7372d18784b6ac338"
|
|
2809
2809
|
}
|
|
2810
2810
|
]
|
|
2811
2811
|
},
|
|
@@ -2815,7 +2815,7 @@
|
|
|
2815
2815
|
"hashes": [
|
|
2816
2816
|
{
|
|
2817
2817
|
"alg": "SHA-256",
|
|
2818
|
-
"content": "
|
|
2818
|
+
"content": "8a133ab16a53be1f09ea6598fa5e6a58b02b94890bb85c24bca7b38bf7988eec"
|
|
2819
2819
|
}
|
|
2820
2820
|
]
|
|
2821
2821
|
},
|
|
@@ -2825,7 +2825,7 @@
|
|
|
2825
2825
|
"hashes": [
|
|
2826
2826
|
{
|
|
2827
2827
|
"alg": "SHA-256",
|
|
2828
|
-
"content": "
|
|
2828
|
+
"content": "446f2d5f25afba9800ccdc723b456316223d135ce86f1367e258259933ea1845"
|
|
2829
2829
|
}
|
|
2830
2830
|
]
|
|
2831
2831
|
},
|
|
@@ -2915,7 +2915,7 @@
|
|
|
2915
2915
|
"hashes": [
|
|
2916
2916
|
{
|
|
2917
2917
|
"alg": "SHA-256",
|
|
2918
|
-
"content": "
|
|
2918
|
+
"content": "033e685536165cf7fd76ac8be8b40d7c63dbcadeb8da7c74b8848a7ee4ea0cc9"
|
|
2919
2919
|
}
|
|
2920
2920
|
]
|
|
2921
2921
|
},
|
|
@@ -2925,7 +2925,7 @@
|
|
|
2925
2925
|
"hashes": [
|
|
2926
2926
|
{
|
|
2927
2927
|
"alg": "SHA-256",
|
|
2928
|
-
"content": "
|
|
2928
|
+
"content": "e144f314424a168aaae260a73ad9a7914cc413f598351aa989abb6714727d1f0"
|
|
2929
2929
|
}
|
|
2930
2930
|
]
|
|
2931
2931
|
},
|
|
@@ -2935,7 +2935,7 @@
|
|
|
2935
2935
|
"hashes": [
|
|
2936
2936
|
{
|
|
2937
2937
|
"alg": "SHA-256",
|
|
2938
|
-
"content": "
|
|
2938
|
+
"content": "6366af45dd192850c5aaa8c38c927366cfc706ec35a28343136694f66998c474"
|
|
2939
2939
|
}
|
|
2940
2940
|
]
|
|
2941
2941
|
},
|
|
@@ -2945,7 +2945,7 @@
|
|
|
2945
2945
|
"hashes": [
|
|
2946
2946
|
{
|
|
2947
2947
|
"alg": "SHA-256",
|
|
2948
|
-
"content": "
|
|
2948
|
+
"content": "473cb3fd816c7f444562e3c8cff515e0a74285ca701fd269a0bdeb1162a15b61"
|
|
2949
2949
|
}
|
|
2950
2950
|
]
|
|
2951
2951
|
},
|
|
@@ -3829,6 +3829,46 @@
|
|
|
3829
3829
|
}
|
|
3830
3830
|
]
|
|
3831
3831
|
},
|
|
3832
|
+
{
|
|
3833
|
+
"type": "file",
|
|
3834
|
+
"name": "dist/memory-index-check.d.ts",
|
|
3835
|
+
"hashes": [
|
|
3836
|
+
{
|
|
3837
|
+
"alg": "SHA-256",
|
|
3838
|
+
"content": "8dc2b00ea8ab550a29d0f5612c3b643724948a1f9ebb3e2c1258d6601836c66f"
|
|
3839
|
+
}
|
|
3840
|
+
]
|
|
3841
|
+
},
|
|
3842
|
+
{
|
|
3843
|
+
"type": "file",
|
|
3844
|
+
"name": "dist/memory-index-check.d.ts.map",
|
|
3845
|
+
"hashes": [
|
|
3846
|
+
{
|
|
3847
|
+
"alg": "SHA-256",
|
|
3848
|
+
"content": "e4201e20636b32e62d72039533d2f6ea52da46b3daef52fd2e17e7a028a3fb9b"
|
|
3849
|
+
}
|
|
3850
|
+
]
|
|
3851
|
+
},
|
|
3852
|
+
{
|
|
3853
|
+
"type": "file",
|
|
3854
|
+
"name": "dist/memory-index-check.js",
|
|
3855
|
+
"hashes": [
|
|
3856
|
+
{
|
|
3857
|
+
"alg": "SHA-256",
|
|
3858
|
+
"content": "d032d7bbd923ef86a473a37e844fe1f6e8123da2ad9f9cb60f4e868f26f4789a"
|
|
3859
|
+
}
|
|
3860
|
+
]
|
|
3861
|
+
},
|
|
3862
|
+
{
|
|
3863
|
+
"type": "file",
|
|
3864
|
+
"name": "dist/memory-index-check.js.map",
|
|
3865
|
+
"hashes": [
|
|
3866
|
+
{
|
|
3867
|
+
"alg": "SHA-256",
|
|
3868
|
+
"content": "b26cf0abe736bac0ecd8c5babb2bce60e19dfb22eaaa13004cb96cf2a8c4c55a"
|
|
3869
|
+
}
|
|
3870
|
+
]
|
|
3871
|
+
},
|
|
3832
3872
|
{
|
|
3833
3873
|
"type": "file",
|
|
3834
3874
|
"name": "dist/model-recommender.d.ts",
|
|
@@ -4715,7 +4755,7 @@
|
|
|
4715
4755
|
"hashes": [
|
|
4716
4756
|
{
|
|
4717
4757
|
"alg": "SHA-256",
|
|
4718
|
-
"content": "
|
|
4758
|
+
"content": "149d0d95689591db30c433eb84c4f6da93a100296e156a52672bc715ac832991"
|
|
4719
4759
|
}
|
|
4720
4760
|
]
|
|
4721
4761
|
},
|
|
@@ -4725,7 +4765,7 @@
|
|
|
4725
4765
|
"hashes": [
|
|
4726
4766
|
{
|
|
4727
4767
|
"alg": "SHA-256",
|
|
4728
|
-
"content": "
|
|
4768
|
+
"content": "93a56cbdfd3acff3e95f42695478f3f04ebed664380506fa1085dbc8f729b0b6"
|
|
4729
4769
|
}
|
|
4730
4770
|
]
|
|
4731
4771
|
},
|
|
@@ -4735,7 +4775,7 @@
|
|
|
4735
4775
|
"hashes": [
|
|
4736
4776
|
{
|
|
4737
4777
|
"alg": "SHA-256",
|
|
4738
|
-
"content": "
|
|
4778
|
+
"content": "d92c3e7382fc142dd2a53b6be27de3c866be34f9916020c9eaf20bdc3eae17f0"
|
|
4739
4779
|
}
|
|
4740
4780
|
]
|
|
4741
4781
|
},
|
|
@@ -4745,7 +4785,7 @@
|
|
|
4745
4785
|
"hashes": [
|
|
4746
4786
|
{
|
|
4747
4787
|
"alg": "SHA-256",
|
|
4748
|
-
"content": "
|
|
4788
|
+
"content": "6a45842cd3083205cbff2438c60dc3bce98b23b5a87b0586d11114dba931f40d"
|
|
4749
4789
|
}
|
|
4750
4790
|
]
|
|
4751
4791
|
},
|
|
@@ -5195,7 +5235,7 @@
|
|
|
5195
5235
|
"hashes": [
|
|
5196
5236
|
{
|
|
5197
5237
|
"alg": "SHA-256",
|
|
5198
|
-
"content": "
|
|
5238
|
+
"content": "a015a9f318640511606c2f3f8debba215c9c2189877ebf1a18f2ff3b0766d2c2"
|
|
5199
5239
|
}
|
|
5200
5240
|
]
|
|
5201
5241
|
},
|
|
@@ -5205,7 +5245,7 @@
|
|
|
5205
5245
|
"hashes": [
|
|
5206
5246
|
{
|
|
5207
5247
|
"alg": "SHA-256",
|
|
5208
|
-
"content": "
|
|
5248
|
+
"content": "4b2eaa030c836ebb7884e4c6b90e6f8fe317cfe92b463ddb246f71132cdaaff0"
|
|
5209
5249
|
}
|
|
5210
5250
|
]
|
|
5211
5251
|
},
|
|
@@ -5215,7 +5255,7 @@
|
|
|
5215
5255
|
"hashes": [
|
|
5216
5256
|
{
|
|
5217
5257
|
"alg": "SHA-256",
|
|
5218
|
-
"content": "
|
|
5258
|
+
"content": "94bf10ad7df83b07b65c0ba15ccb75f00ec6310a4f321d3654bd0f7b0a719d3b"
|
|
5219
5259
|
}
|
|
5220
5260
|
]
|
|
5221
5261
|
},
|
|
@@ -5225,7 +5265,7 @@
|
|
|
5225
5265
|
"hashes": [
|
|
5226
5266
|
{
|
|
5227
5267
|
"alg": "SHA-256",
|
|
5228
|
-
"content": "
|
|
5268
|
+
"content": "0a87ae82e71a5b7448869459891fdc35f2cefe22948e3939721c989b621dbfaf"
|
|
5229
5269
|
}
|
|
5230
5270
|
]
|
|
5231
5271
|
},
|
|
@@ -5955,7 +5995,7 @@
|
|
|
5955
5995
|
"hashes": [
|
|
5956
5996
|
{
|
|
5957
5997
|
"alg": "SHA-256",
|
|
5958
|
-
"content": "
|
|
5998
|
+
"content": "ae652668bcff0fd5846e63fda6f1ffb38155459e1ad563d549ab72f4f1f5d32d"
|
|
5959
5999
|
}
|
|
5960
6000
|
]
|
|
5961
6001
|
},
|
|
@@ -5965,7 +6005,7 @@
|
|
|
5965
6005
|
"hashes": [
|
|
5966
6006
|
{
|
|
5967
6007
|
"alg": "SHA-256",
|
|
5968
|
-
"content": "
|
|
6008
|
+
"content": "6119e91d2af673e5583e0f6ad117af62fd92799f6d8f671332e134f978f7ffe0"
|
|
5969
6009
|
}
|
|
5970
6010
|
]
|
|
5971
6011
|
},
|
|
@@ -5975,7 +6015,7 @@
|
|
|
5975
6015
|
"hashes": [
|
|
5976
6016
|
{
|
|
5977
6017
|
"alg": "SHA-256",
|
|
5978
|
-
"content": "
|
|
6018
|
+
"content": "878a9dd6db7d369edaf7acb1ae6e00dd994ece247e6123980cd4dba0d7c54949"
|
|
5979
6019
|
}
|
|
5980
6020
|
]
|
|
5981
6021
|
},
|
|
@@ -5985,7 +6025,7 @@
|
|
|
5985
6025
|
"hashes": [
|
|
5986
6026
|
{
|
|
5987
6027
|
"alg": "SHA-256",
|
|
5988
|
-
"content": "
|
|
6028
|
+
"content": "6eb19cab2cac968a063a7615e7fccb2a9ca4ac1b3fcf16bfd0f4c0c1506f1f5e"
|
|
5989
6029
|
}
|
|
5990
6030
|
]
|
|
5991
6031
|
},
|
|
@@ -7109,6 +7149,46 @@
|
|
|
7109
7149
|
}
|
|
7110
7150
|
]
|
|
7111
7151
|
},
|
|
7152
|
+
{
|
|
7153
|
+
"type": "file",
|
|
7154
|
+
"name": "dist/text-mangling.d.ts",
|
|
7155
|
+
"hashes": [
|
|
7156
|
+
{
|
|
7157
|
+
"alg": "SHA-256",
|
|
7158
|
+
"content": "fa46a6aa1981ed6569a45c1a4d3ce99404db9ae6ca345f6fd16e3edb2ca00bd8"
|
|
7159
|
+
}
|
|
7160
|
+
]
|
|
7161
|
+
},
|
|
7162
|
+
{
|
|
7163
|
+
"type": "file",
|
|
7164
|
+
"name": "dist/text-mangling.d.ts.map",
|
|
7165
|
+
"hashes": [
|
|
7166
|
+
{
|
|
7167
|
+
"alg": "SHA-256",
|
|
7168
|
+
"content": "414ba36e047efbf7460728884bec7509520ed6e7f95887bd423d98cc1e69a776"
|
|
7169
|
+
}
|
|
7170
|
+
]
|
|
7171
|
+
},
|
|
7172
|
+
{
|
|
7173
|
+
"type": "file",
|
|
7174
|
+
"name": "dist/text-mangling.js",
|
|
7175
|
+
"hashes": [
|
|
7176
|
+
{
|
|
7177
|
+
"alg": "SHA-256",
|
|
7178
|
+
"content": "538b223f3bf30a0806df7ff68af7432b86972898bbc8932fe03786dc313e271a"
|
|
7179
|
+
}
|
|
7180
|
+
]
|
|
7181
|
+
},
|
|
7182
|
+
{
|
|
7183
|
+
"type": "file",
|
|
7184
|
+
"name": "dist/text-mangling.js.map",
|
|
7185
|
+
"hashes": [
|
|
7186
|
+
{
|
|
7187
|
+
"alg": "SHA-256",
|
|
7188
|
+
"content": "184f7f29fc4472c4e6a82deeff6207fa884156d91c8679eaa020f62b46699dc0"
|
|
7189
|
+
}
|
|
7190
|
+
]
|
|
7191
|
+
},
|
|
7112
7192
|
{
|
|
7113
7193
|
"type": "file",
|
|
7114
7194
|
"name": "dist/tg-post.d.ts",
|
|
@@ -7229,6 +7309,46 @@
|
|
|
7229
7309
|
}
|
|
7230
7310
|
]
|
|
7231
7311
|
},
|
|
7312
|
+
{
|
|
7313
|
+
"type": "file",
|
|
7314
|
+
"name": "dist/tree-sync.d.ts",
|
|
7315
|
+
"hashes": [
|
|
7316
|
+
{
|
|
7317
|
+
"alg": "SHA-256",
|
|
7318
|
+
"content": "e4ec19e1f9d8228f754a81857c87e42f57df56f6502937d14ded715df2878216"
|
|
7319
|
+
}
|
|
7320
|
+
]
|
|
7321
|
+
},
|
|
7322
|
+
{
|
|
7323
|
+
"type": "file",
|
|
7324
|
+
"name": "dist/tree-sync.d.ts.map",
|
|
7325
|
+
"hashes": [
|
|
7326
|
+
{
|
|
7327
|
+
"alg": "SHA-256",
|
|
7328
|
+
"content": "6886d17207d8266e9d15cf349ab78055df10898a532a6d9c8dae3e4d927b5dd9"
|
|
7329
|
+
}
|
|
7330
|
+
]
|
|
7331
|
+
},
|
|
7332
|
+
{
|
|
7333
|
+
"type": "file",
|
|
7334
|
+
"name": "dist/tree-sync.js",
|
|
7335
|
+
"hashes": [
|
|
7336
|
+
{
|
|
7337
|
+
"alg": "SHA-256",
|
|
7338
|
+
"content": "fde15c60f67cd507bb53eeb455a430ffc4299677e26cbd08490cd90d2756f73a"
|
|
7339
|
+
}
|
|
7340
|
+
]
|
|
7341
|
+
},
|
|
7342
|
+
{
|
|
7343
|
+
"type": "file",
|
|
7344
|
+
"name": "dist/tree-sync.js.map",
|
|
7345
|
+
"hashes": [
|
|
7346
|
+
{
|
|
7347
|
+
"alg": "SHA-256",
|
|
7348
|
+
"content": "341d8ea2442a40ecfecc41cce836a0e2d227f4d32d57a230a2c03be1e23ebd95"
|
|
7349
|
+
}
|
|
7350
|
+
]
|
|
7351
|
+
},
|
|
7232
7352
|
{
|
|
7233
7353
|
"type": "file",
|
|
7234
7354
|
"name": "dist/upgrade.d.ts",
|
|
@@ -7519,7 +7639,7 @@
|
|
|
7519
7639
|
},
|
|
7520
7640
|
{
|
|
7521
7641
|
"name": "dz:canonical-json-sha256-v2",
|
|
7522
|
-
"value": "
|
|
7642
|
+
"value": "073fc68b426d7cf73bb6d3ba9ec163306e7c8f5945db4d12f2da993c4da15089"
|
|
7523
7643
|
}
|
|
7524
7644
|
]
|
|
7525
7645
|
},
|
|
@@ -7619,7 +7739,7 @@
|
|
|
7619
7739
|
"hashes": [
|
|
7620
7740
|
{
|
|
7621
7741
|
"alg": "SHA-256",
|
|
7622
|
-
"content": "
|
|
7742
|
+
"content": "75f32916bb73b3b8fccdcdfdd20aa5e9c9231a61be7670db83efe912b6250bd0"
|
|
7623
7743
|
}
|
|
7624
7744
|
]
|
|
7625
7745
|
},
|
|
@@ -8229,7 +8349,7 @@
|
|
|
8229
8349
|
"hashes": [
|
|
8230
8350
|
{
|
|
8231
8351
|
"alg": "SHA-256",
|
|
8232
|
-
"content": "
|
|
8352
|
+
"content": "bf2eadba83394c55206f6beb3a6c83ff5d5808654e62e50b001dc306e1f49acf"
|
|
8233
8353
|
}
|
|
8234
8354
|
]
|
|
8235
8355
|
},
|
|
@@ -8259,7 +8379,7 @@
|
|
|
8259
8379
|
"hashes": [
|
|
8260
8380
|
{
|
|
8261
8381
|
"alg": "SHA-256",
|
|
8262
|
-
"content": "
|
|
8382
|
+
"content": "f308da21522b74a4aae4ca85a00e9a332a7497f2b3daded5d34a2f4b44d37273"
|
|
8263
8383
|
}
|
|
8264
8384
|
]
|
|
8265
8385
|
},
|
|
@@ -8483,6 +8603,16 @@
|
|
|
8483
8603
|
}
|
|
8484
8604
|
]
|
|
8485
8605
|
},
|
|
8606
|
+
{
|
|
8607
|
+
"type": "file",
|
|
8608
|
+
"name": "src/memory-index-check.ts",
|
|
8609
|
+
"hashes": [
|
|
8610
|
+
{
|
|
8611
|
+
"alg": "SHA-256",
|
|
8612
|
+
"content": "c938c3b14d7aa27ef8f3bc9281273f0d8454de2fadd600742c5c0f9632625196"
|
|
8613
|
+
}
|
|
8614
|
+
]
|
|
8615
|
+
},
|
|
8486
8616
|
{
|
|
8487
8617
|
"type": "file",
|
|
8488
8618
|
"name": "src/model-recommender.ts",
|
|
@@ -8709,7 +8839,7 @@
|
|
|
8709
8839
|
"hashes": [
|
|
8710
8840
|
{
|
|
8711
8841
|
"alg": "SHA-256",
|
|
8712
|
-
"content": "
|
|
8842
|
+
"content": "4bb4dbe8a712c17a6df93ff86553a53364c66ea5a8b5caf694dc4992cb9e3e4b"
|
|
8713
8843
|
}
|
|
8714
8844
|
]
|
|
8715
8845
|
},
|
|
@@ -8839,7 +8969,7 @@
|
|
|
8839
8969
|
"hashes": [
|
|
8840
8970
|
{
|
|
8841
8971
|
"alg": "SHA-256",
|
|
8842
|
-
"content": "
|
|
8972
|
+
"content": "07ee047f3fd9904fd13ddea2e95e0a0ff9a6544a754fbd19f3da6cbfff6ea087"
|
|
8843
8973
|
}
|
|
8844
8974
|
]
|
|
8845
8975
|
},
|
|
@@ -9019,7 +9149,7 @@
|
|
|
9019
9149
|
"hashes": [
|
|
9020
9150
|
{
|
|
9021
9151
|
"alg": "SHA-256",
|
|
9022
|
-
"content": "
|
|
9152
|
+
"content": "191c5a88e35cb4d1e142cd1a60faa1f397c6a49b5e7d24690a5ea61d722c73de"
|
|
9023
9153
|
}
|
|
9024
9154
|
]
|
|
9025
9155
|
},
|
|
@@ -9313,6 +9443,16 @@
|
|
|
9313
9443
|
}
|
|
9314
9444
|
]
|
|
9315
9445
|
},
|
|
9446
|
+
{
|
|
9447
|
+
"type": "file",
|
|
9448
|
+
"name": "src/text-mangling.ts",
|
|
9449
|
+
"hashes": [
|
|
9450
|
+
{
|
|
9451
|
+
"alg": "SHA-256",
|
|
9452
|
+
"content": "61b4ef4f7d63fb395922145c9803a55f9dce6d46920fa3bbe280fa1af6235e78"
|
|
9453
|
+
}
|
|
9454
|
+
]
|
|
9455
|
+
},
|
|
9316
9456
|
{
|
|
9317
9457
|
"type": "file",
|
|
9318
9458
|
"name": "src/tg-post.ts",
|
|
@@ -9343,6 +9483,16 @@
|
|
|
9343
9483
|
}
|
|
9344
9484
|
]
|
|
9345
9485
|
},
|
|
9486
|
+
{
|
|
9487
|
+
"type": "file",
|
|
9488
|
+
"name": "src/tree-sync.ts",
|
|
9489
|
+
"hashes": [
|
|
9490
|
+
{
|
|
9491
|
+
"alg": "SHA-256",
|
|
9492
|
+
"content": "51801c51af7fe9f412141afc0c0a26b26d07778584d69e78032751c47501a8df"
|
|
9493
|
+
}
|
|
9494
|
+
]
|
|
9495
|
+
},
|
|
9346
9496
|
{
|
|
9347
9497
|
"type": "file",
|
|
9348
9498
|
"name": "src/upgrade.ts",
|
package/src/architecture.ts
CHANGED
|
Binary file
|
package/src/guard.ts
CHANGED
|
@@ -119,6 +119,7 @@ export interface GuardFacts {
|
|
|
119
119
|
readonly readmes: readonly { readonly path: string; readonly text: string | null }[];
|
|
120
120
|
readonly coreVersion: string | null;
|
|
121
121
|
readonly cliVersion: string | null;
|
|
122
|
+
readonly workspaceVersions?: Readonly<Record<string, string | null>>;
|
|
122
123
|
};
|
|
123
124
|
/** Publish-only raw volume facts. Absence preserves the legacy result shape. */
|
|
124
125
|
readonly volume?: VolumeShadowInput;
|
|
@@ -161,7 +162,10 @@ export interface GuardFacts {
|
|
|
161
162
|
readonly featureBacklog?: {
|
|
162
163
|
readonly baseline: string;
|
|
163
164
|
readonly features: readonly { readonly slug: string; readonly createdIso: string; readonly waiver?: string }[];
|
|
165
|
+
/** Тексты записей бэклога и непустые причины переходов. */
|
|
164
166
|
readonly backlogTexts: readonly string[];
|
|
167
|
+
/** Летопись ЕСТЬ, но не прочиталась: «<путь>: <причина>». */
|
|
168
|
+
readonly transitionLogError?: string;
|
|
165
169
|
};
|
|
166
170
|
/** for no-skill-drift: the names that byte-drift between copies (from sweepSkillDrift). */
|
|
167
171
|
readonly drift?: readonly string[];
|
|
@@ -428,6 +432,50 @@ function inspectReleaseLines(
|
|
|
428
432
|
});
|
|
429
433
|
continue;
|
|
430
434
|
}
|
|
435
|
+
if (evidence.workspaceVersions !== undefined) {
|
|
436
|
+
const stale: string[] = [];
|
|
437
|
+
const actual: string[] = [];
|
|
438
|
+
const versions: string[] = [];
|
|
439
|
+
const unknown = (detail: string): void => {
|
|
440
|
+
observations.push({
|
|
441
|
+
schemaVersion: 'volume-shadow/v1', rule: 'release-line-in-sync' as never,
|
|
442
|
+
metric: 'release-line-version-sync', scope: readme.path, status: 'unknown', value: null,
|
|
443
|
+
unit: 'artifact_set', signal: false, operands: {}, method: 'release-line-regex/v1', detail,
|
|
444
|
+
});
|
|
445
|
+
};
|
|
446
|
+
for (const token of found.tokens) {
|
|
447
|
+
if (!Object.hasOwn(evidence.workspaceVersions, token.name)) {
|
|
448
|
+
unknown(`пакет \`${token.name}\` не собирается в этом монорепо — сверить не с чем`);
|
|
449
|
+
continue;
|
|
450
|
+
}
|
|
451
|
+
const version = evidence.workspaceVersions[token.name];
|
|
452
|
+
if (typeof version !== 'string') {
|
|
453
|
+
unknown(`${token.name} package.json version не прочитана — сверить не с чем`);
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
actual.push(`${token.name} v${token.version}`);
|
|
457
|
+
versions.push(`${token.name} v${version}`);
|
|
458
|
+
if (token.version !== version) {
|
|
459
|
+
stale.push(`строка релиза говорит ${token.name} v${token.version}, package.json — v${version}`);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
if (found.wrapped) unknown('цепочка перенесена на следующую строку — продолжение вне охвата правила');
|
|
463
|
+
if (actual.length > 0) {
|
|
464
|
+
const mismatch = stale.length > 0;
|
|
465
|
+
const detail = mismatch
|
|
466
|
+
? `${readme.path}: ${stale.join('; ')}`
|
|
467
|
+
: `${readme.path}: строка релиза совпадает с package.json (${versions.join(', ')})`;
|
|
468
|
+
observations.push({
|
|
469
|
+
schemaVersion: 'volume-shadow/v1', rule: 'release-line-in-sync' as never,
|
|
470
|
+
metric: 'release-line-version-sync', scope: readme.path,
|
|
471
|
+
status: mismatch ? 'outside-reference' : 'within-reference', value: actual,
|
|
472
|
+
unit: 'artifact_set', signal: mismatch, operands: { actual, expected: versions },
|
|
473
|
+
method: 'release-line-regex/v1', detail,
|
|
474
|
+
});
|
|
475
|
+
if (mismatch) violations.push({ rule: 'release-line-in-sync', severity, detail });
|
|
476
|
+
}
|
|
477
|
+
continue;
|
|
478
|
+
}
|
|
431
479
|
if (expected === null) {
|
|
432
480
|
const missing = [
|
|
433
481
|
...(evidence.coreVersion === null ? ['harness-core package.json version'] : []),
|
|
@@ -499,7 +547,7 @@ export const DEFAULT_RULES: readonly GuardRule[] = [
|
|
|
499
547
|
{ id: 'backlog-covers-features', severity: 'soft', ops: ['publish', 'consolidate'], description: 'каталог фичи, заведённый после базовой даты, назван записью бэклога — либо несёт именованную оговорку с причиной' },
|
|
500
548
|
{ id: 'no-secrets', severity: 'hard', ops: ['teach', 'publish'], description: 'no private key or API token in lesson text or a published file' },
|
|
501
549
|
{ id: 'readme-consistency', severity: 'soft', ops: ['publish'], description: 'README counts agree (CJM header vs All Commands, etc.)' },
|
|
502
|
-
{ id: 'release-line-in-sync', severity: 'soft', ops: ['publish'], description: 'root and harness-cli README release lines agree with the
|
|
550
|
+
{ id: 'release-line-in-sync', severity: 'soft', ops: ['publish'], description: 'root and harness-cli README release lines agree with the package.json version of every workspace package the line names' },
|
|
503
551
|
{ id: 'signature-fresh', severity: 'soft', ops: ['publish', 'code'], description: 'a pack whose files changed in this diff still verifies against its signed .dz-manifest.json — a stale signature is named before publish, not at the gate' },
|
|
504
552
|
{ id: 'skills-registrable', severity: 'soft', ops: ['publish'], description: 'every skill directory in a skill pack has a depth-1 SKILL.md (a buried or missing one ships un-registrable — the health-advisor 1.2.0 class)' },
|
|
505
553
|
{ id: 'readme-first', severity: 'soft', ops: ['publish'], description: 'a package with a staged version bump must update its own README.md in the same change (README-first)' },
|
|
@@ -810,9 +858,10 @@ const CHECKERS: Record<string, (f: GuardFacts, sev: GuardSeverity) => Violation[
|
|
|
810
858
|
return [{
|
|
811
859
|
rule: 'backlog-covers-features',
|
|
812
860
|
severity: sev,
|
|
813
|
-
detail: `${uncovered.length} фич(и) заведены после ${ev.baseline} и не названы ни
|
|
861
|
+
detail: `${uncovered.length} фич(и) заведены после ${ev.baseline} и не названы ни записью бэклога, ни причиной перехода: `
|
|
814
862
|
+ `${uncovered.slice(0, 8).join(', ')}${uncovered.length > 8 ? '…' : ''}`
|
|
815
|
-
+ ` —
|
|
863
|
+
+ ` — назови слаг в записи (dz backlog add) ЛИБО в причине закрытия`
|
|
864
|
+
+ ` (dz backlog ship <id> --reason "<слаг>: что сделано") ЛИБО впиши оговорку в features/<slug>/README.md строкой`
|
|
816
865
|
+ ` "Backlog: не заведено — <причина>". Оговорка без причины не считается.`,
|
|
817
866
|
}];
|
|
818
867
|
},
|
|
@@ -1338,6 +1387,16 @@ export function evaluateGuard(facts: GuardFacts, rules: readonly GuardRule[] = D
|
|
|
1338
1387
|
// (missing contents ⇒ nothing reported), but a skip nobody can see is fail-SILENT. One aggregate
|
|
1339
1388
|
// note, computed AFTER the verdict so it can never block or warn: information, not a violation.
|
|
1340
1389
|
const notes: string[] = [];
|
|
1390
|
+
// Only `checked`: when the chronicle read fails, the collector still supplies `featureBacklog`
|
|
1391
|
+
// (the error field can only live INSIDE that object), so HAS_INPUT holds and the rule is never
|
|
1392
|
+
// in `notEstablished` with an error to report. The second half was dead by construction —
|
|
1393
|
+
// MEASURED by mutation, Step 8, 22.09.2026: removing it turned no test red.
|
|
1394
|
+
if (checked.includes('backlog-covers-features')) {
|
|
1395
|
+
const error = facts.featureBacklog?.transitionLogError;
|
|
1396
|
+
if (typeof error === 'string' && error.trim() !== '') {
|
|
1397
|
+
notes.push(`backlog-covers-features: летопись переходов не прочитана (${error}) — покрытие проверено только по текстам записей бэклога`);
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1341
1400
|
if (notEstablished.includes('rounds-traced')) {
|
|
1342
1401
|
const fact = facts.codeCommitsSinceLastRound;
|
|
1343
1402
|
if (fact?.enabled === false) notes.push('rounds-traced: skipped (.dz/config.json rounds.traced=false)');
|
package/src/index.ts
CHANGED
|
@@ -308,6 +308,15 @@ export type {
|
|
|
308
308
|
StoreMarkWriteOptions,
|
|
309
309
|
StoreResetReceipt,
|
|
310
310
|
} from './store-guard.js';
|
|
311
|
+
export {
|
|
312
|
+
checkMemoryIndex,
|
|
313
|
+
MEMORY_INDEX_MAX_BYTES,
|
|
314
|
+
MEMORY_INDEX_MAX_LINE_CHARS,
|
|
315
|
+
MEMORY_INDEX_MIN_HOOK_SUPPORT,
|
|
316
|
+
} from './memory-index-check.js';
|
|
317
|
+
export type { MemoryIndexReport, Finding, FindingKind } from './memory-index-check.js';
|
|
318
|
+
export { detectMangledText } from './text-mangling.js';
|
|
319
|
+
export type { MangleKind, MangleSymptom } from './text-mangling.js';
|
|
311
320
|
export { planStoreGuardPrune } from './store-guard-prune.js';
|
|
312
321
|
export type {
|
|
313
322
|
StoreGuardPruneBucket,
|
|
@@ -772,7 +781,8 @@ export type {
|
|
|
772
781
|
} from './event-chain.js';
|
|
773
782
|
export { decideProvenance, environmentCanMintProvenance, publishArgv, matchesPublishFilter, discoverPackages, publishPackages, bumpPatch, compareVersions, findUnpackagedSkills, findUnpublishedWorkspaceFloors, rewriteWorkspaceSpecs, orderByDependencies, syncReadmeVersion, isChangelogEntryLine, changelogRegion, planReadmeVersionSync } from './publish.js';
|
|
774
783
|
export type { ReadmeVersionSyncPlan, ReadmeSyncRewrite } from './publish.js';
|
|
775
|
-
export { RELEASE_LINE_RE, findReleaseLine, rewriteReleaseLine } from './release-line.js';
|
|
784
|
+
export { RELEASE_LINE_RE, parseReleaseLine, findReleaseLine, rewriteReleaseLine, shortPackageName } from './release-line.js';
|
|
785
|
+
export type { ReleaseLineToken, ReleaseLineParse, ReleaseLineMatch } from './release-line.js';
|
|
776
786
|
export * from './course-staleness.js';
|
|
777
787
|
export { fetchAllDownloads } from './downloads.js';
|
|
778
788
|
export type { PackageDownloads, DownloadsReport } from './downloads.js';
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
|
|
3
|
+
export const MEMORY_INDEX_MAX_BYTES = 24_000;
|
|
4
|
+
export const MEMORY_INDEX_MAX_LINE_CHARS = 200;
|
|
5
|
+
// Hook support is a lexical heuristic, not proof that a hook's meaning is preserved.
|
|
6
|
+
// Calibration history on the real index (108 judged lines): 2026-09-23 the coder measured a live
|
|
7
|
+
// minimum of 0 at L83/L85/L114 and 15 lines under 0.5 — 14 were Russian hooks over English files
|
|
8
|
+
// or other word forms (knowledge present), one (L76) linked the WRONG file. The lead rewrote those
|
|
9
|
+
// hooks with words from their files; 2026-09-24 the live minimum is 0.5 exactly (5 lines at the
|
|
10
|
+
// boundary, QE F2). The threshold stays the contract's 0.5; a hook at the boundary passes
|
|
11
|
+
// (`support < min` fails), so the margin there is thin by construction.
|
|
12
|
+
export const MEMORY_INDEX_MIN_HOOK_SUPPORT = 0.5;
|
|
13
|
+
|
|
14
|
+
export type FindingKind = 'over-size' | 'long-line' | 'broken-link' | 'unindexed-file' | 'unsupported-hook' | 'duplicate-link';
|
|
15
|
+
export type Finding = { kind: FindingKind; line?: number; file?: string; detail: string };
|
|
16
|
+
export type MemoryIndexReport = { bytes: number; lines: number; findings: readonly Finding[] };
|
|
17
|
+
|
|
18
|
+
/** Pure check: callers supply the index and sibling Markdown files (excluding MEMORY.md). */
|
|
19
|
+
export function checkMemoryIndex(input: {
|
|
20
|
+
indexText: string;
|
|
21
|
+
files: ReadonlyMap<string, string>;
|
|
22
|
+
limits?: { maxBytes?: number; maxLineChars?: number; minHookSupport?: number };
|
|
23
|
+
}): MemoryIndexReport {
|
|
24
|
+
const { indexText, files, limits } = input;
|
|
25
|
+
const maxBytes = limits?.maxBytes ?? MEMORY_INDEX_MAX_BYTES;
|
|
26
|
+
const maxLineChars = limits?.maxLineChars ?? MEMORY_INDEX_MAX_LINE_CHARS;
|
|
27
|
+
const minHookSupport = limits?.minHookSupport ?? MEMORY_INDEX_MIN_HOOK_SUPPORT;
|
|
28
|
+
const bytes = Buffer.byteLength(indexText, 'utf8');
|
|
29
|
+
const findings: Finding[] = [];
|
|
30
|
+
if (bytes > maxBytes) {
|
|
31
|
+
findings.push({ kind: 'over-size', detail: `${bytes} bytes exceeds maximum ${maxBytes}` });
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Count physical lines; a final newline terminates a line, rather than adding one.
|
|
35
|
+
const lines = indexText === '' ? [] : indexText.split(/\r?\n/u);
|
|
36
|
+
if (lines.at(-1) === '') lines.pop();
|
|
37
|
+
const indexed = new Map<string, number>();
|
|
38
|
+
for (const [offset, text] of lines.entries()) {
|
|
39
|
+
const line = offset + 1;
|
|
40
|
+
// String length measures UTF-16 code units, not bytes or Unicode code points.
|
|
41
|
+
if (text.length > maxLineChars) {
|
|
42
|
+
findings.push({ kind: 'long-line', line, detail: `${text.length} UTF-16 code units exceeds maximum ${maxLineChars}` });
|
|
43
|
+
}
|
|
44
|
+
const match = /^- \[(.*?)\]\((.*?)\)\s*—\s*(.*)$/u.exec(text);
|
|
45
|
+
if (match === null) continue;
|
|
46
|
+
const file = match[2]!;
|
|
47
|
+
const previous = indexed.get(file);
|
|
48
|
+
if (previous !== undefined) {
|
|
49
|
+
findings.push({ kind: 'duplicate-link', line, file, detail: `already linked on line ${previous}` });
|
|
50
|
+
} else {
|
|
51
|
+
indexed.set(file, line);
|
|
52
|
+
}
|
|
53
|
+
const content = files.get(file);
|
|
54
|
+
if (content === undefined) {
|
|
55
|
+
findings.push({ kind: 'broken-link', line, file, detail: 'linked file is absent' });
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const tokens = (match[3]!.split(';', 1)[0]!.match(/[\p{L}\p{N}]{4,}/gu) ?? []).map(token => token.toLowerCase());
|
|
59
|
+
// Fewer than three tokens are too short for this heuristic to judge.
|
|
60
|
+
if (tokens.length < 3) continue;
|
|
61
|
+
const lowerContent = content.toLowerCase();
|
|
62
|
+
const missing = tokens.filter(token => !lowerContent.includes(token));
|
|
63
|
+
const supported = tokens.length - missing.length;
|
|
64
|
+
const support = supported / tokens.length;
|
|
65
|
+
if (support < minHookSupport) {
|
|
66
|
+
findings.push({
|
|
67
|
+
kind: 'unsupported-hook', line, file,
|
|
68
|
+
detail: `hook support ${support} (${supported}/${tokens.length}) below minimum ${minHookSupport}; missing tokens: ${missing.join(', ')}`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
for (const file of [...files.keys()].sort()) {
|
|
73
|
+
if (!indexed.has(file)) findings.push({ kind: 'unindexed-file', file, detail: 'file has no index entry' });
|
|
74
|
+
}
|
|
75
|
+
// Whole-index findings precede line findings; ties use kind, then file order.
|
|
76
|
+
findings.sort((a, b) => (a.line ?? 0) - (b.line ?? 0)
|
|
77
|
+
|| (a.kind < b.kind ? -1 : a.kind > b.kind ? 1 : 0)
|
|
78
|
+
|| ((a.file ?? '') < (b.file ?? '') ? -1 : (a.file ?? '') > (b.file ?? '') ? 1 : 0));
|
|
79
|
+
return { bytes, lines: lines.length, findings };
|
|
80
|
+
}
|