@maycombhq/atticus 2.0.0-beta.25 → 2.0.0-beta.27

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 (326) hide show
  1. package/dist/bin.js +3 -3
  2. package/dist/chunk-22A2K555.js +653 -0
  3. package/dist/{chunk-UTZMF5CV.js → chunk-23TTURB2.js} +1 -1
  4. package/dist/{chunk-F36DIKJ3.js → chunk-2666BPJE.js} +19 -19
  5. package/dist/{chunk-E2OP6JNF.js → chunk-2ALBHI4Q.js} +28 -27
  6. package/dist/chunk-2ANBMA74.js +107 -0
  7. package/dist/{chunk-S7UQFI4B.js → chunk-2HCW6HXK.js} +27 -26
  8. package/dist/{chunk-HV3KPEFH.js → chunk-2ISR6MWD.js} +15 -15
  9. package/dist/{chunk-QQD25YNF.js → chunk-2MRYL45Z.js} +50 -9
  10. package/dist/{chunk-KN4UQJ7R.js → chunk-3GNUHLAN.js} +4 -4
  11. package/dist/chunk-3GURU22K.js +44 -0
  12. package/dist/{chunk-4U3JLIRC.js → chunk-3M3MDBOG.js} +1 -1
  13. package/dist/{chunk-DJ4C5ELF.js → chunk-3PBIZBWN.js} +1 -1
  14. package/dist/{chunk-XUCHGEF5.js → chunk-3PWXVBCB.js} +83 -40
  15. package/dist/chunk-3W2QX6TT.js +58 -0
  16. package/dist/{chunk-CPFAWYVC.js → chunk-3Z7ATALI.js} +5 -5
  17. package/dist/{chunk-ZGULQAPZ.js → chunk-44SWXDD7.js} +8 -5
  18. package/dist/{chunk-LGE6H4UP.js → chunk-46N5O5H7.js} +5 -5
  19. package/dist/{chunk-SRLUADSY.js → chunk-4D4DNTFE.js} +4 -4
  20. package/dist/{chunk-DMQJDHXG.js → chunk-4EAT7HOX.js} +7 -5
  21. package/dist/{chunk-DPZD7WVX.js → chunk-4FLIW5PJ.js} +4 -4
  22. package/dist/{chunk-SGTAQNOP.js → chunk-4LWA5VMJ.js} +52 -37
  23. package/dist/{chunk-D45K3XKK.js → chunk-4ODVHNA6.js} +18 -17
  24. package/dist/{chunk-7QZDGM5V.js → chunk-4POSAXNC.js} +6 -6
  25. package/dist/{chunk-A3J75BO2.js → chunk-4PQ4KDOA.js} +16 -15
  26. package/dist/{chunk-2Y5FJQSF.js → chunk-4UVTNHA6.js} +1 -1
  27. package/dist/{chunk-KVVNAUIG.js → chunk-4XK3HLOH.js} +1 -0
  28. package/dist/{chunk-V7T6URII.js → chunk-523NRKHF.js} +4 -4
  29. package/dist/{chunk-7EAH2MFY.js → chunk-5GCCG3GJ.js} +11 -5
  30. package/dist/{chunk-7U6PBBXG.js → chunk-5XW6RUDV.js} +8 -8
  31. package/dist/{chunk-Y3J365UC.js → chunk-5YEUAZZE.js} +8 -8
  32. package/dist/{chunk-JWLABUXL.js → chunk-62LD7CSY.js} +13 -13
  33. package/dist/{chunk-LOJGNSPA.js → chunk-67Y2J55V.js} +22 -21
  34. package/dist/{chunk-UCKG6UE7.js → chunk-6DSZ4CL7.js} +37 -22
  35. package/dist/{chunk-FNP4M4VL.js → chunk-6G67LSBG.js} +283 -61
  36. package/dist/{chunk-5GLGLWAJ.js → chunk-6OEB4FTC.js} +20 -19
  37. package/dist/{chunk-5RKN5QIX.js → chunk-6OTGCKYH.js} +9 -9
  38. package/dist/{chunk-UI7ID4HG.js → chunk-6XLCMDIP.js} +13 -13
  39. package/dist/chunk-76DZJTU7.js +190 -0
  40. package/dist/chunk-7764GVJK.js +37 -0
  41. package/dist/{chunk-TKCNJJ2S.js → chunk-7BOGXFZ3.js} +11 -11
  42. package/dist/{chunk-Q52KWTG5.js → chunk-7CVHKNAF.js} +16 -15
  43. package/dist/{chunk-XF5UMMQL.js → chunk-7FEIS3KV.js} +25 -24
  44. package/dist/{chunk-UTYL4XVA.js → chunk-7GXM45T5.js} +26 -23
  45. package/dist/{chunk-4PW5SRKJ.js → chunk-7YMAMNMT.js} +17 -16
  46. package/dist/chunk-7YWS47SE.js +56 -0
  47. package/dist/{chunk-LZFKJ2BR.js → chunk-A3LVMCA5.js} +1 -1
  48. package/dist/{chunk-7YFUNWFM.js → chunk-A7ZJKLFC.js} +11 -11
  49. package/dist/chunk-AANQC5QP.js +47 -0
  50. package/dist/{chunk-LP5QGTCR.js → chunk-AIQLTDC3.js} +3 -3
  51. package/dist/{chunk-EPXYFJTY.js → chunk-AKZTCZ6F.js} +4 -4
  52. package/dist/{chunk-5267F4BS.js → chunk-ALCSTVWQ.js} +3 -3
  53. package/dist/{chunk-NMBHFSJQ.js → chunk-ALUHO7SE.js} +26 -25
  54. package/dist/{chunk-3WO7ASU7.js → chunk-AMZ4XMES.js} +8 -8
  55. package/dist/{chunk-JKEUPSCE.js → chunk-AOQG37K4.js} +8 -6
  56. package/dist/{chunk-3NA2VE45.js → chunk-ARXZTHEI.js} +16 -15
  57. package/dist/{chunk-W2W7YCFL.js → chunk-AS4CTARY.js} +16 -15
  58. package/dist/{chunk-7AKJ2XTW.js → chunk-AVUPW23W.js} +18 -17
  59. package/dist/{chunk-CMUJSPP4.js → chunk-B56FCIEJ.js} +12 -12
  60. package/dist/{chunk-K3OIBTCV.js → chunk-BABATPOZ.js} +18 -17
  61. package/dist/{chunk-VAZYNF6I.js → chunk-BIOKDLLX.js} +21 -19
  62. package/dist/{chunk-23QHP4JJ.js → chunk-BUBKKEUV.js} +5 -5
  63. package/dist/{chunk-N3OEBQTA.js → chunk-CDC6VECU.js} +3 -3
  64. package/dist/chunk-CHEFUNZ4.js +425 -0
  65. package/dist/{chunk-MM7YWUBB.js → chunk-CIFR3DPV.js} +6 -6
  66. package/dist/{chunk-JCKKAELC.js → chunk-CLBVKD4P.js} +16 -15
  67. package/dist/{chunk-HHZEXF7V.js → chunk-CLM5Z3R5.js} +5 -5
  68. package/dist/{chunk-M7XNX5IC.js → chunk-CLYV5MB6.js} +9 -9
  69. package/dist/{chunk-SHWHRCMU.js → chunk-CRYIBCGP.js} +37 -19
  70. package/dist/{chunk-6576X5BJ.js → chunk-D3L5SO27.js} +5 -5
  71. package/dist/chunk-DAZM2INZ.js +34 -0
  72. package/dist/{chunk-VBJHIRKV.js → chunk-DF4BXBB2.js} +6 -6
  73. package/dist/{chunk-U4HZ5CXL.js → chunk-E7Q52EOO.js} +11 -11
  74. package/dist/{chunk-MZTU5L6S.js → chunk-EFDUC35B.js} +3 -3
  75. package/dist/{chunk-GIOOA2ZO.js → chunk-EHXEJFHD.js} +5 -5
  76. package/dist/{chunk-M6HI36T3.js → chunk-ELJ5Q4J2.js} +2 -2
  77. package/dist/{chunk-MJAIBPI5.js → chunk-EM6DKBTJ.js} +3 -3
  78. package/dist/{chunk-YGS2YVF2.js → chunk-EMC46SU4.js} +38 -17
  79. package/dist/{chunk-CB6H7MH2.js → chunk-EQEDIWFQ.js} +25 -24
  80. package/dist/chunk-EW574EZI.js +57 -0
  81. package/dist/{chunk-JJEPU4VS.js → chunk-EYINWNXL.js} +5 -5
  82. package/dist/{chunk-MJOIMGS4.js → chunk-EYVYHYCA.js} +8 -8
  83. package/dist/{chunk-WGOQZ4PQ.js → chunk-F66542M6.js} +34 -9
  84. package/dist/{chunk-EUCATH2U.js → chunk-F74OMLNU.js} +6 -6
  85. package/dist/{chunk-G5P7F6RQ.js → chunk-FADIWOA5.js} +3 -3
  86. package/dist/{chunk-JMOZ6K5A.js → chunk-FC3ZVD3O.js} +3 -3
  87. package/dist/{chunk-XXJSGCDO.js → chunk-FG65LXED.js} +8 -8
  88. package/dist/{chunk-5WZV37WS.js → chunk-FKAUBC4Y.js} +8 -8
  89. package/dist/{chunk-WA644MUQ.js → chunk-FM3EEDS2.js} +15 -15
  90. package/dist/{chunk-XZQBFF65.js → chunk-FS4E7F6O.js} +403 -148
  91. package/dist/{chunk-Q6UYUCNS.js → chunk-FSYJPYLE.js} +16 -15
  92. package/dist/{chunk-H7GAPNGQ.js → chunk-G33UIUG3.js} +46 -20
  93. package/dist/{chunk-OEUTV6EL.js → chunk-G3F4BYML.js} +15 -14
  94. package/dist/{chunk-7UYRN4ON.js → chunk-GBJRFFDW.js} +5 -5
  95. package/dist/{chunk-7HW2CMIN.js → chunk-GF6GBHFN.js} +13 -11
  96. package/dist/{chunk-DCPI3ETH.js → chunk-GLHOUT5E.js} +26 -25
  97. package/dist/{chunk-VOBG7BLB.js → chunk-GM6GXO2A.js} +20 -19
  98. package/dist/{chunk-KJPKIU2R.js → chunk-GSJ2RXE7.js} +29 -28
  99. package/dist/{chunk-HU7VXMFV.js → chunk-GT72FDER.js} +6 -6
  100. package/dist/{chunk-SBNBVUOF.js → chunk-GW6ZH77P.js} +37 -36
  101. package/dist/{chunk-6WYOJCB4.js → chunk-GZILYRGC.js} +3 -3
  102. package/dist/{chunk-4SS5ZK47.js → chunk-GZSOZYEP.js} +3 -3
  103. package/dist/{chunk-N6SSI6XO.js → chunk-H25QNDKK.js} +58 -36
  104. package/dist/{chunk-DYVUNT4O.js → chunk-H3RKW4RF.js} +7 -7
  105. package/dist/chunk-H7M7ZH6H.js +52 -0
  106. package/dist/chunk-H7NRWSMP.js +55 -0
  107. package/dist/{chunk-KW4DIXUL.js → chunk-HDWVR5KD.js} +4 -4
  108. package/dist/{chunk-HR34F2AJ.js → chunk-HG24EF5S.js} +16 -15
  109. package/dist/chunk-HPNYSY5M.js +1068 -0
  110. package/dist/{chunk-3VC2XJ53.js → chunk-HUMM4S5I.js} +6 -6
  111. package/dist/{chunk-K373N5U6.js → chunk-HVPS2YCW.js} +11 -11
  112. package/dist/{chunk-IGOE6KPG.js → chunk-I34CXV2C.js} +185 -11
  113. package/dist/{chunk-U7YZ3IRI.js → chunk-I57IH5X6.js} +360 -271
  114. package/dist/{chunk-P56N3NPT.js → chunk-I5X4WU7U.js} +6 -6
  115. package/dist/chunk-IAVVJ34R.js +55 -0
  116. package/dist/chunk-IBJE2E2S.js +51 -0
  117. package/dist/{chunk-EXCXNDTQ.js → chunk-IF3X6FMO.js} +1 -1
  118. package/dist/{chunk-GAVEIYKH.js → chunk-IJHJIL6T.js} +154 -25
  119. package/dist/chunk-IM435QAM.js +72 -0
  120. package/dist/{chunk-7NLYSTEK.js → chunk-IMBJ7WAO.js} +6 -6
  121. package/dist/{chunk-EM7F6XEU.js → chunk-INCFIDCB.js} +2 -2
  122. package/dist/{chunk-AYWJMHSX.js → chunk-IPMPLTEG.js} +3 -3
  123. package/dist/{chunk-PGKCRK77.js → chunk-IPSZDVLI.js} +12 -12
  124. package/dist/{chunk-IMTAHDME.js → chunk-IX2EOYOU.js} +50 -13
  125. package/dist/{chunk-QE444DZ2.js → chunk-IXNMGPF7.js} +61 -28
  126. package/dist/{chunk-NL6GIEJU.js → chunk-J6GO3K7G.js} +19 -18
  127. package/dist/chunk-JBLM6IUA.js +42 -0
  128. package/dist/{chunk-IWQEZFVV.js → chunk-JL2VOYSL.js} +91 -93
  129. package/dist/{chunk-K77ILFUQ.js → chunk-JRXFZB6J.js} +8 -8
  130. package/dist/{chunk-UR6JGVX2.js → chunk-JTOLBS7R.js} +988 -410
  131. package/dist/{chunk-GD6FXN6R.js → chunk-K73BHPTQ.js} +19 -18
  132. package/dist/{chunk-PYVFLITV.js → chunk-KF7KVUNJ.js} +5 -5
  133. package/dist/{chunk-F4WKGX7K.js → chunk-KKUCBKJE.js} +20 -19
  134. package/dist/{chunk-U7F6E5M3.js → chunk-KLFFHBWG.js} +27 -26
  135. package/dist/{chunk-ROVOAF2O.js → chunk-KMYB2XO7.js} +21 -13
  136. package/dist/chunk-KNYQUWFN.js +52 -0
  137. package/dist/{chunk-KFDOL2Y4.js → chunk-KOAJPMU2.js} +31 -20
  138. package/dist/chunk-KRTSE73S.js +55 -0
  139. package/dist/{chunk-IW3QMW3X.js → chunk-L3AM5YRP.js} +28 -9
  140. package/dist/{chunk-334N6EI2.js → chunk-LCIIFAID.js} +22 -21
  141. package/dist/{chunk-DLNQ3HUM.js → chunk-LCQIRCOT.js} +55 -10
  142. package/dist/{chunk-QFOJ3UPU.js → chunk-LFHBAWIM.js} +13 -13
  143. package/dist/chunk-LIHEMWIT.js +39 -0
  144. package/dist/{chunk-T5QYYB5L.js → chunk-LJLYWILK.js} +14 -14
  145. package/dist/{chunk-E7PR4WMM.js → chunk-LNJKDS5C.js} +26 -25
  146. package/dist/{chunk-HHZ2ZKUD.js → chunk-LTHY7E2P.js} +16 -15
  147. package/dist/{chunk-4WIVTPGE.js → chunk-LTVOQJKT.js} +7 -7
  148. package/dist/{chunk-TIOYZDRB.js → chunk-LZO3JABE.js} +6 -6
  149. package/dist/{chunk-PXMV2LLY.js → chunk-M65AZ4ZE.js} +3 -5
  150. package/dist/chunk-MPNTEWNY.js +492 -0
  151. package/dist/chunk-MQGQ3AWK.js +58 -0
  152. package/dist/{chunk-NQLTWGF4.js → chunk-MUXYUIBV.js} +6 -6
  153. package/dist/{chunk-5R3FRI6H.js → chunk-MWRRJDXQ.js} +34 -31
  154. package/dist/{chunk-XY6FVBBV.js → chunk-MZDHFWTN.js} +2 -2
  155. package/dist/chunk-N2XCT5OX.js +68 -0
  156. package/dist/{chunk-C5LX54QK.js → chunk-N3JGYAMD.js} +15 -15
  157. package/dist/{chunk-RL7PETU6.js → chunk-N5DLB74D.js} +367 -71
  158. package/dist/{chunk-MJMEF7SD.js → chunk-NC3Q7RIB.js} +10 -10
  159. package/dist/{chunk-4GWQVT2C.js → chunk-NCNLX4DL.js} +19 -18
  160. package/dist/{chunk-3D74UADA.js → chunk-NGSGJLKW.js} +2 -2
  161. package/dist/{chunk-OOU4N2JQ.js → chunk-NN7K2LLN.js} +25 -24
  162. package/dist/{chunk-ELNIQYLR.js → chunk-NNURP7VO.js} +15 -15
  163. package/dist/chunk-NSQB24WR.js +56 -0
  164. package/dist/{chunk-MWOPED6I.js → chunk-NV5S63YK.js} +7 -7
  165. package/dist/{chunk-CTJHEG6A.js → chunk-NWMFVPEP.js} +2 -0
  166. package/dist/{chunk-7E3G5NCH.js → chunk-NYT6QGZA.js} +22 -18
  167. package/dist/chunk-OB2DAIJX.js +62 -0
  168. package/dist/{chunk-YAUMNRCB.js → chunk-OC3OXDTG.js} +13 -8
  169. package/dist/{chunk-DAHKLVHU.js → chunk-OD6RNYMQ.js} +16 -16
  170. package/dist/{chunk-7FUQAT2R.js → chunk-OFYBRMRG.js} +6 -6
  171. package/dist/chunk-OGTELPDN.js +43 -0
  172. package/dist/{chunk-BS52P2CM.js → chunk-OQ7SBQ2Z.js} +7 -7
  173. package/dist/{chunk-OMSH46JK.js → chunk-OUDGBJC2.js} +16 -9
  174. package/dist/{chunk-USH4VU5D.js → chunk-OUGTAOGA.js} +2 -2
  175. package/dist/chunk-OWP5FCYM.js +60 -0
  176. package/dist/{chunk-YEGGQG5E.js → chunk-P36PTWBM.js} +8 -8
  177. package/dist/{chunk-IKRM64KR.js → chunk-P6Y2J2QY.js} +12 -12
  178. package/dist/{chunk-P4QTTCVK.js → chunk-PDJL2HO5.js} +24 -22
  179. package/dist/{chunk-WDJGJ3HV.js → chunk-PPKH6ULR.js} +152 -20
  180. package/dist/{chunk-5OVSDV77.js → chunk-Q4PFF2ZE.js} +8 -8
  181. package/dist/chunk-Q7EUPQEG.js +5 -0
  182. package/dist/{chunk-YRKAJ42V.js → chunk-QC6GSNIK.js} +7074 -3456
  183. package/dist/chunk-QCRQNYGI.js +211 -0
  184. package/dist/chunk-QDF533AW.js +90 -0
  185. package/dist/chunk-QDGNDNBG.js +50 -0
  186. package/dist/{chunk-2ULVUSIP.js → chunk-QGMD3PYL.js} +31 -24
  187. package/dist/{chunk-QEP4HTJE.js → chunk-QLT3WYTD.js} +6 -6
  188. package/dist/{chunk-GX67TNFA.js → chunk-QNDMAKQS.js} +11 -3
  189. package/dist/{chunk-XM3JE4QY.js → chunk-QNXMVJMA.js} +8 -8
  190. package/dist/{chunk-XP5DF5MC.js → chunk-QPAANKUR.js} +13 -12
  191. package/dist/{chunk-SD3PGZSR.js → chunk-QS4VX3HZ.js} +1 -1
  192. package/dist/{chunk-ZD64ZR64.js → chunk-QSM4K6LI.js} +7 -7
  193. package/dist/{chunk-Z4N7BKLN.js → chunk-QUFZDWPC.js} +8 -8
  194. package/dist/{chunk-ELNLHU7Y.js → chunk-QXXEOH3A.js} +18 -6
  195. package/dist/{chunk-QA4O2GGC.js → chunk-R4TUWD4C.js} +17 -1
  196. package/dist/{chunk-TAIYQDIV.js → chunk-ROI64BAI.js} +22 -21
  197. package/dist/{chunk-NMGFXT4S.js → chunk-RPVL3RTX.js} +19 -18
  198. package/dist/{chunk-62FMA437.js → chunk-RUNHVUCW.js} +16 -15
  199. package/dist/{chunk-I2M7MXSV.js → chunk-RWYPLODE.js} +9 -9
  200. package/dist/{chunk-5K6ZKHZR.js → chunk-RZYRUXSU.js} +4 -4
  201. package/dist/{chunk-TVFADTAT.js → chunk-S6TLXRBR.js} +7 -7
  202. package/dist/{chunk-PCZ4C2V7.js → chunk-SCOP3J6X.js} +7 -7
  203. package/dist/{chunk-JXLUHMTC.js → chunk-SCP24MJX.js} +24 -23
  204. package/dist/{chunk-R6HJ4SDB.js → chunk-SF3HXNXR.js} +6 -6
  205. package/dist/{chunk-7F4GZ7U2.js → chunk-SFCFL7Y5.js} +1 -1
  206. package/dist/{chunk-5RDKQOY3.js → chunk-SHFY73RI.js} +53 -112
  207. package/dist/{chunk-H75SPCAW.js → chunk-SHIARIEZ.js} +20 -19
  208. package/dist/chunk-SMFFUFMN.js +1876 -0
  209. package/dist/{chunk-JQGWP3SC.js → chunk-SVOGRJO6.js} +197 -124
  210. package/dist/chunk-SVZAAOHJ.js +46 -0
  211. package/dist/{chunk-BJDVI5W6.js → chunk-SZOU32VF.js} +21 -20
  212. package/dist/{chunk-MXPKXCGP.js → chunk-T2MN24LZ.js} +1 -1
  213. package/dist/{chunk-A3AADMM2.js → chunk-TD5WWJLN.js} +6 -6
  214. package/dist/{chunk-SXF66YNZ.js → chunk-TFN2N227.js} +6 -6
  215. package/dist/{chunk-RSA5JJMN.js → chunk-TFXNOQEU.js} +28 -27
  216. package/dist/{chunk-BEDZNT62.js → chunk-TMETWJFO.js} +11 -11
  217. package/dist/chunk-TNSAIISO.js +50 -0
  218. package/dist/{chunk-IDTVBZQI.js → chunk-TRJO2I4S.js} +3 -3
  219. package/dist/{chunk-IFDCCCEN.js → chunk-TRSNIJNM.js} +7 -7
  220. package/dist/{chunk-GDGE7ZHC.js → chunk-U3Z2QZE3.js} +6 -6
  221. package/dist/{chunk-GVOQJPKA.js → chunk-U7L3ORPK.js} +22 -21
  222. package/dist/{chunk-5UJ7C7IH.js → chunk-UDM6HGF4.js} +6 -6
  223. package/dist/{chunk-Z3KEX7ON.js → chunk-UDM7LXNJ.js} +7 -7
  224. package/dist/chunk-UDTO3U6E.js +35 -0
  225. package/dist/{chunk-UVKJVTKX.js → chunk-UEUPEUZX.js} +3 -3
  226. package/dist/chunk-UWBODTY7.js +514 -0
  227. package/dist/{chunk-KGT5RIGE.js → chunk-UYYYQTPD.js} +84 -51
  228. package/dist/{chunk-LKRMVWXB.js → chunk-V34N6JAN.js} +32 -31
  229. package/dist/{chunk-RX56MZLX.js → chunk-V3Y5P7OS.js} +24 -23
  230. package/dist/chunk-V6MLVGTP.js +89 -0
  231. package/dist/chunk-VC2XHC7P.js +424 -0
  232. package/dist/{chunk-MM5OAVSW.js → chunk-VCYE4MUD.js} +29 -28
  233. package/dist/{chunk-AGAFNUYZ.js → chunk-VN2VJ6BV.js} +19 -15
  234. package/dist/{chunk-DBVQEPZB.js → chunk-VVLWEM2Y.js} +6 -6
  235. package/dist/{chunk-F56DNMDD.js → chunk-VWCNMDMZ.js} +5 -5
  236. package/dist/{chunk-LNGFTPU7.js → chunk-W2A4NHQD.js} +25 -24
  237. package/dist/{chunk-LQD3R6NZ.js → chunk-W6OY2PMB.js} +10 -10
  238. package/dist/{chunk-IP6TSICI.js → chunk-WC6DHBVG.js} +16 -15
  239. package/dist/{chunk-MELS6T5J.js → chunk-WCA3WIGG.js} +5 -5
  240. package/dist/{chunk-GLISHJ4G.js → chunk-WJWSB65O.js} +1602 -452
  241. package/dist/{chunk-77REYYY5.js → chunk-WNPGLGCJ.js} +5 -5
  242. package/dist/chunk-WTOVWEY3.js +67 -0
  243. package/dist/{chunk-WS7KBKP4.js → chunk-X5B7KYPD.js} +507 -20
  244. package/dist/{chunk-O6DJMDBR.js → chunk-X73WLHSN.js} +7 -7
  245. package/dist/{chunk-YGNQUFVZ.js → chunk-XIIT4PVT.js} +3 -3
  246. package/dist/{chunk-5P4PNGPL.js → chunk-XLTT5QCX.js} +28 -25
  247. package/dist/{chunk-NPZ4KXIV.js → chunk-XMIS25ZJ.js} +21 -20
  248. package/dist/{chunk-NB664KWQ.js → chunk-XPDQ4T6G.js} +27 -26
  249. package/dist/{chunk-EAGSM3XY.js → chunk-XRWUYOX3.js} +138 -22
  250. package/dist/{chunk-2VN4TLGI.js → chunk-XZY4GTCX.js} +14 -9
  251. package/dist/{chunk-QSKY7FE3.js → chunk-Y2TVTI4P.js} +121 -15
  252. package/dist/{chunk-XVQQ3BQS.js → chunk-Y2U4CSCA.js} +28 -27
  253. package/dist/chunk-Y2U63JKE.js +41 -0
  254. package/dist/{chunk-UJ535VWR.js → chunk-Y6S7VCYN.js} +6 -6
  255. package/dist/{chunk-SEBBJQWK.js → chunk-YAPMGK7E.js} +11 -11
  256. package/dist/{chunk-CNF7D3A7.js → chunk-YAPVAYZN.js} +3 -3
  257. package/dist/{chunk-B2U4AOZ5.js → chunk-YCBDNWX3.js} +78 -57
  258. package/dist/{chunk-CGVRLQAY.js → chunk-YIGSUTW2.js} +1329 -92
  259. package/dist/{chunk-J65TN6QU.js → chunk-YJTBE6AJ.js} +5 -5
  260. package/dist/chunk-YQ3IXQIH.js +185 -0
  261. package/dist/{chunk-ZJQ64T6M.js → chunk-YRHKEXTP.js} +11 -11
  262. package/dist/{chunk-MN2XDLDM.js → chunk-YSSFS3YC.js} +17 -17
  263. package/dist/{chunk-BPDS7KUR.js → chunk-YXG2VQJJ.js} +200 -56
  264. package/dist/{chunk-XC5ZDFW7.js → chunk-Z4GLFTEH.js} +8 -8
  265. package/dist/{chunk-7X3WLAKP.js → chunk-Z65FWO6A.js} +157 -89
  266. package/dist/{chunk-OW53P52N.js → chunk-ZDG637ZT.js} +22 -21
  267. package/dist/{chunk-BIQNPWGX.js → chunk-ZIAMPN7N.js} +6 -6
  268. package/dist/chunk-ZIIBQHCX.js +53 -0
  269. package/dist/{chunk-RFQW7XT3.js → chunk-ZJJMYPGZ.js} +57 -27
  270. package/dist/{chunk-Y6KPWRZJ.js → chunk-ZOAX7W5S.js} +11 -11
  271. package/dist/chunk-ZSSR5GGB.js +48 -0
  272. package/dist/files.json +655 -551
  273. package/dist/fixtures/forge/expected/crosscheck.json +726 -0
  274. package/dist/fixtures/forge/slots/README.md +13 -0
  275. package/dist/fixtures/forge/slots/build.json +2686 -0
  276. package/dist/fixtures/forge/slots/crosscheck/forge-ledger.crosscheck.yaml +8 -0
  277. package/dist/fixtures/forge/slots/facts/forge-ledger.jsonl +17 -0
  278. package/dist/fixtures/forge/slots/facts/forge-ledger.meta.json +9 -0
  279. package/dist/fixtures/forge/slots/legacy/joins.json +113 -0
  280. package/dist/fixtures/forge/slots/readers/forge-events.json +306 -0
  281. package/dist/fixtures/forge/slots/readers/forge-gateway.json +238 -0
  282. package/dist/fixtures/forge/slots/readers/forge-infra.json +264 -0
  283. package/dist/fixtures/forge/slots/readers/forge-ledger.json +756 -0
  284. package/dist/fixtures/forge/slots/readers/forge-portal-bff.json +349 -0
  285. package/dist/fixtures/forge/slots/readers/forge-portal-ui.json +214 -0
  286. package/dist/fixtures/forge/slots/readers/forge-reports-job.json +258 -0
  287. package/dist/packages/sdk/npm/index.js +3859 -2939
  288. package/dist/packages/ui/dist/assets/{elk-api-ts8TigYQ.js → elk-api-CPE6PVL8.js} +2 -2
  289. package/dist/packages/ui/dist/assets/index-BYcVqj0l.js +65 -0
  290. package/dist/packages/ui/dist/assets/index-DF52Ejvz.css +1 -0
  291. package/dist/packages/ui/dist/index.html +2 -2
  292. package/package.json +5 -5
  293. package/dist/chunk-24OXGB3P.js +0 -82
  294. package/dist/chunk-2RABF6RT.js +0 -36
  295. package/dist/chunk-5CPZIWIN.js +0 -38
  296. package/dist/chunk-7YSMZEO3.js +0 -55
  297. package/dist/chunk-AENMOZMM.js +0 -42
  298. package/dist/chunk-BDKYHCGI.js +0 -71
  299. package/dist/chunk-BMMTWRWE.js +0 -50
  300. package/dist/chunk-CQRFCWQV.js +0 -45
  301. package/dist/chunk-CVWKS6GO.js +0 -50
  302. package/dist/chunk-D2CGJ7RR.js +0 -46
  303. package/dist/chunk-D7QIZLWB.js +0 -38
  304. package/dist/chunk-DM3H4V2G.js +0 -62
  305. package/dist/chunk-EJGUEUXG.js +0 -51
  306. package/dist/chunk-ELKTDXV3.js +0 -67
  307. package/dist/chunk-EP7ZBZLT.js +0 -170
  308. package/dist/chunk-EXGXCVWC.js +0 -52
  309. package/dist/chunk-FJS2FZFZ.js +0 -41
  310. package/dist/chunk-G3ZFEHCX.js +0 -925
  311. package/dist/chunk-GAU2IFIC.js +0 -33
  312. package/dist/chunk-GPOL5H3B.js +0 -55
  313. package/dist/chunk-HD72AL3L.js +0 -43
  314. package/dist/chunk-K4C2DWOZ.js +0 -232
  315. package/dist/chunk-KY3BUZYI.js +0 -54
  316. package/dist/chunk-LMNCRSER.js +0 -257
  317. package/dist/chunk-LPXH2DA4.js +0 -40
  318. package/dist/chunk-MLUHBVCI.js +0 -45
  319. package/dist/chunk-ONB7M2AF.js +0 -52
  320. package/dist/chunk-QBK33722.js +0 -51
  321. package/dist/chunk-S7I7SLZN.js +0 -59
  322. package/dist/chunk-UCQB6NKS.js +0 -192
  323. package/dist/chunk-UKMA5JFE.js +0 -52
  324. package/dist/chunk-X7QLAUNS.js +0 -47
  325. package/dist/packages/ui/dist/assets/index-CIfmX7DJ.css +0 -1
  326. package/dist/packages/ui/dist/assets/index-DNtpSfZS.js +0 -63
@@ -0,0 +1,514 @@
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
+ changesSince
8
+ } from "./chunk-X5B7KYPD.js";
9
+ import {
10
+ ContractsFile,
11
+ FACTS_SCHEMA_VERSION,
12
+ canonicalize,
13
+ catalogDirOf,
14
+ factsDirOf,
15
+ parseFacts,
16
+ parseRecord,
17
+ serializeFacts,
18
+ staleCite,
19
+ toCanonicalYaml
20
+ } from "./chunk-WJWSB65O.js";
21
+ import {
22
+ writeFileAtomic
23
+ } from "./chunk-SMFFUFMN.js";
24
+ import {
25
+ RecordId,
26
+ cmpText,
27
+ external_exports
28
+ } from "./chunk-A3LVMCA5.js";
29
+ import {
30
+ SCHEMA_VERSION
31
+ } from "./chunk-NWMFVPEP.js";
32
+ import {
33
+ require_dist
34
+ } from "./chunk-BQGDB6ZL.js";
35
+ import {
36
+ __toESM
37
+ } from "./chunk-TV45EUGM.js";
38
+
39
+ // packages/scanner/dist/slots.js
40
+ var import_yaml = __toESM(require_dist(), 1);
41
+ import { createHash } from "node:crypto";
42
+ import { readFile } from "node:fs/promises";
43
+ import { join, relative, sep } from "node:path";
44
+ var SLOT_VERSION = 1;
45
+ var BUILD_MANIFEST_VERSION = 1;
46
+ var BUILD_VERSION = "2.0.0-beta.27.2";
47
+ var DISMISSALS_VERSION = 1;
48
+ var SHA256 = external_exports.string().regex(/^[0-9a-f]{64}$/, "a SHA-256, 64 lowercase hex digits");
49
+ var REPO = RecordId;
50
+ var COMMIT = external_exports.string().min(1);
51
+ var RECORD = external_exports.record(external_exports.string(), external_exports.unknown()).describe("A catalog record of contract C1 (schema/catalog/<kind>.json), checked as one");
52
+ var PATH = external_exports.string().min(1).describe("A metarepo-relative path, '/'-separated");
53
+ var ReadersSlot = external_exports.strictObject({
54
+ slotVersion: external_exports.literal(SLOT_VERSION),
55
+ kind: external_exports.literal("readers"),
56
+ repo: REPO,
57
+ commit: COMMIT,
58
+ /** `read`: a full read. `legacy`: adopted by `atticus upgrade`. There is no partial. */
59
+ status: external_exports.enum(["read", "legacy"]),
60
+ /** Each extractor that ran, sorted; none for a legacy slot (no reader ran). */
61
+ extractors: external_exports.array(external_exports.strictObject({ id: external_exports.string().min(1), version: external_exports.string().min(1) })),
62
+ /**
63
+ * A hash of what steered the readers: the repo's scan settings, the rule files, the plugins
64
+ * and their pins. Null for a legacy slot: nothing steered an adoption.
65
+ */
66
+ settings: SHA256.nullable(),
67
+ /** The repo's records as the readers produced them, before the merge, sorted by kind then id. */
68
+ records: external_exports.array(RECORD)
69
+ }).refine((s) => s.status === "legacy" || s.commit !== "unknown", {
70
+ message: "a read slot names the commit it read",
71
+ path: ["commit"]
72
+ }).refine((s) => s.status === "legacy" === (s.settings === null), {
73
+ message: "a read slot has a settings hash, and a legacy slot has none (null)",
74
+ path: ["settings"]
75
+ }).refine((s) => s.status === "read" || s.extractors.length === 0, {
76
+ message: "a legacy slot lists no extractors: no reader ran",
77
+ path: ["extractors"]
78
+ });
79
+ var FactsSlotMeta = external_exports.strictObject({
80
+ slotVersion: external_exports.literal(SLOT_VERSION),
81
+ kind: external_exports.literal("facts"),
82
+ repo: REPO,
83
+ commit: COMMIT,
84
+ factsSchemaVersion: external_exports.number().int().positive(),
85
+ /** The SHA-256 of the snapshot's bytes (`<repo>.jsonl`). */
86
+ factsHash: SHA256,
87
+ /** The repo's `<repo>.contracts.yaml` as read at the facts' commit (ADR 0151), or null. */
88
+ contracts: ContractsFile.nullable(),
89
+ /**
90
+ * Beta.27.2 (ADR 0195 addendum "a legacy join its caller's facts place elsewhere"): verify's
91
+ * own verdict that the read is complete, every source file read or reviewed. Left out for a
92
+ * read in parts (never false), so a meta written before it reads as one.
93
+ */
94
+ readComplete: external_exports.literal(true).optional()
95
+ });
96
+ var LegacyJoinsSlot = external_exports.strictObject({
97
+ slotVersion: external_exports.literal(SLOT_VERSION),
98
+ kind: external_exports.literal("legacy-joins"),
99
+ status: external_exports.literal("legacy"),
100
+ /** Records with evidence from several repos, or none, adopted at the upgrade; by kind then id. */
101
+ records: external_exports.array(RECORD),
102
+ /** The hash of each slot and build input as it was at the upgrade, by its path. */
103
+ inputs: external_exports.record(PATH, SHA256)
104
+ });
105
+ var HASHED = external_exports.strictObject({ path: PATH, sha256: SHA256 });
106
+ var BuildManifest = external_exports.strictObject({
107
+ version: external_exports.literal(BUILD_MANIFEST_VERSION),
108
+ /** The build that wrote it (`BUILD_VERSION`): a change of it explains a removal. */
109
+ buildVersion: external_exports.string().min(1),
110
+ /** Every file the last build wrote under catalog/generated/, with the sources it came from. */
111
+ files: external_exports.array(external_exports.strictObject({ path: PATH, sha256: SHA256, sources: external_exports.array(HASHED) }))
112
+ });
113
+ var CrossCheckDismissals = external_exports.strictObject({
114
+ version: external_exports.literal(DISMISSALS_VERSION),
115
+ /** Each dismissed cross-check item: its key, and the readers' value it was dismissed at. */
116
+ dismissed: external_exports.array(external_exports.strictObject({
117
+ key: external_exports.string().min(1),
118
+ // Required: the readers' value it was dismissed at (null when they found none).
119
+ readers: external_exports.unknown().refine((v) => v !== void 0, "the readers' value is required")
120
+ }))
121
+ });
122
+ var byKindThenId = (a, b) => a.kind === b.kind ? cmpText(a.id, b.id) : cmpText(a.kind, b.kind);
123
+ function recordData(r) {
124
+ return canonicalize(r.kind === "Flow" ? r : { ...r, schemaVersion: SCHEMA_VERSION });
125
+ }
126
+ function json(value) {
127
+ return JSON.stringify(value, null, 2) + "\n";
128
+ }
129
+ var sortedRecords = (records) => [...records].sort(byKindThenId).map(recordData);
130
+ function readersSlotOf(s) {
131
+ return {
132
+ ...s,
133
+ extractors: [...s.extractors].sort((a, b) => a.id === b.id ? cmpText(a.version, b.version) : cmpText(a.id, b.id)),
134
+ records: [...s.records].sort(byKindThenId)
135
+ };
136
+ }
137
+ function serializeReadersSlot(s) {
138
+ const x = readersSlotOf(s);
139
+ return json({
140
+ slotVersion: x.slotVersion,
141
+ kind: x.kind,
142
+ repo: x.repo,
143
+ commit: x.commit,
144
+ status: x.status,
145
+ extractors: x.extractors.map((e) => ({ id: e.id, version: e.version })),
146
+ settings: x.settings,
147
+ records: sortedRecords(x.records)
148
+ });
149
+ }
150
+ function serializeFactsSlotMeta(m) {
151
+ return json({
152
+ slotVersion: m.slotVersion,
153
+ kind: m.kind,
154
+ repo: m.repo,
155
+ commit: m.commit,
156
+ factsSchemaVersion: m.factsSchemaVersion,
157
+ factsHash: m.factsHash,
158
+ contracts: m.contracts === null ? null : canonicalize(m.contracts, ["schemaVersion"]),
159
+ ...m.readComplete ? { readComplete: true } : {}
160
+ });
161
+ }
162
+ function serializeFactsSnapshot(facts) {
163
+ return serializeFacts(facts);
164
+ }
165
+ function serializeLegacyJoins(s) {
166
+ return json({
167
+ slotVersion: s.slotVersion,
168
+ kind: s.kind,
169
+ status: s.status,
170
+ records: sortedRecords(s.records),
171
+ inputs: Object.fromEntries(Object.entries(s.inputs).sort(([a], [b]) => cmpText(a, b)))
172
+ });
173
+ }
174
+ function serializeBuildManifest(m) {
175
+ return json({
176
+ version: m.version,
177
+ buildVersion: m.buildVersion,
178
+ files: [...m.files].sort((a, b) => cmpText(a.path, b.path)).map((f) => ({
179
+ path: f.path,
180
+ sha256: f.sha256,
181
+ sources: [...f.sources].sort((a, b) => cmpText(a.path, b.path)).map((s) => ({ path: s.path, sha256: s.sha256 }))
182
+ }))
183
+ });
184
+ }
185
+ function serializeDismissals(d) {
186
+ return toCanonicalYaml({
187
+ version: d.version,
188
+ dismissed: [...d.dismissed].sort((a, b) => cmpText(a.key, b.key)).map((x) => ({ key: x.key, readers: x.readers }))
189
+ }, ["version", "key", "readers"]);
190
+ }
191
+ var zodIssues = (e) => e.issues.map((i) => ({ path: i.path.map(String).join("."), message: i.message }));
192
+ function parseJson(text) {
193
+ try {
194
+ const t = text.charCodeAt(0) === 65279 ? text.slice(1) : text;
195
+ return { ok: true, value: JSON.parse(t.replace(/\r\n?/g, "\n")) };
196
+ } catch (e) {
197
+ return { ok: false, issues: [{ path: "", message: `not JSON: ${e.message}` }] };
198
+ }
199
+ }
200
+ function parseRecords(rows) {
201
+ const records = [];
202
+ const issues = [];
203
+ rows.forEach((row, i) => {
204
+ const p = parseRecord(row);
205
+ if (p.ok)
206
+ records.push(p.record);
207
+ else
208
+ for (const x of p.issues)
209
+ issues.push({ path: `records.${i}${x.path ? `.${x.path}` : ""}`, message: x.message });
210
+ });
211
+ return issues.length ? { ok: false, issues } : { ok: true, records };
212
+ }
213
+ function parseReadersSlot(text, repo) {
214
+ const j = parseJson(text);
215
+ if (!j.ok)
216
+ return j;
217
+ const s = ReadersSlot.safeParse(j.value);
218
+ if (!s.success)
219
+ return { ok: false, issues: zodIssues(s.error) };
220
+ const r = parseRecords(s.data.records);
221
+ if (!r.ok)
222
+ return r;
223
+ const issues = [];
224
+ if (repo !== void 0 && s.data.repo !== repo)
225
+ issues.push({ path: "repo", message: `names ${s.data.repo}, but the file is ${repo}'s` });
226
+ if (s.data.status === "read")
227
+ r.records.forEach((rec, i) => {
228
+ const other = rec.evidence.find((e) => e.repo !== void 0 && e.repo !== s.data.repo);
229
+ if (other)
230
+ issues.push({
231
+ path: `records.${i}.evidence`,
232
+ message: `cites ${other.repo}, not the slot's repo ${s.data.repo}`
233
+ });
234
+ });
235
+ return issues.length ? { ok: false, issues } : { ok: true, slot: { ...s.data, records: r.records } };
236
+ }
237
+ async function readReadersSlot(root, repo) {
238
+ const text = await readFile(readersSlotPath(root, repo), "utf8").catch(() => void 0);
239
+ return text === void 0 ? void 0 : parseReadersSlot(text, repo);
240
+ }
241
+ function parseFactsSlotMeta(text) {
242
+ const j = parseJson(text);
243
+ if (!j.ok)
244
+ return j;
245
+ const s = FactsSlotMeta.safeParse(j.value);
246
+ return s.success ? { ok: true, slot: s.data } : { ok: false, issues: zodIssues(s.error) };
247
+ }
248
+ function parseFactsSnapshot(text) {
249
+ const p = parseFacts(text.replace(/\r\n?/g, "\n"));
250
+ if (!p.ok)
251
+ return { ok: false, issues: p.issues.map((i) => ({ path: "", message: i.message })) };
252
+ if (p.newer?.length)
253
+ return {
254
+ ok: false,
255
+ issues: [{ path: "", message: "holds facts of a kind a newer Atticus wrote" }]
256
+ };
257
+ return { ok: true, facts: p.facts };
258
+ }
259
+ function parseLegacyJoins(text) {
260
+ const j = parseJson(text);
261
+ if (!j.ok)
262
+ return j;
263
+ const s = LegacyJoinsSlot.safeParse(j.value);
264
+ if (!s.success)
265
+ return { ok: false, issues: zodIssues(s.error) };
266
+ const r = parseRecords(s.data.records);
267
+ return r.ok ? { ok: true, slot: { ...s.data, records: r.records } } : r;
268
+ }
269
+ function parseBuildManifest(text) {
270
+ const j = parseJson(text);
271
+ if (!j.ok)
272
+ return j;
273
+ const s = BuildManifest.safeParse(j.value);
274
+ return s.success ? { ok: true, slot: s.data } : { ok: false, issues: zodIssues(s.error) };
275
+ }
276
+ function parseDismissals(text) {
277
+ let data;
278
+ try {
279
+ data = (0, import_yaml.parse)(text.replace(/\r\n?/g, "\n"));
280
+ } catch (e) {
281
+ return { ok: false, issues: [{ path: "", message: `not YAML: ${e.message}` }] };
282
+ }
283
+ const s = CrossCheckDismissals.safeParse(data);
284
+ return s.success ? { ok: true, slot: s.data } : { ok: false, issues: zodIssues(s.error) };
285
+ }
286
+ function slotJsonSchemas() {
287
+ const files = {
288
+ ReadersSlot,
289
+ FactsSlotMeta,
290
+ LegacyJoinsSlot,
291
+ BuildManifest,
292
+ CrossCheckDismissals
293
+ };
294
+ const out = {};
295
+ for (const [name, schema] of Object.entries(files))
296
+ out[name] = {
297
+ $id: `https://maycombhq.github.io/atticus/schema/sources/v1/${name}.json`,
298
+ title: name,
299
+ ...external_exports.toJSONSchema(schema, { io: "input", unrepresentable: "any" })
300
+ };
301
+ return out;
302
+ }
303
+ function sourcesRelOf(root) {
304
+ return [...relative(root, catalogDirOf(root)).split(sep), "sources"].filter(Boolean).join("/");
305
+ }
306
+ function sourcesDirOf(root) {
307
+ return join(catalogDirOf(root), "sources");
308
+ }
309
+ function readersSlotPath(root, repo) {
310
+ return join(sourcesDirOf(root), "readers", `${repo}.json`);
311
+ }
312
+ function factsSlotPaths(root, repo) {
313
+ return {
314
+ facts: join(sourcesDirOf(root), "facts", `${repo}.jsonl`),
315
+ meta: join(sourcesDirOf(root), "facts", `${repo}.meta.json`)
316
+ };
317
+ }
318
+ function legacyJoinsPath(root) {
319
+ return join(sourcesDirOf(root), "legacy", "joins.json");
320
+ }
321
+ function buildManifestPath(root) {
322
+ return join(sourcesDirOf(root), "build.json");
323
+ }
324
+ function dismissalsPath(root, repo) {
325
+ return join(factsDirOf(root), `${repo}.crosscheck.yaml`);
326
+ }
327
+ var sha256Of = (text) => createHash("sha256").update(text, "utf8").digest("hex");
328
+ async function writeSlotFile(path, text) {
329
+ const current = await readFile(path, "utf8").catch(() => void 0);
330
+ if (current?.replace(/\r\n?/g, "\n") === text)
331
+ return "unchanged";
332
+ await writeFileAtomic(path, text);
333
+ return "written";
334
+ }
335
+ async function writeReadersSlots(root, observations, o = {}) {
336
+ const out = [];
337
+ for (const x of observations) {
338
+ const path = readersSlotPath(root, x.repo);
339
+ const onDisk = await readFile(path, "utf8").catch(() => void 0);
340
+ const kept = (reason, detail) => {
341
+ const p = onDisk === void 0 ? void 0 : parseReadersSlot(onDisk);
342
+ return {
343
+ repo: x.repo,
344
+ slot: onDisk === void 0 ? "none" : "kept-last-good",
345
+ ...p?.ok ? { commit: p.slot.commit } : {},
346
+ ...reason ? { reason } : {},
347
+ ...detail ? { detail } : {}
348
+ };
349
+ };
350
+ if (!x.full) {
351
+ out.push(kept(x.why, x.detail));
352
+ continue;
353
+ }
354
+ const text = serializeReadersSlot(x.slot);
355
+ const back = parseReadersSlot(text, x.repo);
356
+ if (!back.ok)
357
+ throw new Error(`The readers slot of ${x.repo} doesn't read back: ${back.issues.map((i) => `${i.path}: ${i.message}`).join("; ")}`);
358
+ if (onDisk?.replace(/\r\n?/g, "\n") === text) {
359
+ out.push({ repo: x.repo, slot: "unchanged", commit: x.slot.commit });
360
+ continue;
361
+ }
362
+ if (o.hold) {
363
+ out.push(kept(o.hold));
364
+ continue;
365
+ }
366
+ await writeFileAtomic(path, text);
367
+ out.push({ repo: x.repo, slot: "written", commit: x.slot.commit });
368
+ }
369
+ return out;
370
+ }
371
+ async function writeFactsSlot(root, s) {
372
+ const paths = factsSlotPaths(root, s.repo);
373
+ const text = serializeFactsSnapshot(s.facts);
374
+ const meta = serializeFactsSlotMeta({
375
+ slotVersion: SLOT_VERSION,
376
+ kind: "facts",
377
+ repo: s.repo,
378
+ commit: s.commit,
379
+ factsSchemaVersion: FACTS_SCHEMA_VERSION,
380
+ factsHash: sha256Of(text),
381
+ contracts: s.contracts,
382
+ ...s.readComplete ? { readComplete: true } : {}
383
+ });
384
+ const facts = await writeSlotFile(paths.facts, text);
385
+ return { facts, meta: await writeSlotFile(paths.meta, meta), count: s.facts.length };
386
+ }
387
+ async function readFactsSlot(root, repo) {
388
+ const paths = factsSlotPaths(root, repo);
389
+ const [text, metaText] = await Promise.all([
390
+ readFile(paths.facts, "utf8").catch(() => void 0),
391
+ readFile(paths.meta, "utf8").catch(() => void 0)
392
+ ]);
393
+ if (text === void 0 && metaText === void 0)
394
+ return void 0;
395
+ if (text === void 0 || metaText === void 0)
396
+ return {
397
+ ok: false,
398
+ problem: `has ${text === void 0 ? "a meta and no facts" : "facts and no meta"}`
399
+ };
400
+ const meta = parseFactsSlotMeta(metaText);
401
+ if (!meta.ok)
402
+ return {
403
+ ok: false,
404
+ problem: `its meta doesn't read (${meta.issues[0]?.message ?? "invalid"})`
405
+ };
406
+ if (meta.slot.repo !== repo)
407
+ return { ok: false, problem: `its meta names another repo (${meta.slot.repo})` };
408
+ if (meta.slot.factsSchemaVersion > FACTS_SCHEMA_VERSION)
409
+ return {
410
+ ok: false,
411
+ problem: `a newer Atticus wrote it (facts version ${meta.slot.factsSchemaVersion})`
412
+ };
413
+ if (sha256Of(text.replace(/\r\n?/g, "\n")) !== meta.slot.factsHash)
414
+ return { ok: false, problem: "its facts aren't the ones its meta hashed" };
415
+ const facts = parseFactsSnapshot(text);
416
+ if (!facts.ok)
417
+ return {
418
+ ok: false,
419
+ problem: `its facts don't read (${facts.issues[0]?.message ?? "invalid"})`
420
+ };
421
+ return { ok: true, meta: meta.slot, facts: facts.facts };
422
+ }
423
+ async function factsSlotStaleness(root, repo, at) {
424
+ const slot = await readFactsSlot(root, repo);
425
+ if (!slot)
426
+ return void 0;
427
+ const command = `atticus verify ${repo} --write`;
428
+ if (!slot.ok)
429
+ return {
430
+ repo,
431
+ commit: "unknown",
432
+ head: at.head,
433
+ files: [],
434
+ facts: 0,
435
+ unusable: slot.problem,
436
+ command
437
+ };
438
+ const commit = slot.meta.commit;
439
+ if (commit === at.head || at.head.startsWith(commit) || commit.startsWith(at.head))
440
+ return void 0;
441
+ const diff = commit === "unknown" ? { changes: {}, missing: [commit] } : await changesSince(at.dir, [commit], at.head, at.git).catch(() => ({
442
+ changes: {},
443
+ missing: [commit]
444
+ }));
445
+ if (diff.missing.length)
446
+ return { repo, commit, head: at.head, files: [], facts: 0, notComparable: true, command };
447
+ const changes = Object.values(diff.changes)[0] ?? [];
448
+ const byFile = /* @__PURE__ */ new Map();
449
+ let stale = 0;
450
+ for (const f of slot.facts) {
451
+ const s = staleCite(f, changes);
452
+ if (!s)
453
+ continue;
454
+ stale++;
455
+ const e = byFile.get(s.file) ?? {
456
+ path: s.file,
457
+ how: s.how,
458
+ ...s.to !== void 0 ? { to: s.to } : {},
459
+ facts: []
460
+ };
461
+ e.facts.push(f.id);
462
+ byFile.set(s.file, e);
463
+ }
464
+ if (!stale)
465
+ return void 0;
466
+ return {
467
+ repo,
468
+ commit,
469
+ head: at.head,
470
+ files: [...byFile.values()].sort((a, b) => cmpText(a.path, b.path)).map((e) => ({ ...e, facts: [...e.facts].sort(cmpText) })),
471
+ facts: stale,
472
+ command
473
+ };
474
+ }
475
+
476
+ export {
477
+ SLOT_VERSION,
478
+ BUILD_MANIFEST_VERSION,
479
+ BUILD_VERSION,
480
+ DISMISSALS_VERSION,
481
+ ReadersSlot,
482
+ FactsSlotMeta,
483
+ LegacyJoinsSlot,
484
+ BuildManifest,
485
+ CrossCheckDismissals,
486
+ readersSlotOf,
487
+ serializeReadersSlot,
488
+ serializeFactsSlotMeta,
489
+ serializeFactsSnapshot,
490
+ serializeLegacyJoins,
491
+ serializeBuildManifest,
492
+ serializeDismissals,
493
+ parseReadersSlot,
494
+ readReadersSlot,
495
+ parseFactsSlotMeta,
496
+ parseFactsSnapshot,
497
+ parseLegacyJoins,
498
+ parseBuildManifest,
499
+ parseDismissals,
500
+ slotJsonSchemas,
501
+ sourcesRelOf,
502
+ sourcesDirOf,
503
+ readersSlotPath,
504
+ factsSlotPaths,
505
+ legacyJoinsPath,
506
+ buildManifestPath,
507
+ dismissalsPath,
508
+ sha256Of,
509
+ writeSlotFile,
510
+ writeReadersSlots,
511
+ writeFactsSlot,
512
+ readFactsSlot,
513
+ factsSlotStaleness
514
+ };