@dzhechkov/harness-core 0.8.23 → 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.
- package/.dz-manifest.json +153 -33
- package/README.md +146 -4
- package/dist/confirmation-file-gate.d.ts +20 -0
- package/dist/confirmation-file-gate.d.ts.map +1 -0
- package/dist/confirmation-file-gate.js +76 -0
- package/dist/confirmation-file-gate.js.map +1 -0
- package/dist/contract-checklist.d.ts +1 -0
- package/dist/contract-checklist.d.ts.map +1 -1
- package/dist/contract-checklist.js +7 -4
- package/dist/contract-checklist.js.map +1 -1
- package/dist/core-boundary.d.ts +11 -0
- package/dist/core-boundary.d.ts.map +1 -0
- package/dist/core-boundary.js +41 -0
- package/dist/core-boundary.js.map +1 -0
- package/dist/feature-adr-landing.d.ts +4 -2
- package/dist/feature-adr-landing.d.ts.map +1 -1
- package/dist/feature-adr-landing.js +5 -3
- package/dist/feature-adr-landing.js.map +1 -1
- package/dist/feature-tier.d.ts +4 -0
- package/dist/feature-tier.d.ts.map +1 -0
- package/dist/feature-tier.js +55 -0
- package/dist/feature-tier.js.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/journal.d.ts +27 -0
- package/dist/journal.d.ts.map +1 -0
- package/dist/journal.js +56 -0
- package/dist/journal.js.map +1 -0
- package/dist/loop-blobs.generated.d.ts +1 -1
- package/dist/loop-blobs.generated.d.ts.map +1 -1
- package/dist/loop-blobs.generated.js +10 -1
- package/dist/loop-blobs.generated.js.map +1 -1
- package/dist/patterns.d.ts +5 -0
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +16 -0
- package/dist/patterns.js.map +1 -1
- package/dist/publish.d.ts +19 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +38 -16
- package/dist/publish.js.map +1 -1
- package/dist/run-cleanup.d.ts +26 -0
- package/dist/run-cleanup.d.ts.map +1 -0
- package/dist/run-cleanup.js +33 -0
- package/dist/run-cleanup.js.map +1 -0
- package/dist/run-registry.d.ts +61 -0
- package/dist/run-registry.d.ts.map +1 -0
- package/dist/run-registry.js +163 -0
- package/dist/run-registry.js.map +1 -0
- package/package.json +4 -4
- package/sbom.json +332 -32
- package/src/confirmation-file-gate.ts +85 -0
- package/src/contract-checklist.ts +11 -5
- package/src/core-boundary.ts +43 -0
- package/src/feature-adr-landing.ts +8 -4
- package/src/feature-tier.ts +56 -0
- package/src/index.ts +9 -1
- package/src/journal.ts +54 -0
- package/src/loop-blobs.generated.ts +10 -1
- package/src/patterns.ts +18 -0
- package/src/publish.ts +49 -13
- package/src/run-cleanup.ts +38 -0
- 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": "
|
|
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": "
|
|
512
|
+
"sha256": "e2596400484084347e7e260676a2409c1883f9e3bef5aa534c46cd3f3a62a04d"
|
|
497
513
|
},
|
|
498
514
|
{
|
|
499
515
|
"path": "dist/contract-checklist.d.ts.map",
|
|
500
|
-
"sha256": "
|
|
516
|
+
"sha256": "46f24afc07e280fd6bc5cec28796df0d4311fc5bc69b5c106d156421aed415ff"
|
|
501
517
|
},
|
|
502
518
|
{
|
|
503
519
|
"path": "dist/contract-checklist.js",
|
|
504
|
-
"sha256": "
|
|
520
|
+
"sha256": "fa654ab80e1dfacf5c317d1f53acd9fcab55b4f9374ca511993d8b933ded585c"
|
|
505
521
|
},
|
|
506
522
|
{
|
|
507
523
|
"path": "dist/contract-checklist.js.map",
|
|
508
|
-
"sha256": "
|
|
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": "
|
|
816
|
+
"sha256": "1640c3850c7ea92e4f6da0620af0814433005ba312c6276b5ac5482a379f9e43"
|
|
785
817
|
},
|
|
786
818
|
{
|
|
787
819
|
"path": "dist/feature-adr-landing.d.ts.map",
|
|
788
|
-
"sha256": "
|
|
820
|
+
"sha256": "0fb04dc4825cb5a9e5a0e5fa0c95bc4d351d8ff87b9093a039a4f326112e9831"
|
|
789
821
|
},
|
|
790
822
|
{
|
|
791
823
|
"path": "dist/feature-adr-landing.js",
|
|
792
|
-
"sha256": "
|
|
824
|
+
"sha256": "ebdbb669aa4c8f3b5109921c021c915cef68b48bf6d04842e53f5d4c9a5f2d1e"
|
|
793
825
|
},
|
|
794
826
|
{
|
|
795
827
|
"path": "dist/feature-adr-landing.js.map",
|
|
796
|
-
"sha256": "
|
|
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": "
|
|
960
|
+
"sha256": "5d039ab016a653c8e7b1beeb332c8cb1006ff890cb3efc89a17e9f05de0f1140"
|
|
913
961
|
},
|
|
914
962
|
{
|
|
915
963
|
"path": "dist/index.d.ts.map",
|
|
916
|
-
"sha256": "
|
|
964
|
+
"sha256": "f51c5db8115b725eaa53d78c09fc04734ce07fd4f23367d463f8b707387070e6"
|
|
917
965
|
},
|
|
918
966
|
{
|
|
919
967
|
"path": "dist/index.js",
|
|
920
|
-
"sha256": "
|
|
968
|
+
"sha256": "0ac18efff2e6a04d240a7afb6b235fbc0feded591a4725b433ba8d1cdd3233b5"
|
|
921
969
|
},
|
|
922
970
|
{
|
|
923
971
|
"path": "dist/index.js.map",
|
|
924
|
-
"sha256": "
|
|
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": "
|
|
1152
|
+
"sha256": "efe3f87b164385984d25701731f1de015dd6dbbd94144288a8e9ddc9da23ad08"
|
|
1089
1153
|
},
|
|
1090
1154
|
{
|
|
1091
1155
|
"path": "dist/loop-blobs.generated.d.ts.map",
|
|
1092
|
-
"sha256": "
|
|
1156
|
+
"sha256": "d5a7c7a45ce44cec5138a4aea219921225ccf09cf633f84e294bdf8fff800d0a"
|
|
1093
1157
|
},
|
|
1094
1158
|
{
|
|
1095
1159
|
"path": "dist/loop-blobs.generated.js",
|
|
1096
|
-
"sha256": "
|
|
1160
|
+
"sha256": "5903d8d29bef0b0bbba310cd67dbbfbf16da7b006eab65d25389630c99e73ba6"
|
|
1097
1161
|
},
|
|
1098
1162
|
{
|
|
1099
1163
|
"path": "dist/loop-blobs.generated.js.map",
|
|
1100
|
-
"sha256": "
|
|
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": "
|
|
1472
|
+
"sha256": "32348c6790ab707dc53126c0f00fe2409dcce667d65fb86c773fca550dae3183"
|
|
1409
1473
|
},
|
|
1410
1474
|
{
|
|
1411
1475
|
"path": "dist/patterns.d.ts.map",
|
|
1412
|
-
"sha256": "
|
|
1476
|
+
"sha256": "5ec4dc7878b13969fd5cecd926c3f3ed58aa5b9ec66b92cfbba36dc244b48910"
|
|
1413
1477
|
},
|
|
1414
1478
|
{
|
|
1415
1479
|
"path": "dist/patterns.js",
|
|
1416
|
-
"sha256": "
|
|
1480
|
+
"sha256": "be48c8d6ed81b344f033f0e3bbce2037583a145d8c452798617fe70ebd72c053"
|
|
1417
1481
|
},
|
|
1418
1482
|
{
|
|
1419
1483
|
"path": "dist/patterns.js.map",
|
|
1420
|
-
"sha256": "
|
|
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": "
|
|
1600
|
+
"sha256": "59e6436ae59f0ef4ed94692aef8ddc4a5bf021e6afb364078c4484ef48fc6923"
|
|
1537
1601
|
},
|
|
1538
1602
|
{
|
|
1539
1603
|
"path": "dist/publish.d.ts.map",
|
|
1540
|
-
"sha256": "
|
|
1604
|
+
"sha256": "d4424a2422f93a831ea30edb2945a1e427c0738f55d991d895bdf725b7b1eed7"
|
|
1541
1605
|
},
|
|
1542
1606
|
{
|
|
1543
1607
|
"path": "dist/publish.js",
|
|
1544
|
-
"sha256": "
|
|
1608
|
+
"sha256": "eef4266f8e54b04d258314610248966fbf4908d4be95013a0fdedc5127f35215"
|
|
1545
1609
|
},
|
|
1546
1610
|
{
|
|
1547
1611
|
"path": "dist/publish.js.map",
|
|
1548
|
-
"sha256": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
|
557
|
-
|
|
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.
|
|
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"}
|