@maycombhq/atticus 0.0.0-stage → 2.0.0-beta.3
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-23W7VWKR.js +2609 -0
- package/dist/chunk-2C5B464C.js +106 -0
- package/dist/chunk-2LLFKP7C.js +53 -0
- package/dist/chunk-2MD7TXSG.js +166 -0
- package/dist/chunk-2UIQBDJO.js +131 -0
- package/dist/chunk-32MPK524.js +378 -0
- package/dist/chunk-3ALD2W2A.js +95 -0
- package/dist/chunk-3G4YI4ZU.js +16 -0
- package/dist/chunk-4AK7IBVP.js +915 -0
- package/dist/chunk-4BMDGTED.js +69 -0
- package/dist/chunk-4NDAAFQT.js +103 -0
- package/dist/chunk-4Q3NN7VF.js +32 -0
- package/dist/chunk-4RS5KZQD.js +25 -0
- package/dist/chunk-4SKZDI62.js +22 -0
- package/dist/chunk-55YODD3N.js +385 -0
- package/dist/chunk-56YQ6ROQ.js +3479 -0
- package/dist/chunk-5A5L3T2U.js +583 -0
- package/dist/chunk-5FEOD73Z.js +374 -0
- package/dist/chunk-5GDRCDQB.js +32 -0
- package/dist/chunk-5WS2YOGD.js +95 -0
- package/dist/chunk-65NYPGRC.js +766 -0
- package/dist/chunk-6BVONWJ7.js +50 -0
- package/dist/chunk-6D4FRTFF.js +53 -0
- package/dist/chunk-6GPJOFV4.js +149 -0
- package/dist/chunk-6JCPI55B.js +92 -0
- package/dist/chunk-6JUBZBMW.js +56 -0
- package/dist/chunk-6SCVQZX5.js +2522 -0
- package/dist/chunk-6TACQN3N.js +41 -0
- package/dist/chunk-72TXNLOC.js +496 -0
- package/dist/chunk-76WKMA4J.js +14 -0
- package/dist/chunk-7EFILTCI.js +67 -0
- package/dist/chunk-7EKXJZ2Y.js +2902 -0
- package/dist/chunk-7EOBHUMC.js +133 -0
- package/dist/chunk-7JUKDRSZ.js +1726 -0
- package/dist/chunk-7NN5VWDC.js +43 -0
- package/dist/chunk-7UFQZXZA.js +5949 -0
- package/dist/chunk-A3KPZJ5M.js +131 -0
- package/dist/chunk-A6AC72A5.js +48 -0
- package/dist/chunk-A7KZKIZX.js +166 -0
- package/dist/chunk-ABWHYWNI.js +101 -0
- package/dist/chunk-AFFIK6JI.js +46 -0
- package/dist/chunk-AHOQZ4OK.js +37 -0
- package/dist/chunk-AVJDSJ2F.js +18 -0
- package/dist/chunk-AXXCPAP6.js +203 -0
- package/dist/chunk-AY3QXYMB.js +41 -0
- package/dist/chunk-B2OKWJIU.js +143 -0
- package/dist/chunk-B632FH3I.js +251 -0
- package/dist/chunk-BLW4SXCU.js +38 -0
- package/dist/chunk-BVS2K73A.js +33 -0
- package/dist/chunk-BWZ77RQT.js +25 -0
- package/dist/chunk-BYBUDX4T.js +163 -0
- package/dist/chunk-BYZCY6SP.js +230 -0
- package/dist/chunk-C6EKFH7J.js +169 -0
- package/dist/chunk-C6MZFGN7.js +271 -0
- package/dist/chunk-CAQZUNOH.js +1150 -0
- package/dist/chunk-CD4XHYGY.js +856 -0
- package/dist/chunk-CEZQOLEO.js +1217 -0
- package/dist/chunk-CHWTETW7.js +128 -0
- package/dist/chunk-CMV7TGU6.js +31 -0
- package/dist/chunk-CNUKCS2T.js +2741 -0
- package/dist/chunk-CP3L3FH7.js +549 -0
- package/dist/chunk-CPGCA6GZ.js +41 -0
- package/dist/chunk-CWM6KM5G.js +315 -0
- package/dist/chunk-CXDSTRUJ.js +873 -0
- package/dist/chunk-D3PO4DOZ.js +261 -0
- package/dist/chunk-DFBCSHVT.js +69 -0
- package/dist/chunk-DHPACDG7.js +104 -0
- package/dist/chunk-DPC5Y5DL.js +3898 -0
- package/dist/chunk-DPUYDDQG.js +164 -0
- package/dist/chunk-DQN7TF5D.js +325 -0
- package/dist/chunk-EADP3PEN.js +450 -0
- package/dist/chunk-ED2LWWIP.js +878 -0
- package/dist/chunk-EHVTK3UE.js +116 -0
- package/dist/chunk-EPTBZ3GP.js +101 -0
- package/dist/chunk-EXIMEJ2X.js +545 -0
- package/dist/chunk-EYWIDJFU.js +130 -0
- package/dist/chunk-F44OMYIN.js +54 -0
- package/dist/chunk-F7HYOUFF.js +287 -0
- package/dist/chunk-FALXWAMD.js +182 -0
- package/dist/chunk-FBNPE7HS.js +49 -0
- package/dist/chunk-FSWUD5QB.js +108 -0
- package/dist/chunk-FVQISWPW.js +296 -0
- package/dist/chunk-G2B4ZQGH.js +240 -0
- package/dist/chunk-GK6XK5SP.js +1227 -0
- package/dist/chunk-GLEBK5L3.js +34 -0
- package/dist/chunk-GNB5QDDI.js +25 -0
- package/dist/chunk-GQ4N4WKF.js +1142 -0
- package/dist/chunk-GRMR5TRQ.js +119 -0
- package/dist/chunk-HC6XKREB.js +334 -0
- package/dist/chunk-HFQCFSJR.js +60 -0
- package/dist/chunk-HJDICQA4.js +102 -0
- package/dist/chunk-HLJAXMM4.js +233 -0
- package/dist/chunk-HVIMMDVB.js +162 -0
- package/dist/chunk-HZVLAPN5.js +32 -0
- package/dist/chunk-I3E7CX4H.js +155 -0
- package/dist/chunk-IQFTZ37C.js +2919 -0
- package/dist/chunk-ITY3VJRX.js +285 -0
- package/dist/chunk-JBTK5OP2.js +55 -0
- package/dist/chunk-JPGCERE2.js +26 -0
- package/dist/chunk-JQDNHIBC.js +38 -0
- package/dist/chunk-JRBCWLOR.js +307 -0
- package/dist/chunk-JRZQA2JM.js +212 -0
- package/dist/chunk-KCBJCA66.js +45 -0
- package/dist/chunk-KJPMEAI4.js +705 -0
- package/dist/chunk-KQDZXGNR.js +14 -0
- package/dist/chunk-KUUQR4HA.js +264 -0
- package/dist/chunk-L24C55VN.js +7923 -0
- package/dist/chunk-L3BX5ZIB.js +400 -0
- package/dist/chunk-L6SGQIR3.js +471 -0
- package/dist/chunk-LBENYT3H.js +66 -0
- package/dist/chunk-LNAJW6FB.js +47 -0
- package/dist/chunk-MC3H7736.js +19910 -0
- package/dist/chunk-MMOSZPWJ.js +273 -0
- package/dist/chunk-MXCHWULV.js +285 -0
- package/dist/chunk-N3E56YPN.js +344 -0
- package/dist/chunk-NHFQMOVK.js +180 -0
- package/dist/chunk-NQU6KNQF.js +27 -0
- package/dist/chunk-OIK5YPTN.js +391 -0
- package/dist/chunk-OLWFG75W.js +4330 -0
- package/dist/chunk-ONPUIE7Y.js +29 -0
- package/dist/chunk-OW7D2PJL.js +376 -0
- package/dist/chunk-P63VL4HE.js +2357 -0
- package/dist/chunk-PA4YNUMU.js +45 -0
- package/dist/chunk-PAMPPUR6.js +4500 -0
- package/dist/chunk-PBS3OFNN.js +113 -0
- package/dist/chunk-PFT3VTS4.js +214 -0
- package/dist/chunk-PFTA6BZF.js +49 -0
- package/dist/chunk-PNN5KLAY.js +119 -0
- package/dist/chunk-PRPPGYZG.js +104 -0
- package/dist/chunk-PUKEZ37F.js +666 -0
- package/dist/chunk-Q3HOFXZJ.js +76 -0
- package/dist/chunk-Q5AMFEWD.js +119 -0
- package/dist/chunk-QKRNMBJO.js +80 -0
- package/dist/chunk-QSU47IQ5.js +36 -0
- package/dist/chunk-QSXK2RGH.js +688 -0
- package/dist/chunk-QXNWYUYI.js +52 -0
- package/dist/chunk-R6RY4Q5T.js +51 -0
- package/dist/chunk-RCU3MPY2.js +1496 -0
- package/dist/chunk-RLIB4JUN.js +174 -0
- package/dist/chunk-RYSCLMU3.js +1991 -0
- package/dist/chunk-RZUZ4RJJ.js +415 -0
- package/dist/chunk-S2A7YC3Q.js +41433 -0
- package/dist/chunk-S2FBBX7D.js +540 -0
- package/dist/chunk-S34B4QPI.js +430 -0
- package/dist/chunk-SETWVXOJ.js +2078 -0
- package/dist/chunk-SMA4N4AC.js +211 -0
- package/dist/chunk-SP2I63OO.js +252 -0
- package/dist/chunk-STHSY74Q.js +242 -0
- package/dist/chunk-STUPFGXY.js +3206 -0
- package/dist/chunk-T5I4S2W3.js +34 -0
- package/dist/chunk-T6AIP7H5.js +3851 -0
- package/dist/chunk-TANFV3MZ.js +531 -0
- package/dist/chunk-TAVDMUV3.js +189 -0
- package/dist/chunk-TBSQJ6IV.js +324 -0
- package/dist/chunk-TIZHP7KE.js +408 -0
- package/dist/chunk-TV45EUGM.js +51 -0
- package/dist/chunk-TW2KPPUC.js +4087 -0
- package/dist/chunk-V2YTAIQO.js +1075 -0
- package/dist/chunk-V5PKHHQQ.js +1963 -0
- package/dist/chunk-VF4IOZZO.js +184 -0
- package/dist/chunk-VJTINHZI.js +48 -0
- package/dist/chunk-VKLILA2D.js +205 -0
- package/dist/chunk-VOGCSYOI.js +16 -0
- package/dist/chunk-VPTTCYOC.js +16101 -0
- package/dist/chunk-WY6PP6AA.js +53 -0
- package/dist/chunk-WYFIXP54.js +174 -0
- package/dist/chunk-WZ2BXIGG.js +34 -0
- package/dist/chunk-XJNDSYGO.js +147 -0
- package/dist/chunk-XPCM366L.js +70 -0
- package/dist/chunk-XSQKGVYA.js +69 -0
- package/dist/chunk-XUPVB7TL.js +207 -0
- package/dist/chunk-XZRON6IV.js +131 -0
- package/dist/chunk-Y4NG2FP5.js +94 -0
- package/dist/chunk-YEDDOYSC.js +27809 -0
- package/dist/chunk-YGMCXNTY.js +41 -0
- package/dist/chunk-YJKPTX6J.js +228 -0
- package/dist/chunk-YMZ3TNYB.js +18 -0
- package/dist/chunk-Z6LF7HQN.js +22 -0
- package/dist/chunk-Z7SG32ZY.js +55 -0
- package/dist/chunk-ZDPAS56H.js +76 -0
- package/dist/chunk-ZJSP24X4.js +1247 -0
- package/dist/chunk-ZMAINWBW.js +18 -0
- package/dist/chunk-ZMFPW66A.js +22 -0
- package/dist/chunk-ZUIAOKXI.js +1611 -0
- package/dist/chunk-ZVM6AKKM.js +47 -0
- package/dist/files.json +1888 -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 +286 -0
- package/dist/packages/naysayer/starter/review.yaml +256 -0
- package/dist/packages/sdk/npm/index.js +8892 -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-tma0MCuh.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-B54fm9FQ.js +29 -0
- package/dist/packages/ui/dist/assets/index-DD_hufQz.css +1 -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,11 @@
|
|
|
1
|
+
package forge.ledger;
|
|
2
|
+
|
|
3
|
+
import forge.framework.*;
|
|
4
|
+
|
|
5
|
+
public class LedgerEvents {
|
|
6
|
+
@ForgeSubscribe(topic = "payments.initiated")
|
|
7
|
+
public void onPaymentInitiated(Object payment) { }
|
|
8
|
+
|
|
9
|
+
@ForgePublish(topic = "transfers.completed")
|
|
10
|
+
public Object transferCompleted(Object transfer) { return transfer; }
|
|
11
|
+
}
|
package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/NorthwindClient.java
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
package forge.ledger;
|
|
2
|
+
|
|
3
|
+
import forge.framework.*;
|
|
4
|
+
|
|
5
|
+
// Calls the vendor directly. The architecture diagram says this goes through the gateway.
|
|
6
|
+
@ForgeClient(service = "northwind-pay", baseUrl = "${northwind.url}")
|
|
7
|
+
public interface NorthwindClient {
|
|
8
|
+
@ForgeCall(method = "POST", path = "/v2/payments")
|
|
9
|
+
PaymentResult pay(PaymentRequest request);
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<project><groupId>forge</groupId><artifactId>forge-portal-bff</artifactId><parent><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version></parent></project>
|
package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/AuditPublisher.java
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package forge.portal;
|
|
2
|
+
|
|
3
|
+
import org.springframework.web.client.RestTemplate;
|
|
4
|
+
|
|
5
|
+
public class AuditPublisher {
|
|
6
|
+
private final RestTemplate rest = new RestTemplate();
|
|
7
|
+
|
|
8
|
+
public void record(Object event) {
|
|
9
|
+
// Direct call to the audit service; not on the architecture diagram.
|
|
10
|
+
rest.postForObject("${audit.url}/audit/events", event, Void.class);
|
|
11
|
+
}
|
|
12
|
+
}
|
package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/BalanceController.java
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package forge.portal;
|
|
2
|
+
|
|
3
|
+
import org.springframework.web.bind.annotation.*;
|
|
4
|
+
|
|
5
|
+
@RestController
|
|
6
|
+
@RequestMapping("/api")
|
|
7
|
+
public class BalanceController {
|
|
8
|
+
private final LedgerClient ledger;
|
|
9
|
+
|
|
10
|
+
public BalanceController(LedgerClient ledger) { this.ledger = ledger; }
|
|
11
|
+
|
|
12
|
+
@GetMapping("/balance/{accountId}")
|
|
13
|
+
public Balance balance(@PathVariable String accountId) {
|
|
14
|
+
return ledger.getBalance(accountId);
|
|
15
|
+
}
|
|
16
|
+
}
|
package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/LedgerClient.java
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package forge.portal;
|
|
2
|
+
|
|
3
|
+
import org.springframework.cloud.openfeign.FeignClient;
|
|
4
|
+
import org.springframework.web.bind.annotation.*;
|
|
5
|
+
|
|
6
|
+
@FeignClient(name = "ledger", url = "${gateway.url}/ledger/v1")
|
|
7
|
+
public interface LedgerClient {
|
|
8
|
+
@GetMapping("/accounts/{id}/balance")
|
|
9
|
+
Balance getBalance(@PathVariable("id") String id);
|
|
10
|
+
|
|
11
|
+
@PostMapping("/transfers")
|
|
12
|
+
TransferResult createTransfer(@RequestBody TransferRequest request);
|
|
13
|
+
}
|
package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/PaymentEvents.java
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package forge.portal;
|
|
2
|
+
|
|
3
|
+
import org.springframework.kafka.core.KafkaTemplate;
|
|
4
|
+
|
|
5
|
+
public class PaymentEvents {
|
|
6
|
+
private final KafkaTemplate<String, Object> kafka;
|
|
7
|
+
|
|
8
|
+
public PaymentEvents(KafkaTemplate<String, Object> kafka) { this.kafka = kafka; }
|
|
9
|
+
|
|
10
|
+
public void initiated(Object payment) {
|
|
11
|
+
kafka.send("payments.initiated", payment);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "name": "forge-portal-ui", "private": true, "dependencies": { "react": "18.3.1" } }
|
package/dist/fixtures/forge/repos/forge-reports-job/src/main/java/forge/reports/DailyEntriesJob.java
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
package forge.reports;
|
|
2
|
+
|
|
3
|
+
import org.springframework.batch.core.Job;
|
|
4
|
+
import org.springframework.jdbc.core.JdbcTemplate;
|
|
5
|
+
import org.springframework.kafka.annotation.KafkaListener;
|
|
6
|
+
|
|
7
|
+
public class DailyEntriesJob {
|
|
8
|
+
private final JdbcTemplate ledgerDb;
|
|
9
|
+
|
|
10
|
+
public DailyEntriesJob(JdbcTemplate ledgerDb) { this.ledgerDb = ledgerDb; }
|
|
11
|
+
|
|
12
|
+
// Reads the ledger's table directly. The diagram shows reports calling the Ledger API.
|
|
13
|
+
public void run() {
|
|
14
|
+
ledgerDb.query("SELECT account_id, amount, posted_at FROM entry WHERE posted_at >= ?", rs -> {});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@KafkaListener(topics = "transfers.completed")
|
|
18
|
+
public void onTransferCompleted(Object transfer) { }
|
|
19
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Forge change: the M3 exit fixture
|
|
2
|
+
|
|
3
|
+
An invented Forge feature change, `add-transfer-limit`, with every org-flow artifact written by hand and problems seeded on purpose. It runs on top of `fixtures/forge` (org pack and expected catalog), which it never changes.
|
|
4
|
+
|
|
5
|
+
| Folder | What it holds |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| `openspec/changes/add-transfer-limit/` | The change folder at the plan phase: `change.yaml`, brief, proposal, specs, interfaces, mappings, data, design, UX, stories, tasks and service-desk drafts |
|
|
8
|
+
| `org-pack/` | New org-pack files laid over the Forge pack: the critic's four question agents (`true-critic`, `complete-critic`, `safe-critic`, `ship-critic`), the old `code-and-test-critic` (an org pack that still defines it keeps working), the starter review's two code checks (`checklists/review.yaml`), the Forge gates naming that checklist (`gates.yaml`), and the Ledger team's checklist (`teams/team-ledger/checklists/`) |
|
|
9
|
+
| `recordings/` | Replay recordings for the AI lenses, written by hand as the mock runtime would return them, keyed by agent and prompt hash |
|
|
10
|
+
| `expected/stories.yaml` | The outline the planner's stories must meet for the story bar (stories, gaps they cover, nothing invented); hand-written |
|
|
11
|
+
| `recordings/story-writer/` | Replay recordings for the story writer's prose, written by hand |
|
|
12
|
+
| `expected/findings.yaml` | The seeded problems (12 blocking issues, 14 knowledge gaps), the other findings the critic must raise with the layer that must catch each, and the findings retired with the four questions |
|
|
13
|
+
|
|
14
|
+
The change adds a daily limit to ledger-api's POST /transfers, touches portal-bff, ledger-api, audit-svc and ledger-db, and adds a call to Northwind Pay. Seeded problems include a pattern-code typo, a hop with no pattern, a call to a system the catalog doesn't know, vendor and internal calls with no timeouts, a new table with no migration, retention or personal-data classification, a story without acceptance criteria, a story that addresses AI reviewers, and gaps such as the unknown audit-svc owner and the vendor's unknown rate limit.
|
|
15
|
+
|
|
16
|
+
Rules: the expected file and the recordings are hand-written; never regenerate them from critic output. A changed prompt makes the replay fail with the new prompt hash; update the recording's hash only after checking the hand-written answer still fits the prompt.
|
|
17
|
+
|
|
18
|
+
## Re-baselined for the four questions (ADR 0124 addendum, Part 4)
|
|
19
|
+
|
|
20
|
+
The critic asks four questions of every draft (is it true to the code, is it complete, is it safe to build, can it ship) with one AI lens per question, instead of seven role lenses. The fixture was re-baselined for it on 2026-10-24.
|
|
21
|
+
|
|
22
|
+
**Retired** (listed under `retired:` in `expected/findings.yaml`; the golden tests check none comes back):
|
|
23
|
+
|
|
24
|
+
| Was | Rule | Why it retired |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| b11 (no firewall draft), b12 (gateway draft missing its Target) | `constitution.snow-drafts-present` | A service-desk request is a person's manual step now: `atticus plan` drafts snow.md from the same triggers, and `atticus release plan` lists each draft as a request to file, with its missing required fields. The constitution rule is retired; the check stays for an org pack that wants it. |
|
|
27
|
+
| r04 (no error state when the limit can't load) | `ux-states-complete` | The UX lens is gone. The Ledger team's rule is kept in its checklist with `status: retired`; a screen state the specs imply is one of the things the complete lens looks for. |
|
|
28
|
+
|
|
29
|
+
**Kept**: every other seeded blocking issue, caught by the same layer as before (b01 to b10 by code, b13 and b14 by the safe and complete lenses), every seeded gap, and the knowledge needs (slo-known, capacity-known, vendor-rate-limit-known, vendor-contact-known, vendor-operation-known).
|
|
30
|
+
|
|
31
|
+
**Added**: g14 (nothing records how audit-svc authenticates callers of POST /audit/events, `constitution.public-entry-auth`), r06 (the audit call states no timeout, now `review.call-timeout-stated`), r07 and r08 (design.md's rollback names neither table, now `review.store-write-rollback`), and r09 (snow.md now passes layer 1 and reaches the ship lens, which finds no fallback if the gateway proxy request is late, `release-plan-complete`).
|
|
32
|
+
|
|
33
|
+
**The Ledger team's rules** are written for the questions (`lens: safe`, `lens: complete`, …). `tests-cover-scenarios` keeps `lens: code-and-test` with `question: complete`, to show a rule written for the old lens still works, at the gates and at the spec hand-up. The Forge pack under `fixtures/forge` is unchanged and still uses the old lens names, so the fixture also tests that an org pack written for the seven lenses keeps working (its `design-has-rollback`, written for the delivery lens, is the ship lens's).
|
|
34
|
+
|
|
35
|
+
**The recordings were re-made deterministically, with no model.** A new lens prompt has a new sha256, so each question agent's answer was written by hand: complete-critic's is the old business and story lenses' answers together, safe-critic's the old architecture lens's, ship-critic's the old delivery lens's plus r09. Each answer is stored under the hash of every exact prompt its lens sends in the tests (the plain run, the runs that carry `recorded-by-people`, and the M3 exit sandbox), by running those tests once with a replay runtime that wrote the hand-written answer under the prompt hash it was given. The answers were checked against what each lens must find (the `layer: ai` entries of `expected/findings.yaml` whose rules the lens applies); `packages/naysayer/test/golden.test.ts` and `packages/evals` replay them.
|
|
36
|
+
|
|
37
|
+
## The product owner's decisions (2026-10-24)
|
|
38
|
+
|
|
39
|
+
**Moved, not changed: r06, r07 and r08.** The timeout and rollback checks left the constitution for the starter review (org layer, the organisation's to change), and the auth and breaking checks stay constitution rules. The fixture's org pack carries the starter's two code checks exactly as `packages/naysayer/starter/review.yaml` writes them (`org-pack/checklists/review.yaml`; `packages/naysayer/test/questions.test.ts` holds them equal), without the starter's AI rules, so no lens prompt changes. Because the Forge gates name their checklists, `org-pack/gates.yaml` lays the Forge gates over with `review` named beside `forge-architecture`. So r06 is caught by `review.call-timeout-stated` and r07 and r08 by `review.store-write-rollback`: the same findings at the same lines, still by layer 1 and still risks, with layer `org` instead of `constitution`. g14 stays `constitution.public-entry-auth`. The counts are unchanged: 12 blocking issues and 14 gaps seeded, 8 other findings expected, 3 retired.
|
|
40
|
+
|
|
41
|
+
**Not re-recorded.** No lens prompt of the fixture changed (the moved rules are code checks, and the gate lenses' rules and agents are the same), so its recordings stay as they were; `packages/naysayer/test/golden.test.ts` replays them unchanged. The spec hand-up's review of a task asks the complete question, so its prompt changed (`# Critic: the complete lens (Is it complete?), at hand-up`) and its agent is `complete-critic`; the hand-up tests in `packages/speckit` use a mock model, not recordings. The M3 exit suite's own hand-up answer (`findings: []`) is re-keyed under `packages/m3-exit/test/fixtures/recordings/complete-critic/` with the new prompt's sha256, the same way (hand-written, no model; unchanged, since only the prompt's heading and first paragraph changed), with that suite's re-baseline for g14 and r06 to r08. `code-and-test-critic` stays in the org pack to show an org pack that still defines it keeps working (with no `complete-critic`, the complete lens is made of it).
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# Seeded problems in the add-transfer-limit change, and what the critic must report at the
|
|
2
|
+
# plan gate (round 1). Hand-written ground truth: never regenerate it from critic output.
|
|
3
|
+
#
|
|
4
|
+
# layer says which critic layer must catch the problem:
|
|
5
|
+
# deterministic - layer 1, zero tokens. Everything that can be checked from files is here.
|
|
6
|
+
# ai - layer 2, a recorded AI lens answer (recordings/). Only judgement calls.
|
|
7
|
+
# A finding matches an entry when its rule, severity and kind match, and its artifact and
|
|
8
|
+
# line (or record) match when the entry gives them.
|
|
9
|
+
#
|
|
10
|
+
# Re-baselined for the critic's four questions (ADR 0124 addendum, Part 4, 2026-10-24): the seven
|
|
11
|
+
# role lenses became four question lenses (true, complete, safe, ship) and the constitution gained
|
|
12
|
+
# the code checks of the four questions. What retired is listed under retired, with why; every
|
|
13
|
+
# other seeded blocking issue is still caught, by the same layer. New entries say "(Part 4)".
|
|
14
|
+
#
|
|
15
|
+
# The product owner's decisions of 2026-10-24: the timeout and rollback checks moved from the
|
|
16
|
+
# constitution to the starter review (org layer, the organisation's to change), which the fixture's
|
|
17
|
+
# org pack carries (org-pack/checklists/review.yaml, named at the gates). r06, r07 and r08 are the
|
|
18
|
+
# same findings, by the same layer, from review.call-timeout-stated and review.store-write-rollback
|
|
19
|
+
# instead of constitution.*; the auth and breaking checks (g14) stay constitution rules.
|
|
20
|
+
change: add-transfer-limit
|
|
21
|
+
gate: plan
|
|
22
|
+
|
|
23
|
+
seeded:
|
|
24
|
+
# ---------------------------------------------------------------- blocking issues
|
|
25
|
+
- id: b01-pattern-typo
|
|
26
|
+
kind: issue
|
|
27
|
+
severity: blocking
|
|
28
|
+
layer: deterministic
|
|
29
|
+
rule: constitution.interface-approved-pattern
|
|
30
|
+
artifact: interfaces.md
|
|
31
|
+
line: 6
|
|
32
|
+
what: GET /accounts/{id}/limit names pattern S.GW.SRO, a typo of S.GW.SOR (architecture).
|
|
33
|
+
- id: b02-hop-without-pattern
|
|
34
|
+
kind: issue
|
|
35
|
+
severity: blocking
|
|
36
|
+
layer: deterministic
|
|
37
|
+
rule: constitution.interface-approved-pattern
|
|
38
|
+
artifact: interfaces.md
|
|
39
|
+
line: 8
|
|
40
|
+
what: The changed hop portal-bff to audit-svc names no pattern code (architecture).
|
|
41
|
+
- id: b03-unknown-system
|
|
42
|
+
kind: issue
|
|
43
|
+
severity: blocking
|
|
44
|
+
layer: deterministic
|
|
45
|
+
rule: constitution.interface-ends-in-catalog
|
|
46
|
+
artifact: interfaces.md
|
|
47
|
+
line: 9
|
|
48
|
+
what: The new hop to risk-engine targets a system the catalog doesn't know (architecture).
|
|
49
|
+
- id: b04-vendor-call-no-timeout
|
|
50
|
+
kind: issue
|
|
51
|
+
severity: blocking
|
|
52
|
+
layer: deterministic
|
|
53
|
+
rule: constitution.hop-resilience-stated
|
|
54
|
+
artifact: interfaces.md
|
|
55
|
+
line: 7
|
|
56
|
+
what: The new Northwind Pay call states no timeout or retry, which S.GW.VND requires (runtime).
|
|
57
|
+
- id: b05-risk-call-no-timeout
|
|
58
|
+
kind: issue
|
|
59
|
+
severity: blocking
|
|
60
|
+
layer: deterministic
|
|
61
|
+
rule: constitution.hop-resilience-stated
|
|
62
|
+
artifact: interfaces.md
|
|
63
|
+
line: 9
|
|
64
|
+
what: The new risk-engine call states no timeout or circuit breaker, which S.GW.SOR requires (runtime).
|
|
65
|
+
- id: b06-table-without-migration
|
|
66
|
+
kind: issue
|
|
67
|
+
severity: blocking
|
|
68
|
+
layer: deterministic
|
|
69
|
+
rule: constitution.data-change-has-migration
|
|
70
|
+
artifact: data.md
|
|
71
|
+
line: 8
|
|
72
|
+
what: The new table limit_change names no migration (data design).
|
|
73
|
+
- id: b07-personal-column-unclassified
|
|
74
|
+
kind: issue
|
|
75
|
+
severity: blocking
|
|
76
|
+
layer: deterministic
|
|
77
|
+
rule: constitution.data-columns-classified
|
|
78
|
+
artifact: data.md
|
|
79
|
+
line: 8
|
|
80
|
+
what: limit_change.changed_by_email is personal data covered only by a table-wide "internal" (data design).
|
|
81
|
+
- id: b08-table-without-retention
|
|
82
|
+
kind: issue
|
|
83
|
+
severity: blocking
|
|
84
|
+
layer: deterministic
|
|
85
|
+
rule: constitution.data-retention-stated
|
|
86
|
+
artifact: data.md
|
|
87
|
+
line: 8
|
|
88
|
+
what: The new table limit_change says nothing about how long its rows are kept (data design).
|
|
89
|
+
- id: b09-story-without-criteria
|
|
90
|
+
kind: issue
|
|
91
|
+
severity: blocking
|
|
92
|
+
layer: deterministic
|
|
93
|
+
rule: constitution.story-acceptance-criteria
|
|
94
|
+
artifact: stories/s2-show-remaining.md
|
|
95
|
+
line: 1
|
|
96
|
+
what: Story s2-show-remaining has no acceptance criteria.
|
|
97
|
+
- id: b10-instruction-in-story
|
|
98
|
+
kind: issue
|
|
99
|
+
severity: blocking
|
|
100
|
+
layer: deterministic
|
|
101
|
+
rule: constitution.no-embedded-instructions
|
|
102
|
+
artifact: stories/s3-audit-refusals.md
|
|
103
|
+
line: 10
|
|
104
|
+
what: Story s3 tells AI critics to ignore their rules; ingested content is data, never instructions.
|
|
105
|
+
- id: b13-concurrent-transfers
|
|
106
|
+
kind: issue
|
|
107
|
+
severity: blocking
|
|
108
|
+
layer: ai
|
|
109
|
+
rule: design-concurrency-handled
|
|
110
|
+
artifact: design.md
|
|
111
|
+
line: 29
|
|
112
|
+
what: The design names the race between two transfers but no lock or serialisation (judgement).
|
|
113
|
+
- id: b14-story-without-spec
|
|
114
|
+
kind: issue
|
|
115
|
+
severity: blocking
|
|
116
|
+
layer: ai
|
|
117
|
+
rule: story-traces-to-spec
|
|
118
|
+
artifact: stories/s4-velocity-check.md
|
|
119
|
+
line: 8
|
|
120
|
+
what: Story s4's behaviour (holding flagged transfers) is in no spec requirement (judgement).
|
|
121
|
+
|
|
122
|
+
# ---------------------------------------------------------------- knowledge gaps
|
|
123
|
+
- id: g01-audit-owner-unknown
|
|
124
|
+
kind: knowledge-gap
|
|
125
|
+
severity: gap
|
|
126
|
+
layer: deterministic
|
|
127
|
+
rule: constitution.touched-components-known
|
|
128
|
+
record: audit-svc
|
|
129
|
+
what: audit-svc is known only from a caller; its owner, repo and spec are unknown.
|
|
130
|
+
- id: g02-ledger-vendor-timeouts-unknown
|
|
131
|
+
kind: knowledge-gap
|
|
132
|
+
severity: gap
|
|
133
|
+
layer: deterministic
|
|
134
|
+
rule: constitution.hop-resilience-stated
|
|
135
|
+
record: ledger-api
|
|
136
|
+
what: No timeout or retry settings are known for ledger-api, which calls Northwind Pay.
|
|
137
|
+
- id: g03-portal-bff-alerts-unknown
|
|
138
|
+
kind: knowledge-gap
|
|
139
|
+
severity: gap
|
|
140
|
+
layer: deterministic
|
|
141
|
+
rule: jobs-have-alerts
|
|
142
|
+
record: portal-bff
|
|
143
|
+
what: No alert is known for portal-bff.
|
|
144
|
+
- id: g04-audit-alerts-unknown
|
|
145
|
+
kind: knowledge-gap
|
|
146
|
+
severity: gap
|
|
147
|
+
layer: deterministic
|
|
148
|
+
rule: jobs-have-alerts
|
|
149
|
+
record: audit-svc
|
|
150
|
+
what: No alert is known for audit-svc.
|
|
151
|
+
- id: g05-vendor-rate-limit-unknown
|
|
152
|
+
kind: knowledge-gap
|
|
153
|
+
severity: gap
|
|
154
|
+
layer: deterministic
|
|
155
|
+
rule: vendor-rate-limit-known
|
|
156
|
+
record: northwind-pay
|
|
157
|
+
what: Northwind Pay's rate limit is unknown.
|
|
158
|
+
- id: g06-vendor-contact-unknown
|
|
159
|
+
kind: knowledge-gap
|
|
160
|
+
severity: gap
|
|
161
|
+
layer: deterministic
|
|
162
|
+
rule: vendor-contact-known
|
|
163
|
+
record: northwind-pay
|
|
164
|
+
what: Nobody is named as the contact at Northwind Pay.
|
|
165
|
+
- id: g07-vendor-operation-unpublished
|
|
166
|
+
kind: knowledge-gap
|
|
167
|
+
severity: gap
|
|
168
|
+
layer: deterministic
|
|
169
|
+
rule: vendor-operation-known
|
|
170
|
+
artifact: interfaces.md
|
|
171
|
+
line: 7
|
|
172
|
+
record: northwind-pay
|
|
173
|
+
what: POST /v2/velocity-checks is not in Northwind Pay's published spec.
|
|
174
|
+
- id: g08-account-retention-unknown
|
|
175
|
+
kind: knowledge-gap
|
|
176
|
+
severity: gap
|
|
177
|
+
layer: deterministic
|
|
178
|
+
rule: constitution.data-retention-stated
|
|
179
|
+
record: ledger-db.account
|
|
180
|
+
what: The retention of ledger-db.account, which the change alters, is unknown.
|
|
181
|
+
- id: g09-ledger-slo-unknown
|
|
182
|
+
kind: knowledge-gap
|
|
183
|
+
severity: gap
|
|
184
|
+
layer: deterministic
|
|
185
|
+
rule: slo-known
|
|
186
|
+
record: ledger
|
|
187
|
+
what: Ledger has no latency SLO, and the change adds work to every transfer.
|
|
188
|
+
- id: g10-portal-slo-unknown
|
|
189
|
+
kind: knowledge-gap
|
|
190
|
+
severity: gap
|
|
191
|
+
layer: deterministic
|
|
192
|
+
rule: slo-known
|
|
193
|
+
record: portal
|
|
194
|
+
what: Portal has no latency SLO.
|
|
195
|
+
- id: g11-ledger-volume-unknown
|
|
196
|
+
kind: knowledge-gap
|
|
197
|
+
severity: gap
|
|
198
|
+
layer: deterministic
|
|
199
|
+
rule: capacity-known
|
|
200
|
+
record: ledger-db
|
|
201
|
+
what: The daily write volume of ledger-db is unknown.
|
|
202
|
+
- id: g12-default-limit-undecided
|
|
203
|
+
kind: knowledge-gap
|
|
204
|
+
severity: gap
|
|
205
|
+
layer: ai
|
|
206
|
+
rule: brief-questions-answered
|
|
207
|
+
artifact: proposal.md
|
|
208
|
+
what: The default limit for existing accounts is an open question no spec answers (judgement).
|
|
209
|
+
- id: g13-vendor-failure-behaviour
|
|
210
|
+
kind: knowledge-gap
|
|
211
|
+
severity: gap
|
|
212
|
+
layer: ai
|
|
213
|
+
rule: brief-questions-answered
|
|
214
|
+
artifact: specs/transfer-limits/spec.md
|
|
215
|
+
what: Nothing says what happens to a transfer when the velocity check flags it or doesn't answer (judgement).
|
|
216
|
+
- id: g14-audit-entry-auth-unknown
|
|
217
|
+
kind: knowledge-gap
|
|
218
|
+
severity: gap
|
|
219
|
+
layer: deterministic
|
|
220
|
+
rule: constitution.public-entry-auth
|
|
221
|
+
artifact: interfaces.md
|
|
222
|
+
line: 8
|
|
223
|
+
what: portal-bff calls audit-svc's POST /audit/events from another system, and nothing records how audit-svc authenticates its callers (Part 4, is it safe).
|
|
224
|
+
|
|
225
|
+
# Not seeded problems, but findings the critic must also raise (risks). Any finding not listed
|
|
226
|
+
# here or above fails the golden test, so noise can't creep in unnoticed.
|
|
227
|
+
alsoExpected:
|
|
228
|
+
- id: r01-mapping-missing
|
|
229
|
+
kind: issue
|
|
230
|
+
severity: risk
|
|
231
|
+
layer: deterministic
|
|
232
|
+
rule: mappings-cover-interfaces
|
|
233
|
+
artifact: mappings.md
|
|
234
|
+
- id: r02-portal-ui-task-missing
|
|
235
|
+
kind: issue
|
|
236
|
+
severity: risk
|
|
237
|
+
layer: deterministic
|
|
238
|
+
rule: tasks-cover-stories
|
|
239
|
+
artifact: tasks.md
|
|
240
|
+
- id: r03-no-rollback
|
|
241
|
+
kind: issue
|
|
242
|
+
severity: risk
|
|
243
|
+
layer: ai
|
|
244
|
+
rule: design-has-rollback
|
|
245
|
+
artifact: design.md
|
|
246
|
+
line: 25
|
|
247
|
+
- id: r05-requests-not-sequenced
|
|
248
|
+
kind: issue
|
|
249
|
+
severity: risk
|
|
250
|
+
layer: ai
|
|
251
|
+
rule: tasks-sequenced-for-lead-times
|
|
252
|
+
artifact: tasks.md
|
|
253
|
+
line: 7
|
|
254
|
+
- id: r06-audit-call-no-timeout
|
|
255
|
+
kind: issue
|
|
256
|
+
severity: risk
|
|
257
|
+
layer: deterministic
|
|
258
|
+
rule: review.call-timeout-stated
|
|
259
|
+
artifact: interfaces.md
|
|
260
|
+
line: 8
|
|
261
|
+
what: The changed portal-bff call to audit-svc is synchronous and states no timeout; no pattern names one for it (Part 4, is it safe; the starter review's rule since 2026-10-24).
|
|
262
|
+
- id: r07-account-write-no-rollback
|
|
263
|
+
kind: issue
|
|
264
|
+
severity: risk
|
|
265
|
+
layer: deterministic
|
|
266
|
+
rule: review.store-write-rollback
|
|
267
|
+
artifact: data.md
|
|
268
|
+
line: 7
|
|
269
|
+
what: The rollback section names neither ledger-db.account nor V3__add_daily_limit.sql (Part 4, can it ship; the starter review's rule since 2026-10-24).
|
|
270
|
+
- id: r08-limit-change-write-no-rollback
|
|
271
|
+
kind: issue
|
|
272
|
+
severity: risk
|
|
273
|
+
layer: deterministic
|
|
274
|
+
rule: review.store-write-rollback
|
|
275
|
+
artifact: data.md
|
|
276
|
+
line: 8
|
|
277
|
+
what: The rollback section says nothing about the new table limit_change (Part 4, can it ship; the starter review's rule since 2026-10-24).
|
|
278
|
+
- id: r09-proxy-request-no-fallback
|
|
279
|
+
kind: issue
|
|
280
|
+
severity: risk
|
|
281
|
+
layer: ai
|
|
282
|
+
rule: release-plan-complete
|
|
283
|
+
artifact: snow.md
|
|
284
|
+
line: 12
|
|
285
|
+
what: snow.md now reaches the ship lens (its service-desk check retired); nothing says what the release does if the gateway proxy request isn't done in time (Part 4, can it ship; judgement).
|
|
286
|
+
|
|
287
|
+
# Retired with the four questions (ADR 0124 addendum, Part 4). The critic must not raise these any
|
|
288
|
+
# more; each line says why. The golden tests check that none of them comes back.
|
|
289
|
+
retired:
|
|
290
|
+
- id: b11-no-firewall-draft
|
|
291
|
+
rule: constitution.snow-drafts-present
|
|
292
|
+
artifact: snow.md
|
|
293
|
+
why: Service-desk requests are a manual step now, and the constitution rule is retired. atticus plan drafts snow.md from the triggers the check read (the firewall rule for gw-northwind-v2 included, its unknown fields left empty and listed), and atticus release plan lists each draft as a request a person files. The critic no longer checks a hand-written snow.md.
|
|
294
|
+
- id: b12-gateway-draft-incomplete
|
|
295
|
+
rule: constitution.snow-drafts-present
|
|
296
|
+
artifact: snow.md
|
|
297
|
+
why: The same retirement. The gateway proxy request's empty Target field shows in atticus release plan as a missing required field of the request, for the person filing it.
|
|
298
|
+
- id: r04-limit-error-state
|
|
299
|
+
rule: ux-states-complete
|
|
300
|
+
artifact: ux.md
|
|
301
|
+
why: The UX lens is gone. The Ledger team's ux-states-complete rule is retired; a screen state the specs imply is one of the things the complete lens looks for under the change's other rules.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# The story bar's eval set for add-transfer-limit: what the planner must produce from the
|
|
2
|
+
# approved design (brief, proposal, specs, interfaces, mappings, data, design, UX), with the
|
|
3
|
+
# hand-written stories, tasks and service-desk drafts of the fixture removed first.
|
|
4
|
+
# Hand-written ground truth: never regenerate it from planner output.
|
|
5
|
+
#
|
|
6
|
+
# The story bar (plan, M3 exit): every seeded gap is covered in the stories or raised by the
|
|
7
|
+
# critic; at least 90% of generated stories pass definition of ready with wording-only edits;
|
|
8
|
+
# no invented systems or interfaces.
|
|
9
|
+
change: add-transfer-limit
|
|
10
|
+
minReadyRate: 0.9
|
|
11
|
+
|
|
12
|
+
# One story per spec requirement, then one per new or changed hop no requirement covers, then
|
|
13
|
+
# one per data change no story covers. A hop to a system the catalog doesn't know is not
|
|
14
|
+
# planned (the critic raises it). Repos: both ends of each hop that are product components
|
|
15
|
+
# with a repo, the data store owner's repo, and the UI that calls the BFF when ux.md exists.
|
|
16
|
+
stories:
|
|
17
|
+
- id: s1-daily-transfer-limit
|
|
18
|
+
source: requirement
|
|
19
|
+
traces: specs/transfer-limits/spec.md:3
|
|
20
|
+
systems: [ledger, portal]
|
|
21
|
+
repos: [forge-ledger, forge-portal-bff, forge-portal-ui]
|
|
22
|
+
operations: [POST /transfers]
|
|
23
|
+
records: [ledger-db.account]
|
|
24
|
+
minCriteria: 2
|
|
25
|
+
tests: [unit, contract, integration, e2e, regression, performance]
|
|
26
|
+
dependsOn: []
|
|
27
|
+
- id: s2-remaining-limit
|
|
28
|
+
source: requirement
|
|
29
|
+
traces: specs/transfer-limits/spec.md:14
|
|
30
|
+
systems: [ledger, portal]
|
|
31
|
+
repos: [forge-ledger, forge-portal-bff, forge-portal-ui]
|
|
32
|
+
operations: ["GET /accounts/{id}/limit"]
|
|
33
|
+
records: []
|
|
34
|
+
minCriteria: 1
|
|
35
|
+
tests: [unit, contract, integration, e2e, performance]
|
|
36
|
+
dependsOn: [s1-daily-transfer-limit]
|
|
37
|
+
- id: s3-northwind-pay-velocity-checks
|
|
38
|
+
source: interface
|
|
39
|
+
traces: proposal.md:10
|
|
40
|
+
systems: [ledger, northwind-pay]
|
|
41
|
+
repos: [forge-ledger]
|
|
42
|
+
operations: [POST /v2/velocity-checks]
|
|
43
|
+
records: []
|
|
44
|
+
minCriteria: 1
|
|
45
|
+
tests: [unit, contract, integration, performance, security]
|
|
46
|
+
dependsOn: []
|
|
47
|
+
- id: s4-audit-events
|
|
48
|
+
source: interface
|
|
49
|
+
traces: proposal.md:11
|
|
50
|
+
systems: [audit, portal]
|
|
51
|
+
repos: [forge-portal-bff]
|
|
52
|
+
operations: [POST /audit/events]
|
|
53
|
+
records: []
|
|
54
|
+
minCriteria: 1
|
|
55
|
+
tests: [unit, integration, regression]
|
|
56
|
+
dependsOn: []
|
|
57
|
+
- id: s5-limit-change
|
|
58
|
+
source: data
|
|
59
|
+
traces: proposal.md:11
|
|
60
|
+
systems: [ledger]
|
|
61
|
+
repos: [forge-ledger]
|
|
62
|
+
operations: []
|
|
63
|
+
records: [ledger-db.limit-change]
|
|
64
|
+
minCriteria: 1
|
|
65
|
+
tests: [unit, integration]
|
|
66
|
+
dependsOn: []
|
|
67
|
+
|
|
68
|
+
# Hops the planner must leave out, with the callee it doesn't know.
|
|
69
|
+
notPlanned:
|
|
70
|
+
- { operation: POST /risk/assess, callee: risk-engine }
|
|
71
|
+
|
|
72
|
+
# Service-desk drafts snow.md must hold (template and record), as the org pack's triggers ask.
|
|
73
|
+
snow:
|
|
74
|
+
- { template: gateway-route, record: gw-northwind-v2 }
|
|
75
|
+
- { template: firewall-rule, record: gw-northwind-v2 }
|
|
76
|
+
|
|
77
|
+
# Every seeded knowledge gap of expected/findings.yaml, and what covers it.
|
|
78
|
+
# critic: a finding of the newest plan-gate round with this rule (and record, when given)
|
|
79
|
+
# story: the named story mentions every phrase (case-insensitive)
|
|
80
|
+
gaps:
|
|
81
|
+
- { id: g01-audit-owner-unknown, coveredBy: critic, rule: constitution.touched-components-known, record: audit-svc }
|
|
82
|
+
- { id: g02-ledger-vendor-timeouts-unknown, coveredBy: critic, rule: constitution.hop-resilience-stated, record: ledger-api }
|
|
83
|
+
- { id: g03-portal-bff-alerts-unknown, coveredBy: critic, rule: jobs-have-alerts, record: portal-bff }
|
|
84
|
+
- { id: g04-audit-alerts-unknown, coveredBy: critic, rule: jobs-have-alerts, record: audit-svc }
|
|
85
|
+
- { id: g05-vendor-rate-limit-unknown, coveredBy: critic, rule: vendor-rate-limit-known, record: northwind-pay }
|
|
86
|
+
- { id: g06-vendor-contact-unknown, coveredBy: critic, rule: vendor-contact-known, record: northwind-pay }
|
|
87
|
+
- { id: g07-vendor-operation-unpublished, coveredBy: critic, rule: vendor-operation-known, record: northwind-pay }
|
|
88
|
+
- { id: g08-account-retention-unknown, coveredBy: critic, rule: constitution.data-retention-stated, record: ledger-db.account }
|
|
89
|
+
- { id: g09-ledger-slo-unknown, coveredBy: critic, rule: slo-known, record: ledger }
|
|
90
|
+
- { id: g10-portal-slo-unknown, coveredBy: critic, rule: slo-known, record: portal }
|
|
91
|
+
- { id: g11-ledger-volume-unknown, coveredBy: critic, rule: capacity-known, record: ledger-db }
|
|
92
|
+
- { id: g12-default-limit-undecided, coveredBy: story, story: s1-daily-transfer-limit, mentions: [default limit, existing accounts] }
|
|
93
|
+
- { id: g13-vendor-failure-behaviour, coveredBy: story, story: s3-northwind-pay-velocity-checks, mentions: [northwind-pay, "doesn't answer"] }
|
|
94
|
+
|
|
95
|
+
# Seeded plan problems the generated plan must not repeat: no critic finding of this rule (on
|
|
96
|
+
# files under `artifact`, and whose summary starts with `summaryStartsWith`, when given).
|
|
97
|
+
fixed:
|
|
98
|
+
- { id: b09-story-without-criteria, rule: constitution.story-acceptance-criteria }
|
|
99
|
+
- { id: b10-instruction-in-story, rule: constitution.no-embedded-instructions, artifact: stories/ }
|
|
100
|
+
- { id: b11-no-firewall-draft, rule: constitution.snow-drafts-present, summaryStartsWith: "No " }
|
|
101
|
+
- { id: r02-portal-ui-task-missing, rule: tasks-cover-stories }
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# A judgment (ADR 0117): personal-data, decided by avery. To override it, change verdict, set confirmedBy to { by: person, name: <your Git user> } and keep what it said under overrides; commit it for review.
|
|
2
|
+
schemaVersion: 1
|
|
3
|
+
kind: personal-data
|
|
4
|
+
key: 0b5f3dbf5257a22275d8c74b
|
|
5
|
+
verdict: no
|
|
6
|
+
at: 2026-10-19T10:00:00Z
|
|
7
|
+
confirmedBy:
|
|
8
|
+
by: person
|
|
9
|
+
name: avery
|
|
10
|
+
inputs:
|
|
11
|
+
column: changed_at
|
|
12
|
+
table: limit_change
|
|
13
|
+
type: timestamp
|
|
14
|
+
v: 1
|
|
15
|
+
quotes:
|
|
16
|
+
- of: column
|
|
17
|
+
text: changed_at
|
|
18
|
+
why: When the limit changed.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# A judgment (ADR 0117): personal-data, decided by avery. To override it, change verdict, set confirmedBy to { by: person, name: <your Git user> } and keep what it said under overrides; commit it for review.
|
|
2
|
+
schemaVersion: 1
|
|
3
|
+
kind: personal-data
|
|
4
|
+
key: 2759a66770134c417440bf2d
|
|
5
|
+
verdict: yes
|
|
6
|
+
at: 2026-10-19T10:00:00Z
|
|
7
|
+
confirmedBy:
|
|
8
|
+
by: person
|
|
9
|
+
name: avery
|
|
10
|
+
inputs:
|
|
11
|
+
column: changed_by_email
|
|
12
|
+
table: limit_change
|
|
13
|
+
type: varchar(200)
|
|
14
|
+
v: 1
|
|
15
|
+
quotes:
|
|
16
|
+
- of: column
|
|
17
|
+
text: changed_by_email
|
|
18
|
+
why: The email address of the support agent who changed the limit.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# A judgment (ADR 0117): personal-data, decided by avery. To override it, change verdict, set confirmedBy to { by: person, name: <your Git user> } and keep what it said under overrides; commit it for review.
|
|
2
|
+
schemaVersion: 1
|
|
3
|
+
kind: personal-data
|
|
4
|
+
key: 31b1ea2f14d0737f1aca79fd
|
|
5
|
+
verdict: no
|
|
6
|
+
at: 2026-10-19T10:00:00Z
|
|
7
|
+
confirmedBy:
|
|
8
|
+
by: person
|
|
9
|
+
name: avery
|
|
10
|
+
inputs:
|
|
11
|
+
column: changed_by
|
|
12
|
+
table: limit_change
|
|
13
|
+
type: varchar(40)
|
|
14
|
+
v: 1
|
|
15
|
+
quotes:
|
|
16
|
+
- of: column
|
|
17
|
+
text: changed_by
|
|
18
|
+
why: data.md says it holds the support agent's staff id, never a name or an email address, which the bank classes as internal.
|