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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) 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-23W7VWKR.js +2609 -0
  6. package/dist/chunk-2C5B464C.js +106 -0
  7. package/dist/chunk-2LLFKP7C.js +53 -0
  8. package/dist/chunk-2MD7TXSG.js +166 -0
  9. package/dist/chunk-2UIQBDJO.js +131 -0
  10. package/dist/chunk-32MPK524.js +378 -0
  11. package/dist/chunk-3ALD2W2A.js +95 -0
  12. package/dist/chunk-3G4YI4ZU.js +16 -0
  13. package/dist/chunk-4AK7IBVP.js +915 -0
  14. package/dist/chunk-4BMDGTED.js +69 -0
  15. package/dist/chunk-4NDAAFQT.js +103 -0
  16. package/dist/chunk-4Q3NN7VF.js +32 -0
  17. package/dist/chunk-4RS5KZQD.js +25 -0
  18. package/dist/chunk-4SKZDI62.js +22 -0
  19. package/dist/chunk-55YODD3N.js +385 -0
  20. package/dist/chunk-56YQ6ROQ.js +3479 -0
  21. package/dist/chunk-5A5L3T2U.js +583 -0
  22. package/dist/chunk-5FEOD73Z.js +374 -0
  23. package/dist/chunk-5GDRCDQB.js +32 -0
  24. package/dist/chunk-5WS2YOGD.js +95 -0
  25. package/dist/chunk-65NYPGRC.js +766 -0
  26. package/dist/chunk-6BVONWJ7.js +50 -0
  27. package/dist/chunk-6D4FRTFF.js +53 -0
  28. package/dist/chunk-6GPJOFV4.js +149 -0
  29. package/dist/chunk-6JCPI55B.js +92 -0
  30. package/dist/chunk-6JUBZBMW.js +56 -0
  31. package/dist/chunk-6SCVQZX5.js +2522 -0
  32. package/dist/chunk-6TACQN3N.js +41 -0
  33. package/dist/chunk-72TXNLOC.js +496 -0
  34. package/dist/chunk-76WKMA4J.js +14 -0
  35. package/dist/chunk-7EFILTCI.js +67 -0
  36. package/dist/chunk-7EKXJZ2Y.js +2902 -0
  37. package/dist/chunk-7EOBHUMC.js +133 -0
  38. package/dist/chunk-7JUKDRSZ.js +1726 -0
  39. package/dist/chunk-7NN5VWDC.js +43 -0
  40. package/dist/chunk-7UFQZXZA.js +5949 -0
  41. package/dist/chunk-A3KPZJ5M.js +131 -0
  42. package/dist/chunk-A6AC72A5.js +48 -0
  43. package/dist/chunk-A7KZKIZX.js +166 -0
  44. package/dist/chunk-ABWHYWNI.js +101 -0
  45. package/dist/chunk-AFFIK6JI.js +46 -0
  46. package/dist/chunk-AHOQZ4OK.js +37 -0
  47. package/dist/chunk-AVJDSJ2F.js +18 -0
  48. package/dist/chunk-AXXCPAP6.js +203 -0
  49. package/dist/chunk-AY3QXYMB.js +41 -0
  50. package/dist/chunk-B2OKWJIU.js +143 -0
  51. package/dist/chunk-B632FH3I.js +251 -0
  52. package/dist/chunk-BLW4SXCU.js +38 -0
  53. package/dist/chunk-BVS2K73A.js +33 -0
  54. package/dist/chunk-BWZ77RQT.js +25 -0
  55. package/dist/chunk-BYBUDX4T.js +163 -0
  56. package/dist/chunk-BYZCY6SP.js +230 -0
  57. package/dist/chunk-C6EKFH7J.js +169 -0
  58. package/dist/chunk-C6MZFGN7.js +271 -0
  59. package/dist/chunk-CAQZUNOH.js +1150 -0
  60. package/dist/chunk-CD4XHYGY.js +856 -0
  61. package/dist/chunk-CEZQOLEO.js +1217 -0
  62. package/dist/chunk-CHWTETW7.js +128 -0
  63. package/dist/chunk-CMV7TGU6.js +31 -0
  64. package/dist/chunk-CNUKCS2T.js +2741 -0
  65. package/dist/chunk-CP3L3FH7.js +549 -0
  66. package/dist/chunk-CPGCA6GZ.js +41 -0
  67. package/dist/chunk-CWM6KM5G.js +315 -0
  68. package/dist/chunk-CXDSTRUJ.js +873 -0
  69. package/dist/chunk-D3PO4DOZ.js +261 -0
  70. package/dist/chunk-DFBCSHVT.js +69 -0
  71. package/dist/chunk-DHPACDG7.js +104 -0
  72. package/dist/chunk-DPC5Y5DL.js +3898 -0
  73. package/dist/chunk-DPUYDDQG.js +164 -0
  74. package/dist/chunk-DQN7TF5D.js +325 -0
  75. package/dist/chunk-EADP3PEN.js +450 -0
  76. package/dist/chunk-ED2LWWIP.js +878 -0
  77. package/dist/chunk-EHVTK3UE.js +116 -0
  78. package/dist/chunk-EPTBZ3GP.js +101 -0
  79. package/dist/chunk-EXIMEJ2X.js +545 -0
  80. package/dist/chunk-EYWIDJFU.js +130 -0
  81. package/dist/chunk-F44OMYIN.js +54 -0
  82. package/dist/chunk-F7HYOUFF.js +287 -0
  83. package/dist/chunk-FALXWAMD.js +182 -0
  84. package/dist/chunk-FBNPE7HS.js +49 -0
  85. package/dist/chunk-FSWUD5QB.js +108 -0
  86. package/dist/chunk-FVQISWPW.js +296 -0
  87. package/dist/chunk-G2B4ZQGH.js +240 -0
  88. package/dist/chunk-GK6XK5SP.js +1227 -0
  89. package/dist/chunk-GLEBK5L3.js +34 -0
  90. package/dist/chunk-GNB5QDDI.js +25 -0
  91. package/dist/chunk-GQ4N4WKF.js +1142 -0
  92. package/dist/chunk-GRMR5TRQ.js +119 -0
  93. package/dist/chunk-HC6XKREB.js +334 -0
  94. package/dist/chunk-HFQCFSJR.js +60 -0
  95. package/dist/chunk-HJDICQA4.js +102 -0
  96. package/dist/chunk-HLJAXMM4.js +233 -0
  97. package/dist/chunk-HVIMMDVB.js +162 -0
  98. package/dist/chunk-HZVLAPN5.js +32 -0
  99. package/dist/chunk-I3E7CX4H.js +155 -0
  100. package/dist/chunk-IQFTZ37C.js +2919 -0
  101. package/dist/chunk-ITY3VJRX.js +285 -0
  102. package/dist/chunk-JBTK5OP2.js +55 -0
  103. package/dist/chunk-JPGCERE2.js +26 -0
  104. package/dist/chunk-JQDNHIBC.js +38 -0
  105. package/dist/chunk-JRBCWLOR.js +307 -0
  106. package/dist/chunk-JRZQA2JM.js +212 -0
  107. package/dist/chunk-KCBJCA66.js +45 -0
  108. package/dist/chunk-KJPMEAI4.js +705 -0
  109. package/dist/chunk-KQDZXGNR.js +14 -0
  110. package/dist/chunk-KUUQR4HA.js +264 -0
  111. package/dist/chunk-L24C55VN.js +7923 -0
  112. package/dist/chunk-L3BX5ZIB.js +400 -0
  113. package/dist/chunk-L6SGQIR3.js +471 -0
  114. package/dist/chunk-LBENYT3H.js +66 -0
  115. package/dist/chunk-LNAJW6FB.js +47 -0
  116. package/dist/chunk-MC3H7736.js +19910 -0
  117. package/dist/chunk-MMOSZPWJ.js +273 -0
  118. package/dist/chunk-MXCHWULV.js +285 -0
  119. package/dist/chunk-N3E56YPN.js +344 -0
  120. package/dist/chunk-NHFQMOVK.js +180 -0
  121. package/dist/chunk-NQU6KNQF.js +27 -0
  122. package/dist/chunk-OIK5YPTN.js +391 -0
  123. package/dist/chunk-OLWFG75W.js +4330 -0
  124. package/dist/chunk-ONPUIE7Y.js +29 -0
  125. package/dist/chunk-OW7D2PJL.js +376 -0
  126. package/dist/chunk-P63VL4HE.js +2357 -0
  127. package/dist/chunk-PA4YNUMU.js +45 -0
  128. package/dist/chunk-PAMPPUR6.js +4500 -0
  129. package/dist/chunk-PBS3OFNN.js +113 -0
  130. package/dist/chunk-PFT3VTS4.js +214 -0
  131. package/dist/chunk-PFTA6BZF.js +49 -0
  132. package/dist/chunk-PNN5KLAY.js +119 -0
  133. package/dist/chunk-PRPPGYZG.js +104 -0
  134. package/dist/chunk-PUKEZ37F.js +666 -0
  135. package/dist/chunk-Q3HOFXZJ.js +76 -0
  136. package/dist/chunk-Q5AMFEWD.js +119 -0
  137. package/dist/chunk-QKRNMBJO.js +80 -0
  138. package/dist/chunk-QSU47IQ5.js +36 -0
  139. package/dist/chunk-QSXK2RGH.js +688 -0
  140. package/dist/chunk-QXNWYUYI.js +52 -0
  141. package/dist/chunk-R6RY4Q5T.js +51 -0
  142. package/dist/chunk-RCU3MPY2.js +1496 -0
  143. package/dist/chunk-RLIB4JUN.js +174 -0
  144. package/dist/chunk-RYSCLMU3.js +1991 -0
  145. package/dist/chunk-RZUZ4RJJ.js +415 -0
  146. package/dist/chunk-S2A7YC3Q.js +41433 -0
  147. package/dist/chunk-S2FBBX7D.js +540 -0
  148. package/dist/chunk-S34B4QPI.js +430 -0
  149. package/dist/chunk-SETWVXOJ.js +2078 -0
  150. package/dist/chunk-SMA4N4AC.js +211 -0
  151. package/dist/chunk-SP2I63OO.js +252 -0
  152. package/dist/chunk-STHSY74Q.js +242 -0
  153. package/dist/chunk-STUPFGXY.js +3206 -0
  154. package/dist/chunk-T5I4S2W3.js +34 -0
  155. package/dist/chunk-T6AIP7H5.js +3851 -0
  156. package/dist/chunk-TANFV3MZ.js +531 -0
  157. package/dist/chunk-TAVDMUV3.js +189 -0
  158. package/dist/chunk-TBSQJ6IV.js +324 -0
  159. package/dist/chunk-TIZHP7KE.js +408 -0
  160. package/dist/chunk-TV45EUGM.js +51 -0
  161. package/dist/chunk-TW2KPPUC.js +4087 -0
  162. package/dist/chunk-V2YTAIQO.js +1075 -0
  163. package/dist/chunk-V5PKHHQQ.js +1963 -0
  164. package/dist/chunk-VF4IOZZO.js +184 -0
  165. package/dist/chunk-VJTINHZI.js +48 -0
  166. package/dist/chunk-VKLILA2D.js +205 -0
  167. package/dist/chunk-VOGCSYOI.js +16 -0
  168. package/dist/chunk-VPTTCYOC.js +16101 -0
  169. package/dist/chunk-WY6PP6AA.js +53 -0
  170. package/dist/chunk-WYFIXP54.js +174 -0
  171. package/dist/chunk-WZ2BXIGG.js +34 -0
  172. package/dist/chunk-XJNDSYGO.js +147 -0
  173. package/dist/chunk-XPCM366L.js +70 -0
  174. package/dist/chunk-XSQKGVYA.js +69 -0
  175. package/dist/chunk-XUPVB7TL.js +207 -0
  176. package/dist/chunk-XZRON6IV.js +131 -0
  177. package/dist/chunk-Y4NG2FP5.js +94 -0
  178. package/dist/chunk-YEDDOYSC.js +27809 -0
  179. package/dist/chunk-YGMCXNTY.js +41 -0
  180. package/dist/chunk-YJKPTX6J.js +228 -0
  181. package/dist/chunk-YMZ3TNYB.js +18 -0
  182. package/dist/chunk-Z6LF7HQN.js +22 -0
  183. package/dist/chunk-Z7SG32ZY.js +55 -0
  184. package/dist/chunk-ZDPAS56H.js +76 -0
  185. package/dist/chunk-ZJSP24X4.js +1247 -0
  186. package/dist/chunk-ZMAINWBW.js +18 -0
  187. package/dist/chunk-ZMFPW66A.js +22 -0
  188. package/dist/chunk-ZUIAOKXI.js +1611 -0
  189. package/dist/chunk-ZVM6AKKM.js +47 -0
  190. package/dist/files.json +1888 -0
  191. package/dist/fixtures/forge/README.md +19 -0
  192. package/dist/fixtures/forge/expected/discrepancies.yaml +54 -0
  193. package/dist/fixtures/forge/expected/inputs.yaml +38 -0
  194. package/dist/fixtures/forge/expected/scan.yaml +342 -0
  195. package/dist/fixtures/forge/inputs/diagrams/forge-context.drawio +23 -0
  196. package/dist/fixtures/forge/inputs/partner-specs/northwind-pay-openapi.yaml +11 -0
  197. package/dist/fixtures/forge/inputs/tickets/ado-stories.json +4 -0
  198. package/dist/fixtures/forge/inputs/tickets/closed-service-requests.json +5 -0
  199. package/dist/fixtures/forge/inputs/wiki/integration-patterns.md +11 -0
  200. package/dist/fixtures/forge/inputs/wiki/ledger-solution-spec.md +9 -0
  201. package/dist/fixtures/forge/inputs/wiki/snow-firewall-request.md +4 -0
  202. package/dist/fixtures/forge/metarepo/judgments/reaches/84af5b6af24f7ca8c23013f3.yaml +17 -0
  203. package/dist/fixtures/forge/metarepo/judgments/reaches/c3917555edebddce8cecb647.yaml +17 -0
  204. package/dist/fixtures/forge/metarepo/judgments/reaches/c5fafd6601f8ca9e34e0bbd0.yaml +17 -0
  205. package/dist/fixtures/forge/metarepo/org-pack/agents/architecture-critic.yaml +9 -0
  206. package/dist/fixtures/forge/metarepo/org-pack/agents/story-writer.yaml +10 -0
  207. package/dist/fixtures/forge/metarepo/org-pack/checklists/architecture.yaml +115 -0
  208. package/dist/fixtures/forge/metarepo/org-pack/dialects/forge.yaml +111 -0
  209. package/dist/fixtures/forge/metarepo/org-pack/gates.yaml +22 -0
  210. package/dist/fixtures/forge/metarepo/org-pack/pack.yaml +11 -0
  211. package/dist/fixtures/forge/metarepo/org-pack/patterns/A.EB.PUB.yaml +12 -0
  212. package/dist/fixtures/forge/metarepo/org-pack/patterns/D.JDBC.yaml +12 -0
  213. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.DIR.BFF.yaml +12 -0
  214. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.SOR.yaml +13 -0
  215. package/dist/fixtures/forge/metarepo/org-pack/patterns/S.GW.VND.yaml +14 -0
  216. package/dist/fixtures/forge/metarepo/org-pack/process/change-templates/feature.md +37 -0
  217. package/dist/fixtures/forge/metarepo/org-pack/process/skills/add-forge-endpoint/SKILL.md +17 -0
  218. package/dist/fixtures/forge/metarepo/org-pack/process/snow/firewall-rule.yaml +14 -0
  219. package/dist/fixtures/forge/metarepo/org-pack/process/snow/gateway-route.yaml +13 -0
  220. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/profile.yaml +12 -0
  221. package/dist/fixtures/forge/metarepo/org-pack/profiles/forge/repos.manifest.yaml +44 -0
  222. package/dist/fixtures/forge/metarepo/org-pack/roles.yaml +14 -0
  223. package/dist/fixtures/forge/metarepo/org-pack/runtime.yaml +14 -0
  224. package/dist/fixtures/forge/metarepo/org-pack/sources.yaml +3 -0
  225. package/dist/fixtures/forge/repos/forge-events/topics/payments.initiated.yaml +4 -0
  226. package/dist/fixtures/forge/repos/forge-events/topics/transfers.completed.yaml +4 -0
  227. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/ledger-v1.xml +3 -0
  228. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/SpikeArrest.xml +3 -0
  229. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/policies/VerifyOAuth.xml +4 -0
  230. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/proxies/default.xml +14 -0
  231. package/dist/fixtures/forge/repos/forge-gateway/proxies/ledger-v1/apiproxy/targets/ledger.xml +5 -0
  232. package/dist/fixtures/forge/repos/forge-infra/alerts/ledger-api.yaml +5 -0
  233. package/dist/fixtures/forge/repos/forge-infra/k8s/ledger-api.yaml +15 -0
  234. package/dist/fixtures/forge/repos/forge-infra/k8s/portal-bff.yaml +7 -0
  235. package/dist/fixtures/forge/repos/forge-infra/terraform/ledger-db.tf +9 -0
  236. package/dist/fixtures/forge/repos/forge-ledger/api/ledger-openapi.yaml +31 -0
  237. package/dist/fixtures/forge/repos/forge-ledger/forge.yaml +4 -0
  238. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEndpoints.java +13 -0
  239. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/LedgerEvents.java +11 -0
  240. package/dist/fixtures/forge/repos/forge-ledger/src/main/java/forge/ledger/NorthwindClient.java +10 -0
  241. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/application.yml +3 -0
  242. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V1__create_account.sql +5 -0
  243. package/dist/fixtures/forge/repos/forge-ledger/src/main/resources/db/migration/V2__create_entry.sql +7 -0
  244. package/dist/fixtures/forge/repos/forge-portal-bff/pom.xml +1 -0
  245. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/AuditPublisher.java +12 -0
  246. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/BalanceController.java +16 -0
  247. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/LedgerClient.java +13 -0
  248. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/java/forge/portal/PaymentEvents.java +13 -0
  249. package/dist/fixtures/forge/repos/forge-portal-bff/src/main/resources/application.yml +8 -0
  250. package/dist/fixtures/forge/repos/forge-portal-ui/package.json +1 -0
  251. package/dist/fixtures/forge/repos/forge-portal-ui/src/api/balance.ts +5 -0
  252. package/dist/fixtures/forge/repos/forge-reports-job/src/main/java/forge/reports/DailyEntriesJob.java +19 -0
  253. package/dist/fixtures/forge/repos/forge-reports-job/src/main/resources/application.yml +3 -0
  254. package/dist/fixtures/forge-change/README.md +41 -0
  255. package/dist/fixtures/forge-change/expected/findings.yaml +301 -0
  256. package/dist/fixtures/forge-change/expected/stories.yaml +101 -0
  257. package/dist/fixtures/forge-change/judgments/personal-data/0b5f3dbf5257a22275d8c74b.yaml +18 -0
  258. package/dist/fixtures/forge-change/judgments/personal-data/2759a66770134c417440bf2d.yaml +18 -0
  259. package/dist/fixtures/forge-change/judgments/personal-data/31b1ea2f14d0737f1aca79fd.yaml +18 -0
  260. package/dist/fixtures/forge-change/judgments/personal-data/49afd70c08228e65ad6ca1ed.yaml +18 -0
  261. package/dist/fixtures/forge-change/judgments/personal-data/761cabcb8a39f5e5866d2dd6.yaml +18 -0
  262. package/dist/fixtures/forge-change/judgments/personal-data/adae902b90cc8ffa0c765145.yaml +18 -0
  263. package/dist/fixtures/forge-change/judgments/personal-data/ba11bb933105ec9493e065dd.yaml +18 -0
  264. package/dist/fixtures/forge-change/judgments/personal-data/bdbcd1cdac3021c68063c3e7.yaml +18 -0
  265. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/brief.md +35 -0
  266. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/change.yaml +120 -0
  267. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/data.md +18 -0
  268. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/design.md +29 -0
  269. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/interfaces.md +17 -0
  270. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/mappings.md +26 -0
  271. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/proposal.md +35 -0
  272. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/snow.md +12 -0
  273. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/specs/transfer-limits/spec.md +19 -0
  274. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s1-refuse-over-limit.md +17 -0
  275. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s2-show-remaining.md +16 -0
  276. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s3-audit-refusals.md +18 -0
  277. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories/s4-velocity-check.md +16 -0
  278. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/stories.md +8 -0
  279. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/tasks.md +12 -0
  280. package/dist/fixtures/forge-change/openspec/changes/add-transfer-limit/ux.md +7 -0
  281. package/dist/fixtures/forge-change/org-pack/agents/code-and-test-critic.yaml +13 -0
  282. package/dist/fixtures/forge-change/org-pack/agents/complete-critic.yaml +12 -0
  283. package/dist/fixtures/forge-change/org-pack/agents/safe-critic.yaml +12 -0
  284. package/dist/fixtures/forge-change/org-pack/agents/ship-critic.yaml +11 -0
  285. package/dist/fixtures/forge-change/org-pack/agents/true-critic.yaml +11 -0
  286. package/dist/fixtures/forge-change/org-pack/checklists/review.yaml +54 -0
  287. package/dist/fixtures/forge-change/org-pack/gates.yaml +25 -0
  288. package/dist/fixtures/forge-change/org-pack/teams/team-ledger/checklists/ledger-team.yaml +227 -0
  289. package/dist/fixtures/forge-change/recordings/complete-critic/2ad84f84bf39c1d5412697e69fe23034d6983ec45a00314bf0975e627589a3c5.json +12 -0
  290. package/dist/fixtures/forge-change/recordings/complete-critic/417c98d8e54a4387d0fd93441c49f44c2868958739070d855c1dce0c41e24db3.json +12 -0
  291. package/dist/fixtures/forge-change/recordings/complete-critic/50203ee22e9cb3ef047295edb6538fe7d5695e1e4b139f3c929013dc6ce47021.json +12 -0
  292. package/dist/fixtures/forge-change/recordings/complete-critic/89f18d67f5d9c325bf35e2a9e020f9ddb6ee13b8523315037f0905cc57c040b1.json +12 -0
  293. package/dist/fixtures/forge-change/recordings/complete-critic/b4097867d26ae8eadc8b9efa8cdd86897013358035f0b40086c299a59c4ba121.json +12 -0
  294. package/dist/fixtures/forge-change/recordings/safe-critic/302d06f49664dd67ad2e21ab9cf74c1b0f7d3f750709c6ed8eff2b70983274e2.json +12 -0
  295. package/dist/fixtures/forge-change/recordings/safe-critic/32f1049c9a5ab4a759543290db4644ec6e221cc45fdfdcf06193837c6a8ce0b9.json +12 -0
  296. package/dist/fixtures/forge-change/recordings/safe-critic/4e4a84bfc04b9f26ca4250319a879901ff7a1c081c71e46a117675fee05026b0.json +12 -0
  297. package/dist/fixtures/forge-change/recordings/safe-critic/604af0fcdd6df6b76208fa88305fdc15c37606c2a4d1ae816477e46ac8c2dd04.json +12 -0
  298. package/dist/fixtures/forge-change/recordings/safe-critic/f0bf50af11f14c50d07904f0dffe1c8c20fb0cd89770645a8824c1d30a443955.json +12 -0
  299. package/dist/fixtures/forge-change/recordings/ship-critic/350954b58833b2c04880c67db45a1b328b7fd541d9f0d943b63905b8875488a6.json +12 -0
  300. package/dist/fixtures/forge-change/recordings/ship-critic/4af95c6c96a206777cec9de1f9c2d8c55a36ddc9b8db2f81d6eb83217b835efa.json +12 -0
  301. package/dist/fixtures/forge-change/recordings/ship-critic/76c34522a49cf7587a4e5689a5030d384603fa780b8aba97d27815cbc829683e.json +12 -0
  302. package/dist/fixtures/forge-change/recordings/ship-critic/a3b2cd1ace48587e5994333db03b34c3a0f9dec4f1932f1730ddfb687f6918c8.json +12 -0
  303. package/dist/fixtures/forge-change/recordings/ship-critic/de288a4fa64d0fc20890f9a787080ce6eac5203b7b9b72d884df11e8cf111835.json +12 -0
  304. package/dist/fixtures/forge-change/recordings/story-writer/1ddb00eac2aaf91a5ec5d9dfd220116be9f75aec6546a4a3a3b050ed89af2864.json +12 -0
  305. package/dist/packages/assistant-kit/frameworks-kit/README.md +86 -0
  306. package/dist/packages/assistant-kit/frameworks-kit/checklist.md +11 -0
  307. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-lantern.yaml +56 -0
  308. package/dist/packages/assistant-kit/frameworks-kit/examples/tide-platform.yaml +43 -0
  309. package/dist/packages/assistant-kit/frameworks-kit/prompts/write-framework-model.md +12 -0
  310. package/dist/packages/assistant-kit/kit/README.md +98 -0
  311. package/dist/packages/assistant-kit/kit/c2-reference.md +334 -0
  312. package/dist/packages/assistant-kit/kit/checklist.md +39 -0
  313. package/dist/packages/assistant-kit/kit/examples/house-http-client.yaml +102 -0
  314. package/dist/packages/assistant-kit/kit/examples/tide-apigee.yaml +56 -0
  315. package/dist/packages/assistant-kit/kit/examples/tide-apim.yaml +32 -0
  316. package/dist/packages/assistant-kit/kit/examples/tide-kong.yaml +44 -0
  317. package/dist/packages/assistant-kit/kit/prompts/write-dialect.md +34 -0
  318. package/dist/packages/assistant-kit/kit/worked-example.md +198 -0
  319. package/dist/packages/conformance/sample/README.md +4 -0
  320. package/dist/packages/conformance/sample/inputs/notes.md +3 -0
  321. package/dist/packages/conformance/sample/inputs/systems.csv +3 -0
  322. package/dist/packages/conformance/sample/repo/api/greeter.proto +6 -0
  323. package/dist/packages/conformance/sample/repo/api/openapi.yaml +10 -0
  324. package/dist/packages/conformance/sample/repo/api/schema.graphql +3 -0
  325. package/dist/packages/conformance/sample/repo/db/V1__create_greeting.sql +4 -0
  326. package/dist/packages/conformance/sample/repo/package.json +7 -0
  327. package/dist/packages/conformance/sample/repo/src/main/java/sample/HelloController.java +10 -0
  328. package/dist/packages/conformance/sample/repo/web/app.ts +4 -0
  329. package/dist/packages/evals/datasets/critic-lenses.yaml +62 -0
  330. package/dist/packages/evals/datasets/dialect-writer.yaml +14 -0
  331. package/dist/packages/evals/datasets/feature-namer.yaml +34 -0
  332. package/dist/packages/evals/datasets/glossary-definer.yaml +25 -0
  333. package/dist/packages/evals/datasets/story-writer.yaml +13 -0
  334. package/dist/packages/evals/datasets/template-writer.yaml +16 -0
  335. package/dist/packages/evals/datasets/test-writer.yaml +18 -0
  336. package/dist/packages/executors/reference/reference-executor.mjs +233 -0
  337. package/dist/packages/extractors/dialects/argocd.yaml +45 -0
  338. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AccountResource.java +47 -0
  339. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/AuditClient.java +12 -0
  340. package/dist/packages/extractors/dialects/fixtures/jaxrs/accounts-service/src/main/java/forge/accounts/LedgerClient.java +17 -0
  341. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/LedgerClient.java +14 -0
  342. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/RatesClient.java +11 -0
  343. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/java/forge/statements/StatementController.java +36 -0
  344. package/dist/packages/extractors/dialects/fixtures/micronaut/statements-service/src/main/resources/application.yml +7 -0
  345. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/java/forge/fraud/FraudScorer.java +27 -0
  346. package/dist/packages/extractors/dialects/fixtures/quarkus-reactive-messaging/fraud-service/src/main/resources/application.properties +4 -0
  347. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/api.tf +38 -0
  348. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/main.tf +95 -0
  349. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/terraform.tfvars +1 -0
  350. package/dist/packages/extractors/dialects/fixtures/terraform-aws/forge-aws-infra/envs/prod/variables.tf +4 -0
  351. package/dist/packages/extractors/dialects/fixtures/terraform-azure/forge-azure-infra/main.tf +102 -0
  352. package/dist/packages/extractors/dialects/fixtures/terraform-gcp/forge-gcp-infra/main.tf +51 -0
  353. package/dist/packages/extractors/dialects/harness.yaml +101 -0
  354. package/dist/packages/extractors/dialects/jaxrs.yaml +155 -0
  355. package/dist/packages/extractors/dialects/micronaut.yaml +207 -0
  356. package/dist/packages/extractors/dialects/quarkus-reactive-messaging.yaml +158 -0
  357. package/dist/packages/extractors/dialects/tekton.yaml +71 -0
  358. package/dist/packages/extractors/dialects/terraform-aws.yaml +267 -0
  359. package/dist/packages/extractors/dialects/terraform-azure.yaml +212 -0
  360. package/dist/packages/extractors/dialects/terraform-gcp.yaml +109 -0
  361. package/dist/packages/extractors/grammars/README.md +11 -0
  362. package/dist/packages/extractors/grammars/tree-sitter-groovy.LICENSE +21 -0
  363. package/dist/packages/extractors/grammars/tree-sitter-groovy.wasm +0 -0
  364. package/dist/packages/extractors/grammars/vendored.json +11 -0
  365. package/dist/packages/learn/lessons/architect-diagrams-and-code.yaml +69 -0
  366. package/dist/packages/learn/lessons/business-analyst-story-bar.yaml +94 -0
  367. package/dist/packages/learn/lessons/delivery-lead-release-readiness.yaml +44 -0
  368. package/dist/packages/learn/lessons/designer-features-in-user-words.yaml +57 -0
  369. package/dist/packages/learn/lessons/developer-find-your-way.yaml +60 -0
  370. package/dist/packages/learn/lessons/everyone-first-hour.yaml +74 -0
  371. package/dist/packages/learn/lessons/platform-lead-coverage-and-defences.yaml +58 -0
  372. package/dist/packages/learn/lessons/product-owner-first-change.yaml +167 -0
  373. package/dist/packages/learn/lessons/qa-tests-and-trace.yaml +53 -0
  374. package/dist/packages/learn/lessons/team-lead-initiative.yaml +146 -0
  375. package/dist/packages/naysayer/constitution/constitution.yaml +286 -0
  376. package/dist/packages/naysayer/starter/review.yaml +256 -0
  377. package/dist/packages/sdk/npm/index.js +8892 -0
  378. package/dist/packages/speckit/rules/drift.yaml +78 -0
  379. package/dist/packages/taskrun/rules/conform.yaml +38 -0
  380. package/dist/packages/testgen/rules/trace.yaml +49 -0
  381. package/dist/packages/ui/dist/assets/elk-api-tma0MCuh.js +2 -0
  382. package/dist/packages/ui/dist/assets/elk-worker.min--dAJroGl.js +6401 -0
  383. package/dist/packages/ui/dist/assets/elk-worker.min-DdYmS5kP.js +2 -0
  384. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff +0 -0
  385. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2 +0 -0
  386. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff +0 -0
  387. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2 +0 -0
  388. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2 +0 -0
  389. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff +0 -0
  390. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff +0 -0
  391. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2 +0 -0
  392. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2 +0 -0
  393. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff +0 -0
  394. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff +0 -0
  395. package/dist/packages/ui/dist/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2 +0 -0
  396. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff +0 -0
  397. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2 +0 -0
  398. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff +0 -0
  399. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2 +0 -0
  400. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff +0 -0
  401. package/dist/packages/ui/dist/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2 +0 -0
  402. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  403. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  404. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  405. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  406. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  407. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  408. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2 +0 -0
  409. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff +0 -0
  410. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff +0 -0
  411. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2 +0 -0
  412. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff +0 -0
  413. package/dist/packages/ui/dist/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2 +0 -0
  414. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2 +0 -0
  415. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff +0 -0
  416. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff +0 -0
  417. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2 +0 -0
  418. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff +0 -0
  419. package/dist/packages/ui/dist/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2 +0 -0
  420. package/dist/packages/ui/dist/assets/index-B54fm9FQ.js +29 -0
  421. package/dist/packages/ui/dist/assets/index-DD_hufQz.css +1 -0
  422. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  423. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  424. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  425. package/dist/packages/ui/dist/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  426. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  427. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  428. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  429. package/dist/packages/ui/dist/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  430. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  431. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  432. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  433. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  434. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  435. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  436. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  437. package/dist/packages/ui/dist/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  438. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  439. package/dist/packages/ui/dist/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  440. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-BtY48IV_.woff +0 -0
  441. package/dist/packages/ui/dist/assets/rajdhani-devanagari-600-normal-DhS7ScYx.woff2 +0 -0
  442. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-BQQOj9BB.woff2 +0 -0
  443. package/dist/packages/ui/dist/assets/rajdhani-devanagari-700-normal-DBRwWuxA.woff +0 -0
  444. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-CXCVEoA9.woff2 +0 -0
  445. package/dist/packages/ui/dist/assets/rajdhani-latin-600-normal-Dx02qI2_.woff +0 -0
  446. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-BPDUZo87.woff2 +0 -0
  447. package/dist/packages/ui/dist/assets/rajdhani-latin-700-normal-e0Uj8ZlN.woff +0 -0
  448. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-BleIgkPp.woff +0 -0
  449. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-600-normal-C9ZjJQAt.woff2 +0 -0
  450. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-BPaQ7tlD.woff +0 -0
  451. package/dist/packages/ui/dist/assets/rajdhani-latin-ext-700-normal-S6aYESQK.woff2 +0 -0
  452. package/dist/packages/ui/dist/favicon.svg +1 -0
  453. package/dist/packages/ui/dist/index.html +15 -0
  454. package/dist/third-party.json +575 -0
  455. package/dist/vendor/@fission-ai/openspec/bin/openspec.js +85986 -0
  456. package/dist/vendor/@fission-ai/openspec/package.json +82 -0
  457. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/schema.yaml +248 -0
  458. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/design.md +21 -0
  459. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/proposal.md +34 -0
  460. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/spec.md +13 -0
  461. package/dist/vendor/@fission-ai/openspec/schemas/spec-driven/templates/tasks.md +11 -0
  462. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-c_sharp.wasm +0 -0
  463. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-go.wasm +0 -0
  464. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-java.wasm +0 -0
  465. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-javascript.wasm +0 -0
  466. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-kotlin.wasm +0 -0
  467. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-php.wasm +0 -0
  468. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-python.wasm +0 -0
  469. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-ruby.wasm +0 -0
  470. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-rust.wasm +0 -0
  471. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-scala.wasm +0 -0
  472. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-tsx.wasm +0 -0
  473. package/dist/vendor/tree-sitter-wasms/out/tree-sitter-typescript.wasm +0 -0
  474. package/dist/vendor/web-tree-sitter/tree-sitter.wasm +0 -0
  475. package/package.json +36 -3
@@ -0,0 +1,11 @@
1
+ package forge.ledger;
2
+
3
+ import forge.framework.*;
4
+
5
+ public class LedgerEvents {
6
+ @ForgeSubscribe(topic = "payments.initiated")
7
+ public void onPaymentInitiated(Object payment) { }
8
+
9
+ @ForgePublish(topic = "transfers.completed")
10
+ public Object transferCompleted(Object transfer) { return transfer; }
11
+ }
@@ -0,0 +1,10 @@
1
+ package forge.ledger;
2
+
3
+ import forge.framework.*;
4
+
5
+ // Calls the vendor directly. The architecture diagram says this goes through the gateway.
6
+ @ForgeClient(service = "northwind-pay", baseUrl = "${northwind.url}")
7
+ public interface NorthwindClient {
8
+ @ForgeCall(method = "POST", path = "/v2/payments")
9
+ PaymentResult pay(PaymentRequest request);
10
+ }
@@ -0,0 +1,3 @@
1
+ northwind:
2
+ url: https://api.northwind.example
3
+ # No timeout or retry settings for the Northwind client (seeded knowledge gap).
@@ -0,0 +1,5 @@
1
+ CREATE TABLE account (
2
+ id BIGINT PRIMARY KEY,
3
+ account_number VARCHAR(34) NOT NULL,
4
+ holder_name VARCHAR(200) NOT NULL
5
+ );
@@ -0,0 +1,7 @@
1
+ CREATE TABLE entry (
2
+ id BIGINT PRIMARY KEY,
3
+ account_id BIGINT NOT NULL REFERENCES account(id),
4
+ amount NUMERIC(18,2) NOT NULL,
5
+ posted_at TIMESTAMP NOT NULL
6
+ );
7
+ CREATE INDEX idx_entry_account ON entry(account_id);
@@ -0,0 +1 @@
1
+ <project><groupId>forge</groupId><artifactId>forge-portal-bff</artifactId><parent><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version></parent></project>
@@ -0,0 +1,12 @@
1
+ package forge.portal;
2
+
3
+ import org.springframework.web.client.RestTemplate;
4
+
5
+ public class AuditPublisher {
6
+ private final RestTemplate rest = new RestTemplate();
7
+
8
+ public void record(Object event) {
9
+ // Direct call to the audit service; not on the architecture diagram.
10
+ rest.postForObject("${audit.url}/audit/events", event, Void.class);
11
+ }
12
+ }
@@ -0,0 +1,16 @@
1
+ package forge.portal;
2
+
3
+ import org.springframework.web.bind.annotation.*;
4
+
5
+ @RestController
6
+ @RequestMapping("/api")
7
+ public class BalanceController {
8
+ private final LedgerClient ledger;
9
+
10
+ public BalanceController(LedgerClient ledger) { this.ledger = ledger; }
11
+
12
+ @GetMapping("/balance/{accountId}")
13
+ public Balance balance(@PathVariable String accountId) {
14
+ return ledger.getBalance(accountId);
15
+ }
16
+ }
@@ -0,0 +1,13 @@
1
+ package forge.portal;
2
+
3
+ import org.springframework.cloud.openfeign.FeignClient;
4
+ import org.springframework.web.bind.annotation.*;
5
+
6
+ @FeignClient(name = "ledger", url = "${gateway.url}/ledger/v1")
7
+ public interface LedgerClient {
8
+ @GetMapping("/accounts/{id}/balance")
9
+ Balance getBalance(@PathVariable("id") String id);
10
+
11
+ @PostMapping("/transfers")
12
+ TransferResult createTransfer(@RequestBody TransferRequest request);
13
+ }
@@ -0,0 +1,13 @@
1
+ package forge.portal;
2
+
3
+ import org.springframework.kafka.core.KafkaTemplate;
4
+
5
+ public class PaymentEvents {
6
+ private final KafkaTemplate<String, Object> kafka;
7
+
8
+ public PaymentEvents(KafkaTemplate<String, Object> kafka) { this.kafka = kafka; }
9
+
10
+ public void initiated(Object payment) {
11
+ kafka.send("payments.initiated", payment);
12
+ }
13
+ }
@@ -0,0 +1,8 @@
1
+ gateway:
2
+ url: https://gateway.forge.example
3
+ audit:
4
+ url: http://audit-svc.forge.internal
5
+ ledger:
6
+ client:
7
+ read-timeout: 2000ms
8
+ connect-timeout: 500ms
@@ -0,0 +1 @@
1
+ { "name": "forge-portal-ui", "private": true, "dependencies": { "react": "18.3.1" } }
@@ -0,0 +1,5 @@
1
+ // Calls the portal BFF for an account balance.
2
+ export async function getBalance(accountId: string) {
3
+ const res = await fetch(`/api/balance/${accountId}`, { method: "GET" });
4
+ return res.json();
5
+ }
@@ -0,0 +1,19 @@
1
+ package forge.reports;
2
+
3
+ import org.springframework.batch.core.Job;
4
+ import org.springframework.jdbc.core.JdbcTemplate;
5
+ import org.springframework.kafka.annotation.KafkaListener;
6
+
7
+ public class DailyEntriesJob {
8
+ private final JdbcTemplate ledgerDb;
9
+
10
+ public DailyEntriesJob(JdbcTemplate ledgerDb) { this.ledgerDb = ledgerDb; }
11
+
12
+ // Reads the ledger's table directly. The diagram shows reports calling the Ledger API.
13
+ public void run() {
14
+ ledgerDb.query("SELECT account_id, amount, posted_at FROM entry WHERE posted_at >= ?", rs -> {});
15
+ }
16
+
17
+ @KafkaListener(topics = "transfers.completed")
18
+ public void onTransferCompleted(Object transfer) { }
19
+ }
@@ -0,0 +1,3 @@
1
+ spring:
2
+ datasource:
3
+ url: jdbc:postgresql://ledger-db.forge.internal:5432/ledger
@@ -0,0 +1,41 @@
1
+ # Forge change: the M3 exit fixture
2
+
3
+ An invented Forge feature change, `add-transfer-limit`, with every org-flow artifact written by hand and problems seeded on purpose. It runs on top of `fixtures/forge` (org pack and expected catalog), which it never changes.
4
+
5
+ | Folder | What it holds |
6
+ | --- | --- |
7
+ | `openspec/changes/add-transfer-limit/` | The change folder at the plan phase: `change.yaml`, brief, proposal, specs, interfaces, mappings, data, design, UX, stories, tasks and service-desk drafts |
8
+ | `org-pack/` | New org-pack files laid over the Forge pack: the critic's four question agents (`true-critic`, `complete-critic`, `safe-critic`, `ship-critic`), the old `code-and-test-critic` (an org pack that still defines it keeps working), the starter review's two code checks (`checklists/review.yaml`), the Forge gates naming that checklist (`gates.yaml`), and the Ledger team's checklist (`teams/team-ledger/checklists/`) |
9
+ | `recordings/` | Replay recordings for the AI lenses, written by hand as the mock runtime would return them, keyed by agent and prompt hash |
10
+ | `expected/stories.yaml` | The outline the planner's stories must meet for the story bar (stories, gaps they cover, nothing invented); hand-written |
11
+ | `recordings/story-writer/` | Replay recordings for the story writer's prose, written by hand |
12
+ | `expected/findings.yaml` | The seeded problems (12 blocking issues, 14 knowledge gaps), the other findings the critic must raise with the layer that must catch each, and the findings retired with the four questions |
13
+
14
+ The change adds a daily limit to ledger-api's POST /transfers, touches portal-bff, ledger-api, audit-svc and ledger-db, and adds a call to Northwind Pay. Seeded problems include a pattern-code typo, a hop with no pattern, a call to a system the catalog doesn't know, vendor and internal calls with no timeouts, a new table with no migration, retention or personal-data classification, a story without acceptance criteria, a story that addresses AI reviewers, and gaps such as the unknown audit-svc owner and the vendor's unknown rate limit.
15
+
16
+ Rules: the expected file and the recordings are hand-written; never regenerate them from critic output. A changed prompt makes the replay fail with the new prompt hash; update the recording's hash only after checking the hand-written answer still fits the prompt.
17
+
18
+ ## Re-baselined for the four questions (ADR 0124 addendum, Part 4)
19
+
20
+ The critic asks four questions of every draft (is it true to the code, is it complete, is it safe to build, can it ship) with one AI lens per question, instead of seven role lenses. The fixture was re-baselined for it on 2026-10-24.
21
+
22
+ **Retired** (listed under `retired:` in `expected/findings.yaml`; the golden tests check none comes back):
23
+
24
+ | Was | Rule | Why it retired |
25
+ | --- | --- | --- |
26
+ | b11 (no firewall draft), b12 (gateway draft missing its Target) | `constitution.snow-drafts-present` | A service-desk request is a person's manual step now: `atticus plan` drafts snow.md from the same triggers, and `atticus release plan` lists each draft as a request to file, with its missing required fields. The constitution rule is retired; the check stays for an org pack that wants it. |
27
+ | r04 (no error state when the limit can't load) | `ux-states-complete` | The UX lens is gone. The Ledger team's rule is kept in its checklist with `status: retired`; a screen state the specs imply is one of the things the complete lens looks for. |
28
+
29
+ **Kept**: every other seeded blocking issue, caught by the same layer as before (b01 to b10 by code, b13 and b14 by the safe and complete lenses), every seeded gap, and the knowledge needs (slo-known, capacity-known, vendor-rate-limit-known, vendor-contact-known, vendor-operation-known).
30
+
31
+ **Added**: g14 (nothing records how audit-svc authenticates callers of POST /audit/events, `constitution.public-entry-auth`), r06 (the audit call states no timeout, now `review.call-timeout-stated`), r07 and r08 (design.md's rollback names neither table, now `review.store-write-rollback`), and r09 (snow.md now passes layer 1 and reaches the ship lens, which finds no fallback if the gateway proxy request is late, `release-plan-complete`).
32
+
33
+ **The Ledger team's rules** are written for the questions (`lens: safe`, `lens: complete`, …). `tests-cover-scenarios` keeps `lens: code-and-test` with `question: complete`, to show a rule written for the old lens still works, at the gates and at the spec hand-up. The Forge pack under `fixtures/forge` is unchanged and still uses the old lens names, so the fixture also tests that an org pack written for the seven lenses keeps working (its `design-has-rollback`, written for the delivery lens, is the ship lens's).
34
+
35
+ **The recordings were re-made deterministically, with no model.** A new lens prompt has a new sha256, so each question agent's answer was written by hand: complete-critic's is the old business and story lenses' answers together, safe-critic's the old architecture lens's, ship-critic's the old delivery lens's plus r09. Each answer is stored under the hash of every exact prompt its lens sends in the tests (the plain run, the runs that carry `recorded-by-people`, and the M3 exit sandbox), by running those tests once with a replay runtime that wrote the hand-written answer under the prompt hash it was given. The answers were checked against what each lens must find (the `layer: ai` entries of `expected/findings.yaml` whose rules the lens applies); `packages/naysayer/test/golden.test.ts` and `packages/evals` replay them.
36
+
37
+ ## The product owner's decisions (2026-10-24)
38
+
39
+ **Moved, not changed: r06, r07 and r08.** The timeout and rollback checks left the constitution for the starter review (org layer, the organisation's to change), and the auth and breaking checks stay constitution rules. The fixture's org pack carries the starter's two code checks exactly as `packages/naysayer/starter/review.yaml` writes them (`org-pack/checklists/review.yaml`; `packages/naysayer/test/questions.test.ts` holds them equal), without the starter's AI rules, so no lens prompt changes. Because the Forge gates name their checklists, `org-pack/gates.yaml` lays the Forge gates over with `review` named beside `forge-architecture`. So r06 is caught by `review.call-timeout-stated` and r07 and r08 by `review.store-write-rollback`: the same findings at the same lines, still by layer 1 and still risks, with layer `org` instead of `constitution`. g14 stays `constitution.public-entry-auth`. The counts are unchanged: 12 blocking issues and 14 gaps seeded, 8 other findings expected, 3 retired.
40
+
41
+ **Not re-recorded.** No lens prompt of the fixture changed (the moved rules are code checks, and the gate lenses' rules and agents are the same), so its recordings stay as they were; `packages/naysayer/test/golden.test.ts` replays them unchanged. The spec hand-up's review of a task asks the complete question, so its prompt changed (`# Critic: the complete lens (Is it complete?), at hand-up`) and its agent is `complete-critic`; the hand-up tests in `packages/speckit` use a mock model, not recordings. The M3 exit suite's own hand-up answer (`findings: []`) is re-keyed under `packages/m3-exit/test/fixtures/recordings/complete-critic/` with the new prompt's sha256, the same way (hand-written, no model; unchanged, since only the prompt's heading and first paragraph changed), with that suite's re-baseline for g14 and r06 to r08. `code-and-test-critic` stays in the org pack to show an org pack that still defines it keeps working (with no `complete-critic`, the complete lens is made of it).
@@ -0,0 +1,301 @@
1
+ # Seeded problems in the add-transfer-limit change, and what the critic must report at the
2
+ # plan gate (round 1). Hand-written ground truth: never regenerate it from critic output.
3
+ #
4
+ # layer says which critic layer must catch the problem:
5
+ # deterministic - layer 1, zero tokens. Everything that can be checked from files is here.
6
+ # ai - layer 2, a recorded AI lens answer (recordings/). Only judgement calls.
7
+ # A finding matches an entry when its rule, severity and kind match, and its artifact and
8
+ # line (or record) match when the entry gives them.
9
+ #
10
+ # Re-baselined for the critic's four questions (ADR 0124 addendum, Part 4, 2026-10-24): the seven
11
+ # role lenses became four question lenses (true, complete, safe, ship) and the constitution gained
12
+ # the code checks of the four questions. What retired is listed under retired, with why; every
13
+ # other seeded blocking issue is still caught, by the same layer. New entries say "(Part 4)".
14
+ #
15
+ # The product owner's decisions of 2026-10-24: the timeout and rollback checks moved from the
16
+ # constitution to the starter review (org layer, the organisation's to change), which the fixture's
17
+ # org pack carries (org-pack/checklists/review.yaml, named at the gates). r06, r07 and r08 are the
18
+ # same findings, by the same layer, from review.call-timeout-stated and review.store-write-rollback
19
+ # instead of constitution.*; the auth and breaking checks (g14) stay constitution rules.
20
+ change: add-transfer-limit
21
+ gate: plan
22
+
23
+ seeded:
24
+ # ---------------------------------------------------------------- blocking issues
25
+ - id: b01-pattern-typo
26
+ kind: issue
27
+ severity: blocking
28
+ layer: deterministic
29
+ rule: constitution.interface-approved-pattern
30
+ artifact: interfaces.md
31
+ line: 6
32
+ what: GET /accounts/{id}/limit names pattern S.GW.SRO, a typo of S.GW.SOR (architecture).
33
+ - id: b02-hop-without-pattern
34
+ kind: issue
35
+ severity: blocking
36
+ layer: deterministic
37
+ rule: constitution.interface-approved-pattern
38
+ artifact: interfaces.md
39
+ line: 8
40
+ what: The changed hop portal-bff to audit-svc names no pattern code (architecture).
41
+ - id: b03-unknown-system
42
+ kind: issue
43
+ severity: blocking
44
+ layer: deterministic
45
+ rule: constitution.interface-ends-in-catalog
46
+ artifact: interfaces.md
47
+ line: 9
48
+ what: The new hop to risk-engine targets a system the catalog doesn't know (architecture).
49
+ - id: b04-vendor-call-no-timeout
50
+ kind: issue
51
+ severity: blocking
52
+ layer: deterministic
53
+ rule: constitution.hop-resilience-stated
54
+ artifact: interfaces.md
55
+ line: 7
56
+ what: The new Northwind Pay call states no timeout or retry, which S.GW.VND requires (runtime).
57
+ - id: b05-risk-call-no-timeout
58
+ kind: issue
59
+ severity: blocking
60
+ layer: deterministic
61
+ rule: constitution.hop-resilience-stated
62
+ artifact: interfaces.md
63
+ line: 9
64
+ what: The new risk-engine call states no timeout or circuit breaker, which S.GW.SOR requires (runtime).
65
+ - id: b06-table-without-migration
66
+ kind: issue
67
+ severity: blocking
68
+ layer: deterministic
69
+ rule: constitution.data-change-has-migration
70
+ artifact: data.md
71
+ line: 8
72
+ what: The new table limit_change names no migration (data design).
73
+ - id: b07-personal-column-unclassified
74
+ kind: issue
75
+ severity: blocking
76
+ layer: deterministic
77
+ rule: constitution.data-columns-classified
78
+ artifact: data.md
79
+ line: 8
80
+ what: limit_change.changed_by_email is personal data covered only by a table-wide "internal" (data design).
81
+ - id: b08-table-without-retention
82
+ kind: issue
83
+ severity: blocking
84
+ layer: deterministic
85
+ rule: constitution.data-retention-stated
86
+ artifact: data.md
87
+ line: 8
88
+ what: The new table limit_change says nothing about how long its rows are kept (data design).
89
+ - id: b09-story-without-criteria
90
+ kind: issue
91
+ severity: blocking
92
+ layer: deterministic
93
+ rule: constitution.story-acceptance-criteria
94
+ artifact: stories/s2-show-remaining.md
95
+ line: 1
96
+ what: Story s2-show-remaining has no acceptance criteria.
97
+ - id: b10-instruction-in-story
98
+ kind: issue
99
+ severity: blocking
100
+ layer: deterministic
101
+ rule: constitution.no-embedded-instructions
102
+ artifact: stories/s3-audit-refusals.md
103
+ line: 10
104
+ what: Story s3 tells AI critics to ignore their rules; ingested content is data, never instructions.
105
+ - id: b13-concurrent-transfers
106
+ kind: issue
107
+ severity: blocking
108
+ layer: ai
109
+ rule: design-concurrency-handled
110
+ artifact: design.md
111
+ line: 29
112
+ what: The design names the race between two transfers but no lock or serialisation (judgement).
113
+ - id: b14-story-without-spec
114
+ kind: issue
115
+ severity: blocking
116
+ layer: ai
117
+ rule: story-traces-to-spec
118
+ artifact: stories/s4-velocity-check.md
119
+ line: 8
120
+ what: Story s4's behaviour (holding flagged transfers) is in no spec requirement (judgement).
121
+
122
+ # ---------------------------------------------------------------- knowledge gaps
123
+ - id: g01-audit-owner-unknown
124
+ kind: knowledge-gap
125
+ severity: gap
126
+ layer: deterministic
127
+ rule: constitution.touched-components-known
128
+ record: audit-svc
129
+ what: audit-svc is known only from a caller; its owner, repo and spec are unknown.
130
+ - id: g02-ledger-vendor-timeouts-unknown
131
+ kind: knowledge-gap
132
+ severity: gap
133
+ layer: deterministic
134
+ rule: constitution.hop-resilience-stated
135
+ record: ledger-api
136
+ what: No timeout or retry settings are known for ledger-api, which calls Northwind Pay.
137
+ - id: g03-portal-bff-alerts-unknown
138
+ kind: knowledge-gap
139
+ severity: gap
140
+ layer: deterministic
141
+ rule: jobs-have-alerts
142
+ record: portal-bff
143
+ what: No alert is known for portal-bff.
144
+ - id: g04-audit-alerts-unknown
145
+ kind: knowledge-gap
146
+ severity: gap
147
+ layer: deterministic
148
+ rule: jobs-have-alerts
149
+ record: audit-svc
150
+ what: No alert is known for audit-svc.
151
+ - id: g05-vendor-rate-limit-unknown
152
+ kind: knowledge-gap
153
+ severity: gap
154
+ layer: deterministic
155
+ rule: vendor-rate-limit-known
156
+ record: northwind-pay
157
+ what: Northwind Pay's rate limit is unknown.
158
+ - id: g06-vendor-contact-unknown
159
+ kind: knowledge-gap
160
+ severity: gap
161
+ layer: deterministic
162
+ rule: vendor-contact-known
163
+ record: northwind-pay
164
+ what: Nobody is named as the contact at Northwind Pay.
165
+ - id: g07-vendor-operation-unpublished
166
+ kind: knowledge-gap
167
+ severity: gap
168
+ layer: deterministic
169
+ rule: vendor-operation-known
170
+ artifact: interfaces.md
171
+ line: 7
172
+ record: northwind-pay
173
+ what: POST /v2/velocity-checks is not in Northwind Pay's published spec.
174
+ - id: g08-account-retention-unknown
175
+ kind: knowledge-gap
176
+ severity: gap
177
+ layer: deterministic
178
+ rule: constitution.data-retention-stated
179
+ record: ledger-db.account
180
+ what: The retention of ledger-db.account, which the change alters, is unknown.
181
+ - id: g09-ledger-slo-unknown
182
+ kind: knowledge-gap
183
+ severity: gap
184
+ layer: deterministic
185
+ rule: slo-known
186
+ record: ledger
187
+ what: Ledger has no latency SLO, and the change adds work to every transfer.
188
+ - id: g10-portal-slo-unknown
189
+ kind: knowledge-gap
190
+ severity: gap
191
+ layer: deterministic
192
+ rule: slo-known
193
+ record: portal
194
+ what: Portal has no latency SLO.
195
+ - id: g11-ledger-volume-unknown
196
+ kind: knowledge-gap
197
+ severity: gap
198
+ layer: deterministic
199
+ rule: capacity-known
200
+ record: ledger-db
201
+ what: The daily write volume of ledger-db is unknown.
202
+ - id: g12-default-limit-undecided
203
+ kind: knowledge-gap
204
+ severity: gap
205
+ layer: ai
206
+ rule: brief-questions-answered
207
+ artifact: proposal.md
208
+ what: The default limit for existing accounts is an open question no spec answers (judgement).
209
+ - id: g13-vendor-failure-behaviour
210
+ kind: knowledge-gap
211
+ severity: gap
212
+ layer: ai
213
+ rule: brief-questions-answered
214
+ artifact: specs/transfer-limits/spec.md
215
+ what: Nothing says what happens to a transfer when the velocity check flags it or doesn't answer (judgement).
216
+ - id: g14-audit-entry-auth-unknown
217
+ kind: knowledge-gap
218
+ severity: gap
219
+ layer: deterministic
220
+ rule: constitution.public-entry-auth
221
+ artifact: interfaces.md
222
+ line: 8
223
+ what: portal-bff calls audit-svc's POST /audit/events from another system, and nothing records how audit-svc authenticates its callers (Part 4, is it safe).
224
+
225
+ # Not seeded problems, but findings the critic must also raise (risks). Any finding not listed
226
+ # here or above fails the golden test, so noise can't creep in unnoticed.
227
+ alsoExpected:
228
+ - id: r01-mapping-missing
229
+ kind: issue
230
+ severity: risk
231
+ layer: deterministic
232
+ rule: mappings-cover-interfaces
233
+ artifact: mappings.md
234
+ - id: r02-portal-ui-task-missing
235
+ kind: issue
236
+ severity: risk
237
+ layer: deterministic
238
+ rule: tasks-cover-stories
239
+ artifact: tasks.md
240
+ - id: r03-no-rollback
241
+ kind: issue
242
+ severity: risk
243
+ layer: ai
244
+ rule: design-has-rollback
245
+ artifact: design.md
246
+ line: 25
247
+ - id: r05-requests-not-sequenced
248
+ kind: issue
249
+ severity: risk
250
+ layer: ai
251
+ rule: tasks-sequenced-for-lead-times
252
+ artifact: tasks.md
253
+ line: 7
254
+ - id: r06-audit-call-no-timeout
255
+ kind: issue
256
+ severity: risk
257
+ layer: deterministic
258
+ rule: review.call-timeout-stated
259
+ artifact: interfaces.md
260
+ line: 8
261
+ what: The changed portal-bff call to audit-svc is synchronous and states no timeout; no pattern names one for it (Part 4, is it safe; the starter review's rule since 2026-10-24).
262
+ - id: r07-account-write-no-rollback
263
+ kind: issue
264
+ severity: risk
265
+ layer: deterministic
266
+ rule: review.store-write-rollback
267
+ artifact: data.md
268
+ line: 7
269
+ what: The rollback section names neither ledger-db.account nor V3__add_daily_limit.sql (Part 4, can it ship; the starter review's rule since 2026-10-24).
270
+ - id: r08-limit-change-write-no-rollback
271
+ kind: issue
272
+ severity: risk
273
+ layer: deterministic
274
+ rule: review.store-write-rollback
275
+ artifact: data.md
276
+ line: 8
277
+ what: The rollback section says nothing about the new table limit_change (Part 4, can it ship; the starter review's rule since 2026-10-24).
278
+ - id: r09-proxy-request-no-fallback
279
+ kind: issue
280
+ severity: risk
281
+ layer: ai
282
+ rule: release-plan-complete
283
+ artifact: snow.md
284
+ line: 12
285
+ what: snow.md now reaches the ship lens (its service-desk check retired); nothing says what the release does if the gateway proxy request isn't done in time (Part 4, can it ship; judgement).
286
+
287
+ # Retired with the four questions (ADR 0124 addendum, Part 4). The critic must not raise these any
288
+ # more; each line says why. The golden tests check that none of them comes back.
289
+ retired:
290
+ - id: b11-no-firewall-draft
291
+ rule: constitution.snow-drafts-present
292
+ artifact: snow.md
293
+ why: Service-desk requests are a manual step now, and the constitution rule is retired. atticus plan drafts snow.md from the triggers the check read (the firewall rule for gw-northwind-v2 included, its unknown fields left empty and listed), and atticus release plan lists each draft as a request a person files. The critic no longer checks a hand-written snow.md.
294
+ - id: b12-gateway-draft-incomplete
295
+ rule: constitution.snow-drafts-present
296
+ artifact: snow.md
297
+ why: The same retirement. The gateway proxy request's empty Target field shows in atticus release plan as a missing required field of the request, for the person filing it.
298
+ - id: r04-limit-error-state
299
+ rule: ux-states-complete
300
+ artifact: ux.md
301
+ why: The UX lens is gone. The Ledger team's ux-states-complete rule is retired; a screen state the specs imply is one of the things the complete lens looks for under the change's other rules.
@@ -0,0 +1,101 @@
1
+ # The story bar's eval set for add-transfer-limit: what the planner must produce from the
2
+ # approved design (brief, proposal, specs, interfaces, mappings, data, design, UX), with the
3
+ # hand-written stories, tasks and service-desk drafts of the fixture removed first.
4
+ # Hand-written ground truth: never regenerate it from planner output.
5
+ #
6
+ # The story bar (plan, M3 exit): every seeded gap is covered in the stories or raised by the
7
+ # critic; at least 90% of generated stories pass definition of ready with wording-only edits;
8
+ # no invented systems or interfaces.
9
+ change: add-transfer-limit
10
+ minReadyRate: 0.9
11
+
12
+ # One story per spec requirement, then one per new or changed hop no requirement covers, then
13
+ # one per data change no story covers. A hop to a system the catalog doesn't know is not
14
+ # planned (the critic raises it). Repos: both ends of each hop that are product components
15
+ # with a repo, the data store owner's repo, and the UI that calls the BFF when ux.md exists.
16
+ stories:
17
+ - id: s1-daily-transfer-limit
18
+ source: requirement
19
+ traces: specs/transfer-limits/spec.md:3
20
+ systems: [ledger, portal]
21
+ repos: [forge-ledger, forge-portal-bff, forge-portal-ui]
22
+ operations: [POST /transfers]
23
+ records: [ledger-db.account]
24
+ minCriteria: 2
25
+ tests: [unit, contract, integration, e2e, regression, performance]
26
+ dependsOn: []
27
+ - id: s2-remaining-limit
28
+ source: requirement
29
+ traces: specs/transfer-limits/spec.md:14
30
+ systems: [ledger, portal]
31
+ repos: [forge-ledger, forge-portal-bff, forge-portal-ui]
32
+ operations: ["GET /accounts/{id}/limit"]
33
+ records: []
34
+ minCriteria: 1
35
+ tests: [unit, contract, integration, e2e, performance]
36
+ dependsOn: [s1-daily-transfer-limit]
37
+ - id: s3-northwind-pay-velocity-checks
38
+ source: interface
39
+ traces: proposal.md:10
40
+ systems: [ledger, northwind-pay]
41
+ repos: [forge-ledger]
42
+ operations: [POST /v2/velocity-checks]
43
+ records: []
44
+ minCriteria: 1
45
+ tests: [unit, contract, integration, performance, security]
46
+ dependsOn: []
47
+ - id: s4-audit-events
48
+ source: interface
49
+ traces: proposal.md:11
50
+ systems: [audit, portal]
51
+ repos: [forge-portal-bff]
52
+ operations: [POST /audit/events]
53
+ records: []
54
+ minCriteria: 1
55
+ tests: [unit, integration, regression]
56
+ dependsOn: []
57
+ - id: s5-limit-change
58
+ source: data
59
+ traces: proposal.md:11
60
+ systems: [ledger]
61
+ repos: [forge-ledger]
62
+ operations: []
63
+ records: [ledger-db.limit-change]
64
+ minCriteria: 1
65
+ tests: [unit, integration]
66
+ dependsOn: []
67
+
68
+ # Hops the planner must leave out, with the callee it doesn't know.
69
+ notPlanned:
70
+ - { operation: POST /risk/assess, callee: risk-engine }
71
+
72
+ # Service-desk drafts snow.md must hold (template and record), as the org pack's triggers ask.
73
+ snow:
74
+ - { template: gateway-route, record: gw-northwind-v2 }
75
+ - { template: firewall-rule, record: gw-northwind-v2 }
76
+
77
+ # Every seeded knowledge gap of expected/findings.yaml, and what covers it.
78
+ # critic: a finding of the newest plan-gate round with this rule (and record, when given)
79
+ # story: the named story mentions every phrase (case-insensitive)
80
+ gaps:
81
+ - { id: g01-audit-owner-unknown, coveredBy: critic, rule: constitution.touched-components-known, record: audit-svc }
82
+ - { id: g02-ledger-vendor-timeouts-unknown, coveredBy: critic, rule: constitution.hop-resilience-stated, record: ledger-api }
83
+ - { id: g03-portal-bff-alerts-unknown, coveredBy: critic, rule: jobs-have-alerts, record: portal-bff }
84
+ - { id: g04-audit-alerts-unknown, coveredBy: critic, rule: jobs-have-alerts, record: audit-svc }
85
+ - { id: g05-vendor-rate-limit-unknown, coveredBy: critic, rule: vendor-rate-limit-known, record: northwind-pay }
86
+ - { id: g06-vendor-contact-unknown, coveredBy: critic, rule: vendor-contact-known, record: northwind-pay }
87
+ - { id: g07-vendor-operation-unpublished, coveredBy: critic, rule: vendor-operation-known, record: northwind-pay }
88
+ - { id: g08-account-retention-unknown, coveredBy: critic, rule: constitution.data-retention-stated, record: ledger-db.account }
89
+ - { id: g09-ledger-slo-unknown, coveredBy: critic, rule: slo-known, record: ledger }
90
+ - { id: g10-portal-slo-unknown, coveredBy: critic, rule: slo-known, record: portal }
91
+ - { id: g11-ledger-volume-unknown, coveredBy: critic, rule: capacity-known, record: ledger-db }
92
+ - { id: g12-default-limit-undecided, coveredBy: story, story: s1-daily-transfer-limit, mentions: [default limit, existing accounts] }
93
+ - { id: g13-vendor-failure-behaviour, coveredBy: story, story: s3-northwind-pay-velocity-checks, mentions: [northwind-pay, "doesn't answer"] }
94
+
95
+ # Seeded plan problems the generated plan must not repeat: no critic finding of this rule (on
96
+ # files under `artifact`, and whose summary starts with `summaryStartsWith`, when given).
97
+ fixed:
98
+ - { id: b09-story-without-criteria, rule: constitution.story-acceptance-criteria }
99
+ - { id: b10-instruction-in-story, rule: constitution.no-embedded-instructions, artifact: stories/ }
100
+ - { id: b11-no-firewall-draft, rule: constitution.snow-drafts-present, summaryStartsWith: "No " }
101
+ - { id: r02-portal-ui-task-missing, rule: tasks-cover-stories }
@@ -0,0 +1,18 @@
1
+ # A judgment (ADR 0117): personal-data, decided by avery. To override it, change verdict, set confirmedBy to { by: person, name: <your Git user> } and keep what it said under overrides; commit it for review.
2
+ schemaVersion: 1
3
+ kind: personal-data
4
+ key: 0b5f3dbf5257a22275d8c74b
5
+ verdict: no
6
+ at: 2026-10-19T10:00:00Z
7
+ confirmedBy:
8
+ by: person
9
+ name: avery
10
+ inputs:
11
+ column: changed_at
12
+ table: limit_change
13
+ type: timestamp
14
+ v: 1
15
+ quotes:
16
+ - of: column
17
+ text: changed_at
18
+ why: When the limit changed.
@@ -0,0 +1,18 @@
1
+ # A judgment (ADR 0117): personal-data, decided by avery. To override it, change verdict, set confirmedBy to { by: person, name: <your Git user> } and keep what it said under overrides; commit it for review.
2
+ schemaVersion: 1
3
+ kind: personal-data
4
+ key: 2759a66770134c417440bf2d
5
+ verdict: yes
6
+ at: 2026-10-19T10:00:00Z
7
+ confirmedBy:
8
+ by: person
9
+ name: avery
10
+ inputs:
11
+ column: changed_by_email
12
+ table: limit_change
13
+ type: varchar(200)
14
+ v: 1
15
+ quotes:
16
+ - of: column
17
+ text: changed_by_email
18
+ why: The email address of the support agent who changed the limit.
@@ -0,0 +1,18 @@
1
+ # A judgment (ADR 0117): personal-data, decided by avery. To override it, change verdict, set confirmedBy to { by: person, name: <your Git user> } and keep what it said under overrides; commit it for review.
2
+ schemaVersion: 1
3
+ kind: personal-data
4
+ key: 31b1ea2f14d0737f1aca79fd
5
+ verdict: no
6
+ at: 2026-10-19T10:00:00Z
7
+ confirmedBy:
8
+ by: person
9
+ name: avery
10
+ inputs:
11
+ column: changed_by
12
+ table: limit_change
13
+ type: varchar(40)
14
+ v: 1
15
+ quotes:
16
+ - of: column
17
+ text: changed_by
18
+ why: data.md says it holds the support agent's staff id, never a name or an email address, which the bank classes as internal.