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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) 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-23M2LUYM.js +55 -0
  6. package/dist/chunk-26PLPSQW.js +48 -0
  7. package/dist/chunk-2G4DFUWJ.js +43 -0
  8. package/dist/chunk-2HMWX4T6.js +226 -0
  9. package/dist/chunk-2KDSXJFJ.js +294 -0
  10. package/dist/chunk-2M6WXO73.js +38 -0
  11. package/dist/chunk-2RX7PI2Y.js +166 -0
  12. package/dist/chunk-2XM6PYQQ.js +199 -0
  13. package/dist/chunk-3G4YI4ZU.js +16 -0
  14. package/dist/chunk-3GTZ2OON.js +362 -0
  15. package/dist/chunk-3QAKDIEU.js +108 -0
  16. package/dist/chunk-47QE246J.js +6115 -0
  17. package/dist/chunk-4GZXS6S2.js +5401 -0
  18. package/dist/chunk-4PJADZRR.js +545 -0
  19. package/dist/chunk-4Q3NN7VF.js +32 -0
  20. package/dist/chunk-4QUQEBFT.js +143 -0
  21. package/dist/chunk-4SKZDI62.js +22 -0
  22. package/dist/chunk-4SVJNVEE.js +80 -0
  23. package/dist/chunk-52R2YXP5.js +80 -0
  24. package/dist/chunk-577AJVRS.js +44694 -0
  25. package/dist/chunk-5F3RJCHB.js +45 -0
  26. package/dist/chunk-5IALSMZ2.js +34 -0
  27. package/dist/chunk-5KTOPOEP.js +174 -0
  28. package/dist/chunk-5MI2SEV5.js +242 -0
  29. package/dist/chunk-5XDNUJ4P.js +2743 -0
  30. package/dist/chunk-5XN76FTF.js +22 -0
  31. package/dist/chunk-5YIBJXGB.js +2007 -0
  32. package/dist/chunk-62YMDXY6.js +38 -0
  33. package/dist/chunk-65C57N7P.js +116 -0
  34. package/dist/chunk-67J3VZBA.js +120 -0
  35. package/dist/chunk-6EDQE7GO.js +27809 -0
  36. package/dist/chunk-6GNS32SI.js +285 -0
  37. package/dist/chunk-6GWHKMQR.js +405 -0
  38. package/dist/chunk-6JLPXDWN.js +7923 -0
  39. package/dist/chunk-6TJCUYC5.js +22 -0
  40. package/dist/chunk-6VBXAGJX.js +234 -0
  41. package/dist/chunk-73VPWF5R.js +415 -0
  42. package/dist/chunk-76WKMA4J.js +14 -0
  43. package/dist/chunk-7DUDLVFJ.js +52 -0
  44. package/dist/chunk-7EFILTCI.js +67 -0
  45. package/dist/chunk-7EKESFWV.js +130 -0
  46. package/dist/chunk-7F2RUWPU.js +101 -0
  47. package/dist/chunk-7GB4ZRE2.js +378 -0
  48. package/dist/chunk-7TGYNOXD.js +189 -0
  49. package/dist/chunk-7UKVYFQ2.js +2078 -0
  50. package/dist/chunk-7URGP4DD.js +102 -0
  51. package/dist/chunk-7YYEKTYF.js +2522 -0
  52. package/dist/chunk-AJJK7GLO.js +252 -0
  53. package/dist/chunk-AKJTKMXU.js +25 -0
  54. package/dist/chunk-APSVL2AI.js +344 -0
  55. package/dist/chunk-AWECWW5Y.js +3206 -0
  56. package/dist/chunk-AY2IUF4K.js +5071 -0
  57. package/dist/chunk-B2VSVN4P.js +34 -0
  58. package/dist/chunk-B3O52AUQ.js +275 -0
  59. package/dist/chunk-B7434AE2.js +104 -0
  60. package/dist/chunk-BDEKREZH.js +155 -0
  61. package/dist/chunk-BJPMKJTL.js +1428 -0
  62. package/dist/chunk-BMCKL3VQ.js +324 -0
  63. package/dist/chunk-BMHGA7WD.js +25 -0
  64. package/dist/chunk-BUYJL3GJ.js +287 -0
  65. package/dist/chunk-BXIX7S7O.js +32 -0
  66. package/dist/chunk-CHC5FKTU.js +26 -0
  67. package/dist/chunk-CITDNDIZ.js +53 -0
  68. package/dist/chunk-CIUHAHM6.js +70 -0
  69. package/dist/chunk-CNKGYDMG.js +334 -0
  70. package/dist/chunk-CRE4BJHM.js +408 -0
  71. package/dist/chunk-D3PO4DOZ.js +261 -0
  72. package/dist/chunk-DAQBIK5G.js +47 -0
  73. package/dist/chunk-DDAHCPGA.js +212 -0
  74. package/dist/chunk-DPHCFZ7W.js +374 -0
  75. package/dist/chunk-DZRQDNPT.js +34 -0
  76. package/dist/chunk-E3JYO547.js +46 -0
  77. package/dist/chunk-E3Z67HRK.js +104 -0
  78. package/dist/chunk-EADP3PEN.js +450 -0
  79. package/dist/chunk-EX6ZXS5K.js +169 -0
  80. package/dist/chunk-EZIUFEN6.js +27 -0
  81. package/dist/chunk-F2FOQLJ7.js +430 -0
  82. package/dist/chunk-F7UQR4ZX.js +149 -0
  83. package/dist/chunk-F7YL2RZ4.js +94 -0
  84. package/dist/chunk-FEZE6NIA.js +69 -0
  85. package/dist/chunk-FJCFYKVO.js +1014 -0
  86. package/dist/chunk-FLOEZA6K.js +29 -0
  87. package/dist/chunk-FMKKVWZD.js +133 -0
  88. package/dist/chunk-FNHSVBRA.js +48 -0
  89. package/dist/chunk-FOGG4AUR.js +114 -0
  90. package/dist/chunk-FPGVOSOG.js +41 -0
  91. package/dist/chunk-FQSRHTTC.js +49 -0
  92. package/dist/chunk-FR7JPYBD.js +182 -0
  93. package/dist/chunk-FTV6I76U.js +211 -0
  94. package/dist/chunk-FV5YFR6I.js +540 -0
  95. package/dist/chunk-FZ2E5LGK.js +54 -0
  96. package/dist/chunk-FZL2HNWP.js +531 -0
  97. package/dist/chunk-G2E5MNYP.js +549 -0
  98. package/dist/chunk-G5SFOH7P.js +256 -0
  99. package/dist/chunk-GFXLPJWY.js +53 -0
  100. package/dist/chunk-GR6YKM55.js +480 -0
  101. package/dist/chunk-GXJVY6WT.js +250 -0
  102. package/dist/chunk-GZ4TKR3Q.js +928 -0
  103. package/dist/chunk-HB6XSGI6.js +131 -0
  104. package/dist/chunk-HE4ZQXZM.js +396 -0
  105. package/dist/chunk-HHUFVJF7.js +1019 -0
  106. package/dist/chunk-HKTUIMH4.js +76 -0
  107. package/dist/chunk-HUZQDKQK.js +48 -0
  108. package/dist/chunk-I7IWQIEB.js +58 -0
  109. package/dist/chunk-IDGSU7JF.js +1496 -0
  110. package/dist/chunk-ILFKECGI.js +69 -0
  111. package/dist/chunk-ISNZYKAS.js +53 -0
  112. package/dist/chunk-IUD3ME4E.js +251 -0
  113. package/dist/chunk-IV7BCWWN.js +101 -0
  114. package/dist/chunk-IZNSAEBX.js +164 -0
  115. package/dist/chunk-J5LHDJU4.js +400 -0
  116. package/dist/chunk-JAA53T23.js +172 -0
  117. package/dist/chunk-JF2NSTFO.js +47 -0
  118. package/dist/chunk-JMSEEBN4.js +41 -0
  119. package/dist/chunk-JQ7XQPQS.js +273 -0
  120. package/dist/chunk-KC5DROFC.js +16667 -0
  121. package/dist/chunk-KIAI6PWL.js +36 -0
  122. package/dist/chunk-KIHOIVST.js +18 -0
  123. package/dist/chunk-KM2FBM3T.js +659 -0
  124. package/dist/chunk-KQDZXGNR.js +14 -0
  125. package/dist/chunk-L4VJ4ETL.js +41 -0
  126. package/dist/chunk-LDKUC2QJ.js +49 -0
  127. package/dist/chunk-LK44ULGI.js +2043 -0
  128. package/dist/chunk-LRS573EX.js +104 -0
  129. package/dist/chunk-LTQANUDH.js +119 -0
  130. package/dist/chunk-LVGBKKSM.js +282 -0
  131. package/dist/chunk-MF7QH4AX.js +162 -0
  132. package/dist/chunk-MGVYVW7Q.js +915 -0
  133. package/dist/chunk-MH5OCRUM.js +240 -0
  134. package/dist/chunk-MKFYQQ5Q.js +36 -0
  135. package/dist/chunk-MKRBG5EF.js +1142 -0
  136. package/dist/chunk-MTAUZW2Z.js +2504 -0
  137. package/dist/chunk-MTEBM4Y4.js +39 -0
  138. package/dist/chunk-N3NBWIYQ.js +48 -0
  139. package/dist/chunk-N4QZJJVB.js +3851 -0
  140. package/dist/chunk-NGPU2ARF.js +1726 -0
  141. package/dist/chunk-NIXVDQVO.js +2929 -0
  142. package/dist/chunk-NNUASOAA.js +34 -0
  143. package/dist/chunk-NPCD54I7.js +226 -0
  144. package/dist/chunk-OEI7LVRP.js +856 -0
  145. package/dist/chunk-OGRWQ562.js +18 -0
  146. package/dist/chunk-OIU657QQ.js +95 -0
  147. package/dist/chunk-OJLRFGBP.js +128 -0
  148. package/dist/chunk-OS7PQ35Z.js +391 -0
  149. package/dist/chunk-OSGQW2Z6.js +104 -0
  150. package/dist/chunk-P3TKKBAH.js +131 -0
  151. package/dist/chunk-PEF5OEMB.js +163 -0
  152. package/dist/chunk-PGKHJYOB.js +706 -0
  153. package/dist/chunk-PIVKU64W.js +688 -0
  154. package/dist/chunk-PKCMRPPB.js +109 -0
  155. package/dist/chunk-QICFHVRW.js +15 -0
  156. package/dist/chunk-QKEFZRHS.js +166 -0
  157. package/dist/chunk-QWVBEK4P.js +113 -0
  158. package/dist/chunk-R4TBNKKC.js +3217 -0
  159. package/dist/chunk-R64GLVBO.js +2919 -0
  160. package/dist/chunk-R6B6XAKK.js +56 -0
  161. package/dist/chunk-R6RY4Q5T.js +51 -0
  162. package/dist/chunk-RK6MKKKP.js +471 -0
  163. package/dist/chunk-ROTY5J2L.js +25 -0
  164. package/dist/chunk-RRVT4MPS.js +150 -0
  165. package/dist/chunk-SS66Q4VE.js +231 -0
  166. package/dist/chunk-T4RTWMJD.js +310 -0
  167. package/dist/chunk-T6USVBEJ.js +105 -0
  168. package/dist/chunk-TM7LC37P.js +4044 -0
  169. package/dist/chunk-TV45EUGM.js +51 -0
  170. package/dist/chunk-TZDSDDSV.js +233 -0
  171. package/dist/chunk-UBWCUP3G.js +55 -0
  172. package/dist/chunk-UF7TAFJM.js +906 -0
  173. package/dist/chunk-UR7RMZ3R.js +19943 -0
  174. package/dist/chunk-UYYN2IUZ.js +1611 -0
  175. package/dist/chunk-V2TH46ZY.js +66 -0
  176. package/dist/chunk-VKMTFIWS.js +315 -0
  177. package/dist/chunk-VOGCSYOI.js +16 -0
  178. package/dist/chunk-W5OYJMBT.js +41 -0
  179. package/dist/chunk-WARBF2KY.js +296 -0
  180. package/dist/chunk-WGZWR4RF.js +130 -0
  181. package/dist/chunk-WLIIQ2A4.js +18 -0
  182. package/dist/chunk-X4W4XXWP.js +134 -0
  183. package/dist/chunk-XB5RFZHH.js +1217 -0
  184. package/dist/chunk-XEG3FE2R.js +766 -0
  185. package/dist/chunk-XIWYUQZQ.js +583 -0
  186. package/dist/chunk-XKS6THI5.js +31 -0
  187. package/dist/chunk-XKZHAD6Y.js +184 -0
  188. package/dist/chunk-XNYNEEBR.js +214 -0
  189. package/dist/chunk-XPCWQXTY.js +37 -0
  190. package/dist/chunk-XPEEICAO.js +325 -0
  191. package/dist/chunk-XQ3YIV5R.js +3507 -0
  192. package/dist/chunk-XRO65C7V.js +1079 -0
  193. package/dist/chunk-XTVDAHH2.js +203 -0
  194. package/dist/chunk-XZRON6IV.js +131 -0
  195. package/dist/chunk-Y4BRGOJR.js +523 -0
  196. package/dist/chunk-Y5PZHS4K.js +3898 -0
  197. package/dist/chunk-Y7KBQ4BD.js +230 -0
  198. package/dist/chunk-YFSSNGLR.js +277 -0
  199. package/dist/chunk-YGKYFMSL.js +60 -0
  200. package/dist/chunk-YGR6OCHQ.js +345 -0
  201. package/dist/chunk-YIEOFHOL.js +30 -0
  202. package/dist/chunk-YLAJAI2W.js +180 -0
  203. package/dist/chunk-YMOJD5BO.js +50 -0
  204. package/dist/chunk-YPBQNJHA.js +33 -0
  205. package/dist/chunk-YPIEYQF4.js +307 -0
  206. package/dist/chunk-YVLMBAYE.js +221 -0
  207. package/dist/chunk-YXJ4XOHF.js +376 -0
  208. package/dist/chunk-ZE3P35DA.js +1247 -0
  209. package/dist/chunk-ZONE6E3Z.js +32 -0
  210. package/dist/chunk-ZP4FJHR4.js +95 -0
  211. package/dist/chunk-ZZXF6OOJ.js +119 -0
  212. package/dist/files.json +1976 -0
  213. package/dist/fixtures/forge/README.md +19 -0
  214. package/dist/fixtures/forge/expected/discrepancies.yaml +54 -0
  215. package/dist/fixtures/forge/expected/inputs.yaml +38 -0
  216. package/dist/fixtures/forge/expected/scan.yaml +342 -0
  217. package/dist/fixtures/forge/inputs/diagrams/forge-context.drawio +23 -0
  218. package/dist/fixtures/forge/inputs/partner-specs/northwind-pay-openapi.yaml +11 -0
  219. package/dist/fixtures/forge/inputs/tickets/ado-stories.json +4 -0
  220. package/dist/fixtures/forge/inputs/tickets/closed-service-requests.json +5 -0
  221. package/dist/fixtures/forge/inputs/wiki/integration-patterns.md +11 -0
  222. package/dist/fixtures/forge/inputs/wiki/ledger-solution-spec.md +9 -0
  223. package/dist/fixtures/forge/inputs/wiki/snow-firewall-request.md +4 -0
  224. package/dist/fixtures/forge/metarepo/judgments/reaches/84af5b6af24f7ca8c23013f3.yaml +17 -0
  225. package/dist/fixtures/forge/metarepo/judgments/reaches/c3917555edebddce8cecb647.yaml +17 -0
  226. package/dist/fixtures/forge/metarepo/judgments/reaches/c5fafd6601f8ca9e34e0bbd0.yaml +17 -0
  227. package/dist/fixtures/forge/metarepo/org-pack/agents/architecture-critic.yaml +9 -0
  228. package/dist/fixtures/forge/metarepo/org-pack/agents/story-writer.yaml +10 -0
  229. package/dist/fixtures/forge/metarepo/org-pack/checklists/architecture.yaml +115 -0
  230. package/dist/fixtures/forge/metarepo/org-pack/dialects/forge.yaml +111 -0
  231. package/dist/fixtures/forge/metarepo/org-pack/gates.yaml +22 -0
  232. package/dist/fixtures/forge/metarepo/org-pack/pack.yaml +11 -0
  233. package/dist/fixtures/forge/metarepo/org-pack/patterns/A.EB.PUB.yaml +12 -0
  234. package/dist/fixtures/forge/metarepo/org-pack/patterns/D.JDBC.yaml +12 -0
  235. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.DIR.BFF.yaml +12 -0
  236. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.SOR.yaml +13 -0
  237. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.VND.yaml +14 -0
  238. package/dist/fixtures/forge/metarepo/org-pack/process/change-templates/feature.md +37 -0
  239. package/dist/fixtures/forge/metarepo/org-pack/process/skills/add-forge-endpoint/SKILL.md +17 -0
  240. package/dist/fixtures/forge/metarepo/org-pack/process/snow/firewall-rule.yaml +14 -0
  241. package/dist/fixtures/forge/metarepo/org-pack/process/snow/gateway-route.yaml +13 -0
  242. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/profile.yaml +12 -0
  243. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/repos.manifest.yaml +44 -0
  244. package/dist/fixtures/forge/metarepo/org-pack/roles.yaml +14 -0
  245. package/dist/fixtures/forge/metarepo/org-pack/runtime.yaml +14 -0
  246. package/dist/fixtures/forge/metarepo/org-pack/sources.yaml +3 -0
  247. package/dist/fixtures/forge/repos/forge-events/topics/payments.initiated.yaml +4 -0
  248. package/dist/fixtures/forge/repos/forge-events/topics/transfers.completed.yaml +4 -0
  249. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/ledger-v1.xml +3 -0
  250. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/SpikeArrest.xml +3 -0
  251. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/VerifyOAuth.xml +4 -0
  252. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/proxies/default.xml +14 -0
  253. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/targets/ledger.xml +5 -0
  254. package/dist/fixtures/forge/repos/forge-infra/alerts/ledger-api.yaml +5 -0
  255. package/dist/fixtures/forge/repos/forge-infra/k8s/ledger-api.yaml +15 -0
  256. package/dist/fixtures/forge/repos/forge-infra/k8s/portal-bff.yaml +7 -0
  257. package/dist/fixtures/forge/repos/forge-infra/terraform/ledger-db.tf +9 -0
  258. package/dist/fixtures/forge/repos/forge-ledger/api/ledger-openapi.yaml +31 -0
  259. package/dist/fixtures/forge/repos/forge-ledger/forge.yaml +4 -0
  260. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEndpoints.java +13 -0
  261. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEvents.java +11 -0
  262. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/NorthwindClient.java +10 -0
  263. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/application.yml +3 -0
  264. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V1__create_account.sql +5 -0
  265. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V2__create_entry.sql +7 -0
  266. package/dist/fixtures/forge/repos/forge-portal-bff/pom.xml +1 -0
  267. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/AuditPublisher.java +12 -0
  268. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/BalanceController.java +16 -0
  269. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/LedgerClient.java +13 -0
  270. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/PaymentEvents.java +13 -0
  271. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/resources/application.yml +8 -0
  272. package/dist/fixtures/forge/repos/forge-portal-ui/package.json +1 -0
  273. package/dist/fixtures/forge/repos/forge-portal-ui/src/api/balance.ts +5 -0
  274. package/dist/fixtures/forge/repos/forge-reports-job/src/main/java/forge/reports/DailyEntriesJob.java +19 -0
  275. package/dist/fixtures/forge/repos/forge-reports-job/src/main/resources/application.yml +3 -0
  276. package/dist/fixtures/forge-change/README.md +41 -0
  277. package/dist/fixtures/forge-change/expected/findings.yaml +301 -0
  278. package/dist/fixtures/forge-change/expected/stories.yaml +101 -0
  279. package/dist/fixtures/forge-change/judgments/personal-data/0b5f3dbf5257a22275d8c74b.yaml +18 -0
  280. package/dist/fixtures/forge-change/judgments/personal-data/2759a66770134c417440bf2d.yaml +18 -0
  281. package/dist/fixtures/forge-change/judgments/personal-data/31b1ea2f14d0737f1aca79fd.yaml +18 -0
  282. package/dist/fixtures/forge-change/judgments/personal-data/49afd70c08228e65ad6ca1ed.yaml +18 -0
  283. package/dist/fixtures/forge-change/judgments/personal-data/761cabcb8a39f5e5866d2dd6.yaml +18 -0
  284. package/dist/fixtures/forge-change/judgments/personal-data/adae902b90cc8ffa0c765145.yaml +18 -0
  285. package/dist/fixtures/forge-change/judgments/personal-data/ba11bb933105ec9493e065dd.yaml +18 -0
  286. package/dist/fixtures/forge-change/judgments/personal-data/bdbcd1cdac3021c68063c3e7.yaml +18 -0
  287. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/brief.md +35 -0
  288. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/change.yaml +120 -0
  289. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/data.md +18 -0
  290. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/design.md +29 -0
  291. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/interfaces.md +17 -0
  292. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/mappings.md +26 -0
  293. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/proposal.md +35 -0
  294. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/snow.md +12 -0
  295. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/specs/transfer-limits/spec.md +19 -0
  296. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s1-refuse-over-limit.md +17 -0
  297. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s2-show-remaining.md +16 -0
  298. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s3-audit-refusals.md +18 -0
  299. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s4-velocity-check.md +16 -0
  300. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories.md +8 -0
  301. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/tasks.md +12 -0
  302. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/ux.md +7 -0
  303. package/dist/fixtures/forge-change/org-pack/agents/code-and-test-critic.yaml +13 -0
  304. package/dist/fixtures/forge-change/org-pack/agents/complete-critic.yaml +12 -0
  305. package/dist/fixtures/forge-change/org-pack/agents/safe-critic.yaml +12 -0
  306. package/dist/fixtures/forge-change/org-pack/agents/ship-critic.yaml +11 -0
  307. package/dist/fixtures/forge-change/org-pack/agents/true-critic.yaml +11 -0
  308. package/dist/fixtures/forge-change/org-pack/checklists/review.yaml +54 -0
  309. package/dist/fixtures/forge-change/org-pack/gates.yaml +25 -0
  310. package/dist/fixtures/forge-change/org-pack/teams/team-ledger/checklists/ledger-team.yaml +227 -0
  311. package/dist/fixtures/forge-change/recordings/complete-critic/2ad84f84bf39c1d5412697e69fe23034d6983ec45a00314bf0975e627589a3c5.json +12 -0
  312. package/dist/fixtures/forge-change/recordings/complete-critic/417c98d8e54a4387d0fd93441c49f44c2868958739070d855c1dce0c41e24db3.json +12 -0
  313. package/dist/fixtures/forge-change/recordings/complete-critic/50203ee22e9cb3ef047295edb6538fe7d5695e1e4b139f3c929013dc6ce47021.json +12 -0
  314. package/dist/fixtures/forge-change/recordings/complete-critic/89f18d67f5d9c325bf35e2a9e020f9ddb6ee13b8523315037f0905cc57c040b1.json +12 -0
  315. package/dist/fixtures/forge-change/recordings/complete-critic/b4097867d26ae8eadc8b9efa8cdd86897013358035f0b40086c299a59c4ba121.json +12 -0
  316. package/dist/fixtures/forge-change/recordings/safe-critic/302d06f49664dd67ad2e21ab9cf74c1b0f7d3f750709c6ed8eff2b70983274e2.json +12 -0
  317. package/dist/fixtures/forge-change/recordings/safe-critic/32f1049c9a5ab4a759543290db4644ec6e221cc45fdfdcf06193837c6a8ce0b9.json +12 -0
  318. package/dist/fixtures/forge-change/recordings/safe-critic/4e4a84bfc04b9f26ca4250319a879901ff7a1c081c71e46a117675fee05026b0.json +12 -0
  319. package/dist/fixtures/forge-change/recordings/safe-critic/604af0fcdd6df6b76208fa88305fdc15c37606c2a4d1ae816477e46ac8c2dd04.json +12 -0
  320. package/dist/fixtures/forge-change/recordings/safe-critic/f0bf50af11f14c50d07904f0dffe1c8c20fb0cd89770645a8824c1d30a443955.json +12 -0
  321. package/dist/fixtures/forge-change/recordings/ship-critic/350954b58833b2c04880c67db45a1b328b7fd541d9f0d943b63905b8875488a6.json +12 -0
  322. package/dist/fixtures/forge-change/recordings/ship-critic/4af95c6c96a206777cec9de1f9c2d8c55a36ddc9b8db2f81d6eb83217b835efa.json +12 -0
  323. package/dist/fixtures/forge-change/recordings/ship-critic/76c34522a49cf7587a4e5689a5030d384603fa780b8aba97d27815cbc829683e.json +12 -0
  324. package/dist/fixtures/forge-change/recordings/ship-critic/a3b2cd1ace48587e5994333db03b34c3a0f9dec4f1932f1730ddfb687f6918c8.json +12 -0
  325. package/dist/fixtures/forge-change/recordings/ship-critic/de288a4fa64d0fc20890f9a787080ce6eac5203b7b9b72d884df11e8cf111835.json +12 -0
  326. package/dist/fixtures/forge-change/recordings/story-writer/1ddb00eac2aaf91a5ec5d9dfd220116be9f75aec6546a4a3a3b050ed89af2864.json +12 -0
  327. package/dist/packages/assistant-kit/frameworks-kit/README.md +86 -0
  328. package/dist/packages/assistant-kit/frameworks-kit/checklist.md +11 -0
  329. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-lantern.yaml +56 -0
  330. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-platform.yaml +43 -0
  331. package/dist/packages/assistant-kit/frameworks-kit/prompts/write-framework-model.md +12 -0
  332. package/dist/packages/assistant-kit/kit/README.md +98 -0
  333. package/dist/packages/assistant-kit/kit/c2-reference.md +334 -0
  334. package/dist/packages/assistant-kit/kit/checklist.md +39 -0
  335. package/dist/packages/assistant-kit/kit/examples/house-http-client.yaml +102 -0
  336. package/dist/packages/assistant-kit/kit/examples/tide-apigee.yaml +56 -0
  337. package/dist/packages/assistant-kit/kit/examples/tide-apim.yaml +32 -0
  338. package/dist/packages/assistant-kit/kit/examples/tide-kong.yaml +44 -0
  339. package/dist/packages/assistant-kit/kit/prompts/write-dialect.md +34 -0
  340. package/dist/packages/assistant-kit/kit/worked-example.md +198 -0
  341. package/dist/packages/conformance/sample/README.md +4 -0
  342. package/dist/packages/conformance/sample/inputs/notes.md +3 -0
  343. package/dist/packages/conformance/sample/inputs/systems.csv +3 -0
  344. package/dist/packages/conformance/sample/repo/api/greeter.proto +6 -0
  345. package/dist/packages/conformance/sample/repo/api/openapi.yaml +10 -0
  346. package/dist/packages/conformance/sample/repo/api/schema.graphql +3 -0
  347. package/dist/packages/conformance/sample/repo/db/V1__create_greeting.sql +4 -0
  348. package/dist/packages/conformance/sample/repo/package.json +7 -0
  349. package/dist/packages/conformance/sample/repo/src/main/java/sample/HelloController.java +10 -0
  350. package/dist/packages/conformance/sample/repo/web/app.ts +4 -0
  351. package/dist/packages/evals/datasets/critic-lenses.yaml +62 -0
  352. package/dist/packages/evals/datasets/dialect-writer.yaml +14 -0
  353. package/dist/packages/evals/datasets/feature-namer.yaml +34 -0
  354. package/dist/packages/evals/datasets/glossary-definer.yaml +25 -0
  355. package/dist/packages/evals/datasets/story-writer.yaml +13 -0
  356. package/dist/packages/evals/datasets/template-writer.yaml +16 -0
  357. package/dist/packages/evals/datasets/test-writer.yaml +18 -0
  358. package/dist/packages/executors/reference/reference-executor.mjs +233 -0
  359. package/dist/packages/extractors/dialects/argocd.yaml +45 -0
  360. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AccountResource.java +47 -0
  361. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AuditClient.java +12 -0
  362. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/LedgerClient.java +17 -0
  363. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/LedgerClient.java +14 -0
  364. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/RatesClient.java +11 -0
  365. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/StatementController.java +36 -0
  366. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/resources/application.yml +7 -0
  367. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/java/forge/fraud/FraudScorer.java +27 -0
  368. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/resources/application.properties +4 -0
  369. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/api.tf +38 -0
  370. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/main.tf +95 -0
  371. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/terraform.tfvars +1 -0
  372. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/variables.tf +4 -0
  373. package/dist/packages/extractors/dialects/fixtures/terraform-azure/forge-azure-infra/main.tf +102 -0
  374. package/dist/packages/extractors/dialects/fixtures/terraform-gcp/forge-gcp-infra/main.tf +51 -0
  375. package/dist/packages/extractors/dialects/harness.yaml +101 -0
  376. package/dist/packages/extractors/dialects/jaxrs.yaml +155 -0
  377. package/dist/packages/extractors/dialects/micronaut.yaml +207 -0
  378. package/dist/packages/extractors/dialects/quarkus-reactive-messaging.yaml +158 -0
  379. package/dist/packages/extractors/dialects/tekton.yaml +71 -0
  380. package/dist/packages/extractors/dialects/terraform-aws.yaml +267 -0
  381. package/dist/packages/extractors/dialects/terraform-azure.yaml +212 -0
  382. package/dist/packages/extractors/dialects/terraform-gcp.yaml +109 -0
  383. package/dist/packages/extractors/grammars/README.md +11 -0
  384. package/dist/packages/extractors/grammars/tree-sitter-groovy.LICENSE +21 -0
  385. package/dist/packages/extractors/grammars/tree-sitter-groovy.wasm +0 -0
  386. package/dist/packages/extractors/grammars/vendored.json +11 -0
  387. package/dist/packages/learn/lessons/architect-diagrams-and-code.yaml +69 -0
  388. package/dist/packages/learn/lessons/business-analyst-story-bar.yaml +94 -0
  389. package/dist/packages/learn/lessons/delivery-lead-release-readiness.yaml +44 -0
  390. package/dist/packages/learn/lessons/designer-features-in-user-words.yaml +57 -0
  391. package/dist/packages/learn/lessons/developer-find-your-way.yaml +60 -0
  392. package/dist/packages/learn/lessons/everyone-first-hour.yaml +74 -0
  393. package/dist/packages/learn/lessons/platform-lead-coverage-and-defences.yaml +58 -0
  394. package/dist/packages/learn/lessons/product-owner-first-change.yaml +167 -0
  395. package/dist/packages/learn/lessons/qa-tests-and-trace.yaml +53 -0
  396. package/dist/packages/learn/lessons/team-lead-initiative.yaml +146 -0
  397. package/dist/packages/naysayer/constitution/constitution.yaml +305 -0
  398. package/dist/packages/naysayer/starter/review.yaml +256 -0
  399. package/dist/packages/sdk/npm/index.js +9780 -0
  400. package/dist/packages/speckit/rules/drift.yaml +78 -0
  401. package/dist/packages/taskrun/rules/conform.yaml +38 -0
  402. package/dist/packages/testgen/rules/trace.yaml +49 -0
  403. package/dist/packages/ui/dist/assets/elk-api-Mo5w5xCa.js +2 -0
  404. package/dist/packages/ui/dist/assets/elk-worker.min--dAJroGl.js +6401 -0
  405. package/dist/packages/ui/dist/assets/elk-worker.min-DdYmS5kP.js +2 -0
  406. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff +0 -0
  407. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2 +0 -0
  408. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff +0 -0
  409. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2 +0 -0
  410. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2 +0 -0
  411. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff +0 -0
  412. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff +0 -0
  413. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2 +0 -0
  414. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2 +0 -0
  415. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff +0 -0
  416. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff +0 -0
  417. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2 +0 -0
  418. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff +0 -0
  419. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2 +0 -0
  420. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff +0 -0
  421. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2 +0 -0
  422. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff +0 -0
  423. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2 +0 -0
  424. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  425. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  426. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  427. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  428. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  429. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  430. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2 +0 -0
  431. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff +0 -0
  432. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff +0 -0
  433. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2 +0 -0
  434. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff +0 -0
  435. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2 +0 -0
  436. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2 +0 -0
  437. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff +0 -0
  438. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff +0 -0
  439. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2 +0 -0
  440. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff +0 -0
  441. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2 +0 -0
  442. package/dist/packages/ui/dist/assets/index-Bp3XhPHX.css +1 -0
  443. package/dist/packages/ui/dist/assets/index-DM212ZbV.js +29 -0
  444. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  445. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  446. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  447. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  448. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  449. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  450. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  451. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  452. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  453. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  454. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  455. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  456. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  457. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  458. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  459. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  460. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  461. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  462. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-BtY48IV_.woff +0 -0
  463. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-DhS7ScYx.woff2 +0 -0
  464. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-BQQOj9BB.woff2 +0 -0
  465. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-DBRwWuxA.woff +0 -0
  466. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-CXCVEoA9.woff2 +0 -0
  467. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-Dx02qI2_.woff +0 -0
  468. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-BPDUZo87.woff2 +0 -0
  469. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-e0Uj8ZlN.woff +0 -0
  470. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-BleIgkPp.woff +0 -0
  471. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-C9ZjJQAt.woff2 +0 -0
  472. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-BPaQ7tlD.woff +0 -0
  473. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-S6aYESQK.woff2 +0 -0
  474. package/dist/packages/ui/dist/favicon.svg +1 -0
  475. package/dist/packages/ui/dist/index.html +15 -0
  476. package/dist/third-party.json +575 -0
  477. package/dist/vendor/@fission-ai/openspec/bin/openspec.js +85986 -0
  478. package/dist/vendor/@fission-ai/openspec/package.json +82 -0
  479. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/schema.yaml +248 -0
  480. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/design.md +21 -0
  481. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/proposal.md +34 -0
  482. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/spec.md +13 -0
  483. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/tasks.md +11 -0
  484. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-c_sharp.wasm +0 -0
  485. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-go.wasm +0 -0
  486. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-java.wasm +0 -0
  487. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-javascript.wasm +0 -0
  488. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-kotlin.wasm +0 -0
  489. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-php.wasm +0 -0
  490. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-python.wasm +0 -0
  491. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-ruby.wasm +0 -0
  492. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-rust.wasm +0 -0
  493. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-scala.wasm +0 -0
  494. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-tsx.wasm +0 -0
  495. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-typescript.wasm +0 -0
  496. package/dist/vendor/web-tree-sitter/tree-sitter.wasm +0 -0
  497. package/package.json +36 -3
@@ -0,0 +1,115 @@
1
+ # Architecture and release checks for the Forge platform. Contract C3.
2
+ # Hand-written sample; the critic that runs it arrives in M3. Each rule names the
3
+ # seeded discrepancy in fixtures/forge/expected/discrepancies.yaml it should catch.
4
+ schemaVersion: 1
5
+ name: forge-architecture
6
+ version: 0.1.0
7
+ description: Integration, resilience and operability checks for changes on the Forge platform.
8
+ rules:
9
+ - id: vendor-calls-through-gateway
10
+ title: Calls to vendors go through the gateway
11
+ description: Catches d01. Pattern S.GW.VND requires the gateway between a service and an external vendor.
12
+ layer: constitution
13
+ lens: architecture
14
+ appliesTo: { artifacts: [interfaces, catalog] }
15
+ severity: blocking
16
+ check:
17
+ type: deterministic
18
+ check: interface-via-matches-pattern
19
+ params: { pattern: S.GW.VND, via: gateway }
20
+ waivable: false
21
+ source: wiki/integration-patterns.md
22
+ needs:
23
+ - kind: Interface
24
+ field: via
25
+ scope: touched-interfaces
26
+ question: "Does ${record} call the vendor directly or through the gateway?"
27
+
28
+ - id: pattern-code-known
29
+ title: Every pattern code is in the registry
30
+ description: Catches d07. A code that isn't in the pattern registry is usually a typo.
31
+ layer: org
32
+ lens: architecture
33
+ appliesTo: { artifacts: [interfaces] }
34
+ severity: blocking
35
+ check:
36
+ type: deterministic
37
+ check: pattern-code-in-registry
38
+ waivable: true
39
+ source: wiki/integration-patterns.md
40
+
41
+ - id: every-hop-labelled
42
+ title: Every hop names its pattern
43
+ description: Catches d08.
44
+ layer: org
45
+ lens: architecture
46
+ appliesTo: { artifacts: [interfaces] }
47
+ severity: risk
48
+ check:
49
+ type: deterministic
50
+ check: interface-has-pattern
51
+ waivable: false
52
+ source: wiki/integration-patterns.md
53
+
54
+ - id: vendor-timeouts-set
55
+ title: Vendor calls have timeouts and retries
56
+ description: Raises d09 as a knowledge gap when the settings are unknown.
57
+ layer: org
58
+ lens: architecture
59
+ appliesTo: { artifacts: [design, catalog] }
60
+ severity: blocking
61
+ check:
62
+ type: deterministic
63
+ check: settings-present
64
+ params: { settingKinds: [timeout, retry], forVia: [direct, gateway], forBoundary: vendor }
65
+ waivable: true
66
+ source: Platform resilience standard
67
+ needs:
68
+ - kind: Setting
69
+ field: settingKind
70
+ scope: touched-components
71
+ freshForDays: 180
72
+ question: "What timeout and retry settings does ${record} use for its vendor calls?"
73
+
74
+ - id: jobs-have-alerts
75
+ title: Jobs and services have alerts
76
+ description: Raises d10 as a knowledge gap.
77
+ layer: org
78
+ lens: release
79
+ appliesTo: { artifacts: [catalog, release] }
80
+ severity: blocking
81
+ check:
82
+ type: deterministic
83
+ check: observability-present
84
+ params: { assetKinds: [alert] }
85
+ waivable: true
86
+ source: Platform operability standard
87
+ needs:
88
+ - kind: ObservabilityAsset
89
+ scope: touched-components
90
+ question: "What alerts or dashboards exist for ${record}?"
91
+
92
+ - id: story-has-acceptance-criteria
93
+ title: Every story has acceptance criteria
94
+ description: Catches d13.
95
+ layer: constitution
96
+ lens: story
97
+ appliesTo: { artifacts: [stories] }
98
+ severity: blocking
99
+ check:
100
+ type: deterministic
101
+ check: story-has-acceptance-criteria
102
+ waivable: false
103
+ source: Story quality bar
104
+
105
+ - id: design-has-rollback
106
+ title: The design says how to roll back
107
+ layer: team
108
+ lens: delivery
109
+ appliesTo: { artifacts: [design] }
110
+ severity: risk
111
+ check:
112
+ type: ai
113
+ prompt: Read the design's rollout section. Report a finding if it does not say how each repo's change is rolled back, in what order, and what happens to data written in between. Quote the passage you relied on.
114
+ waivable: false
115
+ source: Team practice
@@ -0,0 +1,111 @@
1
+ # The Forge dialect: teaches the scanner the invented in-house Forge framework.
2
+ # Contract C2. Hand-written sample; the rule engine that runs it arrives in M1.
3
+ schemaVersion: 1
4
+ name: forge
5
+ version: 0.1.0
6
+ description: Forge services declare endpoints, clients and events with annotations, and name themselves in forge.yaml.
7
+ extends: []
8
+ appliesTo:
9
+ repoTypes: [forge-service]
10
+ marker: forge.yaml
11
+ layout:
12
+ sourceRoots: [src/main/java]
13
+ configFiles: [src/main/resources/application.yml]
14
+ rules:
15
+ - id: forge-endpoint
16
+ description: A method annotated @ForgeEndpoint serves a REST endpoint of the service named in forge.yaml.
17
+ match:
18
+ annotation: ForgeEndpoint
19
+ target: method
20
+ files: ["src/main/java/**/*.java"]
21
+ emit:
22
+ kind: Endpoint
23
+ id: "${yaml:forge.yaml#service}.${attr.method | lower}-${member.name | slug}"
24
+ fields:
25
+ component: "${yaml:forge.yaml#service}"
26
+ endpointType: rest
27
+ method: "${attr.method | upper}"
28
+ pathOrTopic: "${attr.path}"
29
+ normalizedPath: "${attr.path | normalizePath}"
30
+ auth: "${attr.auth | default('none')}"
31
+ evidence: { source: code, side: callee }
32
+ confidence: verified
33
+
34
+ - id: forge-client-call
35
+ description: A method annotated @ForgeCall in a @ForgeClient interface calls another service directly (not through the gateway).
36
+ match:
37
+ annotation: ForgeCall
38
+ target: method
39
+ files: ["src/main/java/**/*.java"]
40
+ emit:
41
+ kind: Interface
42
+ fields:
43
+ from: "${yaml:forge.yaml#service}"
44
+ to: "${annotation.ForgeClient.service}"
45
+ via: direct
46
+ method: "${attr.method | upper}"
47
+ normalizedPath: "${attr.path | normalizePath}"
48
+ sync: sync
49
+ evidence: { source: code, side: caller }
50
+ confidence: inferred
51
+
52
+ - id: forge-publish
53
+ description: A method annotated @ForgePublish publishes to a topic; the consumer is resolved later from topic configs.
54
+ match:
55
+ annotation: ForgePublish
56
+ target: method
57
+ files: ["src/main/java/**/*.java"]
58
+ emit:
59
+ kind: Unresolved
60
+ id: "${yaml:forge.yaml#service}.publish.${attr.topic | slug}"
61
+ fields:
62
+ unresolvedKind: event-publish
63
+ raw: "${attr.topic}"
64
+ owner: "${yaml:forge.yaml#service}"
65
+ evidence: { source: code, side: caller }
66
+ confidence: inferred
67
+
68
+ - id: forge-subscribe
69
+ description: A method annotated @ForgeSubscribe consumes a topic; the producer is resolved later from topic configs.
70
+ match:
71
+ annotation: ForgeSubscribe
72
+ target: method
73
+ files: ["src/main/java/**/*.java"]
74
+ emit:
75
+ kind: Unresolved
76
+ id: "${yaml:forge.yaml#service}.subscribe.${attr.topic | slug}"
77
+ fields:
78
+ unresolvedKind: event-subscribe
79
+ raw: "${attr.topic}"
80
+ owner: "${yaml:forge.yaml#service}"
81
+ evidence: { source: code, side: callee }
82
+ confidence: inferred
83
+
84
+ tests:
85
+ - name: endpoints and the direct vendor call in forge-ledger
86
+ fixture: ../../../repos/forge-ledger
87
+ expect:
88
+ - kind: Endpoint
89
+ id: ledger-api.get-balance
90
+ method: GET
91
+ pathOrTopic: /accounts/{id}/balance
92
+ normalizedPath: /accounts/{}/balance
93
+ auth: oauth2
94
+ - kind: Endpoint
95
+ id: ledger-api.post-transfer
96
+ method: POST
97
+ pathOrTopic: /transfers
98
+ - kind: Interface
99
+ id: if-e7344c9455608119
100
+ from: ledger-api
101
+ to: northwind-pay
102
+ via: direct
103
+ method: POST
104
+ normalizedPath: /v2/payments
105
+ absent: [ledger-api.get-accounts]
106
+ - name: a service with no forge.yaml produces nothing
107
+ files:
108
+ src/main/java/x/A.java: |
109
+ @ForgeEndpoint(method = "GET", path = "/a")
110
+ public void a() {}
111
+ expect: []
@@ -0,0 +1,22 @@
1
+ schemaVersion: 1
2
+ gates:
3
+ - id: design
4
+ phase: design
5
+ approvers: [architect]
6
+ checklists: [forge-architecture]
7
+ checks: [{ check: openspec-validate }]
8
+ - id: plan
9
+ phase: plan
10
+ approvers: [team-lead]
11
+ checklists: [forge-architecture]
12
+ checks: [{ check: openspec-validate }]
13
+ - id: build
14
+ phase: build
15
+ approvers: [developer]
16
+ checks: [{ check: tests-pass }, { check: coverage, params: { minPercent: 80 } }]
17
+ - id: release
18
+ phase: release
19
+ approvers: [delivery-lead, sre]
20
+ minApprovals: 2
21
+ checklists: [forge-architecture]
22
+ checks: [{ check: snow-requests-closed }]
@@ -0,0 +1,11 @@
1
+ # The Forge org pack (fixture). Contract C6. change-types.yaml and test-strategy.yaml are
2
+ # left out on purpose: the built-in defaults apply until a team writes its own.
3
+ schemaVersion: 1
4
+ name: forge
5
+ version: 0.1.0
6
+ owner: team-platform
7
+ reviewWindowDays: 90
8
+ freshness:
9
+ Setting: 180
10
+ ObservabilityAsset: 180
11
+ Pattern: 365
@@ -0,0 +1,12 @@
1
+ schemaVersion: 1
2
+ code: A.EB.PUB
3
+ name: Asynchronous publish to the event bus
4
+ definition: A service publishes an event to a topic on the event bus.
5
+ interaction: async
6
+ route: event-bus
7
+ targetType: product
8
+ controls: [Schema in the registry, dead-letter topic]
9
+ detection: { via: [event-bus], sync: async, hints: [kafka.send, "@ForgePublish"] }
10
+ source: inputs/wiki/integration-patterns.md
11
+ version: 1.0.0
12
+ status: confirmed
@@ -0,0 +1,12 @@
1
+ schemaVersion: 1
2
+ code: D.JDBC
3
+ name: Direct database access
4
+ definition: A component reads or writes another component's database directly.
5
+ interaction: data-access
6
+ route: jdbc
7
+ targetType: data-store
8
+ controls: [Read-only account, owner approval]
9
+ detection: { hints: [JdbcTemplate, DataSource] }
10
+ source: inputs/wiki/integration-patterns.md
11
+ version: 1.0.0
12
+ status: to-review
@@ -0,0 +1,12 @@
1
+ schemaVersion: 1
2
+ code: S.DIR.BFF
3
+ name: Synchronous, direct from a UI to its own BFF
4
+ definition: A browser application calling its own backend-for-frontend directly.
5
+ interaction: sync
6
+ route: direct
7
+ targetType: product
8
+ controls: [Session auth]
9
+ detection: { via: [direct], sync: sync, sameSystem: true, hints: [fetch, axios] }
10
+ source: inputs/wiki/integration-patterns.md
11
+ version: 1.0.0
12
+ status: confirmed
@@ -0,0 +1,13 @@
1
+ schemaVersion: 1
2
+ code: S.GW.SOR
3
+ name: Synchronous via the gateway to a system of record
4
+ definition: A synchronous call that passes through the gateway to an internal system of record.
5
+ interaction: sync
6
+ route: gateway
7
+ targetType: product
8
+ controls: [OAuth2 at the gateway, timeout under 3 s, circuit breaker]
9
+ resilience: { timeoutMs: 3000, circuitBreaker: true }
10
+ detection: { via: [gateway], sync: sync, targetBoundary: product }
11
+ source: inputs/wiki/integration-patterns.md
12
+ version: 1.0.0
13
+ status: confirmed
@@ -0,0 +1,14 @@
1
+ schemaVersion: 1
2
+ code: S.GW.VND
3
+ name: Synchronous via the gateway to a vendor
4
+ definition: A synchronous call to an external vendor that passes through the gateway.
5
+ interaction: sync
6
+ route: gateway
7
+ targetType: vendor
8
+ controls: [OAuth2 or mTLS at the gateway, timeout, retry with idempotency key]
9
+ resilience: { retries: 2 }
10
+ detection: { via: [gateway], sync: sync, targetBoundary: vendor }
11
+ checklist: [vendor-calls-through-gateway, vendor-timeouts-set]
12
+ source: inputs/wiki/integration-patterns.md
13
+ version: 1.0.0
14
+ status: confirmed
@@ -0,0 +1,37 @@
1
+ ---
2
+ id: feature
3
+ name: New feature (Forge)
4
+ changeType: feature
5
+ description: The Forge platform's brief for a new feature. Replaces the built-in feature template.
6
+ ---
7
+ # {{title}}
8
+
9
+ <!-- Brief for {{id}} ({{type}}), started by {{by}} on {{date}}. Replace every comment with your own words; the proposal is drafted from this file. -->
10
+
11
+ ## Problem
12
+
13
+ <!-- Who has the problem, what it costs them today, and why now. -->
14
+
15
+ ## Outcome
16
+
17
+ <!-- What is true when this is done, in the customer's words. -->
18
+
19
+ ## Scope
20
+
21
+ <!-- In scope, and what is out of scope. -->
22
+
23
+ ## Ledger impact
24
+
25
+ <!-- Does this change balances, transfers or entries in Ledger? Say how, or write "None". -->
26
+
27
+ ## Partners
28
+
29
+ <!-- Does Northwind Pay or another partner need to change anything? Say what, or write "None". -->
30
+
31
+ ## Success measures
32
+
33
+ <!-- How we will know it worked. -->
34
+
35
+ ## Open questions
36
+
37
+ <!-- Anything you don't know yet, and who might. -->
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: add-forge-endpoint
3
+ name: Add an endpoint to a Forge service
4
+ description: How to add a REST endpoint to a service built on the Forge framework, with its OpenAPI entry and tests.
5
+ appliesTo:
6
+ repoTypes: [forge-service]
7
+ artifacts: [tasks]
8
+ owner: team-ledger
9
+ source: inputs/wiki/ledger-solution-spec.md
10
+ status: active
11
+ reviewedAt: 2026-10-01
12
+ ---
13
+
14
+ 1. Add a method annotated `@ForgeEndpoint(method, path, auth)` to the service's endpoints class.
15
+ 2. Add the operation to `api/<service>-openapi.yaml` with the same method and path.
16
+ 3. Write a test that calls the endpoint and checks the response and the error cases.
17
+ 4. If the endpoint is public, raise a gateway route request (process/snow/gateway-route).
@@ -0,0 +1,14 @@
1
+ schemaVersion: 1
2
+ id: firewall-rule
3
+ name: Network firewall rule
4
+ requestType: Network firewall rule
5
+ fields:
6
+ - { name: Source app, required: true, from: "${record}" }
7
+ - { name: Destination host, required: true }
8
+ - { name: Port, required: true }
9
+ - { name: Protocol, required: true }
10
+ - { name: Business justification, required: true }
11
+ approvers: [network team]
12
+ leadTimeDays: 10
13
+ triggers:
14
+ - { kind: Interface, change: planned-new, where: { via: direct } }
@@ -0,0 +1,13 @@
1
+ schemaVersion: 1
2
+ id: gateway-route
3
+ name: New gateway proxy
4
+ requestType: Gateway proxy deployment
5
+ fields:
6
+ - { name: Proxy name, required: true, from: "${record}" }
7
+ - { name: Base path, required: true }
8
+ - { name: Target, required: true }
9
+ approvers: [gateway team]
10
+ leadTimeDays: 5
11
+ triggers:
12
+ - { kind: GatewayRoute, change: planned-new }
13
+ alsoNeeds: [firewall-rule]
@@ -0,0 +1,12 @@
1
+ schemaVersion: 1
2
+ platform: forge
3
+ name: Forge payments platform
4
+ systems:
5
+ - { id: portal, name: Portal, boundary: product, owner: team-portal, aliases: [Portal UI, Portal BFF] }
6
+ - { id: ledger, name: Ledger, boundary: product, owner: team-ledger, aliases: [Ledger Platform] }
7
+ - { id: reports, name: Reports, boundary: product, owner: team-reports, aliases: [Reports Job] }
8
+ - { id: audit, name: Audit, boundary: internal }
9
+ - { id: northwind-pay, name: Northwind Pay, boundary: vendor }
10
+ environments: [dev, test, prod]
11
+ legend: { new: [New], modify: [Modify, Changed], retire: [Retire] }
12
+ gates: [design, release]
@@ -0,0 +1,44 @@
1
+ # The Forge platform's repos. Hand-written; matches fixtures/forge/repos.
2
+ schemaVersion: 1
3
+ platform: forge
4
+ repos:
5
+ - id: forge-portal-ui
6
+ url: https://git.example.com/forge/forge-portal-ui.git
7
+ type: spa
8
+ owner: team-portal
9
+ component: portal-ui
10
+ system: portal
11
+ - id: forge-portal-bff
12
+ url: https://git.example.com/forge/forge-portal-bff.git
13
+ type: spring-boot
14
+ owner: team-portal
15
+ component: portal-bff
16
+ system: portal
17
+ - id: forge-ledger
18
+ url: https://git.example.com/forge/forge-ledger.git
19
+ type: forge-service
20
+ owner: team-ledger
21
+ component: ledger-api
22
+ system: ledger
23
+ dialects: [forge]
24
+ - id: forge-reports-job
25
+ url: https://git.example.com/forge/forge-reports-job.git
26
+ type: spring-batch
27
+ owner: team-reports
28
+ component: reports-job
29
+ system: reports
30
+ - id: forge-gateway
31
+ url: https://git.example.com/forge/forge-gateway.git
32
+ type: gateway
33
+ owner: team-platform
34
+ hosts: [gateway.forge.example]
35
+ sparse: [proxies/ledger-v1]
36
+ - id: forge-events
37
+ url: https://git.example.com/forge/forge-events.git
38
+ type: event-config
39
+ owner: team-platform
40
+ - id: forge-infra
41
+ url: https://git.example.com/forge/forge-infra.git
42
+ defaultBranch: main
43
+ type: infra
44
+ owner: team-platform
@@ -0,0 +1,14 @@
1
+ schemaVersion: 1
2
+ enabledOptional: [data-architect, sre]
3
+ mappings:
4
+ - { group: "Forge Architects", role: architect }
5
+ - { group: "Forge Ledger Team", role: developer }
6
+ - { group: "Forge Platform", role: platform-lead }
7
+ approvals:
8
+ release-go-no-go: { roles: [delivery-lead] }
9
+ waiver: { roles: [architect], groups: ["Forge Architects"] }
10
+ snow-submission: { roles: [delivery-lead] }
11
+ org-pack-change: { roles: [platform-lead] }
12
+ separation:
13
+ - actions: ["author:design", "approve:design"]
14
+ reason: The author of a design can't approve it.
@@ -0,0 +1,14 @@
1
+ schemaVersion: 1
2
+ assistants: { allowed: [copilot, claude-code], default: copilot }
3
+ editors: [vscode, intellij]
4
+ modes: { allowed: [hand-off, headless-claude-code], default: hand-off }
5
+ autonomy:
6
+ default: draft
7
+ capPerRepo: { forge-gateway: plan-only, forge-infra: plan-only }
8
+ budgets: { defaultTokens: 150000 }
9
+ retention: { runsDays: 30 }
10
+ adapters:
11
+ workTracker: { type: mock }
12
+ serviceDesk: { type: mock }
13
+ gitHost: { type: mock }
14
+ notify: { type: mock }
@@ -0,0 +1,3 @@
1
+ schemaVersion: 1
2
+ wikis:
3
+ - { id: forge-wiki, type: markdown-folder, location: ../../inputs/wiki, owner: team-platform }
@@ -0,0 +1,4 @@
1
+ topic: payments.initiated
2
+ producers: [portal-bff]
3
+ consumers: [ledger-api]
4
+ schema: schemas/payment-initiated.avsc
@@ -0,0 +1,4 @@
1
+ topic: transfers.completed
2
+ producers: [ledger-api]
3
+ consumers: [reports-job]
4
+ schema: schemas/transfer-completed.avsc
@@ -0,0 +1,3 @@
1
+ <APIProxy name="ledger-v1">
2
+ <Description>Ledger API, version 1</Description>
3
+ </APIProxy>
@@ -0,0 +1,3 @@
1
+ <SpikeArrest name="SpikeArrest">
2
+ <Rate>100ps</Rate>
3
+ </SpikeArrest>
@@ -0,0 +1,4 @@
1
+ <OAuthV2 name="VerifyOAuth">
2
+ <Operation>VerifyAccessToken</Operation>
3
+ <Scope>ledger.read ledger.write</Scope>
4
+ </OAuthV2>
@@ -0,0 +1,14 @@
1
+ <ProxyEndpoint name="default">
2
+ <PreFlow>
3
+ <Request>
4
+ <Step><Name>VerifyOAuth</Name></Step>
5
+ <Step><Name>SpikeArrest</Name></Step>
6
+ </Request>
7
+ </PreFlow>
8
+ <HTTPProxyConnection>
9
+ <BasePath>/ledger/v1</BasePath>
10
+ </HTTPProxyConnection>
11
+ <RouteRule name="default">
12
+ <TargetEndpoint>ledger</TargetEndpoint>
13
+ </RouteRule>
14
+ </ProxyEndpoint>
@@ -0,0 +1,5 @@
1
+ <TargetEndpoint name="ledger">
2
+ <HTTPTargetConnection>
3
+ <URL>http://ledger-api.forge.internal</URL>
4
+ </HTTPTargetConnection>
5
+ </TargetEndpoint>
@@ -0,0 +1,5 @@
1
+ # Alert definitions kept as code. reports-job has none (seeded gap).
2
+ alerts:
3
+ - name: Ledger API error rate
4
+ component: ledger-api
5
+ expr: rate(http_errors_total{service="ledger-api"}[5m]) > 0.05
@@ -0,0 +1,15 @@
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: ledger-api
5
+ namespace: prod
6
+ spec:
7
+ replicas: 3
8
+ template:
9
+ spec:
10
+ containers:
11
+ - name: ledger-api
12
+ resources:
13
+ limits:
14
+ cpu: "1"
15
+ memory: 1Gi
@@ -0,0 +1,7 @@
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: portal-bff
5
+ namespace: prod
6
+ spec:
7
+ replicas: 2
@@ -0,0 +1,9 @@
1
+ resource "google_sql_database_instance" "ledger_db" {
2
+ name = "ledger-db"
3
+ database_version = "POSTGRES_15"
4
+ settings {
5
+ backup_configuration {
6
+ enabled = true
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,31 @@
1
+ openapi: 3.0.3
2
+ info:
3
+ title: Ledger API
4
+ version: 1.0.0
5
+ paths:
6
+ /accounts/{id}/balance:
7
+ get:
8
+ operationId: getBalance
9
+ security:
10
+ - oauth2: [ledger.read]
11
+ responses:
12
+ "200":
13
+ description: Balance
14
+ /transfers:
15
+ post:
16
+ operationId: createTransfer
17
+ security:
18
+ - oauth2: [ledger.write]
19
+ responses:
20
+ "201":
21
+ description: Created
22
+ components:
23
+ securitySchemes:
24
+ oauth2:
25
+ type: oauth2
26
+ flows:
27
+ clientCredentials:
28
+ tokenUrl: https://auth.forge.example/token
29
+ scopes:
30
+ ledger.read: read balances
31
+ ledger.write: create transfers
@@ -0,0 +1,4 @@
1
+ # Forge service descriptor (the invented in-house framework)
2
+ service: ledger-api
3
+ system: ledger
4
+ framework: forge
@@ -0,0 +1,13 @@
1
+ package forge.ledger;
2
+
3
+ import forge.framework.*;
4
+
5
+ @ForgeService(name = "ledger-api")
6
+ public class LedgerEndpoints {
7
+
8
+ @ForgeEndpoint(method = "GET", path = "/accounts/{id}/balance", auth = "oauth2")
9
+ public Balance balance(String id) { return null; }
10
+
11
+ @ForgeEndpoint(method = "POST", path = "/transfers", auth = "oauth2")
12
+ public TransferResult transfer(TransferRequest request) { return null; }
13
+ }