@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.
- package/dist/bin.js +3 -3
- package/dist/{chunk-AY2IUF4K.js → chunk-22GLUHGE.js} +659 -73
- package/dist/{chunk-CIUHAHM6.js → chunk-2A24BNRZ.js} +8 -8
- package/dist/{chunk-2RX7PI2Y.js → chunk-2ELFEKOO.js} +4 -4
- package/dist/{chunk-QKEFZRHS.js → chunk-2P6IHSRO.js} +17 -17
- package/dist/chunk-2Q2YBAR5.js +40 -0
- package/dist/{chunk-7DUDLVFJ.js → chunk-2VQLFNBO.js} +20 -20
- package/dist/{chunk-E3Z67HRK.js → chunk-3256EDLL.js} +4 -4
- package/dist/{chunk-OIU657QQ.js → chunk-34BCKMBS.js} +4 -4
- package/dist/{chunk-UR7RMZ3R.js → chunk-34NWVIBC.js} +2 -2
- package/dist/{chunk-6VBXAGJX.js → chunk-36KD4OGC.js} +14 -14
- package/dist/{chunk-I7IWQIEB.js → chunk-3CFBU2O6.js} +4 -4
- package/dist/{chunk-OSGQW2Z6.js → chunk-3JLTN3Y7.js} +8 -8
- package/dist/{chunk-FOGG4AUR.js → chunk-3M7QBKKG.js} +25 -7
- package/dist/{chunk-UF7TAFJM.js → chunk-3RP34PYV.js} +18 -18
- package/dist/{chunk-YLAJAI2W.js → chunk-3ZKLWM5Y.js} +11 -11
- package/dist/{chunk-LTQANUDH.js → chunk-47HPZ34V.js} +25 -25
- package/dist/chunk-4BPROPGG.js +45 -0
- package/dist/{chunk-Y4BRGOJR.js → chunk-4G56W6H7.js} +13 -10
- package/dist/{chunk-YXJ4XOHF.js → chunk-4HIQ2FTI.js} +4 -4
- package/dist/{chunk-AJJK7GLO.js → chunk-4HTILEXW.js} +3 -3
- package/dist/{chunk-OJLRFGBP.js → chunk-4Q2PGM5T.js} +78 -15
- package/dist/{chunk-GR6YKM55.js → chunk-4RDW2X43.js} +108 -14
- package/dist/{chunk-23M2LUYM.js → chunk-4VOG5H2K.js} +1 -1
- package/dist/chunk-5CSZTVXH.js +34 -0
- package/dist/{chunk-65C57N7P.js → chunk-5FFMJMVH.js} +19 -19
- package/dist/{chunk-XNYNEEBR.js → chunk-5GGGAI5C.js} +18 -18
- package/dist/{chunk-IUD3ME4E.js → chunk-5H46QFSL.js} +4 -4
- package/dist/{chunk-KIHOIVST.js → chunk-5ION6STH.js} +3 -3
- package/dist/chunk-5M3CLAOV.js +39 -0
- package/dist/chunk-5OACMWWI.js +886 -0
- package/dist/{chunk-2HMWX4T6.js → chunk-6ENDKY52.js} +11 -11
- package/dist/{chunk-OS7PQ35Z.js → chunk-6FG7QKJC.js} +22 -22
- package/dist/{chunk-FEZE6NIA.js → chunk-6JV3YHRR.js} +18 -18
- package/dist/{chunk-WGZWR4RF.js → chunk-6ROZRBWH.js} +5 -5
- package/dist/{chunk-WARBF2KY.js → chunk-6S27MUQQ.js} +10 -6
- package/dist/{chunk-TZDSDDSV.js → chunk-72DY5NCN.js} +2 -2
- package/dist/chunk-76QVBNEM.js +37 -0
- package/dist/{chunk-N4QZJJVB.js → chunk-77UOXZVM.js} +5 -5
- package/dist/{chunk-LVGBKKSM.js → chunk-7AXMUE2U.js} +15 -15
- package/dist/{chunk-FJCFYKVO.js → chunk-7TEQF64E.js} +196 -76
- package/dist/{chunk-IDGSU7JF.js → chunk-7TH6I6TL.js} +9 -9
- package/dist/{chunk-ZONE6E3Z.js → chunk-7UKETVPW.js} +2 -2
- package/dist/{chunk-XKS6THI5.js → chunk-7VNEDDCC.js} +2 -2
- package/dist/{chunk-BMHGA7WD.js → chunk-A5GY2EWH.js} +12 -12
- package/dist/{chunk-E3JYO547.js → chunk-AEZ3EICK.js} +20 -20
- package/dist/{chunk-7F2RUWPU.js → chunk-ARLH2ZMD.js} +1 -1
- package/dist/{chunk-VKMTFIWS.js → chunk-AYVLEB55.js} +18 -18
- package/dist/chunk-B6X5PJSA.js +320 -0
- package/dist/{chunk-JMSEEBN4.js → chunk-BRCDEGNE.js} +1 -1
- package/dist/{chunk-67J3VZBA.js → chunk-BSVTNNUK.js} +5 -5
- package/dist/{chunk-3GTZ2OON.js → chunk-BTOGAUWX.js} +20 -11
- package/dist/{chunk-4SVJNVEE.js → chunk-BXBCMGIQ.js} +2 -0
- package/dist/chunk-BXP2Q4TD.js +48 -0
- package/dist/{chunk-XPEEICAO.js → chunk-BZRWJUB4.js} +15 -15
- package/dist/{chunk-MH5OCRUM.js → chunk-CH6LUQLD.js} +2 -2
- package/dist/{chunk-T6USVBEJ.js → chunk-CIIRPLI6.js} +5 -5
- package/dist/chunk-CJXM6SG4.js +339 -0
- package/dist/{chunk-5XDNUJ4P.js → chunk-CQD26SMZ.js} +4 -2
- package/dist/{chunk-7TGYNOXD.js → chunk-CW5SEPUT.js} +7 -7
- package/dist/{chunk-5KTOPOEP.js → chunk-CWSZP2LU.js} +25 -25
- package/dist/chunk-CXK27ZUY.js +32 -0
- package/dist/{chunk-YGKYFMSL.js → chunk-CXY4YDXS.js} +3 -3
- package/dist/{chunk-R64GLVBO.js → chunk-DDZZXVQ5.js} +10 -10
- package/dist/{chunk-7YYEKTYF.js → chunk-DGZXJO5I.js} +8 -8
- package/dist/{chunk-IV7BCWWN.js → chunk-DONCF2XC.js} +3 -3
- package/dist/{chunk-RRVT4MPS.js → chunk-DPNCAFMB.js} +18 -18
- package/dist/{chunk-UBWCUP3G.js → chunk-DQKNOHUZ.js} +2 -2
- package/dist/{chunk-NGPU2ARF.js → chunk-DW4BM73R.js} +1 -1
- package/dist/{chunk-PEF5OEMB.js → chunk-DWN7RSNQ.js} +4 -4
- package/dist/{chunk-KC5DROFC.js → chunk-DWYPYVPJ.js} +14 -14
- package/dist/{chunk-B7434AE2.js → chunk-E73QLYK7.js} +24 -3
- package/dist/{chunk-EX6ZXS5K.js → chunk-EE3UNC44.js} +4 -4
- package/dist/chunk-EJDZEK22.js +53 -0
- package/dist/{chunk-ISNZYKAS.js → chunk-ENZWVTTN.js} +21 -21
- package/dist/{chunk-ROTY5J2L.js → chunk-EREL3TQG.js} +1 -1
- package/dist/{chunk-ZZXF6OOJ.js → chunk-ESGIBN3S.js} +2 -2
- package/dist/{chunk-YGR6OCHQ.js → chunk-EU7VTBAI.js} +8 -14
- package/dist/chunk-F5GA6G3U.js +48 -0
- package/dist/{chunk-JAA53T23.js → chunk-F6FGIYPT.js} +20 -20
- package/dist/{chunk-NPCD54I7.js → chunk-FAET4BB6.js} +8 -5
- package/dist/{chunk-YPBQNJHA.js → chunk-FBFSTYAB.js} +8 -8
- package/dist/{chunk-OEI7LVRP.js → chunk-FEBYMFZA.js} +24 -24
- package/dist/chunk-FMV6IZ3P.js +54 -0
- package/dist/{chunk-F7UQR4ZX.js → chunk-FQ6IBYFC.js} +3 -3
- package/dist/{chunk-J5LHDJU4.js → chunk-FSJMFPA3.js} +7 -7
- package/dist/chunk-GFZ5MIQG.js +47 -0
- package/dist/{chunk-LK44ULGI.js → chunk-GHSVJNVL.js} +104 -11
- package/dist/{chunk-LRS573EX.js → chunk-GKPOCUQR.js} +12 -7
- package/dist/{chunk-LDKUC2QJ.js → chunk-GLSNVC67.js} +17 -17
- package/dist/{chunk-47QE246J.js → chunk-GMDOXWIS.js} +5 -5
- package/dist/{chunk-5MI2SEV5.js → chunk-GN5ZLSLD.js} +3 -3
- package/dist/{chunk-JQ7XQPQS.js → chunk-GUNBOZ75.js} +4 -4
- package/dist/{chunk-HHUFVJF7.js → chunk-GYS64N6F.js} +6 -6
- package/dist/{chunk-AKJTKMXU.js → chunk-HIQWJ6JZ.js} +5 -5
- package/dist/{chunk-6GNS32SI.js → chunk-HJ52XDST.js} +4 -4
- package/dist/{chunk-2KDSXJFJ.js → chunk-HJUEQERG.js} +34 -7
- package/dist/chunk-HKGQUOQ3.js +88 -0
- package/dist/chunk-HP32HUWR.js +41 -0
- package/dist/{chunk-R4TBNKKC.js → chunk-HY2VVVFZ.js} +1249 -610
- package/dist/{chunk-G5SFOH7P.js → chunk-I2PNEG3M.js} +38 -23
- package/dist/{chunk-Y5PZHS4K.js → chunk-INCECZ2E.js} +5 -5
- package/dist/{chunk-RK6MKKKP.js → chunk-ISXNWUG7.js} +1 -1
- package/dist/{chunk-73VPWF5R.js → chunk-ITJ7ST5E.js} +4 -4
- package/dist/{chunk-5IALSMZ2.js → chunk-J3VAFDEX.js} +14 -14
- package/dist/chunk-JGLZUQVN.js +29 -0
- package/dist/{chunk-5XN76FTF.js → chunk-JLIEAQP4.js} +5 -5
- package/dist/{chunk-MGVYVW7Q.js → chunk-JQG4VO47.js} +1 -1
- package/dist/chunk-JXXQHETS.js +130 -0
- package/dist/{chunk-APSVL2AI.js → chunk-KNGESBFW.js} +15 -15
- package/dist/{chunk-7UKVYFQ2.js → chunk-KUYA2E7M.js} +8 -8
- package/dist/{chunk-WLIIQ2A4.js → chunk-KY2ZHTBJ.js} +7 -7
- package/dist/{chunk-YPIEYQF4.js → chunk-L4UIKAWD.js} +6 -6
- package/dist/chunk-LDUJ6NIT.js +247 -0
- package/dist/{chunk-5YIBJXGB.js → chunk-LTLR4JZJ.js} +10 -10
- package/dist/{chunk-IZNSAEBX.js → chunk-MFRPLAOH.js} +2 -2
- package/dist/{chunk-6GWHKMQR.js → chunk-MH7UBG47.js} +4 -4
- package/dist/{chunk-4GZXS6S2.js → chunk-MLAACAES.js} +278 -17
- package/dist/{chunk-D3PO4DOZ.js → chunk-MMB2OHUY.js} +4 -2
- package/dist/{chunk-DDAHCPGA.js → chunk-MNCQ2GL7.js} +12 -12
- package/dist/{chunk-UYYN2IUZ.js → chunk-MNUZX67F.js} +6 -6
- package/dist/{chunk-YFSSNGLR.js → chunk-MQHYCS6A.js} +32 -29
- package/dist/{chunk-MKRBG5EF.js → chunk-MRLCNXXR.js} +1 -1
- package/dist/{chunk-BUYJL3GJ.js → chunk-NBQO75XT.js} +1 -1
- package/dist/{chunk-GXJVY6WT.js → chunk-NCONDPHH.js} +5 -5
- package/dist/{chunk-ZP4FJHR4.js → chunk-NHS55U7T.js} +18 -18
- package/dist/{chunk-CRE4BJHM.js → chunk-NL6XQZSV.js} +23 -23
- package/dist/{chunk-YVLMBAYE.js → chunk-NSJ6ZR2A.js} +3 -3
- package/dist/{chunk-XRO65C7V.js → chunk-NTNJNRHW.js} +8 -6
- package/dist/{chunk-FTV6I76U.js → chunk-NTTXTLCQ.js} +25 -25
- package/dist/chunk-NWL7XEQ4.js +37 -0
- package/dist/{chunk-CNKGYDMG.js → chunk-NWXY3B4R.js} +23 -23
- package/dist/{chunk-52R2YXP5.js → chunk-O5W4ECUY.js} +16 -16
- package/dist/{chunk-OGRWQ562.js → chunk-O6ILVBYB.js} +2 -2
- package/dist/{chunk-BJPMKJTL.js → chunk-OJAJXU65.js} +102 -2
- package/dist/{chunk-FZL2HNWP.js → chunk-OMH3I5BH.js} +3 -3
- package/dist/{chunk-MF7QH4AX.js → chunk-P6UJ22XR.js} +5 -5
- package/dist/{chunk-HE4ZQXZM.js → chunk-P76AW3PA.js} +309 -15
- package/dist/{chunk-GZ4TKR3Q.js → chunk-PCCPXWJC.js} +48 -139
- package/dist/{chunk-6TJCUYC5.js → chunk-PGFRXGHA.js} +3 -3
- package/dist/{chunk-NIXVDQVO.js → chunk-PJRMMWU4.js} +2 -2
- package/dist/{chunk-X4W4XXWP.js → chunk-PKJ3K3GM.js} +5 -5
- package/dist/{chunk-KM2FBM3T.js → chunk-PVW2N63M.js} +302 -55
- package/dist/{chunk-Y7KBQ4BD.js → chunk-Q55UP5EZ.js} +22 -22
- package/dist/{chunk-7URGP4DD.js → chunk-QAFMLBPF.js} +12 -12
- package/dist/{chunk-KIAI6PWL.js → chunk-QEZSA2O7.js} +17 -17
- package/dist/{chunk-PKCMRPPB.js → chunk-QJ3OX7OC.js} +33 -27
- package/dist/{chunk-6EDQE7GO.js → chunk-QL4VNY4U.js} +2 -2
- package/dist/{chunk-6JLPXDWN.js → chunk-QR65C3DV.js} +5 -5
- package/dist/{chunk-ILFKECGI.js → chunk-QXGOEP44.js} +4 -4
- package/dist/chunk-QY7RGTUP.js +326 -0
- package/dist/{chunk-PGKHJYOB.js → chunk-RA64IK43.js} +1 -1
- package/dist/{chunk-XB5RFZHH.js → chunk-RLJDYLID.js} +12 -12
- package/dist/{chunk-AWECWW5Y.js → chunk-RMLUZYEA.js} +13 -11
- package/dist/chunk-RSVBX6A3.js +54 -0
- package/dist/chunk-RZWZO2JQ.js +42 -0
- package/dist/chunk-S5LSDXV4.js +40 -0
- package/dist/{chunk-TM7LC37P.js → chunk-SAC6FNKR.js} +181 -117
- package/dist/{chunk-DPHCFZ7W.js → chunk-SCBU46AJ.js} +3 -3
- package/dist/{chunk-EZIUFEN6.js → chunk-SGNHNN3G.js} +12 -12
- package/dist/{chunk-XKZHAD6Y.js → chunk-SHAAGH3T.js} +15 -15
- package/dist/chunk-SK5OYWIY.js +122 -0
- package/dist/{chunk-FR7JPYBD.js → chunk-SNSFQ47W.js} +12 -12
- package/dist/{chunk-FV5YFR6I.js → chunk-SSL6JMPA.js} +9 -9
- package/dist/{chunk-XEG3FE2R.js → chunk-TA2ZNDYD.js} +1 -1
- package/dist/{chunk-JF2NSTFO.js → chunk-TEHH47TG.js} +3 -3
- package/dist/{chunk-W5OYJMBT.js → chunk-TEZSZ24W.js} +5 -5
- package/dist/{chunk-SS66Q4VE.js → chunk-TH526O6E.js} +12 -12
- package/dist/{chunk-R6B6XAKK.js → chunk-TIAPEYWI.js} +4 -4
- package/dist/chunk-TLCRIAU3.js +44 -0
- package/dist/{chunk-FMKKVWZD.js → chunk-TQYBXDVH.js} +2 -2
- package/dist/chunk-TV4CGNEY.js +43 -0
- package/dist/{chunk-QICFHVRW.js → chunk-TVSNWIAM.js} +8 -6
- package/dist/{chunk-CHC5FKTU.js → chunk-TWHZU36X.js} +1 -1
- package/dist/{chunk-BMCKL3VQ.js → chunk-TXV2AYZB.js} +24 -24
- package/dist/{chunk-577AJVRS.js → chunk-U25OX22K.js} +2039 -289
- package/dist/{chunk-7EKESFWV.js → chunk-U4NNG3ES.js} +11 -11
- package/dist/{chunk-XQ3YIV5R.js → chunk-U5T4A2QV.js} +6 -6
- package/dist/{chunk-2XM6PYQQ.js → chunk-UT5OA7KA.js} +43 -11
- package/dist/{chunk-BXIX7S7O.js → chunk-V3VCUSQ6.js} +15 -15
- package/dist/{chunk-4QUQEBFT.js → chunk-V5XV3JSP.js} +6 -6
- package/dist/{chunk-F7YL2RZ4.js → chunk-VF4VOPMB.js} +23 -23
- package/dist/{chunk-3QAKDIEU.js → chunk-VLDM4QZM.js} +23 -23
- package/dist/chunk-VP5H6DII.js +34 -0
- package/dist/{chunk-N3NBWIYQ.js → chunk-VRYQJZFL.js} +10 -9
- package/dist/{chunk-FQSRHTTC.js → chunk-VS6FS472.js} +15 -15
- package/dist/{chunk-YMOJD5BO.js → chunk-VTMIRRIZ.js} +3 -3
- package/dist/{chunk-4PJADZRR.js → chunk-VXSJKWB7.js} +16 -16
- package/dist/{chunk-MTAUZW2Z.js → chunk-WE5VMPUP.js} +216 -106
- package/dist/{chunk-ZE3P35DA.js → chunk-WEG7DY5K.js} +9 -9
- package/dist/{chunk-V2TH46ZY.js → chunk-WIF7A6JU.js} +12 -12
- package/dist/{chunk-GFXLPJWY.js → chunk-WM4N2L4T.js} +2 -2
- package/dist/{chunk-XIWYUQZQ.js → chunk-X64BFQ3R.js} +9 -9
- package/dist/{chunk-QWVBEK4P.js → chunk-XJRC3ZDI.js} +13 -13
- package/dist/{chunk-F2FOQLJ7.js → chunk-XVIVWG7B.js} +6 -6
- package/dist/{chunk-XTVDAHH2.js → chunk-Y3ZKT6IF.js} +5 -5
- package/dist/{chunk-62YMDXY6.js → chunk-YURIUFKF.js} +16 -16
- package/dist/{chunk-HKTUIMH4.js → chunk-YY2WGL6S.js} +3 -3
- package/dist/{chunk-BDEKREZH.js → chunk-Z2BA4NNR.js} +3 -3
- package/dist/{chunk-MTEBM4Y4.js → chunk-Z47YGBUY.js} +19 -12
- package/dist/chunk-Z4JSRKNR.js +41 -0
- package/dist/{chunk-G2E5MNYP.js → chunk-Z53ZB34U.js} +7 -7
- package/dist/{chunk-NNUASOAA.js → chunk-ZBOPIYOY.js} +12 -12
- package/dist/{chunk-7GB4ZRE2.js → chunk-ZBQCLKTH.js} +12 -12
- package/dist/chunk-ZGI7DNJ6.js +38 -0
- package/dist/{chunk-P3TKKBAH.js → chunk-ZPT4QX3J.js} +4 -4
- package/dist/chunk-ZS47PQ3O.js +41 -0
- package/dist/{chunk-PIVKU64W.js → chunk-ZTIMXVV5.js} +2 -2
- package/dist/{chunk-T4RTWMJD.js → chunk-ZYASEL7K.js} +5 -5
- package/dist/files.json +469 -417
- package/dist/packages/sdk/npm/index.js +2309 -1983
- package/dist/packages/ui/dist/assets/{elk-api-Mo5w5xCa.js → elk-api-D2NcYpUJ.js} +2 -2
- package/dist/packages/ui/dist/assets/{index-Bp3XhPHX.css → index-C0JEkXyN.css} +1 -1
- package/dist/packages/ui/dist/assets/index-CT7skl01.js +29 -0
- package/dist/packages/ui/dist/index.html +2 -2
- package/package.json +4 -4
- package/dist/chunk-26PLPSQW.js +0 -48
- package/dist/chunk-2G4DFUWJ.js +0 -43
- package/dist/chunk-2M6WXO73.js +0 -38
- package/dist/chunk-5F3RJCHB.js +0 -45
- package/dist/chunk-B2VSVN4P.js +0 -34
- package/dist/chunk-B3O52AUQ.js +0 -275
- package/dist/chunk-CITDNDIZ.js +0 -53
- package/dist/chunk-DAQBIK5G.js +0 -47
- package/dist/chunk-DZRQDNPT.js +0 -34
- package/dist/chunk-FLOEZA6K.js +0 -29
- package/dist/chunk-FNHSVBRA.js +0 -48
- package/dist/chunk-FPGVOSOG.js +0 -41
- package/dist/chunk-FZ2E5LGK.js +0 -54
- package/dist/chunk-HB6XSGI6.js +0 -131
- package/dist/chunk-HUZQDKQK.js +0 -48
- package/dist/chunk-L4VJ4ETL.js +0 -41
- package/dist/chunk-XPCWQXTY.js +0 -37
- package/dist/chunk-YIEOFHOL.js +0 -30
- 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-
|
|
28
|
+
} from "./chunk-NCONDPHH.js";
|
|
12
29
|
import {
|
|
13
30
|
diffLines
|
|
14
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-CW5SEPUT.js";
|
|
15
32
|
import {
|
|
16
33
|
askHosts
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
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-
|
|
42
|
-
import "./chunk-
|
|
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-
|
|
50
|
-
import "./chunk-
|
|
51
|
-
import "./chunk-
|
|
52
|
-
import "./chunk-
|
|
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-
|
|
57
|
-
import "./chunk-
|
|
58
|
-
import "./chunk-
|
|
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-
|
|
120
|
+
} from "./chunk-U25OX22K.js";
|
|
87
121
|
import {
|
|
88
122
|
LockHeldError,
|
|
89
123
|
acquireLock,
|
|
90
124
|
writeFileAtomic
|
|
91
|
-
} from "./chunk-
|
|
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,
|
|
265
|
+
function linkChanges(repo, join3, before, after) {
|
|
112
266
|
const mine = (xs) => (xs ?? []).filter((x) => x.call.repo === repo);
|
|
113
|
-
const joined = mine(
|
|
114
|
-
const
|
|
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 ?
|
|
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(
|
|
152
|
-
outside: mine(
|
|
153
|
-
missed: mine(
|
|
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 =
|
|
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(
|
|
291
|
-
const curated = await readCatalog(
|
|
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 =
|
|
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
|
-
|
|
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(
|
|
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:
|
|
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(
|
|
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,
|
|
513
|
-
if (!
|
|
743
|
+
function joinLines(repo, join3, notes = [], o = {}) {
|
|
744
|
+
if (!join3)
|
|
514
745
|
return [...notes];
|
|
515
746
|
const out = [...notes];
|
|
516
|
-
const mine =
|
|
517
|
-
const into =
|
|
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 =
|
|
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
|
|
767
|
+
for (const m of join3.misses)
|
|
537
768
|
out.push(`Not joined: ${m.message} (${m.call.at}).`);
|
|
538
|
-
for (const x of
|
|
769
|
+
for (const x of join3.exposure ?? [])
|
|
539
770
|
out.push(`Exposure: ${x.message}.`);
|
|
540
|
-
for (const g of
|
|
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(
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(
|
|
824
|
+
await rm(join2(dir, ...old.split("/")), { force: true });
|
|
591
825
|
for (const [path, text] of Object.entries(files)) {
|
|
592
|
-
const full =
|
|
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(
|
|
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(
|
|
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
|
};
|