@dzhechkov/harness-core 0.8.2 → 0.8.6

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 (81) hide show
  1. package/.dz-manifest.json +146 -58
  2. package/README.md +72 -2
  3. package/dist/cmd-usage.d.ts +148 -0
  4. package/dist/cmd-usage.d.ts.map +1 -0
  5. package/dist/cmd-usage.js +548 -0
  6. package/dist/cmd-usage.js.map +1 -0
  7. package/dist/compounding.d.ts +4 -0
  8. package/dist/compounding.d.ts.map +1 -1
  9. package/dist/compounding.js +6 -0
  10. package/dist/compounding.js.map +1 -1
  11. package/dist/contract-checklist.d.ts +123 -0
  12. package/dist/contract-checklist.d.ts.map +1 -0
  13. package/dist/contract-checklist.js +700 -0
  14. package/dist/contract-checklist.js.map +1 -0
  15. package/dist/feature-adr-checkpoints.d.ts +11 -2
  16. package/dist/feature-adr-checkpoints.d.ts.map +1 -1
  17. package/dist/feature-adr-checkpoints.js +37 -2
  18. package/dist/feature-adr-checkpoints.js.map +1 -1
  19. package/dist/feature-adr-routing.d.ts +58 -23
  20. package/dist/feature-adr-routing.d.ts.map +1 -1
  21. package/dist/feature-adr-routing.js +208 -59
  22. package/dist/feature-adr-routing.js.map +1 -1
  23. package/dist/guard.d.ts +25 -0
  24. package/dist/guard.d.ts.map +1 -1
  25. package/dist/guard.js +59 -1
  26. package/dist/guard.js.map +1 -1
  27. package/dist/index.d.ts +9 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +8 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/loop-blobs.generated.js +8 -8
  32. package/dist/loop-blobs.generated.js.map +1 -1
  33. package/dist/loop-plan.d.ts +13 -1
  34. package/dist/loop-plan.d.ts.map +1 -1
  35. package/dist/loop-plan.js +15 -1
  36. package/dist/loop-plan.js.map +1 -1
  37. package/dist/loop-render.d.ts.map +1 -1
  38. package/dist/loop-render.js +51 -6
  39. package/dist/loop-render.js.map +1 -1
  40. package/dist/loop-trace.d.ts +20 -1
  41. package/dist/loop-trace.d.ts.map +1 -1
  42. package/dist/loop-trace.js +83 -1
  43. package/dist/loop-trace.js.map +1 -1
  44. package/dist/model-recommender.d.ts +8 -0
  45. package/dist/model-recommender.d.ts.map +1 -1
  46. package/dist/model-recommender.js +31 -4
  47. package/dist/model-recommender.js.map +1 -1
  48. package/dist/qe-bridge.d.ts.map +1 -1
  49. package/dist/qe-bridge.js +9 -0
  50. package/dist/qe-bridge.js.map +1 -1
  51. package/dist/restart-advisor.d.ts +103 -0
  52. package/dist/restart-advisor.d.ts.map +1 -0
  53. package/dist/restart-advisor.js +445 -0
  54. package/dist/restart-advisor.js.map +1 -0
  55. package/dist/slop-lint.d.ts +128 -0
  56. package/dist/slop-lint.d.ts.map +1 -0
  57. package/dist/slop-lint.js +607 -0
  58. package/dist/slop-lint.js.map +1 -0
  59. package/dist/workflow-run.d.ts.map +1 -1
  60. package/dist/workflow-run.js +18 -12
  61. package/dist/workflow-run.js.map +1 -1
  62. package/package.json +19 -15
  63. package/sbom.json +277 -57
  64. package/src/cmd-usage.ts +720 -0
  65. package/src/compounding.ts +13 -0
  66. package/src/contract-checklist.ts +973 -0
  67. package/src/deadwood-allowlist.json +80 -0
  68. package/src/feature-adr-checkpoints.ts +38 -2
  69. package/src/feature-adr-routing.ts +238 -55
  70. package/src/guard.ts +79 -1
  71. package/src/index.ts +81 -1
  72. package/src/loop-blobs.generated.ts +8 -8
  73. package/src/loop-plan.ts +36 -3
  74. package/src/loop-render.ts +50 -6
  75. package/src/loop-trace.ts +91 -2
  76. package/src/model-recommender.ts +35 -4
  77. package/src/qe-bridge.ts +9 -0
  78. package/src/restart-advisor.ts +579 -0
  79. package/src/slop-lint.ts +762 -0
  80. package/src/slop-markers.json +71 -0
  81. package/src/workflow-run.ts +18 -11
package/.dz-manifest.json CHANGED
@@ -9,7 +9,7 @@
9
9
  },
10
10
  {
11
11
  "path": "README.md",
12
- "sha256": "f2c5e30f529842d9e21b4287787c9290aa53c5163ad7586d406cbda256cceffa"
12
+ "sha256": "382e4947c1bc37ca3e5048246660c310ae09e5997d2fadb80f6ef75856073bc5"
13
13
  },
14
14
  {
15
15
  "path": "dist/__tests__/golden-baseline.test.d.ts",
@@ -331,6 +331,22 @@
331
331
  "path": "dist/cli-flag-notice.js.map",
332
332
  "sha256": "6f55153a39da8bb9ceb87dff9e47e279f7ce316083454e9b8675685dcc4f959a"
333
333
  },
334
+ {
335
+ "path": "dist/cmd-usage.d.ts",
336
+ "sha256": "e3e0fb1463b65d718f0d34e37de1a0769bbe60ad1a0807a5d339cc713b241a2d"
337
+ },
338
+ {
339
+ "path": "dist/cmd-usage.d.ts.map",
340
+ "sha256": "c6a36a379484001317dbcea5ffbc5a64b0f37488d36ee4a860eea13e1cb76a45"
341
+ },
342
+ {
343
+ "path": "dist/cmd-usage.js",
344
+ "sha256": "6c6f240b378cd87109ef22df7725fa0327d6838479a1693cf74baffe1dec3623"
345
+ },
346
+ {
347
+ "path": "dist/cmd-usage.js.map",
348
+ "sha256": "a7f40794aa14ca45c7b809b1e57f6ddc3c0153c0f664334a410182e1758535e6"
349
+ },
334
350
  {
335
351
  "path": "dist/codex-hooks-assets.d.ts",
336
352
  "sha256": "dd1cb9cce42a0ca37a3e64eeac19c98f18f225932ffea282b33fdfd699446191"
@@ -381,19 +397,35 @@
381
397
  },
382
398
  {
383
399
  "path": "dist/compounding.d.ts",
384
- "sha256": "26f6cf197298e8ccf61d72bb26d6f5e88a3d58af3ff0b3351f44755c5acff1da"
400
+ "sha256": "b412bf4dcc70afb9a06d835c98bbb5506ed5560481c38e4e12d37925216ace86"
385
401
  },
386
402
  {
387
403
  "path": "dist/compounding.d.ts.map",
388
- "sha256": "571ea5e0ebb71a5325da6171b09affeb6ba3d4b759d0eb4cc8d3af57dd369104"
404
+ "sha256": "f2a660b717c491c718eae425fa950ffb1b315b5c0934a9cecc7137d82e9c5625"
389
405
  },
390
406
  {
391
407
  "path": "dist/compounding.js",
392
- "sha256": "83db18eb05a6400809b7c1624e3df24f40f1050b39f022d87448d8017399e4e0"
408
+ "sha256": "74e42a9fac17a8a8941d398de696fec6630a81cb5c5db9be10c431646f4f07ef"
393
409
  },
394
410
  {
395
411
  "path": "dist/compounding.js.map",
396
- "sha256": "f353339d08c311fb69d44960e97bcc9ddfc01d7bdb8c3ae26e9884a494c0338f"
412
+ "sha256": "7a075042f2c92eef663b35bd0fcc05e0a2ceee8610633c0d78c1a65d5c32a745"
413
+ },
414
+ {
415
+ "path": "dist/contract-checklist.d.ts",
416
+ "sha256": "bf101a58875316681241b76308383ec61ac0d2f60ce3256693a4cf20dacd6749"
417
+ },
418
+ {
419
+ "path": "dist/contract-checklist.d.ts.map",
420
+ "sha256": "fa5598db398ca655764fa07878fa093766211011574c77fd6890476b27a4f332"
421
+ },
422
+ {
423
+ "path": "dist/contract-checklist.js",
424
+ "sha256": "0943f9f0986ef240395c8d3679bb6d83e95a2259c49d4af3a85bc4a3dbcf3998"
425
+ },
426
+ {
427
+ "path": "dist/contract-checklist.js.map",
428
+ "sha256": "ae1d26c22ddd63c589349a371f371a63b4e83066b94a8a0e93f58b0d976a9f5b"
397
429
  },
398
430
  {
399
431
  "path": "dist/cost-ledger.d.ts",
@@ -557,19 +589,19 @@
557
589
  },
558
590
  {
559
591
  "path": "dist/feature-adr-checkpoints.d.ts",
560
- "sha256": "4d2f2123c7ffe7bf202703a697174f415584373491d14b4f7b1c9190c9448d19"
592
+ "sha256": "1c8baf574260f4cc366e6ad80fc865a548b3d028a94f76b74d620e08eb1b00ec"
561
593
  },
562
594
  {
563
595
  "path": "dist/feature-adr-checkpoints.d.ts.map",
564
- "sha256": "6848e93f4706f7657c243e3e3f86989f5b42637498900a97c59446f22d838481"
596
+ "sha256": "78ae4780eb6ccc91797b07513b2c16770a4f0003a4eb3441b43d4aec7ce8c737"
565
597
  },
566
598
  {
567
599
  "path": "dist/feature-adr-checkpoints.js",
568
- "sha256": "8db0caa3b48805d72cce5267a9684717471ab2616e9db285c82c6d33cf0bb990"
600
+ "sha256": "5b3e706b6a6e071f41dbc14a0964385ea4be08eb9183d72ece1d7e195776b8b4"
569
601
  },
570
602
  {
571
603
  "path": "dist/feature-adr-checkpoints.js.map",
572
- "sha256": "d36cea06c3a41886d92f4aa3bba118e8e5fdd9b75c5b31e94bd29b835f42921b"
604
+ "sha256": "7af0824cd104bd7e07c305b36477a6db08f29929053d7ae3c4252665d45d44f6"
573
605
  },
574
606
  {
575
607
  "path": "dist/feature-adr-claim-gate.d.ts",
@@ -589,19 +621,19 @@
589
621
  },
590
622
  {
591
623
  "path": "dist/feature-adr-routing.d.ts",
592
- "sha256": "a1af0f230be9ee3eaccdf24ada9364bc2169905b68efaec35cb6f6844284677c"
624
+ "sha256": "cf6c8e89e81c87114d6d8883fbce63d7f91223a10b497b505be4be39d403835c"
593
625
  },
594
626
  {
595
627
  "path": "dist/feature-adr-routing.d.ts.map",
596
- "sha256": "0e74beee5ab13a4762e2219f8f77f65c2403636268682ba6828fd0bbc6fdef99"
628
+ "sha256": "c07a6b16596d3ccf6956420dd40eb280d79dccbb3c185f9afde211b42c806732"
597
629
  },
598
630
  {
599
631
  "path": "dist/feature-adr-routing.js",
600
- "sha256": "a213058784464f7ba21be0178324d68fb417da00f3b416726f6acdf9de944b36"
632
+ "sha256": "1d7aa45f87f6ce3939b076521d2499ce265bbcc7761e118ceae74e1017242bba"
601
633
  },
602
634
  {
603
635
  "path": "dist/feature-adr-routing.js.map",
604
- "sha256": "2c1520e30dba9fad19981c7533edb57ef8be7f4dcf444463f4c00e33826b8663"
636
+ "sha256": "078914845fa827767be134dd01e19eb1fa559a5256a754f907d4a5fb64892a83"
605
637
  },
606
638
  {
607
639
  "path": "dist/feature-adr-setup.d.ts",
@@ -637,19 +669,19 @@
637
669
  },
638
670
  {
639
671
  "path": "dist/guard.d.ts",
640
- "sha256": "10bbc8872c4667339b9117e4bb61bccb7d0a9e3dee2d5590c4c776c931b93960"
672
+ "sha256": "b6c0c33b112632f48e6d434bbe0cbda4a127aaf8d105c5f68fe51bc6106c28e5"
641
673
  },
642
674
  {
643
675
  "path": "dist/guard.d.ts.map",
644
- "sha256": "b85d145b03c231d66a67cd60ad9d99045b552aaf53c3ced9203bd36a667b5d9f"
676
+ "sha256": "5db853d21550894135d7f44c1c2b2a1aa31cf5a8415a01dde204de71b447fcda"
645
677
  },
646
678
  {
647
679
  "path": "dist/guard.js",
648
- "sha256": "1a00572dbe4bbdbc243c6a96313a1731d340b3c83a75560d6243adb8bafb8266"
680
+ "sha256": "7890ac7eb92aa2681f0f2a4e184c972cbd7e30b33a7b765c259fe2f780bbcc65"
649
681
  },
650
682
  {
651
683
  "path": "dist/guard.js.map",
652
- "sha256": "93d21258144ca202d53f6c7f7e218c5960e29449dfbaf0e5818043f2b18fb532"
684
+ "sha256": "1aab67adf2d593b0aaf43076ed19050d6df3a6ca72798357488330b8b733cbb3"
653
685
  },
654
686
  {
655
687
  "path": "dist/import-ecc.d.ts",
@@ -669,19 +701,19 @@
669
701
  },
670
702
  {
671
703
  "path": "dist/index.d.ts",
672
- "sha256": "d888730d400004a18af528bbe2802539e2b9e9c74383e928dfd6478d98d66e75"
704
+ "sha256": "56428e6eed3911ba40410d47f4192c66368a74640146be2a4d2dcbce33a05bd8"
673
705
  },
674
706
  {
675
707
  "path": "dist/index.d.ts.map",
676
- "sha256": "d54a95081a81d817f95baa7b0e608e21b7d758fa6328f2ac894c805d7e769e38"
708
+ "sha256": "f1b031834062862d7b9897564d76206e8c9a03dba30a3ae72464df765b22d7f8"
677
709
  },
678
710
  {
679
711
  "path": "dist/index.js",
680
- "sha256": "8035369f844e9b6634fd23151e8e97f06f6a2b0f10b51b7d2fcda6626950d8f2"
712
+ "sha256": "47df588952b4fd7c2deb2107d1cae3c7eeacde3e53e717a805dc56b98b925334"
681
713
  },
682
714
  {
683
715
  "path": "dist/index.js.map",
684
- "sha256": "d7d306a43374b99065a88693c383f7e5777fafef88b7c8bd36bab7cfdc6fa954"
716
+ "sha256": "dab5eed08c0809aba7fb4a5ef59a6a6ead94fdd7adfea363aaa1f97740e7e3e0"
685
717
  },
686
718
  {
687
719
  "path": "dist/learning-backend.d.ts",
@@ -757,11 +789,11 @@
757
789
  },
758
790
  {
759
791
  "path": "dist/loop-blobs.generated.js",
760
- "sha256": "44f033da1ce787c539239ed4d42954de80c683111462b91b351c54c9866d0df3"
792
+ "sha256": "5571033c110ebc6f042ed3398efdf1ff268cae124f29d0b8c67ef9af69ca768c"
761
793
  },
762
794
  {
763
795
  "path": "dist/loop-blobs.generated.js.map",
764
- "sha256": "e046b5eb1ac866a726274b69f3527cbb5d74203dc4a05692b3cd71eefbd563d4"
796
+ "sha256": "030ed14587756424df4802c72cdbb895042fa797a70106ed61445548d8eb7af7"
765
797
  },
766
798
  {
767
799
  "path": "dist/loop-lint.d.ts",
@@ -797,19 +829,19 @@
797
829
  },
798
830
  {
799
831
  "path": "dist/loop-plan.d.ts",
800
- "sha256": "23060fa99d5047cf37d11a9a3546ffc4616a402e638acf7974085468e32d09d9"
832
+ "sha256": "664cc1342c7ddd62c6653a6637897bc0bb26300f1bdf90249d74f3f8f3151ede"
801
833
  },
802
834
  {
803
835
  "path": "dist/loop-plan.d.ts.map",
804
- "sha256": "960109ccd39aba37b53024a6bc87c249cd296f8c78dcb25ff6d5ab11fd183352"
836
+ "sha256": "de8a33dc5b46d23a8955aca6febdc53a859474177cf941607d0a03655bbcf1cd"
805
837
  },
806
838
  {
807
839
  "path": "dist/loop-plan.js",
808
- "sha256": "2ba860ebc47b3bd521e5a97979b68c38d5cefb13ccf515fd3f0f05feef7f52af"
840
+ "sha256": "f47672a7583cba0d2e25a4151b15c55cc8b5e4198e213fd418eec49ed3399c38"
809
841
  },
810
842
  {
811
843
  "path": "dist/loop-plan.js.map",
812
- "sha256": "24c105bf37a1ccab4172f9635ddfc497a4a9a7fbd73e29c8590efaf9bd5a7e82"
844
+ "sha256": "a81dabe39706dcaf609bbf60f3bf0de3d8ef63873a24b74214ac04b2ae29b7da"
813
845
  },
814
846
  {
815
847
  "path": "dist/loop-render.d.ts",
@@ -817,15 +849,15 @@
817
849
  },
818
850
  {
819
851
  "path": "dist/loop-render.d.ts.map",
820
- "sha256": "04777f7fa04903d9c26368fce15f5ecfbda389cc59e17b2ae454b335b21f00bd"
852
+ "sha256": "939b3e0621aec5e5e3e504e8a53da702b166dd39ad806f78bbd1d674aa18a790"
821
853
  },
822
854
  {
823
855
  "path": "dist/loop-render.js",
824
- "sha256": "49b8fc106dee22095dc02c43e224de52b9026dbf77d2f2e2654219a776017a09"
856
+ "sha256": "41d656caaba47f5279581a10ae0bd25d41733b1df74457b04abdb206aac27c27"
825
857
  },
826
858
  {
827
859
  "path": "dist/loop-render.js.map",
828
- "sha256": "170a7cdafb569ce8d9d1bd7c63ab83d4689cd3b1ed8a1f02536f5affd9dd6d5f"
860
+ "sha256": "5fe73341f62f6071e8cbf4d6a8124d34719f72b115701c09169bfe1d9439878d"
829
861
  },
830
862
  {
831
863
  "path": "dist/loop-run-semantics.d.ts",
@@ -845,19 +877,19 @@
845
877
  },
846
878
  {
847
879
  "path": "dist/loop-trace.d.ts",
848
- "sha256": "bd228e00e217a99ee7f192c9e87d4e1c794c8ffb52323b77b87ee93f601f013a"
880
+ "sha256": "c3bd309462a8f4d1ae2d80843dd609590511468c403daf399d07878dd1178093"
849
881
  },
850
882
  {
851
883
  "path": "dist/loop-trace.d.ts.map",
852
- "sha256": "4c37b21c750133def0498c6d1b0fddfb2525500ced4dc58634ae1234425337d3"
884
+ "sha256": "ef85a855a1b72e6f87f19a2cc13f1cd00f9873062ea733771aa8201867b343a3"
853
885
  },
854
886
  {
855
887
  "path": "dist/loop-trace.js",
856
- "sha256": "83f2afea542e80bf09f9ccf9a56a9d352111a8a3cd7744bf8f2ccad84d796c6a"
888
+ "sha256": "a78efd0fd15d9d68b83abd14fde80a94ac0dd601adf8e35c360af3ca0496c37d"
857
889
  },
858
890
  {
859
891
  "path": "dist/loop-trace.js.map",
860
- "sha256": "93a3007d6a7a906344f8f85272aef1928811997d331202171558763ab917b9d6"
892
+ "sha256": "13c873551b88c69a11c6693e232025afb63e8cc0716f8df8c1c0856377853327"
861
893
  },
862
894
  {
863
895
  "path": "dist/managed-hooks.d.ts",
@@ -893,19 +925,19 @@
893
925
  },
894
926
  {
895
927
  "path": "dist/model-recommender.d.ts",
896
- "sha256": "a81f21f00d29d8c6546a4b37f29770634c78e628980b04d6c53983bacb695f93"
928
+ "sha256": "e3badda5df2f023d4404dbbe7af821590e27bf3ec73983a9ad5f4b94bc95fed6"
897
929
  },
898
930
  {
899
931
  "path": "dist/model-recommender.d.ts.map",
900
- "sha256": "5dbe72bec50be10ac4caef49f427a96f0cd2bae6f0934942b2600f6138313372"
932
+ "sha256": "95c324cedae6d2367febc2061b28b0ed19db2105415634a0607380fee851af26"
901
933
  },
902
934
  {
903
935
  "path": "dist/model-recommender.js",
904
- "sha256": "469f0c4bc46da3db9d5421d22b4350f51456880519d3e55491dd24c53c12b145"
936
+ "sha256": "99c3cd247f7c910ee16bbd3046dbac4ea5c892786d174065810b743b48332f80"
905
937
  },
906
938
  {
907
939
  "path": "dist/model-recommender.js.map",
908
- "sha256": "29f9f9a64bbd8c88e455f01037262262d894f6defce1f490ecb6a11ce9eee80a"
940
+ "sha256": "1fe988f70981d8f5dfd64a63c7cc8e8ee3f4bdcc047df57acaf0d97946f0a761"
909
941
  },
910
942
  {
911
943
  "path": "dist/mutation-gate.d.ts",
@@ -1201,15 +1233,15 @@
1201
1233
  },
1202
1234
  {
1203
1235
  "path": "dist/qe-bridge.d.ts.map",
1204
- "sha256": "0cf3af2eedb4922c9106fac1f2d09bb5127a46ba7232e5899ba6c29bf33659c2"
1236
+ "sha256": "0a32cc82bbc3b5df2576495e5d4823b32ddcc4375b9217d3c8a008cc68054997"
1205
1237
  },
1206
1238
  {
1207
1239
  "path": "dist/qe-bridge.js",
1208
- "sha256": "555ffe4f1f6c2c11aec4b3637d03468f8978b8574c7129af948e3c6177c57243"
1240
+ "sha256": "805dbe6e3d2e60b243b51b5f76c688707f1634625ab5326723f8e7e28b4f0246"
1209
1241
  },
1210
1242
  {
1211
1243
  "path": "dist/qe-bridge.js.map",
1212
- "sha256": "844373e7ce0a18945adff9521c101e76baa39d2082cfd6a2517844d72e6a5702"
1244
+ "sha256": "82b9a67c5432a3b2d029720a16c7336b1443ed8b7f00e7ce911fb4eb31e106e5"
1213
1245
  },
1214
1246
  {
1215
1247
  "path": "dist/qe-rounds.d.ts",
@@ -1387,6 +1419,22 @@
1387
1419
  "path": "dist/reqe.js.map",
1388
1420
  "sha256": "c28182b280cf2c016a2b1d2ef15a3a335ff25993220767ae9fc7c74af76ba022"
1389
1421
  },
1422
+ {
1423
+ "path": "dist/restart-advisor.d.ts",
1424
+ "sha256": "ffc0fc6bba01766fc2efb12877dad9074523bc9f49d3a4c1e8b06fee83be3371"
1425
+ },
1426
+ {
1427
+ "path": "dist/restart-advisor.d.ts.map",
1428
+ "sha256": "e5ad5c1c08775a1284cba310fb1aab81959cb0a333746c8108220258cf839d94"
1429
+ },
1430
+ {
1431
+ "path": "dist/restart-advisor.js",
1432
+ "sha256": "c3eb24a53d2064c623bed87145e5b30c720f79ef638516b570926189f97eb670"
1433
+ },
1434
+ {
1435
+ "path": "dist/restart-advisor.js.map",
1436
+ "sha256": "50e95f2a379d1212a628ee816ceeaaa6abfa069ed13f3d15166af5d1b7a7bb91"
1437
+ },
1390
1438
  {
1391
1439
  "path": "dist/retro.d.ts",
1392
1440
  "sha256": "2f76203c306a37f03e1398149d2c3b48e78c33e02d37e6666bc94d1b2db3eb1e"
@@ -1643,6 +1691,22 @@
1643
1691
  "path": "dist/skills.js.map",
1644
1692
  "sha256": "27188e499f4d04661dbb8ba6da4a8eb3d94fccd4171b3059c4e26334aae9f946"
1645
1693
  },
1694
+ {
1695
+ "path": "dist/slop-lint.d.ts",
1696
+ "sha256": "7318105a744791852f7451933d22a03238186992c5338982473210e14208c94a"
1697
+ },
1698
+ {
1699
+ "path": "dist/slop-lint.d.ts.map",
1700
+ "sha256": "992700e7c1f5e3041c92b36c35a50d40dfbfe32e381e7c0448195787d9294411"
1701
+ },
1702
+ {
1703
+ "path": "dist/slop-lint.js",
1704
+ "sha256": "57963eeb81cb13f1216cfdc6c17d9d495801736216aa6fcddb4e921999285f73"
1705
+ },
1706
+ {
1707
+ "path": "dist/slop-lint.js.map",
1708
+ "sha256": "cfbc962ed288943dd1f8f7c3aabe1f1c00abdec485e5f743047e30b452b87d1f"
1709
+ },
1646
1710
  {
1647
1711
  "path": "dist/statusline.d.ts",
1648
1712
  "sha256": "b55c3a156695c6c573f515eec6fd8c51ccecb360f6348188dae53fc467668fe1"
@@ -1889,15 +1953,15 @@
1889
1953
  },
1890
1954
  {
1891
1955
  "path": "dist/workflow-run.d.ts.map",
1892
- "sha256": "0bda62d918a427203c946a0d6ec9fdb67a2223573939bc358fa9d48545e34361"
1956
+ "sha256": "234775b4c338c81b301b522b59897151e6d565ccfa377dd60f6d87bb52210fd5"
1893
1957
  },
1894
1958
  {
1895
1959
  "path": "dist/workflow-run.js",
1896
- "sha256": "c5d24bc9e5a8731ecd9e83e0fc3c3bac02421b76028906b20d2a113f04efbe59"
1960
+ "sha256": "d28fd0902ec5629a34b11d975fb8c44829ccea75c9a3a778e4ccb3688f983d5d"
1897
1961
  },
1898
1962
  {
1899
1963
  "path": "dist/workflow-run.js.map",
1900
- "sha256": "f9a9a320dde4bae0d6f6b0b2e7c03c08127e452f7fa7e00d78ea9f9b816bc6e7"
1964
+ "sha256": "d13a46fec15ef27dfc6824aa357be9bde3f1fc54e4cc462975fa8f14eee73139"
1901
1965
  },
1902
1966
  {
1903
1967
  "path": "dist/workflows.d.ts",
@@ -1933,7 +1997,7 @@
1933
1997
  },
1934
1998
  {
1935
1999
  "path": "package.json",
1936
- "sha256": "37716151597f357e24ec394b1fdeedd68c6348bf43f6e296115f8793c0fc5647"
2000
+ "sha256": "01cdd3d7ec4bb637a7e5c12197009caa23c727626387418c11c255f9d45c1150"
1937
2001
  },
1938
2002
  {
1939
2003
  "path": "src/__tests__/golden-baseline.test.ts",
@@ -2015,6 +2079,10 @@
2015
2079
  "path": "src/cli-flag-notice.ts",
2016
2080
  "sha256": "6fe214c17519ab8e334b59c865fd74fc8ea915fa492d81f5fca03375fb54adc6"
2017
2081
  },
2082
+ {
2083
+ "path": "src/cmd-usage.ts",
2084
+ "sha256": "199000257c58bc47799b31c31b1d203b43a97d5cb8a8a0484db25186390f02b0"
2085
+ },
2018
2086
  {
2019
2087
  "path": "src/codex-hooks-assets.ts",
2020
2088
  "sha256": "5d74d533435cdf7e6375c5888713044c00960681ff48e8a90af84b07e168876a"
@@ -2029,7 +2097,11 @@
2029
2097
  },
2030
2098
  {
2031
2099
  "path": "src/compounding.ts",
2032
- "sha256": "1b20b2b6ababea386d195ab3481a0af6582fda2757720732b5098e162964da32"
2100
+ "sha256": "d71dcd6fc9953179a327158a65bb562b01cfd823d6d9d2895978626226d01bb6"
2101
+ },
2102
+ {
2103
+ "path": "src/contract-checklist.ts",
2104
+ "sha256": "7e54a22c9c1a4dbc76bffc82ae58fd6a21510de689f139ac06a04038620e56ae"
2033
2105
  },
2034
2106
  {
2035
2107
  "path": "src/cost-ledger.ts",
@@ -2043,6 +2115,10 @@
2043
2115
  "path": "src/create-skill.ts",
2044
2116
  "sha256": "7c8c2015630b2265db694ff41561647c11b252f68c45ee16bed0a4d940ccaf8c"
2045
2117
  },
2118
+ {
2119
+ "path": "src/deadwood-allowlist.json",
2120
+ "sha256": "936a8529319df44976d6bb79681296f09d28f922446e3fba890532afeca5235a"
2121
+ },
2046
2122
  {
2047
2123
  "path": "src/delivery-check.ts",
2048
2124
  "sha256": "04db640b8c5d439f4392c9f8dd64fb3433f6f71d07a707cc9058f6baa6cf917c"
@@ -2073,7 +2149,7 @@
2073
2149
  },
2074
2150
  {
2075
2151
  "path": "src/feature-adr-checkpoints.ts",
2076
- "sha256": "dc28de561e16790fe6c4c32e0271e2a918711188ef2c0afb996950f9cf49f0b5"
2152
+ "sha256": "29f2640a74b5f4734050e90426bf9b712e69ac3adbf238bd9af400853ac2e273"
2077
2153
  },
2078
2154
  {
2079
2155
  "path": "src/feature-adr-claim-gate.ts",
@@ -2081,7 +2157,7 @@
2081
2157
  },
2082
2158
  {
2083
2159
  "path": "src/feature-adr-routing.ts",
2084
- "sha256": "d7dcf5340f1a08744ccf362605d4ea6d019e911bc7b436cde236221adfb3ed35"
2160
+ "sha256": "6c5e73946e43bd7eba81db5f7a225985f50cefd1ba1ff3d0413656bd16160b8a"
2085
2161
  },
2086
2162
  {
2087
2163
  "path": "src/feature-adr-setup.ts",
@@ -2093,7 +2169,7 @@
2093
2169
  },
2094
2170
  {
2095
2171
  "path": "src/guard.ts",
2096
- "sha256": "5a23957218cdeb81d86eb03615ddad487e06e6c33b0fd572217b3d084f3f911d"
2172
+ "sha256": "2d3e58c84c23569b30236265edd2e3bb5976e7106ccdb4af1eb2ee32fe8c8b2c"
2097
2173
  },
2098
2174
  {
2099
2175
  "path": "src/import-ecc.ts",
@@ -2101,7 +2177,7 @@
2101
2177
  },
2102
2178
  {
2103
2179
  "path": "src/index.ts",
2104
- "sha256": "532d52e2b2afbdd462feff7f1d31b5b827e90457f4f394afa604ed6ff0671ff5"
2180
+ "sha256": "8f6efa0c841326f9243cad95e03bdea4f0a278a8f9cd2d9f8578685b79715d85"
2105
2181
  },
2106
2182
  {
2107
2183
  "path": "src/learning-backend.ts",
@@ -2121,7 +2197,7 @@
2121
2197
  },
2122
2198
  {
2123
2199
  "path": "src/loop-blobs.generated.ts",
2124
- "sha256": "2dbb24bc826a880358c26b8a922407431d1efd006f86f52898ce85b9cf12d119"
2200
+ "sha256": "f3157fb31dea7bab497f19e6b0da9f8e0a40112d7afa69adbd93d5bfb49338eb"
2125
2201
  },
2126
2202
  {
2127
2203
  "path": "src/loop-lint.ts",
@@ -2133,11 +2209,11 @@
2133
2209
  },
2134
2210
  {
2135
2211
  "path": "src/loop-plan.ts",
2136
- "sha256": "0e8db04384f3ae3a22e0f31b62de6b176f3539e8b27c5df96c5953fb9780c715"
2212
+ "sha256": "096448a07c498c479e4b89a667d25b8301e4aa37c5596a4e2a3e314d046f259e"
2137
2213
  },
2138
2214
  {
2139
2215
  "path": "src/loop-render.ts",
2140
- "sha256": "69d0daac70fda89235352be2cc2e40bcfe62651aedab8056c1919ed062d4a75b"
2216
+ "sha256": "ce6eeba30e7cfc7c3d53c02738c42955003901413dbf4932fd8f9348e2be1c06"
2141
2217
  },
2142
2218
  {
2143
2219
  "path": "src/loop-run-semantics.ts",
@@ -2145,7 +2221,7 @@
2145
2221
  },
2146
2222
  {
2147
2223
  "path": "src/loop-trace.ts",
2148
- "sha256": "ea7d5b64c7805fd4622e7a892e0e3f1f03e4fdbb883f5fe377fcd64330775330"
2224
+ "sha256": "0025b911265278339725cc16f0cd0a9773577e51c37bdbe4eade72429df9201d"
2149
2225
  },
2150
2226
  {
2151
2227
  "path": "src/managed-hooks.ts",
@@ -2157,7 +2233,7 @@
2157
2233
  },
2158
2234
  {
2159
2235
  "path": "src/model-recommender.ts",
2160
- "sha256": "05be71b2064f78904b6c6df74ce00a327857857f0ab8596c53ad722d4897be7d"
2236
+ "sha256": "be65bb6a1e90ec70b3924d3cd0f4d1180e84a839545a1697edcf7f0d0deabdf9"
2161
2237
  },
2162
2238
  {
2163
2239
  "path": "src/mutation-gate.ts",
@@ -2233,7 +2309,7 @@
2233
2309
  },
2234
2310
  {
2235
2311
  "path": "src/qe-bridge.ts",
2236
- "sha256": "b8bbc5dfa625e1709abf6c2d5ca84ad4dff0b8b4f67a4f4ad0605170f5ac5f01"
2312
+ "sha256": "5d4329089e2ad573a65663bfde91e2d94194dfe04f1bf4f8e1d7ac8f90db0e05"
2237
2313
  },
2238
2314
  {
2239
2315
  "path": "src/qe-rounds.ts",
@@ -2279,6 +2355,10 @@
2279
2355
  "path": "src/reqe.ts",
2280
2356
  "sha256": "67988858ff527e5b465aa46b341aa710465e8cb0f72038be30f2419e0ff12cc3"
2281
2357
  },
2358
+ {
2359
+ "path": "src/restart-advisor.ts",
2360
+ "sha256": "ba13e85c465aada9ddded13bc679f3df30bdbe839d92e19b9f231eabbefecdf8"
2361
+ },
2282
2362
  {
2283
2363
  "path": "src/risk-scoring.ts",
2284
2364
  "sha256": "dcae3c879f114899b12ca57324e776e083f5753590763647690de1fdbd40198d"
@@ -2339,6 +2419,14 @@
2339
2419
  "path": "src/skills.ts",
2340
2420
  "sha256": "cb1fc2b2f904e6c40ef7ba481c4ca2e9072b31302015134f4e636f67323c89d8"
2341
2421
  },
2422
+ {
2423
+ "path": "src/slop-lint.ts",
2424
+ "sha256": "60e66ec6603997524b908833605d9f74bb3154552311e743e3a09b6f0364b3c7"
2425
+ },
2426
+ {
2427
+ "path": "src/slop-markers.json",
2428
+ "sha256": "0083b0f7ca65579b7b78289eb7066d818db37ee794d329a9452cc0c5281d91fc"
2429
+ },
2342
2430
  {
2343
2431
  "path": "src/statusline.ts",
2344
2432
  "sha256": "31000d5b249345d659478d7eb49f10771015d9c180ab265ab1cb915ee180b092"
@@ -2401,7 +2489,7 @@
2401
2489
  },
2402
2490
  {
2403
2491
  "path": "src/workflow-run.ts",
2404
- "sha256": "f1aaf39fcb5088afe3c63185c05a0d22f0507d29c342e3024836f46e3996d430"
2492
+ "sha256": "39bcc15d9c0920969fc954f43a70b5f9db4822dcb7c17227754725b82eda3ad3"
2405
2493
  },
2406
2494
  {
2407
2495
  "path": "src/workflows.ts",
@@ -2413,5 +2501,5 @@
2413
2501
  }
2414
2502
  ]
2415
2503
  },
2416
- "signature": "bnuFg1kyQUJp5inmfL8gczneBPvvrwCdA4z47rLQ1LR6o/gbLsKxk1pJYzw/yy+AYEOetHtJZVyVIlDxlFFiBQ=="
2504
+ "signature": "E8OsvC3Sg1voTDXZhWpazmmnnFtAYIov+mkok7k87urLW33/UzdBZ5CExROMaabiOuX2t3uiI5we4d6TXtSaAw=="
2417
2505
  }
package/README.md CHANGED
@@ -39,6 +39,7 @@ that works.
39
39
  | `agents-policy` | `POLICY_SOURCES`, `extractPolicyBlocks`, `renderPolicySections`, `detectPolicyDrift`, `measureAgentsMdBudget` | Pure anchored policy extraction, 12-hex source stamps, drift classification and Codex project-doc byte-budget measurement. The stamps prove source/target synchronization only; they do not prove that a runtime read or obeyed the text |
40
40
  | `sign` | `listPackFiles`, `listSignablePackFiles`, `verifyManifest`, `verifySbomAgainstManifest` | Shared node_modules/.git exclusions; verify sees MORE than sign (smuggled symlinks still fail). After authenticating the Ed25519 manifest, verification derives the canonical CycloneDX document from those signed entries and requires the no-follow `sbom.json` read to match it exactly. Current/v3 signing refuses malformed, duplicate-key, or precision-losing root `package.json` JSON and preserves object order throughout `exports`, `imports`, and `typesVersions`, so condition-order entry-point changes cannot hide behind packer-noise canonicalisation. Readers retain v1/v2 compatibility |
41
41
  | `guard` | `evaluateGuard`, `resolveRules`, `scanSecrets`, `DEFAULT_RULES`, `parsePnpmLockImporters` | Declarative HARD/SOFT constraint engine behind `dz guard` (publish/teach/consolidate pre-flight; fail-closed). The SOFT `lockfile-in-sync` rule compares each workspace package's `@dzhechkov/*` dep specs against the specifier `pnpm-lock.yaml` records for that importer — the `ERR_PNPM_OUTDATED_LOCKFILE` CI break, caught at publish. Its lockfile reader (`parsePnpmLockImporters`) is a pure RECOGNISE-OR-REFUSE parser (no YAML dependency): it reads only the `lockfileVersion: 9`+ importer layout and returns `undefined` for a legacy v5/v6 file, a truncated one, or any shape that leaves an importer with zero specifiers — because a half-parse reports every real dependency as "not recorded". The rule FAILS OPEN on that `undefined` (no violation) and is pinned SOFT-only via `SOFT_ONLY_RULES`, so no config can turn a parser that admits uncertainty into a publish blocker. The HARD `licence-hold` rule (+ `LICENCE_HOLD_PENDING_MARKER`) is the machine side of a declared licence precondition (`package.json.licenseHold`, ADR-001 hermes-claude-adaptation): silent while the pack stays `private:true` (the npm layer refuses it), it HARD-blocks publish the moment the pack becomes publishable with the hold unsatisfied — LICENSE absent/empty or still carrying the `<!-- PENDING:` grant placeholder, no `Grant-Confirmation: <url>` line, empty THIRD_PARTY_NOTICES, or a non-SPDX license field |
42
+ | `slop-lint` | `slopLint`, `parseSlopRegistry`, `validateSlopLintConfig`, `DEFAULT_SLOP_CONFIG`, `BUNDLED_SLOP_REGISTRY_URL` | Pure deterministic EN/RU lexical-density and structural-style analysis behind advisory `dz lint`. It excludes protected Markdown, requires at least two distinct registered marker IDs in one paragraph, divides marker hits by `max(visibleWords, wordFloor)`, and reports bullet walls or registered three-adjective stacks independently. Under the default `4`/`2`/`25` policy, the distinct-ID floor owns paragraphs through 50 words and density is the dilution cap from 51 words onward. The core performs no file, network, clock, locale, or process I/O; policy/config failures are typed diagnostics rather than empty clean results. |
42
43
  | `backlog` + `backlog-embed` | `dedupIdea`, `classifyDedup`, `dedupPairBand`, `dedupEmbedText`, `lexicalContainment`, `ensureBacklogEmbedForm`, `recordAbsorption`, `alignIdea`, `spinRoulette`, `readGoalMapDetailed`, `parseEffort`, `ensureBacklogGitignored`, `harmonizeBacklog`, `transitionIdeas`, `checkTransition`, `resolveIdPrefix`, `IDEA_TRANSITIONS` | The Smart Backlog engine behind `dz backlog`: status lifecycle via `transitionIdeas` (`ship`/`drop`/`reopen` against the `IDEA_TRANSITIONS` table — unique-short-prefix resolution, idempotent ship/drop no-ops, non-idempotent reopen, all-or-nothing fail-closed batches, line-preserving atomic JSONL rewrite that keeps every non-status byte of untouched records); content-addressed idea records in `.dz/backlog/ideas.jsonl`, semantic dedup over the REUSED agentdb vector namespace (`dz-backlog` — no second store), weighted-max GoalMap alignment, and a seeded weighted roulette. Dedup is TWO-SIGNAL since the register-inflation fix (MEASURED 2026-08-11 on the real 105-idea store: full-length embeds INVERTED the signal on long texts — genuine paraphrases 0.35–0.61 vs topically disjoint long-RU pairs up to 0.9195): `dedupEmbedText` embeds a bounded 400-char excerpt (`backlog-embed.ts`, one form shared by query/mirror/reindex so vectors can never split spaces; `ensureBacklogEmbedForm` re-mirrors v1 stores once, batched), and `dedupPairBand` requires a cosine-threshold DUPLICATE to also share subject vocabulary (`lexicalContainment` ≥ 0.3, else demoted to RELATED with the pair reported — the 0.941 register-only absorption) while promoting a same-idea re-capture at a different length (containment ≥ 0.95, cosine ≥ 0.75) to a subset duplicate; `recordAbsorption` keeps every absorbed text in `absorbed.jsonl` so a wrong verdict is reversible (mutation-defended: `backlog-dedup-demotion-corroboration`, hand-verified 6 red). Every band/weight decision is a PURE function. `classifyDedup` also reports the top-1 match id alongside the cosine (the calibration surface for the 0.92 duplicate band — observational, it never moves the verdict); `readGoalMapDetailed` returns the entries the defensive reader DROPPED with a reason AND the fields it REPAIRED with their raw values (a weight clamped before validation made the validator's out-of-range branch dead code), so `goals --validate` can never report a vacuous "valid (0 goals)" nor hide a `weight: 7`; `parseEffort` returns a printable note for every clamp; `ensureBacklogGitignored` gitignores the store on first write (raw ideas are private prompt-class content) — atomically, preserving the file's dominant EOL, recognising every plain spelling of an existing rule (`/.dz/`, `.dz/**`, …) via `backlogIgnoreStatus`, and obeying a `!` negation as an explicit user opt-out instead of overriding it |
43
44
  | `no-stubs` | `scanStubs`, `checkNoStubs`, `scannableStubPath`, `STUB_MARKERS`, `STUB_PHRASES`, `STUB_SCAN_EXTENSIONS` | Pure unfinished-stub scanner behind the SOFT `no-stubs` publish rule (backlog 0b403a0106103901, Karpathy-Michaels rule XI): bare markers (`TODO`/`FIXME`/`HACK`/`XXX`/`PLACEHOLDER`) case-SENSITIVE with hard word boundaries (`hackathon`/`todos`/a marker inside a hash never fire; MEASURED: relaxing case doubles this repo's hits and adds only prose) + the `implement later` phrase case-insensitive. SCOPE = the CHANGE-SET (the working-tree `git status --porcelain -uall` diff — `-uall` so a brand-new untracked DIRECTORY is scanned file-by-file instead of collapsing to one invisible `?? newdir/` line; `.gitignore` semantics unchanged), never the whole tree — MEASURED: a tree-wide scan is 32+25 hits of mostly ancient legitimate markers, i.e. noise that gets a gate switched off. Markdown gets PROSE scoping (fenced blocks + backticked spans are QUOTES, not stubs). Waiver-with-REASON only, per line (`no-stubs: <reason>`) or per path (`.dz/guard.json` `stubWaivers`, the feature-adr-setup --guards shape); a reasonless waiver is REFUSED as its own finding and exempts nothing. Self-exemption is STRUCTURAL: every marker in the module and its tests is assembled from string fragments, so the gate's own source scans clean — a tested property, not a path skip. Fail-open on missing evidence (no change fact / ungathered contents ⇒ nothing reported) but never fail-SILENT: skipped scannable files (deleted/oversize/unreadable/beyond the file cap) surface as ONE aggregate `notes` entry in the `GuardResult` + audit record — information that can never move the verdict. KNOWN LIMITS are documented at the top of `no-stubs.ts` instead of implied away (whole-line inline waiver token = layer-4 auditability defence; reason QUALITY not judged; boolean fence model, not CommonMark; git-quoted paths undecoded; TS-monorepo extension allowlist; worktree-not-index reads; exact-string config-waiver paths). Mutation-defended (`no-stubs-bare-marker-fires` observed 10 red, `no-stubs-skipped-note-emitted` observed 2 red) |
44
45
  | `feature-adr-setup` (P3) | `renderGuardsConfig`, `renderGuardsRunner` | Scaffolds deterministic guard tests into a TARGET project: `guards.config.json` + a zero-dependency `check.mjs` runner (loc-cap, secret-scan, frozen-file sha256 pins, waivers-with-reasons) — `dz feature-adr-setup --guards` |
@@ -72,7 +73,9 @@ Custom Workflow loops used to be written by copy-pasting a 1470-line battle scri
72
73
  now ships the loop-designer meta-factory:
73
74
 
74
75
  - **`loop-plan/1`** — an internally-versioned typed workflow-plan schema (steps/deps/typed pauses/
75
- bounded fanout with a mandatory registry + `maxFanout`/failure-class retries defaulting to
76
+ windowed fanout with a mandatory registry + `maxFanout` concurrency (every item dispatches by
77
+ default; deliberate prefix sampling requires `overflow:'truncate'` + `truncateReason` and emits
78
+ banner/stderr/trace receipts)/failure-class retries defaulting to
76
79
  `maxAttempts: 1` for agent stages/`CachePolicy` keyed on normalized input as a SEPARATE identity
77
80
  from position-keyed checkpoints). `parsePlan` / `validatePlan` (INV-1…8) / `normalizePlan` /
78
81
  `planDigest`, plus an `x-` extension point (vendor keys ride the digest, never validation).
@@ -137,6 +140,9 @@ now ships the loop-designer meta-factory:
137
140
  only. Readers: `parseTrace`, `assembleTimeline` (the host journal is agentId-correlation only,
138
141
  never ordering), `runInvariants` (one implementation, two call sites: fitness suite + CLI),
139
142
  `renderTimelineHtml` (mermaid topology + an HTML waterfall — never a second mermaid diagram).
143
+ Trace projection v2 additionally proves fanout admission per registry position under
144
+ `region-dispatch-completeness:<fanout>`; legacy projection v1 is `inconclusive`, never a guessed
145
+ pass. The committed `pkg-audit-1` 3-of-6 incident is the regression fixture.
140
146
  - **Subsystem blobs** (`loop-blobs.generated.ts`, machine-owned): checkpoints, training-pairs
141
147
  (default OFF — the health-advisor PHI lesson), model-resolver (auto-included when any
142
148
  `step.model` is set), usage-probes, codex-dispatch, challenge-panel, trace — regenerated from
@@ -290,9 +296,73 @@ Contracts the exports actually keep (each with its proving test in `test/profile
290
296
  directly with a poisoned in-memory profile skips `writeProfile` entirely. Invalid → verdict, no
291
297
  write, no backup.
292
298
 
299
+ ## Contract checklist API
300
+
301
+ `contract-checklist.ts` is the dependency-free policy behind retrospective feature-contract checks.
302
+ It performs no filesystem, process, network, clock, locale, or model I/O. Callers supply artifact
303
+ bytes and an injected evidence reader:
304
+
305
+ ```ts
306
+ import {
307
+ extractContractChecklist,
308
+ renderContractChecklist,
309
+ parseContractVerdictReport,
310
+ verifyContractVerdicts,
311
+ } from '@dzhechkov/harness-core';
312
+ ```
313
+
314
+ - `extractContractChecklist(source)` reads the exact `## Acceptance criteria` / `AC-N: ...`
315
+ vocabulary and one exact `## Confirmation` pair from each canonical direct ADR Markdown file. It
316
+ emits ordered `contract-checklist/1` items with contiguous `CC-N` ids or no partial contract.
317
+ - `renderContractChecklist(checklist)` serializes one deterministic fenced `contract-checklist`
318
+ block for a future producer integration.
319
+ - `parseContractVerdictReport(text)` accepts one `## Contract checklist` fenced JSON object with
320
+ schema `contract-checklist-verdict/1`, rejects duplicate JSON members and closed-schema drift, and
321
+ requires payload `overallGrade` to equal the human Grade.
322
+ - `verifyContractVerdicts(checklist, report, evidenceReader)` requires exact ordered coverage,
323
+ repository-relative artifact syntax, one exact quote occurrence, verdict/outcome polarity, and
324
+ rejects grade A/B when any item is `unmet`.
325
+
326
+ This is a structural assurance boundary. It proves grammar, identity completeness, evidence
327
+ containment/uniqueness, polarity, and grade coherence. It does not judge whether a quote semantically
328
+ proves a criterion, execute a cited test, replace ADR Confirmation, or replace independent QE.
329
+
330
+ ## Restart advisor API
331
+
332
+ `restart-advisor.ts` is the pure policy behind the manual `dz restart-advisor` command. It accepts
333
+ JSONL bytes and an explicit threshold/round count; it performs no filesystem, process, environment,
334
+ clock, network, or model I/O. The public value exports are:
335
+
336
+ ```ts
337
+ import {
338
+ parseCheckpointQeHistory,
339
+ parseTrainingPairQeHistory,
340
+ decideRestartRecommendation,
341
+ adviseRestart,
342
+ renderRestartDecisionLog,
343
+ } from '@dzhechkov/harness-core';
344
+ ```
345
+
346
+ The versioned `restart-advisor/1` result returns one of `RESTART_CODE_STAGE`,
347
+ `NO_RESTART_RECOMMENDATION`, `NOT_ESTABLISHED`, or `INVALID_INPUT`. Only the adjacent trailing
348
+ streak counts. The checkpoint and training-pair histories are never unioned: when both carry QE
349
+ rounds they must normalize to the same identities and grades, or advice is not established. A
350
+ firing result is still data only: `autoAction` is always `false`, and
351
+ `renderRestartDecisionLog` exposes the effective policy, evidence, source, and reason without
352
+ persisting anything or restarting a stage.
353
+
293
354
  ## Status
294
355
 
295
- `0.8.1` — **the operator profile module, hardened by four cross-family review rounds until round 8
356
+ `0.8.5` — **the pure `restart-advisor/1` API for an explicit, advisory-only code-stage
357
+ restart recommendation.** The CLI supplies D/2 defaults; core itself refuses absent policy.
358
+ Publication and live feature-adr integration remain outside this implementation step.
359
+
360
+ `0.8.3` — **staged: the pure `contract-checklist/1` extraction and
361
+ `contract-checklist-verdict/1` verification API, alongside bilingual advisory `dz lint`.** The
362
+ contract module is string/object-in and typed-decision-out; publication remains outside this
363
+ implementation step.
364
+
365
+ `0.8.2` — **the operator profile module, hardened by four cross-family review rounds until round 8
296
366
  came back clean** (the contract list above IS the round-by-round finding list — echo deferral lives
297
367
  in the CLI, the two totality fixes and the seam refusals live here). Tests: `test/profile.test.ts`
298
368
  22/22 (MEASURED — reproducer `npx vitest run test/profile.test.ts`).