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

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-27NKUS3X.js +4330 -0
  7. package/dist/chunk-2ANOROX3.js +2522 -0
  8. package/dist/chunk-2BF2EYJV.js +174 -0
  9. package/dist/chunk-2BFCZ3RK.js +315 -0
  10. package/dist/chunk-2DIQQJCB.js +378 -0
  11. package/dist/chunk-2RMYG36Q.js +1227 -0
  12. package/dist/chunk-2VHF7OXM.js +55 -0
  13. package/dist/chunk-3ALD2W2A.js +95 -0
  14. package/dist/chunk-3C7EYRFZ.js +41 -0
  15. package/dist/chunk-3G4YI4ZU.js +16 -0
  16. package/dist/chunk-3HI6Z55Y.js +5949 -0
  17. package/dist/chunk-3USYZGRF.js +324 -0
  18. package/dist/chunk-42EVSKME.js +37 -0
  19. package/dist/chunk-4AK7IBVP.js +915 -0
  20. package/dist/chunk-4BKGMUIK.js +53 -0
  21. package/dist/chunk-4BN53TG3.js +343 -0
  22. package/dist/chunk-4NDAAFQT.js +103 -0
  23. package/dist/chunk-4Q3NN7VF.js +32 -0
  24. package/dist/chunk-4RS5KZQD.js +25 -0
  25. package/dist/chunk-4SKZDI62.js +22 -0
  26. package/dist/chunk-4WBVUHXN.js +69 -0
  27. package/dist/chunk-5GDRCDQB.js +32 -0
  28. package/dist/chunk-5GGOLAKC.js +856 -0
  29. package/dist/chunk-5KLGBXG5.js +48 -0
  30. package/dist/chunk-5WG5YP4T.js +34 -0
  31. package/dist/chunk-64EQYWCA.js +180 -0
  32. package/dist/chunk-652QWTLZ.js +242 -0
  33. package/dist/chunk-65NYPGRC.js +766 -0
  34. package/dist/chunk-66YVAGGM.js +46 -0
  35. package/dist/chunk-6BNC6EQ4.js +41 -0
  36. package/dist/chunk-6BVONWJ7.js +50 -0
  37. package/dist/chunk-6D2CQ5II.js +41 -0
  38. package/dist/chunk-6IU67AEK.js +325 -0
  39. package/dist/chunk-6J5OKA4Y.js +49 -0
  40. package/dist/chunk-6JCPI55B.js +92 -0
  41. package/dist/chunk-6JUBZBMW.js +56 -0
  42. package/dist/chunk-6M5NK3K3.js +415 -0
  43. package/dist/chunk-6QSERWXH.js +53 -0
  44. package/dist/chunk-6TACQN3N.js +41 -0
  45. package/dist/chunk-76WKMA4J.js +14 -0
  46. package/dist/chunk-7AVHLZGD.js +45 -0
  47. package/dist/chunk-7EFILTCI.js +67 -0
  48. package/dist/chunk-7EKXJZ2Y.js +2902 -0
  49. package/dist/chunk-7EOBHUMC.js +133 -0
  50. package/dist/chunk-7FBGJFEE.js +66 -0
  51. package/dist/chunk-7JUKDRSZ.js +1726 -0
  52. package/dist/chunk-7SW2QWLU.js +212 -0
  53. package/dist/chunk-7WD63HU2.js +143 -0
  54. package/dist/chunk-7ZUIMTOU.js +108 -0
  55. package/dist/chunk-A3GY6SOA.js +95 -0
  56. package/dist/chunk-A7UPUQFY.js +2356 -0
  57. package/dist/chunk-AA6YULYB.js +376 -0
  58. package/dist/chunk-ABWHYWNI.js +101 -0
  59. package/dist/chunk-AIOQPLA5.js +540 -0
  60. package/dist/chunk-AVJDSJ2F.js +18 -0
  61. package/dist/chunk-B2WLAWNJ.js +374 -0
  62. package/dist/chunk-BKVWTZ6A.js +211 -0
  63. package/dist/chunk-BOHJZTEQ.js +1991 -0
  64. package/dist/chunk-BWZ77RQT.js +25 -0
  65. package/dist/chunk-C6EKFH7J.js +169 -0
  66. package/dist/chunk-CAQZUNOH.js +1150 -0
  67. package/dist/chunk-CEXSU4S6.js +1217 -0
  68. package/dist/chunk-CKSITVS4.js +16101 -0
  69. package/dist/chunk-CNUKCS2T.js +2741 -0
  70. package/dist/chunk-CPA6HPVR.js +3206 -0
  71. package/dist/chunk-CR3MTH32.js +207 -0
  72. package/dist/chunk-CSZ4C5N6.js +307 -0
  73. package/dist/chunk-D3PO4DOZ.js +261 -0
  74. package/dist/chunk-D46WUV3T.js +33 -0
  75. package/dist/chunk-DE76JROX.js +80 -0
  76. package/dist/chunk-DFBCSHVT.js +69 -0
  77. package/dist/chunk-DHPACDG7.js +104 -0
  78. package/dist/chunk-DKJA76CJ.js +113 -0
  79. package/dist/chunk-DPUYDDQG.js +164 -0
  80. package/dist/chunk-DPZHZQKE.js +285 -0
  81. package/dist/chunk-E36QOJMD.js +47 -0
  82. package/dist/chunk-EADP3PEN.js +450 -0
  83. package/dist/chunk-EBEW3XXQ.js +166 -0
  84. package/dist/chunk-EDS2L2LD.js +106 -0
  85. package/dist/chunk-EFHQ3TWP.js +637 -0
  86. package/dist/chunk-EPTBZ3GP.js +101 -0
  87. package/dist/chunk-EYWIDJFU.js +130 -0
  88. package/dist/chunk-F7HYOUFF.js +287 -0
  89. package/dist/chunk-FHH4I4ZV.js +128 -0
  90. package/dist/chunk-FITWGOJ2.js +131 -0
  91. package/dist/chunk-FQXYPF7E.js +147 -0
  92. package/dist/chunk-G2B4ZQGH.js +240 -0
  93. package/dist/chunk-GBRFVT63.js +45 -0
  94. package/dist/chunk-GDLULHTC.js +2919 -0
  95. package/dist/chunk-GLUX4EEP.js +583 -0
  96. package/dist/chunk-GQ4N4WKF.js +1142 -0
  97. package/dist/chunk-GT4I4ZWM.js +38 -0
  98. package/dist/chunk-HFQCFSJR.js +60 -0
  99. package/dist/chunk-HITVBIJS.js +1247 -0
  100. package/dist/chunk-HLJAXMM4.js +233 -0
  101. package/dist/chunk-HVUPKCGJ.js +162 -0
  102. package/dist/chunk-I3E7CX4H.js +155 -0
  103. package/dist/chunk-I4JRCD6M.js +184 -0
  104. package/dist/chunk-ICY36XCH.js +34 -0
  105. package/dist/chunk-IHMLFRVV.js +228 -0
  106. package/dist/chunk-IPKHE5D6.js +1963 -0
  107. package/dist/chunk-J4K3KVLD.js +131 -0
  108. package/dist/chunk-JBTK5OP2.js +55 -0
  109. package/dist/chunk-JCZIKA4C.js +163 -0
  110. package/dist/chunk-JGZCG5VM.js +189 -0
  111. package/dist/chunk-JIITQXFB.js +4087 -0
  112. package/dist/chunk-JMSCMUCA.js +271 -0
  113. package/dist/chunk-JZU3H6UQ.js +54 -0
  114. package/dist/chunk-K65BJIMT.js +49 -0
  115. package/dist/chunk-KEM4SDDP.js +3898 -0
  116. package/dist/chunk-KQDZXGNR.js +14 -0
  117. package/dist/chunk-L24C55VN.js +7923 -0
  118. package/dist/chunk-L6SGQIR3.js +471 -0
  119. package/dist/chunk-LR3R6Z2A.js +400 -0
  120. package/dist/chunk-M766ZJ6W.js +119 -0
  121. package/dist/chunk-MC3H7736.js +19910 -0
  122. package/dist/chunk-MGYZM27B.js +205 -0
  123. package/dist/chunk-MMOSZPWJ.js +273 -0
  124. package/dist/chunk-MVZVGYXH.js +1611 -0
  125. package/dist/chunk-N7IXEHK3.js +549 -0
  126. package/dist/chunk-NE2W3OO7.js +230 -0
  127. package/dist/chunk-NN2ZQEB4.js +38 -0
  128. package/dist/chunk-NXFPS2LR.js +182 -0
  129. package/dist/chunk-O3WI5KWW.js +31 -0
  130. package/dist/chunk-OLQJTJJU.js +76 -0
  131. package/dist/chunk-ONLS5QA5.js +102 -0
  132. package/dist/chunk-OT2O76OS.js +1496 -0
  133. package/dist/chunk-PAMPPUR6.js +4500 -0
  134. package/dist/chunk-PCOCACY3.js +385 -0
  135. package/dist/chunk-PCVDV3UZ.js +430 -0
  136. package/dist/chunk-PRPPGYZG.js +104 -0
  137. package/dist/chunk-Q4D5X7QB.js +264 -0
  138. package/dist/chunk-Q5AMFEWD.js +119 -0
  139. package/dist/chunk-QRAOANID.js +214 -0
  140. package/dist/chunk-QSXK2RGH.js +688 -0
  141. package/dist/chunk-QZSX3F7C.js +389 -0
  142. package/dist/chunk-R6RY4Q5T.js +51 -0
  143. package/dist/chunk-R6XF6UR3.js +149 -0
  144. package/dist/chunk-R77KLRB3.js +166 -0
  145. package/dist/chunk-RRTKKSLQ.js +251 -0
  146. package/dist/chunk-RTEYOSJY.js +29 -0
  147. package/dist/chunk-RUVFXE2L.js +666 -0
  148. package/dist/chunk-RVH5SUW5.js +69 -0
  149. package/dist/chunk-RZPYKDWS.js +26 -0
  150. package/dist/chunk-S2A7YC3Q.js +41433 -0
  151. package/dist/chunk-S3QNRWYR.js +25 -0
  152. package/dist/chunk-SJRGMG6A.js +174 -0
  153. package/dist/chunk-SP2I63OO.js +252 -0
  154. package/dist/chunk-T2UYZSCQ.js +545 -0
  155. package/dist/chunk-T6AIP7H5.js +3851 -0
  156. package/dist/chunk-T6XQL73F.js +94 -0
  157. package/dist/chunk-TANFV3MZ.js +531 -0
  158. package/dist/chunk-TDD55CJH.js +119 -0
  159. package/dist/chunk-TV45EUGM.js +51 -0
  160. package/dist/chunk-TXLH6WHQ.js +2078 -0
  161. package/dist/chunk-TYAID7B7.js +408 -0
  162. package/dist/chunk-UBBC2XSG.js +873 -0
  163. package/dist/chunk-UGLN7QHV.js +27 -0
  164. package/dist/chunk-UNM6ZOKP.js +878 -0
  165. package/dist/chunk-V2YTAIQO.js +1075 -0
  166. package/dist/chunk-VN3DP4LQ.js +43 -0
  167. package/dist/chunk-VOGCSYOI.js +16 -0
  168. package/dist/chunk-VYDBJ73M.js +32 -0
  169. package/dist/chunk-W3BQAZ3Q.js +34 -0
  170. package/dist/chunk-W5BVQF44.js +36 -0
  171. package/dist/chunk-WVPJSRRJ.js +52 -0
  172. package/dist/chunk-WY6PP6AA.js +53 -0
  173. package/dist/chunk-XAKWMCXI.js +285 -0
  174. package/dist/chunk-XPCM366L.js +70 -0
  175. package/dist/chunk-XPTOBS2D.js +48 -0
  176. package/dist/chunk-XY3P7JW7.js +3479 -0
  177. package/dist/chunk-XZRON6IV.js +131 -0
  178. package/dist/chunk-YEDDOYSC.js +27809 -0
  179. package/dist/chunk-YISXLPHN.js +496 -0
  180. package/dist/chunk-YMZ3TNYB.js +18 -0
  181. package/dist/chunk-YY6ZQQBP.js +203 -0
  182. package/dist/chunk-YYQN46FY.js +334 -0
  183. package/dist/chunk-Z6LF7HQN.js +22 -0
  184. package/dist/chunk-ZCJDOK2S.js +116 -0
  185. package/dist/chunk-ZDPAS56H.js +76 -0
  186. package/dist/chunk-ZMAINWBW.js +18 -0
  187. package/dist/chunk-ZMFPW66A.js +22 -0
  188. package/dist/chunk-ZNCEKR4J.js +296 -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,286 @@
1
+ # Atticus's built-in constitution. Contract C3.
2
+ #
3
+ # These rules apply to every change, at every gate where their artifacts are due. They are
4
+ # never waivable, a team or org pack can only tighten them, and a pack that drops or loosens
5
+ # one is refused. They are data, so the critic's code holds no policy of its own: each rule
6
+ # names a built-in deterministic check and the catalog facts it needs.
7
+ #
8
+ # Each rule answers one of the four questions the critic asks of every draft (ADR 0124 addendum,
9
+ # Part 4): is it true to the code, is it complete, is it safe to build, can it ship. `question` says
10
+ # which; `lens` keeps the role lens the rule was first written for, so a pack that tightens it with
11
+ # that lens still matches. The two rules added with the questions are written for theirs; the
12
+ # timeout and rollback checks added with them are the starter review's (starter/review.yaml), the
13
+ # organisation's to change (the product owner's decision of 2026-10-24).
14
+ schemaVersion: 1
15
+ name: constitution
16
+ version: 1.0.0
17
+ description: Rules every change meets, whatever the organisation or team configures.
18
+ rules:
19
+ - id: constitution.interface-approved-pattern
20
+ title: Every interface names an approved integration pattern
21
+ description: A hop without a pattern, or with a code that isn't a confirmed pattern in the registry, can't be checked for its controls.
22
+ layer: constitution
23
+ lens: architecture
24
+ question: safe
25
+ appliesTo: { artifacts: [interfaces] }
26
+ severity: blocking
27
+ check:
28
+ type: deterministic
29
+ check: interface-pattern-approved
30
+ params: { statuses: [confirmed] }
31
+ waivable: false
32
+ source: Atticus constitution
33
+ needs: []
34
+
35
+ - id: constitution.interface-ends-in-catalog
36
+ title: No planned interface to a system missing from the catalog
37
+ description: A caller or callee the catalog doesn't know is either a typo or an unknown system nobody has looked at.
38
+ layer: constitution
39
+ lens: architecture
40
+ question: "true"
41
+ appliesTo: { artifacts: [interfaces, catalog] }
42
+ severity: blocking
43
+ check:
44
+ type: deterministic
45
+ check: interface-ends-in-catalog
46
+ waivable: false
47
+ source: Atticus constitution
48
+ needs: []
49
+
50
+ - id: constitution.interface-ids-in-catalog
51
+ title: Existing interfaces keep their catalog id
52
+ description: A row naming an interface id must match the catalog; a row for a new hop says new and planned-new.
53
+ layer: constitution
54
+ lens: architecture
55
+ question: "true"
56
+ appliesTo: { artifacts: [interfaces, catalog] }
57
+ severity: blocking
58
+ check:
59
+ type: deterministic
60
+ check: interface-ids-in-catalog
61
+ waivable: false
62
+ source: Atticus constitution
63
+ needs: []
64
+
65
+ - id: constitution.hop-resilience-stated
66
+ title: Every planned call states the timeouts and retries its pattern requires
67
+ description: The pattern's controls say which resilience settings a hop needs; each must be in the catalog or stated in interfaces.md or design.md.
68
+ layer: constitution
69
+ lens: architecture
70
+ question: safe
71
+ appliesTo: { artifacts: [interfaces, design, catalog] }
72
+ severity: blocking
73
+ check:
74
+ type: deterministic
75
+ check: settings-present
76
+ params: { fromPattern: true }
77
+ waivable: false
78
+ source: Atticus constitution
79
+ needs:
80
+ - kind: Setting
81
+ field: settingKind
82
+ scope: touched-components
83
+ question: "What timeout, retry and circuit-breaker settings does ${record} use for its calls?"
84
+
85
+ - id: constitution.touched-components-known
86
+ title: Every touched component has a known owner, repo and interface
87
+ description: A component known only from a caller can't be checked; its owner is asked.
88
+ layer: constitution
89
+ lens: architecture
90
+ question: "true"
91
+ appliesTo: { artifacts: [catalog] }
92
+ severity: risk
93
+ check:
94
+ type: deterministic
95
+ check: knowledge-check
96
+ params: { check: component-source-known }
97
+ waivable: false
98
+ source: Atticus constitution
99
+ needs:
100
+ - kind: System
101
+ field: owner
102
+ scope: touched-systems
103
+ question: "Who owns ${record}?"
104
+ - kind: Component
105
+ field: repo
106
+ scope: touched-components
107
+ question: "Which repo holds the code of ${record}?"
108
+
109
+ - id: constitution.data-doc-present
110
+ title: data.md exists when a data store is touched
111
+ layer: constitution
112
+ lens: architecture
113
+ question: complete
114
+ appliesTo: { artifacts: [data, catalog] }
115
+ severity: blocking
116
+ check:
117
+ type: deterministic
118
+ check: data-doc-present
119
+ waivable: false
120
+ source: Atticus constitution
121
+ needs: []
122
+
123
+ - id: constitution.data-change-has-migration
124
+ title: Every data change names its migration
125
+ layer: constitution
126
+ lens: architecture
127
+ question: ship
128
+ appliesTo: { artifacts: [data] }
129
+ severity: blocking
130
+ check:
131
+ type: deterministic
132
+ check: data-migration-named
133
+ waivable: false
134
+ source: Atticus constitution
135
+ needs: []
136
+
137
+ - id: constitution.data-columns-classified
138
+ title: Every new column is classified, and personal data is classified as personal
139
+ layer: constitution
140
+ lens: architecture
141
+ question: safe
142
+ appliesTo: { artifacts: [data] }
143
+ severity: blocking
144
+ check:
145
+ type: deterministic
146
+ check: data-columns-classified
147
+ waivable: false
148
+ source: Atticus constitution
149
+ needs: []
150
+
151
+ - id: constitution.data-retention-stated
152
+ title: Every new table says how long its rows are kept
153
+ layer: constitution
154
+ lens: architecture
155
+ question: safe
156
+ appliesTo: { artifacts: [data, catalog] }
157
+ severity: blocking
158
+ check:
159
+ type: deterministic
160
+ check: data-retention-stated
161
+ waivable: false
162
+ source: Atticus constitution
163
+ needs:
164
+ - kind: Table
165
+ field: retention
166
+ scope: touched-data-stores
167
+ question: "How long are rows of ${record} kept, and when are they deleted?"
168
+
169
+ - id: constitution.story-acceptance-criteria
170
+ title: Every story has acceptance criteria
171
+ layer: constitution
172
+ lens: story
173
+ question: complete
174
+ appliesTo: { artifacts: [stories] }
175
+ severity: blocking
176
+ check:
177
+ type: deterministic
178
+ check: story-has-acceptance-criteria
179
+ waivable: false
180
+ source: Atticus constitution
181
+ needs: []
182
+
183
+ - id: constitution.spec-scenarios-present
184
+ title: Every requirement has a scenario
185
+ layer: constitution
186
+ lens: business
187
+ question: complete
188
+ appliesTo: { artifacts: [specs] }
189
+ severity: blocking
190
+ check:
191
+ type: deterministic
192
+ check: spec-scenarios-present
193
+ waivable: false
194
+ source: Atticus constitution
195
+ needs: []
196
+
197
+ # Retired with the four questions (ADR 0124 addendum, Part 4): a service-desk request is a
198
+ # person's manual step. atticus plan drafts snow.md from the triggers this check reads, and
199
+ # atticus release plan lists each draft as a request to file, with its required fields still
200
+ # missing. The check stays for an org pack that wants it as a rule of its own.
201
+ - id: constitution.snow-drafts-present
202
+ title: A service-desk draft exists for each firewall or gateway change
203
+ description: Request templates in the org pack say which catalog changes need a request; each needs a draft in snow.md with its required fields filled.
204
+ layer: constitution
205
+ lens: release
206
+ question: ship
207
+ appliesTo: { artifacts: [snow, interfaces] }
208
+ severity: blocking
209
+ check:
210
+ type: deterministic
211
+ check: snow-drafts-present
212
+ waivable: false
213
+ source: Atticus constitution
214
+ needs: []
215
+ status: retired
216
+
217
+ - id: constitution.no-embedded-instructions
218
+ title: Artifacts hold no instructions aimed at AI agents
219
+ description: Ingested content is data, never instructions; text that tries to steer a reviewer or an agent is removed before review.
220
+ layer: constitution
221
+ lens: delivery
222
+ question: safe
223
+ appliesTo:
224
+ {
225
+ artifacts:
226
+ [brief, proposal, specs, interfaces, mappings, data, design, ux, stories, tasks, snow],
227
+ }
228
+ severity: blocking
229
+ check:
230
+ type: deterministic
231
+ check: no-embedded-instructions
232
+ waivable: false
233
+ source: Atticus constitution
234
+ needs: []
235
+
236
+ # ---- added with the four questions (ADR 0124 addendum, Part 4): code answers what code can.
237
+ # Never waivable (the product owner's decision of 2026-10-24); a person may still dismiss a
238
+ # finding as not relevant, with a reason.
239
+
240
+ - id: constitution.public-entry-auth
241
+ title: Every entry another system calls says how it authenticates
242
+ description: An entry point the change adds or changes that another system or the gateway calls needs an auth fact (the Endpoint's or the Interface's auth, or a gateway route that checks scopes). None known is asked of the owner; none at all blocks.
243
+ layer: constitution
244
+ lens: safe
245
+ question: safe
246
+ appliesTo: { artifacts: [interfaces, catalog] }
247
+ severity: blocking
248
+ check:
249
+ type: deterministic
250
+ check: public-entry-auth
251
+ waivable: false
252
+ source: Atticus constitution
253
+ needs: []
254
+
255
+ - id: constitution.breaking-delta-consumers
256
+ title: A breaking change to an operation plans for every consumer the catalog knows
257
+ description: A retired operation breaks its callers; a changed one breaks them when a caller must change (a judgment, ADR 0117, asked of a person when nobody has made it). Each consumer the catalog knows and the change doesn't plan for is named.
258
+ layer: constitution
259
+ lens: safe
260
+ question: safe
261
+ appliesTo: { artifacts: [interfaces, catalog] }
262
+ severity: blocking
263
+ check:
264
+ type: deterministic
265
+ check: breaking-delta-consumers
266
+ waivable: false
267
+ source: Atticus constitution
268
+ needs: []
269
+
270
+ # ADR 0124 addendum A-callers: who a gateway route lets in. A route whose files name no consumer,
271
+ # that no person declared a caller of and that no call the catalog holds goes through is asked
272
+ # about, never passed in silence; a risk, so a person answers it rather than the gate blocking.
273
+ - id: constitution.route-callers-known
274
+ title: Every gateway route a change touches has a known caller
275
+ description: A gateway route that carries an operation the change modifies or retires names its consumers in its files, has a caller a person declared in the org pack's profile, or has a call the catalog holds going through it. When none of these says who calls it, who does is asked of the callee's owner.
276
+ layer: constitution
277
+ lens: architecture
278
+ question: complete
279
+ appliesTo: { artifacts: [interfaces, catalog] }
280
+ severity: risk
281
+ check:
282
+ type: deterministic
283
+ check: route-callers-known
284
+ waivable: false
285
+ source: Atticus constitution
286
+ needs: []
@@ -0,0 +1,256 @@
1
+ # Built-in default written out by Atticus: the starter review (ADR 0120). Change it through a
2
+ # pull request; delete the file to turn the starter review off (atticus upgrade won't add it back).
3
+ #
4
+ # Most are AI rules: the critic's lenses apply them to every draft a stage writes (ADR 0115) and
5
+ # at each gate's critic round, judging what the draft means against the estate and the brief. The
6
+ # last three are code checks (a call's timeout, a store write's rollback step, a note's cite) that run before any
7
+ # lens, with no model.
8
+ # This is the organisation's configuration, not the constitution: change a prompt or a severity,
9
+ # make a blocking rule not waivable, retire a rule (status: retired) or delete it, and add your own.
10
+ # A rule runs from the first gate where its artifacts are due (brief: define; design, data and
11
+ # interfaces: design; stories and tasks: plan; the catalog: every gate), and again at each later
12
+ # gate. Contract C3.
13
+ #
14
+ # Each rule asks part of one of the critic's four questions (ADR 0124 addendum, Part 4): is it true
15
+ # to the code, is it complete, is it safe to build, can it ship. `question` says which, and that
16
+ # question's lens applies it, to the change types that ask it (a type lists its questions). `lens`
17
+ # names the role lens an AI rule was written for: a change type that still lists the old lens
18
+ # names takes the rule when it lists that lens.
19
+ schemaVersion: 1
20
+ name: review
21
+ version: 1.0.0
22
+ description: The starter review. AI rules for the critic's true, complete, safe and ship lenses, from the define gate to the plan gate, and three code checks of the true, safe and ship questions.
23
+ rules:
24
+ # ---- define: the feature placement, against the brief and the estate
25
+ - id: review.brief-outcomes-placed
26
+ title: Every outcome the brief states is placed
27
+ lens: business
28
+ question: complete
29
+ layer: org
30
+ appliesTo: { artifacts: [brief] }
31
+ severity: blocking
32
+ check:
33
+ type: ai
34
+ prompt: >-
35
+ List each outcome the brief states: what the change must achieve, and for whom. For each
36
+ one, find where the draft under review delivers it: the feature placement (feature.md and
37
+ feature.yaml) at the define gate, the target flows at design, the stories at plan. Report
38
+ each outcome the draft leaves out or delivers only in part, citing the brief's line for
39
+ that outcome and quoting it. Don't report what the brief puts out of scope.
40
+ waivable: true
41
+ source: Atticus starter review
42
+
43
+ - id: review.changed-flow-not-read
44
+ title: A flow the change alters isn't marked only read
45
+ lens: architecture
46
+ question: "true"
47
+ layer: org
48
+ appliesTo: { artifacts: [brief] }
49
+ severity: blocking
50
+ check:
51
+ type: ai
52
+ prompt: >-
53
+ For each flow the draft marks as only read, check against the estate and the brief whether
54
+ the change has to alter that flow's steps: a new step, a step that now sends, stores or
55
+ checks something new, or a step that must behave differently. Report each such flow,
56
+ citing and quoting the line that marks it read, and name the step that has to change. A
57
+ flow the change uses exactly as it is today is rightly marked read.
58
+ waivable: true
59
+ source: Atticus starter review
60
+
61
+ - id: review.assumed-capability-named
62
+ title: A capability the brief assumes but nothing in the estate does is named as a gap
63
+ lens: architecture
64
+ question: "true"
65
+ layer: org
66
+ appliesTo: { artifacts: [brief] }
67
+ severity: blocking
68
+ check:
69
+ type: ai
70
+ prompt: >-
71
+ Find each thing the brief takes for granted the systems already do, such as sending
72
+ notifications, keeping a new kind of record or calling an outside service. Look in the
73
+ estate for a flow, component or interface that does it today. When nothing in the estate
74
+ does it and the draft treats it as already there, instead of adding it as new work or
75
+ asking about it, report it, citing and quoting the line of the brief or the draft that
76
+ assumes it. Use kind knowledge-gap when only a person can say whether it exists.
77
+ waivable: true
78
+ source: Atticus starter review
79
+
80
+ # ---- design: the target flows and the data changes
81
+ - id: review.outcome-has-target-steps
82
+ title: Every outcome has the target-flow steps that deliver it
83
+ lens: architecture
84
+ question: complete
85
+ layer: org
86
+ appliesTo: { artifacts: [design] }
87
+ severity: blocking
88
+ check:
89
+ type: ai
90
+ prompt: >-
91
+ For each outcome the brief states, find the steps of the target flows (the design and the
92
+ target-flows files) that deliver it. Report an outcome no step delivers, or one whose steps
93
+ stop short because it needs a check, a stored value or a reply that no step has, citing and
94
+ quoting the brief's line for that outcome. If no brief is among the documents, report
95
+ nothing for this rule.
96
+ waivable: true
97
+ source: Atticus starter review
98
+
99
+ - id: review.shown-data-has-a-source
100
+ title: Data a step returns or shows comes from somewhere
101
+ lens: architecture
102
+ question: "true"
103
+ layer: org
104
+ appliesTo: { artifacts: [design, data] }
105
+ severity: blocking
106
+ check:
107
+ type: ai
108
+ prompt: >-
109
+ For each value a step of the target flows returns, shows to a person or sends on, find
110
+ where it comes from: a step that receives it, reads it from or writes it to a table, gets
111
+ it from another call, or works it out. Report a value that nothing in the target flows or
112
+ the estate gives, citing and quoting the step that returns or shows it, and say which step
113
+ would have to give it.
114
+ waivable: true
115
+ source: Atticus starter review
116
+
117
+ - id: review.new-column-complete
118
+ title: A new column has its classification and its migration
119
+ lens: architecture
120
+ question: safe
121
+ layer: org
122
+ appliesTo: { artifacts: [data, design] }
123
+ severity: blocking
124
+ check:
125
+ type: ai
126
+ prompt: >-
127
+ For each new or changed column in the data changes or the target flows, check that it has
128
+ a data classification and a migration that adds or changes it, and that the classification
129
+ fits what the column holds: a name, a contact detail, an account number or anything else
130
+ about a person is never public. Report a column that lacks either, or whose classification
131
+ understates what it holds, citing and quoting the column's line.
132
+ waivable: true
133
+ source: Atticus starter review
134
+
135
+ - id: review.hop-pattern-fits
136
+ title: Each integration hop follows an approved pattern that fits it
137
+ lens: architecture
138
+ question: safe
139
+ layer: org
140
+ appliesTo: { artifacts: [interfaces, design] }
141
+ severity: risk
142
+ check:
143
+ type: ai
144
+ prompt: >-
145
+ For each call, message or file transfer between systems that the change adds or changes,
146
+ check that the approved integration pattern it names fits what the hop does: a hop the
147
+ caller must not wait on isn't a synchronous call, a hop that must not be lost isn't fire
148
+ and forget, and a hop that carries personal data uses a pattern whose controls allow it.
149
+ Report a hop whose pattern doesn't fit, citing and quoting the hop's line and saying which
150
+ approved pattern would.
151
+ waivable: false
152
+ source: Atticus starter review
153
+
154
+ # ---- plan: the stories, their criteria and the requests
155
+ - id: review.outcome-has-story
156
+ title: Each outcome has a story
157
+ lens: story
158
+ question: complete
159
+ layer: org
160
+ appliesTo: { artifacts: [stories] }
161
+ severity: blocking
162
+ check:
163
+ type: ai
164
+ prompt: >-
165
+ For each outcome the brief states, find the story or stories that deliver it. Report an
166
+ outcome no story delivers, citing and quoting the brief's line for that outcome. If no
167
+ brief is among the documents, report nothing for this rule.
168
+ waivable: true
169
+ source: Atticus starter review
170
+
171
+ - id: review.criteria-testable
172
+ title: Each story's criteria are testable and name the data they check
173
+ lens: story
174
+ question: complete
175
+ layer: org
176
+ appliesTo: { artifacts: [stories] }
177
+ severity: risk
178
+ check:
179
+ type: ai
180
+ prompt: >-
181
+ Read each acceptance criterion of each story and task. Report a criterion a tester couldn't
182
+ turn into a test: one without a situation, an action and a result, or one whose result is a
183
+ vague word such as works, correctly, quickly or easily. Report also a criterion that doesn't
184
+ name the data it checks: the field, record, message or value whose state shows it passed.
185
+ Cite and quote the criterion's line.
186
+ waivable: false
187
+ source: Atticus starter review
188
+
189
+ - id: review.requests-raised-in-time
190
+ title: Requests and approvals are raised before the phase that needs them
191
+ lens: delivery
192
+ question: ship
193
+ layer: org
194
+ appliesTo: { artifacts: [tasks] }
195
+ severity: risk
196
+ check:
197
+ type: ai
198
+ prompt: >-
199
+ Read what the change needs from outside the team: the needs, and the request tasks in the
200
+ tasks and requests files, such as service-desk requests, access, approvals and sign-offs,
201
+ each with its lead time. For each one, check that a task raises it before the phase or the
202
+ task that depends on it, early enough for its lead time. Report a need no task raises, or
203
+ one raised too late for the work that waits on it, citing and quoting the line of the need
204
+ or the task.
205
+ waivable: false
206
+ source: Atticus starter review
207
+
208
+ # ---- code checks of the four questions (ADR 0124 addendum, Part 4; the product owner's decision
209
+ # of 2026-10-24): what code can answer before a model is asked, kept here rather than in the
210
+ # constitution so the organisation can change them. Each finding is a risk, which a person may
211
+ # dismiss with a reason; raise a rule to blocking to make it hold the gate (and waivable or not),
212
+ # retire it (status: retired) or delete it.
213
+ - id: review.call-timeout-stated
214
+ title: Every synchronous call the change plans has a timeout
215
+ description: A call with no timeout waits as long as the callee does. The fact is a timeout Setting for the caller and callee in the catalog, or a timeout stated for the call in interfaces.md or design.md; a pattern that requires more is the resilience rule's.
216
+ lens: safe
217
+ question: safe
218
+ layer: org
219
+ appliesTo: { artifacts: [interfaces, design, catalog] }
220
+ severity: risk
221
+ check:
222
+ type: deterministic
223
+ check: call-timeout-stated
224
+ waivable: false
225
+ source: Atticus starter review
226
+ needs: []
227
+
228
+ - id: review.store-write-rollback
229
+ title: Every store write has a rollback step
230
+ description: A table the change writes or alters (data.md, or a write step of a target flow) is named, or its migration is, under the rollback heading of design.md.
231
+ lens: ship
232
+ question: ship
233
+ layer: org
234
+ appliesTo: { artifacts: [data, design, catalog] }
235
+ severity: risk
236
+ check:
237
+ type: deterministic
238
+ check: store-write-rollback
239
+ waivable: false
240
+ source: Atticus starter review
241
+ needs: []
242
+
243
+ - id: review.note-cites-on-line
244
+ title: A criterion from an attached note quotes the note's line
245
+ description: A story criterion that says it comes from a file a person attached to the change (From inputs/<file>:<line>) quotes words that are on that line of what was read from the file, a file attached and not held out of AI steps (ADR 0113 addendum).
246
+ lens: "true"
247
+ question: "true"
248
+ layer: org
249
+ appliesTo: { artifacts: [stories] }
250
+ severity: risk
251
+ check:
252
+ type: deterministic
253
+ check: note-cites-on-line
254
+ waivable: false
255
+ source: Atticus starter review
256
+ needs: []