@dzhechkov/harness-core 0.7.2 → 0.7.3

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.
Files changed (57) hide show
  1. package/.dz-manifest.json +101 -41
  2. package/README.md +1 -1
  3. package/dist/event-chain.d.ts +50 -0
  4. package/dist/event-chain.d.ts.map +1 -1
  5. package/dist/event-chain.js +31 -0
  6. package/dist/event-chain.js.map +1 -1
  7. package/dist/index.d.ts +8 -5
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +6 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/name-check.d.ts +98 -0
  12. package/dist/name-check.d.ts.map +1 -0
  13. package/dist/name-check.js +333 -0
  14. package/dist/name-check.js.map +1 -0
  15. package/dist/operations.d.ts.map +1 -1
  16. package/dist/operations.js +25 -4
  17. package/dist/operations.js.map +1 -1
  18. package/dist/provenance.d.ts +100 -92
  19. package/dist/provenance.d.ts.map +1 -1
  20. package/dist/provenance.js +122 -122
  21. package/dist/provenance.js.map +1 -1
  22. package/dist/recall-domain-boost.d.ts +10 -3
  23. package/dist/recall-domain-boost.d.ts.map +1 -1
  24. package/dist/recall-domain-boost.js +7 -0
  25. package/dist/recall-domain-boost.js.map +1 -1
  26. package/dist/recall-hook-policy.d.ts +15 -0
  27. package/dist/recall-hook-policy.d.ts.map +1 -1
  28. package/dist/recall-hook-policy.js +59 -0
  29. package/dist/recall-hook-policy.js.map +1 -1
  30. package/dist/recap.d.ts +146 -0
  31. package/dist/recap.d.ts.map +1 -0
  32. package/dist/recap.js +346 -0
  33. package/dist/recap.js.map +1 -0
  34. package/dist/retro.d.ts +131 -0
  35. package/dist/retro.d.ts.map +1 -0
  36. package/dist/retro.js +207 -0
  37. package/dist/retro.js.map +1 -0
  38. package/dist/score.d.ts +21 -0
  39. package/dist/score.d.ts.map +1 -1
  40. package/dist/score.js +44 -3
  41. package/dist/score.js.map +1 -1
  42. package/dist/vector-tier.d.ts +54 -0
  43. package/dist/vector-tier.d.ts.map +1 -1
  44. package/dist/vector-tier.js +69 -8
  45. package/dist/vector-tier.js.map +1 -1
  46. package/package.json +5 -5
  47. package/sbom.json +190 -40
  48. package/src/event-chain.ts +64 -0
  49. package/src/index.ts +12 -0
  50. package/src/name-check.ts +331 -0
  51. package/src/operations.ts +26 -5
  52. package/src/provenance.ts +217 -0
  53. package/src/recall-domain-boost.ts +10 -3
  54. package/src/recall-hook-policy.ts +60 -0
  55. package/src/recap.ts +462 -0
  56. package/src/score.ts +53 -3
  57. package/src/vector-tier.ts +109 -10
package/sbom.json CHANGED
@@ -25,7 +25,7 @@
25
25
  "hashes": [
26
26
  {
27
27
  "alg": "SHA-256",
28
- "content": "587e7d4379b3e2e05f7d91fedefec59d1f078e4172650ca602c035c52133ea30"
28
+ "content": "3d6803a5a4b3908b421a11f990e3bada3c4874c152df754d349e0768c64dd114"
29
29
  }
30
30
  ]
31
31
  },
@@ -1195,7 +1195,7 @@
1195
1195
  "hashes": [
1196
1196
  {
1197
1197
  "alg": "SHA-256",
1198
- "content": "ded196d2527e16e60981cef9d2502d1d5eeedbaa7c40be95ac178522682d1693"
1198
+ "content": "2414c9d733242709baa1f34c003a2f7fa954446e8d132b9ee0c7e87ef41135b1"
1199
1199
  }
1200
1200
  ]
1201
1201
  },
@@ -1205,7 +1205,7 @@
1205
1205
  "hashes": [
1206
1206
  {
1207
1207
  "alg": "SHA-256",
1208
- "content": "06e9f082b4e361b796042815bd75d807231d98965e9acbbb63d500efa932a87d"
1208
+ "content": "c94f56cfab60c125f22c2ca4f7e0b29e69fe95b1e1ff6a5a77409d582aabec85"
1209
1209
  }
1210
1210
  ]
1211
1211
  },
@@ -1215,7 +1215,7 @@
1215
1215
  "hashes": [
1216
1216
  {
1217
1217
  "alg": "SHA-256",
1218
- "content": "8ad73164e893627c867468a21bc5dd1386dd82adb3ea06b2b785cfa7415d558b"
1218
+ "content": "94f23468a3a149519c22a0f15940732c687724fbe5d06a9644eb7cc10a7edd76"
1219
1219
  }
1220
1220
  ]
1221
1221
  },
@@ -1225,7 +1225,7 @@
1225
1225
  "hashes": [
1226
1226
  {
1227
1227
  "alg": "SHA-256",
1228
- "content": "a874ba52b35ed445f2310a04bb0fbdb0ba34db18601d0086e7e666b7bafc8a16"
1228
+ "content": "af3646d640a123d797d40e12f91958642b6b6d809c9ff226727313f546b23e9f"
1229
1229
  }
1230
1230
  ]
1231
1231
  },
@@ -1555,7 +1555,7 @@
1555
1555
  "hashes": [
1556
1556
  {
1557
1557
  "alg": "SHA-256",
1558
- "content": "ca55ae64cc3ed8231536e01ebf0126951e19c86e9ce7b280e4ef3124d655d1e7"
1558
+ "content": "f512a420cc4c84b819a00dd613d61548c579beda37fdbad1048db908607ee9b7"
1559
1559
  }
1560
1560
  ]
1561
1561
  },
@@ -1565,7 +1565,7 @@
1565
1565
  "hashes": [
1566
1566
  {
1567
1567
  "alg": "SHA-256",
1568
- "content": "a6d5eff969b6e2bdd19ec2514d6af8703bc0e06737a50c2a1f51a76474845c64"
1568
+ "content": "d35757b61acd07506d86b45a33a8b9dbfe95cbf14869b8ff5d5f0bee7b9bb109"
1569
1569
  }
1570
1570
  ]
1571
1571
  },
@@ -1575,7 +1575,7 @@
1575
1575
  "hashes": [
1576
1576
  {
1577
1577
  "alg": "SHA-256",
1578
- "content": "a3bd929058bbee94e4e6aba47c1a6390d877762944253893ca3de3a8498d1357"
1578
+ "content": "171ff557c64808f8d2909a838cc7727fcd02017bf5796a850cc3a0da2d18b3c3"
1579
1579
  }
1580
1580
  ]
1581
1581
  },
@@ -1585,7 +1585,7 @@
1585
1585
  "hashes": [
1586
1586
  {
1587
1587
  "alg": "SHA-256",
1588
- "content": "657b9ca57b50c73bc6ee5440b180419e5bfdfd89b34392ab038d507bb2343308"
1588
+ "content": "a2dbdcfeee83de55d7e4eca033463dff9ba7029927f09ef835c45c8e9dd5cb00"
1589
1589
  }
1590
1590
  ]
1591
1591
  },
@@ -2069,6 +2069,46 @@
2069
2069
  }
2070
2070
  ]
2071
2071
  },
2072
+ {
2073
+ "type": "file",
2074
+ "name": "dist/name-check.d.ts",
2075
+ "hashes": [
2076
+ {
2077
+ "alg": "SHA-256",
2078
+ "content": "e51cc3ad302613478e11ac7254bff6a73159a8c9000b80eb78f1e835e891d15c"
2079
+ }
2080
+ ]
2081
+ },
2082
+ {
2083
+ "type": "file",
2084
+ "name": "dist/name-check.d.ts.map",
2085
+ "hashes": [
2086
+ {
2087
+ "alg": "SHA-256",
2088
+ "content": "6e2dde7870005e8c5747b4667cd0168c4e35d63bd0099fbc951216c002cf13a8"
2089
+ }
2090
+ ]
2091
+ },
2092
+ {
2093
+ "type": "file",
2094
+ "name": "dist/name-check.js",
2095
+ "hashes": [
2096
+ {
2097
+ "alg": "SHA-256",
2098
+ "content": "12d46cd4e8aea69828b32cba892e3cd62e3577ca7333b4b7d6d3116084e59d8f"
2099
+ }
2100
+ ]
2101
+ },
2102
+ {
2103
+ "type": "file",
2104
+ "name": "dist/name-check.js.map",
2105
+ "hashes": [
2106
+ {
2107
+ "alg": "SHA-256",
2108
+ "content": "9dd4e767097bf6f381ba4e82e2bcdc43464d5a01a4b115127eefa8008cbd6ef3"
2109
+ }
2110
+ ]
2111
+ },
2072
2112
  {
2073
2113
  "type": "file",
2074
2114
  "name": "dist/named-lock.d.ts",
@@ -2165,7 +2205,7 @@
2165
2205
  "hashes": [
2166
2206
  {
2167
2207
  "alg": "SHA-256",
2168
- "content": "efe8d5f4abd56fcd22f00127b3f508d1c4be60e7796d829fc8fc32bdbb19fea1"
2208
+ "content": "6c6cf4a6859e03bab593300efa8fd5ab6a80f691a0eec0146b3e00ac862c99ff"
2169
2209
  }
2170
2210
  ]
2171
2211
  },
@@ -2175,7 +2215,7 @@
2175
2215
  "hashes": [
2176
2216
  {
2177
2217
  "alg": "SHA-256",
2178
- "content": "df1d2ee2c5482af449c1439b19f37c021e9381dfebb827570593633fc0a48cf4"
2218
+ "content": "d72923c86c7bb92f10d02f0289fe637f841a5f181254553285ff5b5aa3c3a48b"
2179
2219
  }
2180
2220
  ]
2181
2221
  },
@@ -2185,7 +2225,7 @@
2185
2225
  "hashes": [
2186
2226
  {
2187
2227
  "alg": "SHA-256",
2188
- "content": "d664332f9305bb544557bbcead9ee14e38e246eff5691298fd26f454869480a0"
2228
+ "content": "28effca1c92538c9cee32f2d955d8747c3f37e9d4457310c9dcaaf3a2565708a"
2189
2229
  }
2190
2230
  ]
2191
2231
  },
@@ -2435,7 +2475,7 @@
2435
2475
  "hashes": [
2436
2476
  {
2437
2477
  "alg": "SHA-256",
2438
- "content": "375411052b6ea066ab712c7f98e6d4af7d442d5cfff39a5c25f5f718908e1486"
2478
+ "content": "25497c798af7e7b614acea014826873c3db41232bdbda57399814b5b8b2e2687"
2439
2479
  }
2440
2480
  ]
2441
2481
  },
@@ -2445,7 +2485,7 @@
2445
2485
  "hashes": [
2446
2486
  {
2447
2487
  "alg": "SHA-256",
2448
- "content": "ccd193feee34f83c50584e66f534a91ae0b9b80101399f73201915e1e276ed07"
2488
+ "content": "ec7f64eb9a3938a446beba21cf1134e901522c87e69639ba2d27fa161a9f0236"
2449
2489
  }
2450
2490
  ]
2451
2491
  },
@@ -2455,7 +2495,7 @@
2455
2495
  "hashes": [
2456
2496
  {
2457
2497
  "alg": "SHA-256",
2458
- "content": "4580cbd83247210069a72c63b0dc547de6919a602b993b25cd63b704fd61c18b"
2498
+ "content": "09bf8999ae95138b5fe21e70af3642cb6bea0593365108e8756e820f53c6aafc"
2459
2499
  }
2460
2500
  ]
2461
2501
  },
@@ -2465,7 +2505,7 @@
2465
2505
  "hashes": [
2466
2506
  {
2467
2507
  "alg": "SHA-256",
2468
- "content": "6198c9a2d37c22f88e8a88253cb044ed7dcb05e88f3173a9a1bfe6083c28a954"
2508
+ "content": "db6c50a2c5cbba8dc47671bd540740ed8e3bfbc742a51d9dd3a4ecc343ff32a8"
2469
2509
  }
2470
2510
  ]
2471
2511
  },
@@ -2635,7 +2675,7 @@
2635
2675
  "hashes": [
2636
2676
  {
2637
2677
  "alg": "SHA-256",
2638
- "content": "91ca5c6a8be2500d2fe3f63402c190452c7f9e0edfaf4ec4afb71cba768e0b5d"
2678
+ "content": "3af6fb7420e325684a1b33645630d62710d90b91ab534dfeb4fd0ddea125f7a3"
2639
2679
  }
2640
2680
  ]
2641
2681
  },
@@ -2645,7 +2685,7 @@
2645
2685
  "hashes": [
2646
2686
  {
2647
2687
  "alg": "SHA-256",
2648
- "content": "6635208bcca0e671199a5787a968f7f78e21e510c412d3149d9a4936db60a429"
2688
+ "content": "fa3b2037cb9aaf03760cca5e0abb51cff3f280222cfbf0cfc0cc039a18932a54"
2649
2689
  }
2650
2690
  ]
2651
2691
  },
@@ -2655,7 +2695,7 @@
2655
2695
  "hashes": [
2656
2696
  {
2657
2697
  "alg": "SHA-256",
2658
- "content": "d8f0d482ad383a941993fc5b9ba79ed89f16234f5d3accdfb784924d0e11c2e6"
2698
+ "content": "e5a79c0d2078025a57f242b4b022a403d1332e4638704b5c2afd98b385a6da66"
2659
2699
  }
2660
2700
  ]
2661
2701
  },
@@ -2665,7 +2705,7 @@
2665
2705
  "hashes": [
2666
2706
  {
2667
2707
  "alg": "SHA-256",
2668
- "content": "75cf4cfe171bb0230f16f99c9ec1cdf723bbca3fe18c98d92d83debea2d64c40"
2708
+ "content": "f19c12f0da5163c644769aa836ed7e7a162948fedefb185c7ff366b8d249a059"
2669
2709
  }
2670
2710
  ]
2671
2711
  },
@@ -2675,7 +2715,7 @@
2675
2715
  "hashes": [
2676
2716
  {
2677
2717
  "alg": "SHA-256",
2678
- "content": "9a74c9472688a4326b10065f61c9294b473baf232a27cf69f6ae7a74a5ce9bb6"
2718
+ "content": "cc8eb4f783c2592d9f4e06f35e74fd51a046dde67dbe1a8fea3c21bf15d14332"
2679
2719
  }
2680
2720
  ]
2681
2721
  },
@@ -2685,7 +2725,7 @@
2685
2725
  "hashes": [
2686
2726
  {
2687
2727
  "alg": "SHA-256",
2688
- "content": "0631cf526a8aae076d5512bcc75c629ea69830f65aa267ade03028e532a2a923"
2728
+ "content": "9b428a9cbcbe24651a08b70f3f205f35a78172cfa4dc4da6a0c733899765aa7a"
2689
2729
  }
2690
2730
  ]
2691
2731
  },
@@ -2695,7 +2735,7 @@
2695
2735
  "hashes": [
2696
2736
  {
2697
2737
  "alg": "SHA-256",
2698
- "content": "73fa2d3bcedb0158a2860171b66046aa67c7aa1aab80a93502588202f0aed09e"
2738
+ "content": "50afae931985ee82a526c01517c02479db8e34f3d5e5b34531bf64de31aa5534"
2699
2739
  }
2700
2740
  ]
2701
2741
  },
@@ -2705,7 +2745,7 @@
2705
2745
  "hashes": [
2706
2746
  {
2707
2747
  "alg": "SHA-256",
2708
- "content": "abdfa155fca15e8aa950430d201c2e6754872c0b02d0201a10c5f0923210373a"
2748
+ "content": "15db55ef0c625590db592e2909ee3bd3a4cf09ca8d082b222005633babd71a30"
2709
2749
  }
2710
2750
  ]
2711
2751
  },
@@ -2749,6 +2789,46 @@
2749
2789
  }
2750
2790
  ]
2751
2791
  },
2792
+ {
2793
+ "type": "file",
2794
+ "name": "dist/recap.d.ts",
2795
+ "hashes": [
2796
+ {
2797
+ "alg": "SHA-256",
2798
+ "content": "d030a9e56f07a646d74f4fed0bb720f4ab83e828c6bf7996aa35f6889ee4df0b"
2799
+ }
2800
+ ]
2801
+ },
2802
+ {
2803
+ "type": "file",
2804
+ "name": "dist/recap.d.ts.map",
2805
+ "hashes": [
2806
+ {
2807
+ "alg": "SHA-256",
2808
+ "content": "367d3e1ac843c403dc089ef2b3cf0392b54cf51762f51f11f418fb41b651cfe4"
2809
+ }
2810
+ ]
2811
+ },
2812
+ {
2813
+ "type": "file",
2814
+ "name": "dist/recap.js",
2815
+ "hashes": [
2816
+ {
2817
+ "alg": "SHA-256",
2818
+ "content": "0bcfc4c0622484059c428225e5618337259e8b4f8762ba7d8c562ce986cf9fbf"
2819
+ }
2820
+ ]
2821
+ },
2822
+ {
2823
+ "type": "file",
2824
+ "name": "dist/recap.js.map",
2825
+ "hashes": [
2826
+ {
2827
+ "alg": "SHA-256",
2828
+ "content": "b1cd82770e8d860ee9ac7fc43157ae63bf990d33ed4c69f7ef554ad6ac333996"
2829
+ }
2830
+ ]
2831
+ },
2752
2832
  {
2753
2833
  "type": "file",
2754
2834
  "name": "dist/recommend.d.ts",
@@ -2949,6 +3029,46 @@
2949
3029
  }
2950
3030
  ]
2951
3031
  },
3032
+ {
3033
+ "type": "file",
3034
+ "name": "dist/retro.d.ts",
3035
+ "hashes": [
3036
+ {
3037
+ "alg": "SHA-256",
3038
+ "content": "2f76203c306a37f03e1398149d2c3b48e78c33e02d37e6666bc94d1b2db3eb1e"
3039
+ }
3040
+ ]
3041
+ },
3042
+ {
3043
+ "type": "file",
3044
+ "name": "dist/retro.d.ts.map",
3045
+ "hashes": [
3046
+ {
3047
+ "alg": "SHA-256",
3048
+ "content": "e56d4b6ad4d3c74bb9b2426a70c66e201d6461965721f0f13d7ec950519b25a4"
3049
+ }
3050
+ ]
3051
+ },
3052
+ {
3053
+ "type": "file",
3054
+ "name": "dist/retro.js",
3055
+ "hashes": [
3056
+ {
3057
+ "alg": "SHA-256",
3058
+ "content": "53b75c5be30a9affbe0da9a7e96c3d77d0af5aa3e5e8773aa4da4f4666782e2a"
3059
+ }
3060
+ ]
3061
+ },
3062
+ {
3063
+ "type": "file",
3064
+ "name": "dist/retro.js.map",
3065
+ "hashes": [
3066
+ {
3067
+ "alg": "SHA-256",
3068
+ "content": "dbf3dd2ad4597b1a065629c1db6c313fd9b837db4368b798982a78a7245e760b"
3069
+ }
3070
+ ]
3071
+ },
2952
3072
  {
2953
3073
  "type": "file",
2954
3074
  "name": "dist/risk-scoring.d.ts",
@@ -3155,7 +3275,7 @@
3155
3275
  "hashes": [
3156
3276
  {
3157
3277
  "alg": "SHA-256",
3158
- "content": "235e8b11d72281e15c40d10cf1aa66733903cf92d32631f815ec25b92fe40f03"
3278
+ "content": "337431dbd1999ee5ed97b00080c9044179998b4956381478331eda763cde23da"
3159
3279
  }
3160
3280
  ]
3161
3281
  },
@@ -3165,7 +3285,7 @@
3165
3285
  "hashes": [
3166
3286
  {
3167
3287
  "alg": "SHA-256",
3168
- "content": "901e0f08858d312d6a2d544ec9c7e114e9748b703fe4ef5e119d85344f390722"
3288
+ "content": "07c589877c4bf8f1a7c673e839e4760efb37143de8c23bc044319c8931d8abd8"
3169
3289
  }
3170
3290
  ]
3171
3291
  },
@@ -3175,7 +3295,7 @@
3175
3295
  "hashes": [
3176
3296
  {
3177
3297
  "alg": "SHA-256",
3178
- "content": "1466e78432028c66076f10acb5d2a6b9bc50e24d7c176c2c49f9cfffb67a9238"
3298
+ "content": "d104c4e6d4003f424dee7416794e5570b61171bc5567da2ca88084e180ebf674"
3179
3299
  }
3180
3300
  ]
3181
3301
  },
@@ -3185,7 +3305,7 @@
3185
3305
  "hashes": [
3186
3306
  {
3187
3307
  "alg": "SHA-256",
3188
- "content": "8ceb3f4eed26b977bcd3b39216d8392bc830e91960497ae5edd453130ae4bc27"
3308
+ "content": "9e1072058014143ec11dd4fa7f13ff73a73eeff6563547d02c63458a5c9f2203"
3189
3309
  }
3190
3310
  ]
3191
3311
  },
@@ -3835,7 +3955,7 @@
3835
3955
  "hashes": [
3836
3956
  {
3837
3957
  "alg": "SHA-256",
3838
- "content": "15c079d1fa32d9d914323ed8a9646a6906b316ace41991ca571a3f9d639d1f9c"
3958
+ "content": "4bafc3c274ab27172d39d875b1fac8c0d6738f6efa48d7aca38cfda724cb774a"
3839
3959
  }
3840
3960
  ]
3841
3961
  },
@@ -3845,7 +3965,7 @@
3845
3965
  "hashes": [
3846
3966
  {
3847
3967
  "alg": "SHA-256",
3848
- "content": "49864c93925b27de2ada2d4eea9c24d474be7f7134efc6a90545a327c9803e3e"
3968
+ "content": "d19593282cef07ecb069e9ae08fbe36b8d235d0df58624cfc34a22f5746cbb4e"
3849
3969
  }
3850
3970
  ]
3851
3971
  },
@@ -3855,7 +3975,7 @@
3855
3975
  "hashes": [
3856
3976
  {
3857
3977
  "alg": "SHA-256",
3858
- "content": "0117b20ba727e5d625366f6bb7318bb9e4495f0a3c23193b6ea374cbd358c460"
3978
+ "content": "d3751463c0987bb9b3440d00222218cb2096a1423725bb75b317402e61598264"
3859
3979
  }
3860
3980
  ]
3861
3981
  },
@@ -3865,7 +3985,7 @@
3865
3985
  "hashes": [
3866
3986
  {
3867
3987
  "alg": "SHA-256",
3868
- "content": "5dbad708d80c7bda481cd2d7b9d3a2072fe4ea482b443c2af518d097d28ad762"
3988
+ "content": "c0033e34c031087b0d4ddef067fa0ea9ee39c1f0dff002275a9da68a5c8b7da8"
3869
3989
  }
3870
3990
  ]
3871
3991
  },
@@ -3995,7 +4115,7 @@
3995
4115
  "hashes": [
3996
4116
  {
3997
4117
  "alg": "SHA-256",
3998
- "content": "52045af38109cd064cf8472418fcac0d59e54a9faa43edaddf1a3bfbc15be599"
4118
+ "content": "382d5b61f823b15145c4fcb5b24b588334a6b9de9759b3d19ff8b1aa46eeae5e"
3999
4119
  }
4000
4120
  ]
4001
4121
  },
@@ -4295,7 +4415,7 @@
4295
4415
  "hashes": [
4296
4416
  {
4297
4417
  "alg": "SHA-256",
4298
- "content": "f8306131a5021167169b525733da711ff378382f0a7368376f35834c350a9e23"
4418
+ "content": "0c81b088e76780fef7dd902c0cd01dd51b4bf192d7fb5241eaf0ecf35dccfbdd"
4299
4419
  }
4300
4420
  ]
4301
4421
  },
@@ -4385,7 +4505,7 @@
4385
4505
  "hashes": [
4386
4506
  {
4387
4507
  "alg": "SHA-256",
4388
- "content": "38ae85c92cffbfd299f7a629b85a3d5424fb45e485145b112b2ec401f6d92770"
4508
+ "content": "f23a857f1903692b63bbeed26546c338a539917b31aa597d3e0f85988869ef16"
4389
4509
  }
4390
4510
  ]
4391
4511
  },
@@ -4509,6 +4629,16 @@
4509
4629
  }
4510
4630
  ]
4511
4631
  },
4632
+ {
4633
+ "type": "file",
4634
+ "name": "src/name-check.ts",
4635
+ "hashes": [
4636
+ {
4637
+ "alg": "SHA-256",
4638
+ "content": "f65b9be8ecb2e0df5851c2bd323863247465381127a57fa9a9fdb51ab0dde0f8"
4639
+ }
4640
+ ]
4641
+ },
4512
4642
  {
4513
4643
  "type": "file",
4514
4644
  "name": "src/named-lock.ts",
@@ -4535,7 +4665,7 @@
4535
4665
  "hashes": [
4536
4666
  {
4537
4667
  "alg": "SHA-256",
4538
- "content": "23184909f1c13b57bdfd0655cf28bc536bbe77d28e74a99d063a123a78572f6c"
4668
+ "content": "6c6afc85769dc357663f58d198330521b63519870a7d819bfbd2d81a94b1ba6f"
4539
4669
  }
4540
4670
  ]
4541
4671
  },
@@ -4599,6 +4729,16 @@
4599
4729
  }
4600
4730
  ]
4601
4731
  },
4732
+ {
4733
+ "type": "file",
4734
+ "name": "src/provenance.ts",
4735
+ "hashes": [
4736
+ {
4737
+ "alg": "SHA-256",
4738
+ "content": "d76e4adf1de495beb6c30cc665c17a7d9a43657fb4e1ec0640208b1617a22cb6"
4739
+ }
4740
+ ]
4741
+ },
4602
4742
  {
4603
4743
  "type": "file",
4604
4744
  "name": "src/publish-signing.ts",
@@ -4645,7 +4785,7 @@
4645
4785
  "hashes": [
4646
4786
  {
4647
4787
  "alg": "SHA-256",
4648
- "content": "30be4bf7bf7713cef8b5273b575061200c99f36042131701744af950853f2c84"
4788
+ "content": "54f203fa41c6ef67bd01ea87032f88b039464cce005b9c526e737481377de078"
4649
4789
  }
4650
4790
  ]
4651
4791
  },
@@ -4655,7 +4795,7 @@
4655
4795
  "hashes": [
4656
4796
  {
4657
4797
  "alg": "SHA-256",
4658
- "content": "b4a3c6b3fc2e8338efeee729038a01e3881dc578b65427ffbb03c236e160b470"
4798
+ "content": "6f40ab68a18d3537171af7e6939edc482744a6eff938f90802fed3609e3e2e6e"
4659
4799
  }
4660
4800
  ]
4661
4801
  },
@@ -4669,6 +4809,16 @@
4669
4809
  }
4670
4810
  ]
4671
4811
  },
4812
+ {
4813
+ "type": "file",
4814
+ "name": "src/recap.ts",
4815
+ "hashes": [
4816
+ {
4817
+ "alg": "SHA-256",
4818
+ "content": "19661ff14fee41eaac8047914b4fdc48212f0b0e74c6fe372ac71e3b251262ab"
4819
+ }
4820
+ ]
4821
+ },
4672
4822
  {
4673
4823
  "type": "file",
4674
4824
  "name": "src/recommend.ts",
@@ -4765,7 +4915,7 @@
4765
4915
  "hashes": [
4766
4916
  {
4767
4917
  "alg": "SHA-256",
4768
- "content": "d630cc8713b8ed604ae6f4d97dde59ce3a38080ed2f7e43a5d543d236c5cb4dc"
4918
+ "content": "94674ad2db1d6cacb5fee303b343b52b2cbf5264885cccb176cd7e54071f3530"
4769
4919
  }
4770
4920
  ]
4771
4921
  },
@@ -4945,7 +5095,7 @@
4945
5095
  "hashes": [
4946
5096
  {
4947
5097
  "alg": "SHA-256",
4948
- "content": "92f8274432847f05c6b0584542dfc4a12be89e828e34e025474f2c7c0a53c925"
5098
+ "content": "b26ad5393ef0aa234ad0c0405a8f47c2e316b3523def8ec074d0460703c031ad"
4949
5099
  }
4950
5100
  ]
4951
5101
  },
@@ -868,3 +868,67 @@ export function renderEventChainVerification(v: EventChainVerification, label: s
868
868
  if (kinds.length > 0) parts.push(kinds.join('/'));
869
869
  return `${parts.join(' · ')} — ${v.scope}`;
870
870
  }
871
+
872
+ /**
873
+ * How old a defect is relative to the log's CURRENT unbroken run.
874
+ *
875
+ * `historical` — the break happened, and an unbroken segment has run since. It cannot be un-happened
876
+ * and it does not make today's records suspect. `live` — the break is inside the segment we are
877
+ * still appending to, so records after it are the ones a verdict would rest on.
878
+ */
879
+ /**
880
+ * Where a defect sits relative to the log's current unbroken run.
881
+ *
882
+ * Deliberately NOT called "historical". A break followed by ONE record is not a healed log, and a
883
+ * name that implies healing would let a caller skip the count — the reviewer's exact objection
884
+ * (codex `gpt-5.6-sol`, 2026-08-24: a defect at line 2 of 3 was filed as historical because line 3
885
+ * existed). These names state a position; the COUNT states how much evidence stands behind it, and
886
+ * the count is what a caller must show.
887
+ */
888
+ export type ChainDefectAge = 'before-run' | 'in-run';
889
+
890
+ /**
891
+ * The line where the log's current unbroken run begins: one past the last defect, or 1 when there
892
+ * are none.
893
+ *
894
+ * Why this exists: `dz doctor` reported "learning verdicts computed from this log are unsafe" for
895
+ * both `.dz` event logs, flatly, for four weeks. MEASURED 2026-08-24 — every defect in both files
896
+ * precedes an unbroken run of 998 of 1138 rows in one and 88 of 426 in the other. The verdict was
897
+ * true of the file and false of those runs, and a permanent red about something nobody can change is
898
+ * a red that stops being read.
899
+ */
900
+ export function liveSegmentStart(verification: EventChainVerification): number {
901
+ let last = 0;
902
+ for (const d of verification.defects) if (d.line > last) last = d.line;
903
+ return last + 1;
904
+ }
905
+
906
+ export interface ChainDefectAges {
907
+ /** Defects that an unbroken run has followed. How MUCH of a run is `runRecords`, never implied. */
908
+ readonly beforeRun: readonly EventChainDefect[];
909
+ /** Defects with nothing sound after them — the strong verdict is earned here. */
910
+ readonly inRun: readonly EventChainDefect[];
911
+ /** First line of the current unbroken run. */
912
+ readonly runFrom: number;
913
+ /**
914
+ * Records in that run. THE NUMBER IS THE EVIDENCE: 998 sound records after a break say something a
915
+ * caller may relax on; 1 says almost nothing, and a caller that prints "sound" without printing
916
+ * this number is overclaiming on its behalf.
917
+ */
918
+ readonly runRecords: number;
919
+ }
920
+
921
+ /**
922
+ * Split defects by whether an unbroken run followed them, and say how long that run is.
923
+ *
924
+ * `runFrom` is computed from the defects themselves, so a defect can never classify itself: the run
925
+ * only begins after the LAST of them. A log whose newest defect is its final record therefore has an
926
+ * empty `beforeRun` and a `runRecords` of zero.
927
+ */
928
+ export function classifyChainDefects(verification: EventChainVerification, totalRecords: number): ChainDefectAges {
929
+ const runFrom = liveSegmentStart(verification);
930
+ const runRecords = Math.max(0, totalRecords - runFrom + 1);
931
+ const beforeRun = runRecords > 0 ? verification.defects : [];
932
+ const inRun = runRecords > 0 ? [] : verification.defects;
933
+ return { beforeRun, inRun, runFrom, runRecords };
934
+ }
package/src/index.ts CHANGED
@@ -127,6 +127,8 @@ export {
127
127
  readVectorEngineMode,
128
128
  readHarmonizeThreshold,
129
129
  vectorMirrorEnabled,
130
+ mirrorWriterReason,
131
+ mirrorWriterExplanation,
130
132
  resolveVectorEngine,
131
133
  mirrorEntriesToVector,
132
134
  mirrorPatternsToVector,
@@ -155,6 +157,7 @@ export type {
155
157
  RankedPattern,
156
158
  VectorServiceOptions,
157
159
  VectorTierStatus,
160
+ MirrorWriterState,
158
161
  HarmonizeItem,
159
162
  HarmonizeCluster,
160
163
  HarmonizeReport,
@@ -311,6 +314,8 @@ export {
311
314
  DEFAULT_RECALL_HOOK_BUDGET_CHARS,
312
315
  MIN_PROMPT_CHARS,
313
316
  MIN_CONTENT_TOKENS,
317
+ closenessLine,
318
+ anyAboveFloor,
314
319
  } from './recall-hook-policy.js';
315
320
  export type { QueryLang, RecallFloors, HookCandidate, HookSelection } from './recall-hook-policy.js';
316
321
  export {
@@ -437,6 +442,8 @@ export {
437
442
  rewriteSnapshotUnchanged,
438
443
  guardedRewrite,
439
444
  DEFAULT_REWRITE_ATTEMPTS,
445
+ liveSegmentStart,
446
+ classifyChainDefects,
440
447
  } from './event-chain.js';
441
448
  export type {
442
449
  ChainFields,
@@ -451,6 +458,8 @@ export type {
451
458
  EventChainDefectKind,
452
459
  EventChainVerification,
453
460
  VerifyEventChainOptions,
461
+ ChainDefectAge,
462
+ ChainDefectAges,
454
463
  } from './event-chain.js';
455
464
  export { decideProvenance, environmentCanMintProvenance, publishArgv, discoverPackages, publishPackages, bumpPatch, compareVersions, findUnpackagedSkills, orderByDependencies, syncReadmeVersion } from './publish.js';
456
465
  export { fetchAllDownloads } from './downloads.js';
@@ -805,6 +814,9 @@ export {
805
814
  // Run-process scorecard (feature dz-score, Reading C) — scores the DISCIPLINE of a feature-adr run
806
815
  // from its artifacts. Descriptive-only, permanently: it never gates.
807
816
  export * from './score.js';
817
+ export * from './recap.js';
818
+ export * from './provenance.js';
819
+ export * from './name-check.js';
808
820
 
809
821
  // Mutation gate (feature ha-mutation-gate) — deliberately break each NAMED protection in a scratch
810
822
  // copy, run the suite, REQUIRE red. Proves a test DISCRIMINATES, not merely that it is green.