@maycombhq/atticus 2.0.0-beta.10 → 2.0.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/dist/bin.js +3 -3
  2. package/dist/{chunk-AY2IUF4K.js → chunk-22GLUHGE.js} +659 -73
  3. package/dist/{chunk-CIUHAHM6.js → chunk-2A24BNRZ.js} +8 -8
  4. package/dist/{chunk-2RX7PI2Y.js → chunk-2ELFEKOO.js} +4 -4
  5. package/dist/{chunk-QKEFZRHS.js → chunk-2P6IHSRO.js} +17 -17
  6. package/dist/chunk-2Q2YBAR5.js +40 -0
  7. package/dist/{chunk-7DUDLVFJ.js → chunk-2VQLFNBO.js} +20 -20
  8. package/dist/{chunk-E3Z67HRK.js → chunk-3256EDLL.js} +4 -4
  9. package/dist/{chunk-OIU657QQ.js → chunk-34BCKMBS.js} +4 -4
  10. package/dist/{chunk-UR7RMZ3R.js → chunk-34NWVIBC.js} +2 -2
  11. package/dist/{chunk-6VBXAGJX.js → chunk-36KD4OGC.js} +14 -14
  12. package/dist/{chunk-I7IWQIEB.js → chunk-3CFBU2O6.js} +4 -4
  13. package/dist/{chunk-OSGQW2Z6.js → chunk-3JLTN3Y7.js} +8 -8
  14. package/dist/{chunk-FOGG4AUR.js → chunk-3M7QBKKG.js} +25 -7
  15. package/dist/{chunk-UF7TAFJM.js → chunk-3RP34PYV.js} +18 -18
  16. package/dist/{chunk-YLAJAI2W.js → chunk-3ZKLWM5Y.js} +11 -11
  17. package/dist/{chunk-LTQANUDH.js → chunk-47HPZ34V.js} +25 -25
  18. package/dist/chunk-4BPROPGG.js +45 -0
  19. package/dist/{chunk-Y4BRGOJR.js → chunk-4G56W6H7.js} +13 -10
  20. package/dist/{chunk-YXJ4XOHF.js → chunk-4HIQ2FTI.js} +4 -4
  21. package/dist/{chunk-AJJK7GLO.js → chunk-4HTILEXW.js} +3 -3
  22. package/dist/{chunk-OJLRFGBP.js → chunk-4Q2PGM5T.js} +78 -15
  23. package/dist/{chunk-GR6YKM55.js → chunk-4RDW2X43.js} +108 -14
  24. package/dist/{chunk-23M2LUYM.js → chunk-4VOG5H2K.js} +1 -1
  25. package/dist/chunk-5CSZTVXH.js +34 -0
  26. package/dist/{chunk-65C57N7P.js → chunk-5FFMJMVH.js} +19 -19
  27. package/dist/{chunk-XNYNEEBR.js → chunk-5GGGAI5C.js} +18 -18
  28. package/dist/{chunk-IUD3ME4E.js → chunk-5H46QFSL.js} +4 -4
  29. package/dist/{chunk-KIHOIVST.js → chunk-5ION6STH.js} +3 -3
  30. package/dist/chunk-5M3CLAOV.js +39 -0
  31. package/dist/chunk-5OACMWWI.js +886 -0
  32. package/dist/{chunk-2HMWX4T6.js → chunk-6ENDKY52.js} +11 -11
  33. package/dist/{chunk-OS7PQ35Z.js → chunk-6FG7QKJC.js} +22 -22
  34. package/dist/{chunk-FEZE6NIA.js → chunk-6JV3YHRR.js} +18 -18
  35. package/dist/{chunk-WGZWR4RF.js → chunk-6ROZRBWH.js} +5 -5
  36. package/dist/{chunk-WARBF2KY.js → chunk-6S27MUQQ.js} +10 -6
  37. package/dist/{chunk-TZDSDDSV.js → chunk-72DY5NCN.js} +2 -2
  38. package/dist/chunk-76QVBNEM.js +37 -0
  39. package/dist/{chunk-N4QZJJVB.js → chunk-77UOXZVM.js} +5 -5
  40. package/dist/{chunk-LVGBKKSM.js → chunk-7AXMUE2U.js} +15 -15
  41. package/dist/{chunk-FJCFYKVO.js → chunk-7TEQF64E.js} +196 -76
  42. package/dist/{chunk-IDGSU7JF.js → chunk-7TH6I6TL.js} +9 -9
  43. package/dist/{chunk-ZONE6E3Z.js → chunk-7UKETVPW.js} +2 -2
  44. package/dist/{chunk-XKS6THI5.js → chunk-7VNEDDCC.js} +2 -2
  45. package/dist/{chunk-BMHGA7WD.js → chunk-A5GY2EWH.js} +12 -12
  46. package/dist/{chunk-E3JYO547.js → chunk-AEZ3EICK.js} +20 -20
  47. package/dist/{chunk-7F2RUWPU.js → chunk-ARLH2ZMD.js} +1 -1
  48. package/dist/{chunk-VKMTFIWS.js → chunk-AYVLEB55.js} +18 -18
  49. package/dist/chunk-B6X5PJSA.js +320 -0
  50. package/dist/{chunk-JMSEEBN4.js → chunk-BRCDEGNE.js} +1 -1
  51. package/dist/{chunk-67J3VZBA.js → chunk-BSVTNNUK.js} +5 -5
  52. package/dist/{chunk-3GTZ2OON.js → chunk-BTOGAUWX.js} +20 -11
  53. package/dist/{chunk-4SVJNVEE.js → chunk-BXBCMGIQ.js} +2 -0
  54. package/dist/chunk-BXP2Q4TD.js +48 -0
  55. package/dist/{chunk-XPEEICAO.js → chunk-BZRWJUB4.js} +15 -15
  56. package/dist/{chunk-MH5OCRUM.js → chunk-CH6LUQLD.js} +2 -2
  57. package/dist/{chunk-T6USVBEJ.js → chunk-CIIRPLI6.js} +5 -5
  58. package/dist/chunk-CJXM6SG4.js +339 -0
  59. package/dist/{chunk-5XDNUJ4P.js → chunk-CQD26SMZ.js} +4 -2
  60. package/dist/{chunk-7TGYNOXD.js → chunk-CW5SEPUT.js} +7 -7
  61. package/dist/{chunk-5KTOPOEP.js → chunk-CWSZP2LU.js} +25 -25
  62. package/dist/chunk-CXK27ZUY.js +32 -0
  63. package/dist/{chunk-YGKYFMSL.js → chunk-CXY4YDXS.js} +3 -3
  64. package/dist/{chunk-R64GLVBO.js → chunk-DDZZXVQ5.js} +10 -10
  65. package/dist/{chunk-7YYEKTYF.js → chunk-DGZXJO5I.js} +8 -8
  66. package/dist/{chunk-IV7BCWWN.js → chunk-DONCF2XC.js} +3 -3
  67. package/dist/{chunk-RRVT4MPS.js → chunk-DPNCAFMB.js} +18 -18
  68. package/dist/{chunk-UBWCUP3G.js → chunk-DQKNOHUZ.js} +2 -2
  69. package/dist/{chunk-NGPU2ARF.js → chunk-DW4BM73R.js} +1 -1
  70. package/dist/{chunk-PEF5OEMB.js → chunk-DWN7RSNQ.js} +4 -4
  71. package/dist/{chunk-KC5DROFC.js → chunk-DWYPYVPJ.js} +14 -14
  72. package/dist/{chunk-B7434AE2.js → chunk-E73QLYK7.js} +24 -3
  73. package/dist/{chunk-EX6ZXS5K.js → chunk-EE3UNC44.js} +4 -4
  74. package/dist/chunk-EJDZEK22.js +53 -0
  75. package/dist/{chunk-ISNZYKAS.js → chunk-ENZWVTTN.js} +21 -21
  76. package/dist/{chunk-ROTY5J2L.js → chunk-EREL3TQG.js} +1 -1
  77. package/dist/{chunk-ZZXF6OOJ.js → chunk-ESGIBN3S.js} +2 -2
  78. package/dist/{chunk-YGR6OCHQ.js → chunk-EU7VTBAI.js} +8 -14
  79. package/dist/chunk-F5GA6G3U.js +48 -0
  80. package/dist/{chunk-JAA53T23.js → chunk-F6FGIYPT.js} +20 -20
  81. package/dist/{chunk-NPCD54I7.js → chunk-FAET4BB6.js} +8 -5
  82. package/dist/{chunk-YPBQNJHA.js → chunk-FBFSTYAB.js} +8 -8
  83. package/dist/{chunk-OEI7LVRP.js → chunk-FEBYMFZA.js} +24 -24
  84. package/dist/chunk-FMV6IZ3P.js +54 -0
  85. package/dist/{chunk-F7UQR4ZX.js → chunk-FQ6IBYFC.js} +3 -3
  86. package/dist/{chunk-J5LHDJU4.js → chunk-FSJMFPA3.js} +7 -7
  87. package/dist/chunk-GFZ5MIQG.js +47 -0
  88. package/dist/{chunk-LK44ULGI.js → chunk-GHSVJNVL.js} +104 -11
  89. package/dist/{chunk-LRS573EX.js → chunk-GKPOCUQR.js} +12 -7
  90. package/dist/{chunk-LDKUC2QJ.js → chunk-GLSNVC67.js} +17 -17
  91. package/dist/{chunk-47QE246J.js → chunk-GMDOXWIS.js} +5 -5
  92. package/dist/{chunk-5MI2SEV5.js → chunk-GN5ZLSLD.js} +3 -3
  93. package/dist/{chunk-JQ7XQPQS.js → chunk-GUNBOZ75.js} +4 -4
  94. package/dist/{chunk-HHUFVJF7.js → chunk-GYS64N6F.js} +6 -6
  95. package/dist/{chunk-AKJTKMXU.js → chunk-HIQWJ6JZ.js} +5 -5
  96. package/dist/{chunk-6GNS32SI.js → chunk-HJ52XDST.js} +4 -4
  97. package/dist/{chunk-2KDSXJFJ.js → chunk-HJUEQERG.js} +34 -7
  98. package/dist/chunk-HKGQUOQ3.js +88 -0
  99. package/dist/chunk-HP32HUWR.js +41 -0
  100. package/dist/{chunk-R4TBNKKC.js → chunk-HY2VVVFZ.js} +1249 -610
  101. package/dist/{chunk-G5SFOH7P.js → chunk-I2PNEG3M.js} +38 -23
  102. package/dist/{chunk-Y5PZHS4K.js → chunk-INCECZ2E.js} +5 -5
  103. package/dist/{chunk-RK6MKKKP.js → chunk-ISXNWUG7.js} +1 -1
  104. package/dist/{chunk-73VPWF5R.js → chunk-ITJ7ST5E.js} +4 -4
  105. package/dist/{chunk-5IALSMZ2.js → chunk-J3VAFDEX.js} +14 -14
  106. package/dist/chunk-JGLZUQVN.js +29 -0
  107. package/dist/{chunk-5XN76FTF.js → chunk-JLIEAQP4.js} +5 -5
  108. package/dist/{chunk-MGVYVW7Q.js → chunk-JQG4VO47.js} +1 -1
  109. package/dist/chunk-JXXQHETS.js +130 -0
  110. package/dist/{chunk-APSVL2AI.js → chunk-KNGESBFW.js} +15 -15
  111. package/dist/{chunk-7UKVYFQ2.js → chunk-KUYA2E7M.js} +8 -8
  112. package/dist/{chunk-WLIIQ2A4.js → chunk-KY2ZHTBJ.js} +7 -7
  113. package/dist/{chunk-YPIEYQF4.js → chunk-L4UIKAWD.js} +6 -6
  114. package/dist/chunk-LDUJ6NIT.js +247 -0
  115. package/dist/{chunk-5YIBJXGB.js → chunk-LTLR4JZJ.js} +10 -10
  116. package/dist/{chunk-IZNSAEBX.js → chunk-MFRPLAOH.js} +2 -2
  117. package/dist/{chunk-6GWHKMQR.js → chunk-MH7UBG47.js} +4 -4
  118. package/dist/{chunk-4GZXS6S2.js → chunk-MLAACAES.js} +278 -17
  119. package/dist/{chunk-D3PO4DOZ.js → chunk-MMB2OHUY.js} +4 -2
  120. package/dist/{chunk-DDAHCPGA.js → chunk-MNCQ2GL7.js} +12 -12
  121. package/dist/{chunk-UYYN2IUZ.js → chunk-MNUZX67F.js} +6 -6
  122. package/dist/{chunk-YFSSNGLR.js → chunk-MQHYCS6A.js} +32 -29
  123. package/dist/{chunk-MKRBG5EF.js → chunk-MRLCNXXR.js} +1 -1
  124. package/dist/{chunk-BUYJL3GJ.js → chunk-NBQO75XT.js} +1 -1
  125. package/dist/{chunk-GXJVY6WT.js → chunk-NCONDPHH.js} +5 -5
  126. package/dist/{chunk-ZP4FJHR4.js → chunk-NHS55U7T.js} +18 -18
  127. package/dist/{chunk-CRE4BJHM.js → chunk-NL6XQZSV.js} +23 -23
  128. package/dist/{chunk-YVLMBAYE.js → chunk-NSJ6ZR2A.js} +3 -3
  129. package/dist/{chunk-XRO65C7V.js → chunk-NTNJNRHW.js} +8 -6
  130. package/dist/{chunk-FTV6I76U.js → chunk-NTTXTLCQ.js} +25 -25
  131. package/dist/chunk-NWL7XEQ4.js +37 -0
  132. package/dist/{chunk-CNKGYDMG.js → chunk-NWXY3B4R.js} +23 -23
  133. package/dist/{chunk-52R2YXP5.js → chunk-O5W4ECUY.js} +16 -16
  134. package/dist/{chunk-OGRWQ562.js → chunk-O6ILVBYB.js} +2 -2
  135. package/dist/{chunk-BJPMKJTL.js → chunk-OJAJXU65.js} +102 -2
  136. package/dist/{chunk-FZL2HNWP.js → chunk-OMH3I5BH.js} +3 -3
  137. package/dist/{chunk-MF7QH4AX.js → chunk-P6UJ22XR.js} +5 -5
  138. package/dist/{chunk-HE4ZQXZM.js → chunk-P76AW3PA.js} +309 -15
  139. package/dist/{chunk-GZ4TKR3Q.js → chunk-PCCPXWJC.js} +48 -139
  140. package/dist/{chunk-6TJCUYC5.js → chunk-PGFRXGHA.js} +3 -3
  141. package/dist/{chunk-NIXVDQVO.js → chunk-PJRMMWU4.js} +2 -2
  142. package/dist/{chunk-X4W4XXWP.js → chunk-PKJ3K3GM.js} +5 -5
  143. package/dist/{chunk-KM2FBM3T.js → chunk-PVW2N63M.js} +302 -55
  144. package/dist/{chunk-Y7KBQ4BD.js → chunk-Q55UP5EZ.js} +22 -22
  145. package/dist/{chunk-7URGP4DD.js → chunk-QAFMLBPF.js} +12 -12
  146. package/dist/{chunk-KIAI6PWL.js → chunk-QEZSA2O7.js} +17 -17
  147. package/dist/{chunk-PKCMRPPB.js → chunk-QJ3OX7OC.js} +33 -27
  148. package/dist/{chunk-6EDQE7GO.js → chunk-QL4VNY4U.js} +2 -2
  149. package/dist/{chunk-6JLPXDWN.js → chunk-QR65C3DV.js} +5 -5
  150. package/dist/{chunk-ILFKECGI.js → chunk-QXGOEP44.js} +4 -4
  151. package/dist/chunk-QY7RGTUP.js +326 -0
  152. package/dist/{chunk-PGKHJYOB.js → chunk-RA64IK43.js} +1 -1
  153. package/dist/{chunk-XB5RFZHH.js → chunk-RLJDYLID.js} +12 -12
  154. package/dist/{chunk-AWECWW5Y.js → chunk-RMLUZYEA.js} +13 -11
  155. package/dist/chunk-RSVBX6A3.js +54 -0
  156. package/dist/chunk-RZWZO2JQ.js +42 -0
  157. package/dist/chunk-S5LSDXV4.js +40 -0
  158. package/dist/{chunk-TM7LC37P.js → chunk-SAC6FNKR.js} +181 -117
  159. package/dist/{chunk-DPHCFZ7W.js → chunk-SCBU46AJ.js} +3 -3
  160. package/dist/{chunk-EZIUFEN6.js → chunk-SGNHNN3G.js} +12 -12
  161. package/dist/{chunk-XKZHAD6Y.js → chunk-SHAAGH3T.js} +15 -15
  162. package/dist/chunk-SK5OYWIY.js +122 -0
  163. package/dist/{chunk-FR7JPYBD.js → chunk-SNSFQ47W.js} +12 -12
  164. package/dist/{chunk-FV5YFR6I.js → chunk-SSL6JMPA.js} +9 -9
  165. package/dist/{chunk-XEG3FE2R.js → chunk-TA2ZNDYD.js} +1 -1
  166. package/dist/{chunk-JF2NSTFO.js → chunk-TEHH47TG.js} +3 -3
  167. package/dist/{chunk-W5OYJMBT.js → chunk-TEZSZ24W.js} +5 -5
  168. package/dist/{chunk-SS66Q4VE.js → chunk-TH526O6E.js} +12 -12
  169. package/dist/{chunk-R6B6XAKK.js → chunk-TIAPEYWI.js} +4 -4
  170. package/dist/chunk-TLCRIAU3.js +44 -0
  171. package/dist/{chunk-FMKKVWZD.js → chunk-TQYBXDVH.js} +2 -2
  172. package/dist/chunk-TV4CGNEY.js +43 -0
  173. package/dist/{chunk-QICFHVRW.js → chunk-TVSNWIAM.js} +8 -6
  174. package/dist/{chunk-CHC5FKTU.js → chunk-TWHZU36X.js} +1 -1
  175. package/dist/{chunk-BMCKL3VQ.js → chunk-TXV2AYZB.js} +24 -24
  176. package/dist/{chunk-577AJVRS.js → chunk-U25OX22K.js} +2039 -289
  177. package/dist/{chunk-7EKESFWV.js → chunk-U4NNG3ES.js} +11 -11
  178. package/dist/{chunk-XQ3YIV5R.js → chunk-U5T4A2QV.js} +6 -6
  179. package/dist/{chunk-2XM6PYQQ.js → chunk-UT5OA7KA.js} +43 -11
  180. package/dist/{chunk-BXIX7S7O.js → chunk-V3VCUSQ6.js} +15 -15
  181. package/dist/{chunk-4QUQEBFT.js → chunk-V5XV3JSP.js} +6 -6
  182. package/dist/{chunk-F7YL2RZ4.js → chunk-VF4VOPMB.js} +23 -23
  183. package/dist/{chunk-3QAKDIEU.js → chunk-VLDM4QZM.js} +23 -23
  184. package/dist/chunk-VP5H6DII.js +34 -0
  185. package/dist/{chunk-N3NBWIYQ.js → chunk-VRYQJZFL.js} +10 -9
  186. package/dist/{chunk-FQSRHTTC.js → chunk-VS6FS472.js} +15 -15
  187. package/dist/{chunk-YMOJD5BO.js → chunk-VTMIRRIZ.js} +3 -3
  188. package/dist/{chunk-4PJADZRR.js → chunk-VXSJKWB7.js} +16 -16
  189. package/dist/{chunk-MTAUZW2Z.js → chunk-WE5VMPUP.js} +216 -106
  190. package/dist/{chunk-ZE3P35DA.js → chunk-WEG7DY5K.js} +9 -9
  191. package/dist/{chunk-V2TH46ZY.js → chunk-WIF7A6JU.js} +12 -12
  192. package/dist/{chunk-GFXLPJWY.js → chunk-WM4N2L4T.js} +2 -2
  193. package/dist/{chunk-XIWYUQZQ.js → chunk-X64BFQ3R.js} +9 -9
  194. package/dist/{chunk-QWVBEK4P.js → chunk-XJRC3ZDI.js} +13 -13
  195. package/dist/{chunk-F2FOQLJ7.js → chunk-XVIVWG7B.js} +6 -6
  196. package/dist/{chunk-XTVDAHH2.js → chunk-Y3ZKT6IF.js} +5 -5
  197. package/dist/{chunk-62YMDXY6.js → chunk-YURIUFKF.js} +16 -16
  198. package/dist/{chunk-HKTUIMH4.js → chunk-YY2WGL6S.js} +3 -3
  199. package/dist/{chunk-BDEKREZH.js → chunk-Z2BA4NNR.js} +3 -3
  200. package/dist/{chunk-MTEBM4Y4.js → chunk-Z47YGBUY.js} +19 -12
  201. package/dist/chunk-Z4JSRKNR.js +41 -0
  202. package/dist/{chunk-G2E5MNYP.js → chunk-Z53ZB34U.js} +7 -7
  203. package/dist/{chunk-NNUASOAA.js → chunk-ZBOPIYOY.js} +12 -12
  204. package/dist/{chunk-7GB4ZRE2.js → chunk-ZBQCLKTH.js} +12 -12
  205. package/dist/chunk-ZGI7DNJ6.js +38 -0
  206. package/dist/{chunk-P3TKKBAH.js → chunk-ZPT4QX3J.js} +4 -4
  207. package/dist/chunk-ZS47PQ3O.js +41 -0
  208. package/dist/{chunk-PIVKU64W.js → chunk-ZTIMXVV5.js} +2 -2
  209. package/dist/{chunk-T4RTWMJD.js → chunk-ZYASEL7K.js} +5 -5
  210. package/dist/files.json +469 -417
  211. package/dist/packages/sdk/npm/index.js +2309 -1983
  212. package/dist/packages/ui/dist/assets/{elk-api-Mo5w5xCa.js → elk-api-D2NcYpUJ.js} +2 -2
  213. package/dist/packages/ui/dist/assets/{index-Bp3XhPHX.css → index-C0JEkXyN.css} +1 -1
  214. package/dist/packages/ui/dist/assets/index-CT7skl01.js +29 -0
  215. package/dist/packages/ui/dist/index.html +2 -2
  216. package/package.json +4 -4
  217. package/dist/chunk-26PLPSQW.js +0 -48
  218. package/dist/chunk-2G4DFUWJ.js +0 -43
  219. package/dist/chunk-2M6WXO73.js +0 -38
  220. package/dist/chunk-5F3RJCHB.js +0 -45
  221. package/dist/chunk-B2VSVN4P.js +0 -34
  222. package/dist/chunk-B3O52AUQ.js +0 -275
  223. package/dist/chunk-CITDNDIZ.js +0 -53
  224. package/dist/chunk-DAQBIK5G.js +0 -47
  225. package/dist/chunk-DZRQDNPT.js +0 -34
  226. package/dist/chunk-FLOEZA6K.js +0 -29
  227. package/dist/chunk-FNHSVBRA.js +0 -48
  228. package/dist/chunk-FPGVOSOG.js +0 -41
  229. package/dist/chunk-FZ2E5LGK.js +0 -54
  230. package/dist/chunk-HB6XSGI6.js +0 -131
  231. package/dist/chunk-HUZQDKQK.js +0 -48
  232. package/dist/chunk-L4VJ4ETL.js +0 -41
  233. package/dist/chunk-XPCWQXTY.js +0 -37
  234. package/dist/chunk-YIEOFHOL.js +0 -30
  235. package/dist/packages/ui/dist/assets/index-DM212ZbV.js +0 -29
@@ -5,11 +5,12 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
5
  var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
6
  import {
7
7
  readOpenApiDocument
8
- } from "./chunk-UR7RMZ3R.js";
8
+ } from "./chunk-34NWVIBC.js";
9
9
  import {
10
10
  globToRegExp
11
- } from "./chunk-MKRBG5EF.js";
11
+ } from "./chunk-MRLCNXXR.js";
12
12
  import {
13
+ DECLARED_TOPIC,
13
14
  DEFAULT_CONVENTIONS,
14
15
  Fact,
15
16
  FactId,
@@ -29,6 +30,7 @@ import {
29
30
  isSecretPath,
30
31
  lineNamesClaim,
31
32
  normalizePath,
33
+ noteProblem,
32
34
  partsBuildWord,
33
35
  partsNamePath,
34
36
  plainPathPrefix,
@@ -38,7 +40,7 @@ import {
38
40
  staleCite,
39
41
  toCanonicalYaml,
40
42
  underFolders
41
- } from "./chunk-577AJVRS.js";
43
+ } from "./chunk-U25OX22K.js";
42
44
 
43
45
  // packages/verify/dist/source.js
44
46
  import { readdirSync, readFileSync, statSync } from "node:fs";
@@ -136,8 +138,11 @@ var FRAMEWORKS = [
136
138
  var KNOWN = [
137
139
  // Java and Kotlin
138
140
  ["spring-boot*", { name: "spring-boot", topic: "spring", shape: "rest" }],
139
- // the annotation a Spring Boot app's main class carries, which a reader may cite instead
141
+ // the annotations a Spring Boot app's main class carries, which a reader may cite instead
142
+ // (matched by `annotationKey`, so bare, qualified or with arguments)
140
143
  ["@springbootapplication", { name: "spring-boot", topic: "spring", shape: "rest" }],
144
+ ["@enableautoconfiguration", { name: "spring-boot", topic: "spring", shape: "rest" }],
145
+ ["@quarkusmain", { name: "quarkus", topic: "quarkus" }],
141
146
  ["spring-webmvc", { name: "spring", topic: "spring", shape: "rest" }],
142
147
  ["spring-webflux", { name: "spring", topic: "spring", shape: "rest" }],
143
148
  ["spring-web", { name: "spring", topic: "spring", shape: "rest" }],
@@ -189,6 +194,10 @@ function declarationKey(declared) {
189
194
  const name = colon.split(/[=<>~!,\s[]/)[0] ?? colon;
190
195
  return name.replace(/^['"]|['"]$/g, "");
191
196
  }
197
+ function annotationKey(declared) {
198
+ const m = /^@?(?:[a-z_$][\w$]*\.)*([A-Z][\w$]*)\s*(?:\(.*)?$/s.exec(declared.trim());
199
+ return m ? `@${m[1].toLowerCase()}` : void 0;
200
+ }
192
201
  function houseKnown(extra) {
193
202
  return extra.map((e) => [
194
203
  e.declares.toLowerCase(),
@@ -203,19 +212,27 @@ function frameworkOf(declared, extra = []) {
203
212
  const key = declarationKey(declared);
204
213
  if (!key)
205
214
  return void 0;
206
- for (const [pattern, known] of extra.length ? [...houseKnown(extra), ...KNOWN] : KNOWN) {
215
+ const table = extra.length ? [...houseKnown(extra), ...KNOWN] : KNOWN;
216
+ for (const [pattern, known] of table) {
207
217
  const star = pattern.endsWith("*");
208
218
  const p = star ? pattern.slice(0, -1) : pattern;
209
219
  if (star ? key.startsWith(p) : key === p)
210
220
  return known;
211
221
  }
222
+ const ann = annotationKey(declared);
223
+ if (ann) {
224
+ for (const [pattern, known] of table)
225
+ if (pattern === ann)
226
+ return known;
227
+ }
212
228
  return void 0;
213
229
  }
214
230
  function frameworkNameProblem(f, extra = []) {
215
231
  const known = frameworkOf(f.cite.value, extra);
216
232
  const name = f.name.trim().toLowerCase();
217
233
  if (known) {
218
- return name === known.name.toLowerCase() ? void 0 : `names the framework "${f.name}", but ${f.cite.file}:${f.cite.line} declares ${f.cite.value}, which is ${known.name}`;
234
+ const legacy = annotationKey(f.cite.value) === `@${name}`;
235
+ return name === known.name.toLowerCase() || legacy ? void 0 : `names the framework "${f.name}", but ${f.cite.file}:${f.cite.line} declares ${f.cite.value}, which is ${known.name}`;
219
236
  }
220
237
  const key = declarationKey(f.cite.value);
221
238
  if (declarationKey(name) === key || name === key)
@@ -405,6 +422,54 @@ function authPolicyMismatch(auth, file, policy, lines) {
405
422
  }
406
423
  var authChecks = (auth) => CHECKS[auth] ?? auth;
407
424
 
425
+ // packages/verify/dist/call-security-lines.js
426
+ var CLIENT_CERT = /client[-_ .]?cert|keystore|key[-_ .]?store|ssl[-_ .]?bundle|\.pfx\b|\.p12\b|pkcs12|\bpfx\b|\bp12\b/i;
427
+ var CERT_AND_KEY = (l) => /\bcert\b/i.test(l) && /\bkey\b/i.test(l);
428
+ var KINDS = {
429
+ "tls mtls": {
430
+ test: (l) => CLIENT_CERT.test(l) || CERT_AND_KEY(l),
431
+ needs: "a client certificate, a key store or an SSL bundle"
432
+ },
433
+ "tls tls": { test: (l) => /https|ssl|tls/i.test(l), needs: "https, SSL or TLS" },
434
+ "tls none": {
435
+ test: (l) => !/https:\/\//i.test(l) && (/http:\/\//i.test(l) || /\b(false|disabled?|insecure|plain-?text|off)\b/i.test(l)),
436
+ needs: "a plain http:// URL or a TLS switch set off"
437
+ },
438
+ "auth oauth2": {
439
+ test: (l) => /oauth|token|bearer|jwt|authori[sz]|client[-_ ]?credentials|access[-_ ]?token/i.test(l),
440
+ needs: "a token (OAuth, bearer, JWT or an Authorization header)"
441
+ },
442
+ "auth api-key": {
443
+ test: (l) => /api[-_ ]?key|apikey|x-api|subscription[-_ ]?key|[a-z0-9][-_]key\b/i.test(l),
444
+ needs: "a key"
445
+ },
446
+ "auth basic": {
447
+ test: (l) => /basic|password|passwd|username|credential/i.test(l),
448
+ needs: "a password or basic credentials"
449
+ },
450
+ "auth mtls": {
451
+ test: (l) => CLIENT_CERT.test(l) || CERT_AND_KEY(l),
452
+ needs: "a client certificate, a key store or an SSL bundle"
453
+ }
454
+ };
455
+ function securityLineKind(what, claim, lines) {
456
+ const k = KINDS[`${what} ${claim}`];
457
+ if (!k)
458
+ return void 0;
459
+ return lines.some((l) => k.test(l)) ? void 0 : k.needs;
460
+ }
461
+ function lineOfValue(lines, line, value) {
462
+ if (!lines)
463
+ return void 0;
464
+ const v = value.toLowerCase();
465
+ for (const n of [line, line - 1, line + 1]) {
466
+ const l = lines[n - 1];
467
+ if (l !== void 0 && l.toLowerCase().includes(v))
468
+ return l;
469
+ }
470
+ return lines[line - 1];
471
+ }
472
+
408
473
  // packages/verify/dist/corrections.js
409
474
  function correctionFor(f, corrections) {
410
475
  const at = (c) => c.target.kind === f.kind && c.target.file === f.cite.file && c.target.line === f.cite.line;
@@ -1445,6 +1510,17 @@ var topicContext = (line) => {
1445
1510
  const w = wordsOf2(line);
1446
1511
  return w.some((x) => TOPIC_WORDS.has(x)) || w.join(" ").includes("routing key");
1447
1512
  };
1513
+ var BUILD_KEY_WORDS = new Set("scm git gitlab github bitbucket repository repositories repo registry mirror mirrors nexus artifactory snapshot snapshots distribution maven npm nuget pypi sonar sonarqube jenkins ci".split(" "));
1514
+ var BUILD_BLOCK_TAG = /<(\/?)(repositories|repository|pluginRepositories|pluginRepository|snapshotRepository|distributionManagement|scm|mirrors|mirror|site)\b[^>]*?(\/?)>/gi;
1515
+ var BUILD_BLOCK_OPEN = /\b(repositories|publishing|pluginManagement|dependencyResolutionManagement)\s*\{/;
1516
+ var keysBefore = (prefix) => [
1517
+ ...[...prefix.matchAll(/<([A-Za-z][\w:.-]*)/g)].map((m) => m[1]),
1518
+ ...[...prefix.matchAll(/["']?([A-Za-z][\w.-]*)["']?\s*[:=]/g)].map((m) => m[1]),
1519
+ ...[...prefix.matchAll(/\b([A-Za-z]\w*)\s*\{/g)].map((m) => m[1])
1520
+ ];
1521
+ var isBuildUrl = (u, prefix) => /\.git\/?$/i.test(u) || /\bscm:\w+:$/i.test(prefix) || keysBefore(prefix).some((k) => wordsOf2(k).some((w) => BUILD_KEY_WORDS.has(w)));
1522
+ var HEADER_ARG = /header\w*\s*(?:\.\s*\w+\s*)?\(\s*(?:(?:value|name)\s*=\s*)?$/i;
1523
+ var isHeaderName = (s, prefix) => /^x-/i.test(s) || HEADER_ARG.test(prefix.replace(/["'`]$/, ""));
1448
1524
  var cleanUrl = (u) => u.replace(/[.:]+$/, "").replace(/^([a-z0-9+.-]+:\/\/)[^/@\s]+@/i, "$1<redacted>@");
1449
1525
  var hostOf = (u) => /^[a-z0-9+.-]+:\/\/([^/:?#]+)/i.exec(u)?.[1] ?? "";
1450
1526
  function pathOf(s) {
@@ -1494,9 +1570,19 @@ function codeOf(raw, state) {
1494
1570
  function candidatesIn(path, lines) {
1495
1571
  const out = [];
1496
1572
  const state = {};
1573
+ let xmlDepth = 0;
1574
+ let braceDepth = 0;
1497
1575
  lines.forEach((raw, i) => {
1498
1576
  const wasBlock = state.block !== void 0;
1499
1577
  let code2 = codeOf(raw, state);
1578
+ const inBuild = xmlDepth > 0 || braceDepth > 0;
1579
+ for (const m of code2.matchAll(BUILD_BLOCK_TAG))
1580
+ if (!m[3])
1581
+ xmlDepth = Math.max(0, xmlDepth + (m[1] ? -1 : 1));
1582
+ if (braceDepth > 0 || BUILD_BLOCK_OPEN.test(code2)) {
1583
+ const from = braceDepth > 0 ? code2 : code2.slice(BUILD_BLOCK_OPEN.exec(code2).index);
1584
+ braceDepth = Math.max(0, braceDepth + (from.match(/\{/g)?.length ?? 0) - (from.match(/\}/g)?.length ?? 0));
1585
+ }
1500
1586
  if (!code2.trim())
1501
1587
  return;
1502
1588
  if (!wasBlock && isCommentLine(raw))
@@ -1515,19 +1601,24 @@ function candidatesIn(path, lines) {
1515
1601
  };
1516
1602
  const context = topicContext(code2);
1517
1603
  const urls = [];
1604
+ const opened = inBuild || xmlDepth > 0 || braceDepth > 0;
1518
1605
  for (const m of code2.matchAll(URL_RE)) {
1519
1606
  const u = cleanUrl(m[0]);
1520
- if (!STANDARD_HOST.test(hostOf(u)))
1607
+ const build = opened || isBuildUrl(u, code2.slice(0, m.index));
1608
+ if (!build && !STANDARD_HOST.test(hostOf(u)))
1521
1609
  add("url", u);
1522
1610
  urls.push(m[0]);
1523
1611
  }
1524
- const strings2 = [...code2.matchAll(QUOTED)].map((m) => m[2]);
1612
+ const strings2 = [...code2.matchAll(QUOTED)].map((m) => ({
1613
+ s: m[2],
1614
+ before: code2.slice(0, m.index + 1)
1615
+ }));
1525
1616
  const kv = KEY_VALUE.exec(code2);
1526
1617
  if (kv)
1527
- strings2.push(kv[2]);
1618
+ strings2.push({ s: kv[2], before: "" });
1528
1619
  for (const m of code2.matchAll(ELEMENT_TEXT))
1529
- strings2.push(m[2]);
1530
- for (const s of strings2) {
1620
+ strings2.push({ s: m[2], before: "" });
1621
+ for (const { s, before } of strings2) {
1531
1622
  if (urls.some((u) => s.includes(u) || u.includes(s)))
1532
1623
  continue;
1533
1624
  const p = pathOf(s);
@@ -1536,7 +1627,7 @@ function candidatesIn(path, lines) {
1536
1627
  continue;
1537
1628
  }
1538
1629
  const t = topicOf(s, context);
1539
- if (t)
1630
+ if (t && !isHeaderName(t, before))
1540
1631
  add("topic", t);
1541
1632
  }
1542
1633
  });
@@ -1740,6 +1831,9 @@ function claimsOf(f) {
1740
1831
  }
1741
1832
  case "flow":
1742
1833
  return [routeOrWord(f.cite.value)];
1834
+ // ADR 0163: the value as written, on its line.
1835
+ case "term":
1836
+ return [{ kind: "word", value: f.value }];
1743
1837
  }
1744
1838
  }
1745
1839
  var sameCommit = (a, b) => a.startsWith(b) || b.startsWith(a);
@@ -1970,6 +2064,40 @@ async function verifyFacts(o) {
1970
2064
  if (f.exposes === void 0 && !serves2)
1971
2065
  problem(f, "exposure-component", `${label} says where a component is reached and names none: this repo's facts serve nothing, so its routes reach another repo's component; name it in exposes (one of the estate's components), or write a question when no file says which`);
1972
2066
  }
2067
+ if (f.kind === "call") {
2068
+ for (const [what, claim, at] of [
2069
+ ["auth", f.auth, f.authCite],
2070
+ ["tls", f.tls, f.tlsCite]
2071
+ ]) {
2072
+ if (claim !== void 0 && !at && f.by !== "person")
2073
+ problem(f, "security-uncited", `${label} claims ${what} ${claim} and cites no line for it: give ${what}Cite, the line that sets it (a client certificate, a token, an https URL) and what it writes there, or leave ${what} out`);
2074
+ if (!at)
2075
+ continue;
2076
+ const bad = checkCite({ ...at }, [{ kind: "word", value: at.value }], `${label} ${what}Cite${claim ? ` (${what} ${claim})` : ""}`, false);
2077
+ add(f, bad);
2078
+ if (bad || claim === void 0)
2079
+ continue;
2080
+ const lines = [at, ...at.with ?? []].flatMap((p) => {
2081
+ const l = lineOfValue(linesOf2(p.file), p.line, p.value);
2082
+ return l === void 0 ? [] : [l];
2083
+ });
2084
+ const needs = securityLineKind(what, claim, lines);
2085
+ if (needs)
2086
+ problem(f, "security-line-kind", `${label} claims ${what} ${claim} at ${at.file}:${at.line}${at.with?.length ? " and its parts" : ""}, which write${at.with?.length ? "" : "s"} no ${needs}: cite the line that sets it (with the line that builds it in ${what}Cite.with), or write the ${what} the line sets`);
2087
+ }
2088
+ }
2089
+ if (f.kind === "term") {
2090
+ const m = f.meaning;
2091
+ if (m && m.file !== f.cite.file)
2092
+ problem(f, "term-meaning", `${label} says ${m.file}:${m.line} gives "${f.value}" its meaning, and the value is in ${f.cite.file}: cite the line of the same file (the list's or the block's key) that does`);
2093
+ else if (m && m.line > f.cite.line)
2094
+ problem(f, "term-meaning", `${label} says line ${m.line} gives "${f.value}" its meaning, below the value's line ${f.cite.line}: cite the line above it (the list's or the block's key) that does`);
2095
+ else if (m)
2096
+ add(f, checkCite({ ...m }, [{ kind: "word", value: m.value }], `${label} meaning`, false));
2097
+ const bad = f.note !== void 0 && o.notes ? noteProblem(f.note, o.notes) : void 0;
2098
+ if (bad)
2099
+ problem(f, bad.code, `${label} ${bad.message}`);
2100
+ }
1973
2101
  if (f.kind === "framework") {
1974
2102
  const bad = frameworkNameProblem(f, rules.frameworks);
1975
2103
  if (bad)
@@ -3922,6 +4050,8 @@ var HOW_OF_FLAG = {
3922
4050
  "joined-by-repo": "repo",
3923
4051
  "joined-by-host": "host",
3924
4052
  "declared-caller": "declared",
4053
+ // ADR 0162 §6 (F8): a topic or queue the profile names as an outside system's: a person's word.
4054
+ [DECLARED_TOPIC]: "declared",
3925
4055
  // ADR 0160 (O3): answered by an entry of another team's shared map.
3926
4056
  [JOINED_TO_SHARED_MAP]: "shared"
3927
4057
  };
@@ -4123,6 +4253,7 @@ function buildEstate(records2) {
4123
4253
  add(fromRecord(c, `component:${c.id}`, "component", c.id, parent, { type: c.type, runtime: c.runtime, repo: c.repo, path: c.path }, gaps));
4124
4254
  }
4125
4255
  const endpointNode = /* @__PURE__ */ new Map();
4256
+ const topicByPath = /* @__PURE__ */ new Map();
4126
4257
  for (const e of all(records2, "Endpoint")) {
4127
4258
  const topic = TOPIC_TYPES.has(e.endpointType);
4128
4259
  const id = `${topic ? "topic" : "endpoint"}:${e.id}`;
@@ -4139,7 +4270,30 @@ function buildEstate(records2) {
4139
4270
  auth: e.auth
4140
4271
  }, gaps));
4141
4272
  endpointNode.set(e.id, id);
4273
+ if (topic)
4274
+ topicByPath.set(e.pathOrTopic, id);
4142
4275
  }
4276
+ const busTopic = (name, parent, ev = []) => {
4277
+ const known = topicByPath.get(name);
4278
+ if (known)
4279
+ return known;
4280
+ const id = add({
4281
+ id: `topic:bus.${slug2(name)}`,
4282
+ kind: "topic",
4283
+ label: name,
4284
+ parent,
4285
+ state: "current",
4286
+ gaps: [],
4287
+ evidence: ev,
4288
+ properties: { pathOrTopic: name },
4289
+ next: {
4290
+ command: `atticus query "${name}"`,
4291
+ why: "List the records that name this topic or queue."
4292
+ }
4293
+ });
4294
+ topicByPath.set(name, id);
4295
+ return id;
4296
+ };
4143
4297
  const storeNode = /* @__PURE__ */ new Map();
4144
4298
  for (const d of all(records2, "DataStore")) {
4145
4299
  const owner = d.ownerComponent && components.has(d.ownerComponent);
@@ -4190,6 +4344,29 @@ function buildEstate(records2) {
4190
4344
  atoms.push({ from: to, to: target, type: "subscribes", evidence: ev, gaps, join: join2 });
4191
4345
  continue;
4192
4346
  }
4347
+ if (!i.endpoint && (i.via === "event-bus" || i.via === "mq") && i.normalizedPath) {
4348
+ const isSystem = (n) => n.startsWith("system:") || n.startsWith("unknown:");
4349
+ const [home, homeRef] = !isSystem(to) && isSystem(from) ? [from, i.from] : [to, i.to];
4350
+ const t = busTopic(i.normalizedPath, home);
4351
+ const owner = nodes.get(t);
4352
+ if (owner.parent === home && isSystem(home)) {
4353
+ owner.properties = { ...owner.properties, owner: nodes.get(home)?.label ?? home };
4354
+ const b = nodes.get(home)?.properties.boundary;
4355
+ if (outside.has(homeRef) || b === "vendor" || b === "outside")
4356
+ owner.properties.ownerOutside = true;
4357
+ }
4358
+ if (join2.shared)
4359
+ owner.properties = { ...owner.properties, owner: join2.shared.team, ownerOutside: true };
4360
+ if (i.flags?.includes(DECLARED_TOPIC)) {
4361
+ owner.properties = { ...owner.properties, declared: true };
4362
+ owner.gaps = [.../* @__PURE__ */ new Set([...owner.gaps, DECLARED_TOPIC])];
4363
+ owner.evidence = mergeEvidence(owner.evidence, evidenceOf(i.evidence.filter((e) => e.source === "manual")));
4364
+ }
4365
+ atoms.push({ from, to: t, type: "publishes", evidence: ev, gaps, join: join2 });
4366
+ if (to.startsWith("component:"))
4367
+ atoms.push({ from: to, to: t, type: "subscribes", evidence: ev, gaps, join: join2 });
4368
+ continue;
4369
+ }
4193
4370
  let caller = from;
4194
4371
  if (from.startsWith("component:")) {
4195
4372
  caller = add({
@@ -4222,6 +4399,22 @@ function buildEstate(records2) {
4222
4399
  join: join2
4223
4400
  });
4224
4401
  }
4402
+ for (const u of all(records2, "Unresolved")) {
4403
+ if (u.unresolvedKind !== "event-publish" && u.unresolvedKind !== "event-subscribe")
4404
+ continue;
4405
+ if (!u.raw || u.raw.includes("${"))
4406
+ continue;
4407
+ const owner = u.owner ? partNode(u.owner) : "estate";
4408
+ const ev = evidenceOf(u.evidence);
4409
+ const t = busTopic(u.raw, u.unresolvedKind === "event-subscribe" ? owner : "estate", ev);
4410
+ atoms.push({
4411
+ from: owner,
4412
+ to: t,
4413
+ type: u.unresolvedKind === "event-publish" ? "publishes" : "subscribes",
4414
+ evidence: ev,
4415
+ gaps: recordGaps(u)
4416
+ });
4417
+ }
4225
4418
  for (const c of components.values())
4226
4419
  for (const u of c.uses ?? [])
4227
4420
  atoms.push({
@@ -4274,6 +4467,37 @@ function buildEstate(records2) {
4274
4467
  gaps: recordGaps(k)
4275
4468
  });
4276
4469
  }
4470
+ const busy = /* @__PURE__ */ new Set();
4471
+ const internal = (id) => {
4472
+ const n = nodes.get(id);
4473
+ return !!n && n.kind !== "unknown" && n.properties.boundary !== "outside" && n.properties.boundary !== "vendor";
4474
+ };
4475
+ for (const a of atoms)
4476
+ if (a.type === "publishes" || a.type === "subscribes") {
4477
+ if (internal(a.from))
4478
+ busy.add(`${a.type}|${a.to}`);
4479
+ }
4480
+ for (const n of nodes.values()) {
4481
+ if (n.kind !== "topic")
4482
+ continue;
4483
+ if (n.properties.owner === void 0) {
4484
+ let p = n.parent ? nodes.get(n.parent) : void 0;
4485
+ while (p && p.kind !== "system" && p.kind !== "repo" && p.kind !== "estate")
4486
+ p = p.parent ? nodes.get(p.parent) : void 0;
4487
+ if (p && p.kind !== "estate") {
4488
+ let sys = p;
4489
+ while (sys && sys.kind !== "system")
4490
+ sys = sys.parent ? nodes.get(sys.parent) : void 0;
4491
+ n.properties = { ...n.properties, owner: (sys ?? p).label };
4492
+ if (sys && (sys.properties.boundary === "outside" || sys.properties.boundary === "vendor"))
4493
+ n.properties.ownerOutside = true;
4494
+ }
4495
+ }
4496
+ if (!busy.has(`publishes|${n.id}`))
4497
+ n.gaps.push("no-publisher");
4498
+ if (!busy.has(`subscribes|${n.id}`))
4499
+ n.gaps.push("no-listener");
4500
+ }
4277
4501
  const kids = /* @__PURE__ */ new Map();
4278
4502
  for (const n of nodes.values()) {
4279
4503
  if (!n.parent)
@@ -4438,16 +4662,27 @@ function nodeView(est, id, o) {
4438
4662
  return ax[i] ?? x;
4439
4663
  };
4440
4664
  const types = LENS_EDGES[lens];
4665
+ const onBus = (atom, b) => (atom.type === "publishes" || atom.type === "subscribes") && est.nodes.get(b)?.kind === "topic" && b !== id;
4666
+ const drawnTopics = /* @__PURE__ */ new Set();
4667
+ for (const atom of est.atoms) {
4668
+ if (!types.has(atom.type))
4669
+ continue;
4670
+ const a = lift(est, lens, atom.from);
4671
+ const b = lift(est, lens, atom.to);
4672
+ if (onBus(atom, b) && (inside(a) || inside(b)))
4673
+ drawnTopics.add(b);
4674
+ }
4441
4675
  const mapped = [];
4442
4676
  for (const atom of est.atoms) {
4443
4677
  if (!types.has(atom.type))
4444
4678
  continue;
4445
4679
  const a = lift(est, lens, atom.from);
4446
4680
  const b = lift(est, lens, atom.to);
4447
- if (!inside(a) && !inside(b))
4681
+ const bus = onBus(atom, b);
4682
+ if (!inside(a) && !inside(b) && !(bus && drawnTopics.has(b)))
4448
4683
  continue;
4449
4684
  const from = place(a);
4450
- const to = place(b);
4685
+ const to = bus ? b : place(b);
4451
4686
  if (from === to)
4452
4687
  continue;
4453
4688
  mapped.push({ from, to, atom });
@@ -4456,10 +4691,12 @@ function nodeView(est, id, o) {
4456
4691
  let hidden = 0;
4457
4692
  if (!o.all)
4458
4693
  ({ edges, hidden } = reduceUses(edges));
4459
- const outside = [...new Set(edges.flatMap((e) => [e.from, e.to]))].filter((n) => n !== id && !shownSet.has(n)).sort();
4460
- const children = shown.map((n) => toNode(est, lens, n));
4694
+ const ends = [...new Set(edges.flatMap((e) => [e.from, e.to]))].filter((n) => n !== id && !shownSet.has(n));
4695
+ const deeper = ends.filter((n) => drawnTopics.has(n) && inside(n)).sort();
4696
+ const outside = ends.filter((n) => !deeper.includes(n)).sort();
4697
+ const children = [...shown, ...deeper].map((n) => toNode(est, lens, n));
4461
4698
  const firstTable = children.find((c) => c.kind === "table");
4462
- const suggest = lens === "data" && firstTable ? { mode: "focus", id: firstTable.id } : shown.length + outside.length > DETAILED_LIMIT ? { mode: "group" } : void 0;
4699
+ const suggest = lens === "data" && firstTable ? { mode: "focus", id: firstTable.id } : shown.length + deeper.length + outside.length > DETAILED_LIMIT ? { mode: "group" } : void 0;
4463
4700
  return {
4464
4701
  lens,
4465
4702
  node: toNode(est, lens, id),
@@ -4818,6 +5055,27 @@ function config(c) {
4818
5055
  return `- ${code(`${s.key} = ${s.valueOrRef}`)} (${notes.join("; ")}): ${cite(c, ownEvidence(s, c.i.repo))}`;
4819
5056
  });
4820
5057
  }
5058
+ function terms(c) {
5059
+ const ts = c.i.terms ?? [];
5060
+ const owners = /* @__PURE__ */ new Map();
5061
+ for (const r of records(c, "Component"))
5062
+ for (const f of r.flags ?? []) {
5063
+ const m = /^term:[^=]+=(.+)$/.exec(f);
5064
+ if (m && !c.comps.has(r.id))
5065
+ owners.set(m[1], [...owners.get(m[1]) ?? [], r.id]);
5066
+ }
5067
+ const listing = /* @__PURE__ */ new Map();
5068
+ for (const g of records(c, "AccessGrant"))
5069
+ if (g.flags?.some((f) => f.startsWith("term:"))) {
5070
+ const route = c.byId.get(g.resource);
5071
+ const by = route?.kind === "GatewayRoute" ? route.proxy : g.resource;
5072
+ listing.set(g.subject, [.../* @__PURE__ */ new Set([...listing.get(g.subject) ?? [], by])]);
5073
+ }
5074
+ return [...ts].sort((a, b) => cmp2(a.term, b.term) || cmp2(a.value, b.value)).map((t) => {
5075
+ const means = t.role === "owner" ? `this repo's own id${listing.get(t.value)?.length ? `; let in by ${list(listing.get(t.value).sort())}` : ""}` : t.role === "consumer" ? `a consumer it lets in${owners.get(t.value)?.length ? `: ${list(owners.get(t.value).sort())}` : ", whose own repo no fact names yet"}` : t.role === "none" ? "names no system" : `**open:** nothing says what it means${owners.get(t.value)?.length ? `; the same value is ${list(owners.get(t.value).sort())}'s own id (a possible link)` : ""}`;
5076
+ return `- ${code(t.term)} ${code(t.value)}: ${means} ${cite(c, t.cite)}${t.meaning ? ` (its role from ${cite(c, t.meaning)})` : ""}`;
5077
+ });
5078
+ }
4821
5079
  var flowFile = (f) => `flows/${f.id}.md`;
4822
5080
  function flowsList(c) {
4823
5081
  if (!c.i.flows.length)
@@ -5054,6 +5312,7 @@ function renderMap(i) {
5054
5312
  ...section("What it stores", stores(base)),
5055
5313
  ...section("Where it runs", deploys(base)),
5056
5314
  ...section("Config that names other systems", config(base)),
5315
+ ...i.terms?.length ? section("Terms", terms(base)) : [],
5057
5316
  ...section("Flows", flowsList(base)),
5058
5317
  ...section("Contracts", contracts(base, files)),
5059
5318
  ...section("Open questions", openQuestions(base))
@@ -5367,7 +5626,9 @@ export {
5367
5626
  sameCommit,
5368
5627
  staleMessage,
5369
5628
  verifyFacts,
5629
+ readingRank,
5370
5630
  FILE_KINDS,
5631
+ fileKinds,
5371
5632
  kindsOf,
5372
5633
  numberedSlice,
5373
5634
  sliceText,
@@ -5,7 +5,7 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
5
  var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
6
 
7
7
  // packages/core/dist/schema/version.js
8
- var SCHEMA_VERSION = 3;
8
+ var SCHEMA_VERSION = 4;
9
9
 
10
10
  // packages/core/dist/fs.js
11
11
  import { randomBytes } from "node:crypto";
@@ -105,7 +105,9 @@ var LOCAL_ONLY = [
105
105
  "backups/",
106
106
  "history/",
107
107
  "probe/",
108
- "cache/"
108
+ "cache/",
109
+ // ADR 0161: where `atticus map --all` is in the estate, so running it again resumes.
110
+ "map-all/"
109
111
  ];
110
112
  async function ensureLocalIgnore(root) {
111
113
  const file = join(root, ".atticus", ".gitignore");
@@ -14,26 +14,26 @@ import {
14
14
  scaffoldDialect,
15
15
  surveyRepos,
16
16
  testDialect
17
- } from "./chunk-Y5PZHS4K.js";
18
- import "./chunk-AY2IUF4K.js";
19
- import "./chunk-6JLPXDWN.js";
20
- import "./chunk-4GZXS6S2.js";
21
- import "./chunk-R4TBNKKC.js";
22
- import "./chunk-NIXVDQVO.js";
17
+ } from "./chunk-INCECZ2E.js";
18
+ import "./chunk-22GLUHGE.js";
19
+ import "./chunk-QR65C3DV.js";
20
+ import "./chunk-MLAACAES.js";
21
+ import "./chunk-HY2VVVFZ.js";
22
+ import "./chunk-PJRMMWU4.js";
23
23
  import {
24
24
  SYNTAX_LANGUAGES,
25
25
  syntaxLanguageOf,
26
26
  syntaxOutline
27
- } from "./chunk-UR7RMZ3R.js";
28
- import "./chunk-PGKHJYOB.js";
29
- import "./chunk-MKRBG5EF.js";
30
- import "./chunk-5XDNUJ4P.js";
27
+ } from "./chunk-34NWVIBC.js";
28
+ import "./chunk-RA64IK43.js";
29
+ import "./chunk-MRLCNXXR.js";
30
+ import "./chunk-CQD26SMZ.js";
31
31
  import {
32
32
  RecordId,
33
33
  orgPackDirOf,
34
34
  require_dist
35
- } from "./chunk-577AJVRS.js";
36
- import "./chunk-D3PO4DOZ.js";
35
+ } from "./chunk-U25OX22K.js";
36
+ import "./chunk-MMB2OHUY.js";
37
37
  import {
38
38
  __toESM
39
39
  } from "./chunk-TV45EUGM.js";
@@ -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-XQ3YIV5R.js";
8
+ } from "./chunk-U5T4A2QV.js";
9
9
  import {
10
10
  ManualNotifier,
11
11
  fileStepStore
12
- } from "./chunk-NGPU2ARF.js";
12
+ } from "./chunk-DW4BM73R.js";
13
13
  import {
14
14
  readCatalog
15
- } from "./chunk-AY2IUF4K.js";
15
+ } from "./chunk-22GLUHGE.js";
16
16
  import {
17
17
  readServiceRequestExports
18
- } from "./chunk-R4TBNKKC.js";
18
+ } from "./chunk-HY2VVVFZ.js";
19
19
  import {
20
20
  Initiative,
21
21
  IsoDate,
@@ -32,10 +32,10 @@ import {
32
32
  serializeRecord,
33
33
  stateDirOf,
34
34
  toCanonicalYaml
35
- } from "./chunk-577AJVRS.js";
35
+ } from "./chunk-U25OX22K.js";
36
36
  import {
37
37
  SCHEMA_VERSION
38
- } from "./chunk-D3PO4DOZ.js";
38
+ } from "./chunk-MMB2OHUY.js";
39
39
  import {
40
40
  __toESM
41
41
  } from "./chunk-TV45EUGM.js";