@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,212 @@
1
+ # Azure resources in Terraform (azurerm) as catalog records. Shipped with Atticus (C2, ADR 0063).
2
+ #
3
+ # Applies to any repo with a .tf file (repoTypes "*", ADR 0062); values resolve from the
4
+ # folder's variables, tfvars and locals, and through local modules (ADR 0063).
5
+ #
6
+ # What it reads:
7
+ # azurerm_servicebus_queue DataStore, storeType queue (as SQS queues are)
8
+ # azurerm_servicebus_topic, azurerm_eventhub event-topic Endpoints (component unknown,
9
+ # filled by merge from the publishing code)
10
+ # azurerm_linux_function_app, _windows_function_app, azurerm_function_app
11
+ # Component (function) and Deployment
12
+ # azurerm_linux_web_app, _windows_web_app, azurerm_app_service
13
+ # Deployment (platform app-service)
14
+ # azurerm_api_management_api GatewayRoute, with the ids the APIOps dialects use
15
+ # azurerm_cosmosdb_account DataStore, storeType document
16
+ # azurerm_mssql_server DataStore sqlserver (moved from the infra extractor)
17
+ # azurerm_postgresql_flexible_server DataStore postgresql (moved from the infra extractor)
18
+ # azurerm_postgresql_server DataStore postgresql
19
+ # azurerm_mysql_flexible_server DataStore mysql
20
+ # azurerm_redis_cache DataStore cache
21
+ #
22
+ # Left to built-in readers: azurerm_storage_container (cloud-stores). No record:
23
+ # azurerm_kubernetes_cluster. Not read: function triggers (they are in the function's code,
24
+ # read by the serverless extractor), APIM operations and policies.
25
+ #
26
+ # A Deployment's environment is the resource's `env` tag, else "default".
27
+ schemaVersion: 1
28
+ name: terraform-azure
29
+ version: 1.0.0
30
+ description: Azure resources declared in Terraform as queues, topics, stores, functions, deployments and gateway routes.
31
+ appliesTo:
32
+ repoTypes: ["*"]
33
+ marker: "**/*.tf"
34
+ rules:
35
+ # ---- messaging
36
+ - id: servicebus-queue
37
+ description: A Service Bus queue is a queue store.
38
+ match: { hclBlock: resource.azurerm_servicebus_queue, files: ["**/*.tf"] }
39
+ emit:
40
+ kind: DataStore
41
+ id: "${attr.name | slug}"
42
+ fields: { storeType: queue, entitiesHeld: [] }
43
+ evidence: { source: infrastructure }
44
+ confidence: verified
45
+ - id: servicebus-topic
46
+ description: A Service Bus topic is an event topic.
47
+ match: { hclBlock: resource.azurerm_servicebus_topic, files: ["**/*.tf"] }
48
+ emit:
49
+ kind: Endpoint
50
+ id: "topic.${attr.name | slug}"
51
+ fields: { component: unknown, endpointType: event-topic, pathOrTopic: "${attr.name}" }
52
+ evidence: { source: infrastructure, side: definition }
53
+ confidence: verified
54
+ - id: eventhub
55
+ description: An event hub is an event topic.
56
+ match: { hclBlock: resource.azurerm_eventhub, files: ["**/*.tf"] }
57
+ emit:
58
+ kind: Endpoint
59
+ id: "topic.${attr.name | slug}"
60
+ fields: { component: unknown, endpointType: event-topic, pathOrTopic: "${attr.name}" }
61
+ evidence: { source: infrastructure, side: definition }
62
+ confidence: verified
63
+
64
+ # ---- compute
65
+ - id: linux-function-app
66
+ description: A Linux function app is a function component deployed on Azure Functions.
67
+ match: { hclBlock: resource.azurerm_linux_function_app, files: ["**/*.tf"] }
68
+ emit: &function-app
69
+ - kind: Component
70
+ id: "${attr.name | slug}"
71
+ fields:
72
+ system: "${attr.name | slug}"
73
+ repo: "${repo.name}"
74
+ type: function
75
+ runtime: azure-functions
76
+ evidence: { source: infrastructure }
77
+ - kind: Deployment
78
+ id: "${attr.name | slug}.${attr.tags.env | default('default') | slug}"
79
+ fields:
80
+ component: "${attr.name | slug}"
81
+ env: "${attr.tags.env | default('default')}"
82
+ platform: azure-functions
83
+ evidence: { source: infrastructure }
84
+ confidence: verified
85
+ - id: windows-function-app
86
+ description: A Windows function app is a function component deployed on Azure Functions.
87
+ match: { hclBlock: resource.azurerm_windows_function_app, files: ["**/*.tf"] }
88
+ emit: *function-app
89
+ confidence: verified
90
+ - id: function-app
91
+ description: A function app (the older resource type) is a function component deployed on Azure Functions.
92
+ match: { hclBlock: resource.azurerm_function_app, files: ["**/*.tf"] }
93
+ emit: *function-app
94
+ confidence: verified
95
+ - id: linux-web-app
96
+ description: A Linux web app is a deployment on App Service of the component it is named after.
97
+ match: { hclBlock: resource.azurerm_linux_web_app, files: ["**/*.tf"] }
98
+ emit: &web-app
99
+ kind: Deployment
100
+ id: "${attr.name | slug}.${attr.tags.env | default('default') | slug}"
101
+ fields:
102
+ component: "${attr.name | slug}"
103
+ env: "${attr.tags.env | default('default')}"
104
+ platform: app-service
105
+ evidence: { source: infrastructure }
106
+ confidence: verified
107
+ - id: windows-web-app
108
+ description: A Windows web app is a deployment on App Service.
109
+ match: { hclBlock: resource.azurerm_windows_web_app, files: ["**/*.tf"] }
110
+ emit: *web-app
111
+ confidence: verified
112
+ - id: app-service
113
+ description: An app service (the older resource type) is a deployment on App Service.
114
+ match: { hclBlock: resource.azurerm_app_service, files: ["**/*.tf"] }
115
+ emit: *web-app
116
+ confidence: verified
117
+
118
+ # ---- gateway
119
+ - id: api-management-api
120
+ description: An API Management API is a gateway route from its path to its backend.
121
+ match: { hclBlock: resource.azurerm_api_management_api, files: ["**/*.tf"] }
122
+ emit:
123
+ kind: GatewayRoute
124
+ id: "apim-${attr.path | default('') | slug | default('root')}"
125
+ fields:
126
+ proxy: "${attr.display_name}"
127
+ basepath: "/${attr.path | default('') | trimSlash}"
128
+ target: "${attr.service_url}"
129
+ evidence: { source: infrastructure, side: gateway }
130
+ confidence: verified
131
+
132
+ # ---- data
133
+ - id: cosmosdb-account
134
+ description: A Cosmos DB account is a document store.
135
+ match: { hclBlock: resource.azurerm_cosmosdb_account, files: ["**/*.tf"] }
136
+ emit:
137
+ kind: DataStore
138
+ id: "${attr.name | slug}"
139
+ fields: { storeType: document, entitiesHeld: [] }
140
+ evidence: { source: infrastructure }
141
+ confidence: verified
142
+ - id: mssql-server
143
+ description: An Azure SQL server.
144
+ match: { hclBlock: resource.azurerm_mssql_server, files: ["**/*.tf"] }
145
+ emit:
146
+ kind: DataStore
147
+ id: "${attr.name | slug}"
148
+ fields: { storeType: sqlserver, entitiesHeld: [] }
149
+ evidence: { source: infrastructure }
150
+ confidence: verified
151
+ - id: postgresql-flexible-server
152
+ description: An Azure Database for PostgreSQL flexible server.
153
+ match: { hclBlock: resource.azurerm_postgresql_flexible_server, files: ["**/*.tf"] }
154
+ emit:
155
+ kind: DataStore
156
+ id: "${attr.name | slug}"
157
+ fields: { storeType: postgresql, entitiesHeld: [] }
158
+ evidence: { source: infrastructure }
159
+ confidence: verified
160
+ - id: postgresql-server
161
+ description: An Azure Database for PostgreSQL single server.
162
+ match: { hclBlock: resource.azurerm_postgresql_server, files: ["**/*.tf"] }
163
+ emit:
164
+ kind: DataStore
165
+ id: "${attr.name | slug}"
166
+ fields: { storeType: postgresql, entitiesHeld: [] }
167
+ evidence: { source: infrastructure }
168
+ confidence: verified
169
+ - id: mysql-flexible-server
170
+ description: An Azure Database for MySQL flexible server.
171
+ match: { hclBlock: resource.azurerm_mysql_flexible_server, files: ["**/*.tf"] }
172
+ emit:
173
+ kind: DataStore
174
+ id: "${attr.name | slug}"
175
+ fields: { storeType: mysql, entitiesHeld: [] }
176
+ evidence: { source: infrastructure }
177
+ confidence: verified
178
+ - id: redis-cache
179
+ description: An Azure Cache for Redis is a cache.
180
+ match: { hclBlock: resource.azurerm_redis_cache, files: ["**/*.tf"] }
181
+ emit:
182
+ kind: DataStore
183
+ id: "${attr.name | slug}"
184
+ fields: { storeType: cache, entitiesHeld: [] }
185
+ evidence: { source: infrastructure }
186
+ confidence: verified
187
+ tests:
188
+ - name: the Forge Azure estate
189
+ fixture: fixtures/terraform-azure/forge-azure-infra
190
+ expect:
191
+ - { kind: DataStore, id: orders-in, storeType: queue }
192
+ - { kind: Endpoint, id: topic.order-events, pathOrTopic: order-events, component: unknown }
193
+ - { kind: Endpoint, id: topic.device-telemetry, endpointType: event-topic }
194
+ - { kind: Component, id: billing-func, type: function, runtime: azure-functions }
195
+ - { kind: Deployment, id: billing-func.prod, env: prod, platform: azure-functions }
196
+ - { kind: Deployment, id: legacy-billing-func.default, env: default }
197
+ - { kind: Deployment, id: notifier-func.default, platform: azure-functions }
198
+ - { kind: Deployment, id: portal-web.prod, platform: app-service }
199
+ - { kind: Deployment, id: backoffice-web.default, platform: app-service }
200
+ - { kind: Deployment, id: statements-web.default, platform: app-service }
201
+ - kind: GatewayRoute
202
+ id: apim-orders
203
+ proxy: Orders API
204
+ basepath: /orders
205
+ target: "https://orders.forge.internal"
206
+ - { kind: DataStore, id: forge-catalog, storeType: document }
207
+ - { kind: DataStore, id: forge-reports-sql, storeType: sqlserver }
208
+ - { kind: DataStore, id: forge-ledger-pg, storeType: postgresql }
209
+ - { kind: DataStore, id: forge-legacy-pg, storeType: postgresql }
210
+ - { kind: DataStore, id: forge-loyalty-mysql, storeType: mysql }
211
+ - { kind: DataStore, id: forge-sessions, storeType: cache }
212
+ absent: [statements, forge-aks]
@@ -0,0 +1,109 @@
1
+ # Google Cloud resources in Terraform as catalog records. Shipped with Atticus (C2, ADR 0063).
2
+ #
3
+ # Applies to any repo with a .tf file (repoTypes "*", ADR 0062); values resolve from the
4
+ # folder's variables, tfvars and locals, and through local modules (ADR 0063).
5
+ #
6
+ # What it reads:
7
+ # google_sql_database_instance DataStore by database_version (postgresql, mysql, sqlserver,
8
+ # else unknown); moved here from the infra extractor
9
+ # google_redis_instance DataStore, storeType cache
10
+ # google_cloud_tasks_queue DataStore, storeType queue
11
+ # google_spanner_database DataStore, storeType relational, id <instance>-<database>
12
+ #
13
+ # Left to built-in readers, which do more than a rule can (environments from folders, owners
14
+ # from labels and push endpoints, triggers): Cloud Run services, Pub/Sub topics and
15
+ # subscriptions and IAM (gcp extractor), Cloud Functions (serverless), Cloud Scheduler (batch),
16
+ # storage buckets and BigQuery datasets (cloud-stores). No record: google_container_cluster.
17
+ schemaVersion: 1
18
+ name: terraform-gcp
19
+ version: 1.0.0
20
+ description: Google Cloud databases, caches and task queues declared in Terraform as data stores.
21
+ appliesTo:
22
+ repoTypes: ["*"]
23
+ marker: "**/*.tf"
24
+ rules:
25
+ - id: sql-instance-postgresql
26
+ description: A Cloud SQL instance running PostgreSQL.
27
+ match: { hclBlock: resource.google_sql_database_instance, files: ["**/*.tf"] }
28
+ where: [{ value: "${attr.database_version | default('') | lower}", matches: "postgres" }]
29
+ emit:
30
+ kind: DataStore
31
+ id: "${attr.name | slug}"
32
+ fields: { storeType: postgresql, entitiesHeld: [] }
33
+ evidence: { source: infrastructure }
34
+ confidence: verified
35
+ - id: sql-instance-mysql
36
+ description: A Cloud SQL instance running MySQL.
37
+ match: { hclBlock: resource.google_sql_database_instance, files: ["**/*.tf"] }
38
+ where:
39
+ - value: "${attr.database_version | default('') | lower}"
40
+ matches: "^(?!.*postgres).*mysql"
41
+ emit:
42
+ kind: DataStore
43
+ id: "${attr.name | slug}"
44
+ fields: { storeType: mysql, entitiesHeld: [] }
45
+ evidence: { source: infrastructure }
46
+ confidence: verified
47
+ - id: sql-instance-sqlserver
48
+ description: A Cloud SQL instance running SQL Server.
49
+ match: { hclBlock: resource.google_sql_database_instance, files: ["**/*.tf"] }
50
+ where:
51
+ - value: "${attr.database_version | default('') | lower}"
52
+ matches: "^(?!.*(postgres|mysql)).*(mssql|sqlserver)"
53
+ emit:
54
+ kind: DataStore
55
+ id: "${attr.name | slug}"
56
+ fields: { storeType: sqlserver, entitiesHeld: [] }
57
+ evidence: { source: infrastructure }
58
+ confidence: verified
59
+ - id: sql-instance-other
60
+ description: A Cloud SQL instance whose version isn't written or isn't one of the above.
61
+ match: { hclBlock: resource.google_sql_database_instance, files: ["**/*.tf"] }
62
+ where:
63
+ - value: "${attr.database_version | default('') | lower}"
64
+ matches: "^(?!.*(postgres|mysql|mssql|sqlserver))"
65
+ emit:
66
+ kind: DataStore
67
+ id: "${attr.name | slug}"
68
+ fields: { storeType: unknown, entitiesHeld: [] }
69
+ evidence: { source: infrastructure }
70
+ confidence: verified
71
+ - id: redis-instance
72
+ description: A Memorystore for Redis instance is a cache.
73
+ match: { hclBlock: resource.google_redis_instance, files: ["**/*.tf"] }
74
+ emit:
75
+ kind: DataStore
76
+ id: "${attr.name | slug}"
77
+ fields: { storeType: cache, entitiesHeld: [] }
78
+ evidence: { source: infrastructure }
79
+ confidence: verified
80
+ - id: cloud-tasks-queue
81
+ description: A Cloud Tasks queue is a queue store.
82
+ match: { hclBlock: resource.google_cloud_tasks_queue, files: ["**/*.tf"] }
83
+ emit:
84
+ kind: DataStore
85
+ id: "${attr.name | slug}"
86
+ fields: { storeType: queue, entitiesHeld: [] }
87
+ evidence: { source: infrastructure }
88
+ confidence: verified
89
+ - id: spanner-database
90
+ description: A Spanner database is a relational store, named with its instance.
91
+ match: { hclBlock: resource.google_spanner_database, files: ["**/*.tf"] }
92
+ emit:
93
+ kind: DataStore
94
+ id: "${attr.instance | slug}-${attr.name | slug}"
95
+ fields: { storeType: relational, entitiesHeld: [] }
96
+ evidence: { source: infrastructure }
97
+ confidence: verified
98
+ tests:
99
+ - name: the Forge Google Cloud estate
100
+ fixture: fixtures/terraform-gcp/forge-gcp-infra
101
+ expect:
102
+ - { kind: DataStore, id: ledger-db, storeType: postgresql }
103
+ - { kind: DataStore, id: loyalty-db, storeType: mysql }
104
+ - { kind: DataStore, id: reporting-db, storeType: sqlserver }
105
+ - { kind: DataStore, id: scratch-db, storeType: unknown }
106
+ - { kind: DataStore, id: forge-sessions, storeType: cache }
107
+ - { kind: DataStore, id: forge-emails, storeType: queue }
108
+ - { kind: DataStore, id: forge-spanner-accounts, storeType: relational }
109
+ absent: [forge-gke, topic.orders]
@@ -0,0 +1,11 @@
1
+ # Vendored grammars
2
+
3
+ Prebuilt tree-sitter grammars that aren't in `tree-sitter-wasms` (ADR 0060). Each is the `.wasm`
4
+ file from the grammar's published npm package, unchanged, with its licence beside it.
5
+
6
+ | File | From | Licence |
7
+ | ------------------------- | ----------------------------------------------------------------- | ------- |
8
+ | `tree-sitter-groovy.wasm` | `tree-sitter-groovy@0.1.2` (github.com/amaanq/tree-sitter-groovy) | MIT |
9
+
10
+ Vendored rather than depended on: the package also brings a native build (`node-gyp-build`,
11
+ `node-addon-api`, `tree-sitter-java`) with install scripts that Atticus doesn't need.
@@ -0,0 +1,21 @@
1
+ tree-sitter-groovy 0.1.2 (https://github.com/amaanq/tree-sitter-groovy), as published on npm
2
+ with "license": "MIT". The package ships no licence file; this is the MIT licence it declares.
3
+
4
+ MIT License
5
+
6
+ Copyright (c) Amaan Qureshi and the tree-sitter-groovy contributors
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
9
+ associated documentation files (the "Software"), to deal in the Software without restriction,
10
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
11
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in all copies or
15
+ substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
18
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
21
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "name": "tree-sitter-groovy",
4
+ "version": "0.1.2",
5
+ "licence": "MIT",
6
+ "file": "tree-sitter-groovy.wasm",
7
+ "licenceFile": "tree-sitter-groovy.LICENSE",
8
+ "source": "https://github.com/amaanq/tree-sitter-groovy",
9
+ "sha256": "0e68bb48ac166de25c381e05bbfbc90769f25d4709c14e180dd593696a73c197"
10
+ }
11
+ ]
@@ -0,0 +1,69 @@
1
+ schemaVersion: 1
2
+ id: architect-diagrams-and-code
3
+ role: architect
4
+ title: Diagrams against code
5
+ summary: Compare the architect's draw.io diagram with the code, settle a name with an alias, and see the critic catch a pattern typo.
6
+ minutes: 15
7
+ setup: [scan]
8
+ intro: |
9
+ Diagrams drift. Atticus compares them with what the code says and lists every difference as
10
+ an item for a person: edges that go another way, edges only one side knows, names that need
11
+ an alias. Code always wins; a person decides what to do about the drawing. The sandbox was
12
+ scanned for you.
13
+ steps:
14
+ - id: reconcile
15
+ title: Reconcile the diagram
16
+ body: |
17
+ Run reconcile on the Forge context diagram in `inputs/diagrams/`. Read each item: it says
18
+ what differs and what to do about it.
19
+ do: [[reconcile]]
20
+ solution: { answer: Ledger Platform }
21
+ check:
22
+ type: answer
23
+ question: Which name on the diagram needs an alias before its edges match the code?
24
+ truth: { from: fixed, values: [Ledger Platform] }
25
+ hint: Look for the alias-needed item.
26
+ - id: alias
27
+ title: Confirm the alias
28
+ body: |
29
+ Record that the diagram's "Ledger Platform" is the component `ledger-api`. The decision is a
30
+ file in `catalog/curated/`: commit it and every later reconcile uses it.
31
+ do: [[alias, Ledger Platform, ledger-api, --by, ari]]
32
+ check: { type: curated-decision, action: alias, target: ledger-api, includes: Ledger Platform }
33
+ hint: atticus alias "Ledger Platform" ledger-api
34
+ - id: critic
35
+ title: Let the critic read the change
36
+ body: |
37
+ The seeded change `add-transfer-limit` is in Plan. Run the critic on it: the rule checks
38
+ run first, cost nothing and give the same answer every time. One finding is about a
39
+ pattern code in `interfaces.md` that the org pack doesn't have.
40
+ do: [[critic, add-transfer-limit]]
41
+ solution: { answer: S.GW.SRO }
42
+ check:
43
+ type: all
44
+ checks:
45
+ - {
46
+ type: findings,
47
+ change: add-transfer-limit,
48
+ gate: plan,
49
+ rule: constitution.interface-approved-pattern,
50
+ }
51
+ - type: answer
52
+ question: Which pattern code in the change's interfaces.md is not in the org pack?
53
+ truth: { from: unknown-pattern, change: add-transfer-limit }
54
+ hint: Run the critic first, then read the interface-approved-pattern finding.
55
+ - id: waivable
56
+ title: Can it be waived?
57
+ body: |
58
+ Explain the finding. Rules from the built-in constitution are never waivable: the change
59
+ must be fixed.
60
+ do: [[explain, interface-approved-pattern-interfaces-l6]]
61
+ solution: { answer: "no" }
62
+ check:
63
+ type: answer
64
+ question: Can the pattern finding be waived? (yes or no)
65
+ truth: { from: fixed, values: ["no"] }
66
+ hint: The last line of the explanation says what you can do with it.
67
+ outro: |
68
+ You reconciled a diagram, settled a name for good and saw a typo caught before review. Fix
69
+ the typo in interfaces.md and run the critic again to see the finding go.
@@ -0,0 +1,94 @@
1
+ schemaVersion: 1
2
+ id: business-analyst-story-bar
3
+ role: business-analyst
4
+ title: Stories that meet the bar
5
+ summary: Measure the change's stories against the story bar, fix a story without acceptance criteria, and spot text aimed at AI reviewers.
6
+ minutes: 15
7
+ setup: [scan]
8
+ intro: |
9
+ A story is ready when it says who it is for and why, has acceptance criteria in
10
+ Given/When/Then form, names its systems and repos, and names what it depends on. Atticus
11
+ measures that for you (the story bar) and the critic blocks the Plan hand-off on what fails.
12
+ steps:
13
+ - id: bar
14
+ title: Measure the story bar
15
+ body: |
16
+ Measure the seeded change's stories. Each story that isn't ready is listed with what it
17
+ lacks.
18
+ do: [[plan, bar, add-transfer-limit]]
19
+ solution: { answer: s2-show-remaining }
20
+ check:
21
+ type: answer
22
+ question: Which story has no acceptance criteria?
23
+ truth: { from: stories-without-criteria, change: add-transfer-limit }
24
+ hint: Look for "no acceptance criteria in Given/When/Then form".
25
+ - id: fix
26
+ title: Add the acceptance criteria
27
+ body: |
28
+ Open `openspec/changes/add-transfer-limit/stories/s2-show-remaining.md` and add an
29
+ "Acceptance criteria" section with at least one Given/When/Then line.
30
+ solution:
31
+ files:
32
+ - path: openspec/changes/add-transfer-limit/stories/s2-show-remaining.md
33
+ content: |
34
+ # Show the remaining limit
35
+
36
+ As a Portal customer I want to see how much I can still send today so that I don't try a
37
+ transfer that will be refused.
38
+
39
+ ## Acceptance criteria
40
+
41
+ - Given an account with a limit of 1000 that has sent 900 today, when the customer opens the transfer screen, then it shows 100 left today.
42
+
43
+ ## Notes
44
+
45
+ Show it under the amount field on the transfer screen, as in ux.md.
46
+
47
+ ## Systems and repos
48
+
49
+ portal (forge-portal-bff, forge-portal-ui)
50
+
51
+ ## Depends on
52
+
53
+ s1-refuse-over-limit
54
+ check:
55
+ type: file
56
+ path: openspec/changes/add-transfer-limit/stories/s2-show-remaining.md
57
+ contains: ["## Acceptance criteria", "- Given "]
58
+ hint: The section heading is "## Acceptance criteria" and each criterion is a "- Given ..., when ..., then ..." line.
59
+ - id: critic
60
+ title: Run the critic
61
+ body: |
62
+ Run the critic on the change. The story-acceptance-criteria finding is gone from the newest
63
+ round; other findings remain for the architect and the team lead.
64
+ do: [[critic, add-transfer-limit]]
65
+ check:
66
+ type: all
67
+ checks:
68
+ - { type: findings, change: add-transfer-limit, gate: plan, latest: true, min: 1 }
69
+ - {
70
+ type: findings,
71
+ change: add-transfer-limit,
72
+ gate: plan,
73
+ latest: true,
74
+ rule: constitution.story-acceptance-criteria,
75
+ min: 0,
76
+ max: 0,
77
+ }
78
+ hint: Fix the story first, then run atticus critic add-transfer-limit.
79
+ - id: injection
80
+ title: Text aimed at AI reviewers
81
+ body: |
82
+ One story tells AI critics to ignore their rules. Ingested content is data, never
83
+ instructions: the critic blocks it, and Atticus marks or quarantines such text before any
84
+ model sees it. Scan the stories folder with the defences.
85
+ do: [[defences, scan, openspec/changes/add-transfer-limit/stories]]
86
+ solution: { answer: s3-audit-refusals }
87
+ check:
88
+ type: answer
89
+ question: Which story holds an instruction aimed at AI reviewers?
90
+ truth: { from: flagged-files, path: openspec/changes/add-transfer-limit/stories }
91
+ hint: Give the story id (its file name without .md).
92
+ outro: |
93
+ You measured stories against the bar, fixed one and saw how Atticus treats text that tries
94
+ to steer an AI reviewer.
@@ -0,0 +1,44 @@
1
+ schemaVersion: 1
2
+ id: delivery-lead-release-readiness
3
+ role: delivery-lead
4
+ title: Is it ready to release?
5
+ summary: Read a change's state and blockers, see the critic's gate, and ask the archive gate whether it may be archived.
6
+ minutes: 10
7
+ setup: [scan]
8
+ intro: |
9
+ As release manager you need one honest answer: can this go? Atticus reads it from the
10
+ change's state, its hand-off PRs, the critic's open findings at each gate and the code.
11
+ steps:
12
+ - id: status
13
+ title: Where is the change?
14
+ body: |
15
+ Ask for the seeded change's status: its state, the next step, its risk and what blocks it.
16
+ do: [[change, status, add-transfer-limit]]
17
+ solution: { answer: plan }
18
+ check:
19
+ type: answer
20
+ question: Which state is add-transfer-limit in?
21
+ truth: { from: change-state, change: add-transfer-limit }
22
+ hint: Read the State line.
23
+ - id: critic
24
+ title: What does the plan gate say?
25
+ body: |
26
+ Run the critic: blocking findings and open knowledge gaps keep the plan gate closed, and
27
+ the hand-off can't open until they are fixed, answered or (where allowed) waived.
28
+ do: [[critic, add-transfer-limit]]
29
+ check: { type: findings, change: add-transfer-limit, gate: plan, min: 1 }
30
+ hint: atticus critic add-transfer-limit
31
+ - id: archive
32
+ title: Ask the archive gate
33
+ body: |
34
+ The archive gate runs before a change is archived: released, no open blocking finding at
35
+ any gate it was reviewed at, PRs merged and builds passed, no unplanned drift.
36
+ do: [[ci, archive-gate, add-transfer-limit]]
37
+ solution: { answer: "no" }
38
+ check:
39
+ type: answer
40
+ question: May add-transfer-limit be archived now? (yes or no)
41
+ truth: { from: fixed, values: ["no"] }
42
+ hint: The first line says whether it can.
43
+ outro: |
44
+ You read readiness from files alone: no status meetings needed to know what blocks a release.
@@ -0,0 +1,57 @@
1
+ schemaVersion: 1
2
+ id: designer-features-in-user-words
3
+ role: designer
4
+ title: Features in your users' words
5
+ summary: Find the features Atticus detected in code, name one the way customers say it, and draw the context view.
6
+ minutes: 10
7
+ setup: [scan]
8
+ intro: |
9
+ Atticus finds features in code from their entry points (screens, public endpoints, jobs,
10
+ event consumers) and gives them provisional names from paths and class names. People name
11
+ them properly; the name survives every scan.
12
+ steps:
13
+ - id: list
14
+ title: List the features
15
+ body: |
16
+ List the detected features. Each starts at entry points such as an endpoint or an event.
17
+ do: [[feature, list]]
18
+ solution: { answer: feature.transfers }
19
+ check:
20
+ type: answer
21
+ question: Which feature starts at the endpoint ledger-api.post-transfer?
22
+ truth: { from: feature-of, entryPoint: ledger-api.post-transfer }
23
+ hint: atticus feature show <id> lists a feature's entry points.
24
+ - id: name
25
+ title: Name it in your users' words
26
+ body: |
27
+ Customers say "Money transfers". Record that name; it becomes a curated decision.
28
+ do: [[feature, name, feature.transfers, Money transfers, --by, dee]]
29
+ check:
30
+ {
31
+ type: curated-decision,
32
+ action: assert,
33
+ target: feature.transfers,
34
+ includes: Money transfers,
35
+ }
36
+ hint: atticus feature name feature.transfers "Money transfers"
37
+ - id: diagram
38
+ title: Draw the context view
39
+ body: |
40
+ Draw the systems and the calls between them as Mermaid, from the catalog (never by hand).
41
+ do: [[diagram, render, context, --format, mermaid, --out, diagrams/context.mmd]]
42
+ check: { type: file, path: diagrams/context.mmd, contains: ["flowchart", "Northwind Pay"] }
43
+ hint: atticus diagram render context --format mermaid --out diagrams/context.mmd
44
+ - id: ux
45
+ title: Where the screens live in a change
46
+ body: |
47
+ Each change keeps the screens it touches in its own file next to the design. Look at the
48
+ seeded change's folder.
49
+ solution: { answer: ux.md }
50
+ check:
51
+ type: answer
52
+ question: Which file of a change describes its screens and their states?
53
+ truth: { from: fixed, values: [ux.md] }
54
+ hint: openspec/changes/add-transfer-limit/ holds it.
55
+ outro: |
56
+ Named features and generated views keep everyone talking about the same things in the same
57
+ words.