@dzhechkov/harness-core 0.7.11 → 0.7.12

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 (49) hide show
  1. package/.dz-manifest.json +93 -33
  2. package/README.md +26 -0
  3. package/dist/amendment-trace.d.ts +12 -1
  4. package/dist/amendment-trace.d.ts.map +1 -1
  5. package/dist/amendment-trace.js +22 -4
  6. package/dist/amendment-trace.js.map +1 -1
  7. package/dist/feature-adr-routing.d.ts +69 -12
  8. package/dist/feature-adr-routing.d.ts.map +1 -1
  9. package/dist/feature-adr-routing.js +117 -7
  10. package/dist/feature-adr-routing.js.map +1 -1
  11. package/dist/index.d.ts +7 -4
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +10 -3
  14. package/dist/index.js.map +1 -1
  15. package/dist/learning-backend.d.ts +39 -0
  16. package/dist/learning-backend.d.ts.map +1 -1
  17. package/dist/learning-backend.js +31 -11
  18. package/dist/learning-backend.js.map +1 -1
  19. package/dist/lesson-bandit.d.ts +116 -0
  20. package/dist/lesson-bandit.d.ts.map +1 -0
  21. package/dist/lesson-bandit.js +235 -0
  22. package/dist/lesson-bandit.js.map +1 -0
  23. package/dist/lesson-payoff.d.ts +260 -0
  24. package/dist/lesson-payoff.d.ts.map +1 -0
  25. package/dist/lesson-payoff.js +597 -0
  26. package/dist/lesson-payoff.js.map +1 -0
  27. package/dist/patterns.d.ts +21 -0
  28. package/dist/patterns.d.ts.map +1 -1
  29. package/dist/patterns.js +42 -3
  30. package/dist/patterns.js.map +1 -1
  31. package/dist/project-skills-root.d.ts +44 -0
  32. package/dist/project-skills-root.d.ts.map +1 -0
  33. package/dist/project-skills-root.js +62 -0
  34. package/dist/project-skills-root.js.map +1 -0
  35. package/dist/vector-tier.d.ts +30 -0
  36. package/dist/vector-tier.d.ts.map +1 -1
  37. package/dist/vector-tier.js +130 -15
  38. package/dist/vector-tier.js.map +1 -1
  39. package/package.json +4 -4
  40. package/sbom.json +182 -32
  41. package/src/amendment-trace.ts +34 -4
  42. package/src/feature-adr-routing.ts +146 -7
  43. package/src/index.ts +16 -2
  44. package/src/learning-backend.ts +62 -11
  45. package/src/lesson-bandit.ts +279 -0
  46. package/src/lesson-payoff.ts +728 -0
  47. package/src/patterns.ts +66 -5
  48. package/src/project-skills-root.ts +63 -0
  49. package/src/vector-tier.ts +182 -16
package/sbom.json CHANGED
@@ -25,7 +25,7 @@
25
25
  "hashes": [
26
26
  {
27
27
  "alg": "SHA-256",
28
- "content": "792edbb343dc15f90dad157f6d833c3bfadf417f302dcd66c2b9435e4515f0da"
28
+ "content": "6d91220bbf12e856c67a88b5a00f03e5585a116346f32576366192bb65816f52"
29
29
  }
30
30
  ]
31
31
  },
@@ -155,7 +155,7 @@
155
155
  "hashes": [
156
156
  {
157
157
  "alg": "SHA-256",
158
- "content": "5e38fdb88bf848eaf045f7e8450bd7584dedd89c957d6bcbf3f33688acd59ae8"
158
+ "content": "0cd1c17e84518dde7b0d1ca9558866d96902e611f9a5f579828d89315a390bcb"
159
159
  }
160
160
  ]
161
161
  },
@@ -165,7 +165,7 @@
165
165
  "hashes": [
166
166
  {
167
167
  "alg": "SHA-256",
168
- "content": "f73123d7aee4e1a8a3bc392bf34ec702556406b31a05e7cbbe7fb29617499761"
168
+ "content": "6e9e2402008672ac2581c97db920eaac9a4b3900ab8885aa049b465ead146ac9"
169
169
  }
170
170
  ]
171
171
  },
@@ -175,7 +175,7 @@
175
175
  "hashes": [
176
176
  {
177
177
  "alg": "SHA-256",
178
- "content": "f62989595ef9cf895a92694a3c72cca6fee3fc10f31454937ac42d158e1797b7"
178
+ "content": "5bdc777e7d265e84431fae39f7331f814ef52a75b09f1482dd7ea26d3f3ccda3"
179
179
  }
180
180
  ]
181
181
  },
@@ -185,7 +185,7 @@
185
185
  "hashes": [
186
186
  {
187
187
  "alg": "SHA-256",
188
- "content": "b193ef04792228c52092dc2a6cc59716de6d36b1fa5178a4e5196d45f0d680af"
188
+ "content": "6a6ad6be2419f9ae6ee10a3d59a272c325a316becfd69d57f5b40b1ef7534130"
189
189
  }
190
190
  ]
191
191
  },
@@ -1475,7 +1475,7 @@
1475
1475
  "hashes": [
1476
1476
  {
1477
1477
  "alg": "SHA-256",
1478
- "content": "a70af15e057ac643df6345a237c58bb3fb4b72f6707588eda3a93258394f78d0"
1478
+ "content": "a1af0f230be9ee3eaccdf24ada9364bc2169905b68efaec35cb6f6844284677c"
1479
1479
  }
1480
1480
  ]
1481
1481
  },
@@ -1485,7 +1485,7 @@
1485
1485
  "hashes": [
1486
1486
  {
1487
1487
  "alg": "SHA-256",
1488
- "content": "8ee50d5067b71b1d68c57dd8c5f0f0a327ffc282755a13d17565613b9d036f92"
1488
+ "content": "0e74beee5ab13a4762e2219f8f77f65c2403636268682ba6828fd0bbc6fdef99"
1489
1489
  }
1490
1490
  ]
1491
1491
  },
@@ -1495,7 +1495,7 @@
1495
1495
  "hashes": [
1496
1496
  {
1497
1497
  "alg": "SHA-256",
1498
- "content": "ccc9f6d9ce8ba5699010c5b590fef6509d80ed928043b8747f5c52980d5c0596"
1498
+ "content": "a213058784464f7ba21be0178324d68fb417da00f3b416726f6acdf9de944b36"
1499
1499
  }
1500
1500
  ]
1501
1501
  },
@@ -1505,7 +1505,7 @@
1505
1505
  "hashes": [
1506
1506
  {
1507
1507
  "alg": "SHA-256",
1508
- "content": "b8bfd4707746ca1ded26c2ccc9a4afbe5a9acf529b74e128dadced1631d1adde"
1508
+ "content": "2c1520e30dba9fad19981c7533edb57ef8be7f4dcf444463f4c00e33826b8663"
1509
1509
  }
1510
1510
  ]
1511
1511
  },
@@ -1675,7 +1675,7 @@
1675
1675
  "hashes": [
1676
1676
  {
1677
1677
  "alg": "SHA-256",
1678
- "content": "b706d34a70729274400944132eed0ae2ee045b3d9d3e01c4f6f0e97db1a23d8c"
1678
+ "content": "60629799e03201468849e368388b517acf33a809256cdd090ab3b47f6c8722b7"
1679
1679
  }
1680
1680
  ]
1681
1681
  },
@@ -1685,7 +1685,7 @@
1685
1685
  "hashes": [
1686
1686
  {
1687
1687
  "alg": "SHA-256",
1688
- "content": "96e826c507770abf2442369d2b98096f51a807ccc57c0f5d18bd0a0a4ac74add"
1688
+ "content": "780d4ace92fa01342a373e380b89f322cb7f6fa3fcc06779e2cae28c0a618170"
1689
1689
  }
1690
1690
  ]
1691
1691
  },
@@ -1695,7 +1695,7 @@
1695
1695
  "hashes": [
1696
1696
  {
1697
1697
  "alg": "SHA-256",
1698
- "content": "3b20d46afb6f5b74ced643b6b63d37deaa37513948278f7a2f9cec6f8d898dea"
1698
+ "content": "3b1b2bfa5a343fd07b79715845ca3ce887ec614868ba37ae05114444142d1fb9"
1699
1699
  }
1700
1700
  ]
1701
1701
  },
@@ -1705,7 +1705,7 @@
1705
1705
  "hashes": [
1706
1706
  {
1707
1707
  "alg": "SHA-256",
1708
- "content": "7a205f5ad82c203a202e06a8300eb218965ed4d79e8b65db6ec471bf19996269"
1708
+ "content": "b60a401a6b62e2725c3b9419da607ad7d9fcea61de2b94d1b9afe8b3678ea07a"
1709
1709
  }
1710
1710
  ]
1711
1711
  },
@@ -1715,7 +1715,7 @@
1715
1715
  "hashes": [
1716
1716
  {
1717
1717
  "alg": "SHA-256",
1718
- "content": "2973cd8f91e4ad079f61a2e086197cf3d489beb52e09d9527306a2be0e2956f2"
1718
+ "content": "2cb404295e5307cc20e92d6298f7b4184465ccfe4ebec30271720e5896852f10"
1719
1719
  }
1720
1720
  ]
1721
1721
  },
@@ -1725,7 +1725,7 @@
1725
1725
  "hashes": [
1726
1726
  {
1727
1727
  "alg": "SHA-256",
1728
- "content": "1fb488eaaef87d92cd95ca18901508cfb1793057470c31df01f399dae6c9af6e"
1728
+ "content": "7cac1ab14956ad9b03902135f855d6636f97098d1654121dea5cb10eee3428e1"
1729
1729
  }
1730
1730
  ]
1731
1731
  },
@@ -1735,7 +1735,7 @@
1735
1735
  "hashes": [
1736
1736
  {
1737
1737
  "alg": "SHA-256",
1738
- "content": "55ae03d431dd90aa819f8ea28aa590aad076a2f0222bb076461ce627ac342187"
1738
+ "content": "832e0a36bffa7e426c045b6ce6c70df972288127259e4adbf4abb840bccf5eab"
1739
1739
  }
1740
1740
  ]
1741
1741
  },
@@ -1745,7 +1745,7 @@
1745
1745
  "hashes": [
1746
1746
  {
1747
1747
  "alg": "SHA-256",
1748
- "content": "7752efa7cba6b11dd7230b6d965f72a1b3a9e47e0c32fab619496d67f5f5ba22"
1748
+ "content": "12a2e54dacb1f856196cd2d012228fc29ee4c90414e8255fc5ada25e750e4555"
1749
1749
  }
1750
1750
  ]
1751
1751
  },
@@ -1789,6 +1789,86 @@
1789
1789
  }
1790
1790
  ]
1791
1791
  },
1792
+ {
1793
+ "type": "file",
1794
+ "name": "dist/lesson-bandit.d.ts",
1795
+ "hashes": [
1796
+ {
1797
+ "alg": "SHA-256",
1798
+ "content": "18050085b5a86c89b8c73445e215d2bc974a42b0fe6d25fcaadfff4edfc84ade"
1799
+ }
1800
+ ]
1801
+ },
1802
+ {
1803
+ "type": "file",
1804
+ "name": "dist/lesson-bandit.d.ts.map",
1805
+ "hashes": [
1806
+ {
1807
+ "alg": "SHA-256",
1808
+ "content": "d78f25bccf8b1ccb5fe76e6f9684519e8e8b5f312ae3e51bba27dc8d806bf904"
1809
+ }
1810
+ ]
1811
+ },
1812
+ {
1813
+ "type": "file",
1814
+ "name": "dist/lesson-bandit.js",
1815
+ "hashes": [
1816
+ {
1817
+ "alg": "SHA-256",
1818
+ "content": "430a62096515a00fa9821312f3826b60b678aabc8fcf8790ed4465a536313e35"
1819
+ }
1820
+ ]
1821
+ },
1822
+ {
1823
+ "type": "file",
1824
+ "name": "dist/lesson-bandit.js.map",
1825
+ "hashes": [
1826
+ {
1827
+ "alg": "SHA-256",
1828
+ "content": "d7bda1293981673a916e9bf1fdda1c45e88407d6a72572f77bdaddac73ed5f67"
1829
+ }
1830
+ ]
1831
+ },
1832
+ {
1833
+ "type": "file",
1834
+ "name": "dist/lesson-payoff.d.ts",
1835
+ "hashes": [
1836
+ {
1837
+ "alg": "SHA-256",
1838
+ "content": "a73c7aa9d3aeea7bcc0ce5f32df392a3d4d1f43df2a41e89359d659ba73fc838"
1839
+ }
1840
+ ]
1841
+ },
1842
+ {
1843
+ "type": "file",
1844
+ "name": "dist/lesson-payoff.d.ts.map",
1845
+ "hashes": [
1846
+ {
1847
+ "alg": "SHA-256",
1848
+ "content": "b4a01fd697d785c473d9b66689c8d140211fc09f8379ca7fa32e41fbd36ca940"
1849
+ }
1850
+ ]
1851
+ },
1852
+ {
1853
+ "type": "file",
1854
+ "name": "dist/lesson-payoff.js",
1855
+ "hashes": [
1856
+ {
1857
+ "alg": "SHA-256",
1858
+ "content": "d08d6563fa6f1996701cccaad51896a752cc7a0dea8754fc941be1bc935da22b"
1859
+ }
1860
+ ]
1861
+ },
1862
+ {
1863
+ "type": "file",
1864
+ "name": "dist/lesson-payoff.js.map",
1865
+ "hashes": [
1866
+ {
1867
+ "alg": "SHA-256",
1868
+ "content": "3cd74a4dbf1dd020e207b4cc5eb00db776c0656177a3d907b150eb536136f1a6"
1869
+ }
1870
+ ]
1871
+ },
1792
1872
  {
1793
1873
  "type": "file",
1794
1874
  "name": "dist/loop-blobs.generated.d.ts",
@@ -2475,7 +2555,7 @@
2475
2555
  "hashes": [
2476
2556
  {
2477
2557
  "alg": "SHA-256",
2478
- "content": "f1c730b94dc591aa592b7b31b86982561f099680fb822e7da68045ec01d44a99"
2558
+ "content": "4f5b24a475a90fb4cf07d0af965300ce5c187206f68c0d497956b7538ee4f494"
2479
2559
  }
2480
2560
  ]
2481
2561
  },
@@ -2485,7 +2565,7 @@
2485
2565
  "hashes": [
2486
2566
  {
2487
2567
  "alg": "SHA-256",
2488
- "content": "6cb5a710dcc1d1ca1bb8fa9350c9751da58b6bc8cf48688eb191574cd1e84cf5"
2568
+ "content": "4bad5098f61eef6a0f06600cccb1d57e8b137d4eadbf39278664c09bc5e1ba59"
2489
2569
  }
2490
2570
  ]
2491
2571
  },
@@ -2495,7 +2575,7 @@
2495
2575
  "hashes": [
2496
2576
  {
2497
2577
  "alg": "SHA-256",
2498
- "content": "15992b9d7a69a2b91597aaa05901a1656fdcbed54dfa23ffc9d78f25432ead48"
2578
+ "content": "edf5a1d5d1618789174d81b101164e161bde1f4441211bcdcb6b32bf5aaaa671"
2499
2579
  }
2500
2580
  ]
2501
2581
  },
@@ -2505,7 +2585,7 @@
2505
2585
  "hashes": [
2506
2586
  {
2507
2587
  "alg": "SHA-256",
2508
- "content": "c0bdd22f1dede62cc6cc0efa644d4a59bbcf69fbe69a95c13fcd313fda4b1851"
2588
+ "content": "a4a57cf5feaf09a9f24ec98ef469d9de1e7dee7aa98db39de7696a9c67e953c7"
2509
2589
  }
2510
2590
  ]
2511
2591
  },
@@ -2589,6 +2669,46 @@
2589
2669
  }
2590
2670
  ]
2591
2671
  },
2672
+ {
2673
+ "type": "file",
2674
+ "name": "dist/project-skills-root.d.ts",
2675
+ "hashes": [
2676
+ {
2677
+ "alg": "SHA-256",
2678
+ "content": "b813eeb038668ee94f10be30eae66cf22c9ac6372873586f74a308d0160c6dde"
2679
+ }
2680
+ ]
2681
+ },
2682
+ {
2683
+ "type": "file",
2684
+ "name": "dist/project-skills-root.d.ts.map",
2685
+ "hashes": [
2686
+ {
2687
+ "alg": "SHA-256",
2688
+ "content": "5bcd786bb55c494c7a3f845dfa397565bc634ae938100b5e61773fb480b36ba0"
2689
+ }
2690
+ ]
2691
+ },
2692
+ {
2693
+ "type": "file",
2694
+ "name": "dist/project-skills-root.js",
2695
+ "hashes": [
2696
+ {
2697
+ "alg": "SHA-256",
2698
+ "content": "041fb3db8b4b499e81cae600dac88a7b8f6d9a55b91bb6b0727c91493071c524"
2699
+ }
2700
+ ]
2701
+ },
2702
+ {
2703
+ "type": "file",
2704
+ "name": "dist/project-skills-root.js.map",
2705
+ "hashes": [
2706
+ {
2707
+ "alg": "SHA-256",
2708
+ "content": "5c375be964336c926c53298f1230bd1a65c4bd02228b9d7d44bd1d12a0d57827"
2709
+ }
2710
+ ]
2711
+ },
2592
2712
  {
2593
2713
  "type": "file",
2594
2714
  "name": "dist/project-skills.d.ts",
@@ -4235,7 +4355,7 @@
4235
4355
  "hashes": [
4236
4356
  {
4237
4357
  "alg": "SHA-256",
4238
- "content": "4bafc3c274ab27172d39d875b1fac8c0d6738f6efa48d7aca38cfda724cb774a"
4358
+ "content": "97bea125865758822edd100aac5bcee5a82b8ab8a6a872ff891fc5897685e9d4"
4239
4359
  }
4240
4360
  ]
4241
4361
  },
@@ -4245,7 +4365,7 @@
4245
4365
  "hashes": [
4246
4366
  {
4247
4367
  "alg": "SHA-256",
4248
- "content": "d19593282cef07ecb069e9ae08fbe36b8d235d0df58624cfc34a22f5746cbb4e"
4368
+ "content": "711d7708988abc2c9cf3fb4c29d0b22717d839630a6fc90862d1f12d9c36b090"
4249
4369
  }
4250
4370
  ]
4251
4371
  },
@@ -4255,7 +4375,7 @@
4255
4375
  "hashes": [
4256
4376
  {
4257
4377
  "alg": "SHA-256",
4258
- "content": "d3751463c0987bb9b3440d00222218cb2096a1423725bb75b317402e61598264"
4378
+ "content": "9fdd461b079011b92606be5f7007dd188a1942d07d3bf3e3e1ea624006036a13"
4259
4379
  }
4260
4380
  ]
4261
4381
  },
@@ -4265,7 +4385,7 @@
4265
4385
  "hashes": [
4266
4386
  {
4267
4387
  "alg": "SHA-256",
4268
- "content": "c0033e34c031087b0d4ddef067fa0ea9ee39c1f0dff002275a9da68a5c8b7da8"
4388
+ "content": "06a6f1bea3207ee78f79d8198c90145f1049bba13306bc76515731757645f53f"
4269
4389
  }
4270
4390
  ]
4271
4391
  },
@@ -4435,7 +4555,7 @@
4435
4555
  "hashes": [
4436
4556
  {
4437
4557
  "alg": "SHA-256",
4438
- "content": "6a9112fca371bc26cb1b752fc55422a9e614a5358c42486c57d44a48abc16a76"
4558
+ "content": "fcb5e9df9919234bb7645c10611cf925eef9901559a9e716a51f5cba2350f80a"
4439
4559
  }
4440
4560
  ]
4441
4561
  },
@@ -4475,7 +4595,7 @@
4475
4595
  "hashes": [
4476
4596
  {
4477
4597
  "alg": "SHA-256",
4478
- "content": "0f53c094a555fd8204102bc303757eb92f61e7dc284cf15b8e9cb2fc776c62bb"
4598
+ "content": "f7a778034f98933d2b423d251ccb945b34b984328f1b19017503a670c6ce4e7a"
4479
4599
  }
4480
4600
  ]
4481
4601
  },
@@ -4805,7 +4925,7 @@
4805
4925
  "hashes": [
4806
4926
  {
4807
4927
  "alg": "SHA-256",
4808
- "content": "4a2d4c4c9c952521e0265fc62a01de3a7cd277c1c9eab8be252532bb72d0ae96"
4928
+ "content": "d7dcf5340f1a08744ccf362605d4ea6d019e911bc7b436cde236221adfb3ed35"
4809
4929
  }
4810
4930
  ]
4811
4931
  },
@@ -4855,7 +4975,7 @@
4855
4975
  "hashes": [
4856
4976
  {
4857
4977
  "alg": "SHA-256",
4858
- "content": "83eec3204bcb0b2216bf2c1962e9bae99850e47ebc2fa6a51b6bf43037dc55b5"
4978
+ "content": "90152128cdfc920f0546819c0986ce4c4423252ee241d51297cfd5f942508e81"
4859
4979
  }
4860
4980
  ]
4861
4981
  },
@@ -4865,7 +4985,7 @@
4865
4985
  "hashes": [
4866
4986
  {
4867
4987
  "alg": "SHA-256",
4868
- "content": "041fea2a00543016e0d2d9c5fc45df0df3bd97744c1705f95f6bb73725f03aee"
4988
+ "content": "5548fba2761d7172437dc5ffdacf25ec58009afd98e32c04df396245363e65f4"
4869
4989
  }
4870
4990
  ]
4871
4991
  },
@@ -4879,6 +4999,26 @@
4879
4999
  }
4880
5000
  ]
4881
5001
  },
5002
+ {
5003
+ "type": "file",
5004
+ "name": "src/lesson-bandit.ts",
5005
+ "hashes": [
5006
+ {
5007
+ "alg": "SHA-256",
5008
+ "content": "115b8af8d91fbaaec5ba10f9f28a05db01682e1a81b2af64f6d6004723f1b5ea"
5009
+ }
5010
+ ]
5011
+ },
5012
+ {
5013
+ "type": "file",
5014
+ "name": "src/lesson-payoff.ts",
5015
+ "hashes": [
5016
+ {
5017
+ "alg": "SHA-256",
5018
+ "content": "5d0fff0bcc03b0bc52460bf4a2d1d247607c35650582693344c8b3168188ed75"
5019
+ }
5020
+ ]
5021
+ },
4882
5022
  {
4883
5023
  "type": "file",
4884
5024
  "name": "src/loop-blobs.generated.ts",
@@ -5055,7 +5195,7 @@
5055
5195
  "hashes": [
5056
5196
  {
5057
5197
  "alg": "SHA-256",
5058
- "content": "9dbc7e3c2746fae37fb481fc153244106071a6da47948e6a7ee6c287f2249416"
5198
+ "content": "947a7504ce220bbdcf19972c4dca63840435dcddcb3185c553fbc39a686f9b81"
5059
5199
  }
5060
5200
  ]
5061
5201
  },
@@ -5079,6 +5219,16 @@
5079
5219
  }
5080
5220
  ]
5081
5221
  },
5222
+ {
5223
+ "type": "file",
5224
+ "name": "src/project-skills-root.ts",
5225
+ "hashes": [
5226
+ {
5227
+ "alg": "SHA-256",
5228
+ "content": "608b7ce670ce9fa02b115ded4652337ae4b7db6972ede743b7b25e0c18b07cd0"
5229
+ }
5230
+ ]
5231
+ },
5082
5232
  {
5083
5233
  "type": "file",
5084
5234
  "name": "src/project-skills.ts",
@@ -5485,7 +5635,7 @@
5485
5635
  "hashes": [
5486
5636
  {
5487
5637
  "alg": "SHA-256",
5488
- "content": "b26ad5393ef0aa234ad0c0405a8f47c2e316b3523def8ec074d0460703c031ad"
5638
+ "content": "b1d89b496596be3d788fcb12e84a92716af4b2ee8199e6cc7bebee35e7f66b18"
5489
5639
  }
5490
5640
  ]
5491
5641
  },
@@ -26,6 +26,17 @@ export interface AmendmentRow {
26
26
  export type AmendmentVerdict =
27
27
  | 'resolved'
28
28
  | 'placeholder'
29
+ /**
30
+ * The plan RETRACTED this amendment and named its successor. A first-class outcome, never a
31
+ * failure: a plan is allowed to change its mind, and until 2026-08-25 this checker had no concept
32
+ * of it at all (`grep superseded` over this file returned nothing), so a legitimately retracted
33
+ * amendment read as `unnamed` and failed the run. C6 has accepted the form since it was written —
34
+ * this is the half of the contract that was missing here.
35
+ *
36
+ * Honest limit, stated in ADR-001: nothing verifies that the named successor EXISTS, or that the
37
+ * retraction was justified. Refusing retraction outright is what produced the false failures.
38
+ */
39
+ | 'superseded'
29
40
  | 'unnamed'
30
41
  | 'no-file-named'
31
42
  | 'file-missing'
@@ -94,7 +105,11 @@ export function normalizeTestId(s: string): string {
94
105
  * `features/ha-consilium/03.5_ideation_report.md` — is deliberately NOT a row: counting a legend as
95
106
  * an amendment would open this feature by falsely accusing a feature that did nothing wrong.
96
107
  */
97
- const ROW_START = /^(?:[-*]\s+\*{0,2}AM-(\d+)|\|\s*\*{0,2}AM-(\d+))/gm;
108
+ // The bullet is OPTIONAL, and `AM-CP-N` is a row like any other. MEASURED 2026-08-25: requiring a
109
+ // bullet drops 104 of the corpus's 347 real amendment rows out of the check entirely, and a
110
+ // bullet-less row made this tool return `not-established` — which the pipeline's own gate text calls
111
+ // "NEVER a pass". C6 has always treated the bullet as optional; this is that half of the contract.
112
+ const ROW_START = /^(?:[-*|]\s*)?\*{0,2}AM-(?:CP-)?(\d+)/gm;
98
113
 
99
114
  /** The `## Amendments` section body, or null when the document has none (acid case A5). */
100
115
  export function amendmentSection(md: string): string | null {
@@ -131,10 +146,15 @@ export function parseAmendments(md: string): AmendmentRow[] {
131
146
  return rows;
132
147
  }
133
148
 
149
+ /** `superseded by AM-N` / `AM-CP-N` — the retraction form C6 has always accepted. */
150
+ const SUPERSEDED = /superseded by AM-(?:CP-)?\d+/i;
151
+
134
152
  /** `→ test \`a\`` and the two-id shape `→ tests \`a\` and \`b\`` — both are in the corpus. */
135
153
  function extractTestIds(raw: string): string[] {
136
154
  const out: string[] = [];
137
- const re = /→\s*tests?\s+`([^`]+)`(?:\s*(?:and|и)\s*`([^`]+)`)?/g;
155
+ // Both arrows. C6 accepted `->` from the start and this file only accepted `→`, so an ASCII row
156
+ // read as `unnamed` here while passing there — an accident of two authors, not a decision.
157
+ const re = /(?:\u2192|->)\s*tests?\s+`([^`]+)`(?:\s*(?:and|и)\s*`([^`]+)`)?/g;
138
158
  for (let m = re.exec(raw); m !== null; m = re.exec(raw)) {
139
159
  if (m[1]) out.push(m[1].trim());
140
160
  if (m[2]) out.push(m[2].trim());
@@ -148,7 +168,7 @@ function extractTestIds(raw: string): string[] {
148
168
  * successive shell-written extractors returned 108, 111 and 13 rows over the identical corpus.
149
169
  */
150
170
  function extractFile(raw: string): string | null {
151
- const m = /→\s*tests?\s+`[^`]+`(?:\s*(?:and|и)\s*`[^`]+`)?[\s\S]{0,40}?\bin\s+`([^`]+)`/.exec(raw);
171
+ const m = /(?:\u2192|->)\s*tests?\s+`[^`]+`(?:\s*(?:and|и)\s*`[^`]+`)?[\s\S]{0,40}?\bin\s+`([^`]+)`/.exec(raw);
152
172
  return m && m[1] ? m[1].trim() : null;
153
173
  }
154
174
 
@@ -158,6 +178,12 @@ export function resolveAmendments(
158
178
  ): AmendmentResolution[] {
159
179
  const out: AmendmentResolution[] = [];
160
180
  for (const row of rows) {
181
+ // A retraction is checked BEFORE the missing-pointer branch: a row that says it was superseded
182
+ // is not a row that forgot its test.
183
+ if (SUPERSEDED.test(row.raw)) {
184
+ out.push({ id: row.id, testId: null, file: row.file, verdict: 'superseded', detail: 'the plan retracted this amendment and named its successor' });
185
+ continue;
186
+ }
161
187
  if (row.testIds.length === 0) {
162
188
  out.push({
163
189
  id: row.id,
@@ -219,6 +245,7 @@ function resolveOne(
219
245
  const ZERO_COUNTS: Record<AmendmentVerdict, number> = {
220
246
  resolved: 0,
221
247
  placeholder: 0,
248
+ superseded: 0,
222
249
  unnamed: 0,
223
250
  'no-file-named': 0,
224
251
  'file-missing': 0,
@@ -282,7 +309,10 @@ export function decideAmendmentOutcome(input: {
282
309
  );
283
310
  }
284
311
  for (const r of input.resolutions) {
285
- if (r.verdict !== 'resolved') reasons.push(`${r.id} ${r.verdict}: ${r.detail}`);
312
+ // `superseded` is an OUTCOME, not a defect: the plan retracted the amendment and said so. It is
313
+ // reported in the counts and never becomes a reason, which is the whole point — refusing
314
+ // retraction is what produced the false failures this change removes.
315
+ if (r.verdict !== 'resolved' && r.verdict !== 'superseded') reasons.push(`${r.id} → ${r.verdict}: ${r.detail}`);
286
316
  }
287
317
  return { outcome: reasons.length > 0 ? 'fail' : 'pass', exit: reasons.length > 0 ? 1 : 0, reasons, counts };
288
318
  }