@maycombhq/atticus 0.0.0-stage → 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/LICENSE +177 -0
- package/README.md +17 -2
- package/THIRD-PARTY-LICENSES.txt +2607 -0
- package/dist/bin.js +47 -0
- package/dist/chunk-23VFQHFQ.js +827 -0
- package/dist/chunk-26DBAGOP.js +315 -0
- package/dist/chunk-27EDZN52.js +115 -0
- package/dist/chunk-2K2ZEJVR.js +252 -0
- package/dist/chunk-3DDJLI7N.js +1081 -0
- package/dist/chunk-3G4YI4ZU.js +16 -0
- package/dist/chunk-3LU6YCSQ.js +3507 -0
- package/dist/chunk-3WU7LVTL.js +203 -0
- package/dist/chunk-4AYZQ3SY.js +285 -0
- package/dist/chunk-4ONORLK5.js +234 -0
- package/dist/chunk-4Q3NN7VF.js +32 -0
- package/dist/chunk-4SKZDI62.js +22 -0
- package/dist/chunk-4URR24DD.js +189 -0
- package/dist/chunk-4UZJOQYK.js +70 -0
- package/dist/chunk-4Y4FY34K.js +34 -0
- package/dist/chunk-4YWRU7JK.js +80 -0
- package/dist/chunk-52WCHTVZ.js +41 -0
- package/dist/chunk-55TBYJF2.js +36 -0
- package/dist/chunk-5ACUW753.js +240 -0
- package/dist/chunk-5BJFMAQU.js +32 -0
- package/dist/chunk-5ICB2BXH.js +33 -0
- package/dist/chunk-5NZSJ5ZG.js +60 -0
- package/dist/chunk-5P5BGG5L.js +307 -0
- package/dist/chunk-5RUMHLIS.js +104 -0
- package/dist/chunk-5TY4DTHQ.js +242 -0
- package/dist/chunk-5V5BJACL.js +2929 -0
- package/dist/chunk-6E2GJANQ.js +52 -0
- package/dist/chunk-6N2GUZMZ.js +471 -0
- package/dist/chunk-6RGIM2ZH.js +2069 -0
- package/dist/chunk-6V3DTQWK.js +391 -0
- package/dist/chunk-76WKMA4J.js +14 -0
- package/dist/chunk-77RSRG3A.js +104 -0
- package/dist/chunk-7A7IG7OA.js +2007 -0
- package/dist/chunk-7EFILTCI.js +67 -0
- package/dist/chunk-7HQOZALR.js +180 -0
- package/dist/chunk-7HWXYP4H.js +1217 -0
- package/dist/chunk-7J7UY46S.js +688 -0
- package/dist/chunk-7KXYMC2P.js +38 -0
- package/dist/chunk-7LCQ7JAM.js +55 -0
- package/dist/chunk-7RGCQ4VZ.js +22 -0
- package/dist/chunk-7RUMD56V.js +26 -0
- package/dist/chunk-7S3XFWOU.js +251 -0
- package/dist/chunk-7SZPENUP.js +32 -0
- package/dist/chunk-7VFVQX5K.js +105 -0
- package/dist/chunk-ACWQDL6T.js +37 -0
- package/dist/chunk-ANCI3LFS.js +25 -0
- package/dist/chunk-ASKDCMW5.js +275 -0
- package/dist/chunk-ATNG5VOZ.js +122 -0
- package/dist/chunk-B3QOYE74.js +58 -0
- package/dist/chunk-B3UHYXHU.js +41 -0
- package/dist/chunk-BA5DTXHQ.js +250 -0
- package/dist/chunk-BKFGGJKA.js +2743 -0
- package/dist/chunk-BQNEHB5U.js +212 -0
- package/dist/chunk-BUWSOQLU.js +131 -0
- package/dist/chunk-BX52REMA.js +134 -0
- package/dist/chunk-BXBCMGIQ.js +82 -0
- package/dist/chunk-C2YGYTU6.js +408 -0
- package/dist/chunk-C5JFMAXX.js +102 -0
- package/dist/chunk-C75W7VXX.js +42 -0
- package/dist/chunk-CAN3EBE5.js +1726 -0
- package/dist/chunk-CE4S5ZY3.js +182 -0
- package/dist/chunk-CRQ73DIF.js +25 -0
- package/dist/chunk-CZI2ACNT.js +36 -0
- package/dist/chunk-D7MWYJZF.js +43 -0
- package/dist/chunk-DDAEAZEV.js +54 -0
- package/dist/chunk-DGKNOPSE.js +549 -0
- package/dist/chunk-DQNKG4HY.js +906 -0
- package/dist/chunk-DS3ZEJVN.js +22 -0
- package/dist/chunk-DYWTQXP4.js +108 -0
- package/dist/chunk-E25G46RW.js +54 -0
- package/dist/chunk-EADP3PEN.js +450 -0
- package/dist/chunk-EAQFRD2B.js +430 -0
- package/dist/chunk-EATSD7YD.js +41 -0
- package/dist/chunk-EBWIOODZ.js +339 -0
- package/dist/chunk-EHUYLNLC.js +282 -0
- package/dist/chunk-EI4KQYJ3.js +1496 -0
- package/dist/chunk-EQOSXLK3.js +49 -0
- package/dist/chunk-EV4TEFOD.js +16667 -0
- package/dist/chunk-EW7MRMD5.js +312 -0
- package/dist/chunk-EZSZFI54.js +531 -0
- package/dist/chunk-FMRMTI7W.js +1142 -0
- package/dist/chunk-FOQXYMOR.js +46 -0
- package/dist/chunk-G3PBLW4K.js +246 -0
- package/dist/chunk-G7WZH54P.js +221 -0
- package/dist/chunk-GG6HIU74.js +211 -0
- package/dist/chunk-GMJXC5AL.js +27809 -0
- package/dist/chunk-GPLFYLGH.js +130 -0
- package/dist/chunk-GVFUEGGM.js +19943 -0
- package/dist/chunk-GWSWS264.js +130 -0
- package/dist/chunk-H4VJO3M2.js +229 -0
- package/dist/chunk-HGQZTUAC.js +415 -0
- package/dist/chunk-HOUUBE74.js +166 -0
- package/dist/chunk-HQMCHHY5.js +155 -0
- package/dist/chunk-HR4DVO6X.js +374 -0
- package/dist/chunk-HZYFLEWO.js +39 -0
- package/dist/chunk-IA2RKC6I.js +279 -0
- package/dist/chunk-IILZ7J3L.js +5548 -0
- package/dist/chunk-IRW64JFF.js +247 -0
- package/dist/chunk-IVHN2VYG.js +1526 -0
- package/dist/chunk-IWZPGIGT.js +856 -0
- package/dist/chunk-IY4PHPHT.js +15 -0
- package/dist/chunk-J27QGXO4.js +1247 -0
- package/dist/chunk-JBSD57N7.js +324 -0
- package/dist/chunk-JEUXCIRD.js +120 -0
- package/dist/chunk-JMOLB347.js +46388 -0
- package/dist/chunk-JQX6BSE4.js +130 -0
- package/dist/chunk-JRPQX2EK.js +376 -0
- package/dist/chunk-JUQHYTXN.js +45 -0
- package/dist/chunk-JUZ75OG4.js +344 -0
- package/dist/chunk-KIWEBM6G.js +378 -0
- package/dist/chunk-KLKENMWQ.js +891 -0
- package/dist/chunk-KQDZXGNR.js +14 -0
- package/dist/chunk-KQK6SQPE.js +48 -0
- package/dist/chunk-KQRYW7OS.js +4108 -0
- package/dist/chunk-KU4T2CXJ.js +116 -0
- package/dist/chunk-KXZR2BLL.js +53 -0
- package/dist/chunk-L7I5PKGD.js +915 -0
- package/dist/chunk-LDIARP6F.js +31 -0
- package/dist/chunk-LEHZTKB3.js +34 -0
- package/dist/chunk-LS3WR2RF.js +1071 -0
- package/dist/chunk-LUPW4WLK.js +526 -0
- package/dist/chunk-LVBPY2M6.js +406 -0
- package/dist/chunk-LZWVK4YY.js +169 -0
- package/dist/chunk-MCWWMMLN.js +48 -0
- package/dist/chunk-MKC7P5LD.js +32 -0
- package/dist/chunk-MKFYQQ5Q.js +36 -0
- package/dist/chunk-MKIULIUQ.js +273 -0
- package/dist/chunk-MMB2OHUY.js +263 -0
- package/dist/chunk-MQNBEO3N.js +2610 -0
- package/dist/chunk-MSL3CLHX.js +545 -0
- package/dist/chunk-MV4637YA.js +174 -0
- package/dist/chunk-MYKQVS5W.js +296 -0
- package/dist/chunk-MYOW3RPC.js +143 -0
- package/dist/chunk-NBGBMRIS.js +25 -0
- package/dist/chunk-NBQO75XT.js +287 -0
- package/dist/chunk-NCR24CPV.js +41 -0
- package/dist/chunk-NDW4ROST.js +38 -0
- package/dist/chunk-NELU7LSL.js +3208 -0
- package/dist/chunk-NG5R2WIY.js +2919 -0
- package/dist/chunk-NH5QH3WS.js +119 -0
- package/dist/chunk-NIYB5K5B.js +583 -0
- package/dist/chunk-NR5T46ZY.js +49 -0
- package/dist/chunk-NX6QEEOA.js +163 -0
- package/dist/chunk-O6ILVBYB.js +18 -0
- package/dist/chunk-OFWYZH6B.js +230 -0
- package/dist/chunk-OHXTB6CO.js +50 -0
- package/dist/chunk-OJN7WME4.js +34 -0
- package/dist/chunk-OR5VRULZ.js +226 -0
- package/dist/chunk-ORZSD2KD.js +55 -0
- package/dist/chunk-OXVVRJDQ.js +66 -0
- package/dist/chunk-PQW7PYUR.js +2522 -0
- package/dist/chunk-Q32Y5T2U.js +27 -0
- package/dist/chunk-QWHTTA2X.js +130 -0
- package/dist/chunk-R3RVFCJ2.js +76 -0
- package/dist/chunk-R3VFLYZZ.js +400 -0
- package/dist/chunk-R6RY4Q5T.js +51 -0
- package/dist/chunk-R6UTCLH5.js +166 -0
- package/dist/chunk-RB2VSED2.js +231 -0
- package/dist/chunk-REWZE2XI.js +53 -0
- package/dist/chunk-RIEFYHXI.js +162 -0
- package/dist/chunk-RJDP642F.js +101 -0
- package/dist/chunk-RWMSJP7H.js +279 -0
- package/dist/chunk-S2FDPN32.js +41 -0
- package/dist/chunk-S5LSDXV4.js +40 -0
- package/dist/chunk-S7ZWCMDO.js +192 -0
- package/dist/chunk-SG5KY4VB.js +69 -0
- package/dist/chunk-SH7AZZDA.js +69 -0
- package/dist/chunk-SILY6ZEZ.js +104 -0
- package/dist/chunk-SINJKQSI.js +34 -0
- package/dist/chunk-SIUDWWKS.js +47 -0
- package/dist/chunk-SKMHS4CL.js +766 -0
- package/dist/chunk-SNHOLLGN.js +280 -0
- package/dist/chunk-SUQZGPVG.js +119 -0
- package/dist/chunk-T6ESD5KM.js +6115 -0
- package/dist/chunk-TC3KTG33.js +221 -0
- package/dist/chunk-TCADP67G.js +101 -0
- package/dist/chunk-TEBBD4XH.js +7923 -0
- package/dist/chunk-TGEOLIAK.js +149 -0
- package/dist/chunk-TQYBXDVH.js +133 -0
- package/dist/chunk-TV45EUGM.js +51 -0
- package/dist/chunk-TZXHUDI6.js +233 -0
- package/dist/chunk-U5PDQTLA.js +50 -0
- package/dist/chunk-U6YKL7SI.js +334 -0
- package/dist/chunk-UABFFMWH.js +2078 -0
- package/dist/chunk-UFBKJOWB.js +325 -0
- package/dist/chunk-UFTQIK2J.js +43 -0
- package/dist/chunk-UNFCFJMF.js +95 -0
- package/dist/chunk-UTR67XU2.js +164 -0
- package/dist/chunk-V4XKYGLK.js +405 -0
- package/dist/chunk-VOGCSYOI.js +16 -0
- package/dist/chunk-VYNZED7B.js +53 -0
- package/dist/chunk-WCLAOKCH.js +540 -0
- package/dist/chunk-WFYHOXTB.js +29 -0
- package/dist/chunk-WGU6NIUV.js +113 -0
- package/dist/chunk-WIMOJMAK.js +3702 -0
- package/dist/chunk-WKXOEIOY.js +184 -0
- package/dist/chunk-WUE6HKIU.js +790 -0
- package/dist/chunk-WUP77GG2.js +56 -0
- package/dist/chunk-XF3DATVU.js +150 -0
- package/dist/chunk-XJAJQGXJ.js +18 -0
- package/dist/chunk-XKJRPVJO.js +3898 -0
- package/dist/chunk-XNRPCI23.js +3851 -0
- package/dist/chunk-XOVLGBKI.js +214 -0
- package/dist/chunk-XPJR74MA.js +562 -0
- package/dist/chunk-XPWSNKF3.js +5619 -0
- package/dist/chunk-XR5DD5DQ.js +104 -0
- package/dist/chunk-XZJE6WIT.js +706 -0
- package/dist/chunk-XZRON6IV.js +131 -0
- package/dist/chunk-Y5AYBGLB.js +368 -0
- package/dist/chunk-YLAM4HZH.js +95 -0
- package/dist/chunk-YVCOQ5TZ.js +47 -0
- package/dist/chunk-YWOMGMZB.js +94 -0
- package/dist/chunk-YWZDAZMA.js +18 -0
- package/dist/chunk-Z2EYRUOH.js +172 -0
- package/dist/chunk-Z46OXTBE.js +1611 -0
- package/dist/chunk-ZHWSL6SR.js +45 -0
- package/dist/chunk-ZJQUIG3A.js +87 -0
- package/dist/chunk-ZKUDS7JG.js +310 -0
- package/dist/chunk-ZTNS3L5Z.js +1019 -0
- package/dist/files.json +2024 -0
- package/dist/fixtures/forge/README.md +19 -0
- package/dist/fixtures/forge/expected/discrepancies.yaml +54 -0
- package/dist/fixtures/forge/expected/inputs.yaml +38 -0
- package/dist/fixtures/forge/expected/scan.yaml +342 -0
- package/dist/fixtures/forge/inputs/diagrams/forge-context.drawio +23 -0
- package/dist/fixtures/forge/inputs/partner-specs/northwind-pay-openapi.yaml +11 -0
- package/dist/fixtures/forge/inputs/tickets/ado-stories.json +4 -0
- package/dist/fixtures/forge/inputs/tickets/closed-service-requests.json +5 -0
- package/dist/fixtures/forge/inputs/wiki/integration-patterns.md +11 -0
- package/dist/fixtures/forge/inputs/wiki/ledger-solution-spec.md +9 -0
- package/dist/fixtures/forge/inputs/wiki/snow-firewall-request.md +4 -0
- package/dist/fixtures/forge/metarepo/judgments/reaches/84af5b6af24f7ca8c23013f3.yaml +17 -0
- package/dist/fixtures/forge/metarepo/judgments/reaches/c3917555edebddce8cecb647.yaml +17 -0
- package/dist/fixtures/forge/metarepo/judgments/reaches/c5fafd6601f8ca9e34e0bbd0.yaml +17 -0
- package/dist/fixtures/forge/metarepo/org-pack/agents/architecture-critic.yaml +9 -0
- package/dist/fixtures/forge/metarepo/org-pack/agents/story-writer.yaml +10 -0
- package/dist/fixtures/forge/metarepo/org-pack/checklists/architecture.yaml +115 -0
- package/dist/fixtures/forge/metarepo/org-pack/dialects/forge.yaml +111 -0
- package/dist/fixtures/forge/metarepo/org-pack/gates.yaml +22 -0
- package/dist/fixtures/forge/metarepo/org-pack/pack.yaml +11 -0
- package/dist/fixtures/forge/metarepo/org-pack/patterns/A.EB.PUB.yaml +12 -0
- package/dist/fixtures/forge/metarepo/org-pack/patterns/D.JDBC.yaml +12 -0
- package/dist/fixtures/forge/metarepo/org-pack/patterns/S.DIR.BFF.yaml +12 -0
- package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.SOR.yaml +13 -0
- package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.VND.yaml +14 -0
- package/dist/fixtures/forge/metarepo/org-pack/process/change-templates/feature.md +37 -0
- package/dist/fixtures/forge/metarepo/org-pack/process/skills/add-forge-endpoint/SKILL.md +17 -0
- package/dist/fixtures/forge/metarepo/org-pack/process/snow/firewall-rule.yaml +14 -0
- package/dist/fixtures/forge/metarepo/org-pack/process/snow/gateway-route.yaml +13 -0
- package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/profile.yaml +12 -0
- package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/repos.manifest.yaml +44 -0
- package/dist/fixtures/forge/metarepo/org-pack/roles.yaml +14 -0
- package/dist/fixtures/forge/metarepo/org-pack/runtime.yaml +14 -0
- package/dist/fixtures/forge/metarepo/org-pack/sources.yaml +3 -0
- package/dist/fixtures/forge/repos/forge-events/topics/payments.initiated.yaml +4 -0
- package/dist/fixtures/forge/repos/forge-events/topics/transfers.completed.yaml +4 -0
- package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/ledger-v1.xml +3 -0
- package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/SpikeArrest.xml +3 -0
- package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/VerifyOAuth.xml +4 -0
- package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/proxies/default.xml +14 -0
- package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/targets/ledger.xml +5 -0
- package/dist/fixtures/forge/repos/forge-infra/alerts/ledger-api.yaml +5 -0
- package/dist/fixtures/forge/repos/forge-infra/k8s/ledger-api.yaml +15 -0
- package/dist/fixtures/forge/repos/forge-infra/k8s/portal-bff.yaml +7 -0
- package/dist/fixtures/forge/repos/forge-infra/terraform/ledger-db.tf +9 -0
- package/dist/fixtures/forge/repos/forge-ledger/api/ledger-openapi.yaml +31 -0
- package/dist/fixtures/forge/repos/forge-ledger/forge.yaml +4 -0
- package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEndpoints.java +13 -0
- package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEvents.java +11 -0
- package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/NorthwindClient.java +10 -0
- package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/application.yml +3 -0
- package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V1__create_account.sql +5 -0
- package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V2__create_entry.sql +7 -0
- package/dist/fixtures/forge/repos/forge-portal-bff/pom.xml +1 -0
- package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/AuditPublisher.java +12 -0
- package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/BalanceController.java +16 -0
- package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/LedgerClient.java +13 -0
- package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/PaymentEvents.java +13 -0
- package/dist/fixtures/forge/repos/forge-portal-bff/src/main/resources/application.yml +8 -0
- package/dist/fixtures/forge/repos/forge-portal-ui/package.json +1 -0
- package/dist/fixtures/forge/repos/forge-portal-ui/src/api/balance.ts +5 -0
- package/dist/fixtures/forge/repos/forge-reports-job/src/main/java/forge/reports/DailyEntriesJob.java +19 -0
- package/dist/fixtures/forge/repos/forge-reports-job/src/main/resources/application.yml +3 -0
- package/dist/fixtures/forge-change/README.md +41 -0
- package/dist/fixtures/forge-change/expected/findings.yaml +301 -0
- package/dist/fixtures/forge-change/expected/stories.yaml +101 -0
- package/dist/fixtures/forge-change/judgments/personal-data/0b5f3dbf5257a22275d8c74b.yaml +18 -0
- package/dist/fixtures/forge-change/judgments/personal-data/2759a66770134c417440bf2d.yaml +18 -0
- package/dist/fixtures/forge-change/judgments/personal-data/31b1ea2f14d0737f1aca79fd.yaml +18 -0
- package/dist/fixtures/forge-change/judgments/personal-data/49afd70c08228e65ad6ca1ed.yaml +18 -0
- package/dist/fixtures/forge-change/judgments/personal-data/761cabcb8a39f5e5866d2dd6.yaml +18 -0
- package/dist/fixtures/forge-change/judgments/personal-data/adae902b90cc8ffa0c765145.yaml +18 -0
- package/dist/fixtures/forge-change/judgments/personal-data/ba11bb933105ec9493e065dd.yaml +18 -0
- package/dist/fixtures/forge-change/judgments/personal-data/bdbcd1cdac3021c68063c3e7.yaml +18 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/brief.md +35 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/change.yaml +120 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/data.md +18 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/design.md +29 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/interfaces.md +17 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/mappings.md +26 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/proposal.md +35 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/snow.md +12 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/specs/transfer-limits/spec.md +19 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s1-refuse-over-limit.md +17 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s2-show-remaining.md +16 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s3-audit-refusals.md +18 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s4-velocity-check.md +16 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories.md +8 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/tasks.md +12 -0
- package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/ux.md +7 -0
- package/dist/fixtures/forge-change/org-pack/agents/code-and-test-critic.yaml +13 -0
- package/dist/fixtures/forge-change/org-pack/agents/complete-critic.yaml +12 -0
- package/dist/fixtures/forge-change/org-pack/agents/safe-critic.yaml +12 -0
- package/dist/fixtures/forge-change/org-pack/agents/ship-critic.yaml +11 -0
- package/dist/fixtures/forge-change/org-pack/agents/true-critic.yaml +11 -0
- package/dist/fixtures/forge-change/org-pack/checklists/review.yaml +54 -0
- package/dist/fixtures/forge-change/org-pack/gates.yaml +25 -0
- package/dist/fixtures/forge-change/org-pack/teams/team-ledger/checklists/ledger-team.yaml +227 -0
- package/dist/fixtures/forge-change/recordings/complete-critic/2ad84f84bf39c1d5412697e69fe23034d6983ec45a00314bf0975e627589a3c5.json +12 -0
- package/dist/fixtures/forge-change/recordings/complete-critic/417c98d8e54a4387d0fd93441c49f44c2868958739070d855c1dce0c41e24db3.json +12 -0
- package/dist/fixtures/forge-change/recordings/complete-critic/50203ee22e9cb3ef047295edb6538fe7d5695e1e4b139f3c929013dc6ce47021.json +12 -0
- package/dist/fixtures/forge-change/recordings/complete-critic/89f18d67f5d9c325bf35e2a9e020f9ddb6ee13b8523315037f0905cc57c040b1.json +12 -0
- package/dist/fixtures/forge-change/recordings/complete-critic/b4097867d26ae8eadc8b9efa8cdd86897013358035f0b40086c299a59c4ba121.json +12 -0
- package/dist/fixtures/forge-change/recordings/safe-critic/302d06f49664dd67ad2e21ab9cf74c1b0f7d3f750709c6ed8eff2b70983274e2.json +12 -0
- package/dist/fixtures/forge-change/recordings/safe-critic/32f1049c9a5ab4a759543290db4644ec6e221cc45fdfdcf06193837c6a8ce0b9.json +12 -0
- package/dist/fixtures/forge-change/recordings/safe-critic/4e4a84bfc04b9f26ca4250319a879901ff7a1c081c71e46a117675fee05026b0.json +12 -0
- package/dist/fixtures/forge-change/recordings/safe-critic/604af0fcdd6df6b76208fa88305fdc15c37606c2a4d1ae816477e46ac8c2dd04.json +12 -0
- package/dist/fixtures/forge-change/recordings/safe-critic/f0bf50af11f14c50d07904f0dffe1c8c20fb0cd89770645a8824c1d30a443955.json +12 -0
- package/dist/fixtures/forge-change/recordings/ship-critic/350954b58833b2c04880c67db45a1b328b7fd541d9f0d943b63905b8875488a6.json +12 -0
- package/dist/fixtures/forge-change/recordings/ship-critic/4af95c6c96a206777cec9de1f9c2d8c55a36ddc9b8db2f81d6eb83217b835efa.json +12 -0
- package/dist/fixtures/forge-change/recordings/ship-critic/76c34522a49cf7587a4e5689a5030d384603fa780b8aba97d27815cbc829683e.json +12 -0
- package/dist/fixtures/forge-change/recordings/ship-critic/a3b2cd1ace48587e5994333db03b34c3a0f9dec4f1932f1730ddfb687f6918c8.json +12 -0
- package/dist/fixtures/forge-change/recordings/ship-critic/de288a4fa64d0fc20890f9a787080ce6eac5203b7b9b72d884df11e8cf111835.json +12 -0
- package/dist/fixtures/forge-change/recordings/story-writer/1ddb00eac2aaf91a5ec5d9dfd220116be9f75aec6546a4a3a3b050ed89af2864.json +12 -0
- package/dist/packages/assistant-kit/frameworks-kit/README.md +86 -0
- package/dist/packages/assistant-kit/frameworks-kit/checklist.md +11 -0
- package/dist/packages/assistant-kit/frameworks-kit/examples/tide-lantern.yaml +56 -0
- package/dist/packages/assistant-kit/frameworks-kit/examples/tide-platform.yaml +43 -0
- package/dist/packages/assistant-kit/frameworks-kit/prompts/write-framework-model.md +12 -0
- package/dist/packages/assistant-kit/kit/README.md +98 -0
- package/dist/packages/assistant-kit/kit/c2-reference.md +334 -0
- package/dist/packages/assistant-kit/kit/checklist.md +39 -0
- package/dist/packages/assistant-kit/kit/examples/house-http-client.yaml +102 -0
- package/dist/packages/assistant-kit/kit/examples/tide-apigee.yaml +56 -0
- package/dist/packages/assistant-kit/kit/examples/tide-apim.yaml +32 -0
- package/dist/packages/assistant-kit/kit/examples/tide-kong.yaml +44 -0
- package/dist/packages/assistant-kit/kit/prompts/write-dialect.md +34 -0
- package/dist/packages/assistant-kit/kit/worked-example.md +198 -0
- package/dist/packages/conformance/sample/README.md +4 -0
- package/dist/packages/conformance/sample/inputs/notes.md +3 -0
- package/dist/packages/conformance/sample/inputs/systems.csv +3 -0
- package/dist/packages/conformance/sample/repo/api/greeter.proto +6 -0
- package/dist/packages/conformance/sample/repo/api/openapi.yaml +10 -0
- package/dist/packages/conformance/sample/repo/api/schema.graphql +3 -0
- package/dist/packages/conformance/sample/repo/db/V1__create_greeting.sql +4 -0
- package/dist/packages/conformance/sample/repo/package.json +7 -0
- package/dist/packages/conformance/sample/repo/src/main/java/sample/HelloController.java +10 -0
- package/dist/packages/conformance/sample/repo/web/app.ts +4 -0
- package/dist/packages/evals/datasets/critic-lenses.yaml +62 -0
- package/dist/packages/evals/datasets/dialect-writer.yaml +14 -0
- package/dist/packages/evals/datasets/feature-namer.yaml +34 -0
- package/dist/packages/evals/datasets/glossary-definer.yaml +25 -0
- package/dist/packages/evals/datasets/story-writer.yaml +13 -0
- package/dist/packages/evals/datasets/template-writer.yaml +16 -0
- package/dist/packages/evals/datasets/test-writer.yaml +18 -0
- package/dist/packages/executors/reference/reference-executor.mjs +233 -0
- package/dist/packages/extractors/dialects/argocd.yaml +45 -0
- package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AccountResource.java +47 -0
- package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AuditClient.java +12 -0
- package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/LedgerClient.java +17 -0
- package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/LedgerClient.java +14 -0
- package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/RatesClient.java +11 -0
- package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/StatementController.java +36 -0
- package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/resources/application.yml +7 -0
- package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/java/forge/fraud/FraudScorer.java +27 -0
- package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/resources/application.properties +4 -0
- package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/api.tf +38 -0
- package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/main.tf +95 -0
- package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/terraform.tfvars +1 -0
- package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/variables.tf +4 -0
- package/dist/packages/extractors/dialects/fixtures/terraform-azure/forge-azure-infra/main.tf +102 -0
- package/dist/packages/extractors/dialects/fixtures/terraform-gcp/forge-gcp-infra/main.tf +51 -0
- package/dist/packages/extractors/dialects/harness.yaml +101 -0
- package/dist/packages/extractors/dialects/jaxrs.yaml +155 -0
- package/dist/packages/extractors/dialects/micronaut.yaml +207 -0
- package/dist/packages/extractors/dialects/quarkus-reactive-messaging.yaml +158 -0
- package/dist/packages/extractors/dialects/tekton.yaml +71 -0
- package/dist/packages/extractors/dialects/terraform-aws.yaml +267 -0
- package/dist/packages/extractors/dialects/terraform-azure.yaml +212 -0
- package/dist/packages/extractors/dialects/terraform-gcp.yaml +109 -0
- package/dist/packages/extractors/grammars/README.md +11 -0
- package/dist/packages/extractors/grammars/tree-sitter-groovy.LICENSE +21 -0
- package/dist/packages/extractors/grammars/tree-sitter-groovy.wasm +0 -0
- package/dist/packages/extractors/grammars/vendored.json +11 -0
- package/dist/packages/learn/lessons/architect-diagrams-and-code.yaml +69 -0
- package/dist/packages/learn/lessons/business-analyst-story-bar.yaml +94 -0
- package/dist/packages/learn/lessons/delivery-lead-release-readiness.yaml +44 -0
- package/dist/packages/learn/lessons/designer-features-in-user-words.yaml +57 -0
- package/dist/packages/learn/lessons/developer-find-your-way.yaml +60 -0
- package/dist/packages/learn/lessons/everyone-first-hour.yaml +74 -0
- package/dist/packages/learn/lessons/platform-lead-coverage-and-defences.yaml +58 -0
- package/dist/packages/learn/lessons/product-owner-first-change.yaml +167 -0
- package/dist/packages/learn/lessons/qa-tests-and-trace.yaml +53 -0
- package/dist/packages/learn/lessons/team-lead-initiative.yaml +146 -0
- package/dist/packages/naysayer/constitution/constitution.yaml +305 -0
- package/dist/packages/naysayer/starter/review.yaml +256 -0
- package/dist/packages/sdk/npm/index.js +10097 -0
- package/dist/packages/speckit/rules/drift.yaml +78 -0
- package/dist/packages/taskrun/rules/conform.yaml +38 -0
- package/dist/packages/testgen/rules/trace.yaml +49 -0
- package/dist/packages/ui/dist/assets/elk-api-DDup23Us.js +2 -0
- package/dist/packages/ui/dist/assets/elk-worker.min--dAJroGl.js +6401 -0
- package/dist/packages/ui/dist/assets/elk-worker.min-DdYmS5kP.js +2 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2 +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff +0 -0
- package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2 +0 -0
- package/dist/packages/ui/dist/assets/index-C0JEkXyN.css +1 -0
- package/dist/packages/ui/dist/assets/index-mTOWhQZm.js +29 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
- package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-BtY48IV_.woff +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-DhS7ScYx.woff2 +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-BQQOj9BB.woff2 +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-DBRwWuxA.woff +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-CXCVEoA9.woff2 +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-Dx02qI2_.woff +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-BPDUZo87.woff2 +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-e0Uj8ZlN.woff +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-BleIgkPp.woff +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-C9ZjJQAt.woff2 +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-BPaQ7tlD.woff +0 -0
- package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-S6aYESQK.woff2 +0 -0
- package/dist/packages/ui/dist/favicon.svg +1 -0
- package/dist/packages/ui/dist/index.html +15 -0
- package/dist/third-party.json +575 -0
- package/dist/vendor/@fission-ai/openspec/bin/openspec.js +85986 -0
- package/dist/vendor/@fission-ai/openspec/package.json +82 -0
- package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/schema.yaml +248 -0
- package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/design.md +21 -0
- package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/proposal.md +34 -0
- package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/spec.md +13 -0
- package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/tasks.md +11 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-c_sharp.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-go.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-java.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-javascript.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-kotlin.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-php.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-python.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-ruby.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-rust.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-scala.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-tsx.wasm +0 -0
- package/dist/vendor/tree-sitter-wasms/out/tree-sitter-typescript.wasm +0 -0
- package/dist/vendor/web-tree-sitter/tree-sitter.wasm +0 -0
- package/package.json +36 -3
|
@@ -0,0 +1,131 @@
|
|
|
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 "./chunk-TV45EUGM.js";
|
|
7
|
+
|
|
8
|
+
// packages/cli/dist/waiting-commands.js
|
|
9
|
+
var CLOSED = /* @__PURE__ */ new Set(["released", "archived", "closed"]);
|
|
10
|
+
async function readWaiting(run, o) {
|
|
11
|
+
const problems = [];
|
|
12
|
+
const json = async (argv, fallback) => {
|
|
13
|
+
const r = await run(argv);
|
|
14
|
+
try {
|
|
15
|
+
return JSON.parse(r.out);
|
|
16
|
+
} catch {
|
|
17
|
+
problems.push(`atticus ${argv.join(" ")}: ${r.err.trim().split("\n")[0] || "no answer"}`);
|
|
18
|
+
return fallback;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const questions = (await json(["questions", "list", "--state", "open", "--json"], {})).questions ?? [];
|
|
22
|
+
const needs = (await json(["needs", "--all", "--json"], [])).filter((n) => (n.status ?? "open") === "open");
|
|
23
|
+
const steps = (await json(["todo", "--json"], [])).filter((s) => (s.state ?? "open") === "open");
|
|
24
|
+
const changes = (await json(["change", "list", "--json"], [])).filter((c) => !CLOSED.has(c.state));
|
|
25
|
+
const findings = /* @__PURE__ */ new Map();
|
|
26
|
+
for (const c of changes)
|
|
27
|
+
findings.set(c.id, (await json(["findings", c.id, "--json"], [])).filter((f) => (f.state ?? "open") === "open"));
|
|
28
|
+
const unverified = await json(["knowledge", "list", "--unverified", "--json"], []);
|
|
29
|
+
const words = o.filter?.trim().toLowerCase();
|
|
30
|
+
const hit = (...fields) => !words || fields.some((f) => f !== void 0 && f.toLowerCase().includes(words));
|
|
31
|
+
const byChange = [];
|
|
32
|
+
for (const c of changes) {
|
|
33
|
+
const whole = hit(c.id, c.title);
|
|
34
|
+
const w = {
|
|
35
|
+
change: c.id,
|
|
36
|
+
title: c.title,
|
|
37
|
+
state: c.state,
|
|
38
|
+
needs: needs.filter((n) => n.change === c.id && (whole || hit(n.item, n.title, n.kind, n.handledBy))),
|
|
39
|
+
findings: (findings.get(c.id) ?? []).filter((f) => whole || hit(f.id, f.summary, f.severity)),
|
|
40
|
+
manualSteps: steps.filter((s) => s.change === c.id && (whole || hit(s.id, s.title, s.where)))
|
|
41
|
+
};
|
|
42
|
+
if (w.needs.length + w.findings.length + w.manualSteps.length)
|
|
43
|
+
byChange.push(w);
|
|
44
|
+
}
|
|
45
|
+
const blocking = (w) => w.findings.some((f) => f.severity === "blocking");
|
|
46
|
+
byChange.sort((a, b) => Number(blocking(b)) - Number(blocking(a)) || a.title.localeCompare(b.title));
|
|
47
|
+
const known = new Set(changes.map((c) => c.id));
|
|
48
|
+
const other = {
|
|
49
|
+
questions: questions.filter((q) => hit(q.id, q.repo, q.question)),
|
|
50
|
+
manualSteps: steps.filter((s) => (!s.change || !known.has(s.change)) && hit(s.id, s.title, s.where, s.change)),
|
|
51
|
+
knowledgeToVerify: words ? 0 : unverified.length
|
|
52
|
+
};
|
|
53
|
+
const sum = (f) => byChange.reduce((n, w) => n + f(w), 0);
|
|
54
|
+
return {
|
|
55
|
+
changes: byChange,
|
|
56
|
+
other,
|
|
57
|
+
counts: {
|
|
58
|
+
questions: other.questions.length,
|
|
59
|
+
needs: sum((w) => w.needs.length),
|
|
60
|
+
manualSteps: sum((w) => w.manualSteps.length) + other.manualSteps.length,
|
|
61
|
+
findings: sum((w) => w.findings.length),
|
|
62
|
+
knowledgeToVerify: other.knowledgeToVerify
|
|
63
|
+
},
|
|
64
|
+
problems
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
var plural = (n, w) => `${n} ${w}${n === 1 ? "" : "s"}`;
|
|
68
|
+
var stepId = (s) => s.change ? `${s.change}/${s.id}` : s.id;
|
|
69
|
+
function byChangeLines(w) {
|
|
70
|
+
const out = [];
|
|
71
|
+
for (const c of w.changes) {
|
|
72
|
+
const parts = [
|
|
73
|
+
c.needs.length && plural(c.needs.length, "need"),
|
|
74
|
+
c.findings.length && plural(c.findings.length, "finding"),
|
|
75
|
+
c.manualSteps.length && plural(c.manualSteps.length, "manual step")
|
|
76
|
+
].filter(Boolean);
|
|
77
|
+
out.push(`${c.title} (${c.change}): ${parts.join(", ")}`);
|
|
78
|
+
for (const n of c.needs)
|
|
79
|
+
out.push(` need ${n.item}: ${n.title}`);
|
|
80
|
+
for (const f of c.findings)
|
|
81
|
+
out.push(` finding ${f.id} (${f.severity}): ${f.summary}`);
|
|
82
|
+
for (const s of c.manualSteps)
|
|
83
|
+
out.push(` step ${stepId(s)}: ${s.title}`);
|
|
84
|
+
}
|
|
85
|
+
const o = w.other;
|
|
86
|
+
if (o.questions.length || o.manualSteps.length || o.knowledgeToVerify) {
|
|
87
|
+
out.push("Not tied to a change:");
|
|
88
|
+
for (const q of o.questions)
|
|
89
|
+
out.push(` question ${q.id} (${q.repo}): ${q.question}`);
|
|
90
|
+
for (const s of o.manualSteps)
|
|
91
|
+
out.push(` step ${stepId(s)}: ${s.title}`);
|
|
92
|
+
if (o.knowledgeToVerify)
|
|
93
|
+
out.push(` ${plural(o.knowledgeToVerify, "knowledge item")} no one has verified: atticus knowledge list --unverified`);
|
|
94
|
+
}
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
97
|
+
function byKindLines(w) {
|
|
98
|
+
const out = [];
|
|
99
|
+
const group = (title, lines) => {
|
|
100
|
+
if (lines.length)
|
|
101
|
+
out.push(`${title} (${lines.length})`, ...lines.map((l) => ` ${l}`));
|
|
102
|
+
};
|
|
103
|
+
group("Questions", w.other.questions.map((q) => `${q.id} (${q.repo}): ${q.question}`));
|
|
104
|
+
group("Needs", w.changes.flatMap((c) => c.needs.map((n) => `${n.item} (${c.change}): ${n.title}`)));
|
|
105
|
+
group("Manual steps", [...w.changes.flatMap((c) => c.manualSteps), ...w.other.manualSteps].map((s) => `${stepId(s)}: ${s.title}`));
|
|
106
|
+
group("Findings", w.changes.flatMap((c) => c.findings.map((f) => `${f.id} (${c.change}, ${f.severity}): ${f.summary}`)));
|
|
107
|
+
if (w.other.knowledgeToVerify)
|
|
108
|
+
out.push(`Knowledge to verify (${w.other.knowledgeToVerify}): atticus knowledge list --unverified`);
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
async function waitingCli(o, io, run) {
|
|
112
|
+
const by = o.by ?? "change";
|
|
113
|
+
const w = await readWaiting(run, o.filter ? { filter: o.filter } : {});
|
|
114
|
+
if (o.json) {
|
|
115
|
+
io.out(JSON.stringify({ by, ...w }, null, 2));
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
const lines = by === "kind" ? byKindLines(w) : byChangeLines(w);
|
|
119
|
+
if (!lines.length)
|
|
120
|
+
io.out(o.filter ? `Nothing waits on you that matches "${o.filter}".` : "Nothing waits on you.");
|
|
121
|
+
else
|
|
122
|
+
for (const l of lines)
|
|
123
|
+
io.out(l);
|
|
124
|
+
for (const p of w.problems)
|
|
125
|
+
io.err(`Couldn't read ${p}`);
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
export {
|
|
129
|
+
readWaiting,
|
|
130
|
+
waitingCli
|
|
131
|
+
};
|
|
@@ -0,0 +1,368 @@
|
|
|
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
|
+
notesAt
|
|
8
|
+
} from "./chunk-52WCHTVZ.js";
|
|
9
|
+
import {
|
|
10
|
+
recordReadProgress
|
|
11
|
+
} from "./chunk-LVBPY2M6.js";
|
|
12
|
+
import {
|
|
13
|
+
carryOf,
|
|
14
|
+
checkoutOf,
|
|
15
|
+
conventionsAt,
|
|
16
|
+
estateComponentsOf,
|
|
17
|
+
excludesOf,
|
|
18
|
+
headOf,
|
|
19
|
+
raiseReadQuestions,
|
|
20
|
+
readCorrections,
|
|
21
|
+
readReviewed,
|
|
22
|
+
reviewedProblemsOf,
|
|
23
|
+
slipNoteLines,
|
|
24
|
+
writeVerifyFiles
|
|
25
|
+
} from "./chunk-ASKDCMW5.js";
|
|
26
|
+
import {
|
|
27
|
+
dirSource,
|
|
28
|
+
frameworkFacts,
|
|
29
|
+
frameworksToLearn,
|
|
30
|
+
repairFormSlips,
|
|
31
|
+
verifyFacts
|
|
32
|
+
} from "./chunk-XPWSNKF3.js";
|
|
33
|
+
import {
|
|
34
|
+
NoRoomError,
|
|
35
|
+
roomGuard,
|
|
36
|
+
streamFacts
|
|
37
|
+
} from "./chunk-RJDP642F.js";
|
|
38
|
+
import {
|
|
39
|
+
factsDirOf,
|
|
40
|
+
factsRelOf,
|
|
41
|
+
listQuestions,
|
|
42
|
+
loadOrgPack,
|
|
43
|
+
orgPackDirOf,
|
|
44
|
+
stackHelpersOff
|
|
45
|
+
} from "./chunk-JMOLB347.js";
|
|
46
|
+
|
|
47
|
+
// packages/cli/dist/verify-commands.js
|
|
48
|
+
import { existsSync } from "node:fs";
|
|
49
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
50
|
+
import { join } from "node:path";
|
|
51
|
+
async function frameworksKnownTo(root) {
|
|
52
|
+
const op = await loadOrgPack(orgPackDirOf(root)).catch(() => void 0);
|
|
53
|
+
return (op?.frameworks ?? []).flatMap((f) => [f.name, ...f.artifacts]);
|
|
54
|
+
}
|
|
55
|
+
var SHOWN = 5;
|
|
56
|
+
function questionLines(text) {
|
|
57
|
+
const lines = [];
|
|
58
|
+
const problems = [];
|
|
59
|
+
for (const raw of text.split(/\r?\n/)) {
|
|
60
|
+
if (!raw.trim())
|
|
61
|
+
continue;
|
|
62
|
+
try {
|
|
63
|
+
lines.push(JSON.parse(raw));
|
|
64
|
+
} catch (e) {
|
|
65
|
+
problems.push({
|
|
66
|
+
line: JSON.stringify(raw),
|
|
67
|
+
message: `not JSON: ${e.message}`
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return { lines, problems };
|
|
72
|
+
}
|
|
73
|
+
var FACTS_SIDE_FILES = /\.(questions|reviewed|rejected|corrections)\.jsonl$/;
|
|
74
|
+
async function factsRepos(root) {
|
|
75
|
+
const names = await readdir(factsDirOf(root)).catch(() => []);
|
|
76
|
+
return names.filter((n) => n.endsWith(".jsonl") && !FACTS_SIDE_FILES.test(n)).map((n) => n.slice(0, -".jsonl".length)).sort();
|
|
77
|
+
}
|
|
78
|
+
async function verifyAllCommand(root, o, io) {
|
|
79
|
+
const repos = await factsRepos(root);
|
|
80
|
+
if (!repos.length) {
|
|
81
|
+
io.err(`No repo has facts yet (${factsRelOf(root)}/<repo>.jsonl). Read one first: /atticus-map <repo> in your assistant.`);
|
|
82
|
+
return 2;
|
|
83
|
+
}
|
|
84
|
+
const failed = [];
|
|
85
|
+
for (const repo of repos) {
|
|
86
|
+
const code = await verifyCommand(root, repo, o, io);
|
|
87
|
+
if (code !== 0)
|
|
88
|
+
failed.push(repo);
|
|
89
|
+
}
|
|
90
|
+
const passed = repos.length - failed.length;
|
|
91
|
+
io.out(`Verified ${repos.length === 1 ? "1 repo" : `${repos.length} repos`}: ${passed} passed${failed.length ? `, ${failed.length} with something to fix (${failed.join(", ")})` : ""}.`);
|
|
92
|
+
return failed.length ? 1 : 0;
|
|
93
|
+
}
|
|
94
|
+
async function verifyInputsOf(root, repo, dir) {
|
|
95
|
+
return {
|
|
96
|
+
// ADR 0163: the org notes the read was handed, so a term's note is one of them.
|
|
97
|
+
notes: (await notesAt(root, repo, dir)).notes,
|
|
98
|
+
corrections: await readCorrections(root, repo),
|
|
99
|
+
reviewed: await readReviewed(root, repo),
|
|
100
|
+
estate: await estateComponentsOf(root),
|
|
101
|
+
conventions: await conventionsAt(root),
|
|
102
|
+
exclude: await excludesOf(root, repo)
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
async function verifyCommand(root, repo, o, io) {
|
|
106
|
+
const off = stackHelpersOff();
|
|
107
|
+
const rel = factsRelOf(root);
|
|
108
|
+
const file = join(factsDirOf(root), `${repo}.jsonl`);
|
|
109
|
+
if (!existsSync(file)) {
|
|
110
|
+
io.err(`No facts for ${repo} at ${rel}/${repo}.jsonl. Run /atticus-map ${repo} in your assistant first (or atticus map ${repo} to read it in batches); it writes that file.`);
|
|
111
|
+
return 2;
|
|
112
|
+
}
|
|
113
|
+
const room = roomGuard({
|
|
114
|
+
what: `${repo}'s facts`,
|
|
115
|
+
...o.ceilingBytes !== void 0 ? { ceilingBytes: o.ceilingBytes } : {}
|
|
116
|
+
});
|
|
117
|
+
let parsed;
|
|
118
|
+
try {
|
|
119
|
+
parsed = await streamFacts(file, room);
|
|
120
|
+
} catch (e) {
|
|
121
|
+
if (!(e instanceof NoRoomError))
|
|
122
|
+
throw e;
|
|
123
|
+
io.err(`atticus verify ${repo}: ${e.message}`);
|
|
124
|
+
return 2;
|
|
125
|
+
}
|
|
126
|
+
const repaired = repairFormSlips(parsed.facts, parsed.bad);
|
|
127
|
+
parsed = { facts: repaired.facts, bad: repaired.bad };
|
|
128
|
+
const slips = repaired.slips;
|
|
129
|
+
if (!parsed.facts.length && parsed.bad.length) {
|
|
130
|
+
io.err(`${rel}/${repo}.jsonl does not read as facts:`);
|
|
131
|
+
for (const b of parsed.bad.slice(0, 20))
|
|
132
|
+
io.err(` line ${b.line}: ${b.issues.map((i) => i.message).join("; ")}`);
|
|
133
|
+
if (parsed.bad.length > 20)
|
|
134
|
+
io.err(` ... and ${parsed.bad.length - 20} more (no line of the file is a fact)`);
|
|
135
|
+
return 2;
|
|
136
|
+
}
|
|
137
|
+
const dir = await checkoutOf(root, repo, o.dir);
|
|
138
|
+
if (!dir) {
|
|
139
|
+
io.err(`No checkout of ${repo}: clone it (atticus workspace sync) or give its folder with --dir.`);
|
|
140
|
+
return 2;
|
|
141
|
+
}
|
|
142
|
+
const commit = o.commit ?? await headOf(dir);
|
|
143
|
+
const source = dirSource(dir);
|
|
144
|
+
const { carry, missing } = await carryOf(dir, parsed.facts, commit, o.git);
|
|
145
|
+
const inputs = await verifyInputsOf(root, repo, dir);
|
|
146
|
+
const { corrections, reviewed, estate, conventions } = inputs;
|
|
147
|
+
for (const b of corrections.bad.slice(0, SHOWN))
|
|
148
|
+
io.err(`${rel}/${repo}.corrections.jsonl line ${b.line} isn't a correction: ${b.message}`);
|
|
149
|
+
if (corrections.bad.length > SHOWN)
|
|
150
|
+
io.err(`... and ${corrections.bad.length - SHOWN} more lines of ${rel}/${repo}.corrections.jsonl that aren't corrections`);
|
|
151
|
+
let report;
|
|
152
|
+
try {
|
|
153
|
+
report = await verifyFacts({
|
|
154
|
+
facts: parsed.facts,
|
|
155
|
+
source,
|
|
156
|
+
// G4: the stack helpers this run switched off (ATTICUS_HELPERS_OFF).
|
|
157
|
+
...off.has("derived-names") ? { derivedNames: false } : {},
|
|
158
|
+
...off.has("readers") ? { readers: false } : {},
|
|
159
|
+
...commit ? { commit, carry } : {},
|
|
160
|
+
...o.routed ? { routed: o.routed } : {},
|
|
161
|
+
exclude: inputs.exclude,
|
|
162
|
+
corrections: corrections.corrections,
|
|
163
|
+
reviewed: reviewed.entries,
|
|
164
|
+
room,
|
|
165
|
+
// J1 (ADR 0143): an exposure read here names a component the manifest lists.
|
|
166
|
+
...estate ? { estate } : {},
|
|
167
|
+
conventions,
|
|
168
|
+
notes: inputs.notes
|
|
169
|
+
});
|
|
170
|
+
} catch (e) {
|
|
171
|
+
if (!(e instanceof NoRoomError))
|
|
172
|
+
throw e;
|
|
173
|
+
io.err(`atticus verify ${repo}: ${e.message}`);
|
|
174
|
+
return 2;
|
|
175
|
+
}
|
|
176
|
+
const reviewedBad = reviewedProblemsOf(reviewed.bad, report).map((p) => ({
|
|
177
|
+
...p,
|
|
178
|
+
message: `${rel}/${repo}.reviewed.jsonl ${p.message}`
|
|
179
|
+
}));
|
|
180
|
+
const qFile = join(factsDirOf(root), `${repo}.questions.jsonl`);
|
|
181
|
+
let raised = 0;
|
|
182
|
+
let known = 0;
|
|
183
|
+
let qLines = 0;
|
|
184
|
+
const qProblems = [];
|
|
185
|
+
const hasQuestions = existsSync(qFile);
|
|
186
|
+
if (hasQuestions) {
|
|
187
|
+
const q = questionLines(await readFile(qFile, "utf8"));
|
|
188
|
+
qLines = q.lines.length + q.problems.length;
|
|
189
|
+
qProblems.push(...q.problems);
|
|
190
|
+
const r = await raiseReadQuestions(root, repo, q.lines, source, {
|
|
191
|
+
command: `atticus verify ${repo}`,
|
|
192
|
+
at: (o.now?.() ?? /* @__PURE__ */ new Date()).toISOString()
|
|
193
|
+
});
|
|
194
|
+
raised = r.raised.length;
|
|
195
|
+
known = r.known.length;
|
|
196
|
+
qProblems.push(...r.problems);
|
|
197
|
+
}
|
|
198
|
+
const open = hasQuestions ? (await listQuestions(root, { repo, state: "open" })).questions : [];
|
|
199
|
+
const badLines = parsed.bad.map((b) => ({
|
|
200
|
+
line: b.line,
|
|
201
|
+
raw: b.raw,
|
|
202
|
+
message: `line ${b.line} isn't a fact: ${b.issues.map((i) => i.message).join("; ")}`
|
|
203
|
+
}));
|
|
204
|
+
const summary = await writeVerifyFiles(root, repo, report, commit, qProblems, badLines, reviewedBad, slips);
|
|
205
|
+
const failed = report.rejected.length + qProblems.length + badLines.length + reviewedBad.length > 0;
|
|
206
|
+
await recordReadProgress(root, repo, {
|
|
207
|
+
commit,
|
|
208
|
+
kept: report.accepted.length,
|
|
209
|
+
...o.now ? {
|
|
210
|
+
now: o.now().toISOString().replace(/\.\d{3}Z$/, "Z")
|
|
211
|
+
} : {}
|
|
212
|
+
});
|
|
213
|
+
const rejectedNote = `Nothing written to the catalog: ${report.rejected.length} facts were rejected. Fix them and run atticus verify ${repo} --write again.`;
|
|
214
|
+
if (o.json) {
|
|
215
|
+
let written2;
|
|
216
|
+
if (o.write && !failed) {
|
|
217
|
+
const { writeFactsIntoCatalog: writeFactsIntoCatalog2 } = await import("./chunk-KLKENMWQ.js");
|
|
218
|
+
written2 = await writeFactsIntoCatalog2(root, repo, report.accepted, { dir, command: `atticus verify ${repo} --write` }, { ...io, out: () => void 0 });
|
|
219
|
+
if (!written2)
|
|
220
|
+
return 1;
|
|
221
|
+
} else if (o.write)
|
|
222
|
+
io.err(rejectedNote);
|
|
223
|
+
io.out(JSON.stringify({
|
|
224
|
+
...summary,
|
|
225
|
+
questions: {
|
|
226
|
+
lines: qLines,
|
|
227
|
+
raised,
|
|
228
|
+
known,
|
|
229
|
+
refused: qProblems.length,
|
|
230
|
+
open: open.length,
|
|
231
|
+
problems: qProblems
|
|
232
|
+
},
|
|
233
|
+
...reviewedBad.length ? { reviewedProblems: reviewedBad } : {},
|
|
234
|
+
...written2 ? { written: written2 } : {}
|
|
235
|
+
}, null, 2));
|
|
236
|
+
return failed ? 1 : 0;
|
|
237
|
+
}
|
|
238
|
+
const pct = Math.round(report.coverage.ratio * 100);
|
|
239
|
+
const cov = report.coverage;
|
|
240
|
+
io.out(`${repo}: ${report.accepted.length} facts kept, ${report.rejected.length} rejected; coverage ${pct}% (${cov.read.length} read, ${cov.reviewed.length ? `${cov.reviewed.length} reviewed with nothing to record, ` : ""}${cov.unknown.length} unknown${cov.excluded.length ? `, ${cov.excluded.length} excluded` : ""}).`);
|
|
241
|
+
const verifyYaml = `${rel}/${repo}.verify.yaml`;
|
|
242
|
+
const rejectedFile = `${rel}/${repo}.rejected.jsonl`;
|
|
243
|
+
const show = (lines, more) => {
|
|
244
|
+
for (const l of lines.slice(0, SHOWN))
|
|
245
|
+
io.out(` ${l}`);
|
|
246
|
+
if (lines.length > SHOWN)
|
|
247
|
+
io.out(` ... and ${lines.length - SHOWN} more ${more}`);
|
|
248
|
+
};
|
|
249
|
+
if (report.carried.length) {
|
|
250
|
+
const from = [...new Set(report.carried.map((c) => c.from.slice(0, 12)))];
|
|
251
|
+
io.out(`${report.carried.length} of them carried to ${commit.slice(0, 12)} from ${from.slice(0, SHOWN).join(", ")}${from.length > SHOWN ? ` and ${from.length - SHOWN} more commits` : ""}: every file they cite is unchanged since, and their lines were checked again (listed under carried in ${verifyYaml}).`);
|
|
252
|
+
}
|
|
253
|
+
const changed = report.rejected.filter((r) => r.code === "cite-changed").length;
|
|
254
|
+
if (changed)
|
|
255
|
+
io.out(`${changed} cite a file that changed since they were read: read those files again (atticus map ${repo} --estimate lists them), then rewrite or drop each fact.`);
|
|
256
|
+
if (missing.length) {
|
|
257
|
+
io.out(`Facts of ${missing.length === 1 ? "a commit" : `${missing.length} commits`} this clone doesn't have can't be compared with ${commit.slice(0, 12)}: they are rejected as wrong-commit; read them again.`);
|
|
258
|
+
show(missing.map((c) => c.slice(0, 12)), "commits");
|
|
259
|
+
}
|
|
260
|
+
const fixed = report.corrections.applied;
|
|
261
|
+
if (fixed.length) {
|
|
262
|
+
io.out(`${fixed.length} ${fixed.length === 1 ? "correction" : "corrections"} by a person applied (${rel}/${repo}.corrections.jsonl; listed under corrections in ${verifyYaml}):`);
|
|
263
|
+
show(fixed.map((a) => `${a.fact} ${a.action === "wrong" ? "left out as wrong" : "as corrected"}`), `(corrections in ${verifyYaml})`);
|
|
264
|
+
}
|
|
265
|
+
const stale = report.corrections.stale;
|
|
266
|
+
if (stale.length)
|
|
267
|
+
show(stale.map((s) => `correction: ${s.message}`), `corrections meeting no fact (corrections.stale in ${verifyYaml})`);
|
|
268
|
+
show(report.rejected.map((r) => `${r.code}: ${r.message}`), `rejected (all in ${rejectedFile})`);
|
|
269
|
+
if (hasQuestions) {
|
|
270
|
+
io.out(`${raised} question${raised === 1 ? "" : "s"} raised for a person now${known ? `, ${known} raised before` : ""}${qProblems.length ? `, ${qProblems.length} refused` : ""} (of ${qLines} line${qLines === 1 ? "" : "s"} in ${rel}/${repo}.questions.jsonl).`);
|
|
271
|
+
if (open.length) {
|
|
272
|
+
io.out(`${open.length} question${open.length === 1 ? "" : "s"} open for ${repo}, waiting for a person's answer (atticus questions list --state open lists them all; a person answers, never the assistant):`);
|
|
273
|
+
show(open.map((q) => `${q.id}: ${q.question}`), "open");
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
show(qProblems.map((q) => `bad-question: ${q.message}`), `refused questions (all in ${rejectedFile})`);
|
|
277
|
+
show(badLines.map((b) => `schema: ${b.message}`), `lines that aren't facts (all in ${rejectedFile})`);
|
|
278
|
+
show(reviewedBad.map((b) => `bad-reviewed: ${b.message}`), `refused reviewed lines (all in ${rejectedFile})`);
|
|
279
|
+
if (failed)
|
|
280
|
+
io.out(`Fix them from ${rel}/${repo}.rejected.jsonl (read the lines again, then rewrite or drop each fact, question or reviewed line) and run atticus verify ${repo} again.`);
|
|
281
|
+
else if (cov.unknown.length)
|
|
282
|
+
io.out(`Next: read the ${cov.unknown.length} unknown files (listed in ${rel}/${repo}.verify.yaml). A file you read and found nothing to record in goes in ${rel}/${repo}.reviewed.jsonl ({"path": "<file or glob>", "why": "..."} per line); generated code is excluded in org-pack/scan/${repo}.yaml.`);
|
|
283
|
+
else
|
|
284
|
+
io.out(`The read is complete: every source file is read (${cov.read.length})${cov.reviewed.length ? ` or reviewed with nothing to record (${cov.reviewed.length}, each with why in ${rel}/${repo}.verify.yaml)` : ""}.`);
|
|
285
|
+
for (const l of slipNoteLines(slips, verifyYaml, SHOWN))
|
|
286
|
+
io.out(l);
|
|
287
|
+
const dropped = report.reviewedDropped;
|
|
288
|
+
if (dropped.length) {
|
|
289
|
+
io.out(`${dropped.length} reviewed ${dropped.length === 1 ? "glob matches" : "globs match"} no file and ${dropped.length === 1 ? "was" : "were"} dropped (a note, not a refusal; under reviewedDropped in ${verifyYaml}):`);
|
|
290
|
+
show(dropped.map((d) => d.message), `(reviewedDropped in ${verifyYaml})`);
|
|
291
|
+
}
|
|
292
|
+
const unseen = report.methodUnseen;
|
|
293
|
+
if (unseen.length) {
|
|
294
|
+
io.out(`${unseen.length} ${unseen.length === 1 ? "entry or call claims" : "entries or calls claim"} an HTTP method ${unseen.length === 1 ? "its" : "their"} lines don't write (a warning, not a rejection; under methodUnseen in ${verifyYaml}):`);
|
|
295
|
+
show(unseen.map((m) => m.message), `(methodUnseen in ${verifyYaml})`);
|
|
296
|
+
}
|
|
297
|
+
const all = o.skipped === true;
|
|
298
|
+
const list = (lines, more) => {
|
|
299
|
+
if (all)
|
|
300
|
+
for (const l of lines)
|
|
301
|
+
io.out(` ${l}`);
|
|
302
|
+
else
|
|
303
|
+
show(lines, more);
|
|
304
|
+
};
|
|
305
|
+
const seeAll = `atticus verify ${repo} --skipped prints every one`;
|
|
306
|
+
const skippedLines = report.skipped;
|
|
307
|
+
if (skippedLines.length) {
|
|
308
|
+
io.out(`${skippedLines.length} ${skippedLines.length === 1 ? "line of the files read writes" : "lines of the files read write"} a path, URL or topic no fact cites (a note for the reader to check, not a rejection; under skipped in ${verifyYaml}; ${seeAll}):`);
|
|
309
|
+
list(skippedLines.map((x) => `${x.cite} ${x.kind} ${x.value}`), `(${seeAll})`);
|
|
310
|
+
}
|
|
311
|
+
const holds = report.reviewedHolds;
|
|
312
|
+
if (holds.length) {
|
|
313
|
+
io.out(`${holds.length} reviewed ${holds.length === 1 ? "glob holds" : "globs hold"} lines that write a path, URL or topic (a note; under reviewedHolds in ${verifyYaml}): read them, then write their facts or say why there are none:`);
|
|
314
|
+
list(holds.map((h) => h.message), `(reviewedHolds in ${verifyYaml})`);
|
|
315
|
+
}
|
|
316
|
+
const ops = report.specOpsUncovered;
|
|
317
|
+
if (ops.length) {
|
|
318
|
+
io.out(`${ops.length} ${ops.length === 1 ? "operation the repo's OpenAPI spec declares has" : "operations the repo's OpenAPI specs declare have"} no entry (a note, not a rejection; under specOpsUncovered in ${verifyYaml}; ${seeAll}):`);
|
|
319
|
+
list(ops.map((x) => x.message), `(${seeAll})`);
|
|
320
|
+
}
|
|
321
|
+
if (report.redacted)
|
|
322
|
+
io.out(`${report.redacted} quotes had a secret value redacted.`);
|
|
323
|
+
if (report.quotesDropped)
|
|
324
|
+
io.out(`${report.quotesDropped} ${report.quotesDropped === 1 ? "quote was" : "quotes were"} left off (the cited line is minified, a notebook, binary or over 1,000 characters, and the quote doesn't match it); the claim itself was still checked on the line.`);
|
|
325
|
+
const noAuth = report.authUncited;
|
|
326
|
+
if (noAuth.length) {
|
|
327
|
+
io.out(`${noAuth.length} ${noAuth.length === 1 ? "entry's" : "entries'"} auth rests on no cited line (all under authUncited in ${verifyYaml}). ${noAuth.length === 1 ? "It is" : "They are"} kept in ${rel}/${repo}.jsonl, as the reader wrote ${noAuth.length === 1 ? "it" : "them"}, and left out of the catalog, so the map never says an auth nothing shows. To record ${noAuth.length === 1 ? "it" : "them"}: give each entry an authCite \u2014 the file and line that sets the auth and what it writes there \u2014 and run atticus verify ${repo} again:`);
|
|
328
|
+
show(noAuth.map((a) => `${a.id} (${a.auth}, ${a.cite})`), `(authUncited in ${verifyYaml})`);
|
|
329
|
+
}
|
|
330
|
+
const unfollowed = report.entriesNoFlowFollows;
|
|
331
|
+
if (unfollowed.length) {
|
|
332
|
+
io.out(`${unfollowed.length} ${unfollowed.length === 1 ? "entry" : "entries"} no flow follows (a note, not a rejection; listed under entriesNoFlowFollows in ${verifyYaml}): write a flow for each that does real work.`);
|
|
333
|
+
show(unfollowed.map((e) => `${e.entryType === "rest" && e.method ? e.method : e.entryType} ${e.path} (${e.id}, ${e.cite})`), `(entriesNoFlowFollows in ${verifyYaml})`);
|
|
334
|
+
}
|
|
335
|
+
const fws = frameworkFacts(report.accepted);
|
|
336
|
+
if (fws.length)
|
|
337
|
+
io.out(`Built on ${fws.map((f) => `${f.name}${f.version ? ` ${f.version}` : ""}`).join(", ")} (frameworks in ${verifyYaml}).`);
|
|
338
|
+
const gaps = report.frameworkGaps;
|
|
339
|
+
if (gaps.length) {
|
|
340
|
+
io.out(`${gaps.length} ${gaps.length === 1 ? "framework" : "frameworks"} this repo declares ${gaps.length === 1 ? "shows" : "show"} none of its patterns in the facts (a question for a person, not a rejection; under frameworkGaps in ${verifyYaml}):`);
|
|
341
|
+
show(gaps.map((g) => g.question), `(frameworkGaps in ${verifyYaml})`);
|
|
342
|
+
}
|
|
343
|
+
const learn = off.has("framework-models") ? [] : frameworksToLearn(report.accepted, await frameworksKnownTo(root), (await conventionsAt(root)).frameworks);
|
|
344
|
+
if (learn.length) {
|
|
345
|
+
io.out(`${learn.length} ${learn.length === 1 ? "framework" : "frameworks"} of the house nothing here can read yet: teach ${learn.length === 1 ? "it" : "them"} once, rather than having each repo's annotations read as ordinary code.`);
|
|
346
|
+
show(learn.map((l) => `${l.why} Learn it: ${l.command}`), "");
|
|
347
|
+
}
|
|
348
|
+
if (failed) {
|
|
349
|
+
if (o.write)
|
|
350
|
+
io.err(rejectedNote);
|
|
351
|
+
return 1;
|
|
352
|
+
}
|
|
353
|
+
if (!o.write) {
|
|
354
|
+
io.out(`When the read is complete: atticus verify ${repo} --write puts the facts in the catalog, the flows in specs/${repo}/, and renders the map.`);
|
|
355
|
+
return 0;
|
|
356
|
+
}
|
|
357
|
+
const { writeFactsIntoCatalog } = await import("./chunk-KLKENMWQ.js");
|
|
358
|
+
const written = await writeFactsIntoCatalog(root, repo, report.accepted, { dir, command: `atticus verify ${repo} --write`, verbose: o.verbose === true }, io);
|
|
359
|
+
return written ? 0 : 1;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
export {
|
|
363
|
+
SHOWN,
|
|
364
|
+
factsRepos,
|
|
365
|
+
verifyAllCommand,
|
|
366
|
+
verifyInputsOf,
|
|
367
|
+
verifyCommand
|
|
368
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
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
|
+
ANTHROPIC_SETTINGS,
|
|
8
|
+
AnthropicProvider,
|
|
9
|
+
BEDROCK_SETTINGS,
|
|
10
|
+
BaseProvider,
|
|
11
|
+
BedrockProvider,
|
|
12
|
+
COMMON_SETTINGS,
|
|
13
|
+
DEFAULT_RETRY,
|
|
14
|
+
ModelProviderConfigError,
|
|
15
|
+
ModelProviderError,
|
|
16
|
+
OPENAI_SETTINGS,
|
|
17
|
+
OpenAiCompatibleProvider,
|
|
18
|
+
PROVIDER_SETTINGS,
|
|
19
|
+
PluginProvider,
|
|
20
|
+
SHIPPED_MODEL_PROVIDER_PLUGINS,
|
|
21
|
+
SettingsReader,
|
|
22
|
+
TransportError,
|
|
23
|
+
VERTEX_PLUGIN,
|
|
24
|
+
amzDates,
|
|
25
|
+
backoffMs,
|
|
26
|
+
builtInModelProviders,
|
|
27
|
+
bypassesProxy,
|
|
28
|
+
caList,
|
|
29
|
+
copy,
|
|
30
|
+
defaultKeyStore,
|
|
31
|
+
detailOf,
|
|
32
|
+
isCertCode,
|
|
33
|
+
looksLikeKey,
|
|
34
|
+
mask,
|
|
35
|
+
postJson,
|
|
36
|
+
proxyFor,
|
|
37
|
+
readKey,
|
|
38
|
+
realClock,
|
|
39
|
+
registerBuiltInModelProviders,
|
|
40
|
+
retryAfterMs,
|
|
41
|
+
showProxy,
|
|
42
|
+
sigV4Parts,
|
|
43
|
+
signV4,
|
|
44
|
+
signingKey,
|
|
45
|
+
systemKeyStore,
|
|
46
|
+
undiciTransport,
|
|
47
|
+
uriEncode
|
|
48
|
+
} from "./chunk-GMJXC5AL.js";
|
|
49
|
+
import "./chunk-BKFGGJKA.js";
|
|
50
|
+
import "./chunk-JMOLB347.js";
|
|
51
|
+
import "./chunk-MMB2OHUY.js";
|
|
52
|
+
import "./chunk-TV45EUGM.js";
|
|
53
|
+
export {
|
|
54
|
+
ANTHROPIC_SETTINGS,
|
|
55
|
+
AnthropicProvider,
|
|
56
|
+
BEDROCK_SETTINGS,
|
|
57
|
+
BaseProvider,
|
|
58
|
+
BedrockProvider,
|
|
59
|
+
COMMON_SETTINGS,
|
|
60
|
+
DEFAULT_RETRY,
|
|
61
|
+
ModelProviderConfigError,
|
|
62
|
+
ModelProviderError,
|
|
63
|
+
OPENAI_SETTINGS,
|
|
64
|
+
OpenAiCompatibleProvider,
|
|
65
|
+
PROVIDER_SETTINGS,
|
|
66
|
+
PluginProvider,
|
|
67
|
+
SHIPPED_MODEL_PROVIDER_PLUGINS,
|
|
68
|
+
SettingsReader,
|
|
69
|
+
TransportError,
|
|
70
|
+
VERTEX_PLUGIN,
|
|
71
|
+
amzDates,
|
|
72
|
+
backoffMs,
|
|
73
|
+
builtInModelProviders,
|
|
74
|
+
bypassesProxy,
|
|
75
|
+
caList,
|
|
76
|
+
copy,
|
|
77
|
+
defaultKeyStore,
|
|
78
|
+
detailOf,
|
|
79
|
+
isCertCode,
|
|
80
|
+
looksLikeKey,
|
|
81
|
+
mask,
|
|
82
|
+
postJson,
|
|
83
|
+
proxyFor,
|
|
84
|
+
readKey,
|
|
85
|
+
realClock,
|
|
86
|
+
registerBuiltInModelProviders,
|
|
87
|
+
retryAfterMs,
|
|
88
|
+
showProxy,
|
|
89
|
+
sigV4Parts,
|
|
90
|
+
signV4,
|
|
91
|
+
signingKey,
|
|
92
|
+
systemKeyStore,
|
|
93
|
+
undiciTransport,
|
|
94
|
+
uriEncode
|
|
95
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
contextToolBox,
|
|
8
|
+
defaultCodeDir,
|
|
9
|
+
namesInCode,
|
|
10
|
+
openIndex,
|
|
11
|
+
workspaceRepos
|
|
12
|
+
} from "./chunk-XNRPCI23.js";
|
|
13
|
+
|
|
14
|
+
// packages/cli/dist/code-tools.js
|
|
15
|
+
var offered = /* @__PURE__ */ new Map();
|
|
16
|
+
function offerCodeDir(repo, dir) {
|
|
17
|
+
offered.set(repo, dir);
|
|
18
|
+
}
|
|
19
|
+
function codeToolOptions(root) {
|
|
20
|
+
return {
|
|
21
|
+
codeDir: (r) => offered.get(r) ?? defaultCodeDir(root, r),
|
|
22
|
+
repos: () => [.../* @__PURE__ */ new Set([...workspaceRepos(root), ...offered.keys()])].sort(),
|
|
23
|
+
// Loaded on first use: the readers are large, and most commands never outline a file.
|
|
24
|
+
outline: async (path, text) => (await import("./chunk-MKIULIUQ.js")).declarationOutline(path, text)
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function metarepoToolBox(root, calls) {
|
|
28
|
+
return contextToolBox(root, () => openIndex(root), {
|
|
29
|
+
...codeToolOptions(root),
|
|
30
|
+
...calls ? { calls } : {}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async function criticCodeSearch(root, names) {
|
|
34
|
+
const x = await import("./chunk-MKIULIUQ.js");
|
|
35
|
+
const r = await namesInCode(root, names, {
|
|
36
|
+
...codeToolOptions(root),
|
|
37
|
+
outlines: (path) => x.syntaxLanguageOf(path) !== void 0
|
|
38
|
+
});
|
|
39
|
+
return r.found;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export {
|
|
43
|
+
offerCodeDir,
|
|
44
|
+
codeToolOptions,
|
|
45
|
+
metarepoToolBox,
|
|
46
|
+
criticCodeSearch
|
|
47
|
+
};
|