@maycombhq/atticus 2.0.0-beta.10 → 2.0.0-beta.11
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-GZ4TKR3Q.js → chunk-23VFQHFQ.js} +33 -134
- package/dist/{chunk-VKMTFIWS.js → chunk-26DBAGOP.js} +18 -18
- package/dist/{chunk-PKCMRPPB.js → chunk-27EDZN52.js} +33 -27
- package/dist/{chunk-AJJK7GLO.js → chunk-2K2ZEJVR.js} +3 -3
- package/dist/{chunk-XRO65C7V.js → chunk-3DDJLI7N.js} +8 -6
- package/dist/{chunk-XQ3YIV5R.js → chunk-3LU6YCSQ.js} +6 -6
- package/dist/{chunk-XTVDAHH2.js → chunk-3WU7LVTL.js} +5 -5
- package/dist/{chunk-6GNS32SI.js → chunk-4AYZQ3SY.js} +4 -4
- package/dist/{chunk-6VBXAGJX.js → chunk-4ONORLK5.js} +14 -14
- package/dist/{chunk-7TGYNOXD.js → chunk-4URR24DD.js} +7 -7
- package/dist/{chunk-CIUHAHM6.js → chunk-4UZJOQYK.js} +8 -8
- package/dist/chunk-4Y4FY34K.js +34 -0
- package/dist/{chunk-52R2YXP5.js → chunk-4YWRU7JK.js} +16 -16
- package/dist/chunk-52WCHTVZ.js +41 -0
- package/dist/{chunk-YIEOFHOL.js → chunk-55TBYJF2.js} +17 -11
- package/dist/{chunk-MH5OCRUM.js → chunk-5ACUW753.js} +2 -2
- package/dist/chunk-5BJFMAQU.js +32 -0
- package/dist/{chunk-YPBQNJHA.js → chunk-5ICB2BXH.js} +8 -8
- package/dist/{chunk-YGKYFMSL.js → chunk-5NZSJ5ZG.js} +3 -3
- package/dist/{chunk-YPIEYQF4.js → chunk-5P5BGG5L.js} +6 -6
- package/dist/{chunk-B7434AE2.js → chunk-5RUMHLIS.js} +2 -2
- package/dist/{chunk-5MI2SEV5.js → chunk-5TY4DTHQ.js} +3 -3
- package/dist/{chunk-NIXVDQVO.js → chunk-5V5BJACL.js} +2 -2
- package/dist/{chunk-7DUDLVFJ.js → chunk-6E2GJANQ.js} +20 -20
- package/dist/{chunk-RK6MKKKP.js → chunk-6N2GUZMZ.js} +1 -1
- package/dist/{chunk-LK44ULGI.js → chunk-6RGIM2ZH.js} +32 -6
- package/dist/{chunk-OS7PQ35Z.js → chunk-6V3DTQWK.js} +22 -22
- package/dist/{chunk-OSGQW2Z6.js → chunk-77RSRG3A.js} +8 -8
- package/dist/{chunk-5YIBJXGB.js → chunk-7A7IG7OA.js} +10 -10
- package/dist/{chunk-YLAJAI2W.js → chunk-7HQOZALR.js} +11 -11
- package/dist/{chunk-XB5RFZHH.js → chunk-7HWXYP4H.js} +12 -12
- package/dist/{chunk-PIVKU64W.js → chunk-7J7UY46S.js} +2 -2
- package/dist/{chunk-62YMDXY6.js → chunk-7KXYMC2P.js} +16 -16
- package/dist/{chunk-23M2LUYM.js → chunk-7LCQ7JAM.js} +1 -1
- package/dist/{chunk-5XN76FTF.js → chunk-7RGCQ4VZ.js} +5 -5
- package/dist/{chunk-CHC5FKTU.js → chunk-7RUMD56V.js} +1 -1
- package/dist/{chunk-IUD3ME4E.js → chunk-7S3XFWOU.js} +4 -4
- package/dist/{chunk-ZONE6E3Z.js → chunk-7SZPENUP.js} +2 -2
- package/dist/{chunk-T6USVBEJ.js → chunk-7VFVQX5K.js} +5 -5
- package/dist/chunk-ACWQDL6T.js +37 -0
- package/dist/{chunk-AKJTKMXU.js → chunk-ANCI3LFS.js} +5 -5
- package/dist/{chunk-B3O52AUQ.js → chunk-ASKDCMW5.js} +4 -4
- package/dist/chunk-ATNG5VOZ.js +122 -0
- package/dist/{chunk-I7IWQIEB.js → chunk-B3QOYE74.js} +4 -4
- package/dist/chunk-B3UHYXHU.js +41 -0
- package/dist/{chunk-GXJVY6WT.js → chunk-BA5DTXHQ.js} +5 -5
- package/dist/{chunk-5XDNUJ4P.js → chunk-BKFGGJKA.js} +2 -2
- package/dist/{chunk-DDAHCPGA.js → chunk-BQNEHB5U.js} +12 -12
- package/dist/{chunk-P3TKKBAH.js → chunk-BUWSOQLU.js} +4 -4
- package/dist/{chunk-X4W4XXWP.js → chunk-BX52REMA.js} +5 -5
- package/dist/{chunk-4SVJNVEE.js → chunk-BXBCMGIQ.js} +2 -0
- package/dist/{chunk-CRE4BJHM.js → chunk-C2YGYTU6.js} +23 -23
- package/dist/{chunk-7URGP4DD.js → chunk-C5JFMAXX.js} +12 -12
- package/dist/chunk-C75W7VXX.js +42 -0
- package/dist/{chunk-NGPU2ARF.js → chunk-CAN3EBE5.js} +1 -1
- package/dist/{chunk-FR7JPYBD.js → chunk-CE4S5ZY3.js} +12 -12
- package/dist/{chunk-BMHGA7WD.js → chunk-CRQ73DIF.js} +12 -12
- package/dist/{chunk-KIAI6PWL.js → chunk-CZI2ACNT.js} +17 -17
- package/dist/chunk-D7MWYJZF.js +43 -0
- package/dist/chunk-DDAEAZEV.js +54 -0
- package/dist/{chunk-G2E5MNYP.js → chunk-DGKNOPSE.js} +7 -7
- package/dist/{chunk-UF7TAFJM.js → chunk-DQNKG4HY.js} +18 -18
- package/dist/{chunk-6TJCUYC5.js → chunk-DS3ZEJVN.js} +3 -3
- package/dist/{chunk-3QAKDIEU.js → chunk-DYWTQXP4.js} +23 -23
- package/dist/chunk-E25G46RW.js +54 -0
- package/dist/{chunk-F2FOQLJ7.js → chunk-EAQFRD2B.js} +6 -6
- package/dist/{chunk-W5OYJMBT.js → chunk-EATSD7YD.js} +5 -5
- package/dist/{chunk-YGR6OCHQ.js → chunk-EBWIOODZ.js} +8 -14
- package/dist/{chunk-LVGBKKSM.js → chunk-EHUYLNLC.js} +15 -15
- package/dist/{chunk-IDGSU7JF.js → chunk-EI4KQYJ3.js} +9 -9
- package/dist/{chunk-FQSRHTTC.js → chunk-EQOSXLK3.js} +15 -15
- package/dist/{chunk-KC5DROFC.js → chunk-EV4TEFOD.js} +14 -14
- package/dist/{chunk-2KDSXJFJ.js → chunk-EW7MRMD5.js} +24 -6
- package/dist/{chunk-FZL2HNWP.js → chunk-EZSZFI54.js} +3 -3
- package/dist/{chunk-MKRBG5EF.js → chunk-FMRMTI7W.js} +1 -1
- package/dist/{chunk-E3JYO547.js → chunk-FOQXYMOR.js} +20 -20
- package/dist/{chunk-G5SFOH7P.js → chunk-G3PBLW4K.js} +8 -18
- package/dist/{chunk-2XM6PYQQ.js → chunk-G7WZH54P.js} +33 -11
- package/dist/{chunk-FTV6I76U.js → chunk-GG6HIU74.js} +25 -25
- package/dist/{chunk-6EDQE7GO.js → chunk-GMJXC5AL.js} +2 -2
- package/dist/chunk-GPLFYLGH.js +130 -0
- package/dist/{chunk-UR7RMZ3R.js → chunk-GVFUEGGM.js} +2 -2
- package/dist/{chunk-WGZWR4RF.js → chunk-GWSWS264.js} +5 -5
- package/dist/{chunk-NPCD54I7.js → chunk-H4VJO3M2.js} +8 -5
- package/dist/{chunk-73VPWF5R.js → chunk-HGQZTUAC.js} +4 -4
- package/dist/{chunk-2RX7PI2Y.js → chunk-HOUUBE74.js} +4 -4
- package/dist/{chunk-BDEKREZH.js → chunk-HQMCHHY5.js} +3 -3
- package/dist/{chunk-DPHCFZ7W.js → chunk-HR4DVO6X.js} +3 -3
- package/dist/chunk-HZYFLEWO.js +39 -0
- package/dist/chunk-IA2RKC6I.js +279 -0
- package/dist/{chunk-AY2IUF4K.js → chunk-IILZ7J3L.js} +541 -64
- package/dist/chunk-IRW64JFF.js +247 -0
- package/dist/{chunk-BJPMKJTL.js → chunk-IVHN2VYG.js} +100 -2
- package/dist/{chunk-OEI7LVRP.js → chunk-IWZPGIGT.js} +24 -24
- package/dist/{chunk-QICFHVRW.js → chunk-IY4PHPHT.js} +4 -4
- package/dist/{chunk-ZE3P35DA.js → chunk-J27QGXO4.js} +9 -9
- package/dist/{chunk-BMCKL3VQ.js → chunk-JBSD57N7.js} +24 -24
- package/dist/{chunk-67J3VZBA.js → chunk-JEUXCIRD.js} +5 -5
- package/dist/{chunk-577AJVRS.js → chunk-JMOLB347.js} +1976 -282
- package/dist/{chunk-7EKESFWV.js → chunk-JQX6BSE4.js} +11 -11
- package/dist/{chunk-YXJ4XOHF.js → chunk-JRPQX2EK.js} +4 -4
- package/dist/{chunk-MTEBM4Y4.js → chunk-JUQHYTXN.js} +18 -12
- package/dist/{chunk-APSVL2AI.js → chunk-JUZ75OG4.js} +15 -15
- package/dist/{chunk-7GB4ZRE2.js → chunk-KIWEBM6G.js} +12 -12
- package/dist/{chunk-KM2FBM3T.js → chunk-KLKENMWQ.js} +282 -50
- package/dist/chunk-KQK6SQPE.js +48 -0
- package/dist/{chunk-TM7LC37P.js → chunk-KQRYW7OS.js} +179 -115
- package/dist/{chunk-65C57N7P.js → chunk-KU4T2CXJ.js} +19 -19
- package/dist/{chunk-GFXLPJWY.js → chunk-KXZR2BLL.js} +2 -2
- package/dist/{chunk-MGVYVW7Q.js → chunk-L7I5PKGD.js} +1 -1
- package/dist/{chunk-XKS6THI5.js → chunk-LDIARP6F.js} +2 -2
- package/dist/{chunk-NNUASOAA.js → chunk-LEHZTKB3.js} +12 -12
- package/dist/{chunk-FJCFYKVO.js → chunk-LS3WR2RF.js} +86 -29
- package/dist/{chunk-Y4BRGOJR.js → chunk-LUPW4WLK.js} +13 -10
- package/dist/{chunk-HE4ZQXZM.js → chunk-LVBPY2M6.js} +14 -4
- package/dist/{chunk-EX6ZXS5K.js → chunk-LZWVK4YY.js} +4 -4
- package/dist/chunk-MCWWMMLN.js +48 -0
- package/dist/{chunk-BXIX7S7O.js → chunk-MKC7P5LD.js} +15 -15
- package/dist/{chunk-JQ7XQPQS.js → chunk-MKIULIUQ.js} +4 -4
- package/dist/{chunk-D3PO4DOZ.js → chunk-MMB2OHUY.js} +4 -2
- package/dist/{chunk-MTAUZW2Z.js → chunk-MQNBEO3N.js} +210 -104
- package/dist/{chunk-4PJADZRR.js → chunk-MSL3CLHX.js} +16 -16
- package/dist/{chunk-5KTOPOEP.js → chunk-MV4637YA.js} +25 -25
- package/dist/{chunk-WARBF2KY.js → chunk-MYKQVS5W.js} +4 -4
- package/dist/{chunk-4QUQEBFT.js → chunk-MYOW3RPC.js} +6 -6
- package/dist/{chunk-ROTY5J2L.js → chunk-NBGBMRIS.js} +1 -1
- package/dist/{chunk-BUYJL3GJ.js → chunk-NBQO75XT.js} +1 -1
- package/dist/chunk-NCR24CPV.js +41 -0
- package/dist/chunk-NDW4ROST.js +38 -0
- package/dist/{chunk-AWECWW5Y.js → chunk-NELU7LSL.js} +13 -11
- package/dist/{chunk-R64GLVBO.js → chunk-NG5R2WIY.js} +10 -10
- package/dist/{chunk-ZZXF6OOJ.js → chunk-NH5QH3WS.js} +2 -2
- package/dist/{chunk-XIWYUQZQ.js → chunk-NIYB5K5B.js} +9 -9
- package/dist/{chunk-LDKUC2QJ.js → chunk-NR5T46ZY.js} +17 -17
- package/dist/{chunk-PEF5OEMB.js → chunk-NX6QEEOA.js} +4 -4
- package/dist/{chunk-OGRWQ562.js → chunk-O6ILVBYB.js} +2 -2
- package/dist/{chunk-Y7KBQ4BD.js → chunk-OFWYZH6B.js} +22 -22
- package/dist/{chunk-N3NBWIYQ.js → chunk-OHXTB6CO.js} +11 -9
- package/dist/chunk-OJN7WME4.js +34 -0
- package/dist/{chunk-2HMWX4T6.js → chunk-OR5VRULZ.js} +11 -11
- package/dist/{chunk-UBWCUP3G.js → chunk-ORZSD2KD.js} +2 -2
- package/dist/{chunk-V2TH46ZY.js → chunk-OXVVRJDQ.js} +12 -12
- package/dist/{chunk-7YYEKTYF.js → chunk-PQW7PYUR.js} +8 -8
- package/dist/{chunk-EZIUFEN6.js → chunk-Q32Y5T2U.js} +12 -12
- package/dist/{chunk-FOGG4AUR.js → chunk-QWHTTA2X.js} +23 -7
- package/dist/{chunk-HKTUIMH4.js → chunk-R3RVFCJ2.js} +3 -3
- package/dist/{chunk-J5LHDJU4.js → chunk-R3VFLYZZ.js} +7 -7
- package/dist/{chunk-QKEFZRHS.js → chunk-R6UTCLH5.js} +17 -17
- package/dist/{chunk-SS66Q4VE.js → chunk-RB2VSED2.js} +12 -12
- package/dist/chunk-REWZE2XI.js +53 -0
- package/dist/{chunk-MF7QH4AX.js → chunk-RIEFYHXI.js} +5 -5
- package/dist/{chunk-7F2RUWPU.js → chunk-RJDP642F.js} +1 -1
- package/dist/{chunk-YFSSNGLR.js → chunk-RWMSJP7H.js} +31 -29
- package/dist/{chunk-JMSEEBN4.js → chunk-S2FDPN32.js} +1 -1
- package/dist/chunk-S5LSDXV4.js +40 -0
- package/dist/{chunk-OJLRFGBP.js → chunk-S7ZWCMDO.js} +79 -15
- package/dist/{chunk-ILFKECGI.js → chunk-SG5KY4VB.js} +4 -4
- package/dist/{chunk-FEZE6NIA.js → chunk-SH7AZZDA.js} +18 -18
- package/dist/{chunk-E3Z67HRK.js → chunk-SILY6ZEZ.js} +4 -4
- package/dist/{chunk-5IALSMZ2.js → chunk-SINJKQSI.js} +14 -14
- package/dist/chunk-SIUDWWKS.js +47 -0
- package/dist/{chunk-XEG3FE2R.js → chunk-SKMHS4CL.js} +1 -1
- package/dist/chunk-SNHOLLGN.js +280 -0
- package/dist/{chunk-LTQANUDH.js → chunk-SUQZGPVG.js} +25 -25
- package/dist/{chunk-47QE246J.js → chunk-T6ESD5KM.js} +5 -5
- package/dist/{chunk-YVLMBAYE.js → chunk-TC3KTG33.js} +3 -3
- package/dist/{chunk-IV7BCWWN.js → chunk-TCADP67G.js} +3 -3
- package/dist/{chunk-6JLPXDWN.js → chunk-TEBBD4XH.js} +5 -5
- package/dist/{chunk-F7UQR4ZX.js → chunk-TGEOLIAK.js} +3 -3
- package/dist/{chunk-FMKKVWZD.js → chunk-TQYBXDVH.js} +2 -2
- package/dist/{chunk-TZDSDDSV.js → chunk-TZXHUDI6.js} +2 -2
- package/dist/{chunk-YMOJD5BO.js → chunk-U5PDQTLA.js} +3 -3
- package/dist/{chunk-CNKGYDMG.js → chunk-U6YKL7SI.js} +23 -23
- package/dist/{chunk-7UKVYFQ2.js → chunk-UABFFMWH.js} +8 -8
- package/dist/{chunk-XPEEICAO.js → chunk-UFBKJOWB.js} +15 -15
- package/dist/chunk-UFTQIK2J.js +43 -0
- package/dist/{chunk-ZP4FJHR4.js → chunk-UNFCFJMF.js} +18 -18
- package/dist/{chunk-IZNSAEBX.js → chunk-UTR67XU2.js} +2 -2
- package/dist/{chunk-6GWHKMQR.js → chunk-V4XKYGLK.js} +4 -4
- package/dist/{chunk-ISNZYKAS.js → chunk-VYNZED7B.js} +21 -21
- package/dist/{chunk-FV5YFR6I.js → chunk-WCLAOKCH.js} +9 -9
- package/dist/chunk-WFYHOXTB.js +29 -0
- package/dist/{chunk-QWVBEK4P.js → chunk-WGU6NIUV.js} +13 -13
- package/dist/{chunk-R4TBNKKC.js → chunk-WIMOJMAK.js} +974 -489
- package/dist/{chunk-XKZHAD6Y.js → chunk-WKXOEIOY.js} +15 -15
- package/dist/chunk-WUE6HKIU.js +790 -0
- package/dist/{chunk-R6B6XAKK.js → chunk-WUP77GG2.js} +4 -4
- package/dist/{chunk-RRVT4MPS.js → chunk-XF3DATVU.js} +18 -18
- package/dist/{chunk-KIHOIVST.js → chunk-XJAJQGXJ.js} +3 -3
- package/dist/{chunk-Y5PZHS4K.js → chunk-XKJRPVJO.js} +5 -5
- package/dist/{chunk-N4QZJJVB.js → chunk-XNRPCI23.js} +5 -5
- package/dist/{chunk-XNYNEEBR.js → chunk-XOVLGBKI.js} +18 -18
- package/dist/{chunk-GR6YKM55.js → chunk-XPJR74MA.js} +95 -13
- package/dist/{chunk-4GZXS6S2.js → chunk-XPWSNKF3.js} +226 -8
- package/dist/{chunk-LRS573EX.js → chunk-XR5DD5DQ.js} +4 -4
- package/dist/{chunk-PGKHJYOB.js → chunk-XZJE6WIT.js} +1 -1
- package/dist/{chunk-3GTZ2OON.js → chunk-Y5AYBGLB.js} +16 -10
- package/dist/{chunk-OIU657QQ.js → chunk-YLAM4HZH.js} +4 -4
- package/dist/{chunk-JF2NSTFO.js → chunk-YVCOQ5TZ.js} +3 -3
- package/dist/{chunk-F7YL2RZ4.js → chunk-YWOMGMZB.js} +23 -23
- package/dist/{chunk-WLIIQ2A4.js → chunk-YWZDAZMA.js} +7 -7
- package/dist/{chunk-JAA53T23.js → chunk-Z2EYRUOH.js} +20 -20
- package/dist/{chunk-UYYN2IUZ.js → chunk-Z46OXTBE.js} +6 -6
- package/dist/chunk-ZHWSL6SR.js +45 -0
- package/dist/chunk-ZJQUIG3A.js +87 -0
- package/dist/{chunk-T4RTWMJD.js → chunk-ZKUDS7JG.js} +5 -5
- package/dist/{chunk-HHUFVJF7.js → chunk-ZTNS3L5Z.js} +6 -6
- package/dist/files.json +471 -423
- package/dist/packages/sdk/npm/index.js +2300 -1983
- package/dist/packages/ui/dist/assets/{elk-api-Mo5w5xCa.js → elk-api-DDup23Us.js} +2 -2
- package/dist/packages/ui/dist/assets/{index-Bp3XhPHX.css → index-C0JEkXyN.css} +1 -1
- package/dist/packages/ui/dist/assets/index-mTOWhQZm.js +29 -0
- package/dist/packages/ui/dist/index.html +2 -2
- package/package.json +5 -5
- 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-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/packages/ui/dist/assets/index-DM212ZbV.js +0 -29
|
@@ -3,26 +3,50 @@ 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-52WCHTVZ.js";
|
|
9
|
+
import {
|
|
10
|
+
estateFreshness
|
|
11
|
+
} from "./chunk-G3PBLW4K.js";
|
|
12
|
+
import {
|
|
13
|
+
readPlanProgress
|
|
14
|
+
} from "./chunk-LVBPY2M6.js";
|
|
15
|
+
import "./chunk-EW7MRMD5.js";
|
|
16
|
+
import {
|
|
17
|
+
writeRepoSpecs
|
|
18
|
+
} from "./chunk-IA2RKC6I.js";
|
|
19
|
+
import {
|
|
20
|
+
checkoutOf
|
|
21
|
+
} from "./chunk-ASKDCMW5.js";
|
|
22
|
+
import "./chunk-LDIARP6F.js";
|
|
23
|
+
import "./chunk-MYKQVS5W.js";
|
|
24
|
+
import "./chunk-EBWIOODZ.js";
|
|
6
25
|
import {
|
|
7
26
|
linkEvidenceAbout,
|
|
8
27
|
linkEvidenceLines,
|
|
9
28
|
loadLinkEvidence,
|
|
10
29
|
writeRepoContracts
|
|
11
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-BA5DTXHQ.js";
|
|
12
31
|
import {
|
|
13
32
|
diffLines
|
|
14
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-4URR24DD.js";
|
|
15
34
|
import {
|
|
16
35
|
askHosts
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
36
|
+
} from "./chunk-XR5DD5DQ.js";
|
|
37
|
+
import "./chunk-3G4YI4ZU.js";
|
|
38
|
+
import "./chunk-EI4KQYJ3.js";
|
|
39
|
+
import "./chunk-6RGIM2ZH.js";
|
|
40
|
+
import "./chunk-VOGCSYOI.js";
|
|
41
|
+
import "./chunk-T6ESD5KM.js";
|
|
42
|
+
import "./chunk-3LU6YCSQ.js";
|
|
43
|
+
import "./chunk-L7I5PKGD.js";
|
|
44
|
+
import "./chunk-CAN3EBE5.js";
|
|
24
45
|
import {
|
|
25
46
|
TARGETS_STEP,
|
|
47
|
+
answerReconfirmed,
|
|
48
|
+
answerRuleOffers,
|
|
49
|
+
answeredQuestionOfCall,
|
|
26
50
|
catalogWithFacts,
|
|
27
51
|
diffCatalogs,
|
|
28
52
|
diffIsEmpty,
|
|
@@ -37,28 +61,35 @@ import {
|
|
|
37
61
|
staleTargetQuestions,
|
|
38
62
|
targetQuestionFor,
|
|
39
63
|
targetsFromAnswers,
|
|
64
|
+
topicQuestionDrafts,
|
|
40
65
|
writeCatalog
|
|
41
|
-
} from "./chunk-
|
|
42
|
-
import "./chunk-
|
|
66
|
+
} from "./chunk-IILZ7J3L.js";
|
|
67
|
+
import "./chunk-TEBBD4XH.js";
|
|
43
68
|
import {
|
|
44
69
|
codeLinkerFor,
|
|
45
70
|
frameworkFacts,
|
|
46
71
|
frameworkGaps,
|
|
47
72
|
renderMap,
|
|
48
73
|
trustOf
|
|
49
|
-
} from "./chunk-
|
|
50
|
-
import "./chunk-
|
|
51
|
-
import "./chunk-
|
|
52
|
-
import "./chunk-
|
|
74
|
+
} from "./chunk-XPWSNKF3.js";
|
|
75
|
+
import "./chunk-WIMOJMAK.js";
|
|
76
|
+
import "./chunk-5V5BJACL.js";
|
|
77
|
+
import "./chunk-GVFUEGGM.js";
|
|
53
78
|
import {
|
|
54
79
|
baseClonePath,
|
|
55
80
|
loadRepos
|
|
56
|
-
} from "./chunk-
|
|
57
|
-
import "./chunk-
|
|
58
|
-
import "./chunk-
|
|
81
|
+
} from "./chunk-XZJE6WIT.js";
|
|
82
|
+
import "./chunk-FMRMTI7W.js";
|
|
83
|
+
import "./chunk-BKFGGJKA.js";
|
|
59
84
|
import {
|
|
85
|
+
CALL_SECURITY_CHECK,
|
|
60
86
|
SPEC_HEADER_SCHEMA_VERSION,
|
|
87
|
+
TERM_STEP,
|
|
88
|
+
TOPICS_STEP_ID,
|
|
89
|
+
callSecurityParams,
|
|
61
90
|
catalogDirOf,
|
|
91
|
+
checkCallSecurity,
|
|
92
|
+
factIdPart,
|
|
62
93
|
factsDirOf,
|
|
63
94
|
factsRelOf,
|
|
64
95
|
flowFiles,
|
|
@@ -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-JMOLB347.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")
|
|
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,10 +262,10 @@ 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 how = new Map((
|
|
267
|
+
const joined = mine(join3?.joins);
|
|
268
|
+
const how = new Map((join3?.joins ?? []).map((j) => [j.interface, j.how]));
|
|
115
269
|
const ifaces = (rs) => new Map(rs.filter((r) => r.kind === "Interface").map((r) => [r.id, r]));
|
|
116
270
|
const was = ifaces(before);
|
|
117
271
|
const now = ifaces(after);
|
|
@@ -148,9 +302,9 @@ function linkChanges(repo, join2, before, after) {
|
|
|
148
302
|
calls: {
|
|
149
303
|
joined: joined.length,
|
|
150
304
|
inferred: joined.filter(isGuessedJoin).length,
|
|
151
|
-
asked: mine(
|
|
152
|
-
outside: mine(
|
|
153
|
-
missed: mine(
|
|
305
|
+
asked: mine(join3?.asks).filter((a) => !linked.has(`${a.call.repo}|${a.call.at}`)).length,
|
|
306
|
+
outside: mine(join3?.outside).length,
|
|
307
|
+
missed: mine(join3?.misses).length
|
|
154
308
|
},
|
|
155
309
|
added: [...now.values()].filter((r) => !was.has(r.id)).map((r) => line(r, true)).sort(byId),
|
|
156
310
|
removed: [...was.values()].filter((r) => !now.has(r.id)).map((r) => line(r, false)).sort(byId),
|
|
@@ -188,7 +342,7 @@ function linkLines(l, report, o = {}) {
|
|
|
188
342
|
return out;
|
|
189
343
|
}
|
|
190
344
|
async function writeLinksIntoReport(root, repo, links, exposure = [], evidence, shared) {
|
|
191
|
-
const file =
|
|
345
|
+
const file = join2(factsDirOf(root), `${repo}.verify.yaml`);
|
|
192
346
|
const text = await readFile(file, "utf8").catch(() => void 0);
|
|
193
347
|
if (text === void 0)
|
|
194
348
|
return;
|
|
@@ -287,8 +441,8 @@ function kindLine(byKind) {
|
|
|
287
441
|
async function projectFactsIntoCatalog(root, repo, facts, given = {}) {
|
|
288
442
|
const op = given.op ?? await loadOrgPack(orgPackDirOf(root));
|
|
289
443
|
const cacheOpts = given.cache === false ? {} : { cacheRoot: root };
|
|
290
|
-
const existing = given.existing ?? (await readCatalog(
|
|
291
|
-
const curated = await readCatalog(
|
|
444
|
+
const existing = given.existing ?? (await readCatalog(join2(catalogDirOf(root), "generated"), cacheOpts)).records;
|
|
445
|
+
const curated = await readCatalog(join2(catalogDirOf(root), "curated"), cacheOpts);
|
|
292
446
|
const everyTarget = (await listQuestions(root, { step: TARGETS_STEP })).questions;
|
|
293
447
|
const answered = everyTarget.filter((q) => q.repo === repo);
|
|
294
448
|
const repoType = estateRepos(op).find((r) => r.id === repo)?.type;
|
|
@@ -327,6 +481,7 @@ async function projectFactsIntoCatalog(root, repo, facts, given = {}) {
|
|
|
327
481
|
op,
|
|
328
482
|
existing,
|
|
329
483
|
answered,
|
|
484
|
+
everyTarget,
|
|
330
485
|
targets,
|
|
331
486
|
ruled,
|
|
332
487
|
estate,
|
|
@@ -350,7 +505,7 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
|
|
|
350
505
|
}
|
|
351
506
|
try {
|
|
352
507
|
const op = await loadOrgPack(orgPackDirOf(root));
|
|
353
|
-
const generated =
|
|
508
|
+
const generated = join2(catalogDirOf(root), "generated");
|
|
354
509
|
const existing = await readCatalog(generated, { cacheRoot: root });
|
|
355
510
|
if (isPrototypeRepo(op, repo)) {
|
|
356
511
|
for (const n of prototypeLeftOut({ repo, facts, existing: [], op, decisions: [] }).notes)
|
|
@@ -372,7 +527,8 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
|
|
|
372
527
|
}
|
|
373
528
|
const rerun = `atticus verify ${repo} --write`;
|
|
374
529
|
await writeRepoContracts(root, repo, o.dir, facts, (n) => io.err(n));
|
|
375
|
-
|
|
530
|
+
await writeRepoSpecs(root, repo, o.dir, facts, (n) => io.err(n));
|
|
531
|
+
const { answered, everyTarget, targets, ruled, estate, result, diff, links, evidenceProblems, sharedMaps } = await projectFactsIntoCatalog(root, repo, facts, { op, existing: existing.records });
|
|
376
532
|
for (const p of evidenceProblems)
|
|
377
533
|
io.err(p);
|
|
378
534
|
for (const i of result.invalid)
|
|
@@ -396,7 +552,7 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
|
|
|
396
552
|
const files = {};
|
|
397
553
|
for (const f of flows)
|
|
398
554
|
for (const p of flowFiles(f)) {
|
|
399
|
-
const text = await readFile(
|
|
555
|
+
const text = await readFile(join2(o.dir, ...p.split("/")), "utf8").catch(() => void 0);
|
|
400
556
|
if (text !== void 0)
|
|
401
557
|
files[p] = specFileHash(text);
|
|
402
558
|
}
|
|
@@ -424,7 +580,10 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
|
|
|
424
580
|
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
581
|
const drafted = groupedTargetDrafts(facts, result.records, op, result.join?.asks, {
|
|
426
582
|
ask: asked,
|
|
427
|
-
split: splitTargetGroups(answered)
|
|
583
|
+
split: splitTargetGroups(answered),
|
|
584
|
+
// ADR 0162 (F8): the suggestions read the estate's facts and the earlier answers.
|
|
585
|
+
estate: estate.repos,
|
|
586
|
+
questions: everyTarget
|
|
428
587
|
});
|
|
429
588
|
for (const t of drafted) {
|
|
430
589
|
const r = await raiseQuestions(root, [t.draft], {
|
|
@@ -439,6 +598,19 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
|
|
|
439
598
|
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}.`);
|
|
440
599
|
}
|
|
441
600
|
}
|
|
601
|
+
for (const t of topicQuestionDrafts(repo, result.records)) {
|
|
602
|
+
const r = await raiseQuestions(root, [t.draft], {
|
|
603
|
+
step: TOPICS_STEP_ID,
|
|
604
|
+
repo,
|
|
605
|
+
command: o.command,
|
|
606
|
+
rerun,
|
|
607
|
+
at
|
|
608
|
+
});
|
|
609
|
+
for (const q of r.raised) {
|
|
610
|
+
raised.push(q);
|
|
611
|
+
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}.`);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
442
614
|
for (const s of staleTargetQuestions({
|
|
443
615
|
repo,
|
|
444
616
|
facts,
|
|
@@ -455,6 +627,50 @@ async function writeFactsIntoCatalog(root, repo, facts, o, io) {
|
|
|
455
627
|
});
|
|
456
628
|
lines.push(`Retired ${s.id}: ${s.why}.`);
|
|
457
629
|
}
|
|
630
|
+
const reopened = /* @__PURE__ */ new Set();
|
|
631
|
+
const unsettled = /* @__PURE__ */ new Map();
|
|
632
|
+
for (const m of result.answerMisses ?? []) {
|
|
633
|
+
const callerFacts = m.call.repo === repo ? facts : estate.repos.find((x) => x.repo === m.call.repo)?.facts;
|
|
634
|
+
const q = callerFacts ? answeredQuestionOfCall(m.call.repo, callerFacts, everyTarget, m.call.fact) : void 0;
|
|
635
|
+
if (!q || reopened.has(q.id))
|
|
636
|
+
continue;
|
|
637
|
+
if (answerReconfirmed(q))
|
|
638
|
+
continue;
|
|
639
|
+
const named2 = repoOfTarget(op, m.target);
|
|
640
|
+
if (!unsettled.has(named2))
|
|
641
|
+
unsettled.set(named2, await readNotSettled(root, named2));
|
|
642
|
+
const notYet = unsettled.get(named2);
|
|
643
|
+
if (notYet) {
|
|
644
|
+
lines.push(`${m.target} is read, but ${notYet}: ${q.id}'s answer is checked against it once the read is whole and fresh.`);
|
|
645
|
+
continue;
|
|
646
|
+
}
|
|
647
|
+
reopened.add(q.id);
|
|
648
|
+
const why = `${m.target} is read now, and no route of it serves the call: ${m.message} (${m.call.at})`;
|
|
649
|
+
await reopenQuestion(root, q.id, { why, at });
|
|
650
|
+
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.`);
|
|
651
|
+
}
|
|
652
|
+
const typeOf = new Map(estateRepos(op).map((r) => [r.id, r.type]));
|
|
653
|
+
for (const offer of answerRuleOffers({
|
|
654
|
+
repos: [{ repo, facts }, ...estate.repos].map((r) => ({
|
|
655
|
+
...r,
|
|
656
|
+
...typeOf.get(r.repo) ? { type: typeOf.get(r.repo) } : {}
|
|
657
|
+
})),
|
|
658
|
+
questions: everyTarget.filter((q) => !reopened.has(q.id))
|
|
659
|
+
}))
|
|
660
|
+
if (offer.repos.includes(repo))
|
|
661
|
+
lines.push(offer.line);
|
|
662
|
+
const termed = await termsWrite(root, repo, {
|
|
663
|
+
op,
|
|
664
|
+
terms: result.terms,
|
|
665
|
+
repos: [{ repo, facts }, ...estate.repos],
|
|
666
|
+
join: result.join,
|
|
667
|
+
command: o.command,
|
|
668
|
+
rerun,
|
|
669
|
+
at,
|
|
670
|
+
dirOf: (r) => r === repo ? Promise.resolve(o.dir) : checkoutOf(root, r)
|
|
671
|
+
});
|
|
672
|
+
raised.push(...termed.raised);
|
|
673
|
+
lines.push(...termed.lines);
|
|
458
674
|
const byKind = countByKind(diff);
|
|
459
675
|
io.out(`Wrote the catalog for ${repo}: ${written.written} files written, ${written.removed} removed, ${written.unchanged} unchanged.`);
|
|
460
676
|
io.out(diffIsEmpty(diff) ? " No catalog changes." : ` Records: ${kindLine(byKind)}.`);
|
|
@@ -509,15 +725,15 @@ function targetId(facts, repo, id) {
|
|
|
509
725
|
const q = f ? targetQuestionFor(f) : void 0;
|
|
510
726
|
return q ? questionId({ step: TARGETS_STEP, repo, ...q }) : void 0;
|
|
511
727
|
}
|
|
512
|
-
function joinLines(repo,
|
|
513
|
-
if (!
|
|
728
|
+
function joinLines(repo, join3, notes = [], o = {}) {
|
|
729
|
+
if (!join3)
|
|
514
730
|
return [...notes];
|
|
515
731
|
const out = [...notes];
|
|
516
|
-
const mine =
|
|
517
|
-
const into =
|
|
732
|
+
const mine = join3.joins.filter((j) => j.call.repo === repo && j.call.repo !== j.entry.repo);
|
|
733
|
+
const into = join3.joins.filter((j) => j.entry.repo === repo && j.call.repo !== repo);
|
|
518
734
|
if (mine.length || into.length)
|
|
519
735
|
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 =
|
|
736
|
+
const guessed = join3.joins.filter((j) => j.call.repo === repo && j.inferred);
|
|
521
737
|
if (guessed.length) {
|
|
522
738
|
const own = guessed.filter((j) => j.inferred.within === "repo").length;
|
|
523
739
|
const where = [
|
|
@@ -533,16 +749,16 @@ function joinLines(repo, join2, notes = [], o = {}) {
|
|
|
533
749
|
out.push(` ${j.call.at} ${what}${named} \u2192 ${j.entry.component}${there}`);
|
|
534
750
|
}
|
|
535
751
|
}
|
|
536
|
-
for (const m of
|
|
752
|
+
for (const m of join3.misses)
|
|
537
753
|
out.push(`Not joined: ${m.message} (${m.call.at}).`);
|
|
538
|
-
for (const x of
|
|
754
|
+
for (const x of join3.exposure ?? [])
|
|
539
755
|
out.push(`Exposure: ${x.message}.`);
|
|
540
|
-
for (const g of
|
|
756
|
+
for (const g of join3.gaps.slice(0, 10))
|
|
541
757
|
out.push(`Field gap: ${g.message}.`);
|
|
542
758
|
return out;
|
|
543
759
|
}
|
|
544
760
|
async function renderRepoMap(root, repo, io) {
|
|
545
|
-
const records = (await readCatalog(
|
|
761
|
+
const records = (await readCatalog(join2(catalogDirOf(root), "generated"), { cacheRoot: root })).records;
|
|
546
762
|
const spec = await readRepoSpec(root, repo, { cacheRoot: root });
|
|
547
763
|
const ofRepo = records.some((r) => r.kind === "Component" && r.repo === repo);
|
|
548
764
|
if (!ofRepo && spec.flows.length === 0) {
|
|
@@ -550,7 +766,7 @@ async function renderRepoMap(root, repo, io) {
|
|
|
550
766
|
return void 0;
|
|
551
767
|
}
|
|
552
768
|
let trust;
|
|
553
|
-
const report =
|
|
769
|
+
const report = join2(factsDirOf(root), `${repo}.verify.yaml`);
|
|
554
770
|
if (existsSync(report)) {
|
|
555
771
|
try {
|
|
556
772
|
trust = trustOf((0, import_yaml.parse)(await readFile(report, "utf8")));
|
|
@@ -564,6 +780,7 @@ async function renderRepoMap(root, repo, io) {
|
|
|
564
780
|
const url = manifest?.url && manifest.url !== "." && !manifest.url.startsWith("./") ? manifest.url : void 0;
|
|
565
781
|
const codeLink = codeLinkerFor(url ? { url } : { dir: adopted ? "" : posix(relative(root, baseClonePath(root, repo))) });
|
|
566
782
|
const rel = `${mapRelOf(root)}/${repo}`;
|
|
783
|
+
const kept = await factsOf(root, repo);
|
|
567
784
|
const files = renderMap({
|
|
568
785
|
repo,
|
|
569
786
|
records,
|
|
@@ -579,17 +796,19 @@ async function renderRepoMap(root, repo, io) {
|
|
|
579
796
|
} : {},
|
|
580
797
|
// What the repo is built on (ADR 0124 addendum A-framework): read from the facts, since no
|
|
581
798
|
// catalog record holds a framework.
|
|
582
|
-
...builtOnOf(
|
|
799
|
+
...builtOnOf(kept),
|
|
800
|
+
// ADR 0163: the organisation's terms it writes, read from the facts as the frameworks are.
|
|
801
|
+
...termsOfFacts(kept),
|
|
583
802
|
questions: open.map((q) => ({ id: q.id, question: q.question, evidence: q.evidence })),
|
|
584
803
|
paths: { map: rel, questions: questionsRelOf(root), specs: specRelOf(root, repo) },
|
|
585
804
|
codeLink
|
|
586
805
|
});
|
|
587
|
-
const dir =
|
|
806
|
+
const dir = join2(mapDirOf(root), repo);
|
|
588
807
|
for (const old of await listFiles(dir))
|
|
589
808
|
if (!(old in files))
|
|
590
|
-
await rm(
|
|
809
|
+
await rm(join2(dir, ...old.split("/")), { force: true });
|
|
591
810
|
for (const [path, text] of Object.entries(files)) {
|
|
592
|
-
const full =
|
|
811
|
+
const full = join2(dir, ...path.split("/"));
|
|
593
812
|
const now = await readFile(full, "utf8").catch(() => void 0);
|
|
594
813
|
if (now !== text)
|
|
595
814
|
await writeFileAtomic(full, text);
|
|
@@ -599,7 +818,7 @@ async function renderRepoMap(root, repo, io) {
|
|
|
599
818
|
return paths;
|
|
600
819
|
}
|
|
601
820
|
async function factsOf(root, repo) {
|
|
602
|
-
const text = await readFile(
|
|
821
|
+
const text = await readFile(join2(factsDirOf(root), `${repo}.jsonl`), "utf8").catch(() => void 0);
|
|
603
822
|
if (text === void 0)
|
|
604
823
|
return [];
|
|
605
824
|
const p = parseFacts(text);
|
|
@@ -617,6 +836,18 @@ function builtOnOf(facts) {
|
|
|
617
836
|
const gaps = frameworkGaps(facts).map((g) => ({ framework: g.framework, question: g.question }));
|
|
618
837
|
return { frameworks: { built, ...gaps.length ? { gaps } : {} } };
|
|
619
838
|
}
|
|
839
|
+
function termsOfFacts(facts) {
|
|
840
|
+
const terms = facts.flatMap((f) => f.kind === "term" ? [
|
|
841
|
+
{
|
|
842
|
+
term: f.term,
|
|
843
|
+
value: f.value,
|
|
844
|
+
role: f.role,
|
|
845
|
+
cite: { path: f.cite.file, line: f.cite.line, commit: f.commit },
|
|
846
|
+
...f.meaning ? { meaning: { path: f.meaning.file, line: f.meaning.line, commit: f.commit } } : {}
|
|
847
|
+
}
|
|
848
|
+
] : []);
|
|
849
|
+
return terms.length ? { terms } : {};
|
|
850
|
+
}
|
|
620
851
|
async function listFiles(dir) {
|
|
621
852
|
const out = [];
|
|
622
853
|
const walk = async (d, prefix) => {
|
|
@@ -628,7 +859,7 @@ async function listFiles(dir) {
|
|
|
628
859
|
}
|
|
629
860
|
for (const e of entries)
|
|
630
861
|
if (e.isDirectory())
|
|
631
|
-
await walk(
|
|
862
|
+
await walk(join2(d, e.name), `${prefix}${e.name}/`);
|
|
632
863
|
else
|
|
633
864
|
out.push(`${prefix}${e.name}`);
|
|
634
865
|
};
|
|
@@ -655,5 +886,6 @@ export {
|
|
|
655
886
|
projectFactsIntoCatalog,
|
|
656
887
|
sharedLines,
|
|
657
888
|
sharedReport,
|
|
889
|
+
termsOfFacts,
|
|
658
890
|
writeFactsIntoCatalog
|
|
659
891
|
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { createRequire as __atticusCreateRequire } from "node:module";
|
|
2
|
+
import { fileURLToPath as __atticusFileURLToPath } from "node:url";
|
|
3
|
+
var require = __atticusCreateRequire(import.meta.url);
|
|
4
|
+
var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
|
|
5
|
+
var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
|
|
6
|
+
import {
|
|
7
|
+
benchFactsCommand,
|
|
8
|
+
benchFetch,
|
|
9
|
+
benchRepos,
|
|
10
|
+
benchResults,
|
|
11
|
+
benchRun,
|
|
12
|
+
benchSurvey,
|
|
13
|
+
benchVerify
|
|
14
|
+
} from "./chunk-DGKNOPSE.js";
|
|
15
|
+
import "./chunk-NELU7LSL.js";
|
|
16
|
+
import "./chunk-7A7IG7OA.js";
|
|
17
|
+
import "./chunk-Z46OXTBE.js";
|
|
18
|
+
import "./chunk-XKJRPVJO.js";
|
|
19
|
+
import "./chunk-PQW7PYUR.js";
|
|
20
|
+
import "./chunk-SKMHS4CL.js";
|
|
21
|
+
import "./chunk-EV4TEFOD.js";
|
|
22
|
+
import "./chunk-6N2GUZMZ.js";
|
|
23
|
+
import "./chunk-T6ESD5KM.js";
|
|
24
|
+
import "./chunk-3LU6YCSQ.js";
|
|
25
|
+
import "./chunk-L7I5PKGD.js";
|
|
26
|
+
import "./chunk-CAN3EBE5.js";
|
|
27
|
+
import "./chunk-IILZ7J3L.js";
|
|
28
|
+
import "./chunk-TEBBD4XH.js";
|
|
29
|
+
import "./chunk-XPWSNKF3.js";
|
|
30
|
+
import "./chunk-WIMOJMAK.js";
|
|
31
|
+
import "./chunk-5V5BJACL.js";
|
|
32
|
+
import "./chunk-GVFUEGGM.js";
|
|
33
|
+
import "./chunk-XNRPCI23.js";
|
|
34
|
+
import "./chunk-XZJE6WIT.js";
|
|
35
|
+
import "./chunk-FMRMTI7W.js";
|
|
36
|
+
import "./chunk-BKFGGJKA.js";
|
|
37
|
+
import "./chunk-JMOLB347.js";
|
|
38
|
+
import "./chunk-MMB2OHUY.js";
|
|
39
|
+
import "./chunk-TV45EUGM.js";
|
|
40
|
+
export {
|
|
41
|
+
benchFactsCommand,
|
|
42
|
+
benchFetch,
|
|
43
|
+
benchRepos,
|
|
44
|
+
benchResults,
|
|
45
|
+
benchRun,
|
|
46
|
+
benchSurvey,
|
|
47
|
+
benchVerify
|
|
48
|
+
};
|