@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
@@ -3,26 +3,48 @@ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
3
  var require = __atticusCreateRequire(import.meta.url);
4
4
  var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
5
  var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ repoTypeOf
8
+ } from "./chunk-ZS47PQ3O.js";
9
+ import {
10
+ estateFreshness
11
+ } from "./chunk-I2PNEG3M.js";
12
+ import "./chunk-HJUEQERG.js";
13
+ import {
14
+ writeRepoSpecs
15
+ } from "./chunk-B6X5PJSA.js";
16
+ import {
17
+ checkoutOf,
18
+ readPlanProgress
19
+ } from "./chunk-P76AW3PA.js";
20
+ import "./chunk-7VNEDDCC.js";
21
+ import "./chunk-6S27MUQQ.js";
22
+ import "./chunk-EU7VTBAI.js";
6
23
  import {
7
24
  linkEvidenceAbout,
8
25
  linkEvidenceLines,
9
26
  loadLinkEvidence,
10
27
  writeRepoContracts
11
- } from "./chunk-GXJVY6WT.js";
28
+ } from "./chunk-NCONDPHH.js";
12
29
  import {
13
30
  diffLines
14
- } from "./chunk-7TGYNOXD.js";
31
+ } from "./chunk-CW5SEPUT.js";
15
32
  import {
16
33
  askHosts
17
- } from "./chunk-LRS573EX.js";
18
- import "./chunk-IDGSU7JF.js";
19
- import "./chunk-LK44ULGI.js";
20
- import "./chunk-47QE246J.js";
21
- import "./chunk-XQ3YIV5R.js";
22
- import "./chunk-MGVYVW7Q.js";
23
- import "./chunk-NGPU2ARF.js";
34
+ } from "./chunk-GKPOCUQR.js";
35
+ import "./chunk-3G4YI4ZU.js";
36
+ import "./chunk-7TH6I6TL.js";
37
+ import "./chunk-GHSVJNVL.js";
38
+ import "./chunk-VOGCSYOI.js";
39
+ import "./chunk-GMDOXWIS.js";
40
+ import "./chunk-U5T4A2QV.js";
41
+ import "./chunk-JQG4VO47.js";
42
+ import "./chunk-DW4BM73R.js";
24
43
  import {
25
44
  TARGETS_STEP,
45
+ answerReconfirmed,
46
+ answerRuleOffers,
47
+ answeredQuestionOfCall,
26
48
  catalogWithFacts,
27
49
  diffCatalogs,
28
50
  diffIsEmpty,
@@ -37,33 +59,42 @@ import {
37
59
  staleTargetQuestions,
38
60
  targetQuestionFor,
39
61
  targetsFromAnswers,
62
+ topicQuestionDrafts,
40
63
  writeCatalog
41
- } from "./chunk-AY2IUF4K.js";
42
- import "./chunk-6JLPXDWN.js";
64
+ } from "./chunk-22GLUHGE.js";
65
+ import "./chunk-QR65C3DV.js";
43
66
  import {
44
67
  codeLinkerFor,
45
68
  frameworkFacts,
46
69
  frameworkGaps,
47
70
  renderMap,
48
71
  trustOf
49
- } from "./chunk-4GZXS6S2.js";
50
- import "./chunk-R4TBNKKC.js";
51
- import "./chunk-NIXVDQVO.js";
52
- import "./chunk-UR7RMZ3R.js";
72
+ } from "./chunk-MLAACAES.js";
73
+ import "./chunk-HY2VVVFZ.js";
74
+ import "./chunk-PJRMMWU4.js";
75
+ import "./chunk-34NWVIBC.js";
76
+ import "./chunk-TWHZU36X.js";
53
77
  import {
54
78
  baseClonePath,
55
79
  loadRepos
56
- } from "./chunk-PGKHJYOB.js";
57
- import "./chunk-MKRBG5EF.js";
58
- import "./chunk-5XDNUJ4P.js";
80
+ } from "./chunk-RA64IK43.js";
81
+ import "./chunk-MRLCNXXR.js";
82
+ import "./chunk-CQD26SMZ.js";
59
83
  import {
84
+ CALL_SECURITY_CHECK,
60
85
  SPEC_HEADER_SCHEMA_VERSION,
86
+ TERM_STEP,
87
+ TOPICS_STEP_ID,
88
+ callSecurityParams,
61
89
  catalogDirOf,
90
+ checkCallSecurity,
91
+ factIdPart,
62
92
  factsDirOf,
63
93
  factsRelOf,
64
94
  flowFiles,
65
95
  isAdopted,
66
96
  isGuessedJoin,
97
+ joinFlagsOf,
67
98
  listQuestions,
68
99
  loadOrgPack,
69
100
  mapDirOf,
@@ -77,18 +108,21 @@ import {
77
108
  readRepoSpec,
78
109
  readSharedMaps,
79
110
  removeFlow,
111
+ reopenQuestion,
80
112
  require_dist,
81
113
  retireQuestion,
82
114
  specFileHash,
83
115
  specRelOf,
116
+ termOfQuestion,
117
+ termQuestionDrafts,
84
118
  writeFlow,
85
119
  writeSpecHeader
86
- } from "./chunk-577AJVRS.js";
120
+ } from "./chunk-U25OX22K.js";
87
121
  import {
88
122
  LockHeldError,
89
123
  acquireLock,
90
124
  writeFileAtomic
91
- } from "./chunk-D3PO4DOZ.js";
125
+ } from "./chunk-MMB2OHUY.js";
92
126
  import {
93
127
  __toESM
94
128
  } from "./chunk-TV45EUGM.js";
@@ -97,7 +131,127 @@ import {
97
131
  var import_yaml = __toESM(require_dist(), 1);
98
132
  import { existsSync } from "node:fs";
99
133
  import { readFile, readdir, rm } from "node:fs/promises";
100
- import { join, relative, sep } from "node:path";
134
+ import { join as join2, relative, sep } from "node:path";
135
+
136
+ // packages/cli/dist/answer-reopen.js
137
+ import { stat } from "node:fs/promises";
138
+ import { join } from "node:path";
139
+ function repoOfTarget(op, target) {
140
+ const t = factIdPart(target);
141
+ const r = estateRepos(op).find((x) => factIdPart(x.id) === t || x.component !== void 0 && factIdPart(x.component) === t || (x.modules ?? []).some((m) => factIdPart(m.component) === t));
142
+ return r?.id ?? target;
143
+ }
144
+ var mtimeOf = async (path) => (await stat(path).catch(() => void 0))?.mtimeMs;
145
+ async function readNotSettled(root, repo, o = {}) {
146
+ const plan = await readPlanProgress(root, repo);
147
+ if (plan && (plan.stale || plan.done < plan.total))
148
+ return plan.stale ? `its read plan is of another commit (${plan.commit})` : `${plan.total - plan.done} of the ${plan.total} parts of its read plan are not read yet`;
149
+ const dir = factsDirOf(root);
150
+ const gaps = await mtimeOf(join(dir, `${repo}.gaps.md`));
151
+ const facts = await mtimeOf(join(dir, `${repo}.jsonl`));
152
+ if (gaps !== void 0 && (facts === void 0 || gaps >= facts))
153
+ return `its second pass (atticus map ${repo} --gaps) is planned and not read yet`;
154
+ const fresh = (await estateFreshness(root, { repos: [repo], ...o.git ? { git: o.git } : {} })).repos[0];
155
+ if (!fresh || fresh.state !== "fresh" && fresh.state !== "rules-changed")
156
+ return `its facts aren't fresh (atticus estate fresh says ${fresh?.state ?? "not-read"})`;
157
+ return void 0;
158
+ }
159
+
160
+ // packages/cli/dist/term-lines.js
161
+ async function termsWrite(root, repo, o) {
162
+ const lines = [];
163
+ const raised = [];
164
+ const t = o.terms;
165
+ if (t) {
166
+ for (const a of t.access) {
167
+ const mine = a.repo === repo || (a.reason === "listed-no-call" ? a.owner.repo : a.call.repo) === repo;
168
+ if (!mine)
169
+ continue;
170
+ lines.push(a.reason === "caller-not-listed" ? `Access: ${a.message}. Add it to the list, or say why it calls (a finding for ${ownerOf(o.op, a.call.repo)}).` : a.reason === "caller-no-id" ? `Access (a note): ${a.message}; whether it is listed is unknown until a fact of ${a.call.repo} names its own id.` : `Access (a note): ${a.message}.`);
171
+ }
172
+ for (const p of t.possible) {
173
+ if (!p.seen.some((s) => s.repo === repo))
174
+ continue;
175
+ lines.push(`Possible link (a guess, ${p.flag}): ${p.value} is written in ${[...new Set(p.seen.map((s) => `${s.repo} (${s.at})`))].join(", ")}; a note on the repo type saying what it means links them.`);
176
+ }
177
+ const types = /* @__PURE__ */ new Map();
178
+ for (const r of new Set(t.terms.map((x) => x.repo)))
179
+ types.set(r, (await repoTypeOf(o.op, r, await o.dirOf(r)))?.id);
180
+ const all = termQuestionDrafts(t, (r) => types.get(r));
181
+ const drafts = all.filter((d) => d.terms.some((x) => x.repo === repo));
182
+ const asked = /* @__PURE__ */ new Map();
183
+ for (const d of drafts) {
184
+ const r = await raiseQuestions(root, [d.draft], {
185
+ step: TERM_STEP,
186
+ repo: d.repo,
187
+ command: o.command,
188
+ rerun: o.rerun,
189
+ at: o.at
190
+ });
191
+ const q0 = r.of[0];
192
+ if (q0)
193
+ asked.set(`${d.repo}\0${d.term}\0${d.file}`, q0.id);
194
+ for (const q of r.raised) {
195
+ raised.push(q);
196
+ lines.push(`A term nothing says the meaning of: asked ${q.id}: ${q.question} Answer it: atticus questions answer ${q.id} --option <n>${d.repoType ? `, and save the answer as a note on ${d.repoType} with atticus repo-type note ${d.repoType} --add "..."` : ""}; then ${o.rerun}.`);
197
+ }
198
+ }
199
+ for (const q of (await listQuestions(root, { step: TERM_STEP })).questions) {
200
+ if (q.state !== "open")
201
+ continue;
202
+ const about = termOfQuestion(q.question);
203
+ if (!about)
204
+ continue;
205
+ const k = `${q.repo}\0${about.term}\0${about.file}`;
206
+ const now = asked.get(k);
207
+ if (now === q.id)
208
+ continue;
209
+ const inGroup = all.find((d) => d.repo === q.repo && d.term === about.term && d.file === about.file);
210
+ if (q.repo !== repo && !(inGroup && inGroup.terms.some((x) => x.repo === repo)))
211
+ continue;
212
+ const why = now ? "the same term is asked across a changed set of repos" : "the facts now give every value it asked about a role";
213
+ await retireQuestion(root, q.id, { why, at: o.at, ...now ? { replacedBy: [now] } : {} });
214
+ lines.push(`Retired ${q.id}: ${why}.`);
215
+ }
216
+ }
217
+ if (o.join)
218
+ for (const pack of o.op.checklists)
219
+ for (const rule of pack.rules) {
220
+ if (rule.status !== "active")
221
+ continue;
222
+ if (rule.check.type !== "deterministic" || rule.check.check !== CALL_SECURITY_CHECK)
223
+ continue;
224
+ const params = callSecurityParams(rule.check.params);
225
+ if ("problem" in params) {
226
+ lines.push(`Rule ${rule.id} (${pack.name}) can't be checked: ${params.problem}.`);
227
+ continue;
228
+ }
229
+ for (const r of checkCallSecurity(params, {
230
+ repos: o.repos,
231
+ join: o.join,
232
+ systems: o.op.profiles.flatMap((p) => p.profile?.systems ?? [])
233
+ }))
234
+ if (r.call.repo === repo || r.callers.some((c) => c.repo === repo))
235
+ lines.push(ruleLine(rule.id, r, o.op));
236
+ }
237
+ return { lines, raised };
238
+ }
239
+ function ownerOf(op, repo) {
240
+ const owner = estateRepos(op).find((r) => r.id === repo)?.owner;
241
+ return owner ? `${repo}'s owner, ${owner}` : `${repo}'s owner`;
242
+ }
243
+ function ruleLine(rule, r, op) {
244
+ switch (r.outcome) {
245
+ case "pass":
246
+ return `Rule ${rule}: passes, ${r.message}.`;
247
+ case "declared":
248
+ return `Rule ${rule}: declared, ${r.message}.`;
249
+ case "finding":
250
+ return `Rule ${rule}: a finding for ${ownerOf(op, r.call.repo)}: ${r.message}.`;
251
+ }
252
+ }
253
+
254
+ // packages/cli/dist/map-render-commands.js
101
255
  var FACTS_TEMPLATE = "facts@1";
102
256
  var posix = (p) => p.split(sep).join("/");
103
257
  var HOW_WORDS = {
@@ -108,16 +262,27 @@ var HOW_WORDS = {
108
262
  path: "path",
109
263
  topic: "topic"
110
264
  };
111
- function linkChanges(repo, join2, before, after) {
265
+ function linkChanges(repo, join3, before, after) {
112
266
  const mine = (xs) => (xs ?? []).filter((x) => x.call.repo === repo);
113
- const joined = mine(join2?.joins);
114
- const how = new Map((join2?.joins ?? []).map((j) => [j.interface, j.how]));
267
+ const joined = mine(join3?.joins);
268
+ const joinsOf = /* @__PURE__ */ new Map();
269
+ for (const j of [...joined, ...(join3?.joins ?? []).filter((x) => !joined.includes(x))])
270
+ joinsOf.set(j.interface, [...joinsOf.get(j.interface) ?? [], j]);
271
+ const howOf = (r) => {
272
+ const all = joinsOf.get(r.id) ?? [];
273
+ const own = all.filter((j) => joined.includes(j));
274
+ const best = own.find((j) => !isGuessedJoin(j)) ?? own[0] ?? all[0];
275
+ if (!best)
276
+ return void 0;
277
+ const byOther = r.confidence === "verified" && own.length > 0 && isGuessedJoin(best);
278
+ return { how: best.how, ...byOther ? { byOther, guesses: joinFlagsOf(best) } : {} };
279
+ };
115
280
  const ifaces = (rs) => new Map(rs.filter((r) => r.kind === "Interface").map((r) => [r.id, r]));
116
281
  const was = ifaces(before);
117
282
  const now = ifaces(after);
118
283
  const linked = new Set([...now.values()].flatMap((r) => r.evidence.filter((e) => e.side !== "callee").map((e) => `${e.repo}|${e.path}:${e.line}`)));
119
284
  const line = (r, found) => {
120
- const h = found ? how.get(r.id) : void 0;
285
+ const h = found ? howOf(r) : void 0;
121
286
  return {
122
287
  id: r.id,
123
288
  from: r.from,
@@ -125,8 +290,9 @@ function linkChanges(repo, join2, before, after) {
125
290
  ...r.method ? { method: r.method } : {},
126
291
  path: r.normalizedPath,
127
292
  confidence: r.confidence,
128
- ...h ? { how: h } : {},
129
- ...r.flags?.length ? { flags: [...r.flags] } : {}
293
+ ...h ? { how: h.how } : {},
294
+ ...r.flags?.length ? { flags: [...r.flags] } : {},
295
+ ...h?.byOther ? { byOther: true, guesses: h.guesses } : {}
130
296
  };
131
297
  };
132
298
  const byId = (a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
@@ -148,9 +314,9 @@ function linkChanges(repo, join2, before, after) {
148
314
  calls: {
149
315
  joined: joined.length,
150
316
  inferred: joined.filter(isGuessedJoin).length,
151
- asked: mine(join2?.asks).filter((a) => !linked.has(`${a.call.repo}|${a.call.at}`)).length,
152
- outside: mine(join2?.outside).length,
153
- missed: mine(join2?.misses).length
317
+ asked: mine(join3?.asks).filter((a) => !linked.has(`${a.call.repo}|${a.call.at}`)).length,
318
+ outside: mine(join3?.outside).length,
319
+ missed: mine(join3?.misses).length
154
320
  },
155
321
  added: [...now.values()].filter((r) => !was.has(r.id)).map((r) => line(r, true)).sort(byId),
156
322
  removed: [...was.values()].filter((r) => !now.has(r.id)).map((r) => line(r, false)).sort(byId),
@@ -172,6 +338,11 @@ function linkLines(l, report, o = {}) {
172
338
  const text = (sign, x) => {
173
339
  const what = [x.method, x.path].filter(Boolean).join(" ");
174
340
  const conf = x.was ? `${x.confidence}, was ${x.was.confidence}` : x.confidence;
341
+ if (x.byOther && x.how) {
342
+ const g = x.guesses?.join(", ");
343
+ const was = x.was ? `, was ${x.was.confidence}` : "";
344
+ return ` ${sign} ${x.from} \u2192 ${x.to} ${what} (${x.confidence} by another call${was}; this one by ${HOW_WORDS[x.how]}${g ? `: ${g}` : ""})`;
345
+ }
175
346
  const flags = x.flags?.join(", ");
176
347
  const found = x.how ? `found by ${HOW_WORDS[x.how]}${flags ? `: ${flags}` : ""}` : flags ?? "";
177
348
  return ` ${sign} ${x.from} \u2192 ${x.to} ${what} (${conf}${found ? `; ${found}` : ""})`;
@@ -188,7 +359,7 @@ function linkLines(l, report, o = {}) {
188
359
  return out;
189
360
  }
190
361
  async function writeLinksIntoReport(root, repo, links, exposure = [], evidence, shared) {
191
- const file = join(factsDirOf(root), `${repo}.verify.yaml`);
362
+ const file = join2(factsDirOf(root), `${repo}.verify.yaml`);
192
363
  const text = await readFile(file, "utf8").catch(() => void 0);
193
364
  if (text === void 0)
194
365
  return;
@@ -287,8 +458,8 @@ function kindLine(byKind) {
287
458
  async function projectFactsIntoCatalog(root, repo, facts, given = {}) {
288
459
  const op = given.op ?? await loadOrgPack(orgPackDirOf(root));
289
460
  const cacheOpts = given.cache === false ? {} : { cacheRoot: root };
290
- const existing = given.existing ?? (await readCatalog(join(catalogDirOf(root), "generated"), cacheOpts)).records;
291
- const curated = await readCatalog(join(catalogDirOf(root), "curated"), cacheOpts);
461
+ const existing = given.existing ?? (await readCatalog(join2(catalogDirOf(root), "generated"), cacheOpts)).records;
462
+ const curated = await readCatalog(join2(catalogDirOf(root), "curated"), cacheOpts);
292
463
  const everyTarget = (await listQuestions(root, { step: TARGETS_STEP })).questions;
293
464
  const answered = everyTarget.filter((q) => q.repo === repo);
294
465
  const repoType = estateRepos(op).find((r) => r.id === repo)?.type;
@@ -327,6 +498,7 @@ async function projectFactsIntoCatalog(root, repo, facts, given = {}) {
327
498
  op,
328
499
  existing,
329
500
  answered,
501
+ everyTarget,
330
502
  targets,
331
503
  ruled,
332
504
  estate,
@@ -350,7 +522,7 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
350
522
  }
351
523
  try {
352
524
  const op = await loadOrgPack(orgPackDirOf(root));
353
- const generated = join(catalogDirOf(root), "generated");
525
+ const generated = join2(catalogDirOf(root), "generated");
354
526
  const existing = await readCatalog(generated, { cacheRoot: root });
355
527
  if (isPrototypeRepo(op, repo)) {
356
528
  for (const n of prototypeLeftOut({ repo, facts, existing: [], op, decisions: [] }).notes)
@@ -372,7 +544,8 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
372
544
  }
373
545
  const rerun = `atticus verify ${repo} --write`;
374
546
  await writeRepoContracts(root, repo, o.dir, facts, (n) => io.err(n));
375
- const { answered, targets, ruled, estate, result, diff, links, evidenceProblems, sharedMaps } = await projectFactsIntoCatalog(root, repo, facts, { op, existing: existing.records });
547
+ await writeRepoSpecs(root, repo, o.dir, facts, (n) => io.err(n));
548
+ const { answered, everyTarget, targets, ruled, estate, result, diff, links, evidenceProblems, sharedMaps } = await projectFactsIntoCatalog(root, repo, facts, { op, existing: existing.records });
376
549
  for (const p of evidenceProblems)
377
550
  io.err(p);
378
551
  for (const i of result.invalid)
@@ -396,7 +569,7 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
396
569
  const files = {};
397
570
  for (const f of flows)
398
571
  for (const p of flowFiles(f)) {
399
- const text = await readFile(join(o.dir, ...p.split("/")), "utf8").catch(() => void 0);
572
+ const text = await readFile(join2(o.dir, ...p.split("/")), "utf8").catch(() => void 0);
400
573
  if (text !== void 0)
401
574
  files[p] = specFileHash(text);
402
575
  }
@@ -424,11 +597,25 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
424
597
  const asked = new Set([...loose, ...ambiguous].filter((id) => targets[id] === void 0 && !answered.some((q) => q.state === "answered" && q.id === targetId(facts, repo, id))));
425
598
  const drafted = groupedTargetDrafts(facts, result.records, op, result.join?.asks, {
426
599
  ask: asked,
427
- split: splitTargetGroups(answered)
600
+ split: splitTargetGroups(answered),
601
+ // ADR 0162 (F8): the suggestions read the estate's facts and the earlier answers.
602
+ estate: estate.repos,
603
+ questions: everyTarget
428
604
  });
605
+ const refreshed = [];
429
606
  for (const t of drafted) {
607
+ const r = await raiseQuestions(root, [t.draft], { step: TARGETS_STEP, repo, command: o.command, rerun, at }, { refresh: true });
608
+ refreshed.push(...r.refreshed);
609
+ for (const q of r.raised) {
610
+ raised.push(q);
611
+ lines.push(t.factIds.length > 1 ? `${t.factIds.length} calls go the same way and name no target the estate has: asked once, ${q.id}: ${q.question} One answer names the target of all of them. Answer it: atticus questions answer ${q.id} --option <n>, then ${rerun}.` : named.has(t.factId) ? `A call names a target the estate doesn't have, and more than one entry serves it: asked ${q.id}: ${q.question} Answer it: atticus questions answer ${q.id} --option <n>, then ${rerun}.` : `A call names no target: asked ${q.id}: ${q.question} Answer it: atticus questions answer ${q.id} --option <n>, then ${rerun}.`);
612
+ }
613
+ }
614
+ if (refreshed.length)
615
+ lines.push(`Refreshed ${refreshed.length === 1 ? "1 open question" : `${refreshed.length} open questions`} asked before (${refreshed.map((q) => q.id).join(", ")}): the same id, with today's options, ranked by the estate as read now, each saying why it is suggested.`);
616
+ for (const t of topicQuestionDrafts(repo, result.records)) {
430
617
  const r = await raiseQuestions(root, [t.draft], {
431
- step: TARGETS_STEP,
618
+ step: TOPICS_STEP_ID,
432
619
  repo,
433
620
  command: o.command,
434
621
  rerun,
@@ -436,7 +623,7 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
436
623
  });
437
624
  for (const q of r.raised) {
438
625
  raised.push(q);
439
- lines.push(t.factIds.length > 1 ? `${t.factIds.length} calls go the same way and name no target the estate has: asked once, ${q.id}: ${q.question} One answer names the target of all of them. Answer it: atticus questions answer ${q.id} --option <n>, then ${rerun}.` : named.has(t.factId) ? `A call names a target the estate doesn't have, and more than one entry serves it: asked ${q.id}: ${q.question} Answer it: atticus questions answer ${q.id} --option <n>, then ${rerun}.` : `A call names no target: asked ${q.id}: ${q.question} Answer it: atticus questions answer ${q.id} --option <n>, then ${rerun}.`);
626
+ lines.push(`No repo of the estate serves the other side of ${t.topic}: asked ${q.id}: ${q.question} If another team or a vendor owns it, name them: atticus questions answer ${q.id} --target <system or team id> (it goes under the system's topics in the profile, for review), then ${rerun}.`);
440
627
  }
441
628
  }
442
629
  for (const s of staleTargetQuestions({
@@ -455,6 +642,50 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
455
642
  });
456
643
  lines.push(`Retired ${s.id}: ${s.why}.`);
457
644
  }
645
+ const reopened = /* @__PURE__ */ new Set();
646
+ const unsettled = /* @__PURE__ */ new Map();
647
+ for (const m of result.answerMisses ?? []) {
648
+ const callerFacts = m.call.repo === repo ? facts : estate.repos.find((x) => x.repo === m.call.repo)?.facts;
649
+ const q = callerFacts ? answeredQuestionOfCall(m.call.repo, callerFacts, everyTarget, m.call.fact) : void 0;
650
+ if (!q || reopened.has(q.id))
651
+ continue;
652
+ if (answerReconfirmed(q))
653
+ continue;
654
+ const named2 = repoOfTarget(op, m.target);
655
+ if (!unsettled.has(named2))
656
+ unsettled.set(named2, await readNotSettled(root, named2));
657
+ const notYet = unsettled.get(named2);
658
+ if (notYet) {
659
+ lines.push(`${m.target} is read, but ${notYet}: ${q.id}'s answer is checked against it once the read is whole and fresh.`);
660
+ continue;
661
+ }
662
+ reopened.add(q.id);
663
+ const why = `${m.target} is read now, and no route of it serves the call: ${m.message} (${m.call.at})`;
664
+ await reopenQuestion(root, q.id, { why, at });
665
+ lines.push(`Asked again ${q.id}: ${why}. Answer it again: atticus questions answer ${q.id} --option <n> | --target <id>, then atticus verify ${m.call.repo} --write.`);
666
+ }
667
+ const typeOf = new Map(estateRepos(op).map((r) => [r.id, r.type]));
668
+ for (const offer of answerRuleOffers({
669
+ repos: [{ repo, facts }, ...estate.repos].map((r) => ({
670
+ ...r,
671
+ ...typeOf.get(r.repo) ? { type: typeOf.get(r.repo) } : {}
672
+ })),
673
+ questions: everyTarget.filter((q) => !reopened.has(q.id))
674
+ }))
675
+ if (offer.repos.includes(repo))
676
+ lines.push(offer.line);
677
+ const termed = await termsWrite(root, repo, {
678
+ op,
679
+ terms: result.terms,
680
+ repos: [{ repo, facts }, ...estate.repos],
681
+ join: result.join,
682
+ command: o.command,
683
+ rerun,
684
+ at,
685
+ dirOf: (r) => r === repo ? Promise.resolve(o.dir) : checkoutOf(root, r)
686
+ });
687
+ raised.push(...termed.raised);
688
+ lines.push(...termed.lines);
458
689
  const byKind = countByKind(diff);
459
690
  io.out(`Wrote the catalog for ${repo}: ${written.written} files written, ${written.removed} removed, ${written.unchanged} unchanged.`);
460
691
  io.out(diffIsEmpty(diff) ? " No catalog changes." : ` Records: ${kindLine(byKind)}.`);
@@ -509,15 +740,15 @@ function targetId(facts, repo, id) {
509
740
  const q = f ? targetQuestionFor(f) : void 0;
510
741
  return q ? questionId({ step: TARGETS_STEP, repo, ...q }) : void 0;
511
742
  }
512
- function joinLines(repo, join2, notes = [], o = {}) {
513
- if (!join2)
743
+ function joinLines(repo, join3, notes = [], o = {}) {
744
+ if (!join3)
514
745
  return [...notes];
515
746
  const out = [...notes];
516
- const mine = join2.joins.filter((j) => j.call.repo === repo && j.call.repo !== j.entry.repo);
517
- const into = join2.joins.filter((j) => j.entry.repo === repo && j.call.repo !== repo);
747
+ const mine = join3.joins.filter((j) => j.call.repo === repo && j.call.repo !== j.entry.repo);
748
+ const into = join3.joins.filter((j) => j.entry.repo === repo && j.call.repo !== repo);
518
749
  if (mine.length || into.length)
519
750
  out.push(`Joined across repos: ${mine.length} of ${repo}'s calls to the entries that serve them, ${into.length} calls of other repos into ${repo}, each citing both ends.`);
520
- const guessed = join2.joins.filter((j) => j.call.repo === repo && j.inferred);
751
+ const guessed = join3.joins.filter((j) => j.call.repo === repo && j.inferred);
521
752
  if (guessed.length) {
522
753
  const own = guessed.filter((j) => j.inferred.within === "repo").length;
523
754
  const where = [
@@ -533,16 +764,16 @@ function joinLines(repo, join2, notes = [], o = {}) {
533
764
  out.push(` ${j.call.at} ${what}${named} \u2192 ${j.entry.component}${there}`);
534
765
  }
535
766
  }
536
- for (const m of join2.misses)
767
+ for (const m of join3.misses)
537
768
  out.push(`Not joined: ${m.message} (${m.call.at}).`);
538
- for (const x of join2.exposure ?? [])
769
+ for (const x of join3.exposure ?? [])
539
770
  out.push(`Exposure: ${x.message}.`);
540
- for (const g of join2.gaps.slice(0, 10))
771
+ for (const g of join3.gaps.slice(0, 10))
541
772
  out.push(`Field gap: ${g.message}.`);
542
773
  return out;
543
774
  }
544
775
  async function renderRepoMap(root, repo, io) {
545
- const records = (await readCatalog(join(catalogDirOf(root), "generated"), { cacheRoot: root })).records;
776
+ const records = (await readCatalog(join2(catalogDirOf(root), "generated"), { cacheRoot: root })).records;
546
777
  const spec = await readRepoSpec(root, repo, { cacheRoot: root });
547
778
  const ofRepo = records.some((r) => r.kind === "Component" && r.repo === repo);
548
779
  if (!ofRepo && spec.flows.length === 0) {
@@ -550,7 +781,7 @@ async function renderRepoMap(root, repo, io) {
550
781
  return void 0;
551
782
  }
552
783
  let trust;
553
- const report = join(factsDirOf(root), `${repo}.verify.yaml`);
784
+ const report = join2(factsDirOf(root), `${repo}.verify.yaml`);
554
785
  if (existsSync(report)) {
555
786
  try {
556
787
  trust = trustOf((0, import_yaml.parse)(await readFile(report, "utf8")));
@@ -564,6 +795,7 @@ async function renderRepoMap(root, repo, io) {
564
795
  const url = manifest?.url && manifest.url !== "." && !manifest.url.startsWith("./") ? manifest.url : void 0;
565
796
  const codeLink = codeLinkerFor(url ? { url } : { dir: adopted ? "" : posix(relative(root, baseClonePath(root, repo))) });
566
797
  const rel = `${mapRelOf(root)}/${repo}`;
798
+ const kept = await factsOf(root, repo);
567
799
  const files = renderMap({
568
800
  repo,
569
801
  records,
@@ -579,17 +811,19 @@ async function renderRepoMap(root, repo, io) {
579
811
  } : {},
580
812
  // What the repo is built on (ADR 0124 addendum A-framework): read from the facts, since no
581
813
  // catalog record holds a framework.
582
- ...builtOnOf(await factsOf(root, repo)),
814
+ ...builtOnOf(kept),
815
+ // ADR 0163: the organisation's terms it writes, read from the facts as the frameworks are.
816
+ ...termsOfFacts(kept),
583
817
  questions: open.map((q) => ({ id: q.id, question: q.question, evidence: q.evidence })),
584
818
  paths: { map: rel, questions: questionsRelOf(root), specs: specRelOf(root, repo) },
585
819
  codeLink
586
820
  });
587
- const dir = join(mapDirOf(root), repo);
821
+ const dir = join2(mapDirOf(root), repo);
588
822
  for (const old of await listFiles(dir))
589
823
  if (!(old in files))
590
- await rm(join(dir, ...old.split("/")), { force: true });
824
+ await rm(join2(dir, ...old.split("/")), { force: true });
591
825
  for (const [path, text] of Object.entries(files)) {
592
- const full = join(dir, ...path.split("/"));
826
+ const full = join2(dir, ...path.split("/"));
593
827
  const now = await readFile(full, "utf8").catch(() => void 0);
594
828
  if (now !== text)
595
829
  await writeFileAtomic(full, text);
@@ -599,7 +833,7 @@ async function renderRepoMap(root, repo, io) {
599
833
  return paths;
600
834
  }
601
835
  async function factsOf(root, repo) {
602
- const text = await readFile(join(factsDirOf(root), `${repo}.jsonl`), "utf8").catch(() => void 0);
836
+ const text = await readFile(join2(factsDirOf(root), `${repo}.jsonl`), "utf8").catch(() => void 0);
603
837
  if (text === void 0)
604
838
  return [];
605
839
  const p = parseFacts(text);
@@ -617,6 +851,18 @@ function builtOnOf(facts) {
617
851
  const gaps = frameworkGaps(facts).map((g) => ({ framework: g.framework, question: g.question }));
618
852
  return { frameworks: { built, ...gaps.length ? { gaps } : {} } };
619
853
  }
854
+ function termsOfFacts(facts) {
855
+ const terms = facts.flatMap((f) => f.kind === "term" ? [
856
+ {
857
+ term: f.term,
858
+ value: f.value,
859
+ role: f.role,
860
+ cite: { path: f.cite.file, line: f.cite.line, commit: f.commit },
861
+ ...f.meaning ? { meaning: { path: f.meaning.file, line: f.meaning.line, commit: f.commit } } : {}
862
+ }
863
+ ] : []);
864
+ return terms.length ? { terms } : {};
865
+ }
620
866
  async function listFiles(dir) {
621
867
  const out = [];
622
868
  const walk = async (d, prefix) => {
@@ -628,7 +874,7 @@ async function listFiles(dir) {
628
874
  }
629
875
  for (const e of entries)
630
876
  if (e.isDirectory())
631
- await walk(join(d, e.name), `${prefix}${e.name}/`);
877
+ await walk(join2(d, e.name), `${prefix}${e.name}/`);
632
878
  else
633
879
  out.push(`${prefix}${e.name}`);
634
880
  };
@@ -655,5 +901,6 @@ export {
655
901
  projectFactsIntoCatalog,
656
902
  sharedLines,
657
903
  sharedReport,
904
+ termsOfFacts,
658
905
  writeFactsIntoCatalog
659
906
  };