@maycombhq/atticus 0.0.0-stage → 2.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. package/LICENSE +177 -0
  2. package/README.md +17 -2
  3. package/THIRD-PARTY-LICENSES.txt +2607 -0
  4. package/dist/bin.js +47 -0
  5. package/dist/chunk-23VFQHFQ.js +827 -0
  6. package/dist/chunk-26DBAGOP.js +315 -0
  7. package/dist/chunk-27EDZN52.js +115 -0
  8. package/dist/chunk-2K2ZEJVR.js +252 -0
  9. package/dist/chunk-3DDJLI7N.js +1081 -0
  10. package/dist/chunk-3G4YI4ZU.js +16 -0
  11. package/dist/chunk-3LU6YCSQ.js +3507 -0
  12. package/dist/chunk-3WU7LVTL.js +203 -0
  13. package/dist/chunk-4AYZQ3SY.js +285 -0
  14. package/dist/chunk-4ONORLK5.js +234 -0
  15. package/dist/chunk-4Q3NN7VF.js +32 -0
  16. package/dist/chunk-4SKZDI62.js +22 -0
  17. package/dist/chunk-4URR24DD.js +189 -0
  18. package/dist/chunk-4UZJOQYK.js +70 -0
  19. package/dist/chunk-4Y4FY34K.js +34 -0
  20. package/dist/chunk-4YWRU7JK.js +80 -0
  21. package/dist/chunk-52WCHTVZ.js +41 -0
  22. package/dist/chunk-55TBYJF2.js +36 -0
  23. package/dist/chunk-5ACUW753.js +240 -0
  24. package/dist/chunk-5BJFMAQU.js +32 -0
  25. package/dist/chunk-5ICB2BXH.js +33 -0
  26. package/dist/chunk-5NZSJ5ZG.js +60 -0
  27. package/dist/chunk-5P5BGG5L.js +307 -0
  28. package/dist/chunk-5RUMHLIS.js +104 -0
  29. package/dist/chunk-5TY4DTHQ.js +242 -0
  30. package/dist/chunk-5V5BJACL.js +2929 -0
  31. package/dist/chunk-6E2GJANQ.js +52 -0
  32. package/dist/chunk-6N2GUZMZ.js +471 -0
  33. package/dist/chunk-6RGIM2ZH.js +2069 -0
  34. package/dist/chunk-6V3DTQWK.js +391 -0
  35. package/dist/chunk-76WKMA4J.js +14 -0
  36. package/dist/chunk-77RSRG3A.js +104 -0
  37. package/dist/chunk-7A7IG7OA.js +2007 -0
  38. package/dist/chunk-7EFILTCI.js +67 -0
  39. package/dist/chunk-7HQOZALR.js +180 -0
  40. package/dist/chunk-7HWXYP4H.js +1217 -0
  41. package/dist/chunk-7J7UY46S.js +688 -0
  42. package/dist/chunk-7KXYMC2P.js +38 -0
  43. package/dist/chunk-7LCQ7JAM.js +55 -0
  44. package/dist/chunk-7RGCQ4VZ.js +22 -0
  45. package/dist/chunk-7RUMD56V.js +26 -0
  46. package/dist/chunk-7S3XFWOU.js +251 -0
  47. package/dist/chunk-7SZPENUP.js +32 -0
  48. package/dist/chunk-7VFVQX5K.js +105 -0
  49. package/dist/chunk-ACWQDL6T.js +37 -0
  50. package/dist/chunk-ANCI3LFS.js +25 -0
  51. package/dist/chunk-ASKDCMW5.js +275 -0
  52. package/dist/chunk-ATNG5VOZ.js +122 -0
  53. package/dist/chunk-B3QOYE74.js +58 -0
  54. package/dist/chunk-B3UHYXHU.js +41 -0
  55. package/dist/chunk-BA5DTXHQ.js +250 -0
  56. package/dist/chunk-BKFGGJKA.js +2743 -0
  57. package/dist/chunk-BQNEHB5U.js +212 -0
  58. package/dist/chunk-BUWSOQLU.js +131 -0
  59. package/dist/chunk-BX52REMA.js +134 -0
  60. package/dist/chunk-BXBCMGIQ.js +82 -0
  61. package/dist/chunk-C2YGYTU6.js +408 -0
  62. package/dist/chunk-C5JFMAXX.js +102 -0
  63. package/dist/chunk-C75W7VXX.js +42 -0
  64. package/dist/chunk-CAN3EBE5.js +1726 -0
  65. package/dist/chunk-CE4S5ZY3.js +182 -0
  66. package/dist/chunk-CRQ73DIF.js +25 -0
  67. package/dist/chunk-CZI2ACNT.js +36 -0
  68. package/dist/chunk-D7MWYJZF.js +43 -0
  69. package/dist/chunk-DDAEAZEV.js +54 -0
  70. package/dist/chunk-DGKNOPSE.js +549 -0
  71. package/dist/chunk-DQNKG4HY.js +906 -0
  72. package/dist/chunk-DS3ZEJVN.js +22 -0
  73. package/dist/chunk-DYWTQXP4.js +108 -0
  74. package/dist/chunk-E25G46RW.js +54 -0
  75. package/dist/chunk-EADP3PEN.js +450 -0
  76. package/dist/chunk-EAQFRD2B.js +430 -0
  77. package/dist/chunk-EATSD7YD.js +41 -0
  78. package/dist/chunk-EBWIOODZ.js +339 -0
  79. package/dist/chunk-EHUYLNLC.js +282 -0
  80. package/dist/chunk-EI4KQYJ3.js +1496 -0
  81. package/dist/chunk-EQOSXLK3.js +49 -0
  82. package/dist/chunk-EV4TEFOD.js +16667 -0
  83. package/dist/chunk-EW7MRMD5.js +312 -0
  84. package/dist/chunk-EZSZFI54.js +531 -0
  85. package/dist/chunk-FMRMTI7W.js +1142 -0
  86. package/dist/chunk-FOQXYMOR.js +46 -0
  87. package/dist/chunk-G3PBLW4K.js +246 -0
  88. package/dist/chunk-G7WZH54P.js +221 -0
  89. package/dist/chunk-GG6HIU74.js +211 -0
  90. package/dist/chunk-GMJXC5AL.js +27809 -0
  91. package/dist/chunk-GPLFYLGH.js +130 -0
  92. package/dist/chunk-GVFUEGGM.js +19943 -0
  93. package/dist/chunk-GWSWS264.js +130 -0
  94. package/dist/chunk-H4VJO3M2.js +229 -0
  95. package/dist/chunk-HGQZTUAC.js +415 -0
  96. package/dist/chunk-HOUUBE74.js +166 -0
  97. package/dist/chunk-HQMCHHY5.js +155 -0
  98. package/dist/chunk-HR4DVO6X.js +374 -0
  99. package/dist/chunk-HZYFLEWO.js +39 -0
  100. package/dist/chunk-IA2RKC6I.js +279 -0
  101. package/dist/chunk-IILZ7J3L.js +5548 -0
  102. package/dist/chunk-IRW64JFF.js +247 -0
  103. package/dist/chunk-IVHN2VYG.js +1526 -0
  104. package/dist/chunk-IWZPGIGT.js +856 -0
  105. package/dist/chunk-IY4PHPHT.js +15 -0
  106. package/dist/chunk-J27QGXO4.js +1247 -0
  107. package/dist/chunk-JBSD57N7.js +324 -0
  108. package/dist/chunk-JEUXCIRD.js +120 -0
  109. package/dist/chunk-JMOLB347.js +46388 -0
  110. package/dist/chunk-JQX6BSE4.js +130 -0
  111. package/dist/chunk-JRPQX2EK.js +376 -0
  112. package/dist/chunk-JUQHYTXN.js +45 -0
  113. package/dist/chunk-JUZ75OG4.js +344 -0
  114. package/dist/chunk-KIWEBM6G.js +378 -0
  115. package/dist/chunk-KLKENMWQ.js +891 -0
  116. package/dist/chunk-KQDZXGNR.js +14 -0
  117. package/dist/chunk-KQK6SQPE.js +48 -0
  118. package/dist/chunk-KQRYW7OS.js +4108 -0
  119. package/dist/chunk-KU4T2CXJ.js +116 -0
  120. package/dist/chunk-KXZR2BLL.js +53 -0
  121. package/dist/chunk-L7I5PKGD.js +915 -0
  122. package/dist/chunk-LDIARP6F.js +31 -0
  123. package/dist/chunk-LEHZTKB3.js +34 -0
  124. package/dist/chunk-LS3WR2RF.js +1071 -0
  125. package/dist/chunk-LUPW4WLK.js +526 -0
  126. package/dist/chunk-LVBPY2M6.js +406 -0
  127. package/dist/chunk-LZWVK4YY.js +169 -0
  128. package/dist/chunk-MCWWMMLN.js +48 -0
  129. package/dist/chunk-MKC7P5LD.js +32 -0
  130. package/dist/chunk-MKFYQQ5Q.js +36 -0
  131. package/dist/chunk-MKIULIUQ.js +273 -0
  132. package/dist/chunk-MMB2OHUY.js +263 -0
  133. package/dist/chunk-MQNBEO3N.js +2610 -0
  134. package/dist/chunk-MSL3CLHX.js +545 -0
  135. package/dist/chunk-MV4637YA.js +174 -0
  136. package/dist/chunk-MYKQVS5W.js +296 -0
  137. package/dist/chunk-MYOW3RPC.js +143 -0
  138. package/dist/chunk-NBGBMRIS.js +25 -0
  139. package/dist/chunk-NBQO75XT.js +287 -0
  140. package/dist/chunk-NCR24CPV.js +41 -0
  141. package/dist/chunk-NDW4ROST.js +38 -0
  142. package/dist/chunk-NELU7LSL.js +3208 -0
  143. package/dist/chunk-NG5R2WIY.js +2919 -0
  144. package/dist/chunk-NH5QH3WS.js +119 -0
  145. package/dist/chunk-NIYB5K5B.js +583 -0
  146. package/dist/chunk-NR5T46ZY.js +49 -0
  147. package/dist/chunk-NX6QEEOA.js +163 -0
  148. package/dist/chunk-O6ILVBYB.js +18 -0
  149. package/dist/chunk-OFWYZH6B.js +230 -0
  150. package/dist/chunk-OHXTB6CO.js +50 -0
  151. package/dist/chunk-OJN7WME4.js +34 -0
  152. package/dist/chunk-OR5VRULZ.js +226 -0
  153. package/dist/chunk-ORZSD2KD.js +55 -0
  154. package/dist/chunk-OXVVRJDQ.js +66 -0
  155. package/dist/chunk-PQW7PYUR.js +2522 -0
  156. package/dist/chunk-Q32Y5T2U.js +27 -0
  157. package/dist/chunk-QWHTTA2X.js +130 -0
  158. package/dist/chunk-R3RVFCJ2.js +76 -0
  159. package/dist/chunk-R3VFLYZZ.js +400 -0
  160. package/dist/chunk-R6RY4Q5T.js +51 -0
  161. package/dist/chunk-R6UTCLH5.js +166 -0
  162. package/dist/chunk-RB2VSED2.js +231 -0
  163. package/dist/chunk-REWZE2XI.js +53 -0
  164. package/dist/chunk-RIEFYHXI.js +162 -0
  165. package/dist/chunk-RJDP642F.js +101 -0
  166. package/dist/chunk-RWMSJP7H.js +279 -0
  167. package/dist/chunk-S2FDPN32.js +41 -0
  168. package/dist/chunk-S5LSDXV4.js +40 -0
  169. package/dist/chunk-S7ZWCMDO.js +192 -0
  170. package/dist/chunk-SG5KY4VB.js +69 -0
  171. package/dist/chunk-SH7AZZDA.js +69 -0
  172. package/dist/chunk-SILY6ZEZ.js +104 -0
  173. package/dist/chunk-SINJKQSI.js +34 -0
  174. package/dist/chunk-SIUDWWKS.js +47 -0
  175. package/dist/chunk-SKMHS4CL.js +766 -0
  176. package/dist/chunk-SNHOLLGN.js +280 -0
  177. package/dist/chunk-SUQZGPVG.js +119 -0
  178. package/dist/chunk-T6ESD5KM.js +6115 -0
  179. package/dist/chunk-TC3KTG33.js +221 -0
  180. package/dist/chunk-TCADP67G.js +101 -0
  181. package/dist/chunk-TEBBD4XH.js +7923 -0
  182. package/dist/chunk-TGEOLIAK.js +149 -0
  183. package/dist/chunk-TQYBXDVH.js +133 -0
  184. package/dist/chunk-TV45EUGM.js +51 -0
  185. package/dist/chunk-TZXHUDI6.js +233 -0
  186. package/dist/chunk-U5PDQTLA.js +50 -0
  187. package/dist/chunk-U6YKL7SI.js +334 -0
  188. package/dist/chunk-UABFFMWH.js +2078 -0
  189. package/dist/chunk-UFBKJOWB.js +325 -0
  190. package/dist/chunk-UFTQIK2J.js +43 -0
  191. package/dist/chunk-UNFCFJMF.js +95 -0
  192. package/dist/chunk-UTR67XU2.js +164 -0
  193. package/dist/chunk-V4XKYGLK.js +405 -0
  194. package/dist/chunk-VOGCSYOI.js +16 -0
  195. package/dist/chunk-VYNZED7B.js +53 -0
  196. package/dist/chunk-WCLAOKCH.js +540 -0
  197. package/dist/chunk-WFYHOXTB.js +29 -0
  198. package/dist/chunk-WGU6NIUV.js +113 -0
  199. package/dist/chunk-WIMOJMAK.js +3702 -0
  200. package/dist/chunk-WKXOEIOY.js +184 -0
  201. package/dist/chunk-WUE6HKIU.js +790 -0
  202. package/dist/chunk-WUP77GG2.js +56 -0
  203. package/dist/chunk-XF3DATVU.js +150 -0
  204. package/dist/chunk-XJAJQGXJ.js +18 -0
  205. package/dist/chunk-XKJRPVJO.js +3898 -0
  206. package/dist/chunk-XNRPCI23.js +3851 -0
  207. package/dist/chunk-XOVLGBKI.js +214 -0
  208. package/dist/chunk-XPJR74MA.js +562 -0
  209. package/dist/chunk-XPWSNKF3.js +5619 -0
  210. package/dist/chunk-XR5DD5DQ.js +104 -0
  211. package/dist/chunk-XZJE6WIT.js +706 -0
  212. package/dist/chunk-XZRON6IV.js +131 -0
  213. package/dist/chunk-Y5AYBGLB.js +368 -0
  214. package/dist/chunk-YLAM4HZH.js +95 -0
  215. package/dist/chunk-YVCOQ5TZ.js +47 -0
  216. package/dist/chunk-YWOMGMZB.js +94 -0
  217. package/dist/chunk-YWZDAZMA.js +18 -0
  218. package/dist/chunk-Z2EYRUOH.js +172 -0
  219. package/dist/chunk-Z46OXTBE.js +1611 -0
  220. package/dist/chunk-ZHWSL6SR.js +45 -0
  221. package/dist/chunk-ZJQUIG3A.js +87 -0
  222. package/dist/chunk-ZKUDS7JG.js +310 -0
  223. package/dist/chunk-ZTNS3L5Z.js +1019 -0
  224. package/dist/files.json +2024 -0
  225. package/dist/fixtures/forge/README.md +19 -0
  226. package/dist/fixtures/forge/expected/discrepancies.yaml +54 -0
  227. package/dist/fixtures/forge/expected/inputs.yaml +38 -0
  228. package/dist/fixtures/forge/expected/scan.yaml +342 -0
  229. package/dist/fixtures/forge/inputs/diagrams/forge-context.drawio +23 -0
  230. package/dist/fixtures/forge/inputs/partner-specs/northwind-pay-openapi.yaml +11 -0
  231. package/dist/fixtures/forge/inputs/tickets/ado-stories.json +4 -0
  232. package/dist/fixtures/forge/inputs/tickets/closed-service-requests.json +5 -0
  233. package/dist/fixtures/forge/inputs/wiki/integration-patterns.md +11 -0
  234. package/dist/fixtures/forge/inputs/wiki/ledger-solution-spec.md +9 -0
  235. package/dist/fixtures/forge/inputs/wiki/snow-firewall-request.md +4 -0
  236. package/dist/fixtures/forge/metarepo/judgments/reaches/84af5b6af24f7ca8c23013f3.yaml +17 -0
  237. package/dist/fixtures/forge/metarepo/judgments/reaches/c3917555edebddce8cecb647.yaml +17 -0
  238. package/dist/fixtures/forge/metarepo/judgments/reaches/c5fafd6601f8ca9e34e0bbd0.yaml +17 -0
  239. package/dist/fixtures/forge/metarepo/org-pack/agents/architecture-critic.yaml +9 -0
  240. package/dist/fixtures/forge/metarepo/org-pack/agents/story-writer.yaml +10 -0
  241. package/dist/fixtures/forge/metarepo/org-pack/checklists/architecture.yaml +115 -0
  242. package/dist/fixtures/forge/metarepo/org-pack/dialects/forge.yaml +111 -0
  243. package/dist/fixtures/forge/metarepo/org-pack/gates.yaml +22 -0
  244. package/dist/fixtures/forge/metarepo/org-pack/pack.yaml +11 -0
  245. package/dist/fixtures/forge/metarepo/org-pack/patterns/A.EB.PUB.yaml +12 -0
  246. package/dist/fixtures/forge/metarepo/org-pack/patterns/D.JDBC.yaml +12 -0
  247. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.DIR.BFF.yaml +12 -0
  248. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.SOR.yaml +13 -0
  249. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.VND.yaml +14 -0
  250. package/dist/fixtures/forge/metarepo/org-pack/process/change-templates/feature.md +37 -0
  251. package/dist/fixtures/forge/metarepo/org-pack/process/skills/add-forge-endpoint/SKILL.md +17 -0
  252. package/dist/fixtures/forge/metarepo/org-pack/process/snow/firewall-rule.yaml +14 -0
  253. package/dist/fixtures/forge/metarepo/org-pack/process/snow/gateway-route.yaml +13 -0
  254. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/profile.yaml +12 -0
  255. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/repos.manifest.yaml +44 -0
  256. package/dist/fixtures/forge/metarepo/org-pack/roles.yaml +14 -0
  257. package/dist/fixtures/forge/metarepo/org-pack/runtime.yaml +14 -0
  258. package/dist/fixtures/forge/metarepo/org-pack/sources.yaml +3 -0
  259. package/dist/fixtures/forge/repos/forge-events/topics/payments.initiated.yaml +4 -0
  260. package/dist/fixtures/forge/repos/forge-events/topics/transfers.completed.yaml +4 -0
  261. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/ledger-v1.xml +3 -0
  262. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/SpikeArrest.xml +3 -0
  263. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/VerifyOAuth.xml +4 -0
  264. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/proxies/default.xml +14 -0
  265. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/targets/ledger.xml +5 -0
  266. package/dist/fixtures/forge/repos/forge-infra/alerts/ledger-api.yaml +5 -0
  267. package/dist/fixtures/forge/repos/forge-infra/k8s/ledger-api.yaml +15 -0
  268. package/dist/fixtures/forge/repos/forge-infra/k8s/portal-bff.yaml +7 -0
  269. package/dist/fixtures/forge/repos/forge-infra/terraform/ledger-db.tf +9 -0
  270. package/dist/fixtures/forge/repos/forge-ledger/api/ledger-openapi.yaml +31 -0
  271. package/dist/fixtures/forge/repos/forge-ledger/forge.yaml +4 -0
  272. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEndpoints.java +13 -0
  273. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEvents.java +11 -0
  274. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/NorthwindClient.java +10 -0
  275. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/application.yml +3 -0
  276. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V1__create_account.sql +5 -0
  277. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V2__create_entry.sql +7 -0
  278. package/dist/fixtures/forge/repos/forge-portal-bff/pom.xml +1 -0
  279. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/AuditPublisher.java +12 -0
  280. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/BalanceController.java +16 -0
  281. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/LedgerClient.java +13 -0
  282. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/PaymentEvents.java +13 -0
  283. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/resources/application.yml +8 -0
  284. package/dist/fixtures/forge/repos/forge-portal-ui/package.json +1 -0
  285. package/dist/fixtures/forge/repos/forge-portal-ui/src/api/balance.ts +5 -0
  286. package/dist/fixtures/forge/repos/forge-reports-job/src/main/java/forge/reports/DailyEntriesJob.java +19 -0
  287. package/dist/fixtures/forge/repos/forge-reports-job/src/main/resources/application.yml +3 -0
  288. package/dist/fixtures/forge-change/README.md +41 -0
  289. package/dist/fixtures/forge-change/expected/findings.yaml +301 -0
  290. package/dist/fixtures/forge-change/expected/stories.yaml +101 -0
  291. package/dist/fixtures/forge-change/judgments/personal-data/0b5f3dbf5257a22275d8c74b.yaml +18 -0
  292. package/dist/fixtures/forge-change/judgments/personal-data/2759a66770134c417440bf2d.yaml +18 -0
  293. package/dist/fixtures/forge-change/judgments/personal-data/31b1ea2f14d0737f1aca79fd.yaml +18 -0
  294. package/dist/fixtures/forge-change/judgments/personal-data/49afd70c08228e65ad6ca1ed.yaml +18 -0
  295. package/dist/fixtures/forge-change/judgments/personal-data/761cabcb8a39f5e5866d2dd6.yaml +18 -0
  296. package/dist/fixtures/forge-change/judgments/personal-data/adae902b90cc8ffa0c765145.yaml +18 -0
  297. package/dist/fixtures/forge-change/judgments/personal-data/ba11bb933105ec9493e065dd.yaml +18 -0
  298. package/dist/fixtures/forge-change/judgments/personal-data/bdbcd1cdac3021c68063c3e7.yaml +18 -0
  299. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/brief.md +35 -0
  300. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/change.yaml +120 -0
  301. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/data.md +18 -0
  302. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/design.md +29 -0
  303. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/interfaces.md +17 -0
  304. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/mappings.md +26 -0
  305. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/proposal.md +35 -0
  306. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/snow.md +12 -0
  307. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/specs/transfer-limits/spec.md +19 -0
  308. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s1-refuse-over-limit.md +17 -0
  309. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s2-show-remaining.md +16 -0
  310. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s3-audit-refusals.md +18 -0
  311. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s4-velocity-check.md +16 -0
  312. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories.md +8 -0
  313. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/tasks.md +12 -0
  314. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/ux.md +7 -0
  315. package/dist/fixtures/forge-change/org-pack/agents/code-and-test-critic.yaml +13 -0
  316. package/dist/fixtures/forge-change/org-pack/agents/complete-critic.yaml +12 -0
  317. package/dist/fixtures/forge-change/org-pack/agents/safe-critic.yaml +12 -0
  318. package/dist/fixtures/forge-change/org-pack/agents/ship-critic.yaml +11 -0
  319. package/dist/fixtures/forge-change/org-pack/agents/true-critic.yaml +11 -0
  320. package/dist/fixtures/forge-change/org-pack/checklists/review.yaml +54 -0
  321. package/dist/fixtures/forge-change/org-pack/gates.yaml +25 -0
  322. package/dist/fixtures/forge-change/org-pack/teams/team-ledger/checklists/ledger-team.yaml +227 -0
  323. package/dist/fixtures/forge-change/recordings/complete-critic/2ad84f84bf39c1d5412697e69fe23034d6983ec45a00314bf0975e627589a3c5.json +12 -0
  324. package/dist/fixtures/forge-change/recordings/complete-critic/417c98d8e54a4387d0fd93441c49f44c2868958739070d855c1dce0c41e24db3.json +12 -0
  325. package/dist/fixtures/forge-change/recordings/complete-critic/50203ee22e9cb3ef047295edb6538fe7d5695e1e4b139f3c929013dc6ce47021.json +12 -0
  326. package/dist/fixtures/forge-change/recordings/complete-critic/89f18d67f5d9c325bf35e2a9e020f9ddb6ee13b8523315037f0905cc57c040b1.json +12 -0
  327. package/dist/fixtures/forge-change/recordings/complete-critic/b4097867d26ae8eadc8b9efa8cdd86897013358035f0b40086c299a59c4ba121.json +12 -0
  328. package/dist/fixtures/forge-change/recordings/safe-critic/302d06f49664dd67ad2e21ab9cf74c1b0f7d3f750709c6ed8eff2b70983274e2.json +12 -0
  329. package/dist/fixtures/forge-change/recordings/safe-critic/32f1049c9a5ab4a759543290db4644ec6e221cc45fdfdcf06193837c6a8ce0b9.json +12 -0
  330. package/dist/fixtures/forge-change/recordings/safe-critic/4e4a84bfc04b9f26ca4250319a879901ff7a1c081c71e46a117675fee05026b0.json +12 -0
  331. package/dist/fixtures/forge-change/recordings/safe-critic/604af0fcdd6df6b76208fa88305fdc15c37606c2a4d1ae816477e46ac8c2dd04.json +12 -0
  332. package/dist/fixtures/forge-change/recordings/safe-critic/f0bf50af11f14c50d07904f0dffe1c8c20fb0cd89770645a8824c1d30a443955.json +12 -0
  333. package/dist/fixtures/forge-change/recordings/ship-critic/350954b58833b2c04880c67db45a1b328b7fd541d9f0d943b63905b8875488a6.json +12 -0
  334. package/dist/fixtures/forge-change/recordings/ship-critic/4af95c6c96a206777cec9de1f9c2d8c55a36ddc9b8db2f81d6eb83217b835efa.json +12 -0
  335. package/dist/fixtures/forge-change/recordings/ship-critic/76c34522a49cf7587a4e5689a5030d384603fa780b8aba97d27815cbc829683e.json +12 -0
  336. package/dist/fixtures/forge-change/recordings/ship-critic/a3b2cd1ace48587e5994333db03b34c3a0f9dec4f1932f1730ddfb687f6918c8.json +12 -0
  337. package/dist/fixtures/forge-change/recordings/ship-critic/de288a4fa64d0fc20890f9a787080ce6eac5203b7b9b72d884df11e8cf111835.json +12 -0
  338. package/dist/fixtures/forge-change/recordings/story-writer/1ddb00eac2aaf91a5ec5d9dfd220116be9f75aec6546a4a3a3b050ed89af2864.json +12 -0
  339. package/dist/packages/assistant-kit/frameworks-kit/README.md +86 -0
  340. package/dist/packages/assistant-kit/frameworks-kit/checklist.md +11 -0
  341. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-lantern.yaml +56 -0
  342. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-platform.yaml +43 -0
  343. package/dist/packages/assistant-kit/frameworks-kit/prompts/write-framework-model.md +12 -0
  344. package/dist/packages/assistant-kit/kit/README.md +98 -0
  345. package/dist/packages/assistant-kit/kit/c2-reference.md +334 -0
  346. package/dist/packages/assistant-kit/kit/checklist.md +39 -0
  347. package/dist/packages/assistant-kit/kit/examples/house-http-client.yaml +102 -0
  348. package/dist/packages/assistant-kit/kit/examples/tide-apigee.yaml +56 -0
  349. package/dist/packages/assistant-kit/kit/examples/tide-apim.yaml +32 -0
  350. package/dist/packages/assistant-kit/kit/examples/tide-kong.yaml +44 -0
  351. package/dist/packages/assistant-kit/kit/prompts/write-dialect.md +34 -0
  352. package/dist/packages/assistant-kit/kit/worked-example.md +198 -0
  353. package/dist/packages/conformance/sample/README.md +4 -0
  354. package/dist/packages/conformance/sample/inputs/notes.md +3 -0
  355. package/dist/packages/conformance/sample/inputs/systems.csv +3 -0
  356. package/dist/packages/conformance/sample/repo/api/greeter.proto +6 -0
  357. package/dist/packages/conformance/sample/repo/api/openapi.yaml +10 -0
  358. package/dist/packages/conformance/sample/repo/api/schema.graphql +3 -0
  359. package/dist/packages/conformance/sample/repo/db/V1__create_greeting.sql +4 -0
  360. package/dist/packages/conformance/sample/repo/package.json +7 -0
  361. package/dist/packages/conformance/sample/repo/src/main/java/sample/HelloController.java +10 -0
  362. package/dist/packages/conformance/sample/repo/web/app.ts +4 -0
  363. package/dist/packages/evals/datasets/critic-lenses.yaml +62 -0
  364. package/dist/packages/evals/datasets/dialect-writer.yaml +14 -0
  365. package/dist/packages/evals/datasets/feature-namer.yaml +34 -0
  366. package/dist/packages/evals/datasets/glossary-definer.yaml +25 -0
  367. package/dist/packages/evals/datasets/story-writer.yaml +13 -0
  368. package/dist/packages/evals/datasets/template-writer.yaml +16 -0
  369. package/dist/packages/evals/datasets/test-writer.yaml +18 -0
  370. package/dist/packages/executors/reference/reference-executor.mjs +233 -0
  371. package/dist/packages/extractors/dialects/argocd.yaml +45 -0
  372. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AccountResource.java +47 -0
  373. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AuditClient.java +12 -0
  374. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/LedgerClient.java +17 -0
  375. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/LedgerClient.java +14 -0
  376. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/RatesClient.java +11 -0
  377. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/StatementController.java +36 -0
  378. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/resources/application.yml +7 -0
  379. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/java/forge/fraud/FraudScorer.java +27 -0
  380. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/resources/application.properties +4 -0
  381. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/api.tf +38 -0
  382. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/main.tf +95 -0
  383. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/terraform.tfvars +1 -0
  384. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/variables.tf +4 -0
  385. package/dist/packages/extractors/dialects/fixtures/terraform-azure/forge-azure-infra/main.tf +102 -0
  386. package/dist/packages/extractors/dialects/fixtures/terraform-gcp/forge-gcp-infra/main.tf +51 -0
  387. package/dist/packages/extractors/dialects/harness.yaml +101 -0
  388. package/dist/packages/extractors/dialects/jaxrs.yaml +155 -0
  389. package/dist/packages/extractors/dialects/micronaut.yaml +207 -0
  390. package/dist/packages/extractors/dialects/quarkus-reactive-messaging.yaml +158 -0
  391. package/dist/packages/extractors/dialects/tekton.yaml +71 -0
  392. package/dist/packages/extractors/dialects/terraform-aws.yaml +267 -0
  393. package/dist/packages/extractors/dialects/terraform-azure.yaml +212 -0
  394. package/dist/packages/extractors/dialects/terraform-gcp.yaml +109 -0
  395. package/dist/packages/extractors/grammars/README.md +11 -0
  396. package/dist/packages/extractors/grammars/tree-sitter-groovy.LICENSE +21 -0
  397. package/dist/packages/extractors/grammars/tree-sitter-groovy.wasm +0 -0
  398. package/dist/packages/extractors/grammars/vendored.json +11 -0
  399. package/dist/packages/learn/lessons/architect-diagrams-and-code.yaml +69 -0
  400. package/dist/packages/learn/lessons/business-analyst-story-bar.yaml +94 -0
  401. package/dist/packages/learn/lessons/delivery-lead-release-readiness.yaml +44 -0
  402. package/dist/packages/learn/lessons/designer-features-in-user-words.yaml +57 -0
  403. package/dist/packages/learn/lessons/developer-find-your-way.yaml +60 -0
  404. package/dist/packages/learn/lessons/everyone-first-hour.yaml +74 -0
  405. package/dist/packages/learn/lessons/platform-lead-coverage-and-defences.yaml +58 -0
  406. package/dist/packages/learn/lessons/product-owner-first-change.yaml +167 -0
  407. package/dist/packages/learn/lessons/qa-tests-and-trace.yaml +53 -0
  408. package/dist/packages/learn/lessons/team-lead-initiative.yaml +146 -0
  409. package/dist/packages/naysayer/constitution/constitution.yaml +305 -0
  410. package/dist/packages/naysayer/starter/review.yaml +256 -0
  411. package/dist/packages/sdk/npm/index.js +10097 -0
  412. package/dist/packages/speckit/rules/drift.yaml +78 -0
  413. package/dist/packages/taskrun/rules/conform.yaml +38 -0
  414. package/dist/packages/testgen/rules/trace.yaml +49 -0
  415. package/dist/packages/ui/dist/assets/elk-api-DDup23Us.js +2 -0
  416. package/dist/packages/ui/dist/assets/elk-worker.min--dAJroGl.js +6401 -0
  417. package/dist/packages/ui/dist/assets/elk-worker.min-DdYmS5kP.js +2 -0
  418. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff +0 -0
  419. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2 +0 -0
  420. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff +0 -0
  421. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2 +0 -0
  422. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2 +0 -0
  423. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff +0 -0
  424. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff +0 -0
  425. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2 +0 -0
  426. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2 +0 -0
  427. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff +0 -0
  428. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff +0 -0
  429. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2 +0 -0
  430. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff +0 -0
  431. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2 +0 -0
  432. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff +0 -0
  433. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2 +0 -0
  434. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff +0 -0
  435. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2 +0 -0
  436. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  437. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  438. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  439. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  440. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  441. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  442. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2 +0 -0
  443. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff +0 -0
  444. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff +0 -0
  445. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2 +0 -0
  446. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff +0 -0
  447. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2 +0 -0
  448. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2 +0 -0
  449. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff +0 -0
  450. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff +0 -0
  451. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2 +0 -0
  452. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff +0 -0
  453. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2 +0 -0
  454. package/dist/packages/ui/dist/assets/index-C0JEkXyN.css +1 -0
  455. package/dist/packages/ui/dist/assets/index-mTOWhQZm.js +29 -0
  456. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  457. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  458. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  459. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  460. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  461. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  462. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  463. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  464. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  465. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  466. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  467. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  468. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  469. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  470. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  471. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  472. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  473. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  474. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-BtY48IV_.woff +0 -0
  475. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-DhS7ScYx.woff2 +0 -0
  476. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-BQQOj9BB.woff2 +0 -0
  477. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-DBRwWuxA.woff +0 -0
  478. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-CXCVEoA9.woff2 +0 -0
  479. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-Dx02qI2_.woff +0 -0
  480. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-BPDUZo87.woff2 +0 -0
  481. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-e0Uj8ZlN.woff +0 -0
  482. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-BleIgkPp.woff +0 -0
  483. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-C9ZjJQAt.woff2 +0 -0
  484. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-BPaQ7tlD.woff +0 -0
  485. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-S6aYESQK.woff2 +0 -0
  486. package/dist/packages/ui/dist/favicon.svg +1 -0
  487. package/dist/packages/ui/dist/index.html +15 -0
  488. package/dist/third-party.json +575 -0
  489. package/dist/vendor/@fission-ai/openspec/bin/openspec.js +85986 -0
  490. package/dist/vendor/@fission-ai/openspec/package.json +82 -0
  491. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/schema.yaml +248 -0
  492. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/design.md +21 -0
  493. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/proposal.md +34 -0
  494. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/spec.md +13 -0
  495. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/tasks.md +11 -0
  496. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-c_sharp.wasm +0 -0
  497. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-go.wasm +0 -0
  498. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-java.wasm +0 -0
  499. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-javascript.wasm +0 -0
  500. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-kotlin.wasm +0 -0
  501. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-php.wasm +0 -0
  502. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-python.wasm +0 -0
  503. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-ruby.wasm +0 -0
  504. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-rust.wasm +0 -0
  505. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-scala.wasm +0 -0
  506. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-tsx.wasm +0 -0
  507. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-typescript.wasm +0 -0
  508. package/dist/vendor/web-tree-sitter/tree-sitter.wasm +0 -0
  509. package/package.json +36 -3
@@ -0,0 +1,19 @@
1
+ # Forge: the invented test ecosystem
2
+
3
+ Everything here is made up. Forge is an invented company and an invented in-house framework (`@ForgeService`, `@ForgeEndpoint`, `@ForgeClient`, ...); Northwind Pay is an invented vendor. Every stage of the Atticus build is tested against this ecosystem, because its correct answers are known in advance.
4
+
5
+ | Folder | What it holds |
6
+ | --- | --- |
7
+ | `repos/forge-portal-ui` | A TypeScript SPA calling its BFF |
8
+ | `repos/forge-portal-bff` | Plain Spring Boot: a controller, a Feign client through the gateway, a direct REST call, a Kafka publish, timeouts in config |
9
+ | `repos/forge-ledger` | A service on the invented Forge framework: endpoints, a vendor client, event subscribe and publish, Flyway migrations, an OpenAPI spec |
10
+ | `repos/forge-reports-job` | A batch job that reads the ledger's table directly and listens to an event |
11
+ | `repos/forge-gateway` | A gateway proxy bundle (Apigee-style XML) with OAuth and spike-arrest policies |
12
+ | `repos/forge-events` | Topic definitions with producers and consumers |
13
+ | `repos/forge-infra` | Kubernetes deployments, Terraform for the database, alerts as code |
14
+ | `inputs/` | The architect's draw.io diagram, wiki pages, a partner spec and sample ticket exports |
15
+ | `expected/scan.yaml` | The catalog a correct scan must produce |
16
+ | `expected/inputs.yaml` | What a correct read of the diagram and documents must produce |
17
+ | `expected/discrepancies.yaml` | Thirteen seeded problems that reconcile, the critic, intake and knowledge-gap checks must each find |
18
+
19
+ Rules: the expected files are written by hand and reviewed by a person; never regenerate them from extractor output. Files under `fixtures/` are byte-exact (excluded from formatting) because evidence points at line numbers and documents are hashed.
@@ -0,0 +1,54 @@
1
+ # Seeded problems. Each later stage must find every one of these.
2
+ # found_by: the feature that must report it.
3
+ - id: d01-vendor-direct
4
+ found_by: reconcile
5
+ what: Diagram edge e4 says Ledger → Northwind Pay via the gateway (S.GW.VND); code calls the vendor directly.
6
+ refs: [if-e7344c9455608119]
7
+ - id: d02-reports-reads-db
8
+ found_by: reconcile
9
+ what: Diagram edge e5 says Reports calls the Ledger API; code reads table ledger-db.entry directly (pattern D.JDBC, not S.GW.SOR).
10
+ refs: [ledger-db.entry]
11
+ - id: d03-undocumented-audit
12
+ found_by: reconcile
13
+ what: Code-only edge Portal BFF → audit-svc is missing from the diagram.
14
+ refs: [if-5c55930b735276a9]
15
+ - id: d04-undocumented-transfers-event
16
+ found_by: reconcile
17
+ what: Code-only edge ledger-api → reports-job (transfers.completed) is missing from the diagram.
18
+ refs: [if-f1cd1f189eaa4b7b]
19
+ - id: d05-planned-notifications
20
+ found_by: reconcile
21
+ what: Diagram-only edge to Notifications Service is marked New; it becomes a planned-new interface in a change.
22
+ refs: []
23
+ - id: d06-name-mismatch
24
+ found_by: reconcile
25
+ what: Diagram box "Ledger Platform" must be aliased to ledger-api before edges match.
26
+ refs: [ledger-api]
27
+ - id: d07-pattern-typo
28
+ found_by: critic
29
+ what: Edge e5 uses unknown pattern code S.GW.SRO, a likely typo of S.GW.SOR.
30
+ refs: []
31
+ - id: d08-unlabelled-hop
32
+ found_by: critic
33
+ what: Edge e1 (Portal UI → Portal BFF) has no pattern code.
34
+ refs: [if-f5c8b4b06d75284f]
35
+ - id: d09-no-vendor-timeouts
36
+ found_by: knowledge-gap
37
+ what: No timeout or retry settings are known for ledger-api's Northwind client, so the vendor call can't be checked against S.GW.VND controls.
38
+ refs: [if-e7344c9455608119]
39
+ - id: d10-no-reports-alerts
40
+ found_by: knowledge-gap
41
+ what: reports-job has no alert or dashboard definitions.
42
+ refs: [reports-job]
43
+ - id: d11-audit-unknown-owner
44
+ found_by: knowledge-gap
45
+ what: audit-svc is known only from a caller; it has no repo, owner or spec.
46
+ refs: [audit-svc]
47
+ - id: d12-doc-conflicts
48
+ found_by: intake
49
+ what: The ledger solution spec contradicts code twice (see inputs.yaml documentConflicts); code wins and the conflicts go to triage.
50
+ refs: [if-e7344c9455608119, ledger-db.entry]
51
+ - id: d13-poor-story
52
+ found_by: critic
53
+ what: ADO story 102 ("Transfers") has no acceptance criteria.
54
+ refs: []
@@ -0,0 +1,38 @@
1
+ # Expected results from reading fixtures/forge/inputs (diagram, wiki, partner spec).
2
+ # Hand-written ground truth for the diagram ingestor, intake and pattern scan.
3
+
4
+ # Edges the draw.io ingestor must read from inputs/diagrams/forge-context.drawio.
5
+ diagramEdges:
6
+ - { cell: e1, from: Portal UI, to: Portal BFF, label: "", pattern: null }
7
+ - { cell: e2, from: Portal BFF, to: Ledger Platform, pattern: S.GW.SOR, method: GET, path: "/ledger/v1/accounts/{id}/balance" }
8
+ - { cell: e3, from: Portal BFF, to: Ledger Platform, pattern: S.GW.SOR, method: POST, path: /ledger/v1/transfers }
9
+ - { cell: e4, from: Ledger Platform, to: Northwind Pay, pattern: S.GW.VND, method: POST, path: /v2/payments }
10
+ - { cell: e5, from: Reports Job, to: Ledger Platform, pattern: S.GW.SRO, method: GET, path: /ledger/v1/entries }
11
+ - { cell: e6, from: Portal BFF, to: Ledger Platform, pattern: A.EB.PUB, topic: payments.initiated }
12
+ - { cell: e7, from: Portal BFF, to: Notifications Service, pattern: A.EB.PUB, topic: notifications.requested, legend: new }
13
+
14
+ # Diagram names that need an alias to match catalog ids (found by name matching or a person).
15
+ aliases:
16
+ Portal UI: portal-ui
17
+ Portal BFF: portal-bff
18
+ Ledger Platform: ledger-api
19
+ Reports Job: reports-job
20
+ Northwind Pay: northwind-pay
21
+ Notifications Service: null # planned, not in code yet
22
+
23
+ # Pattern codes the pattern scan must find in inputs/wiki/integration-patterns.md.
24
+ patterns: [S.GW.SOR, S.GW.VND, S.DIR.BFF, A.EB.PUB, D.JDBC]
25
+
26
+ # Facts in documents that conflict with code (the document never overrides code).
27
+ documentConflicts:
28
+ - doc: inputs/wiki/ledger-solution-spec.md
29
+ claim: Payments to Northwind Pay go out through the gateway
30
+ code: interface if-e7344c9455608119 is via direct
31
+ - doc: inputs/wiki/ledger-solution-spec.md
32
+ claim: Reports read entries through the Ledger API
33
+ code: reports-job reads table ledger-db.entry directly
34
+
35
+ # Facts only documents give; they need an owner to confirm before they become asserted.
36
+ documentOnlyFacts:
37
+ - { system: ledger, fact: "SLO 99.9% monthly availability", becomes: Obligation }
38
+ - { system: ledger, fact: "Peak load 200 requests per second", becomes: Obligation }
@@ -0,0 +1,342 @@
1
+ # Expected catalog from scanning fixtures/forge/repos plus the partner spec, once the
2
+ # M1 extractors (OpenAPI, gateway, Spring) and the Forge dialect exist.
3
+ # Hand-written ground truth. Do not generate it from extractor output.
4
+ # Records omit `schemaVersion` and `status: current`; the test adds them.
5
+ - kind: System
6
+ id: portal
7
+ confidence: verified
8
+ name: Portal
9
+ boundary: product
10
+ owner: team-portal
11
+ repos: [forge-portal-ui, forge-portal-bff]
12
+ evidence: [{ source: config, repo: forge-portal-bff, path: pom.xml }]
13
+ - kind: System
14
+ id: ledger
15
+ confidence: verified
16
+ name: Ledger
17
+ boundary: product
18
+ owner: team-ledger
19
+ repos: [forge-ledger]
20
+ evidence: [{ source: config, repo: forge-ledger, path: forge.yaml, line: 3 }]
21
+ - kind: System
22
+ id: reports
23
+ confidence: verified
24
+ name: Reports
25
+ boundary: product
26
+ owner: team-reports
27
+ repos: [forge-reports-job]
28
+ evidence: [{ source: code, repo: forge-reports-job, path: src/main/java/forge/reports/DailyEntriesJob.java }]
29
+ - kind: System
30
+ id: audit
31
+ confidence: inferred
32
+ name: Audit
33
+ boundary: internal
34
+ evidence: [{ source: config, repo: forge-portal-bff, path: src/main/resources/application.yml, line: 4, side: caller }]
35
+ - kind: System
36
+ id: northwind-pay
37
+ confidence: verified
38
+ name: Northwind Pay
39
+ boundary: vendor
40
+ evidence: [{ source: spec, path: inputs/partner-specs/northwind-pay-openapi.yaml, side: definition }]
41
+
42
+ - kind: Component
43
+ id: portal-ui
44
+ confidence: verified
45
+ system: portal
46
+ repo: forge-portal-ui
47
+ type: spa
48
+ evidence: [{ source: config, repo: forge-portal-ui, path: package.json }]
49
+ - kind: Component
50
+ id: portal-bff
51
+ confidence: verified
52
+ system: portal
53
+ repo: forge-portal-bff
54
+ type: spring-boot
55
+ runtime: kubernetes
56
+ evidence: [{ source: config, repo: forge-portal-bff, path: pom.xml }]
57
+ - kind: Component
58
+ id: ledger-api
59
+ confidence: verified
60
+ system: ledger
61
+ repo: forge-ledger
62
+ type: forge-service
63
+ runtime: kubernetes
64
+ evidence: [{ source: config, repo: forge-ledger, path: forge.yaml, line: 2 }]
65
+ - kind: Component
66
+ id: reports-job
67
+ confidence: verified
68
+ system: reports
69
+ repo: forge-reports-job
70
+ type: spring-batch
71
+ evidence: [{ source: code, repo: forge-reports-job, path: src/main/java/forge/reports/DailyEntriesJob.java }]
72
+ - kind: Component
73
+ id: audit-svc
74
+ confidence: inferred
75
+ system: audit
76
+ type: service
77
+ evidence: [{ source: config, repo: forge-portal-bff, path: src/main/resources/application.yml, line: 4, side: caller }]
78
+
79
+ - kind: Endpoint
80
+ id: portal-bff.get-balance
81
+ confidence: verified
82
+ component: portal-bff
83
+ endpointType: rest
84
+ method: GET
85
+ pathOrTopic: /api/balance/{accountId}
86
+ normalizedPath: /api/balance/{}
87
+ evidence: [{ source: code, repo: forge-portal-bff, path: src/main/java/forge/portal/BalanceController.java, line: 12, side: callee }]
88
+ - kind: Endpoint
89
+ id: ledger-api.get-balance
90
+ confidence: verified
91
+ component: ledger-api
92
+ endpointType: rest
93
+ method: GET
94
+ pathOrTopic: /accounts/{id}/balance
95
+ normalizedPath: /accounts/{}/balance
96
+ auth: oauth2
97
+ evidence:
98
+ - { source: code, repo: forge-ledger, path: src/main/java/forge/ledger/LedgerEndpoints.java, line: 8, side: callee, dialect: forge@0.1.0 }
99
+ - { source: spec, repo: forge-ledger, path: api/ledger-openapi.yaml, line: 6, side: definition }
100
+ - kind: Endpoint
101
+ id: ledger-api.post-transfer
102
+ confidence: verified
103
+ component: ledger-api
104
+ endpointType: rest
105
+ method: POST
106
+ pathOrTopic: /transfers
107
+ normalizedPath: /transfers
108
+ auth: oauth2
109
+ evidence:
110
+ - { source: code, repo: forge-ledger, path: src/main/java/forge/ledger/LedgerEndpoints.java, line: 11, side: callee, dialect: forge@0.1.0 }
111
+ - { source: spec, repo: forge-ledger, path: api/ledger-openapi.yaml, line: 14, side: definition }
112
+ - kind: Endpoint
113
+ id: northwind-pay.post-payment
114
+ confidence: verified
115
+ component: northwind-pay
116
+ endpointType: rest
117
+ method: POST
118
+ pathOrTopic: /v2/payments
119
+ normalizedPath: /v2/payments
120
+ evidence: [{ source: spec, path: inputs/partner-specs/northwind-pay-openapi.yaml, line: 6, side: definition }]
121
+ - kind: Endpoint
122
+ id: topic.payments-initiated
123
+ confidence: verified
124
+ component: portal-bff
125
+ endpointType: event-topic
126
+ pathOrTopic: payments.initiated
127
+ evidence: [{ source: event-config, repo: forge-events, path: topics/payments.initiated.yaml, line: 1, side: definition }]
128
+ - kind: Endpoint
129
+ id: topic.transfers-completed
130
+ confidence: verified
131
+ component: ledger-api
132
+ endpointType: event-topic
133
+ pathOrTopic: transfers.completed
134
+ evidence: [{ source: event-config, repo: forge-events, path: topics/transfers.completed.yaml, line: 1, side: definition }]
135
+
136
+ - kind: GatewayRoute
137
+ id: gw-ledger-v1
138
+ confidence: verified
139
+ proxy: ledger-v1
140
+ basepath: /ledger/v1
141
+ target: http://ledger-api.forge.internal
142
+ policies: [VerifyOAuth, SpikeArrest]
143
+ scopes: [ledger.read, ledger.write]
144
+ evidence:
145
+ - { source: gateway, repo: forge-gateway, path: proxies/ledger-v1/apiproxy/proxies/default.xml, line: 9, side: gateway }
146
+ - { source: gateway, repo: forge-gateway, path: proxies/ledger-v1/apiproxy/targets/ledger.xml, line: 3, side: gateway }
147
+
148
+ - kind: Interface
149
+ id: if-f5c8b4b06d75284f
150
+ confidence: verified
151
+ from: portal-ui
152
+ to: portal-bff
153
+ endpoint: portal-bff.get-balance
154
+ via: direct
155
+ method: GET
156
+ normalizedPath: /api/balance/{}
157
+ sync: sync
158
+ pattern: { code: S.DIR.BFF, source: inferred }
159
+ evidence:
160
+ - { source: code, repo: forge-portal-ui, path: src/api/balance.ts, line: 3, side: caller }
161
+ - { source: code, repo: forge-portal-bff, path: src/main/java/forge/portal/BalanceController.java, line: 12, side: callee }
162
+ - kind: Interface
163
+ id: if-75b5e8d8aa780837
164
+ confidence: verified
165
+ from: portal-bff
166
+ to: ledger-api
167
+ endpoint: ledger-api.get-balance
168
+ via: gateway
169
+ route: gw-ledger-v1
170
+ method: GET
171
+ normalizedPath: /accounts/{}/balance
172
+ auth: oauth2
173
+ sync: sync
174
+ pattern: { code: S.GW.SOR, source: inferred }
175
+ evidence:
176
+ - { source: code, repo: forge-portal-bff, path: src/main/java/forge/portal/LedgerClient.java, line: 8, side: caller }
177
+ - { source: gateway, repo: forge-gateway, path: proxies/ledger-v1/apiproxy/proxies/default.xml, line: 9, side: gateway }
178
+ - { source: code, repo: forge-ledger, path: src/main/java/forge/ledger/LedgerEndpoints.java, line: 8, side: callee, dialect: forge@0.1.0 }
179
+ - kind: Interface
180
+ id: if-d99f508a2ac9b6e0
181
+ confidence: verified
182
+ from: portal-bff
183
+ to: ledger-api
184
+ endpoint: ledger-api.post-transfer
185
+ via: gateway
186
+ route: gw-ledger-v1
187
+ method: POST
188
+ normalizedPath: /transfers
189
+ auth: oauth2
190
+ sync: sync
191
+ pattern: { code: S.GW.SOR, source: inferred }
192
+ evidence:
193
+ - { source: code, repo: forge-portal-bff, path: src/main/java/forge/portal/LedgerClient.java, line: 11, side: caller }
194
+ - { source: gateway, repo: forge-gateway, path: proxies/ledger-v1/apiproxy/proxies/default.xml, line: 9, side: gateway }
195
+ - { source: code, repo: forge-ledger, path: src/main/java/forge/ledger/LedgerEndpoints.java, line: 11, side: callee, dialect: forge@0.1.0 }
196
+ - kind: Interface
197
+ id: if-e7344c9455608119
198
+ confidence: verified
199
+ from: ledger-api
200
+ to: northwind-pay
201
+ endpoint: northwind-pay.post-payment
202
+ via: direct
203
+ method: POST
204
+ normalizedPath: /v2/payments
205
+ sync: sync
206
+ evidence:
207
+ - { source: code, repo: forge-ledger, path: src/main/java/forge/ledger/NorthwindClient.java, line: 8, side: caller, dialect: forge@0.1.0 }
208
+ - { source: spec, path: inputs/partner-specs/northwind-pay-openapi.yaml, line: 6, side: callee }
209
+ - kind: Interface
210
+ id: if-5c55930b735276a9
211
+ confidence: inferred
212
+ from: portal-bff
213
+ to: audit-svc
214
+ via: direct
215
+ method: POST
216
+ normalizedPath: /audit/events
217
+ sync: sync
218
+ evidence: [{ source: code, repo: forge-portal-bff, path: src/main/java/forge/portal/AuditPublisher.java, line: 10, side: caller }]
219
+ - kind: Interface
220
+ id: if-32d38aecd11b86b1
221
+ confidence: verified
222
+ from: portal-bff
223
+ to: ledger-api
224
+ endpoint: topic.payments-initiated
225
+ via: event-bus
226
+ normalizedPath: payments.initiated
227
+ sync: async
228
+ pattern: { code: A.EB.PUB, source: inferred }
229
+ evidence:
230
+ - { source: code, repo: forge-portal-bff, path: src/main/java/forge/portal/PaymentEvents.java, line: 11, side: caller }
231
+ - { source: event-config, repo: forge-events, path: topics/payments.initiated.yaml, line: 1, side: definition }
232
+ - { source: code, repo: forge-ledger, path: src/main/java/forge/ledger/LedgerEvents.java, line: 6, side: callee, dialect: forge@0.1.0 }
233
+ - kind: Interface
234
+ id: if-f1cd1f189eaa4b7b
235
+ confidence: verified
236
+ from: ledger-api
237
+ to: reports-job
238
+ endpoint: topic.transfers-completed
239
+ via: event-bus
240
+ normalizedPath: transfers.completed
241
+ sync: async
242
+ pattern: { code: A.EB.PUB, source: inferred }
243
+ evidence:
244
+ - { source: code, repo: forge-ledger, path: src/main/java/forge/ledger/LedgerEvents.java, line: 9, side: caller, dialect: forge@0.1.0 }
245
+ - { source: event-config, repo: forge-events, path: topics/transfers.completed.yaml, line: 1, side: definition }
246
+ - { source: code, repo: forge-reports-job, path: src/main/java/forge/reports/DailyEntriesJob.java, line: 17, side: callee }
247
+
248
+ - kind: DataStore
249
+ id: ledger-db
250
+ confidence: verified
251
+ storeType: postgresql
252
+ ownerComponent: ledger-api
253
+ entitiesHeld: [account, entry]
254
+ evidence:
255
+ - { source: infrastructure, repo: forge-infra, path: terraform/ledger-db.tf, line: 1 }
256
+ - { source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V1__create_account.sql, line: 1 }
257
+ - kind: Table
258
+ id: ledger-db.account
259
+ confidence: verified
260
+ dataStore: ledger-db
261
+ name: account
262
+ tableKind: table
263
+ ownerComponent: ledger-api
264
+ writers: [ledger-api]
265
+ readers: [ledger-api]
266
+ evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V1__create_account.sql, line: 1 }]
267
+ - kind: Table
268
+ id: ledger-db.entry
269
+ confidence: verified
270
+ dataStore: ledger-db
271
+ name: entry
272
+ tableKind: table
273
+ ownerComponent: ledger-api
274
+ writers: [ledger-api]
275
+ readers: [ledger-api, reports-job]
276
+ evidence:
277
+ - { source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V2__create_entry.sql, line: 1 }
278
+ - { source: code, repo: forge-reports-job, path: src/main/java/forge/reports/DailyEntriesJob.java, line: 14, side: caller }
279
+ - { kind: Column, id: ledger-db.account.id, confidence: verified, table: ledger-db.account, name: id, type: bigint, nullable: false, evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V1__create_account.sql, line: 2 }] }
280
+ - { kind: Column, id: ledger-db.account.account-number, confidence: verified, table: ledger-db.account, name: account_number, type: varchar(34), nullable: false, evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V1__create_account.sql, line: 3 }] }
281
+ - { kind: Column, id: ledger-db.account.holder-name, confidence: verified, table: ledger-db.account, name: holder_name, type: varchar(200), nullable: false, evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V1__create_account.sql, line: 4 }] }
282
+ - { kind: Column, id: ledger-db.entry.id, confidence: verified, table: ledger-db.entry, name: id, type: bigint, nullable: false, evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V2__create_entry.sql, line: 2 }] }
283
+ - { kind: Column, id: ledger-db.entry.account-id, confidence: verified, table: ledger-db.entry, name: account_id, type: bigint, nullable: false, evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V2__create_entry.sql, line: 3 }] }
284
+ - { kind: Column, id: ledger-db.entry.amount, confidence: verified, table: ledger-db.entry, name: amount, type: "numeric(18,2)", nullable: false, evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V2__create_entry.sql, line: 4 }] }
285
+ - { kind: Column, id: ledger-db.entry.posted-at, confidence: verified, table: ledger-db.entry, name: posted_at, type: timestamp, nullable: false, evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V2__create_entry.sql, line: 5 }] }
286
+ - { kind: IndexConstraint, id: ledger-db.account.pk, confidence: verified, table: ledger-db.account, constraintKind: primary-key, columns: [id], evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V1__create_account.sql, line: 2 }] }
287
+ - { kind: IndexConstraint, id: ledger-db.entry.pk, confidence: verified, table: ledger-db.entry, constraintKind: primary-key, columns: [id], evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V2__create_entry.sql, line: 2 }] }
288
+ - { kind: IndexConstraint, id: ledger-db.entry.fk-account, confidence: verified, table: ledger-db.entry, constraintKind: foreign-key, columns: [account_id], references: { table: ledger-db.account, columns: [id] }, evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V2__create_entry.sql, line: 3 }] }
289
+ - { kind: IndexConstraint, id: ledger-db.entry.idx-entry-account, confidence: verified, table: ledger-db.entry, constraintKind: index, columns: [account_id], evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V2__create_entry.sql, line: 7 }] }
290
+ - { kind: Migration, id: ledger-db.v1, confidence: verified, dataStore: ledger-db, version: "1", tool: flyway, file: src/main/resources/db/migration/V1__create_account.sql, operations: [create table account], evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V1__create_account.sql, line: 1 }] }
291
+ - { kind: Migration, id: ledger-db.v2, confidence: verified, dataStore: ledger-db, version: "2", tool: flyway, file: src/main/resources/db/migration/V2__create_entry.sql, operations: [create table entry, create index idx_entry_account], evidence: [{ source: migration, repo: forge-ledger, path: src/main/resources/db/migration/V2__create_entry.sql, line: 1 }] }
292
+
293
+ - kind: Deployment
294
+ id: ledger-api.prod
295
+ confidence: verified
296
+ component: ledger-api
297
+ env: prod
298
+ platform: kubernetes
299
+ replicas: 3
300
+ resources: { cpu: "1", memory: 1Gi }
301
+ evidence: [{ source: infrastructure, repo: forge-infra, path: k8s/ledger-api.yaml, line: 7 }]
302
+ - kind: Deployment
303
+ id: portal-bff.prod
304
+ confidence: verified
305
+ component: portal-bff
306
+ env: prod
307
+ platform: kubernetes
308
+ replicas: 2
309
+ evidence: [{ source: infrastructure, repo: forge-infra, path: k8s/portal-bff.yaml, line: 7 }]
310
+ - kind: Setting
311
+ id: portal-bff.ledger-read-timeout
312
+ confidence: verified
313
+ component: portal-bff
314
+ settingKind: timeout
315
+ key: ledger.client.read-timeout
316
+ valueOrRef: 2000ms
317
+ target: ledger-api
318
+ evidence: [{ source: config, repo: forge-portal-bff, path: src/main/resources/application.yml, line: 7 }]
319
+ - kind: Setting
320
+ id: portal-bff.ledger-connect-timeout
321
+ confidence: verified
322
+ component: portal-bff
323
+ settingKind: timeout
324
+ key: ledger.client.connect-timeout
325
+ valueOrRef: 500ms
326
+ target: ledger-api
327
+ evidence: [{ source: config, repo: forge-portal-bff, path: src/main/resources/application.yml, line: 8 }]
328
+ - kind: ObservabilityAsset
329
+ id: ledger-api.alert.error-rate
330
+ confidence: verified
331
+ component: ledger-api
332
+ assetKind: alert
333
+ name: Ledger API error rate
334
+ evidence: [{ source: infrastructure, repo: forge-infra, path: alerts/ledger-api.yaml, line: 3 }]
335
+ - kind: AccessGrant
336
+ id: gw-ledger-v1.oauth-scopes
337
+ confidence: inferred
338
+ subjectKind: oauth-client
339
+ subject: portal-bff
340
+ resource: ledger-v1
341
+ scopesOrPermissions: [ledger.read, ledger.write]
342
+ evidence: [{ source: gateway, repo: forge-gateway, path: proxies/ledger-v1/apiproxy/policies/VerifyOAuth.xml, line: 3, side: gateway }]
@@ -0,0 +1,23 @@
1
+ <mxfile host="drawio">
2
+ <diagram id="ctx" name="Forge context (as the architect drew it)">
3
+ <mxGraphModel>
4
+ <root>
5
+ <mxCell id="0"/>
6
+ <mxCell id="1" parent="0"/>
7
+ <mxCell id="ui" value="Portal UI" style="rounded=1;" vertex="1" parent="1"/>
8
+ <mxCell id="bff" value="Portal BFF" style="rounded=1;" vertex="1" parent="1"/>
9
+ <mxCell id="ledger" value="Ledger Platform" style="rounded=1;" vertex="1" parent="1"/>
10
+ <mxCell id="reports" value="Reports Job" style="rounded=1;" vertex="1" parent="1"/>
11
+ <mxCell id="northwind" value="Northwind Pay" style="shape=cloud;" vertex="1" parent="1"/>
12
+ <mxCell id="notify" value="Notifications Service" style="rounded=1;dashed=1;legend=new;" vertex="1" parent="1"/>
13
+ <mxCell id="e1" value="" edge="1" source="ui" target="bff" parent="1"/>
14
+ <mxCell id="e2" value="S.GW.SOR GET /ledger/v1/accounts/{id}/balance" edge="1" source="bff" target="ledger" parent="1"/>
15
+ <mxCell id="e3" value="S.GW.SOR POST /ledger/v1/transfers" edge="1" source="bff" target="ledger" parent="1"/>
16
+ <mxCell id="e4" value="S.GW.VND POST /v2/payments" edge="1" source="ledger" target="northwind" parent="1"/>
17
+ <mxCell id="e5" value="S.GW.SRO GET /ledger/v1/entries" edge="1" source="reports" target="ledger" parent="1"/>
18
+ <mxCell id="e6" value="A.EB.PUB payments.initiated" edge="1" source="bff" target="ledger" parent="1"/>
19
+ <mxCell id="e7" value="A.EB.PUB notifications.requested" style="legend=new;" edge="1" source="bff" target="notify" parent="1"/>
20
+ </root>
21
+ </mxGraphModel>
22
+ </diagram>
23
+ </mxfile>
@@ -0,0 +1,11 @@
1
+ openapi: 3.0.3
2
+ info:
3
+ title: Northwind Pay
4
+ version: "2.0"
5
+ paths:
6
+ /v2/payments:
7
+ post:
8
+ operationId: createPayment
9
+ responses:
10
+ "202":
11
+ description: Accepted
@@ -0,0 +1,4 @@
1
+ [
2
+ { "id": 101, "type": "User Story", "title": "As a customer I can see my available balance", "acceptanceCriteria": "Given an account with holds, when I open the balance, then I see ledger balance minus holds.", "rating": "good" },
3
+ { "id": 102, "type": "User Story", "title": "Transfers", "acceptanceCriteria": "", "rating": "poor" }
4
+ ]
@@ -0,0 +1,5 @@
1
+ [
2
+ { "type": "network-firewall-rule", "number": "SR-0001", "fields": { "source": "ledger-api", "destination": "api.northwind.example", "port": 443 }, "opened": "2026-03-02", "closed": "2026-03-16", "approvalGroup": "network-team" },
3
+ { "type": "network-firewall-rule", "number": "SR-0002", "fields": { "source": "reports-job", "destination": "ledger-db.forge.internal", "port": 5432 }, "opened": "2026-04-06", "closed": "2026-04-17", "approvalGroup": "network-team" },
4
+ { "type": "gateway-route-review", "number": "SR-0003", "fields": { "proxy": "ledger-v1" }, "opened": "2026-02-10", "closed": "2026-02-13", "approvalGroup": "gateway-team" }
5
+ ]
@@ -0,0 +1,11 @@
1
+ # Integration patterns
2
+
3
+ Every hop on an architecture diagram carries one of these codes.
4
+
5
+ | Code | Name | Interaction | Required controls |
6
+ | --- | --- | --- | --- |
7
+ | S.GW.SOR | Synchronous via the gateway to a system of record | sync | OAuth2 at the gateway, timeout under 3 s, circuit breaker |
8
+ | S.GW.VND | Synchronous via the gateway to a vendor | sync | OAuth2 or mTLS at the gateway, timeout, retry with idempotency key |
9
+ | S.DIR.BFF | Synchronous, direct from a UI to its own BFF | sync | Session auth |
10
+ | A.EB.PUB | Asynchronous publish to the event bus | async | Schema in the registry, dead-letter topic |
11
+ | D.JDBC | Direct database access | data-access | Read-only account, owner approval |
@@ -0,0 +1,9 @@
1
+ # Ledger Platform: solution spec
2
+
3
+ Owner: Ledger team (ledger-team@forge.example)
4
+
5
+ The Ledger Platform keeps accounts and entries. The portal reads balances and creates transfers through the gateway.
6
+ Payments to Northwind Pay go out through the gateway (pattern S.GW.VND).
7
+ Reports read entries through the Ledger API.
8
+
9
+ Service level: 99.9% monthly availability. Peak load: 200 requests per second.
@@ -0,0 +1,4 @@
1
+ # How to request a firewall rule
2
+
3
+ Raise a "Network firewall rule" request in the service desk. Fields: source app, destination host, port, protocol, business justification, approver (network team).
4
+ Typical lead time: 10 working days.
@@ -0,0 +1,17 @@
1
+ # A judgment (ADR 0117): reaches, 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: reaches
4
+ key: 84af5b6af24f7ca8c23013f3
5
+ verdict: gateway
6
+ at: 2026-10-19T10:00:00Z
7
+ confirmedBy:
8
+ by: person
9
+ name: avery
10
+ inputs:
11
+ from: portal
12
+ sentence: The portal reads balances and creates transfers through the gateway.
13
+ to: ledger
14
+ v: 1
15
+ quotes:
16
+ - of: sentence
17
+ text: through the gateway
@@ -0,0 +1,17 @@
1
+ # A judgment (ADR 0117): reaches, 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: reaches
4
+ key: c3917555edebddce8cecb647
5
+ verdict: api-only
6
+ at: 2026-10-19T10:00:00Z
7
+ confirmedBy:
8
+ by: person
9
+ name: avery
10
+ inputs:
11
+ from: reports
12
+ sentence: Reports read entries through the Ledger API.
13
+ to: ledger
14
+ v: 1
15
+ quotes:
16
+ - of: sentence
17
+ text: read entries through the Ledger API
@@ -0,0 +1,17 @@
1
+ # A judgment (ADR 0117): reaches, 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: reaches
4
+ key: c5fafd6601f8ca9e34e0bbd0
5
+ verdict: gateway
6
+ at: 2026-10-19T10:00:00Z
7
+ confirmedBy:
8
+ by: person
9
+ name: avery
10
+ inputs:
11
+ from: ledger
12
+ sentence: Payments to Northwind Pay go out through the gateway (pattern S.GW.VND).
13
+ to: northwind-pay
14
+ v: 1
15
+ quotes:
16
+ - of: sentence
17
+ text: go out through the gateway
@@ -0,0 +1,9 @@
1
+ schemaVersion: 1
2
+ id: architecture-critic
3
+ role: architect
4
+ description: Reviews interfaces and design against the catalog and the architecture checklist, looking for reasons they are wrong.
5
+ inputs: [interfaces, design, data, catalog-slice, patterns, checklist]
6
+ outputArtifact: findings
7
+ checklist: forge-architecture
8
+ tokenBudget: 80000
9
+ allowedRuntimes: [hand-off, mock, replay]
@@ -0,0 +1,10 @@
1
+ # Contract C5 agent definition (fixture sample).
2
+ schemaVersion: 1
3
+ id: story-writer
4
+ role: business-analyst
5
+ description: Writes user stories with Given/When/Then acceptance criteria that trace to the brief and the spec scenarios.
6
+ inputs: [brief, proposal, specs, design, catalog-slice]
7
+ outputArtifact: stories
8
+ checklist: forge-architecture
9
+ tokenBudget: 60000
10
+ allowedRuntimes: [hand-off, headless-claude-code, mock, replay]