@dzhechkov/harness-core 0.8.24 → 0.8.25

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 (64) hide show
  1. package/.dz-manifest.json +153 -33
  2. package/README.md +146 -4
  3. package/dist/confirmation-file-gate.d.ts +20 -0
  4. package/dist/confirmation-file-gate.d.ts.map +1 -0
  5. package/dist/confirmation-file-gate.js +76 -0
  6. package/dist/confirmation-file-gate.js.map +1 -0
  7. package/dist/contract-checklist.d.ts +1 -0
  8. package/dist/contract-checklist.d.ts.map +1 -1
  9. package/dist/contract-checklist.js +7 -4
  10. package/dist/contract-checklist.js.map +1 -1
  11. package/dist/core-boundary.d.ts +11 -0
  12. package/dist/core-boundary.d.ts.map +1 -0
  13. package/dist/core-boundary.js +41 -0
  14. package/dist/core-boundary.js.map +1 -0
  15. package/dist/feature-adr-landing.d.ts +4 -2
  16. package/dist/feature-adr-landing.d.ts.map +1 -1
  17. package/dist/feature-adr-landing.js +5 -3
  18. package/dist/feature-adr-landing.js.map +1 -1
  19. package/dist/feature-tier.d.ts +4 -0
  20. package/dist/feature-tier.d.ts.map +1 -0
  21. package/dist/feature-tier.js +55 -0
  22. package/dist/feature-tier.js.map +1 -0
  23. package/dist/index.d.ts +7 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +6 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/journal.d.ts +27 -0
  28. package/dist/journal.d.ts.map +1 -0
  29. package/dist/journal.js +56 -0
  30. package/dist/journal.js.map +1 -0
  31. package/dist/loop-blobs.generated.d.ts +1 -1
  32. package/dist/loop-blobs.generated.d.ts.map +1 -1
  33. package/dist/loop-blobs.generated.js +10 -1
  34. package/dist/loop-blobs.generated.js.map +1 -1
  35. package/dist/patterns.d.ts +5 -0
  36. package/dist/patterns.d.ts.map +1 -1
  37. package/dist/patterns.js +16 -0
  38. package/dist/patterns.js.map +1 -1
  39. package/dist/publish.d.ts +19 -0
  40. package/dist/publish.d.ts.map +1 -1
  41. package/dist/publish.js +38 -16
  42. package/dist/publish.js.map +1 -1
  43. package/dist/run-cleanup.d.ts +26 -0
  44. package/dist/run-cleanup.d.ts.map +1 -0
  45. package/dist/run-cleanup.js +33 -0
  46. package/dist/run-cleanup.js.map +1 -0
  47. package/dist/run-registry.d.ts +61 -0
  48. package/dist/run-registry.d.ts.map +1 -0
  49. package/dist/run-registry.js +163 -0
  50. package/dist/run-registry.js.map +1 -0
  51. package/package.json +6 -6
  52. package/sbom.json +332 -32
  53. package/src/confirmation-file-gate.ts +85 -0
  54. package/src/contract-checklist.ts +11 -5
  55. package/src/core-boundary.ts +43 -0
  56. package/src/feature-adr-landing.ts +8 -4
  57. package/src/feature-tier.ts +56 -0
  58. package/src/index.ts +9 -1
  59. package/src/journal.ts +54 -0
  60. package/src/loop-blobs.generated.ts +10 -1
  61. package/src/patterns.ts +18 -0
  62. package/src/publish.ts +49 -13
  63. package/src/run-cleanup.ts +38 -0
  64. package/src/run-registry.ts +153 -0
package/.dz-manifest.json CHANGED
@@ -9,7 +9,7 @@
9
9
  },
10
10
  {
11
11
  "path": "README.md",
12
- "sha256": "113ecbe403e5275826354f6d5ff12b0e5fb18a7132dc7c6fccd29f06a8afd2e4"
12
+ "sha256": "730f21a43510c2229067affd057ce7b37fc67ee4a686de7064cfea350e1ae444"
13
13
  },
14
14
  {
15
15
  "path": "dist/__tests__/golden-baseline.test.d.ts",
@@ -491,21 +491,53 @@
491
491
  "path": "dist/compounding.js.map",
492
492
  "sha256": "19ff7b3255776240d9a4f24325e1fc7c8f804928f46bf4a7032c3eeff0688e72"
493
493
  },
494
+ {
495
+ "path": "dist/confirmation-file-gate.d.ts",
496
+ "sha256": "0b09682845c90a789e866ce77b65bd1bcceb204c95a718c6807ad73606d75ee9"
497
+ },
498
+ {
499
+ "path": "dist/confirmation-file-gate.d.ts.map",
500
+ "sha256": "f03b495079fa4d6712f29dbdeca0606ef883e2f2df47e9d0084310fbb32a0bf7"
501
+ },
502
+ {
503
+ "path": "dist/confirmation-file-gate.js",
504
+ "sha256": "033af9c6da9a301df4a21aca9fd1befee2e33096b5a0f8da6a2cf0db6e9bfcb3"
505
+ },
506
+ {
507
+ "path": "dist/confirmation-file-gate.js.map",
508
+ "sha256": "feacf0b3a6ae0ce0e97f33e36c9a2fd6f98a29172659235b8c209163a3dc6c43"
509
+ },
494
510
  {
495
511
  "path": "dist/contract-checklist.d.ts",
496
- "sha256": "bf101a58875316681241b76308383ec61ac0d2f60ce3256693a4cf20dacd6749"
512
+ "sha256": "e2596400484084347e7e260676a2409c1883f9e3bef5aa534c46cd3f3a62a04d"
497
513
  },
498
514
  {
499
515
  "path": "dist/contract-checklist.d.ts.map",
500
- "sha256": "fa5598db398ca655764fa07878fa093766211011574c77fd6890476b27a4f332"
516
+ "sha256": "46f24afc07e280fd6bc5cec28796df0d4311fc5bc69b5c106d156421aed415ff"
501
517
  },
502
518
  {
503
519
  "path": "dist/contract-checklist.js",
504
- "sha256": "0943f9f0986ef240395c8d3679bb6d83e95a2259c49d4af3a85bc4a3dbcf3998"
520
+ "sha256": "fa654ab80e1dfacf5c317d1f53acd9fcab55b4f9374ca511993d8b933ded585c"
505
521
  },
506
522
  {
507
523
  "path": "dist/contract-checklist.js.map",
508
- "sha256": "ae1d26c22ddd63c589349a371f371a63b4e83066b94a8a0e93f58b0d976a9f5b"
524
+ "sha256": "4ea4c52968213b2c334b3ce30f2bf72aabfd2956121e7ea1909f5a0a18477ea3"
525
+ },
526
+ {
527
+ "path": "dist/core-boundary.d.ts",
528
+ "sha256": "41ae43ed9d453fcc1ac7eb4d57b8afe47775ef49d071e06dc0bff1aeea33c5df"
529
+ },
530
+ {
531
+ "path": "dist/core-boundary.d.ts.map",
532
+ "sha256": "2e3ab72ef03cd6306b2dd2801dd0b6f8ee53b01a314f9e34dc4133a2b05a79dc"
533
+ },
534
+ {
535
+ "path": "dist/core-boundary.js",
536
+ "sha256": "1aa4c5767d4f0a431d19ed7bf6143d1e8b223cc1f57f15dc49c8825f36c78021"
537
+ },
538
+ {
539
+ "path": "dist/core-boundary.js.map",
540
+ "sha256": "4c88ba310ed850fb42de4cf1c4503600b1ea2b73648ee4e30810abe7b42e5768"
509
541
  },
510
542
  {
511
543
  "path": "dist/cost-ledger.d.ts",
@@ -781,19 +813,19 @@
781
813
  },
782
814
  {
783
815
  "path": "dist/feature-adr-landing.d.ts",
784
- "sha256": "9a6ef9d2cfb287081938a72e0f706a53a2baabe0cd984c6f6ff91cdc73765012"
816
+ "sha256": "1640c3850c7ea92e4f6da0620af0814433005ba312c6276b5ac5482a379f9e43"
785
817
  },
786
818
  {
787
819
  "path": "dist/feature-adr-landing.d.ts.map",
788
- "sha256": "0c1951763213e3b741e7c395c772cdee98f679014b1cfa94f91dd42f7513e024"
820
+ "sha256": "0fb04dc4825cb5a9e5a0e5fa0c95bc4d351d8ff87b9093a039a4f326112e9831"
789
821
  },
790
822
  {
791
823
  "path": "dist/feature-adr-landing.js",
792
- "sha256": "7738f7cef2ce3572dc34e41da8f4fdf8fbf463c536a7520fb140ee310fcd7c7e"
824
+ "sha256": "ebdbb669aa4c8f3b5109921c021c915cef68b48bf6d04842e53f5d4c9a5f2d1e"
793
825
  },
794
826
  {
795
827
  "path": "dist/feature-adr-landing.js.map",
796
- "sha256": "25699c4f27eeb1e31f6eeea89828c6cc329904fc29ab21b7a4c61d127efeac9a"
828
+ "sha256": "7386d8d2367ddee799f8b2cd49ea79843fea79666e8e11466ba52624b3143678"
797
829
  },
798
830
  {
799
831
  "path": "dist/feature-adr-routing.d.ts",
@@ -827,6 +859,22 @@
827
859
  "path": "dist/feature-adr-setup.js.map",
828
860
  "sha256": "dc50ce0dd4b4680afdda3e2c650d0d8665c7defce22e4afaeb24d2113c0dec9d"
829
861
  },
862
+ {
863
+ "path": "dist/feature-tier.d.ts",
864
+ "sha256": "8c7008c7c961cb4c5906558842bfcbd22de2d6783d58bc90ba3a80e362310109"
865
+ },
866
+ {
867
+ "path": "dist/feature-tier.d.ts.map",
868
+ "sha256": "61af175e3f46e30ffc2c112dca85d523a2f4375958f9a7d8560b44c956ad4598"
869
+ },
870
+ {
871
+ "path": "dist/feature-tier.js",
872
+ "sha256": "6ed1b3decf61ef9f8ca72f1d7e1d9743deb701d8e1af627c0a89f1a0218a5ba6"
873
+ },
874
+ {
875
+ "path": "dist/feature-tier.js.map",
876
+ "sha256": "041102138ff00e59ccee280eb56ccad49db09eff68958c61020a2119a1813033"
877
+ },
830
878
  {
831
879
  "path": "dist/guard-promotion.d.ts",
832
880
  "sha256": "5ade66f1fdbd8d0f15b676a623fc566af6db74b46c963966930d1ade33d5a6ba"
@@ -909,19 +957,19 @@
909
957
  },
910
958
  {
911
959
  "path": "dist/index.d.ts",
912
- "sha256": "1f29a6394fd77db7aa6e6e123a9e1cdac934a42be6f7c8408601d1974294e30a"
960
+ "sha256": "5d039ab016a653c8e7b1beeb332c8cb1006ff890cb3efc89a17e9f05de0f1140"
913
961
  },
914
962
  {
915
963
  "path": "dist/index.d.ts.map",
916
- "sha256": "486ddf11b5ac451d18173d7e6105746ae7ea8491b062e498ee05ac69dfafa2dd"
964
+ "sha256": "f51c5db8115b725eaa53d78c09fc04734ce07fd4f23367d463f8b707387070e6"
917
965
  },
918
966
  {
919
967
  "path": "dist/index.js",
920
- "sha256": "3a3b54eb0662739c5996c24b2e9eb7891d75de80592a92718f222b3ab854d8f4"
968
+ "sha256": "0ac18efff2e6a04d240a7afb6b235fbc0feded591a4725b433ba8d1cdd3233b5"
921
969
  },
922
970
  {
923
971
  "path": "dist/index.js.map",
924
- "sha256": "c0c05215db1d6372b042870ac9f8530ad7d4e4789638553a32622d7636a7e84f"
972
+ "sha256": "bc116020a81c071e703f22acf55cc8a3ed3b865c6670d94d5592812d6f35051d"
925
973
  },
926
974
  {
927
975
  "path": "dist/integration-apply.d.ts",
@@ -987,6 +1035,22 @@
987
1035
  "path": "dist/integrations-verify.js.map",
988
1036
  "sha256": "8101ee9c9e9c1eb4cf3e27ae412462b0e52f5524a09f60e9ee389f39136b0f2c"
989
1037
  },
1038
+ {
1039
+ "path": "dist/journal.d.ts",
1040
+ "sha256": "8b5f559ee8f2a18b209a5793627c5553864d6a80833ff215b522b3d43959164c"
1041
+ },
1042
+ {
1043
+ "path": "dist/journal.d.ts.map",
1044
+ "sha256": "cf61e79c0f4d7f9d641c4a6ef4bd8f2d553fa1fe35a568a3ef64927b7a89483f"
1045
+ },
1046
+ {
1047
+ "path": "dist/journal.js",
1048
+ "sha256": "0adc99cfd7d1b443c506451dbd2f2ade3d8b71ede273fafdd653f8c29c5185f7"
1049
+ },
1050
+ {
1051
+ "path": "dist/journal.js.map",
1052
+ "sha256": "51472bb6bec5c6977ad8b6077126fcb74c808fe02ae8f7fb2e7e5682ff637a4e"
1053
+ },
990
1054
  {
991
1055
  "path": "dist/lead-shift-gate.d.ts",
992
1056
  "sha256": "11503ccc1990b8a3493024bcebd724eb9e90f44088db135bc215a767607dec8d"
@@ -1085,19 +1149,19 @@
1085
1149
  },
1086
1150
  {
1087
1151
  "path": "dist/loop-blobs.generated.d.ts",
1088
- "sha256": "3c78481cb8198706cdb8890e76e2bb2df974b93be2147b1646cf9d3aa5335e95"
1152
+ "sha256": "efe3f87b164385984d25701731f1de015dd6dbbd94144288a8e9ddc9da23ad08"
1089
1153
  },
1090
1154
  {
1091
1155
  "path": "dist/loop-blobs.generated.d.ts.map",
1092
- "sha256": "e5b581e7f1870d57d34492a1fe63607de514a9a4afde0a3926d84dc2301c1629"
1156
+ "sha256": "d5a7c7a45ce44cec5138a4aea219921225ccf09cf633f84e294bdf8fff800d0a"
1093
1157
  },
1094
1158
  {
1095
1159
  "path": "dist/loop-blobs.generated.js",
1096
- "sha256": "48397bdb099841229022125e0f72e35379412273e3db089e8537560f752d6595"
1160
+ "sha256": "5903d8d29bef0b0bbba310cd67dbbfbf16da7b006eab65d25389630c99e73ba6"
1097
1161
  },
1098
1162
  {
1099
1163
  "path": "dist/loop-blobs.generated.js.map",
1100
- "sha256": "86b6632133e8b092fb7445b5076595376fbe01cc16ca72e00d7e1ac5ba770e90"
1164
+ "sha256": "d43a06f44969af89038c5a18a690537a1a8b1b16d4bc13facbdba526aa6481ab"
1101
1165
  },
1102
1166
  {
1103
1167
  "path": "dist/loop-lint.d.ts",
@@ -1405,19 +1469,19 @@
1405
1469
  },
1406
1470
  {
1407
1471
  "path": "dist/patterns.d.ts",
1408
- "sha256": "7659dcc11bd2a35c14efb57ade06d144cea701a0b75211eb4a26d47dcb866e45"
1472
+ "sha256": "32348c6790ab707dc53126c0f00fe2409dcce667d65fb86c773fca550dae3183"
1409
1473
  },
1410
1474
  {
1411
1475
  "path": "dist/patterns.d.ts.map",
1412
- "sha256": "4ebea456f9a894f5a711306c35de385e486ef05938ee913cda2559247129855c"
1476
+ "sha256": "5ec4dc7878b13969fd5cecd926c3f3ed58aa5b9ec66b92cfbba36dc244b48910"
1413
1477
  },
1414
1478
  {
1415
1479
  "path": "dist/patterns.js",
1416
- "sha256": "5006d10009530f837c4921c16e8f6081a19af6a9379fc9ac978125236cdd2955"
1480
+ "sha256": "be48c8d6ed81b344f033f0e3bbce2037583a145d8c452798617fe70ebd72c053"
1417
1481
  },
1418
1482
  {
1419
1483
  "path": "dist/patterns.js.map",
1420
- "sha256": "40a72c8fe24231765539f9bb5b0dc6b1e9478dd82bd10d1e885e0a64ee6befef"
1484
+ "sha256": "6f31319f9243b04a7cee47e2740a17dd0564596888ef1e54fe06977d119dbd55"
1421
1485
  },
1422
1486
  {
1423
1487
  "path": "dist/plugin.d.ts",
@@ -1533,19 +1597,19 @@
1533
1597
  },
1534
1598
  {
1535
1599
  "path": "dist/publish.d.ts",
1536
- "sha256": "4141516f710c2033b64a778d6c8a41fa7015448bb4acc22c5fd6e6ab909c0098"
1600
+ "sha256": "59e6436ae59f0ef4ed94692aef8ddc4a5bf021e6afb364078c4484ef48fc6923"
1537
1601
  },
1538
1602
  {
1539
1603
  "path": "dist/publish.d.ts.map",
1540
- "sha256": "4763bd53c31be95fde9912073394e27340bd9603e3e9c99be7b79f09b4f87353"
1604
+ "sha256": "d4424a2422f93a831ea30edb2945a1e427c0738f55d991d895bdf725b7b1eed7"
1541
1605
  },
1542
1606
  {
1543
1607
  "path": "dist/publish.js",
1544
- "sha256": "a6e333a5a2516838b56b30a4088d44bbd62742646aa3f8056cd527890ff178ca"
1608
+ "sha256": "eef4266f8e54b04d258314610248966fbf4908d4be95013a0fdedc5127f35215"
1545
1609
  },
1546
1610
  {
1547
1611
  "path": "dist/publish.js.map",
1548
- "sha256": "a3326b95708d27fc923c7e788509d90155f5e84732b584d1dd0a6007a039b126"
1612
+ "sha256": "71adda6450a1ccb8ea04742d5d489dd341317bc8366d51b114296fc0528a64df"
1549
1613
  },
1550
1614
  {
1551
1615
  "path": "dist/qe-bridge.d.ts",
@@ -1803,6 +1867,22 @@
1803
1867
  "path": "dist/routing-outcomes.js.map",
1804
1868
  "sha256": "c369e33d38ea564f5a59fc0a90fa34fecfc90f2f25c87dfb153dfe20f0b0e0de"
1805
1869
  },
1870
+ {
1871
+ "path": "dist/run-cleanup.d.ts",
1872
+ "sha256": "33c809e1ef9cc8c57a4bc24e67dac0cfe24ca26be64966e8895d31586ca1a559"
1873
+ },
1874
+ {
1875
+ "path": "dist/run-cleanup.d.ts.map",
1876
+ "sha256": "3b4dad57a1409a409264f27bd7fd655c173d987aa3f85df55cf5084739677a2f"
1877
+ },
1878
+ {
1879
+ "path": "dist/run-cleanup.js",
1880
+ "sha256": "e5b7b281b8aa4451733f0fac0283f5acf842e12feaed091b3e8d4b434fd9a215"
1881
+ },
1882
+ {
1883
+ "path": "dist/run-cleanup.js.map",
1884
+ "sha256": "84ad985f8c7cace4e64f8d040f70deb332ce13c8698f327e2ec50e6ef067b63a"
1885
+ },
1806
1886
  {
1807
1887
  "path": "dist/run-records.d.ts",
1808
1888
  "sha256": "b52abf7998b3f525b57ac3351df6d9a50786d3c050da141a00b99f2d463538b7"
@@ -1819,6 +1899,22 @@
1819
1899
  "path": "dist/run-records.js.map",
1820
1900
  "sha256": "e262c1126c023ba2068834ce2a208b139633557e6005a79b5b0b192c91a5f445"
1821
1901
  },
1902
+ {
1903
+ "path": "dist/run-registry.d.ts",
1904
+ "sha256": "d32da0a5830171704cc18409b9dbe03eb9fb600f2529b674fd1635e908ded24f"
1905
+ },
1906
+ {
1907
+ "path": "dist/run-registry.d.ts.map",
1908
+ "sha256": "aa04abcdb48095e55502e04371373f8d8a1018102a429fcdda3f0e046764b38d"
1909
+ },
1910
+ {
1911
+ "path": "dist/run-registry.js",
1912
+ "sha256": "6ff25aca76e770074727384410d31888fa5445a73a98a997720e7fde0eb06c00"
1913
+ },
1914
+ {
1915
+ "path": "dist/run-registry.js.map",
1916
+ "sha256": "c893a0c5d54d9e7b76f29b1586f5725af0f1c85ceda0622fbd64149e7064563a"
1917
+ },
1822
1918
  {
1823
1919
  "path": "dist/safla-delta.d.ts",
1824
1920
  "sha256": "9fb8db73445acb7af089880d38222dd4a706f58416943893a090aa3f44199ef3"
@@ -2429,7 +2525,7 @@
2429
2525
  },
2430
2526
  {
2431
2527
  "path": "package.json",
2432
- "sha256": "1e9748de4c4d4d9811e919cba7b474764854164546b88b345c30afbda34be75f"
2528
+ "sha256": "51be8751220b4103038ee3bf61f65d5d853ef2b04c2359ec0049cc4ae109f1c6"
2433
2529
  },
2434
2530
  {
2435
2531
  "path": "src/__tests__/golden-baseline.test.ts",
@@ -2551,9 +2647,17 @@
2551
2647
  "path": "src/compounding.ts",
2552
2648
  "sha256": "25cf5ee4081c42773c3bbe4965860bc1ca7cca6ebbed3fff27ff3d2640859f9a"
2553
2649
  },
2650
+ {
2651
+ "path": "src/confirmation-file-gate.ts",
2652
+ "sha256": "3f0a5542e7f39503e508ba1f38f7640b452285a7500049d97f60eef83952afb9"
2653
+ },
2554
2654
  {
2555
2655
  "path": "src/contract-checklist.ts",
2556
- "sha256": "7e54a22c9c1a4dbc76bffc82ae58fd6a21510de689f139ac06a04038620e56ae"
2656
+ "sha256": "04bcebd879b3ad29d60c7aea1ca7b5b43e84d29d15c73d47116847bc524d07c3"
2657
+ },
2658
+ {
2659
+ "path": "src/core-boundary.ts",
2660
+ "sha256": "230ed4ba253284818af3a91f48f21f9d83cd7d8fac589f91e9f5c5836a520569"
2557
2661
  },
2558
2662
  {
2559
2663
  "path": "src/cost-ledger.ts",
@@ -2629,7 +2733,7 @@
2629
2733
  },
2630
2734
  {
2631
2735
  "path": "src/feature-adr-landing.ts",
2632
- "sha256": "a63d6fc7cb5d30a6da92fabd7de52d1cf0a1c95b44f9c26a871dc5d7dd6d9d22"
2736
+ "sha256": "0b33c998579c0912bb05b28ef32c59e96d7070adb7a4b03fecc531d487b778dd"
2633
2737
  },
2634
2738
  {
2635
2739
  "path": "src/feature-adr-routing.ts",
@@ -2639,6 +2743,10 @@
2639
2743
  "path": "src/feature-adr-setup.ts",
2640
2744
  "sha256": "311f4344eed1a43a0a3bd2723cafce141e035078cdcc404509cdf26ee7df4904"
2641
2745
  },
2746
+ {
2747
+ "path": "src/feature-tier.ts",
2748
+ "sha256": "dbe92163f0924dcecbd4d440f39ea119830dfffd4d7ec27261273ef3f0d350ba"
2749
+ },
2642
2750
  {
2643
2751
  "path": "src/guard-promotion.ts",
2644
2752
  "sha256": "d3c6d2b1e64a9dc3fbcbbd61fa2e86fec41f47126649f9b747c12d045d49af07"
@@ -2661,7 +2769,7 @@
2661
2769
  },
2662
2770
  {
2663
2771
  "path": "src/index.ts",
2664
- "sha256": "a183b2befb37065b6de85f3ef2f5638283e8b2ebf079a7074bd0abc78cb547a0"
2772
+ "sha256": "e578b60bd74d38bae0bf0fa2cf6b1b9f5543e0d96252d4398de5c4c8549fbdbd"
2665
2773
  },
2666
2774
  {
2667
2775
  "path": "src/integration-apply.ts",
@@ -2683,6 +2791,10 @@
2683
2791
  "path": "src/integrations-verify.ts",
2684
2792
  "sha256": "13141eb6439e091936b8a3860bee99e871ee0660a0c83c6108aa451d87e0e9fd"
2685
2793
  },
2794
+ {
2795
+ "path": "src/journal.ts",
2796
+ "sha256": "85e55ac32a66929c13cdbc85e4e2df3a702d02523f183b435fdebf78fd54880c"
2797
+ },
2686
2798
  {
2687
2799
  "path": "src/lead-shift-gate.ts",
2688
2800
  "sha256": "4ca0908a46d1578c05799ec4d2216b0dbd512268b1c5a85e7f3febc5a7640bd2"
@@ -2709,7 +2821,7 @@
2709
2821
  },
2710
2822
  {
2711
2823
  "path": "src/loop-blobs.generated.ts",
2712
- "sha256": "b7f5a095ecf30d657b387dcf04180840c62560857bdab0e863877de33f77486a"
2824
+ "sha256": "995f8fbeae52217c3c5d6a2a76b46a0493e39f96cfadaae75b216ee2aa7eab45"
2713
2825
  },
2714
2826
  {
2715
2827
  "path": "src/loop-lint.ts",
@@ -2789,7 +2901,7 @@
2789
2901
  },
2790
2902
  {
2791
2903
  "path": "src/patterns.ts",
2792
- "sha256": "9c9b114503bc634ee91620f6ebb2046d631bb0598130db04df2f9d350a8b47f8"
2904
+ "sha256": "5bfaa99d67cb5279f1519dd8268a19cb65488b863e37c6fdf41a42a5eaf74c0c"
2793
2905
  },
2794
2906
  {
2795
2907
  "path": "src/plugin.ts",
@@ -2821,7 +2933,7 @@
2821
2933
  },
2822
2934
  {
2823
2935
  "path": "src/publish.ts",
2824
- "sha256": "d52ad7be493664cecf90b82378129022f0eb8ae54fdfb25c606428b74db46601"
2936
+ "sha256": "a4e62d0fb4ef95a268ef2f2199a2e1917dc16817c31ec62382e0c222445adb0f"
2825
2937
  },
2826
2938
  {
2827
2939
  "path": "src/qe-bridge.ts",
@@ -2883,10 +2995,18 @@
2883
2995
  "path": "src/routing-outcomes.ts",
2884
2996
  "sha256": "66cce181b105b6add863e52f2d9364166f75d95a2e26e48995dbbdb20d8e66dd"
2885
2997
  },
2998
+ {
2999
+ "path": "src/run-cleanup.ts",
3000
+ "sha256": "cb36103388e70cbf8a48ca7ac77734dcd1b2492d837f990bc1777dc2d3fd794c"
3001
+ },
2886
3002
  {
2887
3003
  "path": "src/run-records.ts",
2888
3004
  "sha256": "e978fed335dc383f153ff38b66f941eff0c87e318beb01861f6a1dfe0b49515b"
2889
3005
  },
3006
+ {
3007
+ "path": "src/run-registry.ts",
3008
+ "sha256": "9563986ac43eea277222cb2ea8bd7151e5a08b7f069389d665c4efeb44c3b8e6"
3009
+ },
2890
3010
  {
2891
3011
  "path": "src/safla-delta.ts",
2892
3012
  "sha256": "55d46a4d2068fc99c4606d744e861c19a1004148d2c7679537ff4862fc38db84"
@@ -3045,5 +3165,5 @@
3045
3165
  }
3046
3166
  ]
3047
3167
  },
3048
- "signature": "xDbSIzIdSdjWSi41B4Yhj8lQ9BfdBz4X6+79STg5dE7/5aPJmQH1apABdu2o3dsB3kYT+rXQZOFuRAKJWcbnDA=="
3168
+ "signature": "1NsOn9Vix33eQgq1k+GbREyZo8pEVZ79I88PGbudZgTxrVUkZhWL3RIfXgswzc7kpcS5SXMknBZetCXsedaGAQ=="
3049
3169
  }
package/README.md CHANGED
@@ -3,6 +3,10 @@
3
3
  Shared logic for the DZ harness — the engine behind `@dzhechkov/harness-cli`
4
4
  and any other consumer.
5
5
 
6
+ `findExactLesson(records, text, domain?)` finds the earliest lesson whose trimmed,
7
+ whitespace-collapsed text matches exactly (case-sensitive), optionally within one metadata domain,
8
+ and reports whether that existing lesson is quarantined.
9
+
6
10
  `countLearningStoreRowsReadonly()` reports the mirror as TWO figures, deliberately not one.
7
11
  `vectorRows` stays the whole mirror (lessons + backlog ideas + book units) because the store guard
8
12
  reads it as an integrity signal against a recorded high-water mark; narrowing it would present a
@@ -17,6 +21,53 @@ carry no information. It is `{ state: 'different', lexical, vector }` on diverge
17
21
  tool failure and it is worth saying out loud. `statuslineData().brainKuCounts` carries the KU volume of each brain source in
18
22
  brain order; an empty array means the volumes could not be listed, never that the sources are empty.
19
23
 
24
+ ## Core boundary checks
25
+
26
+ Run `npx vitest run test/core-boundary.test.ts` from this package. Rule A scans top-level
27
+ `src/*.ts` (excluding `*.generated.ts`) for `process.argv` and `process.exit` in code using
28
+ TypeScript's AST. Comments and literal text are excluded; expressions inside template
29
+ interpolations are code. The scanner is internal to this test and is not exported from `index.ts`.
30
+
31
+ `rule A: debt` remains red while existing violations remain; it has no exceptions.
32
+ `rule A: scanner` separately compares the measured locations with the pinned requirements list.
33
+ The corrected list contains two debts: `brain.ts:995` and `integration-probe-worker.ts:304`.
34
+ Measured with `npx vitest run test/core-boundary.test.ts -t 'rule A: (scanner|debt)'`: the scanner
35
+ test passes and the debt test fails with those locations. `integration-probe-worker.ts:308`
36
+ uses `process.exitCode`, and `setup.ts:172` is template text; neither violates rule A.
37
+ No debt is repaired by this change.
38
+
39
+ The IO ratchet pins **57 files / 66 imports** in `test/core-boundary-ratchet.json`, measured with
40
+ `npx vitest run test/core-boundary.test.ts -t 'IO ratchet'`. It counts import declarations,
41
+ import-equals, dynamic imports and `require(...)` for `node:fs`, `node:child_process`, `node:https`,
42
+ their bare forms (`fs`, `child_process`, `https`) and subpaths (such as `node:fs/promises`),
43
+ excluding mentions inside comments and strings. The expanded set was remeasured and the totals
44
+ remain unchanged on this tree. Both totals may decrease;
45
+ neither may increase. Updating the baseline requires an explicit edit; tests never rewrite it.
46
+ A source file that cannot be read aborts the measurement instead of counting as zero.
47
+
48
+ Subpath membership has a separate test, `IO imports: subpath-only source belongs to the IO set`:
49
+ the growth ratchet alone cannot detect an undercount. The current `src/loop-lint.ts` has no imports
50
+ from the configured IO modules, so it cannot serve as a live witness for subpath membership.
51
+ The causal probe replaces ``specifier.text === name || specifier.text.startsWith(`${name}/`)``
52
+ with `specifier.text === name` in a temporary copy of the scanner and runs
53
+ `npx vitest run test/core-boundary.test.ts -t 'IO imports: subpath-only|IO ratchet'`.
54
+ The membership test fails, the ratchet passes; restoring the scanner makes both pass.
55
+
56
+ Rules B and C are **measurement only**: the test prints direct `child_process`/`https` imports in
57
+ `harness-cli/src/cli.ts`; a pure directory has not been designated, so rule C is not measurable.
58
+ Neither rule is enforced by assertions.
59
+
60
+ Mutation entries `rule-a-tokenizer-not-regex` and `ratchet-refuses-unreadable` were both PROVEN
61
+ (respectively 2 and 1 failing tests under mutation) after fresh core and CLI builds:
62
+
63
+ ```bash
64
+ npm run build && npm --prefix ../harness-cli run build
65
+ node ../harness-cli/dist/bin.js mutation-gate --only rule-a-tokenizer-not-regex,ratchet-refuses-unreadable --test-cmd "npx vitest run test/core-boundary.test.ts -t '^(?!.*rule A: debt)'" --json
66
+ ```
67
+
68
+ Only the intentionally red debt test is excluded from that gate's baseline. The scanner accuracy
69
+ test remains included.
70
+
20
71
  ## Shared Markdown masking
21
72
 
22
73
  `maskMarkdown` in `src/markdown-masker.ts` is the single implementation used by amendment-trace
@@ -478,6 +529,14 @@ equivalence proved by the committed `pkg-audit-1` fixture covers a bounded fanou
478
529
  join, a dep chain and a gate — and NOT the gate redo route, the typed terminal route, the typed
479
530
  pause or the file deliverable.
480
531
 
532
+ ## Live publish success requires a registry receipt
533
+
534
+ On the live `publishPackages` path, `status: 'published'` means the registry returned the exact new
535
+ `name@version`, not merely that the `pnpm publish` subprocess exited zero. The publisher probes up to
536
+ 30 times, sleeping 10 seconds between misses, reports `registryProbes` on confirmation, and restores
537
+ the package bump if no receipt arrives. Dry-run and bump-only do not make a publication and never run
538
+ this receipt probe; their existing statuses retain their preview/staging meaning.
539
+
481
540
  ## The publish gate asks whether anyone but the author read the code
482
541
 
483
542
  `DEFAULT_RULES` gained `review-round` (HARD, publish): a package that bumps its version AND changes
@@ -546,6 +605,7 @@ bytes and an injected evidence reader:
546
605
 
547
606
  ```ts
548
607
  import {
608
+ checkConfirmationFiles,
549
609
  extractContractChecklist,
550
610
  renderContractChecklist,
551
611
  parseContractVerdictReport,
@@ -553,9 +613,14 @@ import {
553
613
  } from '@dzhechkov/harness-core';
554
614
  ```
555
615
 
556
- - `extractContractChecklist(source)` reads the exact `## Acceptance criteria` / `AC-N: ...`
557
- vocabulary and one exact `## Confirmation` pair from each canonical direct ADR Markdown file. It
558
- emits ordered `contract-checklist/1` items with contiguous `CC-N` ids or no partial contract.
616
+ - `extractContractChecklist(source)` reads `## Acceptance criteria` or `## Критерии приёмки` with
617
+ `AC-N: ...` rows and one `## Confirmation…`-prefixed pair from each canonical direct ADR Markdown file. It
618
+ emits ordered `contract-checklist/1` items with contiguous `CC-N` ids or no partial contract. Empty ADR input
619
+ remains an `adr-input-empty` refusal unless the caller explicitly supplies `adrsOptional: true`; even then, a
620
+ combined contract with no acceptance criteria remains a `contract-empty` refusal.
621
+ - `checkConfirmationFiles(adrTexts, exists)` is the pure half of the single mandatory Step-8 ADR
622
+ gate: every parsed Confirmation test path must resolve to a readable regular file. Missing paths
623
+ fail; parse/read errors are refused; a feature with no ADR returns the explicit `no-adr` skip.
559
624
  - `renderContractChecklist(checklist)` serializes one deterministic fenced `contract-checklist`
560
625
  block for a future producer integration.
561
626
  - `parseContractVerdictReport(text)` accepts one `## Contract checklist` fenced JSON object with
@@ -568,6 +633,17 @@ import {
568
633
  This is a structural assurance boundary. It proves grammar, identity completeness, evidence
569
634
  containment/uniqueness, polarity, and grade coherence. It does not judge whether a quote semantically
570
635
  proves a criterion, execute a cited test, replace ADR Confirmation, or replace independent QE.
636
+ The remaining 13-point ADR fitness checklist, discrimination check, and mutation check stay advisory;
637
+ the Confirmation file-existence/readability check alone forces a non-passing Step-8 verdict.
638
+
639
+ ## Feature tier API
640
+
641
+ `feature-tier.ts` is the dependency-free boundary for reading a feature tier from its complexity
642
+ assessment. `parseFeatureTier(text)` recognizes the measured English `Tier` and Russian `Тир`
643
+ Markdown forms and returns `S`, `M`, `L`, `XL`, or `null` when no unambiguous tier is established.
644
+ `readFeatureTier(read, slug)` requests
645
+ `features/<slug>/00_complexity_assessment.md` through the caller-supplied reader and delegates to the
646
+ same parser; filesystem access therefore remains in the adapter that owns it.
571
647
 
572
648
  ## Restart advisor API
573
649
 
@@ -618,7 +694,7 @@ transition (plus a refusal REASON the CLI can print), and `kind`-carrying ledger
618
694
  to every cost reader (`planLedgerBackfill`, `selectLedgerRows`, `assembleTimeline`). See the phase
619
695
  telemetry paragraph above. Seven named guards in this package are `DEFENDED` under `dz mutation-gate`.
620
696
 
621
- `0.8.22` — **the run verdict, the routing table, the panel and the registry all stopped overstating
697
+ `0.8.24` — **the run verdict, the routing table, the panel and the registry all stopped overstating
622
698
  what they know.** `classifyRunFailure` gains the kind `runner-infrastructure` with the closed reason
623
699
  `worker-rpc-timeout`: it is claimed only when the parsed failing-test count is exactly zero AND the
624
700
  runner's own worker-RPC pattern is present, so a nonzero exit with no explanation stays
@@ -1133,3 +1209,69 @@ appendTransition(root, { id, from: 'new', to: 'shipped', ts, by: 'backlog ship'
1133
1209
  либо точный отказ/провал пробы. Только outcome добавляется в `dispatchOutcomes`, авторитетный отчёт
1134
1210
  «кто-что-делал»; intent остаётся живым предупреждением. Свёрнутые стадии (`research`, `ddd`) отдельных
1135
1211
  строк не получают — у них нет отдельного диспатча.
1212
+
1213
+
1214
+ ### Run registry
1215
+
1216
+ `dz runs --project <repo> [--json]` reads `.dz/runs/registry.jsonl`. The feature-adr workflow
1217
+ appends `started`, a `heartbeat` at each phase boundary, and `finished` through `dz runs-record`.
1218
+ Each invocation allocates its own run ID. Pass Workflow `args.runPid` for an explicit host PID,
1219
+ and `args.parentRunId` when nesting runs; otherwise the writer resolves the Claude ancestor PID
1220
+ and refuses if it cannot establish one. The courier checks the write response. Registry failures
1221
+ log `run registry: <event> UNVERIFIED — <reason>` and mark the registry outcome `unverified`;
1222
+ the workflow continues. Finalization runs on normal returns and exceptions; host termination
1223
+ can leave a started run without finished.
1224
+
1225
+ `live` requires a responding PID. `orphaned` requires a recorded finish or confirmed absent PID;
1226
+ missing parents, inaccessible PID probes and unreadable registries remain `inconclusive`, with
1227
+ a reason. A confirmed live PID with a heartbeat older than `--stall-minutes` (default 120)
1228
+ is `stalled`; a missing heartbeat remains `live`. Stalled parents remain alive for their children. Completed runs display
1229
+ `finished`; a child of a finished parent is `orphaned`. An unreadable registry exits 1.
1230
+ Before the first run, an absent registry reports `нет реестра: .dz/runs/registry.jsonl ещё не создан (ни одного прогона)`
1231
+ and exits 0 (`status: "missing"` in JSON).
1232
+
1233
+ The core exports `appendRunEvent`, `readRunRegistry`, `probePid`, `liveness`, `liveParents`, and
1234
+ `runRecordCommand`. Appends preserve event identity and bound diagnostic `reason` text below
1235
+ PIPE_BUF with `truncated: true`; oversized identity fields are refused.
1236
+
1237
+ ### Day-file action journal
1238
+
1239
+ `JOURNAL_KINDS`, `formatLine`, `parseLine`, `selectWindow`, and `appendWitnessed` support
1240
+ `dz journal` over the existing `docs/journal/YYYY-MM-DD.md` files. The first `·` separates
1241
+ time from category; the last separates the reference, preserving middle dots in event text.
1242
+ Malformed events retain their raw line and `unparsed` status. The injected `JournalIo` writer
1243
+ re-reads the appended tail and throws if verification fails. Windows use UTC; a week is seven
1244
+ calendar days ending on the selected date.
1245
+
1246
+
1247
+ ### Run cleanup and settlement
1248
+
1249
+ `dz runs --settle` appends `finished` with outcome `died` only for confirmed absent PIDs.
1250
+ A second invocation reports `nothing to settle`. `inconclusive` is preserved. Use
1251
+ `dz runs --stall-minutes 150` to change the heartbeat threshold; `stalled` only changes the display.
1252
+
1253
+ ```bash
1254
+ dz runs-clean --project /path/to/repo # inspect the plan first
1255
+ dz runs-clean --project /path/to/repo --retention-days 7 --json
1256
+ # After reviewing the plan, explicitly apply:
1257
+ dz runs-clean --project /path/to/repo --retention-days 7 --apply
1258
+ ```
1259
+
1260
+ Only non-main worktrees merged into `main`, clean, and strictly older than the retention
1261
+ (default 2 days, measured from their latest commit) qualify. Detached worktrees use their HEAD's
1262
+ ancestry. Dirty worktrees stay, with the file count and first five paths printed. Unknown merge
1263
+ or commit-age facts stay; unreadable status refuses cleanup. Removal uses Git without force and
1264
+ is reported successful only after rereading the worktree list.
1265
+
1266
+ With `--apply`, whole finished or confirmed-dead run histories whose newest event exceeds retention
1267
+ move to `.dz/runs/registry.archive.jsonl`; live and inconclusive runs stay in `registry.jsonl`.
1268
+ CLI appends, settlement, and archive read/plan/rewrite share the named `run-registry-archive` lock
1269
+ under `.dz/runs`. Archive writes append before temp-file rename; a crash between those operations
1270
+ can duplicate archive events on retry. A worktree removal that already succeeded (and was confirmed by
1271
+ re-listing) is not undone when the archive step fails afterwards: the command exits 1 and the printed lines
1272
+ name what did happen — `git worktree remove` has no rollback. Direct API writers must coordinate with that same lock.
1273
+
1274
+ Core APIs: `settleDeadRuns` and `planRegistryArchive` are pure registry decisions;
1275
+ `planWorktreeCleanup` accepts injected `WorktreeFact` values and returns remove/keep decisions;
1276
+ `renderCleanupPlan` renders them. `worktreeRemovalsToApply` selects removals only when apply is true.
1277
+ No process is terminated and no branch is deleted.
@@ -0,0 +1,20 @@
1
+ export type ConfirmationFileGateResult = {
2
+ readonly verdict: 'pass';
3
+ readonly checked: readonly string[];
4
+ } | {
5
+ readonly verdict: 'fail';
6
+ readonly missing: readonly string[];
7
+ } | {
8
+ readonly verdict: 'skipped';
9
+ readonly reason: 'no-adr';
10
+ } | {
11
+ readonly verdict: 'refused';
12
+ readonly reason: string;
13
+ };
14
+ export type ConfirmationFileExists = (path: string) => boolean;
15
+ /**
16
+ * Pure Step-8 policy. The caller owns filesystem access and injects a predicate that returns true
17
+ * only for a readable regular file. Throwing is a named refusal, never laundered into a skip.
18
+ */
19
+ export declare function checkConfirmationFiles(adrTexts: readonly string[], exists: ConfirmationFileExists): ConfirmationFileGateResult;
20
+ //# sourceMappingURL=confirmation-file-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmation-file-gate.d.ts","sourceRoot":"","sources":["../src/confirmation-file-gate.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,GAClC;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;AAsC/D;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,MAAM,EAAE,sBAAsB,GAC7B,0BAA0B,CAiC5B"}