@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
@@ -6,11 +6,7 @@ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
6
  import {
7
7
  boundedId,
8
8
  opt
9
- } from "./chunk-PGKCRK77.js";
10
- import {
11
- curatedAliases,
12
- resolveNames
13
- } from "./chunk-M6HI36T3.js";
9
+ } from "./chunk-IPSZDVLI.js";
14
10
  import {
15
11
  DATA_RULE,
16
12
  INSTRUCTION_RULES,
@@ -27,9 +23,14 @@ import {
27
23
  toRunSummary,
28
24
  verdictOf,
29
25
  wrapData
30
- } from "./chunk-QQD25YNF.js";
26
+ } from "./chunk-2MRYL45Z.js";
27
+ import {
28
+ curatedAliases,
29
+ resolveNames
30
+ } from "./chunk-ELJ5Q4J2.js";
31
31
  import {
32
32
  JOINED_BY_PERSON,
33
+ byDecisionTime,
33
34
  deserializeRecord,
34
35
  estimateTokens,
35
36
  isAdopted,
@@ -47,10 +48,10 @@ import {
47
48
  recordPath,
48
49
  serializeRecord,
49
50
  toCanonicalYaml
50
- } from "./chunk-GLISHJ4G.js";
51
+ } from "./chunk-WJWSB65O.js";
51
52
  import {
52
53
  writeFileAtomic
53
- } from "./chunk-G3ZFEHCX.js";
54
+ } from "./chunk-SMFFUFMN.js";
54
55
  import {
55
56
  AgentDefinition,
56
57
  ChecklistPack,
@@ -72,10 +73,10 @@ import {
72
73
  pageStanding,
73
74
  platformsMatch,
74
75
  sourceReadsPage
75
- } from "./chunk-LZFKJ2BR.js";
76
+ } from "./chunk-A3LVMCA5.js";
76
77
  import {
77
78
  SCHEMA_VERSION
78
- } from "./chunk-CTJHEG6A.js";
79
+ } from "./chunk-NWMFVPEP.js";
79
80
  import {
80
81
  require_dist
81
82
  } from "./chunk-BQGDB6ZL.js";
@@ -2024,14 +2025,20 @@ var FlowGraph = class {
2024
2025
  }
2025
2026
  /** Words that name the component or its system: they say where code is, not what it does. */
2026
2027
  ownWords(component) {
2028
+ let own = this.ownMemo.get(component);
2029
+ if (own)
2030
+ return new Set(own);
2027
2031
  const s2 = this.systemOf(component);
2028
2032
  const sys = s2 ? this.systems.get(s2) : void 0;
2029
- return tokens([
2033
+ own = tokens([
2030
2034
  ...splitWords(component),
2031
2035
  ...s2 ? splitWords(s2) : [],
2032
2036
  ...sys ? splitWords(sys.name) : []
2033
2037
  ]);
2038
+ this.ownMemo.set(component, own);
2039
+ return new Set(own);
2034
2040
  }
2041
+ ownMemo = /* @__PURE__ */ new Map();
2035
2042
  /** The system's name as one singular word for job names (Reports → report), if it has one. */
2036
2043
  systemWord(component) {
2037
2044
  const s2 = this.systemOf(component);
@@ -2065,12 +2072,27 @@ var DEFAULT_DEPTH = 8;
2065
2072
  var WRITES = /* @__PURE__ */ new Set(["POST", "PUT", "PATCH", "DELETE"]);
2066
2073
  var modeOf = (method) => !method ? "any" : WRITES.has(method.toUpperCase()) ? "write" : "read";
2067
2074
  var union = (a, b) => /* @__PURE__ */ new Set([...a, ...b]);
2075
+ var unionNew = (a, b) => {
2076
+ for (const x of b)
2077
+ if (!a.has(x))
2078
+ return union(a, b);
2079
+ return a;
2080
+ };
2068
2081
  var sorted = (s2) => [...s2].sort();
2069
2082
  var Tracer = class {
2070
2083
  maxDepth;
2071
2084
  g;
2072
2085
  claimed = /* @__PURE__ */ new Map();
2073
2086
  entriesAt = /* @__PURE__ */ new Map();
2087
+ // Memos (ADR 0195 point 9, the budgets): the graph never changes after the constructor, so a
2088
+ // hop's, a call's, a table's and a component's words are worked out once, not on every trace
2089
+ // that passes them. The sets are never handed out to be changed (a flow's words are a union).
2090
+ hopMemo = /* @__PURE__ */ new Map();
2091
+ callMemo = /* @__PURE__ */ new Map();
2092
+ tableMemo = /* @__PURE__ */ new Map();
2093
+ outsMemo = /* @__PURE__ */ new Map();
2094
+ /** How many starts each component has, for the entry points in play (reset with them). */
2095
+ startsMemo = /* @__PURE__ */ new Map();
2074
2096
  constructor(records, maxDepth = DEFAULT_DEPTH) {
2075
2097
  this.maxDepth = maxDepth;
2076
2098
  this.g = new FlowGraph(records);
@@ -2191,6 +2213,7 @@ var Tracer = class {
2191
2213
  useEntries(entries) {
2192
2214
  this.entriesAt.clear();
2193
2215
  this.claimed.clear();
2216
+ this.startsMemo.clear();
2194
2217
  for (const e of entries) {
2195
2218
  const l = this.entriesAt.get(e.component) ?? [];
2196
2219
  l.push(e);
@@ -2198,10 +2221,116 @@ var Tracer = class {
2198
2221
  }
2199
2222
  }
2200
2223
  hopTokens(i) {
2201
- return tokens(i.sync === "async" ? topicWords(i.normalizedPath) : pathWords(i.normalizedPath));
2224
+ let t = this.hopMemo.get(i);
2225
+ if (!t) {
2226
+ t = tokens(i.sync === "async" ? topicWords(i.normalizedPath) : pathWords(i.normalizedPath));
2227
+ this.hopMemo.set(i, t);
2228
+ }
2229
+ return t;
2202
2230
  }
2203
2231
  callTokens(i) {
2204
- return union(this.hopTokens(i), this.g.classTokens(i.evidence, this.g.ownWords(i.from), ["caller"]));
2232
+ let t = this.callMemo.get(i);
2233
+ if (!t) {
2234
+ t = union(this.hopTokens(i), this.g.classTokens(i.evidence, this.g.ownWords(i.from), ["caller"]));
2235
+ this.callMemo.set(i, t);
2236
+ }
2237
+ return t;
2238
+ }
2239
+ tableTokens(t) {
2240
+ let x = this.tableMemo.get(t);
2241
+ if (!x) {
2242
+ x = tokens(splitWords(t.name));
2243
+ this.tableMemo.set(t, x);
2244
+ }
2245
+ return x;
2246
+ }
2247
+ /** A component's calls and events out, by id (the graph's `outOf`, kept). */
2248
+ outsOf(component) {
2249
+ let o = this.outsMemo.get(component);
2250
+ if (!o) {
2251
+ o = this.g.outOf(component);
2252
+ this.outsMemo.set(component, o);
2253
+ }
2254
+ return o;
2255
+ }
2256
+ /**
2257
+ * The calls and events out of each component by word (a trace follows the ones sharing a
2258
+ * word with it: `outs.filter((i) => overlaps(toks, this.callTokens(i)))`).
2259
+ */
2260
+ outWordsMemo = /* @__PURE__ */ new Map();
2261
+ /**
2262
+ * Which of `items` share a word with `toks` (`hit[k]` is 1 where `overlaps(toks, wordsOf(x))`),
2263
+ * and how many, through an index of a component's items by word (kept in `memo`), so a trace
2264
+ * looks up its words instead of comparing them with every item. `items` must be the same list
2265
+ * for the same component every time.
2266
+ */
2267
+ sharingHits(memo, component, items, toks, wordsOf) {
2268
+ let hit = this.hitBufs.get(memo);
2269
+ if (!hit || hit.length < items.length) {
2270
+ hit = new Uint8Array(Math.max(items.length, 2 * (hit?.length ?? 32)));
2271
+ this.hitBufs.set(memo, hit);
2272
+ } else
2273
+ hit.fill(0, 0, items.length);
2274
+ let n = 0;
2275
+ if (items.length < 8) {
2276
+ for (let k = 0; k < items.length; k++)
2277
+ if (overlaps(toks, wordsOf(items[k]))) {
2278
+ hit[k] = 1;
2279
+ n++;
2280
+ }
2281
+ return { hit, n };
2282
+ }
2283
+ let idx = memo.get(component);
2284
+ if (!idx) {
2285
+ idx = /* @__PURE__ */ new Map();
2286
+ items.forEach((x, k) => {
2287
+ for (const t of wordsOf(x)) {
2288
+ const l = idx.get(t);
2289
+ if (l)
2290
+ l.push(k);
2291
+ else
2292
+ idx.set(t, [k]);
2293
+ }
2294
+ });
2295
+ memo.set(component, idx);
2296
+ }
2297
+ words: for (const t of toks) {
2298
+ const l = idx.get(t);
2299
+ if (!l)
2300
+ continue;
2301
+ for (const k of l)
2302
+ if (!hit[k]) {
2303
+ hit[k] = 1;
2304
+ if (++n === items.length)
2305
+ break words;
2306
+ }
2307
+ }
2308
+ return { hit, n };
2309
+ }
2310
+ hitBufs = /* @__PURE__ */ new Map();
2311
+ /** A component's calls and events out as numbers: id, endpoint (or -1), callee, each. */
2312
+ outsIxOf(component, outs) {
2313
+ let x = this.outsIxMemo.get(component);
2314
+ if (!x) {
2315
+ x = new Int32Array(outs.length * 3);
2316
+ outs.forEach((i, k) => {
2317
+ x[k * 3] = this.indexOf(i.id);
2318
+ x[k * 3 + 1] = i.endpoint ? this.indexOf(i.endpoint) : -1;
2319
+ x[k * 3 + 2] = this.indexOf(i.to);
2320
+ });
2321
+ this.outsIxMemo.set(component, x);
2322
+ }
2323
+ return x;
2324
+ }
2325
+ outsIxMemo = /* @__PURE__ */ new Map();
2326
+ tableWordsMemo = /* @__PURE__ */ new Map();
2327
+ startCount(component) {
2328
+ let n = this.startsMemo.get(component);
2329
+ if (n === void 0) {
2330
+ n = this.starts(component).length;
2331
+ this.startsMemo.set(component, n);
2332
+ }
2333
+ return n;
2205
2334
  }
2206
2335
  /** Where work starts at a component: its entry points and the calls and events into it. */
2207
2336
  starts(component) {
@@ -2219,78 +2348,176 @@ var Tracer = class {
2219
2348
  c = /* @__PURE__ */ new Set();
2220
2349
  const starts = this.starts(component);
2221
2350
  for (const u of this.g.tables.get(component) ?? [])
2222
- if (starts.some((t) => overlaps(t, tokens(splitWords(u.table.name)))))
2351
+ if (starts.some((t) => overlaps(t, this.tableTokens(u.table))))
2223
2352
  c.add(u.table.id);
2224
2353
  this.claimed.set(component, c);
2225
2354
  }
2226
2355
  return c;
2227
2356
  }
2228
- tablesFor(component, toks, mode) {
2229
- const uses = [...this.g.tables.get(component) ?? []];
2230
- const named = uses.filter((u) => overlaps(toks, tokens(splitWords(u.table.name))));
2231
- if (named.length)
2232
- return named;
2357
+ /** Whether a component (by its number) is our own: `g.isOwn`, kept. */
2358
+ ownAt(k, id) {
2359
+ let o = this.ownMark[k];
2360
+ if (o === void 0) {
2361
+ o = this.g.isOwn(id) ? 1 : 0;
2362
+ this.ownMark[k] = o;
2363
+ }
2364
+ return o === 1;
2365
+ }
2366
+ ownMark = [];
2367
+ /**
2368
+ * The tables a flow takes at a component, each given to `add` by its number, in the order of
2369
+ * the component's tables: those that share a word with the flow's words, else the ones no
2370
+ * start there claims that the flow's mode reads or writes (any, for "any").
2371
+ */
2372
+ tablesIx(component, toks, mode, add) {
2373
+ const uses = this.g.tables.get(component);
2374
+ if (!uses?.length)
2375
+ return;
2376
+ let tix = this.tablesIxMemo.get(component);
2377
+ if (!tix) {
2378
+ tix = Int32Array.from(uses, (u) => this.indexOf(u.table.id));
2379
+ this.tablesIxMemo.set(component, tix);
2380
+ }
2381
+ const { hit, n } = this.sharingHits(this.tableWordsMemo, component, uses, toks, (u) => this.tableTokens(u.table));
2382
+ if (n) {
2383
+ for (let k = 0; k < uses.length; k++)
2384
+ if (hit[k])
2385
+ add(tix[k]);
2386
+ return;
2387
+ }
2233
2388
  const claimed = this.claimedAt(component);
2234
- return uses.filter((u) => !claimed.has(u.table.id) && (mode === "any" || (mode === "write" ? u.write : u.read)));
2389
+ for (let k = 0; k < uses.length; k++) {
2390
+ const u = uses[k];
2391
+ if (!claimed.has(u.table.id) && (mode === "any" || (mode === "write" ? u.write : u.read)))
2392
+ add(tix[k]);
2393
+ }
2394
+ }
2395
+ tablesIxMemo = /* @__PURE__ */ new Map();
2396
+ // A trace marks what it holds by number (ADR 0195 point 9: a flow of a big estate holds
2397
+ // thousands of ids, and thousands of flows are traced): each id once, in the order a trace
2398
+ // first adds it, as a Set of the ids would hold them.
2399
+ ids = [];
2400
+ ixOf = /* @__PURE__ */ new Map();
2401
+ recMark = [];
2402
+ reachMark = [];
2403
+ queuedMark = [];
2404
+ pass = 0;
2405
+ /** The number a trace marks this id by. */
2406
+ indexOf(id) {
2407
+ let k = this.ixOf.get(id);
2408
+ if (k === void 0) {
2409
+ k = this.ids.length;
2410
+ this.ids.push(id);
2411
+ this.ixOf.set(id, k);
2412
+ }
2413
+ return k;
2414
+ }
2415
+ /** The id of a number `indexOf` gave. */
2416
+ idOf(k) {
2417
+ return this.ids[k];
2235
2418
  }
2236
2419
  trace(entry) {
2237
- const g = this.g;
2238
- const flow = {
2420
+ const f = this.traceIx(entry, true);
2421
+ return {
2239
2422
  entry,
2240
- records: /* @__PURE__ */ new Set([entry.id, entry.component]),
2241
- reached: /* @__PURE__ */ new Set([entry.id]),
2242
- visits: [],
2243
- hops: []
2423
+ records: new Set(Array.from(f.records, (k) => this.idOf(k))),
2424
+ reached: new Set(Array.from(f.reached, (k) => this.idOf(k))),
2425
+ visits: f.visits,
2426
+ hops: f.hops
2244
2427
  };
2428
+ }
2429
+ /**
2430
+ * A flow as the numbers of what it spans and reaches, each in the order `trace` adds them;
2431
+ * its visits and hops only with `keep` (a scan's features need neither).
2432
+ */
2433
+ traceIx(entry, keep) {
2434
+ const g = this.g;
2435
+ const pass = ++this.pass;
2436
+ const recMark = this.recMark;
2437
+ const reachMark = this.reachMark;
2438
+ const records = [];
2439
+ const reached = [];
2440
+ const rec = (k) => {
2441
+ if (recMark[k] !== pass) {
2442
+ recMark[k] = pass;
2443
+ records.push(k);
2444
+ }
2445
+ };
2446
+ const reach = (k) => {
2447
+ if (reachMark[k] !== pass) {
2448
+ reachMark[k] = pass;
2449
+ reached.push(k);
2450
+ }
2451
+ };
2452
+ const visits = keep ? [] : void 0;
2453
+ const hops = keep ? [] : void 0;
2454
+ rec(this.indexOf(entry.id));
2455
+ rec(this.indexOf(entry.component));
2456
+ reach(this.indexOf(entry.id));
2245
2457
  const iface = g.interfaces.get(entry.id);
2246
2458
  if (iface) {
2247
- flow.records.add(iface.from);
2459
+ rec(this.indexOf(iface.from));
2248
2460
  if (iface.endpoint)
2249
- flow.records.add(iface.endpoint);
2461
+ rec(this.indexOf(iface.endpoint));
2250
2462
  } else if (g.endpoints.has(entry.id)) {
2251
2463
  for (const c of g.callers.get(entry.id) ?? []) {
2252
- flow.records.add(c.id);
2253
- flow.records.add(c.from);
2464
+ rec(this.indexOf(c.id));
2465
+ rec(this.indexOf(c.from));
2254
2466
  }
2255
2467
  }
2256
- const seen = /* @__PURE__ */ new Set();
2257
- const queue = [
2258
- { component: entry.component, toks: entry.tokens, depth: 0, mode: entry.mode }
2259
- ];
2260
- while (queue.length) {
2261
- const { component, toks, depth, mode } = queue.shift();
2262
- if (seen.has(component) || !g.isOwn(component))
2468
+ const queuedMark = this.queuedMark;
2469
+ const first = this.indexOf(entry.component);
2470
+ queuedMark[first] = pass;
2471
+ const queue = [{ component: entry.component, at: first, toks: entry.tokens, depth: 0, mode: entry.mode }];
2472
+ for (let q = 0; q < queue.length; q++) {
2473
+ const { component, at, toks, depth, mode } = queue[q];
2474
+ if (!this.ownAt(at, component))
2263
2475
  continue;
2264
- seen.add(component);
2265
- flow.records.add(component);
2266
- flow.visits.push({ component, tokens: toks });
2267
- for (const u of this.tablesFor(component, toks, mode))
2268
- flow.records.add(u.table.id);
2476
+ rec(at);
2477
+ visits?.push({ component, tokens: toks });
2478
+ this.tablesIx(component, toks, mode, rec);
2269
2479
  if (depth >= this.maxDepth)
2270
2480
  continue;
2271
- const outs = g.outOf(component);
2272
- let follow = outs.filter((i) => overlaps(toks, this.callTokens(i)));
2273
- if (!follow.length && this.starts(component).length <= 1)
2274
- follow = outs;
2275
- for (const i of follow) {
2276
- flow.hops.push(i);
2277
- flow.records.add(i.id);
2278
- flow.reached.add(i.id);
2279
- if (i.endpoint) {
2280
- flow.records.add(i.endpoint);
2281
- flow.reached.add(i.endpoint);
2481
+ const outs = this.outsOf(component);
2482
+ const { hit, n } = this.sharingHits(this.outWordsMemo, component, outs, toks, (i) => this.callTokens(i));
2483
+ const all = n === 0 && this.startCount(component) <= 1;
2484
+ if (n === 0 && !all)
2485
+ continue;
2486
+ const oix = this.outsIxOf(component, outs);
2487
+ for (let k = 0; k < outs.length; k++) {
2488
+ if (!all && !hit[k])
2489
+ continue;
2490
+ const i = outs[k];
2491
+ hops?.push(i);
2492
+ const id = oix[k * 3];
2493
+ const ep = oix[k * 3 + 1];
2494
+ const to = oix[k * 3 + 2];
2495
+ rec(id);
2496
+ reach(id);
2497
+ if (ep >= 0) {
2498
+ rec(ep);
2499
+ reach(ep);
2282
2500
  }
2283
- flow.records.add(i.to);
2284
- if (g.isOwn(i.to) && !seen.has(i.to))
2501
+ rec(to);
2502
+ if (queuedMark[to] !== pass && this.ownAt(to, i.to)) {
2503
+ queuedMark[to] = pass;
2285
2504
  queue.push({
2286
2505
  component: i.to,
2287
- toks: union(toks, this.hopTokens(i)),
2506
+ at: to,
2507
+ toks: unionNew(toks, this.hopTokens(i)),
2288
2508
  depth: depth + 1,
2289
2509
  mode: i.sync === "async" ? "any" : modeOf(i.method)
2290
2510
  });
2511
+ }
2291
2512
  }
2292
2513
  }
2293
- return flow;
2514
+ return {
2515
+ entry,
2516
+ records: Int32Array.from(records),
2517
+ reached: Int32Array.from(reached),
2518
+ ...visits ? { visits } : {},
2519
+ ...hops ? { hops } : {}
2520
+ };
2294
2521
  }
2295
2522
  };
2296
2523
  var Groups = class {
@@ -2309,7 +2536,11 @@ var Groups = class {
2309
2536
  let r = x;
2310
2537
  while (this.parent.get(r) !== r)
2311
2538
  r = this.parent.get(r);
2312
- this.parent.set(x, r);
2539
+ for (let y = x; y !== r; ) {
2540
+ const next = this.parent.get(y);
2541
+ this.parent.set(y, r);
2542
+ y = next;
2543
+ }
2313
2544
  return r;
2314
2545
  }
2315
2546
  join(a, b) {
@@ -2331,14 +2562,18 @@ var Groups = class {
2331
2562
  const out = /* @__PURE__ */ new Map();
2332
2563
  for (const id of [...this.parent.keys()].sort()) {
2333
2564
  const r = this.find(id);
2334
- out.set(r, [...out.get(r) ?? [], id]);
2565
+ const l = out.get(r);
2566
+ if (l)
2567
+ l.push(id);
2568
+ else
2569
+ out.set(r, [id]);
2335
2570
  }
2336
2571
  return [...out.values()];
2337
2572
  }
2338
2573
  };
2339
2574
  var isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
2340
2575
  function currentDecisions(decisions) {
2341
- return decisions.filter((d) => d.kind === "CuratedDecision" && d.status === "current").filter((d) => d.target.startsWith("feature.")).sort((a, b) => a.at === b.at ? a.id < b.id ? -1 : 1 : a.at < b.at ? -1 : 1);
2576
+ return decisions.filter((d) => d.kind === "CuratedDecision" && d.status === "current").filter((d) => d.target.startsWith("feature.")).sort(byDecisionTime);
2342
2577
  }
2343
2578
  function pinsFrom(decisions) {
2344
2579
  const latest = /* @__PURE__ */ new Map();
@@ -2355,6 +2590,15 @@ function pinsFrom(decisions) {
2355
2590
  return pins;
2356
2591
  }
2357
2592
  var evKey = (e) => JSON.stringify(Object.entries(e).sort());
2593
+ function withEachRepo(own, records) {
2594
+ const have = new Set(own.flatMap((e) => e.repo ? [e.repo] : []));
2595
+ const first = /* @__PURE__ */ new Map();
2596
+ for (const r of records)
2597
+ for (const e of r?.evidence ?? [])
2598
+ if (e.repo && !have.has(e.repo) && !first.has(e.repo))
2599
+ first.set(e.repo, e);
2600
+ return [...own, ...[...first].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([, e]) => e)];
2601
+ }
2358
2602
  function dedupeEvidence(list2) {
2359
2603
  const seen = /* @__PURE__ */ new Set();
2360
2604
  return list2.filter((e) => {
@@ -2399,14 +2643,44 @@ function detectFeaturesWithReport(records, o = {}) {
2399
2643
  });
2400
2644
  }
2401
2645
  }
2646
+ const byId2 = new Map(records.map((r) => [r.id, r]));
2402
2647
  const list2 = [...entries.values()].sort((a, b) => a.id < b.id ? -1 : 1);
2403
2648
  tracer.useEntries(list2);
2404
- const flows = new Map(list2.map((e) => [e.id, tracer.trace(e)]));
2649
+ const keep = o.keepFlows !== false;
2650
+ const traced = new Map(list2.map((e) => [e.id, tracer.traceIx(e, keep)]));
2651
+ const flows = /* @__PURE__ */ new Map();
2652
+ if (keep)
2653
+ for (const [id, f] of traced)
2654
+ flows.set(id, {
2655
+ entry: f.entry,
2656
+ records: new Set(Array.from(f.records, (k) => tracer.idOf(k))),
2657
+ reached: new Set(Array.from(f.reached, (k) => tracer.idOf(k))),
2658
+ visits: f.visits,
2659
+ hops: f.hops
2660
+ });
2661
+ const entryAt = /* @__PURE__ */ new Map();
2662
+ for (const e of list2)
2663
+ entryAt.set(tracer.indexOf(e.id), e.id);
2405
2664
  const groups = new Groups(list2.map((e) => e.id), (id) => pins.get(id));
2406
- for (const f of flows.values())
2407
- for (const r of sorted(f.reached))
2408
- if (r !== f.entry.id && entries.has(r) && ["endpoint", "consumer", "pinned"].includes(entries.get(r).kind))
2665
+ const reachers = /* @__PURE__ */ new Map();
2666
+ const joining = /* @__PURE__ */ new Set(["endpoint", "consumer", "pinned"]);
2667
+ for (const f of traced.values()) {
2668
+ const hit = [];
2669
+ for (const k of f.reached) {
2670
+ const r = entryAt.get(k);
2671
+ if (r !== void 0) {
2672
+ hit.push(r);
2673
+ const l = reachers.get(r);
2674
+ if (l)
2675
+ l.push(f.entry.id);
2676
+ else
2677
+ reachers.set(r, [f.entry.id]);
2678
+ }
2679
+ }
2680
+ for (const r of pins.size ? hit.sort() : hit)
2681
+ if (r !== f.entry.id && joining.has(entries.get(r).kind))
2409
2682
  groups.join(f.entry.id, r);
2683
+ }
2410
2684
  const bySlug = /* @__PURE__ */ new Map();
2411
2685
  for (const e of list2) {
2412
2686
  const s2 = slugOf(e.resource);
@@ -2419,7 +2693,8 @@ function detectFeaturesWithReport(records, o = {}) {
2419
2693
  const built = [];
2420
2694
  for (const members of groups.groups()) {
2421
2695
  const pin = members.map((m) => pins.get(m)).find(Boolean);
2422
- const reachedByOthers = (m) => members.some((x) => x !== m && flows.get(x).reached.has(m));
2696
+ const inGroup = new Set(members);
2697
+ const reachedByOthers = (m) => (reachers.get(m) ?? []).some((x) => x !== m && inGroup.has(x));
2423
2698
  const outer = members.filter((m) => !reachedByOthers(m)).sort();
2424
2699
  const inner = members.filter((m) => reachedByOthers(m)).sort();
2425
2700
  let resource = entries.get(members[0]).resource;
@@ -2442,12 +2717,23 @@ function detectFeaturesWithReport(records, o = {}) {
2442
2717
  taken.add(id);
2443
2718
  }
2444
2719
  let features = /* @__PURE__ */ new Map();
2445
- for (const b of built.sort((x, y) => x.id < y.id ? -1 : 1))
2720
+ const markedFor = [];
2721
+ let feature = 0;
2722
+ for (const b of built.sort((x, y) => x.id < y.id ? -1 : 1)) {
2723
+ feature++;
2724
+ const ids = [];
2725
+ for (const m of b.members)
2726
+ for (const k of traced.get(m).records)
2727
+ if (markedFor[k] !== feature) {
2728
+ markedFor[k] = feature;
2729
+ ids.push(tracer.idOf(k));
2730
+ }
2446
2731
  features.set(b.id, {
2447
2732
  members: b.members,
2448
2733
  name: displayName(b.resource),
2449
- records: new Set(b.members.flatMap((m) => [...flows.get(m).records]))
2734
+ records: new Set(ids)
2450
2735
  });
2736
+ }
2451
2737
  for (const d of decisions.filter((x) => x.action === "alias")) {
2452
2738
  const names = (Array.isArray(d.value) ? d.value : [d.value]).filter((v) => typeof v === "string" && v.startsWith("feature."));
2453
2739
  if (!names.length)
@@ -2482,16 +2768,17 @@ function detectFeaturesWithReport(records, o = {}) {
2482
2768
  const out = [];
2483
2769
  for (const [id, f] of features) {
2484
2770
  const p = proposals.get(id);
2771
+ const records2 = sorted(f.records);
2485
2772
  out.push(capability({
2486
2773
  id,
2487
2774
  name: p?.name ?? f.name,
2488
2775
  ...p?.description ? { description: p.description } : {},
2489
2776
  entryPoints: f.members,
2490
- records: sorted(f.records),
2777
+ records: records2,
2491
2778
  tags: p ? [...p.tags] : [],
2492
2779
  externalRefs: [],
2493
2780
  namedBy: p ? "ai" : "detected",
2494
- evidence: dedupeEvidence(f.members.flatMap((m) => entries.get(m).evidence))
2781
+ evidence: withEachRepo(dedupeEvidence(f.members.flatMap((m) => entries.get(m).evidence)), records2.map((r) => byId2.get(r)))
2495
2782
  }));
2496
2783
  }
2497
2784
  return { features: out, flows, problems };
@@ -2566,7 +2853,9 @@ async function featuresForScan(input) {
2566
2853
  const r = detectFeaturesWithReport(input.records, {
2567
2854
  decisions: input.decisions,
2568
2855
  proposals: read.proposals,
2569
- ...input.maxDepth ? { maxDepth: input.maxDepth } : {}
2856
+ ...input.maxDepth ? { maxDepth: input.maxDepth } : {},
2857
+ // A scan keeps the features only (ADR 0195 point 9: the flows of a big estate are large).
2858
+ keepFlows: false
2570
2859
  });
2571
2860
  return {
2572
2861
  features: r.features,
@@ -3915,6 +4204,11 @@ function knowledgeGaps(input) {
3915
4204
  }
3916
4205
  return out;
3917
4206
  }
4207
+ function ownerQuestionStillAsked(input) {
4208
+ const raised = new Set(knowledgeGaps(input).map((g) => g.question.id));
4209
+ const checks = [...KNOWLEDGE_CHECKS, ...input.checks ?? []].map((c) => `q.${c.id}.`);
4210
+ return (r) => r.kind !== "OwnerQuestion" || raised.has(r.id) || !checks.some((p) => r.id.startsWith(p));
4211
+ }
3918
4212
 
3919
4213
  // packages/knowledge/dist/coverage.js
3920
4214
  var COVERAGE_AREAS = [
@@ -4169,6 +4463,7 @@ var TYPE = {
4169
4463
  };
4170
4464
  function domainProfile(records, system, o) {
4171
4465
  const all = [...records].sort((a, b) => cmp(a.id, b.id));
4466
+ const stillAsked = o.orgPack ? ownerQuestionStillAsked({ records, orgPack: o.orgPack, now: o.now }) : void 0;
4172
4467
  const byId2 = new Map(all.map((r) => [r.id, r]));
4173
4468
  const of = (kind) => all.filter((r) => r.kind === kind);
4174
4469
  const sys = byId2.get(system);
@@ -4280,7 +4575,7 @@ function domainProfile(records, system, o) {
4280
4575
  `- Who is the business owner of ${name2}? (product owner)`,
4281
4576
  `- Which controls and obligations apply to ${name2}, and under which policy or decision? (architect)`,
4282
4577
  ...stores.map((d) => `- What are the classification and retention of the data in ${d.id}? (data owner)`),
4283
- ...of("OwnerQuestion").filter((q) => s(q.system) === system).map((q) => `- ${s(q.question)} (${s(q.owner) ?? "owner"}, ${s(q.questionState) ?? "open"})`),
4578
+ ...of("OwnerQuestion").filter((q) => s(q.system) === system).filter((q) => !stillAsked || stillAsked(q) || q.questionState === "answered").map((q) => `- ${s(q.question)} (${s(q.owner) ?? "owner"}, ${s(q.questionState) ?? "open"})`),
4284
4579
  ...[
4285
4580
  ...new Set(of("Unresolved").filter((u) => own.has(s(u.owner) ?? "")).map((u) => s(u.owner)))
4286
4581
  ].sort().map((c) => {
@@ -8503,6 +8798,7 @@ export {
8503
8798
  freshness,
8504
8799
  KNOWLEDGE_CHECKS,
8505
8800
  knowledgeGaps,
8801
+ ownerQuestionStillAsked,
8506
8802
  COVERAGE_AREAS,
8507
8803
  featureCoverage,
8508
8804
  coverage,