@maycombhq/atticus 2.0.0-beta.2 → 2.0.0-beta.21

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 (273) hide show
  1. package/dist/bin.js +8 -4
  2. package/dist/chunk-265LWMOA.js +91 -0
  3. package/dist/chunk-26WBY34Y.js +37 -0
  4. package/dist/{chunk-UBBC2XSG.js → chunk-26Z7OGQW.js} +518 -93
  5. package/dist/chunk-2D7PWSOK.js +172 -0
  6. package/dist/{chunk-JCZIKA4C.js → chunk-2HH3UCZM.js} +4 -4
  7. package/dist/{chunk-GDLULHTC.js → chunk-2HTEMYTB.js} +12 -26
  8. package/dist/chunk-2UCRFXFZ.js +130 -0
  9. package/dist/{chunk-MVZVGYXH.js → chunk-2V2ZPQQU.js} +81 -13
  10. package/dist/{chunk-BOHJZTEQ.js → chunk-36RY7ZXM.js} +130 -71
  11. package/dist/{chunk-I3E7CX4H.js → chunk-37WE3LS2.js} +3 -3
  12. package/dist/{chunk-IPKHE5D6.js → chunk-3AQ2R5NL.js} +1520 -871
  13. package/dist/chunk-3G6S7LAA.js +43 -0
  14. package/dist/chunk-3J5I7ZOU.js +58 -0
  15. package/dist/{chunk-65NYPGRC.js → chunk-3LZ6P5EP.js} +1 -1
  16. package/dist/chunk-3SSTNB4E.js +191 -0
  17. package/dist/chunk-3TD6S4TC.js +49 -0
  18. package/dist/{chunk-3C7EYRFZ.js → chunk-3UTYPHN3.js} +1 -1
  19. package/dist/{chunk-G2B4ZQGH.js → chunk-3WON4G3M.js} +2 -2
  20. package/dist/{chunk-S3QNRWYR.js → chunk-42EPP7OB.js} +12 -12
  21. package/dist/chunk-455SYIIE.js +113 -0
  22. package/dist/{chunk-YISXLPHN.js → chunk-4B6BT75O.js} +166 -23
  23. package/dist/{chunk-C6EKFH7J.js → chunk-4CLK2RJO.js} +7 -7
  24. package/dist/chunk-4CYTJ5TZ.js +38 -0
  25. package/dist/{chunk-EYWIDJFU.js → chunk-4D62IZII.js} +5 -5
  26. package/dist/chunk-4FOAYLI4.js +328 -0
  27. package/dist/{chunk-7JUKDRSZ.js → chunk-4KNOJC6J.js} +294 -215
  28. package/dist/{chunk-YMZ3TNYB.js → chunk-4PYC2UGC.js} +2 -2
  29. package/dist/{chunk-27NKUS3X.js → chunk-4SLBCEPD.js} +2104 -726
  30. package/dist/chunk-4TKVU2I2.js +122 -0
  31. package/dist/{chunk-RUVFXE2L.js → chunk-4WXRPQDE.js} +448 -47
  32. package/dist/{chunk-7ZUIMTOU.js → chunk-5CMPVC3N.js} +24 -24
  33. package/dist/chunk-5G7ILBUG.js +66 -0
  34. package/dist/{chunk-HFQCFSJR.js → chunk-5PV7S2ZP.js} +3 -3
  35. package/dist/{chunk-FITWGOJ2.js → chunk-5QUOPNLN.js} +4 -4
  36. package/dist/{chunk-Z6LF7HQN.js → chunk-5TDRBOAV.js} +5 -5
  37. package/dist/{chunk-T6AIP7H5.js → chunk-5WERBKLE.js} +199 -63
  38. package/dist/{chunk-XPCM366L.js → chunk-62DLJSLV.js} +8 -8
  39. package/dist/{chunk-L24C55VN.js → chunk-64AADMTW.js} +99 -25
  40. package/dist/{chunk-K65BJIMT.js → chunk-67BP7HXL.js} +17 -17
  41. package/dist/chunk-6DQYZU2W.js +379 -0
  42. package/dist/{chunk-EDS2L2LD.js → chunk-6EXDI5GI.js} +52 -26
  43. package/dist/chunk-6FNAKCET.js +38 -0
  44. package/dist/{chunk-6IU67AEK.js → chunk-75ASLHBT.js} +21 -15
  45. package/dist/{chunk-A3GY6SOA.js → chunk-75ZOZFGH.js} +18 -18
  46. package/dist/{chunk-MGYZM27B.js → chunk-77O633L5.js} +49 -23
  47. package/dist/{chunk-GQ4N4WKF.js → chunk-7AB6OWTV.js} +3 -3
  48. package/dist/{chunk-M766ZJ6W.js → chunk-7CZHUZBL.js} +25 -25
  49. package/dist/{chunk-A7UPUQFY.js → chunk-7FHNFCHK.js} +643 -124
  50. package/dist/chunk-7FUIVIBG.js +415 -0
  51. package/dist/{chunk-6QSERWXH.js → chunk-7QPCGTPS.js} +21 -21
  52. package/dist/{chunk-LR3R6Z2A.js → chunk-A2G72UI4.js} +7 -7
  53. package/dist/{chunk-I4JRCD6M.js → chunk-AE4P57KK.js} +23 -17
  54. package/dist/{chunk-AVJDSJ2F.js → chunk-AHW3RY3X.js} +7 -7
  55. package/dist/chunk-AM6FP6JW.js +43 -0
  56. package/dist/{chunk-CSZ4C5N6.js → chunk-AOCWFA7T.js} +93 -10
  57. package/dist/{chunk-EPTBZ3GP.js → chunk-API5TOUB.js} +1 -1
  58. package/dist/{chunk-652QWTLZ.js → chunk-AZDITBCT.js} +3 -3
  59. package/dist/{chunk-DPUYDDQG.js → chunk-BA2HUMDN.js} +25 -3
  60. package/dist/chunk-BA3U7ALS.js +99 -0
  61. package/dist/{chunk-HVUPKCGJ.js → chunk-BC6KKZ67.js} +5 -5
  62. package/dist/{chunk-CKSITVS4.js → chunk-BEPCKDCP.js} +2554 -722
  63. package/dist/{chunk-3ALD2W2A.js → chunk-BPPU3PW7.js} +4 -4
  64. package/dist/{chunk-QRAOANID.js → chunk-BVWWPBKD.js} +21 -21
  65. package/dist/{chunk-ZDPAS56H.js → chunk-BXBCMGIQ.js} +7 -1
  66. package/dist/chunk-BXZ4PKIT.js +233 -0
  67. package/dist/chunk-C7CEK3KW.js +247 -0
  68. package/dist/chunk-CFH3QH26.js +29 -0
  69. package/dist/chunk-CG6CULP6.js +170 -0
  70. package/dist/chunk-CLD4RVTA.js +45 -0
  71. package/dist/{chunk-DKJA76CJ.js → chunk-CNPY4NTZ.js} +13 -13
  72. package/dist/chunk-CNU5Q2D5.js +575 -0
  73. package/dist/{chunk-T2UYZSCQ.js → chunk-COYN3UAN.js} +126 -23
  74. package/dist/{chunk-23W7VWKR.js → chunk-CPK7QSBG.js} +1360 -113
  75. package/dist/{chunk-4AK7IBVP.js → chunk-D2WSW4GU.js} +1 -1
  76. package/dist/{chunk-ABWHYWNI.js → chunk-D57MFJPP.js} +3 -3
  77. package/dist/chunk-D5KV5PSK.js +45 -0
  78. package/dist/chunk-D5MASS4I.js +48 -0
  79. package/dist/{chunk-7EOBHUMC.js → chunk-DCWN3HFV.js} +2 -2
  80. package/dist/{chunk-QSXK2RGH.js → chunk-DDJPM5YX.js} +2 -2
  81. package/dist/chunk-DN4A2Q2O.js +57 -0
  82. package/dist/{chunk-IHMLFRVV.js → chunk-DUPZPDCJ.js} +58 -16
  83. package/dist/{chunk-PRPPGYZG.js → chunk-E2VXBSIR.js} +4 -4
  84. package/dist/chunk-E57AOFYN.js +32 -0
  85. package/dist/{chunk-UGLN7QHV.js → chunk-ECLXZWAG.js} +12 -12
  86. package/dist/{chunk-5WG5YP4T.js → chunk-EDZ45WIR.js} +14 -14
  87. package/dist/chunk-EFCQSMXB.js +37 -0
  88. package/dist/{chunk-2ANOROX3.js → chunk-EZIN5E5B.js} +8 -8
  89. package/dist/{chunk-BWZ77RQT.js → chunk-F6H2RJ3N.js} +1 -1
  90. package/dist/{chunk-OLQJTJJU.js → chunk-FAJDKNSD.js} +7 -3
  91. package/dist/chunk-FGAGWYZB.js +47 -0
  92. package/dist/{chunk-4WBVUHXN.js → chunk-FLVZFTLQ.js} +18 -18
  93. package/dist/chunk-FQ6WH6PB.js +140 -0
  94. package/dist/{chunk-T6XQL73F.js → chunk-FRHD22WM.js} +61 -23
  95. package/dist/{chunk-XAKWMCXI.js → chunk-FVMPFCDS.js} +4 -4
  96. package/dist/{chunk-B2WLAWNJ.js → chunk-FY3QIRTL.js} +3 -3
  97. package/dist/{chunk-CPA6HPVR.js → chunk-FYBF5MB2.js} +15 -11
  98. package/dist/{chunk-V2YTAIQO.js → chunk-G5YJBNDZ.js} +21 -6
  99. package/dist/chunk-G6IQYM25.js +339 -0
  100. package/dist/chunk-G6X4YL4D.js +161 -0
  101. package/dist/{chunk-SJRGMG6A.js → chunk-GC2VK3JT.js} +25 -25
  102. package/dist/{chunk-SP2I63OO.js → chunk-GCS3FZOB.js} +77 -3
  103. package/dist/{chunk-6TACQN3N.js → chunk-GDZB57IU.js} +5 -5
  104. package/dist/chunk-GIFMBCTW.js +221 -0
  105. package/dist/{chunk-YY6ZQQBP.js → chunk-GK4PYVEC.js} +18 -8
  106. package/dist/{chunk-TDD55CJH.js → chunk-GNWAOVFQ.js} +6 -5
  107. package/dist/chunk-GS76RXQE.js +226 -0
  108. package/dist/{chunk-YYQN46FY.js → chunk-GSGIZ2OO.js} +23 -23
  109. package/dist/chunk-GUYL7RMK.js +60 -0
  110. package/dist/chunk-GX74YWR7.js +321 -0
  111. package/dist/chunk-HE3HRDNZ.js +122 -0
  112. package/dist/{chunk-AIOQPLA5.js → chunk-HGHRSF3E.js} +30 -12
  113. package/dist/{chunk-2RMYG36Q.js → chunk-HK3VOHIE.js} +198 -336
  114. package/dist/{chunk-QZSX3F7C.js → chunk-HS4BGB4G.js} +24 -22
  115. package/dist/{chunk-XY3P7JW7.js → chunk-HSZMPH5T.js} +834 -149
  116. package/dist/{chunk-L6SGQIR3.js → chunk-HWD4JPU7.js} +4 -2
  117. package/dist/{chunk-PCVDV3UZ.js → chunk-HXXP2NTE.js} +6 -6
  118. package/dist/{chunk-AA6YULYB.js → chunk-I2A3Z5AK.js} +7 -7
  119. package/dist/{chunk-N7IXEHK3.js → chunk-ICHDSWEY.js} +7 -7
  120. package/dist/chunk-IFFRGC3N.js +31 -0
  121. package/dist/{chunk-4BN53TG3.js → chunk-IFHDV6KQ.js} +31 -23
  122. package/dist/chunk-J2O4LFVI.js +80 -0
  123. package/dist/chunk-J5AAZ6OJ.js +161 -0
  124. package/dist/{chunk-ZMFPW66A.js → chunk-JAABT3DA.js} +3 -3
  125. package/dist/chunk-JITJP64K.js +34 -0
  126. package/dist/chunk-JKIGL3XQ.js +162 -0
  127. package/dist/chunk-JRVNXLZP.js +615 -0
  128. package/dist/chunk-JRXHON4E.js +41 -0
  129. package/dist/{chunk-DHPACDG7.js → chunk-JS6WMC3J.js} +8 -8
  130. package/dist/chunk-JU4QNJSR.js +62 -0
  131. package/dist/{chunk-PAMPPUR6.js → chunk-JYMIB5XY.js} +1697 -172
  132. package/dist/{chunk-RRTKKSLQ.js → chunk-JYTIHTIK.js} +8 -6
  133. package/dist/{chunk-3HI6Z55Y.js → chunk-K332XW7K.js} +324 -39
  134. package/dist/{chunk-GLUX4EEP.js → chunk-K6JB6XTX.js} +9 -9
  135. package/dist/chunk-KDAHXQIE.js +294 -0
  136. package/dist/chunk-KYZMRSPS.js +93 -0
  137. package/dist/chunk-L4CESDPB.js +22 -0
  138. package/dist/{chunk-NXFPS2LR.js → chunk-LEBR5NHW.js} +14 -14
  139. package/dist/chunk-LIJJCBQI.js +223 -0
  140. package/dist/{chunk-DE76JROX.js → chunk-LIRVU3HW.js} +16 -16
  141. package/dist/{chunk-JMSCMUCA.js → chunk-LN77DXBM.js} +145 -21
  142. package/dist/{chunk-JIITQXFB.js → chunk-LNWEWYCM.js} +2969 -788
  143. package/dist/{chunk-TANFV3MZ.js → chunk-LO3BLMVG.js} +3 -3
  144. package/dist/chunk-LPV6T362.js +250 -0
  145. package/dist/{chunk-2VHF7OXM.js → chunk-LQH4P45K.js} +1 -1
  146. package/dist/chunk-LU4MQVAL.js +41 -0
  147. package/dist/chunk-LWDNKE4X.js +273 -0
  148. package/dist/chunk-M4H2UG4R.js +218 -0
  149. package/dist/{chunk-6BVONWJ7.js → chunk-M6D2U3YM.js} +3 -3
  150. package/dist/chunk-MD7KUEJ3.js +514 -0
  151. package/dist/{chunk-66YVAGGM.js → chunk-MMZUN7ZO.js} +20 -20
  152. package/dist/chunk-MZGRDONP.js +916 -0
  153. package/dist/chunk-N3RUGTGV.js +39 -0
  154. package/dist/{chunk-JGZCG5VM.js → chunk-NCB6656Z.js} +7 -7
  155. package/dist/{chunk-4NDAAFQT.js → chunk-NRQ65LTQ.js} +7 -5
  156. package/dist/{chunk-UNM6ZOKP.js → chunk-NTAVOWYD.js} +145 -18
  157. package/dist/{chunk-3USYZGRF.js → chunk-NYOABJNK.js} +36 -27
  158. package/dist/{chunk-WVPJSRRJ.js → chunk-O4IKAIZ2.js} +24 -20
  159. package/dist/{chunk-D3PO4DOZ.js → chunk-ODMBPDDV.js} +51 -14
  160. package/dist/chunk-OKUB6RJA.js +533 -0
  161. package/dist/chunk-OMPENNWY.js +39 -0
  162. package/dist/chunk-OPQZISG3.js +25 -0
  163. package/dist/{chunk-5GGOLAKC.js → chunk-OV57AHCG.js} +26 -26
  164. package/dist/chunk-OZJ3JLYI.js +58 -0
  165. package/dist/{chunk-KEM4SDDP.js → chunk-P2VBXX7N.js} +11 -10
  166. package/dist/{chunk-S2A7YC3Q.js → chunk-PAINMSID.js} +10150 -1720
  167. package/dist/chunk-PKJAV25S.js +43 -0
  168. package/dist/{chunk-EBEW3XXQ.js → chunk-PNQLCRSS.js} +4 -4
  169. package/dist/{chunk-WY6PP6AA.js → chunk-PQH56YF6.js} +37 -5
  170. package/dist/chunk-PRTBPXYA.js +50 -0
  171. package/dist/{chunk-YEDDOYSC.js → chunk-PRW3HXM3.js} +2 -2
  172. package/dist/chunk-PRZ7KMWL.js +42 -0
  173. package/dist/{chunk-6M5NK3K3.js → chunk-PTQ3ZALZ.js} +42 -4
  174. package/dist/{chunk-5GDRCDQB.js → chunk-PUEWDYGP.js} +2 -2
  175. package/dist/chunk-Q26LDIUV.js +236 -0
  176. package/dist/{chunk-CR3MTH32.js → chunk-Q46QDDMF.js} +77 -7
  177. package/dist/chunk-QBNWF5ZU.js +19 -0
  178. package/dist/chunk-QE527XRY.js +342 -0
  179. package/dist/{chunk-CNUKCS2T.js → chunk-QHJJMZLX.js} +1518 -54
  180. package/dist/chunk-QJCJOMW3.js +425 -0
  181. package/dist/{chunk-VYDBJ73M.js → chunk-QKMRFNMA.js} +15 -15
  182. package/dist/chunk-QOOEYDNJ.js +317 -0
  183. package/dist/chunk-QSIDVFB7.js +45 -0
  184. package/dist/{chunk-R77KLRB3.js → chunk-RA33EYS4.js} +19 -18
  185. package/dist/{chunk-DFBCSHVT.js → chunk-RALY3E5U.js} +4 -4
  186. package/dist/{chunk-ZCJDOK2S.js → chunk-S2RY3BOD.js} +35 -21
  187. package/dist/chunk-S5LSDXV4.js +40 -0
  188. package/dist/chunk-SB5GRUFM.js +54 -0
  189. package/dist/chunk-SH27FYPF.js +150 -0
  190. package/dist/chunk-T74WQQGS.js +40 -0
  191. package/dist/{chunk-O3WI5KWW.js → chunk-TGVVUKTG.js} +2 -2
  192. package/dist/chunk-THN26IEF.js +48 -0
  193. package/dist/chunk-TJH2EUAZ.js +47 -0
  194. package/dist/{chunk-ZNCEKR4J.js → chunk-TQ4TG57V.js} +12 -8
  195. package/dist/{chunk-7FBGJFEE.js → chunk-TQTRWENN.js} +12 -12
  196. package/dist/{chunk-TYAID7B7.js → chunk-TSM6T6GQ.js} +23 -23
  197. package/dist/{chunk-DPZHZQKE.js → chunk-TW3KOSQK.js} +43 -10
  198. package/dist/{chunk-MC3H7736.js → chunk-TWQRPM76.js} +37 -4
  199. package/dist/chunk-TYD6I4CZ.js +109 -0
  200. package/dist/chunk-U3NBK4EU.js +420 -0
  201. package/dist/{chunk-6JCPI55B.js → chunk-UDXWIPCB.js} +47 -7
  202. package/dist/{chunk-MMOSZPWJ.js → chunk-UEVZZZU2.js} +4 -4
  203. package/dist/{chunk-JBTK5OP2.js → chunk-UF4UHCIG.js} +2 -2
  204. package/dist/{chunk-6JUBZBMW.js → chunk-UFE36WJH.js} +4 -4
  205. package/dist/{chunk-ONLS5QA5.js → chunk-URIKUID7.js} +12 -12
  206. package/dist/chunk-UYLBRRFK.js +1106 -0
  207. package/dist/chunk-UZACEG2C.js +515 -0
  208. package/dist/{chunk-7SW2QWLU.js → chunk-VAMHOHUU.js} +12 -12
  209. package/dist/{chunk-RZPYKDWS.js → chunk-VUVGX5L2.js} +1 -1
  210. package/dist/{chunk-Q4D5X7QB.js → chunk-VYOCPTUB.js} +44 -24
  211. package/dist/{chunk-CAQZUNOH.js → chunk-WAZEXEJH.js} +567 -3
  212. package/dist/chunk-WCEF7H6L.js +221 -0
  213. package/dist/{chunk-2DIQQJCB.js → chunk-WEOMJHPV.js} +12 -12
  214. package/dist/{chunk-FHH4I4ZV.js → chunk-WFU77T3A.js} +12 -6
  215. package/dist/chunk-WIWTJMMR.js +292 -0
  216. package/dist/{chunk-2BFCZ3RK.js → chunk-WNTIOBOG.js} +18 -18
  217. package/dist/{chunk-7WD63HU2.js → chunk-X2CUXTWU.js} +6 -6
  218. package/dist/chunk-X7EMBM5X.js +34 -0
  219. package/dist/chunk-XEQCQO66.js +33 -0
  220. package/dist/{chunk-F7HYOUFF.js → chunk-XG4WJHLQ.js} +20 -4
  221. package/dist/{chunk-EFHQ3TWP.js → chunk-XOL3GFW2.js} +171 -31
  222. package/dist/{chunk-NE2W3OO7.js → chunk-XQ3YZ4QW.js} +22 -22
  223. package/dist/{chunk-CEXSU4S6.js → chunk-Y6K3CJBU.js} +723 -85
  224. package/dist/{chunk-4RS5KZQD.js → chunk-YAH5IQAL.js} +5 -5
  225. package/dist/{chunk-64EQYWCA.js → chunk-YBOVNMHC.js} +51 -14
  226. package/dist/chunk-YF5DZCPN.js +1212 -0
  227. package/dist/chunk-YIGBJNH4.js +37 -0
  228. package/dist/{chunk-BKVWTZ6A.js → chunk-YJ3TBOTK.js} +25 -25
  229. package/dist/{chunk-Q5AMFEWD.js → chunk-YKTE2RU3.js} +2 -2
  230. package/dist/{chunk-7EKXJZ2Y.js → chunk-YO2PKTXT.js} +296 -37
  231. package/dist/{chunk-6J5OKA4Y.js → chunk-YTTNTQOX.js} +15 -15
  232. package/dist/{chunk-OT2O76OS.js → chunk-YWAKDNMH.js} +183 -33
  233. package/dist/{chunk-R6XF6UR3.js → chunk-YZDZOEV4.js} +4 -4
  234. package/dist/chunk-Z3QFH7YG.js +17 -0
  235. package/dist/{chunk-W5BVQF44.js → chunk-Z6VLC5X4.js} +17 -17
  236. package/dist/{chunk-HLJAXMM4.js → chunk-ZFQMMU5Y.js} +2 -2
  237. package/dist/{chunk-W3BQAZ3Q.js → chunk-ZKYRDV7A.js} +12 -12
  238. package/dist/{chunk-ZMAINWBW.js → chunk-ZLS6PU2O.js} +3 -3
  239. package/dist/{chunk-ZVM6AKKM.js → chunk-ZOSD4FXV.js} +3 -3
  240. package/dist/chunk-ZPDDEVQX.js +47 -0
  241. package/dist/{chunk-TXLH6WHQ.js → chunk-ZQLRCA2V.js} +11 -11
  242. package/dist/{chunk-HITVBIJS.js → chunk-ZX7235KR.js} +128 -54
  243. package/dist/{chunk-GT4I4ZWM.js → chunk-ZZFHLRQW.js} +18 -16
  244. package/dist/files.json +636 -364
  245. package/dist/packages/naysayer/constitution/constitution.yaml +19 -0
  246. package/dist/packages/sdk/npm/index.js +5614 -2343
  247. package/dist/packages/ui/dist/assets/{elk-api-tma0MCuh.js → elk-api-CowTnhEJ.js} +2 -2
  248. package/dist/packages/ui/dist/assets/index-Dw20IRhQ.css +1 -0
  249. package/dist/packages/ui/dist/assets/index-z2wv0d5d.js +47 -0
  250. package/dist/packages/ui/dist/index.html +2 -2
  251. package/package.json +4 -4
  252. package/dist/chunk-2BF2EYJV.js +0 -174
  253. package/dist/chunk-42EVSKME.js +0 -37
  254. package/dist/chunk-4BKGMUIK.js +0 -53
  255. package/dist/chunk-5KLGBXG5.js +0 -48
  256. package/dist/chunk-6BNC6EQ4.js +0 -41
  257. package/dist/chunk-6D2CQ5II.js +0 -41
  258. package/dist/chunk-7AVHLZGD.js +0 -45
  259. package/dist/chunk-D46WUV3T.js +0 -33
  260. package/dist/chunk-E36QOJMD.js +0 -47
  261. package/dist/chunk-FQXYPF7E.js +0 -147
  262. package/dist/chunk-GBRFVT63.js +0 -45
  263. package/dist/chunk-ICY36XCH.js +0 -34
  264. package/dist/chunk-J4K3KVLD.js +0 -131
  265. package/dist/chunk-JZU3H6UQ.js +0 -54
  266. package/dist/chunk-NN2ZQEB4.js +0 -38
  267. package/dist/chunk-PCOCACY3.js +0 -385
  268. package/dist/chunk-RTEYOSJY.js +0 -29
  269. package/dist/chunk-RVH5SUW5.js +0 -69
  270. package/dist/chunk-VN3DP4LQ.js +0 -43
  271. package/dist/chunk-XPTOBS2D.js +0 -48
  272. package/dist/packages/ui/dist/assets/index-B54fm9FQ.js +0 -29
  273. package/dist/packages/ui/dist/assets/index-DD_hufQz.css +0 -1
@@ -0,0 +1,172 @@
1
+ import { createRequire as __atticusCreateRequire } from "node:module";
2
+ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
+ var require = __atticusCreateRequire(import.meta.url);
4
+ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
+ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ targetFlowsOf
8
+ } from "./chunk-GNWAOVFQ.js";
9
+ import "./chunk-5QUOPNLN.js";
10
+ import {
11
+ MAX_CHAIN_DEPTH,
12
+ changeImpact,
13
+ loadEstate
14
+ } from "./chunk-BEPCKDCP.js";
15
+ import "./chunk-HWD4JPU7.js";
16
+ import "./chunk-5WERBKLE.js";
17
+ import "./chunk-K332XW7K.js";
18
+ import "./chunk-HSZMPH5T.js";
19
+ import "./chunk-D2WSW4GU.js";
20
+ import "./chunk-4KNOJC6J.js";
21
+ import "./chunk-4SLBCEPD.js";
22
+ import "./chunk-64AADMTW.js";
23
+ import "./chunk-JYMIB5XY.js";
24
+ import "./chunk-CPK7QSBG.js";
25
+ import "./chunk-YO2PKTXT.js";
26
+ import "./chunk-TWQRPM76.js";
27
+ import {
28
+ loadRepos
29
+ } from "./chunk-XOL3GFW2.js";
30
+ import "./chunk-QHJJMZLX.js";
31
+ import "./chunk-7AB6OWTV.js";
32
+ import {
33
+ readTeams
34
+ } from "./chunk-PAINMSID.js";
35
+ import "./chunk-ODMBPDDV.js";
36
+ import "./chunk-TV45EUGM.js";
37
+
38
+ // packages/cli/dist/change-impact.js
39
+ var CHANGE_IMPACT_WORDS = {
40
+ usage: "Name the change: atticus change impact <change> [--json]",
41
+ noChange: (id) => `There is no change ${id}: atticus change list shows them.`,
42
+ noTargets: (id) => `${id} has no target flows yet, so there is nothing to weigh: run atticus change architecture ${id} first.`,
43
+ nothing: (id) => `${id}'s target flows break nothing the map shows: no entry or table they change loses a field, a caller or its type.`,
44
+ counts: (id, i) => `${id}: ${n(i.breaks, "caller")} ${i.breaks === 1 ? "breaks" : "break"}, ${n(i.mayBreak, "caller")} may break (link guessed), ${n(i.routes, "gateway route")} to update.`,
45
+ upstream: (u) => `Up the chain (who calls the callers): ${u.breaks} more ${u.breaks === 1 ? "breaks" : "break"}, ${u.mayBreak} may break (resting on a guessed link).`,
46
+ hopBreaks: (depth, via, who, owner, where) => `${" ".repeat(depth)}Breaks via ${via}: ${who}, owned by ${owner}${where ? `; ${where}` : ""}.`,
47
+ hopMayBreak: (depth, via, who, owner, rests, where) => `${" ".repeat(depth)}May break via ${via} (${rests}): ${who}, owned by ${owner}${where ? `; ${where}` : ""}. Not counted as a break.`,
48
+ restsOwn: (how) => `its own link guessed ${how}`,
49
+ restsOn: (who, how) => `rests on ${who}'s link, guessed ${how}`,
50
+ capped: (depth) => ` The walk up the chain stops at ${depth} hops; more callers are above the last ones listed.`,
51
+ item: (name, where, owner, why) => `${name} (${where}), owned by ${owner}: ${why.join("; ")}.`,
52
+ gone: (fields) => ` Stops crossing: ${fields.join(", ")}.`,
53
+ required: (fields) => ` Callers must now send: ${fields.join(", ")}.`,
54
+ breaks: (who, owner, where) => ` Breaks: ${who}, owned by ${owner}${where ? `; ${where}` : ""}.`,
55
+ mayBreak: (who, owner, how, where) => ` May break (link guessed ${how}): ${who}, owned by ${owner}${where ? `; ${where}` : ""}. Not counted as a break until someone confirms the link.`,
56
+ confirm: (rule, id) => ` The critic's ${rule} asks the caller's owner to confirm each guessed link: atticus critic ${id}.`,
57
+ nobody: " The map shows nobody calling or using it.",
58
+ route: (id, what, owner, callers) => ` Gateway route to update: ${id}${what}, owned by ${owner}; ${callers.join(", ")} ${callers.length === 1 ? "calls" : "call"} through it.`,
59
+ teams: "Teams to involve:",
60
+ team: (owner, repos) => ` ${owner}: ${repos.join(", ")}`,
61
+ problem: (p) => `Note: ${p}`
62
+ };
63
+ var GUESS_WORDS = {
64
+ "joined-by-path": "by path",
65
+ "joined-by-label": "by a host's first label",
66
+ "joined-by-platform-setting": "by a platform-wide setting",
67
+ "joined-by-folder-name": "by a setting's folder name",
68
+ "joined-despite-conflict": "despite an open host conflict",
69
+ "joined-by-service-name": "by a Service's short name"
70
+ };
71
+ function n(count, what) {
72
+ return `${count} ${what}${count === 1 ? "" : "s"}`;
73
+ }
74
+ function ownerText(o) {
75
+ if ("none" in o)
76
+ return `no team (${o.none})`;
77
+ return o.name ? `${o.team} (${o.name})` : o.team;
78
+ }
79
+ async function changeImpactOf(root, change) {
80
+ const t = await targetFlowsOf(root, change);
81
+ if (!t)
82
+ return void 0;
83
+ const problems = [...t.problems];
84
+ const owners = /* @__PURE__ */ new Map();
85
+ try {
86
+ for (const r of await loadRepos(root))
87
+ owners.set(r.id, r.owner);
88
+ } catch (e) {
89
+ problems.push(`the repo manifests: ${e.message.split("\n")[0]}`);
90
+ }
91
+ const read = await readTeams(root);
92
+ const teams = read.teams;
93
+ if (read.problem)
94
+ problems.push(read.problem);
95
+ const impact = changeImpact(change, t.deltas, await loadEstate(root, t.records), {
96
+ owners,
97
+ teams
98
+ });
99
+ return { ...impact, flows: t.deltas.length, problems };
100
+ }
101
+ function impactLines(i) {
102
+ const W = CHANGE_IMPACT_WORDS;
103
+ if (!i.flows)
104
+ return [W.noTargets(i.change), ...i.problems.map(W.problem)];
105
+ if (!i.items.length)
106
+ return [W.nothing(i.change), ...i.problems.map(W.problem)];
107
+ const out = [W.counts(i.change, i)];
108
+ if (i.upstream && (i.upstream.breaks || i.upstream.mayBreak))
109
+ out.push(W.upstream(i.upstream));
110
+ for (const it of i.items) {
111
+ out.push(W.item(it.name, it.kind === "table" ? `a table ${it.flow} writes` : it.flow, ownerText(it.owner), it.why));
112
+ if (it.fields.gone.length)
113
+ out.push(W.gone(it.fields.gone));
114
+ if (it.fields.required.length)
115
+ out.push(W.required(it.fields.required));
116
+ if (!it.callers.length)
117
+ out.push(W.nobody);
118
+ for (const c of it.callers) {
119
+ const where = [
120
+ ...c.at.map((a) => `at ${a}`),
121
+ ...c.flows.map((f) => `its flow ${f}`),
122
+ ...c.routes.map((r) => `through ${r}`)
123
+ ].join(", ");
124
+ out.push(c.verdict === "breaks" ? W.breaks(c.component, ownerText(c.owner), where) : W.mayBreak(c.component, ownerText(c.owner), GUESS_WORDS[c.guessed ?? ""] ?? "", where));
125
+ }
126
+ for (const h of it.chain ?? []) {
127
+ const via = `${h.via.join(", ")}${h.entries.length ? ` (${h.entries.join(", ")})` : ""}`;
128
+ const where = [
129
+ ...h.at.map((a) => `at ${a}`),
130
+ ...h.flows.map((f) => `its flow ${f}`),
131
+ ...h.routes.map((r) => `through ${r}`)
132
+ ].join(", ");
133
+ const how = GUESS_WORDS[h.guessed ?? ""] ?? "";
134
+ out.push(h.verdict === "breaks" ? W.hopBreaks(h.depth, via, h.component, ownerText(h.owner), where) : W.hopMayBreak(h.depth, via, h.component, ownerText(h.owner), h.restsOn ? W.restsOn(h.restsOn, how) : W.restsOwn(how), where));
135
+ }
136
+ if (it.capped)
137
+ out.push(W.capped(MAX_CHAIN_DEPTH));
138
+ if ([...it.callers, ...it.chain ?? []].some((c) => c.verdict === "may-break"))
139
+ out.push(W.confirm(i.rule, i.change));
140
+ for (const r of it.routes) {
141
+ const what = [r.proxy, r.basepath, r.repo ? `in ${r.repo}` : void 0].filter(Boolean).join(", ");
142
+ out.push(W.route(r.id, what ? ` (${what})` : "", ownerText(r.owner), r.callers));
143
+ }
144
+ }
145
+ out.push(W.teams, ...i.owners.map((o) => W.team(ownerText(o.owner), o.repos)));
146
+ out.push(...i.problems.map(W.problem));
147
+ return out;
148
+ }
149
+ async function changeImpactCli(root, change, o, io) {
150
+ if (!change) {
151
+ io.err(CHANGE_IMPACT_WORDS.usage);
152
+ return 2;
153
+ }
154
+ const i = await changeImpactOf(root, change);
155
+ if (!i) {
156
+ io.err(CHANGE_IMPACT_WORDS.noChange(change));
157
+ return 1;
158
+ }
159
+ if (o.json)
160
+ io.out(JSON.stringify(i, null, 2));
161
+ else
162
+ for (const l of impactLines(i))
163
+ io.out(l);
164
+ return 0;
165
+ }
166
+ export {
167
+ CHANGE_IMPACT_WORDS,
168
+ changeImpactCli,
169
+ changeImpactOf,
170
+ impactLines,
171
+ ownerText
172
+ };
@@ -9,8 +9,8 @@ import {
9
9
  probeFileOf,
10
10
  probeTier,
11
11
  writeProbe
12
- } from "./chunk-IPKHE5D6.js";
13
- import "./chunk-EFHQ3TWP.js";
12
+ } from "./chunk-3AQ2R5NL.js";
13
+ import "./chunk-XOL3GFW2.js";
14
14
  import {
15
15
  AssistantId,
16
16
  external_exports,
@@ -18,8 +18,8 @@ import {
18
18
  orgPackDirOf,
19
19
  runsDirOf,
20
20
  runsRelOf
21
- } from "./chunk-S2A7YC3Q.js";
22
- import "./chunk-D3PO4DOZ.js";
21
+ } from "./chunk-PAINMSID.js";
22
+ import "./chunk-ODMBPDDV.js";
23
23
  import "./chunk-TV45EUGM.js";
24
24
 
25
25
  // packages/cli/dist/probe-commands.js
@@ -10,17 +10,17 @@ import {
10
10
  parseHeader,
11
11
  renderAssistantFiles,
12
12
  writeAssistantFiles
13
- } from "./chunk-IPKHE5D6.js";
13
+ } from "./chunk-3AQ2R5NL.js";
14
14
  import {
15
15
  BUILT_IN_CHECKS,
16
16
  STARTER_REVIEW_PATH,
17
17
  starterReviewText
18
- } from "./chunk-3HI6Z55Y.js";
18
+ } from "./chunk-K332XW7K.js";
19
19
  import {
20
20
  changeFootprint,
21
21
  changeStore,
22
22
  loadChangeContext
23
- } from "./chunk-XY3P7JW7.js";
23
+ } from "./chunk-HSZMPH5T.js";
24
24
  import {
25
25
  ORG_FLOW,
26
26
  createOpenSpec,
@@ -28,23 +28,23 @@ import {
28
28
  storeIdOf,
29
29
  writeOrgFlowSchema,
30
30
  writeStoreMarker
31
- } from "./chunk-4AK7IBVP.js";
31
+ } from "./chunk-D2WSW4GU.js";
32
32
  import {
33
33
  readCatalog
34
- } from "./chunk-27NKUS3X.js";
34
+ } from "./chunk-4SLBCEPD.js";
35
35
  import {
36
36
  componentExtractor
37
- } from "./chunk-MC3H7736.js";
37
+ } from "./chunk-TWQRPM76.js";
38
38
  import {
39
39
  createGit,
40
40
  ensureGitignore
41
- } from "./chunk-EFHQ3TWP.js";
41
+ } from "./chunk-XOL3GFW2.js";
42
42
  import {
43
43
  DEFAULT_IGNORES,
44
44
  fsRepo,
45
45
  memoryRepo,
46
46
  runExtractor
47
- } from "./chunk-GQ4N4WKF.js";
47
+ } from "./chunk-7AB6OWTV.js";
48
48
  import {
49
49
  ChangeLifecycle,
50
50
  ChecklistPack,
@@ -61,10 +61,10 @@ import {
61
61
  Sources,
62
62
  loadOrgPack,
63
63
  require_dist
64
- } from "./chunk-S2A7YC3Q.js";
64
+ } from "./chunk-PAINMSID.js";
65
65
  import {
66
66
  LOCAL_ONLY
67
- } from "./chunk-D3PO4DOZ.js";
67
+ } from "./chunk-ODMBPDDV.js";
68
68
  import {
69
69
  __toESM
70
70
  } from "./chunk-TV45EUGM.js";
@@ -235,19 +235,6 @@ function pathsFor(root, adopted, layout) {
235
235
  inputsDir: adopted ? join2(root, ATTICUS_DIR, "inputs") : join2(root, "inputs")
236
236
  };
237
237
  }
238
- function inPlacePath(url) {
239
- if (url === ".")
240
- return ".";
241
- if (url.startsWith("./")) {
242
- const rest = url.slice(2).replace(/\/+$/, "");
243
- if (rest === "")
244
- return ".";
245
- if (rest.split("/").includes(".."))
246
- return void 0;
247
- return rest;
248
- }
249
- return void 0;
250
- }
251
238
 
252
239
  // packages/adopt/dist/detect.js
253
240
  var REPO_TYPES = [
@@ -755,7 +742,7 @@ var yaml = (data, header) => `${header ? `# ${header}
755
742
  var DEFAULT_HEADER = "Built-in default written out by Atticus. Change it through a pull request; delete the file to go back to the default.";
756
743
  var CHECKLISTS_README = "# Checklists\n\nCritic rule packs (contract C3), one YAML file per pack. The constitution is built in; packs here add organisation rules.\n";
757
744
  var STARTER_CHECKLISTS_README = `${CHECKLISTS_README}
758
- \`review.yaml\` is the starter review (ADR 0120): AI rules the critic's lenses apply to every draft, judging its meaning against the estate and the brief, and two code checks (a call's timeout, a store write's rollback step). It is this organisation's configuration, not the constitution: change, waive or retire its rules, or delete one, through a pull request. Delete the file to turn the starter review off; \`atticus upgrade\` won't add it back.
745
+ \`review.yaml\` is the starter review (ADR 0120): AI rules the critic's lenses apply to every draft, judging its meaning against the estate and the brief, and three code checks (a call's timeout, a store write's rollback step, a story criterion from an attached note quoting the note's line). It is this organisation's configuration, not the constitution: change, waive or retire its rules, or delete one, through a pull request. Delete the file to turn the starter review off; \`atticus upgrade\` won't add it back.
759
746
  `;
760
747
  var FOLDER_READMES = [
761
748
  [
@@ -1210,7 +1197,7 @@ async function unadopt(path) {
1210
1197
  if (now === before[f])
1211
1198
  continue;
1212
1199
  const text2 = await readText(full) ?? "";
1213
- const back = withoutSection(text2).find((t) => sha256(t) === before[f]);
1200
+ const back = withoutSection(text2).flatMap((t) => [t, t.replace(/\r?\n/g, "\r\n")]).find((t) => sha256(t) === before[f]);
1214
1201
  if (back !== void 0) {
1215
1202
  await writeFile4(full, back, "utf8");
1216
1203
  res.restored.push(f);
@@ -2868,7 +2855,6 @@ export {
2868
2855
  resolveMetarepo,
2869
2856
  orgPackDirOf,
2870
2857
  pathsFor,
2871
- inPlacePath,
2872
2858
  REPO_TYPES,
2873
2859
  typeFromDescription,
2874
2860
  typeFromFrameworks,
@@ -0,0 +1,130 @@
1
+ import { createRequire as __atticusCreateRequire } from "node:module";
2
+ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
+ var require = __atticusCreateRequire(import.meta.url);
4
+ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
+ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ estateFacts,
8
+ measureLinks,
9
+ parseLinkReference
10
+ } from "./chunk-4SLBCEPD.js";
11
+ import "./chunk-64AADMTW.js";
12
+ import "./chunk-JYMIB5XY.js";
13
+ import "./chunk-CPK7QSBG.js";
14
+ import "./chunk-YO2PKTXT.js";
15
+ import "./chunk-TWQRPM76.js";
16
+ import "./chunk-XOL3GFW2.js";
17
+ import "./chunk-QHJJMZLX.js";
18
+ import "./chunk-7AB6OWTV.js";
19
+ import {
20
+ loadOrgPack,
21
+ orgPackDirOf
22
+ } from "./chunk-PAINMSID.js";
23
+ import "./chunk-ODMBPDDV.js";
24
+ import "./chunk-TV45EUGM.js";
25
+
26
+ // packages/cli/dist/measure-commands.js
27
+ import { readFile } from "node:fs/promises";
28
+ import { isAbsolute, resolve } from "node:path";
29
+ var MEASURE_WORDS = {
30
+ usage: "Usage: atticus join measure <reference.yaml> [--json] (docs/guide/measure.md)",
31
+ noFile: (file) => `There is no reference file at ${file}. List a few known repos' entries and calls in it (docs/guide/measure.md), then run atticus join measure again.`,
32
+ badFile: (file) => `${file} isn't a reference Atticus can read:`,
33
+ nothing: (file) => `${file} lists no calls or entries, so there is nothing to measure. List a few known repos' entries and calls (docs/guide/measure.md).`,
34
+ head: (file, m, repos) => `Measured against ${file}${m.estate ? ` (${m.estate})` : ""}: ${plural(repos, "repo")}, ${plural(m.reading.entries.want, "entry", "entries")} and ${plural(m.reading.calls.want, "call")} listed.`,
35
+ reading: (m) => `Reading: ${m.reading.entries.found} of ${plural(m.reading.entries.want, "entry", "entries")} and ${m.reading.calls.found} of ${plural(m.reading.calls.want, "call")} are in the facts${pct(m.reading.entries.found + m.reading.calls.found, m.reading.entries.want + m.reading.calls.want)}.`,
36
+ precision: (m) => m.links.precision === null ? "Join precision: no listed call is joined to a repo yet." : `Join precision ${m.links.precision}: ${m.links.right} of the ${plural(m.links.joined, "listed call")} joined to a repo reach the one you named.`,
37
+ recall: (m) => m.links.recall === null ? "Join recall: no listed call should reach a repo of the estate." : `Join recall ${m.links.recall}: ${m.links.right} of the ${plural(m.links.want, "call")} that should reach a repo of the estate do.`,
38
+ rest: (m) => [
39
+ `${m.links.asked} asked`,
40
+ `${m.links.inferred.joined} guessed (${m.links.inferred.right} right)`,
41
+ `${m.links.outside.right} of ${m.links.outside.want} outside right`,
42
+ ...m.links.none.want ? [`${m.links.none.right} of ${m.links.none.want} "none" right`] : [],
43
+ `${m.links.unlinked} unlinked`,
44
+ ...m.links.missed ? [`${m.links.missed} with no entry serving them`] : [],
45
+ `${m.links.notRead} not read`
46
+ ].join(", ") + ".",
47
+ calls: "Each listed call:",
48
+ missed: "Listed but not in the facts (read the repo again, or check the line and path you wrote):",
49
+ readOnly: "Nothing was written."
50
+ };
51
+ var plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
52
+ var pct = (a, b) => b ? ` (${Math.round(a / b * 100)}%)` : "";
53
+ var wantText = (w) => "repo" in w ? w.repo : "outside" in w ? `outside ${w.outside}` : "none";
54
+ function gotText(g) {
55
+ switch (g.kind) {
56
+ case "joined":
57
+ return `${g.repo} ${g.entry}${g.via?.length ? ` via ${g.via.join(", ")}` : ""}${g.inferred ? ` (a guess: ${g.inferred})` : ""}`;
58
+ case "outside":
59
+ return `outside ${g.system}`;
60
+ case "asked":
61
+ return `asked (${g.reason}): atticus questions`;
62
+ case "missed":
63
+ return `named ${g.target}, which serves nothing like it`;
64
+ case "unlinked":
65
+ return "nothing";
66
+ case "not-read":
67
+ return "not in the facts";
68
+ }
69
+ }
70
+ async function joinMeasure(root, file, o, io) {
71
+ if (!file) {
72
+ io.err(MEASURE_WORDS.usage);
73
+ return 2;
74
+ }
75
+ const path = isAbsolute(file) ? file : resolve(root, file);
76
+ const text = await readFile(path, "utf8").catch(() => void 0);
77
+ if (text === void 0) {
78
+ io.err(MEASURE_WORDS.noFile(file));
79
+ return 2;
80
+ }
81
+ const parsed = parseLinkReference(text);
82
+ if (!parsed.ok) {
83
+ io.err(MEASURE_WORDS.badFile(file));
84
+ for (const i of parsed.issues)
85
+ io.err(` ${i}`);
86
+ return 2;
87
+ }
88
+ const ref = parsed.reference;
89
+ if (!ref.repos.some((r) => r.calls.length || r.entries.length)) {
90
+ io.err(MEASURE_WORDS.nothing(file));
91
+ return 2;
92
+ }
93
+ const op = await loadOrgPack(orgPackDirOf(root));
94
+ const estate = await estateFacts(root, op, "");
95
+ const m = measureLinks({ op, repos: estate.repos, targets: estate.targets, reference: ref });
96
+ const notes = [...estate.notes, ...m.notes];
97
+ if (o.json) {
98
+ io.out(JSON.stringify({ reference: file, ...m, notes }, null, 2));
99
+ return 0;
100
+ }
101
+ io.out(MEASURE_WORDS.head(file, m, ref.repos.length));
102
+ io.out(MEASURE_WORDS.reading(m));
103
+ io.out(MEASURE_WORDS.precision(m));
104
+ io.out(MEASURE_WORDS.recall(m));
105
+ io.out(MEASURE_WORDS.rest(m));
106
+ if (m.calls.length) {
107
+ io.out("");
108
+ io.out(MEASURE_WORDS.calls);
109
+ for (const c of m.calls)
110
+ io.out(` ${c.right ? "ok" : "--"} ${c.repo} ${c.call}: wanted ${wantText(c.want)}, got ${gotText(c.got)}`);
111
+ }
112
+ if (m.reading.missed.length) {
113
+ io.out("");
114
+ io.out(MEASURE_WORDS.missed);
115
+ for (const x of m.reading.missed)
116
+ io.out(` ${x}`);
117
+ }
118
+ if (notes.length) {
119
+ io.out("");
120
+ for (const n of notes)
121
+ io.out(n);
122
+ }
123
+ io.out("");
124
+ io.out(MEASURE_WORDS.readOnly);
125
+ return 0;
126
+ }
127
+ export {
128
+ MEASURE_WORDS,
129
+ joinMeasure
130
+ };
@@ -5,17 +5,17 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
5
  var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
6
  import {
7
7
  changeStore
8
- } from "./chunk-XY3P7JW7.js";
8
+ } from "./chunk-HSZMPH5T.js";
9
9
  import {
10
10
  ManualNotifier,
11
11
  fileStepStore
12
- } from "./chunk-7JUKDRSZ.js";
12
+ } from "./chunk-4KNOJC6J.js";
13
13
  import {
14
14
  readCatalog
15
- } from "./chunk-27NKUS3X.js";
15
+ } from "./chunk-4SLBCEPD.js";
16
16
  import {
17
17
  readServiceRequestExports
18
- } from "./chunk-23W7VWKR.js";
18
+ } from "./chunk-CPK7QSBG.js";
19
19
  import {
20
20
  Initiative,
21
21
  IsoDate,
@@ -32,10 +32,11 @@ import {
32
32
  serializeRecord,
33
33
  stateDirOf,
34
34
  toCanonicalYaml
35
- } from "./chunk-S2A7YC3Q.js";
35
+ } from "./chunk-PAINMSID.js";
36
36
  import {
37
- SCHEMA_VERSION
38
- } from "./chunk-D3PO4DOZ.js";
37
+ SCHEMA_VERSION,
38
+ renameRetrying
39
+ } from "./chunk-ODMBPDDV.js";
39
40
  import {
40
41
  __toESM
41
42
  } from "./chunk-TV45EUGM.js";
@@ -717,7 +718,7 @@ var stepsOf = (j) => j.phases.flatMap((p) => p.steps.map((s) => ({ ...s, phase:
717
718
 
718
719
  // packages/initiatives/dist/store.js
719
720
  var import_yaml2 = __toESM(require_dist(), 1);
720
- import { mkdir, readFile as readFile2, rename, rm, writeFile } from "node:fs/promises";
721
+ import { mkdir, readFile as readFile2, rm, writeFile } from "node:fs/promises";
721
722
  import { dirname, join as join2 } from "node:path";
722
723
  var curatedDirOf = (root) => join2(catalogDirOf(root), "curated");
723
724
  var initiativesDirOf = (root) => join2(stateDirOf(root), "initiatives");
@@ -736,7 +737,7 @@ async function writeAtomic(path, text) {
736
737
  const tmp = `${path}.tmp`;
737
738
  try {
738
739
  await writeFile(tmp, text, "utf8");
739
- await rename(tmp, path);
740
+ await renameRetrying(tmp, path);
740
741
  } catch (e) {
741
742
  await rm(tmp, { force: true });
742
743
  throw e;
@@ -854,6 +855,44 @@ async function readPlan(root, id) {
854
855
  throw new InitiativeError(`initiatives/${id}/plan.yaml: ${r.error.issues.map((i) => `${i.path.join(".")} ${i.message}`).join("; ")}`);
855
856
  return r.data;
856
857
  }
858
+ var CommitmentNote = external_exports.strictObject({
859
+ at: IsoDateTime,
860
+ by: external_exports.string().min(1),
861
+ commitment: RecordId,
862
+ status: external_exports.enum(["open", "at-risk", "done", "slipped"]),
863
+ note: external_exports.string().min(1)
864
+ });
865
+ var NotesFile = external_exports.strictObject({
866
+ schemaVersion: external_exports.literal(1),
867
+ initiative: RecordId,
868
+ notes: external_exports.array(CommitmentNote).default([])
869
+ });
870
+ var notesPath = (root, id) => join2(initiativeDir(root, id), "notes.yaml");
871
+ async function readNotes(root, id) {
872
+ let text;
873
+ try {
874
+ text = await readFile2(notesPath(root, id), "utf8");
875
+ } catch {
876
+ return [];
877
+ }
878
+ const r = NotesFile.safeParse((0, import_yaml2.parse)(text));
879
+ if (!r.success)
880
+ throw new InitiativeError(`initiatives/${id}/notes.yaml: ${r.error.issues.map((i) => `${i.path.join(".")} ${i.message}`).join("; ")}`);
881
+ return r.data.notes;
882
+ }
883
+ async function appendNote(root, id, note) {
884
+ const notes = [...await readNotes(root, id), CommitmentNote.parse(note)];
885
+ await writeAtomic(notesPath(root, id), toCanonicalYaml(NotesFile.parse({ schemaVersion: 1, initiative: id, notes }), [
886
+ "schemaVersion",
887
+ "initiative",
888
+ "at",
889
+ "by",
890
+ "commitment",
891
+ "status",
892
+ "note"
893
+ ]));
894
+ return `initiatives/${id}/notes.yaml`;
895
+ }
857
896
  var slugOf = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 80).replace(/-+$/, "");
858
897
 
859
898
  // packages/initiatives/dist/dates.js
@@ -1285,6 +1324,9 @@ async function initiativeStatus(root, id, o = {}) {
1285
1324
  }
1286
1325
  const commitmentRecords = view.all("Commitment").filter((c) => c.initiative === id);
1287
1326
  const recordOf = new Map(commitmentRecords.map((c) => [c.id, c]));
1327
+ const lastNote = /* @__PURE__ */ new Map();
1328
+ for (const n of await readNotes(root, id))
1329
+ lastNote.set(n.commitment, { at: n.at, by: n.by, status: n.status, note: n.note });
1288
1330
  const items = [];
1289
1331
  let projectedRelease;
1290
1332
  if (plan) {
@@ -1331,9 +1373,14 @@ async function initiativeStatus(root, id, o = {}) {
1331
1373
  const d = done.get(i.key);
1332
1374
  const finish = ef.get(i.key);
1333
1375
  const float = d ? 0 : workingDays(finish, lf.get(i.key));
1334
- const status2 = d ? "done" : today > i.due ? "slipped" : finish > i.due ? "at-risk" : "open";
1376
+ let status2 = d ? "done" : today > i.due ? "slipped" : finish > i.due ? "at-risk" : "open";
1377
+ const said = i.commitment ? commitmentRecords.find((c) => c.id === i.commitment)?.commitmentStatus : void 0;
1378
+ const recorded = said === "at-risk" || said === "slipped" ? said : void 0;
1379
+ const rank = { slipped: 3, "at-risk": 2 };
1380
+ if (!d && recorded && rank[recorded] > (rank[status2] ?? 0))
1381
+ status2 = recorded;
1335
1382
  const lateBefore = i.after.filter((a) => !done.get(a) && ef.get(a) > byKey.get(a).due);
1336
- const why = status2 === "done" ? "Done." : status2 === "slipped" ? `Due ${i.due} and not done.` : status2 === "at-risk" ? `Projected to finish ${finish}, after its due date ${i.due}${lateBefore.length ? `, because ${lateBefore.join(", ")} ${lateBefore.length === 1 ? "is" : "are"} late` : ""}.` : `On plan: due ${i.due}.`;
1383
+ const why = status2 === "done" ? "Done." : recorded && status2 === recorded ? recorded === "slipped" ? "Recorded as slipped." : "Recorded as at risk." : status2 === "slipped" ? `Due ${i.due} and not done.` : status2 === "at-risk" ? `Projected to finish ${finish}, after its due date ${i.due}${lateBefore.length ? `, because ${lateBefore.join(", ")} ${lateBefore.length === 1 ? "is" : "are"} late` : ""}.` : `On plan: due ${i.due}.`;
1337
1384
  items.push({
1338
1385
  key: i.key,
1339
1386
  kind: i.kind,
@@ -1377,6 +1424,13 @@ async function initiativeStatus(root, id, o = {}) {
1377
1424
  [status2, why] = ["at-risk", `Needed by ${c.neededBy}: two working days or less left.`];
1378
1425
  else
1379
1426
  [status2, why] = ["open", `Needed by ${c.neededBy}.`];
1427
+ const rank = { slipped: 3, "at-risk": 2 };
1428
+ const said = c.commitmentStatus;
1429
+ if ((said === "at-risk" || said === "slipped") && rank[said] > (rank[status2] ?? 0))
1430
+ [status2, why] = [
1431
+ said,
1432
+ said === "slipped" ? "Recorded as slipped." : "Recorded as at risk."
1433
+ ];
1380
1434
  return {
1381
1435
  id: c.id,
1382
1436
  what: c.what,
@@ -1384,7 +1438,8 @@ async function initiativeStatus(root, id, o = {}) {
1384
1438
  neededBy: c.neededBy,
1385
1439
  recorded: c.commitmentStatus,
1386
1440
  status: status2,
1387
- why
1441
+ why,
1442
+ ...lastNote.get(c.id) ? { note: lastNote.get(c.id) } : {}
1388
1443
  };
1389
1444
  });
1390
1445
  const changes = initiative.changes.map((c) => {
@@ -1442,7 +1497,19 @@ async function recordCommitment(root, id, o) {
1442
1497
  const by = o.by.replace(/^@/, "");
1443
1498
  const evidence = c.evidence.some((e) => e.source === "manual" && e.by === by) ? c.evidence : [...c.evidence, ...manualEvidence(by)];
1444
1499
  const updated = { ...c, commitmentStatus: o.status, evidence };
1445
- return { commitment: updated, written: await writeCurated(root, updated) };
1500
+ const written = await writeCurated(root, updated);
1501
+ const note = o.note?.trim();
1502
+ if (!note)
1503
+ return { commitment: updated, written };
1504
+ const at = (o.now ?? /* @__PURE__ */ new Date()).toISOString().replace(/\.\d{3}Z$/, "Z");
1505
+ const notes = await appendNote(root, c.initiative, {
1506
+ at,
1507
+ by,
1508
+ commitment: id,
1509
+ status: o.status,
1510
+ note
1511
+ });
1512
+ return { commitment: updated, written, notes };
1446
1513
  }
1447
1514
 
1448
1515
  // packages/initiatives/dist/card.js
@@ -1599,6 +1666,7 @@ export {
1599
1666
  workingDays,
1600
1667
  laterOf,
1601
1668
  JOURNEYS,
1669
+ initiativesDirOf,
1602
1670
  InitiativeError,
1603
1671
  readView,
1604
1672
  readPlan,