@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,526 @@
|
|
|
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
|
+
ATTICUS_FOLDER_IGNORE,
|
|
8
|
+
CHECKLISTS_README,
|
|
9
|
+
STARTER_CHECKLISTS_README
|
|
10
|
+
} from "./chunk-NG5R2WIY.js";
|
|
11
|
+
import {
|
|
12
|
+
openspecRootOf,
|
|
13
|
+
rewriteStories
|
|
14
|
+
} from "./chunk-EV4TEFOD.js";
|
|
15
|
+
import {
|
|
16
|
+
STARTER_REVIEW_PATH,
|
|
17
|
+
readPackFiles,
|
|
18
|
+
starterReviewText
|
|
19
|
+
} from "./chunk-T6ESD5KM.js";
|
|
20
|
+
import {
|
|
21
|
+
metarepoOrigin
|
|
22
|
+
} from "./chunk-3LU6YCSQ.js";
|
|
23
|
+
import {
|
|
24
|
+
ORG_FLOW_VERSION,
|
|
25
|
+
STORE_MARKER,
|
|
26
|
+
orgFlowVersionOf,
|
|
27
|
+
readStoreMarker,
|
|
28
|
+
storeIdOf,
|
|
29
|
+
writeOrgFlowSchema,
|
|
30
|
+
writeStoreMarker
|
|
31
|
+
} from "./chunk-L7I5PKGD.js";
|
|
32
|
+
import {
|
|
33
|
+
VERSION,
|
|
34
|
+
versionAtLeast
|
|
35
|
+
} from "./chunk-7RUMD56V.js";
|
|
36
|
+
import {
|
|
37
|
+
IGNORED,
|
|
38
|
+
ensureGitignore,
|
|
39
|
+
gitUser
|
|
40
|
+
} from "./chunk-XZJE6WIT.js";
|
|
41
|
+
import {
|
|
42
|
+
MetarepoStamp,
|
|
43
|
+
WORKSPACE_SCHEMA_VERSION,
|
|
44
|
+
catalogDirOf,
|
|
45
|
+
changesDirOf,
|
|
46
|
+
changesRelOf,
|
|
47
|
+
isAdopted,
|
|
48
|
+
layoutOf,
|
|
49
|
+
loadOrgPack,
|
|
50
|
+
migrateCatalog,
|
|
51
|
+
migrateChangeTypesText,
|
|
52
|
+
migrateGatesText,
|
|
53
|
+
migrateManifests,
|
|
54
|
+
migrateQuestions,
|
|
55
|
+
migrateRolesText,
|
|
56
|
+
migrateRuntimeText,
|
|
57
|
+
migrateSourcesText,
|
|
58
|
+
orgPackDirOf,
|
|
59
|
+
require_dist,
|
|
60
|
+
specsDirOf,
|
|
61
|
+
specsRelOf
|
|
62
|
+
} from "./chunk-JMOLB347.js";
|
|
63
|
+
import {
|
|
64
|
+
LOCAL_ONLY,
|
|
65
|
+
ensureLocalIgnore,
|
|
66
|
+
writeFileAtomic
|
|
67
|
+
} from "./chunk-MMB2OHUY.js";
|
|
68
|
+
import {
|
|
69
|
+
__toESM
|
|
70
|
+
} from "./chunk-TV45EUGM.js";
|
|
71
|
+
|
|
72
|
+
// packages/cli/dist/upgrade.js
|
|
73
|
+
var import_yaml = __toESM(require_dist(), 1);
|
|
74
|
+
import { cp, mkdir, readdir, readFile, stat } from "node:fs/promises";
|
|
75
|
+
import { join } from "node:path";
|
|
76
|
+
var STAMP_FILE = join(".atticus", "metarepo.yaml");
|
|
77
|
+
var rel = (prefix, files) => files.map((f) => `${prefix}/${f}`);
|
|
78
|
+
var MIGRATIONS = [
|
|
79
|
+
// The version-1 files; each is written at the current version (ADR 0031, 0125).
|
|
80
|
+
catalogStep("catalog-schema-v2", "Catalog records at schema version 2 (ADR 0031)", [1]),
|
|
81
|
+
{
|
|
82
|
+
id: "local-files-ignored",
|
|
83
|
+
summary: "This machine's files kept out of Git (.atticus/.gitignore, ADR 0050)",
|
|
84
|
+
async pending(root) {
|
|
85
|
+
const text = await readFile(join(root, ".atticus", ".gitignore"), "utf8").catch(() => "");
|
|
86
|
+
const have = new Set(text.split(/\r?\n/).map((l) => l.trim()));
|
|
87
|
+
return LOCAL_ONLY.every((l) => have.has(l)) ? [] : [".atticus/.gitignore"];
|
|
88
|
+
},
|
|
89
|
+
async apply(root) {
|
|
90
|
+
await ensureLocalIgnore(root);
|
|
91
|
+
return [".atticus/.gitignore"];
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: "state-folders-ignored",
|
|
96
|
+
summary: "Base clones, the index and run folders kept out of Git (metarepo .gitignore)",
|
|
97
|
+
async pending(root) {
|
|
98
|
+
if (isAdopted(root))
|
|
99
|
+
return [];
|
|
100
|
+
const text = await readFile(join(root, ".gitignore"), "utf8").catch(() => "");
|
|
101
|
+
const norm = (l) => l.trim().replace(/^\//, "").replace(/\/$/, "");
|
|
102
|
+
const have = new Set(text.split(/\r?\n/).map(norm));
|
|
103
|
+
return IGNORED.every((p) => have.has(norm(p))) ? [] : [".gitignore"];
|
|
104
|
+
},
|
|
105
|
+
async apply(root) {
|
|
106
|
+
return (await ensureGitignore(root)).length ? [".gitignore"] : [];
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
id: "gates-v2",
|
|
111
|
+
summary: "gates.yaml at version 2: each gate's critic round limit written out, so leaving it out means no limit (ADR 0087)",
|
|
112
|
+
async pending(root) {
|
|
113
|
+
const rel2 = gatesRel(root);
|
|
114
|
+
const text = await readFile(join(root, rel2), "utf8").catch(() => void 0);
|
|
115
|
+
return text !== void 0 && migrateGatesText(text).changed ? [rel2] : [];
|
|
116
|
+
},
|
|
117
|
+
async apply(root) {
|
|
118
|
+
const rel2 = gatesRel(root);
|
|
119
|
+
const text = await readFile(join(root, rel2), "utf8").catch(() => void 0);
|
|
120
|
+
if (text === void 0)
|
|
121
|
+
return [];
|
|
122
|
+
const r = migrateGatesText(text);
|
|
123
|
+
if (!r.changed)
|
|
124
|
+
return [];
|
|
125
|
+
await writeFileAtomic(join(root, rel2), r.text);
|
|
126
|
+
return [rel2];
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
id: "flow-schema-v2",
|
|
131
|
+
summary: "Spec flows at schema version 2: loops and retries can say which steps they repeat (ADR 0095)",
|
|
132
|
+
async pending(root) {
|
|
133
|
+
const r = await migrateCatalog(specsDirOf(root), { dryRun: true });
|
|
134
|
+
return rel(specsRelOf(root), r.migrated);
|
|
135
|
+
},
|
|
136
|
+
async apply(root) {
|
|
137
|
+
const r = await migrateCatalog(specsDirOf(root));
|
|
138
|
+
return rel(specsRelOf(root), r.migrated);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
id: "change-types-v2",
|
|
143
|
+
summary: "change-types.yaml at version 2: a type can be small and take the fast path; every type stays standard until a person marks it (ADR 0113)",
|
|
144
|
+
async pending(root) {
|
|
145
|
+
const rel2 = packRel(root, "change-types.yaml");
|
|
146
|
+
const text = await readFile(join(root, rel2), "utf8").catch(() => void 0);
|
|
147
|
+
return text !== void 0 && migrateChangeTypesText(text).changed ? [rel2] : [];
|
|
148
|
+
},
|
|
149
|
+
async apply(root) {
|
|
150
|
+
const rel2 = packRel(root, "change-types.yaml");
|
|
151
|
+
const text = await readFile(join(root, rel2), "utf8").catch(() => void 0);
|
|
152
|
+
if (text === void 0)
|
|
153
|
+
return [];
|
|
154
|
+
const r = migrateChangeTypesText(text);
|
|
155
|
+
if (!r.changed)
|
|
156
|
+
return [];
|
|
157
|
+
await writeFileAtomic(join(root, rel2), r.text);
|
|
158
|
+
return [rel2];
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
// The id is kept as it was first shipped (stamps record it); the step writes the current version.
|
|
163
|
+
id: "questions-v3",
|
|
164
|
+
summary: "Questions at schema version 4: a question can name the earlier one it may be the same as (ADR 0117), an answer can carry its rule and the proposal it accepted (ADR 0153), and a question the code later disagreed with keeps why it reopened and the answer it had (ADR 0162)",
|
|
165
|
+
pending: (root) => migrateQuestions(root, { dryRun: true }),
|
|
166
|
+
apply: (root) => migrateQuestions(root)
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
id: "starter-review",
|
|
170
|
+
summary: "The starter review: AI rules for the critic's lenses in checklists/review.yaml, for an org pack with no AI review of its own (ADR 0120)",
|
|
171
|
+
async pending(root) {
|
|
172
|
+
return (await starterReviewPlan(root)).map((f) => f.rel);
|
|
173
|
+
},
|
|
174
|
+
async apply(root) {
|
|
175
|
+
const out = [];
|
|
176
|
+
for (const f of await starterReviewPlan(root)) {
|
|
177
|
+
await writeFileAtomic(join(root, ...f.rel.split("/")), f.text);
|
|
178
|
+
out.push(f.rel);
|
|
179
|
+
}
|
|
180
|
+
return out;
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
// The version-2 files: only the number changes, no field gains a required (ADR 0125).
|
|
184
|
+
catalogStep("catalog-schema-v3", "Catalog records at schema version 3: a Schema field can say whether it is required (ADR 0125)", [2]),
|
|
185
|
+
// The version-3 files: only the number changes; version 4 adds a Schema format (ADR 0164).
|
|
186
|
+
catalogStep("catalog-schema-v4", "Catalog records at schema version 4: a Schema can be a protobuf message (ADR 0164)", [3]),
|
|
187
|
+
sourcesStep("sources-v2", "sources.yaml at version 2: a wiki can include and exclude pages by pattern; every wiki still reads every page (ADR 0083)", { from: 1, to: 2 }),
|
|
188
|
+
// ADR 0132: from version 1 or 2 (a version 1 file is moved to 2 by the step before, then here).
|
|
189
|
+
sourcesStep("sources-v3", "sources.yaml at version 3: a wiki can say how much its word counts (authority) and where it applies (appliesTo); every wiki still ranks as a team's and applies everywhere (ADR 0132)", { to: 3 }),
|
|
190
|
+
{
|
|
191
|
+
// ADR 0124 addendum B-place: `atticus init` ignored the whole of .atticus/, so the stamp this
|
|
192
|
+
// command asks a person to commit (ADR 0051) was never committed.
|
|
193
|
+
id: "stamp-committed",
|
|
194
|
+
summary: "The stamp .atticus/metarepo.yaml committed, the rest of .atticus/ kept out of Git (metarepo .gitignore, ADR 0051)",
|
|
195
|
+
async pending(root) {
|
|
196
|
+
if (isAdopted(root))
|
|
197
|
+
return [];
|
|
198
|
+
const text = await readFile(join(root, ".gitignore"), "utf8").catch(() => "");
|
|
199
|
+
return stampIgnored(text) ? [".gitignore"] : [];
|
|
200
|
+
},
|
|
201
|
+
async apply(root) {
|
|
202
|
+
if (isAdopted(root))
|
|
203
|
+
return [];
|
|
204
|
+
const text = await readFile(join(root, ".gitignore"), "utf8").catch(() => "");
|
|
205
|
+
if (!stampIgnored(text))
|
|
206
|
+
return [];
|
|
207
|
+
await writeFileAtomic(join(root, ".gitignore"), text.replace(WHOLE_FOLDER, ATTICUS_FOLDER_IGNORE.join("\n")));
|
|
208
|
+
return [".gitignore"];
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
id: "runtime-v2",
|
|
213
|
+
summary: "runtime.yaml at version 2: a model can be named for each kind of step (read, draft, critic, knowledge, quick); every step still runs on the one model until one is named (ADR 0121)",
|
|
214
|
+
async pending(root) {
|
|
215
|
+
const rel2 = packRel(root, "runtime.yaml");
|
|
216
|
+
const text = await readFile(join(root, rel2), "utf8").catch(() => void 0);
|
|
217
|
+
return text !== void 0 && migrateRuntimeText(text).changed ? [rel2] : [];
|
|
218
|
+
},
|
|
219
|
+
async apply(root) {
|
|
220
|
+
const rel2 = packRel(root, "runtime.yaml");
|
|
221
|
+
const text = await readFile(join(root, rel2), "utf8").catch(() => void 0);
|
|
222
|
+
if (text === void 0)
|
|
223
|
+
return [];
|
|
224
|
+
const r = migrateRuntimeText(text);
|
|
225
|
+
if (!r.changed)
|
|
226
|
+
return [];
|
|
227
|
+
await writeFileAtomic(join(root, rel2), r.text);
|
|
228
|
+
return [rel2];
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
id: "roles-v2",
|
|
233
|
+
summary: "roles.yaml at version 2: it can name the teams repos are owned by and who is on each, so questions go to their owner; no team is named until a person writes one (ADR 0140)",
|
|
234
|
+
async pending(root) {
|
|
235
|
+
const rel2 = packRel(root, "roles.yaml");
|
|
236
|
+
const text = await readFile(join(root, rel2), "utf8").catch(() => void 0);
|
|
237
|
+
return text !== void 0 && migrateRolesText(text).changed ? [rel2] : [];
|
|
238
|
+
},
|
|
239
|
+
async apply(root) {
|
|
240
|
+
const rel2 = packRel(root, "roles.yaml");
|
|
241
|
+
const text = await readFile(join(root, rel2), "utf8").catch(() => void 0);
|
|
242
|
+
if (text === void 0)
|
|
243
|
+
return [];
|
|
244
|
+
const r = migrateRolesText(text);
|
|
245
|
+
if (!r.changed)
|
|
246
|
+
return [];
|
|
247
|
+
await writeFileAtomic(join(root, rel2), r.text);
|
|
248
|
+
return [rel2];
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
// ADR 0006 addendum (2026-10-25): org-flow version 2 lists Atticus 2's artifacts (proposal,
|
|
253
|
+
// design, stories, specs, tasks), so `openspec status` and `validate` agree with Atticus.
|
|
254
|
+
id: "org-flow-v2",
|
|
255
|
+
summary: "OpenSpec's org-flow schema at version 2: the artifacts Atticus 2 writes, in its stage order (ADR 0006 addendum)",
|
|
256
|
+
async pending(root) {
|
|
257
|
+
const os = openspecRootOf(root);
|
|
258
|
+
if (!os)
|
|
259
|
+
return [];
|
|
260
|
+
const v = await orgFlowVersionOf(os);
|
|
261
|
+
return v !== void 0 && v < ORG_FLOW_VERSION ? [orgFlowRel(root)] : [];
|
|
262
|
+
},
|
|
263
|
+
async apply(root) {
|
|
264
|
+
const os = openspecRootOf(root);
|
|
265
|
+
if (!os)
|
|
266
|
+
return [];
|
|
267
|
+
await writeOrgFlowSchema(os);
|
|
268
|
+
return [orgFlowRel(root)];
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
// ADR 0124 addendum B-short: a change's stories written again from its kept answer, no model
|
|
273
|
+
// call: short story files, task prompts in tasks/, tasks numbered per story, OpenSpec specs.
|
|
274
|
+
id: "stories-b-short",
|
|
275
|
+
summary: "Each change's stories in the short form, with OpenSpec spec deltas and a proposal, from the kept stories answer (no model call; ADR 0124 addendum B-short)",
|
|
276
|
+
async pending(root) {
|
|
277
|
+
return (await longStories(root)).map((c) => `${changesRelOf(root)}/${c}/stories`);
|
|
278
|
+
},
|
|
279
|
+
async apply(root) {
|
|
280
|
+
const out = [];
|
|
281
|
+
for (const c of await longStories(root))
|
|
282
|
+
for (const f of await rewriteStories(root, c).catch(() => []))
|
|
283
|
+
out.push(`${changesRelOf(root)}/${c}/${f}`);
|
|
284
|
+
return out;
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
id: "manifest-schema-v2",
|
|
289
|
+
summary: "repos.manifest.yaml at version 2: a repo can say what it is, in a person's words (ADR 0128)",
|
|
290
|
+
pending: (root) => migrateManifests(root, { dryRun: true, to: 2 }),
|
|
291
|
+
apply: (root) => migrateManifests(root, { to: 2 })
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
id: "manifest-schema-v3",
|
|
295
|
+
summary: "repos.manifest.yaml at version 3: a repo can give the base path it answers under on a shared host (ADR 0134)",
|
|
296
|
+
pending: (root) => migrateManifests(root, { dryRun: true, to: 3 }),
|
|
297
|
+
apply: (root) => migrateManifests(root, { to: 3 })
|
|
298
|
+
}
|
|
299
|
+
];
|
|
300
|
+
var orgFlowRel = (root) => `${layoutOf(root).openspec.replace(/\/+$/, "")}/schemas/org-flow/schema.yaml`;
|
|
301
|
+
async function longStories(root) {
|
|
302
|
+
const out = [];
|
|
303
|
+
const dir = changesDirOf(root);
|
|
304
|
+
for (const c of (await readdir(dir).catch(() => [])).sort()) {
|
|
305
|
+
if (c === "archive")
|
|
306
|
+
continue;
|
|
307
|
+
if (!await exists(join(dir, c, "stage", "stories-answer.yaml")))
|
|
308
|
+
continue;
|
|
309
|
+
for (const f of await readdir(join(dir, c, "stories")).catch(() => []))
|
|
310
|
+
if (f.endsWith(".md") && (await readFile(join(dir, c, "stories", f), "utf8")).includes("Prompt for Copilot or Claude Code:")) {
|
|
311
|
+
out.push(c);
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return out;
|
|
316
|
+
}
|
|
317
|
+
function sourcesStep(id, summary, v) {
|
|
318
|
+
return {
|
|
319
|
+
id,
|
|
320
|
+
summary,
|
|
321
|
+
async pending(root) {
|
|
322
|
+
const rel2 = packRel(root, "sources.yaml");
|
|
323
|
+
const text = await readFile(join(root, rel2), "utf8").catch(() => void 0);
|
|
324
|
+
return text !== void 0 && migrateSourcesText(text, v).changed ? [rel2] : [];
|
|
325
|
+
},
|
|
326
|
+
async apply(root) {
|
|
327
|
+
const rel2 = packRel(root, "sources.yaml");
|
|
328
|
+
const text = await readFile(join(root, rel2), "utf8").catch(() => void 0);
|
|
329
|
+
if (text === void 0)
|
|
330
|
+
return [];
|
|
331
|
+
const r = migrateSourcesText(text, v);
|
|
332
|
+
if (!r.changed)
|
|
333
|
+
return [];
|
|
334
|
+
await writeFileAtomic(join(root, rel2), r.text);
|
|
335
|
+
return [rel2];
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
var WHOLE_FOLDER = /^\/?\.atticus\/?[ \t]*$/m;
|
|
340
|
+
var stampIgnored = (text) => WHOLE_FOLDER.test(text) && !/^!\/?\.atticus\/metarepo\.yaml\s*$/m.test(text);
|
|
341
|
+
function catalogStep(id, summary, versions) {
|
|
342
|
+
const run = async (root, dryRun) => {
|
|
343
|
+
const out = [];
|
|
344
|
+
for (const sub of ["generated", "curated"]) {
|
|
345
|
+
const r = await migrateCatalog(join(catalogDirOf(root), sub), {
|
|
346
|
+
dryRun,
|
|
347
|
+
versions,
|
|
348
|
+
pendingOnly: dryRun
|
|
349
|
+
});
|
|
350
|
+
out.push(...rel(`catalog/${sub}`, r.migrated));
|
|
351
|
+
}
|
|
352
|
+
return out;
|
|
353
|
+
};
|
|
354
|
+
return { id, summary, pending: (root) => run(root, true), apply: (root) => run(root, false) };
|
|
355
|
+
}
|
|
356
|
+
async function starterReviewPlan(root) {
|
|
357
|
+
if ((await readStamp(root))?.migrations.includes("starter-review"))
|
|
358
|
+
return [];
|
|
359
|
+
const dirRel = packRel(root, "checklists");
|
|
360
|
+
const reviewRel = packRel(root, STARTER_REVIEW_PATH);
|
|
361
|
+
if (await exists(join(root, ...reviewRel.split("/"))))
|
|
362
|
+
return [];
|
|
363
|
+
const { packs } = await readPackFiles(root, join(root, ...dirRel.split("/")));
|
|
364
|
+
if (packs.some((p) => p.pack.name === "review" || p.pack.rules.some((r) => r.check.type === "ai")))
|
|
365
|
+
return [];
|
|
366
|
+
const readmeRel = `${dirRel}/README.md`;
|
|
367
|
+
const readme = await readFile(join(root, ...readmeRel.split("/")), "utf8").catch(() => void 0);
|
|
368
|
+
const norm = (t) => t.replace(/\r\n/g, "\n");
|
|
369
|
+
if (readme !== void 0 && norm(readme).includes("starter review"))
|
|
370
|
+
return [];
|
|
371
|
+
const out = [{ rel: reviewRel, text: await starterReviewText() }];
|
|
372
|
+
if (readme === void 0 || norm(readme) === CHECKLISTS_README)
|
|
373
|
+
out.unshift({ rel: readmeRel, text: STARTER_CHECKLISTS_README });
|
|
374
|
+
return out;
|
|
375
|
+
}
|
|
376
|
+
async function exists(path) {
|
|
377
|
+
return stat(path).then(() => true, () => false);
|
|
378
|
+
}
|
|
379
|
+
function packRel(root, file) {
|
|
380
|
+
return `${isAdopted(root) ? ".atticus/org-pack" : "org-pack"}/${file}`;
|
|
381
|
+
}
|
|
382
|
+
function gatesRel(root) {
|
|
383
|
+
return packRel(root, "gates.yaml");
|
|
384
|
+
}
|
|
385
|
+
async function readStamp(root) {
|
|
386
|
+
try {
|
|
387
|
+
const r = MetarepoStamp.safeParse((0, import_yaml.parse)(await readFile(join(root, STAMP_FILE), "utf8")));
|
|
388
|
+
return r.success ? r.data : void 0;
|
|
389
|
+
} catch {
|
|
390
|
+
return void 0;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
var newerThan = (a, b) => !versionAtLeast(b, a.replace(/-.*$/, ""));
|
|
394
|
+
async function upgradeCheck(root, version = VERSION) {
|
|
395
|
+
const [stamp, found] = await Promise.all([
|
|
396
|
+
readStamp(root),
|
|
397
|
+
Promise.all(MIGRATIONS.map(async (m) => ({ m, files: await m.pending(root) })))
|
|
398
|
+
]);
|
|
399
|
+
const pending = found.filter((x) => x.files.length).map(({ m, files }) => ({ id: m.id, summary: m.summary, files }));
|
|
400
|
+
return {
|
|
401
|
+
atticus: version,
|
|
402
|
+
...stamp ? { stamp } : {},
|
|
403
|
+
newer: !!stamp && newerThan(stamp.atticus.replace(/-.*$/, ""), version.replace(/-.*$/, "")),
|
|
404
|
+
pending
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
async function openspecStorePlan(root) {
|
|
408
|
+
const where = layoutOf(root).openspec.replace(/\/+$/, "");
|
|
409
|
+
if (where !== "openspec")
|
|
410
|
+
return {
|
|
411
|
+
action: "refused",
|
|
412
|
+
why: `An OpenSpec store keeps openspec/ at its root; this metarepo keeps it in ${where}, so it can't be one. Nothing was changed.`
|
|
413
|
+
};
|
|
414
|
+
const name = (await loadOrgPack(orgPackDirOf(root))).pack?.name;
|
|
415
|
+
const id = name ? storeIdOf(name) : void 0;
|
|
416
|
+
if (!id)
|
|
417
|
+
return {
|
|
418
|
+
action: "refused",
|
|
419
|
+
why: "The org pack has no name to make a store id from (org-pack/pack.yaml name). Nothing was changed."
|
|
420
|
+
};
|
|
421
|
+
const have = await readStoreMarker(root);
|
|
422
|
+
if (!have.missing)
|
|
423
|
+
return have.marker?.id === id ? { action: "present", id } : { action: "differs", id, ...have.marker ? { has: have.marker.id } : {} };
|
|
424
|
+
const remote = await metarepoOrigin(root);
|
|
425
|
+
return { action: "create", id, ...remote ? { remote } : {} };
|
|
426
|
+
}
|
|
427
|
+
function storeLine(s) {
|
|
428
|
+
if (s.action === "present")
|
|
429
|
+
return `This metarepo is already the OpenSpec store ${s.id} (${STORE_MARKER}).`;
|
|
430
|
+
if (s.action === "differs")
|
|
431
|
+
return s.has ? `${STORE_MARKER} names the store ${s.has}, not ${s.id}: left as it is.` : `${STORE_MARKER} is there but can't be read: left as it is.`;
|
|
432
|
+
return `Wrote ${STORE_MARKER}: this metarepo is the OpenSpec store ${s.id} (beta). Commit it; then a developer runs openspec store register <their clone> once to use it from plain OpenSpec.`;
|
|
433
|
+
}
|
|
434
|
+
async function upgradeCommand(root, o, io, version = VERSION) {
|
|
435
|
+
const c = await upgradeCheck(root, version);
|
|
436
|
+
if (c.newer) {
|
|
437
|
+
io.err(`This metarepo was upgraded by Atticus ${c.stamp.atticus}; this is ${version}. Install ${c.stamp.atticus} or later before working in it, so nothing it wrote is lost.`);
|
|
438
|
+
if (o.json)
|
|
439
|
+
io.out(JSON.stringify(c, null, 2));
|
|
440
|
+
return 1;
|
|
441
|
+
}
|
|
442
|
+
const store = o.openspecStore ? await openspecStorePlan(root) : void 0;
|
|
443
|
+
if (store?.action === "refused") {
|
|
444
|
+
io.err(store.why);
|
|
445
|
+
if (o.json)
|
|
446
|
+
io.out(JSON.stringify({ ...c, openspecStore: store }, null, 2));
|
|
447
|
+
return 1;
|
|
448
|
+
}
|
|
449
|
+
if (o.check || o.dryRun) {
|
|
450
|
+
const steps = c.pending.length + (store?.action === "create" ? 1 : 0);
|
|
451
|
+
if (o.json)
|
|
452
|
+
io.out(JSON.stringify(store ? { ...c, openspecStore: store } : c, null, 2));
|
|
453
|
+
else if (!steps) {
|
|
454
|
+
io.out(`Up to date for Atticus ${version}.`);
|
|
455
|
+
if (store)
|
|
456
|
+
io.out(storeLine(store));
|
|
457
|
+
} else {
|
|
458
|
+
io.out(`${steps} upgrade step${steps === 1 ? "" : "s"} to run (atticus upgrade):`);
|
|
459
|
+
for (const p of c.pending)
|
|
460
|
+
io.out(` ${p.summary}: ${p.files.length} file${p.files.length === 1 ? "" : "s"}`);
|
|
461
|
+
if (store?.action === "create")
|
|
462
|
+
io.out(` Make this metarepo the OpenSpec store ${store.id} (beta): ${STORE_MARKER}`);
|
|
463
|
+
else if (store)
|
|
464
|
+
io.out(storeLine(store));
|
|
465
|
+
}
|
|
466
|
+
return o.check && steps ? 1 : 0;
|
|
467
|
+
}
|
|
468
|
+
const now = o.now ?? /* @__PURE__ */ new Date();
|
|
469
|
+
const by = o.by ?? (await gitUser(root)).handle;
|
|
470
|
+
const stampTime = now.toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
471
|
+
const backup = join(root, ".atticus", "backups", stampTime.replace(/[-:]/g, "").replace("T", "-").replace("Z", ""));
|
|
472
|
+
const changed = [];
|
|
473
|
+
if (c.pending.length) {
|
|
474
|
+
await mkdir(backup, { recursive: true });
|
|
475
|
+
await ensureLocalIgnore(root);
|
|
476
|
+
for (const p of c.pending)
|
|
477
|
+
for (const f of p.files)
|
|
478
|
+
await cp(join(root, ...f.split("/")), join(backup, ...f.split("/"))).catch(() => void 0);
|
|
479
|
+
for (const p of c.pending) {
|
|
480
|
+
const m = MIGRATIONS.find((x) => x.id === p.id);
|
|
481
|
+
changed.push(...await m.apply(root));
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
const stamp = MetarepoStamp.parse({
|
|
485
|
+
schemaVersion: WORKSPACE_SCHEMA_VERSION,
|
|
486
|
+
atticus: version,
|
|
487
|
+
upgradedAt: stampTime,
|
|
488
|
+
upgradedBy: by,
|
|
489
|
+
migrations: [.../* @__PURE__ */ new Set([...c.stamp?.migrations ?? [], ...MIGRATIONS.map((m) => m.id)])]
|
|
490
|
+
});
|
|
491
|
+
await writeFileAtomic(join(root, STAMP_FILE), (0, import_yaml.stringify)(stamp));
|
|
492
|
+
if (store?.action === "create") {
|
|
493
|
+
await writeStoreMarker(root, {
|
|
494
|
+
id: store.id,
|
|
495
|
+
...store.remote ? { remote: store.remote } : {}
|
|
496
|
+
});
|
|
497
|
+
changed.push(STORE_MARKER);
|
|
498
|
+
}
|
|
499
|
+
if (o.json)
|
|
500
|
+
io.out(JSON.stringify({
|
|
501
|
+
upgraded: c.pending.map((p) => p.id),
|
|
502
|
+
files: changed,
|
|
503
|
+
stamp,
|
|
504
|
+
...store ? { openspecStore: store } : {}
|
|
505
|
+
}, null, 2));
|
|
506
|
+
else {
|
|
507
|
+
if (c.pending.length) {
|
|
508
|
+
for (const p of c.pending)
|
|
509
|
+
io.out(`Done: ${p.summary} (${p.files.length} file${p.files.length === 1 ? "" : "s"})`);
|
|
510
|
+
io.out(`The files as they were are in ${backup}.`);
|
|
511
|
+
} else if (store?.action !== "create")
|
|
512
|
+
io.out(`Nothing to change for Atticus ${version}.`);
|
|
513
|
+
if (store)
|
|
514
|
+
io.out(storeLine(store));
|
|
515
|
+
io.out(`Recorded Atticus ${version} in ${STAMP_FILE.split("\\").join("/")}. Commit the changes in a pull request.`);
|
|
516
|
+
}
|
|
517
|
+
return 0;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
export {
|
|
521
|
+
STAMP_FILE,
|
|
522
|
+
MIGRATIONS,
|
|
523
|
+
readStamp,
|
|
524
|
+
upgradeCheck,
|
|
525
|
+
upgradeCommand
|
|
526
|
+
};
|