@maycombhq/atticus 0.0.0-stage → 2.0.0-beta.10
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-23M2LUYM.js +55 -0
- package/dist/chunk-26PLPSQW.js +48 -0
- package/dist/chunk-2G4DFUWJ.js +43 -0
- package/dist/chunk-2HMWX4T6.js +226 -0
- package/dist/chunk-2KDSXJFJ.js +294 -0
- package/dist/chunk-2M6WXO73.js +38 -0
- package/dist/chunk-2RX7PI2Y.js +166 -0
- package/dist/chunk-2XM6PYQQ.js +199 -0
- package/dist/chunk-3G4YI4ZU.js +16 -0
- package/dist/chunk-3GTZ2OON.js +362 -0
- package/dist/chunk-3QAKDIEU.js +108 -0
- package/dist/chunk-47QE246J.js +6115 -0
- package/dist/chunk-4GZXS6S2.js +5401 -0
- package/dist/chunk-4PJADZRR.js +545 -0
- package/dist/chunk-4Q3NN7VF.js +32 -0
- package/dist/chunk-4QUQEBFT.js +143 -0
- package/dist/chunk-4SKZDI62.js +22 -0
- package/dist/chunk-4SVJNVEE.js +80 -0
- package/dist/chunk-52R2YXP5.js +80 -0
- package/dist/chunk-577AJVRS.js +44694 -0
- package/dist/chunk-5F3RJCHB.js +45 -0
- package/dist/chunk-5IALSMZ2.js +34 -0
- package/dist/chunk-5KTOPOEP.js +174 -0
- package/dist/chunk-5MI2SEV5.js +242 -0
- package/dist/chunk-5XDNUJ4P.js +2743 -0
- package/dist/chunk-5XN76FTF.js +22 -0
- package/dist/chunk-5YIBJXGB.js +2007 -0
- package/dist/chunk-62YMDXY6.js +38 -0
- package/dist/chunk-65C57N7P.js +116 -0
- package/dist/chunk-67J3VZBA.js +120 -0
- package/dist/chunk-6EDQE7GO.js +27809 -0
- package/dist/chunk-6GNS32SI.js +285 -0
- package/dist/chunk-6GWHKMQR.js +405 -0
- package/dist/chunk-6JLPXDWN.js +7923 -0
- package/dist/chunk-6TJCUYC5.js +22 -0
- package/dist/chunk-6VBXAGJX.js +234 -0
- package/dist/chunk-73VPWF5R.js +415 -0
- package/dist/chunk-76WKMA4J.js +14 -0
- package/dist/chunk-7DUDLVFJ.js +52 -0
- package/dist/chunk-7EFILTCI.js +67 -0
- package/dist/chunk-7EKESFWV.js +130 -0
- package/dist/chunk-7F2RUWPU.js +101 -0
- package/dist/chunk-7GB4ZRE2.js +378 -0
- package/dist/chunk-7TGYNOXD.js +189 -0
- package/dist/chunk-7UKVYFQ2.js +2078 -0
- package/dist/chunk-7URGP4DD.js +102 -0
- package/dist/chunk-7YYEKTYF.js +2522 -0
- package/dist/chunk-AJJK7GLO.js +252 -0
- package/dist/chunk-AKJTKMXU.js +25 -0
- package/dist/chunk-APSVL2AI.js +344 -0
- package/dist/chunk-AWECWW5Y.js +3206 -0
- package/dist/chunk-AY2IUF4K.js +5071 -0
- package/dist/chunk-B2VSVN4P.js +34 -0
- package/dist/chunk-B3O52AUQ.js +275 -0
- package/dist/chunk-B7434AE2.js +104 -0
- package/dist/chunk-BDEKREZH.js +155 -0
- package/dist/chunk-BJPMKJTL.js +1428 -0
- package/dist/chunk-BMCKL3VQ.js +324 -0
- package/dist/chunk-BMHGA7WD.js +25 -0
- package/dist/chunk-BUYJL3GJ.js +287 -0
- package/dist/chunk-BXIX7S7O.js +32 -0
- package/dist/chunk-CHC5FKTU.js +26 -0
- package/dist/chunk-CITDNDIZ.js +53 -0
- package/dist/chunk-CIUHAHM6.js +70 -0
- package/dist/chunk-CNKGYDMG.js +334 -0
- package/dist/chunk-CRE4BJHM.js +408 -0
- package/dist/chunk-D3PO4DOZ.js +261 -0
- package/dist/chunk-DAQBIK5G.js +47 -0
- package/dist/chunk-DDAHCPGA.js +212 -0
- package/dist/chunk-DPHCFZ7W.js +374 -0
- package/dist/chunk-DZRQDNPT.js +34 -0
- package/dist/chunk-E3JYO547.js +46 -0
- package/dist/chunk-E3Z67HRK.js +104 -0
- package/dist/chunk-EADP3PEN.js +450 -0
- package/dist/chunk-EX6ZXS5K.js +169 -0
- package/dist/chunk-EZIUFEN6.js +27 -0
- package/dist/chunk-F2FOQLJ7.js +430 -0
- package/dist/chunk-F7UQR4ZX.js +149 -0
- package/dist/chunk-F7YL2RZ4.js +94 -0
- package/dist/chunk-FEZE6NIA.js +69 -0
- package/dist/chunk-FJCFYKVO.js +1014 -0
- package/dist/chunk-FLOEZA6K.js +29 -0
- package/dist/chunk-FMKKVWZD.js +133 -0
- package/dist/chunk-FNHSVBRA.js +48 -0
- package/dist/chunk-FOGG4AUR.js +114 -0
- package/dist/chunk-FPGVOSOG.js +41 -0
- package/dist/chunk-FQSRHTTC.js +49 -0
- package/dist/chunk-FR7JPYBD.js +182 -0
- package/dist/chunk-FTV6I76U.js +211 -0
- package/dist/chunk-FV5YFR6I.js +540 -0
- package/dist/chunk-FZ2E5LGK.js +54 -0
- package/dist/chunk-FZL2HNWP.js +531 -0
- package/dist/chunk-G2E5MNYP.js +549 -0
- package/dist/chunk-G5SFOH7P.js +256 -0
- package/dist/chunk-GFXLPJWY.js +53 -0
- package/dist/chunk-GR6YKM55.js +480 -0
- package/dist/chunk-GXJVY6WT.js +250 -0
- package/dist/chunk-GZ4TKR3Q.js +928 -0
- package/dist/chunk-HB6XSGI6.js +131 -0
- package/dist/chunk-HE4ZQXZM.js +396 -0
- package/dist/chunk-HHUFVJF7.js +1019 -0
- package/dist/chunk-HKTUIMH4.js +76 -0
- package/dist/chunk-HUZQDKQK.js +48 -0
- package/dist/chunk-I7IWQIEB.js +58 -0
- package/dist/chunk-IDGSU7JF.js +1496 -0
- package/dist/chunk-ILFKECGI.js +69 -0
- package/dist/chunk-ISNZYKAS.js +53 -0
- package/dist/chunk-IUD3ME4E.js +251 -0
- package/dist/chunk-IV7BCWWN.js +101 -0
- package/dist/chunk-IZNSAEBX.js +164 -0
- package/dist/chunk-J5LHDJU4.js +400 -0
- package/dist/chunk-JAA53T23.js +172 -0
- package/dist/chunk-JF2NSTFO.js +47 -0
- package/dist/chunk-JMSEEBN4.js +41 -0
- package/dist/chunk-JQ7XQPQS.js +273 -0
- package/dist/chunk-KC5DROFC.js +16667 -0
- package/dist/chunk-KIAI6PWL.js +36 -0
- package/dist/chunk-KIHOIVST.js +18 -0
- package/dist/chunk-KM2FBM3T.js +659 -0
- package/dist/chunk-KQDZXGNR.js +14 -0
- package/dist/chunk-L4VJ4ETL.js +41 -0
- package/dist/chunk-LDKUC2QJ.js +49 -0
- package/dist/chunk-LK44ULGI.js +2043 -0
- package/dist/chunk-LRS573EX.js +104 -0
- package/dist/chunk-LTQANUDH.js +119 -0
- package/dist/chunk-LVGBKKSM.js +282 -0
- package/dist/chunk-MF7QH4AX.js +162 -0
- package/dist/chunk-MGVYVW7Q.js +915 -0
- package/dist/chunk-MH5OCRUM.js +240 -0
- package/dist/chunk-MKFYQQ5Q.js +36 -0
- package/dist/chunk-MKRBG5EF.js +1142 -0
- package/dist/chunk-MTAUZW2Z.js +2504 -0
- package/dist/chunk-MTEBM4Y4.js +39 -0
- package/dist/chunk-N3NBWIYQ.js +48 -0
- package/dist/chunk-N4QZJJVB.js +3851 -0
- package/dist/chunk-NGPU2ARF.js +1726 -0
- package/dist/chunk-NIXVDQVO.js +2929 -0
- package/dist/chunk-NNUASOAA.js +34 -0
- package/dist/chunk-NPCD54I7.js +226 -0
- package/dist/chunk-OEI7LVRP.js +856 -0
- package/dist/chunk-OGRWQ562.js +18 -0
- package/dist/chunk-OIU657QQ.js +95 -0
- package/dist/chunk-OJLRFGBP.js +128 -0
- package/dist/chunk-OS7PQ35Z.js +391 -0
- package/dist/chunk-OSGQW2Z6.js +104 -0
- package/dist/chunk-P3TKKBAH.js +131 -0
- package/dist/chunk-PEF5OEMB.js +163 -0
- package/dist/chunk-PGKHJYOB.js +706 -0
- package/dist/chunk-PIVKU64W.js +688 -0
- package/dist/chunk-PKCMRPPB.js +109 -0
- package/dist/chunk-QICFHVRW.js +15 -0
- package/dist/chunk-QKEFZRHS.js +166 -0
- package/dist/chunk-QWVBEK4P.js +113 -0
- package/dist/chunk-R4TBNKKC.js +3217 -0
- package/dist/chunk-R64GLVBO.js +2919 -0
- package/dist/chunk-R6B6XAKK.js +56 -0
- package/dist/chunk-R6RY4Q5T.js +51 -0
- package/dist/chunk-RK6MKKKP.js +471 -0
- package/dist/chunk-ROTY5J2L.js +25 -0
- package/dist/chunk-RRVT4MPS.js +150 -0
- package/dist/chunk-SS66Q4VE.js +231 -0
- package/dist/chunk-T4RTWMJD.js +310 -0
- package/dist/chunk-T6USVBEJ.js +105 -0
- package/dist/chunk-TM7LC37P.js +4044 -0
- package/dist/chunk-TV45EUGM.js +51 -0
- package/dist/chunk-TZDSDDSV.js +233 -0
- package/dist/chunk-UBWCUP3G.js +55 -0
- package/dist/chunk-UF7TAFJM.js +906 -0
- package/dist/chunk-UR7RMZ3R.js +19943 -0
- package/dist/chunk-UYYN2IUZ.js +1611 -0
- package/dist/chunk-V2TH46ZY.js +66 -0
- package/dist/chunk-VKMTFIWS.js +315 -0
- package/dist/chunk-VOGCSYOI.js +16 -0
- package/dist/chunk-W5OYJMBT.js +41 -0
- package/dist/chunk-WARBF2KY.js +296 -0
- package/dist/chunk-WGZWR4RF.js +130 -0
- package/dist/chunk-WLIIQ2A4.js +18 -0
- package/dist/chunk-X4W4XXWP.js +134 -0
- package/dist/chunk-XB5RFZHH.js +1217 -0
- package/dist/chunk-XEG3FE2R.js +766 -0
- package/dist/chunk-XIWYUQZQ.js +583 -0
- package/dist/chunk-XKS6THI5.js +31 -0
- package/dist/chunk-XKZHAD6Y.js +184 -0
- package/dist/chunk-XNYNEEBR.js +214 -0
- package/dist/chunk-XPCWQXTY.js +37 -0
- package/dist/chunk-XPEEICAO.js +325 -0
- package/dist/chunk-XQ3YIV5R.js +3507 -0
- package/dist/chunk-XRO65C7V.js +1079 -0
- package/dist/chunk-XTVDAHH2.js +203 -0
- package/dist/chunk-XZRON6IV.js +131 -0
- package/dist/chunk-Y4BRGOJR.js +523 -0
- package/dist/chunk-Y5PZHS4K.js +3898 -0
- package/dist/chunk-Y7KBQ4BD.js +230 -0
- package/dist/chunk-YFSSNGLR.js +277 -0
- package/dist/chunk-YGKYFMSL.js +60 -0
- package/dist/chunk-YGR6OCHQ.js +345 -0
- package/dist/chunk-YIEOFHOL.js +30 -0
- package/dist/chunk-YLAJAI2W.js +180 -0
- package/dist/chunk-YMOJD5BO.js +50 -0
- package/dist/chunk-YPBQNJHA.js +33 -0
- package/dist/chunk-YPIEYQF4.js +307 -0
- package/dist/chunk-YVLMBAYE.js +221 -0
- package/dist/chunk-YXJ4XOHF.js +376 -0
- package/dist/chunk-ZE3P35DA.js +1247 -0
- package/dist/chunk-ZONE6E3Z.js +32 -0
- package/dist/chunk-ZP4FJHR4.js +95 -0
- package/dist/chunk-ZZXF6OOJ.js +119 -0
- package/dist/files.json +1976 -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 +9780 -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-Mo5w5xCa.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-Bp3XhPHX.css +1 -0
- package/dist/packages/ui/dist/assets/index-DM212ZbV.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,212 @@
|
|
|
1
|
+
# Azure resources in Terraform (azurerm) as catalog records. Shipped with Atticus (C2, ADR 0063).
|
|
2
|
+
#
|
|
3
|
+
# Applies to any repo with a .tf file (repoTypes "*", ADR 0062); values resolve from the
|
|
4
|
+
# folder's variables, tfvars and locals, and through local modules (ADR 0063).
|
|
5
|
+
#
|
|
6
|
+
# What it reads:
|
|
7
|
+
# azurerm_servicebus_queue DataStore, storeType queue (as SQS queues are)
|
|
8
|
+
# azurerm_servicebus_topic, azurerm_eventhub event-topic Endpoints (component unknown,
|
|
9
|
+
# filled by merge from the publishing code)
|
|
10
|
+
# azurerm_linux_function_app, _windows_function_app, azurerm_function_app
|
|
11
|
+
# Component (function) and Deployment
|
|
12
|
+
# azurerm_linux_web_app, _windows_web_app, azurerm_app_service
|
|
13
|
+
# Deployment (platform app-service)
|
|
14
|
+
# azurerm_api_management_api GatewayRoute, with the ids the APIOps dialects use
|
|
15
|
+
# azurerm_cosmosdb_account DataStore, storeType document
|
|
16
|
+
# azurerm_mssql_server DataStore sqlserver (moved from the infra extractor)
|
|
17
|
+
# azurerm_postgresql_flexible_server DataStore postgresql (moved from the infra extractor)
|
|
18
|
+
# azurerm_postgresql_server DataStore postgresql
|
|
19
|
+
# azurerm_mysql_flexible_server DataStore mysql
|
|
20
|
+
# azurerm_redis_cache DataStore cache
|
|
21
|
+
#
|
|
22
|
+
# Left to built-in readers: azurerm_storage_container (cloud-stores). No record:
|
|
23
|
+
# azurerm_kubernetes_cluster. Not read: function triggers (they are in the function's code,
|
|
24
|
+
# read by the serverless extractor), APIM operations and policies.
|
|
25
|
+
#
|
|
26
|
+
# A Deployment's environment is the resource's `env` tag, else "default".
|
|
27
|
+
schemaVersion: 1
|
|
28
|
+
name: terraform-azure
|
|
29
|
+
version: 1.0.0
|
|
30
|
+
description: Azure resources declared in Terraform as queues, topics, stores, functions, deployments and gateway routes.
|
|
31
|
+
appliesTo:
|
|
32
|
+
repoTypes: ["*"]
|
|
33
|
+
marker: "**/*.tf"
|
|
34
|
+
rules:
|
|
35
|
+
# ---- messaging
|
|
36
|
+
- id: servicebus-queue
|
|
37
|
+
description: A Service Bus queue is a queue store.
|
|
38
|
+
match: { hclBlock: resource.azurerm_servicebus_queue, files: ["**/*.tf"] }
|
|
39
|
+
emit:
|
|
40
|
+
kind: DataStore
|
|
41
|
+
id: "${attr.name | slug}"
|
|
42
|
+
fields: { storeType: queue, entitiesHeld: [] }
|
|
43
|
+
evidence: { source: infrastructure }
|
|
44
|
+
confidence: verified
|
|
45
|
+
- id: servicebus-topic
|
|
46
|
+
description: A Service Bus topic is an event topic.
|
|
47
|
+
match: { hclBlock: resource.azurerm_servicebus_topic, files: ["**/*.tf"] }
|
|
48
|
+
emit:
|
|
49
|
+
kind: Endpoint
|
|
50
|
+
id: "topic.${attr.name | slug}"
|
|
51
|
+
fields: { component: unknown, endpointType: event-topic, pathOrTopic: "${attr.name}" }
|
|
52
|
+
evidence: { source: infrastructure, side: definition }
|
|
53
|
+
confidence: verified
|
|
54
|
+
- id: eventhub
|
|
55
|
+
description: An event hub is an event topic.
|
|
56
|
+
match: { hclBlock: resource.azurerm_eventhub, files: ["**/*.tf"] }
|
|
57
|
+
emit:
|
|
58
|
+
kind: Endpoint
|
|
59
|
+
id: "topic.${attr.name | slug}"
|
|
60
|
+
fields: { component: unknown, endpointType: event-topic, pathOrTopic: "${attr.name}" }
|
|
61
|
+
evidence: { source: infrastructure, side: definition }
|
|
62
|
+
confidence: verified
|
|
63
|
+
|
|
64
|
+
# ---- compute
|
|
65
|
+
- id: linux-function-app
|
|
66
|
+
description: A Linux function app is a function component deployed on Azure Functions.
|
|
67
|
+
match: { hclBlock: resource.azurerm_linux_function_app, files: ["**/*.tf"] }
|
|
68
|
+
emit: &function-app
|
|
69
|
+
- kind: Component
|
|
70
|
+
id: "${attr.name | slug}"
|
|
71
|
+
fields:
|
|
72
|
+
system: "${attr.name | slug}"
|
|
73
|
+
repo: "${repo.name}"
|
|
74
|
+
type: function
|
|
75
|
+
runtime: azure-functions
|
|
76
|
+
evidence: { source: infrastructure }
|
|
77
|
+
- kind: Deployment
|
|
78
|
+
id: "${attr.name | slug}.${attr.tags.env | default('default') | slug}"
|
|
79
|
+
fields:
|
|
80
|
+
component: "${attr.name | slug}"
|
|
81
|
+
env: "${attr.tags.env | default('default')}"
|
|
82
|
+
platform: azure-functions
|
|
83
|
+
evidence: { source: infrastructure }
|
|
84
|
+
confidence: verified
|
|
85
|
+
- id: windows-function-app
|
|
86
|
+
description: A Windows function app is a function component deployed on Azure Functions.
|
|
87
|
+
match: { hclBlock: resource.azurerm_windows_function_app, files: ["**/*.tf"] }
|
|
88
|
+
emit: *function-app
|
|
89
|
+
confidence: verified
|
|
90
|
+
- id: function-app
|
|
91
|
+
description: A function app (the older resource type) is a function component deployed on Azure Functions.
|
|
92
|
+
match: { hclBlock: resource.azurerm_function_app, files: ["**/*.tf"] }
|
|
93
|
+
emit: *function-app
|
|
94
|
+
confidence: verified
|
|
95
|
+
- id: linux-web-app
|
|
96
|
+
description: A Linux web app is a deployment on App Service of the component it is named after.
|
|
97
|
+
match: { hclBlock: resource.azurerm_linux_web_app, files: ["**/*.tf"] }
|
|
98
|
+
emit: &web-app
|
|
99
|
+
kind: Deployment
|
|
100
|
+
id: "${attr.name | slug}.${attr.tags.env | default('default') | slug}"
|
|
101
|
+
fields:
|
|
102
|
+
component: "${attr.name | slug}"
|
|
103
|
+
env: "${attr.tags.env | default('default')}"
|
|
104
|
+
platform: app-service
|
|
105
|
+
evidence: { source: infrastructure }
|
|
106
|
+
confidence: verified
|
|
107
|
+
- id: windows-web-app
|
|
108
|
+
description: A Windows web app is a deployment on App Service.
|
|
109
|
+
match: { hclBlock: resource.azurerm_windows_web_app, files: ["**/*.tf"] }
|
|
110
|
+
emit: *web-app
|
|
111
|
+
confidence: verified
|
|
112
|
+
- id: app-service
|
|
113
|
+
description: An app service (the older resource type) is a deployment on App Service.
|
|
114
|
+
match: { hclBlock: resource.azurerm_app_service, files: ["**/*.tf"] }
|
|
115
|
+
emit: *web-app
|
|
116
|
+
confidence: verified
|
|
117
|
+
|
|
118
|
+
# ---- gateway
|
|
119
|
+
- id: api-management-api
|
|
120
|
+
description: An API Management API is a gateway route from its path to its backend.
|
|
121
|
+
match: { hclBlock: resource.azurerm_api_management_api, files: ["**/*.tf"] }
|
|
122
|
+
emit:
|
|
123
|
+
kind: GatewayRoute
|
|
124
|
+
id: "apim-${attr.path | default('') | slug | default('root')}"
|
|
125
|
+
fields:
|
|
126
|
+
proxy: "${attr.display_name}"
|
|
127
|
+
basepath: "/${attr.path | default('') | trimSlash}"
|
|
128
|
+
target: "${attr.service_url}"
|
|
129
|
+
evidence: { source: infrastructure, side: gateway }
|
|
130
|
+
confidence: verified
|
|
131
|
+
|
|
132
|
+
# ---- data
|
|
133
|
+
- id: cosmosdb-account
|
|
134
|
+
description: A Cosmos DB account is a document store.
|
|
135
|
+
match: { hclBlock: resource.azurerm_cosmosdb_account, files: ["**/*.tf"] }
|
|
136
|
+
emit:
|
|
137
|
+
kind: DataStore
|
|
138
|
+
id: "${attr.name | slug}"
|
|
139
|
+
fields: { storeType: document, entitiesHeld: [] }
|
|
140
|
+
evidence: { source: infrastructure }
|
|
141
|
+
confidence: verified
|
|
142
|
+
- id: mssql-server
|
|
143
|
+
description: An Azure SQL server.
|
|
144
|
+
match: { hclBlock: resource.azurerm_mssql_server, files: ["**/*.tf"] }
|
|
145
|
+
emit:
|
|
146
|
+
kind: DataStore
|
|
147
|
+
id: "${attr.name | slug}"
|
|
148
|
+
fields: { storeType: sqlserver, entitiesHeld: [] }
|
|
149
|
+
evidence: { source: infrastructure }
|
|
150
|
+
confidence: verified
|
|
151
|
+
- id: postgresql-flexible-server
|
|
152
|
+
description: An Azure Database for PostgreSQL flexible server.
|
|
153
|
+
match: { hclBlock: resource.azurerm_postgresql_flexible_server, files: ["**/*.tf"] }
|
|
154
|
+
emit:
|
|
155
|
+
kind: DataStore
|
|
156
|
+
id: "${attr.name | slug}"
|
|
157
|
+
fields: { storeType: postgresql, entitiesHeld: [] }
|
|
158
|
+
evidence: { source: infrastructure }
|
|
159
|
+
confidence: verified
|
|
160
|
+
- id: postgresql-server
|
|
161
|
+
description: An Azure Database for PostgreSQL single server.
|
|
162
|
+
match: { hclBlock: resource.azurerm_postgresql_server, files: ["**/*.tf"] }
|
|
163
|
+
emit:
|
|
164
|
+
kind: DataStore
|
|
165
|
+
id: "${attr.name | slug}"
|
|
166
|
+
fields: { storeType: postgresql, entitiesHeld: [] }
|
|
167
|
+
evidence: { source: infrastructure }
|
|
168
|
+
confidence: verified
|
|
169
|
+
- id: mysql-flexible-server
|
|
170
|
+
description: An Azure Database for MySQL flexible server.
|
|
171
|
+
match: { hclBlock: resource.azurerm_mysql_flexible_server, files: ["**/*.tf"] }
|
|
172
|
+
emit:
|
|
173
|
+
kind: DataStore
|
|
174
|
+
id: "${attr.name | slug}"
|
|
175
|
+
fields: { storeType: mysql, entitiesHeld: [] }
|
|
176
|
+
evidence: { source: infrastructure }
|
|
177
|
+
confidence: verified
|
|
178
|
+
- id: redis-cache
|
|
179
|
+
description: An Azure Cache for Redis is a cache.
|
|
180
|
+
match: { hclBlock: resource.azurerm_redis_cache, files: ["**/*.tf"] }
|
|
181
|
+
emit:
|
|
182
|
+
kind: DataStore
|
|
183
|
+
id: "${attr.name | slug}"
|
|
184
|
+
fields: { storeType: cache, entitiesHeld: [] }
|
|
185
|
+
evidence: { source: infrastructure }
|
|
186
|
+
confidence: verified
|
|
187
|
+
tests:
|
|
188
|
+
- name: the Forge Azure estate
|
|
189
|
+
fixture: fixtures/terraform-azure/forge-azure-infra
|
|
190
|
+
expect:
|
|
191
|
+
- { kind: DataStore, id: orders-in, storeType: queue }
|
|
192
|
+
- { kind: Endpoint, id: topic.order-events, pathOrTopic: order-events, component: unknown }
|
|
193
|
+
- { kind: Endpoint, id: topic.device-telemetry, endpointType: event-topic }
|
|
194
|
+
- { kind: Component, id: billing-func, type: function, runtime: azure-functions }
|
|
195
|
+
- { kind: Deployment, id: billing-func.prod, env: prod, platform: azure-functions }
|
|
196
|
+
- { kind: Deployment, id: legacy-billing-func.default, env: default }
|
|
197
|
+
- { kind: Deployment, id: notifier-func.default, platform: azure-functions }
|
|
198
|
+
- { kind: Deployment, id: portal-web.prod, platform: app-service }
|
|
199
|
+
- { kind: Deployment, id: backoffice-web.default, platform: app-service }
|
|
200
|
+
- { kind: Deployment, id: statements-web.default, platform: app-service }
|
|
201
|
+
- kind: GatewayRoute
|
|
202
|
+
id: apim-orders
|
|
203
|
+
proxy: Orders API
|
|
204
|
+
basepath: /orders
|
|
205
|
+
target: "https://orders.forge.internal"
|
|
206
|
+
- { kind: DataStore, id: forge-catalog, storeType: document }
|
|
207
|
+
- { kind: DataStore, id: forge-reports-sql, storeType: sqlserver }
|
|
208
|
+
- { kind: DataStore, id: forge-ledger-pg, storeType: postgresql }
|
|
209
|
+
- { kind: DataStore, id: forge-legacy-pg, storeType: postgresql }
|
|
210
|
+
- { kind: DataStore, id: forge-loyalty-mysql, storeType: mysql }
|
|
211
|
+
- { kind: DataStore, id: forge-sessions, storeType: cache }
|
|
212
|
+
absent: [statements, forge-aks]
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Google Cloud resources in Terraform as catalog records. Shipped with Atticus (C2, ADR 0063).
|
|
2
|
+
#
|
|
3
|
+
# Applies to any repo with a .tf file (repoTypes "*", ADR 0062); values resolve from the
|
|
4
|
+
# folder's variables, tfvars and locals, and through local modules (ADR 0063).
|
|
5
|
+
#
|
|
6
|
+
# What it reads:
|
|
7
|
+
# google_sql_database_instance DataStore by database_version (postgresql, mysql, sqlserver,
|
|
8
|
+
# else unknown); moved here from the infra extractor
|
|
9
|
+
# google_redis_instance DataStore, storeType cache
|
|
10
|
+
# google_cloud_tasks_queue DataStore, storeType queue
|
|
11
|
+
# google_spanner_database DataStore, storeType relational, id <instance>-<database>
|
|
12
|
+
#
|
|
13
|
+
# Left to built-in readers, which do more than a rule can (environments from folders, owners
|
|
14
|
+
# from labels and push endpoints, triggers): Cloud Run services, Pub/Sub topics and
|
|
15
|
+
# subscriptions and IAM (gcp extractor), Cloud Functions (serverless), Cloud Scheduler (batch),
|
|
16
|
+
# storage buckets and BigQuery datasets (cloud-stores). No record: google_container_cluster.
|
|
17
|
+
schemaVersion: 1
|
|
18
|
+
name: terraform-gcp
|
|
19
|
+
version: 1.0.0
|
|
20
|
+
description: Google Cloud databases, caches and task queues declared in Terraform as data stores.
|
|
21
|
+
appliesTo:
|
|
22
|
+
repoTypes: ["*"]
|
|
23
|
+
marker: "**/*.tf"
|
|
24
|
+
rules:
|
|
25
|
+
- id: sql-instance-postgresql
|
|
26
|
+
description: A Cloud SQL instance running PostgreSQL.
|
|
27
|
+
match: { hclBlock: resource.google_sql_database_instance, files: ["**/*.tf"] }
|
|
28
|
+
where: [{ value: "${attr.database_version | default('') | lower}", matches: "postgres" }]
|
|
29
|
+
emit:
|
|
30
|
+
kind: DataStore
|
|
31
|
+
id: "${attr.name | slug}"
|
|
32
|
+
fields: { storeType: postgresql, entitiesHeld: [] }
|
|
33
|
+
evidence: { source: infrastructure }
|
|
34
|
+
confidence: verified
|
|
35
|
+
- id: sql-instance-mysql
|
|
36
|
+
description: A Cloud SQL instance running MySQL.
|
|
37
|
+
match: { hclBlock: resource.google_sql_database_instance, files: ["**/*.tf"] }
|
|
38
|
+
where:
|
|
39
|
+
- value: "${attr.database_version | default('') | lower}"
|
|
40
|
+
matches: "^(?!.*postgres).*mysql"
|
|
41
|
+
emit:
|
|
42
|
+
kind: DataStore
|
|
43
|
+
id: "${attr.name | slug}"
|
|
44
|
+
fields: { storeType: mysql, entitiesHeld: [] }
|
|
45
|
+
evidence: { source: infrastructure }
|
|
46
|
+
confidence: verified
|
|
47
|
+
- id: sql-instance-sqlserver
|
|
48
|
+
description: A Cloud SQL instance running SQL Server.
|
|
49
|
+
match: { hclBlock: resource.google_sql_database_instance, files: ["**/*.tf"] }
|
|
50
|
+
where:
|
|
51
|
+
- value: "${attr.database_version | default('') | lower}"
|
|
52
|
+
matches: "^(?!.*(postgres|mysql)).*(mssql|sqlserver)"
|
|
53
|
+
emit:
|
|
54
|
+
kind: DataStore
|
|
55
|
+
id: "${attr.name | slug}"
|
|
56
|
+
fields: { storeType: sqlserver, entitiesHeld: [] }
|
|
57
|
+
evidence: { source: infrastructure }
|
|
58
|
+
confidence: verified
|
|
59
|
+
- id: sql-instance-other
|
|
60
|
+
description: A Cloud SQL instance whose version isn't written or isn't one of the above.
|
|
61
|
+
match: { hclBlock: resource.google_sql_database_instance, files: ["**/*.tf"] }
|
|
62
|
+
where:
|
|
63
|
+
- value: "${attr.database_version | default('') | lower}"
|
|
64
|
+
matches: "^(?!.*(postgres|mysql|mssql|sqlserver))"
|
|
65
|
+
emit:
|
|
66
|
+
kind: DataStore
|
|
67
|
+
id: "${attr.name | slug}"
|
|
68
|
+
fields: { storeType: unknown, entitiesHeld: [] }
|
|
69
|
+
evidence: { source: infrastructure }
|
|
70
|
+
confidence: verified
|
|
71
|
+
- id: redis-instance
|
|
72
|
+
description: A Memorystore for Redis instance is a cache.
|
|
73
|
+
match: { hclBlock: resource.google_redis_instance, files: ["**/*.tf"] }
|
|
74
|
+
emit:
|
|
75
|
+
kind: DataStore
|
|
76
|
+
id: "${attr.name | slug}"
|
|
77
|
+
fields: { storeType: cache, entitiesHeld: [] }
|
|
78
|
+
evidence: { source: infrastructure }
|
|
79
|
+
confidence: verified
|
|
80
|
+
- id: cloud-tasks-queue
|
|
81
|
+
description: A Cloud Tasks queue is a queue store.
|
|
82
|
+
match: { hclBlock: resource.google_cloud_tasks_queue, files: ["**/*.tf"] }
|
|
83
|
+
emit:
|
|
84
|
+
kind: DataStore
|
|
85
|
+
id: "${attr.name | slug}"
|
|
86
|
+
fields: { storeType: queue, entitiesHeld: [] }
|
|
87
|
+
evidence: { source: infrastructure }
|
|
88
|
+
confidence: verified
|
|
89
|
+
- id: spanner-database
|
|
90
|
+
description: A Spanner database is a relational store, named with its instance.
|
|
91
|
+
match: { hclBlock: resource.google_spanner_database, files: ["**/*.tf"] }
|
|
92
|
+
emit:
|
|
93
|
+
kind: DataStore
|
|
94
|
+
id: "${attr.instance | slug}-${attr.name | slug}"
|
|
95
|
+
fields: { storeType: relational, entitiesHeld: [] }
|
|
96
|
+
evidence: { source: infrastructure }
|
|
97
|
+
confidence: verified
|
|
98
|
+
tests:
|
|
99
|
+
- name: the Forge Google Cloud estate
|
|
100
|
+
fixture: fixtures/terraform-gcp/forge-gcp-infra
|
|
101
|
+
expect:
|
|
102
|
+
- { kind: DataStore, id: ledger-db, storeType: postgresql }
|
|
103
|
+
- { kind: DataStore, id: loyalty-db, storeType: mysql }
|
|
104
|
+
- { kind: DataStore, id: reporting-db, storeType: sqlserver }
|
|
105
|
+
- { kind: DataStore, id: scratch-db, storeType: unknown }
|
|
106
|
+
- { kind: DataStore, id: forge-sessions, storeType: cache }
|
|
107
|
+
- { kind: DataStore, id: forge-emails, storeType: queue }
|
|
108
|
+
- { kind: DataStore, id: forge-spanner-accounts, storeType: relational }
|
|
109
|
+
absent: [forge-gke, topic.orders]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Vendored grammars
|
|
2
|
+
|
|
3
|
+
Prebuilt tree-sitter grammars that aren't in `tree-sitter-wasms` (ADR 0060). Each is the `.wasm`
|
|
4
|
+
file from the grammar's published npm package, unchanged, with its licence beside it.
|
|
5
|
+
|
|
6
|
+
| File | From | Licence |
|
|
7
|
+
| ------------------------- | ----------------------------------------------------------------- | ------- |
|
|
8
|
+
| `tree-sitter-groovy.wasm` | `tree-sitter-groovy@0.1.2` (github.com/amaanq/tree-sitter-groovy) | MIT |
|
|
9
|
+
|
|
10
|
+
Vendored rather than depended on: the package also brings a native build (`node-gyp-build`,
|
|
11
|
+
`node-addon-api`, `tree-sitter-java`) with install scripts that Atticus doesn't need.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
tree-sitter-groovy 0.1.2 (https://github.com/amaanq/tree-sitter-groovy), as published on npm
|
|
2
|
+
with "license": "MIT". The package ships no licence file; this is the MIT licence it declares.
|
|
3
|
+
|
|
4
|
+
MIT License
|
|
5
|
+
|
|
6
|
+
Copyright (c) Amaan Qureshi and the tree-sitter-groovy contributors
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
|
9
|
+
associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
10
|
+
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
|
11
|
+
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
furnished to do so, subject to the following conditions:
|
|
13
|
+
|
|
14
|
+
The above copyright notice and this permission notice shall be included in all copies or
|
|
15
|
+
substantial portions of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
|
|
18
|
+
NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
20
|
+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
|
|
21
|
+
OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "tree-sitter-groovy",
|
|
4
|
+
"version": "0.1.2",
|
|
5
|
+
"licence": "MIT",
|
|
6
|
+
"file": "tree-sitter-groovy.wasm",
|
|
7
|
+
"licenceFile": "tree-sitter-groovy.LICENSE",
|
|
8
|
+
"source": "https://github.com/amaanq/tree-sitter-groovy",
|
|
9
|
+
"sha256": "0e68bb48ac166de25c381e05bbfbc90769f25d4709c14e180dd593696a73c197"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
schemaVersion: 1
|
|
2
|
+
id: architect-diagrams-and-code
|
|
3
|
+
role: architect
|
|
4
|
+
title: Diagrams against code
|
|
5
|
+
summary: Compare the architect's draw.io diagram with the code, settle a name with an alias, and see the critic catch a pattern typo.
|
|
6
|
+
minutes: 15
|
|
7
|
+
setup: [scan]
|
|
8
|
+
intro: |
|
|
9
|
+
Diagrams drift. Atticus compares them with what the code says and lists every difference as
|
|
10
|
+
an item for a person: edges that go another way, edges only one side knows, names that need
|
|
11
|
+
an alias. Code always wins; a person decides what to do about the drawing. The sandbox was
|
|
12
|
+
scanned for you.
|
|
13
|
+
steps:
|
|
14
|
+
- id: reconcile
|
|
15
|
+
title: Reconcile the diagram
|
|
16
|
+
body: |
|
|
17
|
+
Run reconcile on the Forge context diagram in `inputs/diagrams/`. Read each item: it says
|
|
18
|
+
what differs and what to do about it.
|
|
19
|
+
do: [[reconcile]]
|
|
20
|
+
solution: { answer: Ledger Platform }
|
|
21
|
+
check:
|
|
22
|
+
type: answer
|
|
23
|
+
question: Which name on the diagram needs an alias before its edges match the code?
|
|
24
|
+
truth: { from: fixed, values: [Ledger Platform] }
|
|
25
|
+
hint: Look for the alias-needed item.
|
|
26
|
+
- id: alias
|
|
27
|
+
title: Confirm the alias
|
|
28
|
+
body: |
|
|
29
|
+
Record that the diagram's "Ledger Platform" is the component `ledger-api`. The decision is a
|
|
30
|
+
file in `catalog/curated/`: commit it and every later reconcile uses it.
|
|
31
|
+
do: [[alias, Ledger Platform, ledger-api, --by, ari]]
|
|
32
|
+
check: { type: curated-decision, action: alias, target: ledger-api, includes: Ledger Platform }
|
|
33
|
+
hint: atticus alias "Ledger Platform" ledger-api
|
|
34
|
+
- id: critic
|
|
35
|
+
title: Let the critic read the change
|
|
36
|
+
body: |
|
|
37
|
+
The seeded change `add-transfer-limit` is in Plan. Run the critic on it: the rule checks
|
|
38
|
+
run first, cost nothing and give the same answer every time. One finding is about a
|
|
39
|
+
pattern code in `interfaces.md` that the org pack doesn't have.
|
|
40
|
+
do: [[critic, add-transfer-limit]]
|
|
41
|
+
solution: { answer: S.GW.SRO }
|
|
42
|
+
check:
|
|
43
|
+
type: all
|
|
44
|
+
checks:
|
|
45
|
+
- {
|
|
46
|
+
type: findings,
|
|
47
|
+
change: add-transfer-limit,
|
|
48
|
+
gate: plan,
|
|
49
|
+
rule: constitution.interface-approved-pattern,
|
|
50
|
+
}
|
|
51
|
+
- type: answer
|
|
52
|
+
question: Which pattern code in the change's interfaces.md is not in the org pack?
|
|
53
|
+
truth: { from: unknown-pattern, change: add-transfer-limit }
|
|
54
|
+
hint: Run the critic first, then read the interface-approved-pattern finding.
|
|
55
|
+
- id: waivable
|
|
56
|
+
title: Can it be waived?
|
|
57
|
+
body: |
|
|
58
|
+
Explain the finding. Rules from the built-in constitution are never waivable: the change
|
|
59
|
+
must be fixed.
|
|
60
|
+
do: [[explain, interface-approved-pattern-interfaces-l6]]
|
|
61
|
+
solution: { answer: "no" }
|
|
62
|
+
check:
|
|
63
|
+
type: answer
|
|
64
|
+
question: Can the pattern finding be waived? (yes or no)
|
|
65
|
+
truth: { from: fixed, values: ["no"] }
|
|
66
|
+
hint: The last line of the explanation says what you can do with it.
|
|
67
|
+
outro: |
|
|
68
|
+
You reconciled a diagram, settled a name for good and saw a typo caught before review. Fix
|
|
69
|
+
the typo in interfaces.md and run the critic again to see the finding go.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
schemaVersion: 1
|
|
2
|
+
id: business-analyst-story-bar
|
|
3
|
+
role: business-analyst
|
|
4
|
+
title: Stories that meet the bar
|
|
5
|
+
summary: Measure the change's stories against the story bar, fix a story without acceptance criteria, and spot text aimed at AI reviewers.
|
|
6
|
+
minutes: 15
|
|
7
|
+
setup: [scan]
|
|
8
|
+
intro: |
|
|
9
|
+
A story is ready when it says who it is for and why, has acceptance criteria in
|
|
10
|
+
Given/When/Then form, names its systems and repos, and names what it depends on. Atticus
|
|
11
|
+
measures that for you (the story bar) and the critic blocks the Plan hand-off on what fails.
|
|
12
|
+
steps:
|
|
13
|
+
- id: bar
|
|
14
|
+
title: Measure the story bar
|
|
15
|
+
body: |
|
|
16
|
+
Measure the seeded change's stories. Each story that isn't ready is listed with what it
|
|
17
|
+
lacks.
|
|
18
|
+
do: [[plan, bar, add-transfer-limit]]
|
|
19
|
+
solution: { answer: s2-show-remaining }
|
|
20
|
+
check:
|
|
21
|
+
type: answer
|
|
22
|
+
question: Which story has no acceptance criteria?
|
|
23
|
+
truth: { from: stories-without-criteria, change: add-transfer-limit }
|
|
24
|
+
hint: Look for "no acceptance criteria in Given/When/Then form".
|
|
25
|
+
- id: fix
|
|
26
|
+
title: Add the acceptance criteria
|
|
27
|
+
body: |
|
|
28
|
+
Open `openspec/changes/add-transfer-limit/stories/s2-show-remaining.md` and add an
|
|
29
|
+
"Acceptance criteria" section with at least one Given/When/Then line.
|
|
30
|
+
solution:
|
|
31
|
+
files:
|
|
32
|
+
- path: openspec/changes/add-transfer-limit/stories/s2-show-remaining.md
|
|
33
|
+
content: |
|
|
34
|
+
# Show the remaining limit
|
|
35
|
+
|
|
36
|
+
As a Portal customer I want to see how much I can still send today so that I don't try a
|
|
37
|
+
transfer that will be refused.
|
|
38
|
+
|
|
39
|
+
## Acceptance criteria
|
|
40
|
+
|
|
41
|
+
- Given an account with a limit of 1000 that has sent 900 today, when the customer opens the transfer screen, then it shows 100 left today.
|
|
42
|
+
|
|
43
|
+
## Notes
|
|
44
|
+
|
|
45
|
+
Show it under the amount field on the transfer screen, as in ux.md.
|
|
46
|
+
|
|
47
|
+
## Systems and repos
|
|
48
|
+
|
|
49
|
+
portal (forge-portal-bff, forge-portal-ui)
|
|
50
|
+
|
|
51
|
+
## Depends on
|
|
52
|
+
|
|
53
|
+
s1-refuse-over-limit
|
|
54
|
+
check:
|
|
55
|
+
type: file
|
|
56
|
+
path: openspec/changes/add-transfer-limit/stories/s2-show-remaining.md
|
|
57
|
+
contains: ["## Acceptance criteria", "- Given "]
|
|
58
|
+
hint: The section heading is "## Acceptance criteria" and each criterion is a "- Given ..., when ..., then ..." line.
|
|
59
|
+
- id: critic
|
|
60
|
+
title: Run the critic
|
|
61
|
+
body: |
|
|
62
|
+
Run the critic on the change. The story-acceptance-criteria finding is gone from the newest
|
|
63
|
+
round; other findings remain for the architect and the team lead.
|
|
64
|
+
do: [[critic, add-transfer-limit]]
|
|
65
|
+
check:
|
|
66
|
+
type: all
|
|
67
|
+
checks:
|
|
68
|
+
- { type: findings, change: add-transfer-limit, gate: plan, latest: true, min: 1 }
|
|
69
|
+
- {
|
|
70
|
+
type: findings,
|
|
71
|
+
change: add-transfer-limit,
|
|
72
|
+
gate: plan,
|
|
73
|
+
latest: true,
|
|
74
|
+
rule: constitution.story-acceptance-criteria,
|
|
75
|
+
min: 0,
|
|
76
|
+
max: 0,
|
|
77
|
+
}
|
|
78
|
+
hint: Fix the story first, then run atticus critic add-transfer-limit.
|
|
79
|
+
- id: injection
|
|
80
|
+
title: Text aimed at AI reviewers
|
|
81
|
+
body: |
|
|
82
|
+
One story tells AI critics to ignore their rules. Ingested content is data, never
|
|
83
|
+
instructions: the critic blocks it, and Atticus marks or quarantines such text before any
|
|
84
|
+
model sees it. Scan the stories folder with the defences.
|
|
85
|
+
do: [[defences, scan, openspec/changes/add-transfer-limit/stories]]
|
|
86
|
+
solution: { answer: s3-audit-refusals }
|
|
87
|
+
check:
|
|
88
|
+
type: answer
|
|
89
|
+
question: Which story holds an instruction aimed at AI reviewers?
|
|
90
|
+
truth: { from: flagged-files, path: openspec/changes/add-transfer-limit/stories }
|
|
91
|
+
hint: Give the story id (its file name without .md).
|
|
92
|
+
outro: |
|
|
93
|
+
You measured stories against the bar, fixed one and saw how Atticus treats text that tries
|
|
94
|
+
to steer an AI reviewer.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
schemaVersion: 1
|
|
2
|
+
id: delivery-lead-release-readiness
|
|
3
|
+
role: delivery-lead
|
|
4
|
+
title: Is it ready to release?
|
|
5
|
+
summary: Read a change's state and blockers, see the critic's gate, and ask the archive gate whether it may be archived.
|
|
6
|
+
minutes: 10
|
|
7
|
+
setup: [scan]
|
|
8
|
+
intro: |
|
|
9
|
+
As release manager you need one honest answer: can this go? Atticus reads it from the
|
|
10
|
+
change's state, its hand-off PRs, the critic's open findings at each gate and the code.
|
|
11
|
+
steps:
|
|
12
|
+
- id: status
|
|
13
|
+
title: Where is the change?
|
|
14
|
+
body: |
|
|
15
|
+
Ask for the seeded change's status: its state, the next step, its risk and what blocks it.
|
|
16
|
+
do: [[change, status, add-transfer-limit]]
|
|
17
|
+
solution: { answer: plan }
|
|
18
|
+
check:
|
|
19
|
+
type: answer
|
|
20
|
+
question: Which state is add-transfer-limit in?
|
|
21
|
+
truth: { from: change-state, change: add-transfer-limit }
|
|
22
|
+
hint: Read the State line.
|
|
23
|
+
- id: critic
|
|
24
|
+
title: What does the plan gate say?
|
|
25
|
+
body: |
|
|
26
|
+
Run the critic: blocking findings and open knowledge gaps keep the plan gate closed, and
|
|
27
|
+
the hand-off can't open until they are fixed, answered or (where allowed) waived.
|
|
28
|
+
do: [[critic, add-transfer-limit]]
|
|
29
|
+
check: { type: findings, change: add-transfer-limit, gate: plan, min: 1 }
|
|
30
|
+
hint: atticus critic add-transfer-limit
|
|
31
|
+
- id: archive
|
|
32
|
+
title: Ask the archive gate
|
|
33
|
+
body: |
|
|
34
|
+
The archive gate runs before a change is archived: released, no open blocking finding at
|
|
35
|
+
any gate it was reviewed at, PRs merged and builds passed, no unplanned drift.
|
|
36
|
+
do: [[ci, archive-gate, add-transfer-limit]]
|
|
37
|
+
solution: { answer: "no" }
|
|
38
|
+
check:
|
|
39
|
+
type: answer
|
|
40
|
+
question: May add-transfer-limit be archived now? (yes or no)
|
|
41
|
+
truth: { from: fixed, values: ["no"] }
|
|
42
|
+
hint: The first line says whether it can.
|
|
43
|
+
outro: |
|
|
44
|
+
You read readiness from files alone: no status meetings needed to know what blocks a release.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
schemaVersion: 1
|
|
2
|
+
id: designer-features-in-user-words
|
|
3
|
+
role: designer
|
|
4
|
+
title: Features in your users' words
|
|
5
|
+
summary: Find the features Atticus detected in code, name one the way customers say it, and draw the context view.
|
|
6
|
+
minutes: 10
|
|
7
|
+
setup: [scan]
|
|
8
|
+
intro: |
|
|
9
|
+
Atticus finds features in code from their entry points (screens, public endpoints, jobs,
|
|
10
|
+
event consumers) and gives them provisional names from paths and class names. People name
|
|
11
|
+
them properly; the name survives every scan.
|
|
12
|
+
steps:
|
|
13
|
+
- id: list
|
|
14
|
+
title: List the features
|
|
15
|
+
body: |
|
|
16
|
+
List the detected features. Each starts at entry points such as an endpoint or an event.
|
|
17
|
+
do: [[feature, list]]
|
|
18
|
+
solution: { answer: feature.transfers }
|
|
19
|
+
check:
|
|
20
|
+
type: answer
|
|
21
|
+
question: Which feature starts at the endpoint ledger-api.post-transfer?
|
|
22
|
+
truth: { from: feature-of, entryPoint: ledger-api.post-transfer }
|
|
23
|
+
hint: atticus feature show <id> lists a feature's entry points.
|
|
24
|
+
- id: name
|
|
25
|
+
title: Name it in your users' words
|
|
26
|
+
body: |
|
|
27
|
+
Customers say "Money transfers". Record that name; it becomes a curated decision.
|
|
28
|
+
do: [[feature, name, feature.transfers, Money transfers, --by, dee]]
|
|
29
|
+
check:
|
|
30
|
+
{
|
|
31
|
+
type: curated-decision,
|
|
32
|
+
action: assert,
|
|
33
|
+
target: feature.transfers,
|
|
34
|
+
includes: Money transfers,
|
|
35
|
+
}
|
|
36
|
+
hint: atticus feature name feature.transfers "Money transfers"
|
|
37
|
+
- id: diagram
|
|
38
|
+
title: Draw the context view
|
|
39
|
+
body: |
|
|
40
|
+
Draw the systems and the calls between them as Mermaid, from the catalog (never by hand).
|
|
41
|
+
do: [[diagram, render, context, --format, mermaid, --out, diagrams/context.mmd]]
|
|
42
|
+
check: { type: file, path: diagrams/context.mmd, contains: ["flowchart", "Northwind Pay"] }
|
|
43
|
+
hint: atticus diagram render context --format mermaid --out diagrams/context.mmd
|
|
44
|
+
- id: ux
|
|
45
|
+
title: Where the screens live in a change
|
|
46
|
+
body: |
|
|
47
|
+
Each change keeps the screens it touches in its own file next to the design. Look at the
|
|
48
|
+
seeded change's folder.
|
|
49
|
+
solution: { answer: ux.md }
|
|
50
|
+
check:
|
|
51
|
+
type: answer
|
|
52
|
+
question: Which file of a change describes its screens and their states?
|
|
53
|
+
truth: { from: fixed, values: [ux.md] }
|
|
54
|
+
hint: openspec/changes/add-transfer-limit/ holds it.
|
|
55
|
+
outro: |
|
|
56
|
+
Named features and generated views keep everyone talking about the same things in the same
|
|
57
|
+
words.
|