@yss123/cage-cli 0.1.0 → 0.2.0

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 (540) hide show
  1. package/README.md +23 -1
  2. package/dist/analyze.js +2 -0
  3. package/dist/analyze.js.map +1 -1
  4. package/dist/config.d.ts +2 -2
  5. package/dist/config.js +0 -1
  6. package/dist/config.js.map +1 -1
  7. package/dist/context.d.ts +72 -0
  8. package/dist/context.js +202 -0
  9. package/dist/context.js.map +1 -0
  10. package/dist/create-prompt.d.ts +5 -0
  11. package/dist/create-prompt.js +50 -0
  12. package/dist/create-prompt.js.map +1 -0
  13. package/dist/create.d.ts +18 -1
  14. package/dist/create.js +30 -13
  15. package/dist/create.js.map +1 -1
  16. package/dist/dev.js +12 -51
  17. package/dist/dev.js.map +1 -1
  18. package/dist/gen/contracts.js +34 -13
  19. package/dist/gen/contracts.js.map +1 -1
  20. package/dist/gen/index.js +43 -3
  21. package/dist/gen/index.js.map +1 -1
  22. package/dist/gen/zod-code.d.ts +1 -1
  23. package/dist/gen/zod-code.js +3 -1
  24. package/dist/gen/zod-code.js.map +1 -1
  25. package/dist/graph-command.d.ts +11 -0
  26. package/dist/graph-command.js +67 -0
  27. package/dist/graph-command.js.map +1 -0
  28. package/dist/graph-model.d.ts +21 -0
  29. package/dist/graph-model.js +101 -0
  30. package/dist/graph-model.js.map +1 -0
  31. package/dist/graph-presentation.d.ts +11 -0
  32. package/dist/graph-presentation.js +25 -0
  33. package/dist/graph-presentation.js.map +1 -0
  34. package/dist/graph-query.d.ts +171 -0
  35. package/dist/graph-query.js +242 -0
  36. package/dist/graph-query.js.map +1 -0
  37. package/dist/graph-relations.d.ts +14 -0
  38. package/dist/graph-relations.js +142 -0
  39. package/dist/graph-relations.js.map +1 -0
  40. package/dist/graph-search.d.ts +21 -0
  41. package/dist/graph-search.js +63 -0
  42. package/dist/graph-search.js.map +1 -0
  43. package/dist/graph-snapshot.d.ts +2 -4
  44. package/dist/graph-snapshot.js +2 -19
  45. package/dist/graph-snapshot.js.map +1 -1
  46. package/dist/graph.js +19 -1
  47. package/dist/graph.js.map +1 -1
  48. package/dist/impact.d.ts +6 -0
  49. package/dist/impact.js +28 -16
  50. package/dist/impact.js.map +1 -1
  51. package/dist/index.d.ts +5 -1
  52. package/dist/index.js +5 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/init.d.ts +6 -0
  55. package/dist/init.js +131 -0
  56. package/dist/init.js.map +1 -0
  57. package/dist/main.js +77 -32
  58. package/dist/main.js.map +1 -1
  59. package/dist/migrate.d.ts +3 -6
  60. package/dist/migrate.js +14 -53
  61. package/dist/migrate.js.map +1 -1
  62. package/dist/ontology.d.ts +3 -1
  63. package/dist/ontology.js +13 -3
  64. package/dist/ontology.js.map +1 -1
  65. package/dist/project-structure.d.ts +8 -0
  66. package/dist/project-structure.js +94 -0
  67. package/dist/project-structure.js.map +1 -0
  68. package/dist/static-check.js +1 -4
  69. package/dist/static-check.js.map +1 -1
  70. package/dist/sync.js +82 -10
  71. package/dist/sync.js.map +1 -1
  72. package/graph-ui/app.js +46 -8
  73. package/graph-ui/graph-model.js +100 -0
  74. package/graph-ui/graph-relations.js +141 -0
  75. package/graph-ui/graph-search.js +62 -0
  76. package/graph-ui/model.js +19 -77
  77. package/graph-ui/relations.js +2 -125
  78. package/graph-ui/structure.js +4 -1
  79. package/graph-ui/style.css +21 -0
  80. package/package.json +8 -8
  81. package/templates/app/.env.example +58 -14
  82. package/templates/app/AGENTS.md +95 -12
  83. package/templates/app/Dockerfile +2 -0
  84. package/templates/app/README.md +46 -16
  85. package/templates/app/_gitignore +8 -0
  86. package/templates/app/apps/api/package.json +2 -2
  87. package/templates/app/apps/web/src/app/app.tsx +18 -0
  88. package/templates/app/apps/web/src/app/workspace-layout.tsx +70 -0
  89. package/templates/app/apps/web/src/main.tsx +4 -543
  90. package/templates/app/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +20 -0
  91. package/templates/app/apps/web/src/modules/approval/index.ts +2 -0
  92. package/templates/app/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +54 -0
  93. package/templates/app/apps/web/src/modules/auth/index.ts +1 -0
  94. package/templates/app/apps/web/src/modules/auth/pages/login-page.tsx +59 -0
  95. package/templates/app/apps/web/src/modules/inventory/index.ts +1 -0
  96. package/templates/app/apps/web/src/modules/inventory/pages/inventory-page.tsx +74 -0
  97. package/templates/app/apps/web/src/modules/purchase/components/purchase-order-form.tsx +60 -0
  98. package/templates/app/apps/web/src/modules/purchase/index.ts +2 -0
  99. package/templates/app/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +210 -0
  100. package/templates/app/apps/web/src/shared/hooks/use-command.ts +29 -0
  101. package/templates/app/apps/web/src/shared/lib/error-message.ts +15 -0
  102. package/templates/app/apps/web/src/shared/ui/notice.tsx +13 -0
  103. package/templates/app/apps/web/src/shared/ui/page-heading.tsx +28 -0
  104. package/templates/app/apps/web/vite.config.ts +3 -0
  105. package/templates/app/cage.config.json +1 -1
  106. package/templates/app/docs/ai/README.md +77 -0
  107. package/templates/app/docs/ai/architecture.md +122 -0
  108. package/templates/app/docs/ai/ontology-context.md +117 -0
  109. package/templates/app/docs/ai/primitives.md +249 -0
  110. package/templates/app/docs/ai/project-structure.md +123 -0
  111. package/templates/app/docs/ai/purchase-example.md +97 -0
  112. package/templates/app/docs/ai/recipes.md +81 -0
  113. package/templates/app/docs/ai/relations.md +160 -0
  114. package/templates/app/docs/ai/transfers.md +92 -0
  115. package/templates/app/docs/ai/troubleshooting.md +60 -0
  116. package/templates/app/docs/ai/workflow.md +139 -0
  117. package/templates/app/docs/errors/CAGE-APPR-001.md +47 -0
  118. package/templates/app/docs/errors/CAGE-APPR-002.md +47 -0
  119. package/templates/app/docs/errors/CAGE-APPR-003.md +47 -0
  120. package/templates/app/docs/errors/CAGE-APPR-004.md +47 -0
  121. package/templates/app/docs/errors/CAGE-APPR-005.md +47 -0
  122. package/templates/app/docs/errors/CAGE-APPR-006.md +47 -0
  123. package/templates/app/docs/errors/CAGE-APPR-007.md +50 -0
  124. package/templates/app/docs/errors/CAGE-APPR-010.md +48 -0
  125. package/templates/app/docs/errors/CAGE-AUTH-001.md +47 -0
  126. package/templates/app/docs/errors/CAGE-BUDGET-001.md +47 -0
  127. package/templates/app/docs/errors/CAGE-BUDGET-002.md +47 -0
  128. package/templates/app/docs/errors/CAGE-BUDGET-003.md +47 -0
  129. package/templates/app/docs/errors/CAGE-CMD-002.md +47 -0
  130. package/templates/app/docs/errors/CAGE-CMD-003.md +47 -0
  131. package/templates/app/docs/errors/CAGE-CONN-001.md +47 -0
  132. package/templates/app/docs/errors/CAGE-CONN-002.md +47 -0
  133. package/templates/app/docs/errors/CAGE-CONN-003.md +47 -0
  134. package/templates/app/docs/errors/CAGE-CONN-004.md +47 -0
  135. package/templates/app/docs/errors/CAGE-CONN-005.md +47 -0
  136. package/templates/app/docs/errors/CAGE-CONN-006.md +47 -0
  137. package/templates/app/docs/errors/CAGE-CONN-007.md +47 -0
  138. package/templates/app/docs/errors/CAGE-CONN-008.md +47 -0
  139. package/templates/app/docs/errors/CAGE-CONN-009.md +47 -0
  140. package/templates/app/docs/errors/CAGE-CONN-010.md +47 -0
  141. package/templates/app/docs/errors/CAGE-CONN-011.md +47 -0
  142. package/templates/app/docs/errors/CAGE-CONN-012.md +47 -0
  143. package/templates/app/docs/errors/CAGE-CREATE-001.md +52 -0
  144. package/templates/app/docs/errors/CAGE-DECL-001.md +48 -0
  145. package/templates/app/docs/errors/CAGE-DECL-002.md +47 -0
  146. package/templates/app/docs/errors/CAGE-DECL-003.md +47 -0
  147. package/templates/app/docs/errors/CAGE-DECL-004.md +47 -0
  148. package/templates/app/docs/errors/CAGE-DEP-001.md +48 -0
  149. package/templates/app/docs/errors/CAGE-DEP-002.md +47 -0
  150. package/templates/app/docs/errors/CAGE-DEP-003.md +47 -0
  151. package/templates/app/docs/errors/CAGE-DEP-004.md +47 -0
  152. package/templates/app/docs/errors/CAGE-DEP-005.md +47 -0
  153. package/templates/app/docs/errors/CAGE-DLQ-001.md +48 -0
  154. package/templates/app/docs/errors/CAGE-ENV-001.md +52 -0
  155. package/templates/app/docs/errors/CAGE-EVENT-001.md +47 -0
  156. package/templates/app/docs/errors/CAGE-EVENT-002.md +50 -0
  157. package/templates/app/docs/errors/CAGE-FIELD-001.md +47 -0
  158. package/templates/app/docs/errors/CAGE-FIELD-002.md +47 -0
  159. package/templates/app/docs/errors/CAGE-FIELD-003.md +47 -0
  160. package/templates/app/docs/errors/CAGE-FIELD-004.md +47 -0
  161. package/templates/app/docs/errors/CAGE-GEN-001.md +48 -0
  162. package/templates/app/docs/errors/CAGE-GEN-002.md +47 -0
  163. package/templates/app/docs/errors/CAGE-GRANT-001.md +49 -0
  164. package/templates/app/docs/errors/CAGE-GRANT-002.md +48 -0
  165. package/templates/app/docs/errors/CAGE-GRANT-003.md +47 -0
  166. package/templates/app/docs/errors/CAGE-IMPACT-001.md +48 -0
  167. package/templates/app/docs/errors/CAGE-INIT-001.md +47 -0
  168. package/templates/app/docs/errors/CAGE-INIT-002.md +49 -0
  169. package/templates/app/docs/errors/CAGE-INIT-003.md +48 -0
  170. package/templates/app/docs/errors/CAGE-INIT-004.md +48 -0
  171. package/templates/app/docs/errors/CAGE-JOB-001.md +47 -0
  172. package/templates/app/docs/errors/CAGE-JOB-002.md +47 -0
  173. package/templates/app/docs/errors/CAGE-JOB-003.md +47 -0
  174. package/templates/app/docs/errors/CAGE-LINT-001.md +47 -0
  175. package/templates/app/docs/errors/CAGE-MIG-001.md +47 -0
  176. package/templates/app/docs/errors/CAGE-MIG-002.md +47 -0
  177. package/templates/app/docs/errors/CAGE-MIG-003.md +5 -0
  178. package/templates/app/docs/errors/CAGE-MIG-004.md +5 -0
  179. package/templates/app/docs/errors/CAGE-MIG-005.md +47 -0
  180. package/templates/app/docs/errors/CAGE-NAME-001.md +47 -0
  181. package/templates/app/docs/errors/CAGE-NAME-002.md +47 -0
  182. package/templates/app/docs/errors/CAGE-NAME-003.md +47 -0
  183. package/templates/app/docs/errors/CAGE-NAME-004.md +47 -0
  184. package/templates/app/docs/errors/CAGE-NAME-005.md +47 -0
  185. package/templates/app/docs/errors/CAGE-NAME-006.md +47 -0
  186. package/templates/app/docs/errors/CAGE-ORG-001.md +49 -0
  187. package/templates/app/docs/errors/CAGE-PAIR-002.md +50 -0
  188. package/templates/app/docs/errors/CAGE-QUERY-001.md +47 -0
  189. package/templates/app/docs/errors/CAGE-QUERY-002.md +47 -0
  190. package/templates/app/docs/errors/CAGE-QUERY-003.md +49 -0
  191. package/templates/app/docs/errors/CAGE-REACT-001.md +47 -0
  192. package/templates/app/docs/errors/CAGE-REACT-002.md +47 -0
  193. package/templates/app/docs/errors/CAGE-READS-001.md +47 -0
  194. package/templates/app/docs/errors/CAGE-REG-001.md +53 -0
  195. package/templates/app/docs/errors/CAGE-REG-002.md +48 -0
  196. package/templates/app/docs/errors/CAGE-REG-003.md +47 -0
  197. package/templates/app/docs/errors/CAGE-REL-001.md +64 -0
  198. package/templates/app/docs/errors/CAGE-ROUTE-001.md +47 -0
  199. package/templates/app/docs/errors/CAGE-SCOPE-001.md +47 -0
  200. package/templates/app/docs/errors/CAGE-SCOPE-002.md +47 -0
  201. package/templates/app/docs/errors/CAGE-SECRET-001.md +48 -0
  202. package/templates/app/docs/errors/CAGE-SECRET-002.md +47 -0
  203. package/templates/app/docs/errors/CAGE-SENS-001.md +48 -0
  204. package/templates/app/docs/errors/CAGE-SQL-001.md +47 -0
  205. package/templates/app/docs/errors/CAGE-SQL-002.md +47 -0
  206. package/templates/app/docs/errors/CAGE-STATE-001.md +49 -0
  207. package/templates/app/docs/errors/CAGE-STATE-002.md +47 -0
  208. package/templates/app/docs/errors/CAGE-STATE-003.md +47 -0
  209. package/templates/app/docs/errors/CAGE-STATE-004.md +47 -0
  210. package/templates/app/docs/errors/CAGE-STATE-005.md +48 -0
  211. package/templates/app/docs/errors/CAGE-STATE-010.md +48 -0
  212. package/templates/app/docs/errors/CAGE-STATE-011.md +48 -0
  213. package/templates/app/docs/errors/CAGE-STRUCT-001.md +51 -0
  214. package/templates/app/docs/errors/CAGE-STRUCT-002.md +51 -0
  215. package/templates/app/docs/errors/CAGE-SYNC-001.md +48 -0
  216. package/templates/app/docs/errors/CAGE-TEST-001.md +47 -0
  217. package/templates/app/docs/errors/CAGE-UNSAFE-001.md +48 -0
  218. package/templates/app/docs/errors/CAGE-UPGRADE-001.md +48 -0
  219. package/templates/app/docs/errors/README.md +307 -0
  220. package/templates/app/docs/errors/runtime.md +50 -0
  221. package/templates/app/package.json +4 -7
  222. package/templates/app/packages/contracts/package.json +1 -1
  223. package/templates/app/packages/contracts/src/{dept.ts → aggregates/dept/index.ts} +3 -3
  224. package/templates/app/packages/contracts/src/{inventory.ts → aggregates/inventory/index.ts} +3 -3
  225. package/templates/app/packages/contracts/src/{inventory-lock.ts → aggregates/inventory-lock/index.ts} +3 -3
  226. package/templates/app/packages/contracts/src/{purchase-order.ts → aggregates/purchase-order/index.ts} +3 -3
  227. package/templates/app/packages/contracts/src/{role.ts → aggregates/role/index.ts} +3 -3
  228. package/templates/app/packages/contracts/src/{user.ts → aggregates/user/index.ts} +3 -3
  229. package/templates/app/packages/contracts/src/index.ts +14 -14
  230. package/templates/app/packages/domain/package.json +4 -4
  231. package/templates/app/packages/domain/src/index.ts +4 -7
  232. package/templates/app/packages/domain/src/{erp.ts → integrations/erp.ts} +1 -1
  233. package/templates/app/packages/domain/src/modules/inventory/index.ts +2 -0
  234. package/templates/app/packages/domain/src/modules/purchase/index.ts +6 -0
  235. package/templates/app/packages/domain/src/{purchase-order.test.ts → modules/purchase/purchase-order.test.ts} +2 -2
  236. package/templates/app/packages/domain/src/{purchase-order.ts → modules/purchase/purchase-order.ts} +1 -1
  237. package/templates/app/packages/domain/src/{reactions.ts → workflows/purchase-inventory.ts} +2 -2
  238. package/templates/blank/.dockerignore +10 -0
  239. package/templates/blank/.env.example +61 -0
  240. package/templates/blank/.github/workflows/cage.yml +44 -0
  241. package/templates/blank/AGENTS.md +96 -0
  242. package/templates/blank/Dockerfile +25 -0
  243. package/templates/blank/README.md +37 -0
  244. package/templates/blank/_gitignore +8 -0
  245. package/templates/blank/apps/api/package.json +15 -0
  246. package/templates/blank/apps/api/src/main.ts +11 -0
  247. package/templates/blank/apps/api/src/worker.ts +8 -0
  248. package/templates/blank/apps/api/tsconfig.json +5 -0
  249. package/templates/blank/apps/web/index.html +13 -0
  250. package/templates/blank/apps/web/package.json +22 -0
  251. package/templates/blank/apps/web/src/app/app.tsx +44 -0
  252. package/templates/blank/apps/web/src/app/styles/global.css +516 -0
  253. package/templates/blank/apps/web/src/app/workspace-layout.tsx +70 -0
  254. package/templates/blank/apps/web/src/main.tsx +13 -0
  255. package/templates/blank/apps/web/src/modules/auth/index.ts +1 -0
  256. package/templates/blank/apps/web/src/modules/auth/pages/login-page.tsx +87 -0
  257. package/templates/blank/apps/web/src/modules/workspace/index.ts +1 -0
  258. package/templates/blank/apps/web/src/modules/workspace/pages/home-page.tsx +45 -0
  259. package/templates/blank/apps/web/src/shared/lib/error-message.ts +11 -0
  260. package/templates/blank/apps/web/src/shared/ui/brand.tsx +11 -0
  261. package/templates/blank/apps/web/tsconfig.json +11 -0
  262. package/templates/blank/apps/web/vite.config.ts +19 -0
  263. package/templates/blank/cage.config.json +14 -0
  264. package/templates/blank/db/migrations/0001_init.sql +63 -0
  265. package/templates/blank/docs/ai/README.md +77 -0
  266. package/templates/blank/docs/ai/architecture.md +122 -0
  267. package/templates/blank/docs/ai/ontology-context.md +117 -0
  268. package/templates/blank/docs/ai/primitives.md +249 -0
  269. package/templates/blank/docs/ai/project-structure.md +123 -0
  270. package/templates/blank/docs/ai/purchase-example.md +97 -0
  271. package/templates/blank/docs/ai/recipes.md +81 -0
  272. package/templates/blank/docs/ai/relations.md +160 -0
  273. package/templates/blank/docs/ai/transfers.md +92 -0
  274. package/templates/blank/docs/ai/troubleshooting.md +60 -0
  275. package/templates/blank/docs/ai/workflow.md +139 -0
  276. package/templates/blank/docs/errors/CAGE-APPR-001.md +47 -0
  277. package/templates/blank/docs/errors/CAGE-APPR-002.md +47 -0
  278. package/templates/blank/docs/errors/CAGE-APPR-003.md +47 -0
  279. package/templates/blank/docs/errors/CAGE-APPR-004.md +47 -0
  280. package/templates/blank/docs/errors/CAGE-APPR-005.md +47 -0
  281. package/templates/blank/docs/errors/CAGE-APPR-006.md +47 -0
  282. package/templates/blank/docs/errors/CAGE-APPR-007.md +50 -0
  283. package/templates/blank/docs/errors/CAGE-APPR-010.md +48 -0
  284. package/templates/blank/docs/errors/CAGE-AUTH-001.md +47 -0
  285. package/templates/blank/docs/errors/CAGE-BUDGET-001.md +47 -0
  286. package/templates/blank/docs/errors/CAGE-BUDGET-002.md +47 -0
  287. package/templates/blank/docs/errors/CAGE-BUDGET-003.md +47 -0
  288. package/templates/blank/docs/errors/CAGE-CMD-002.md +47 -0
  289. package/templates/blank/docs/errors/CAGE-CMD-003.md +47 -0
  290. package/templates/blank/docs/errors/CAGE-CONN-001.md +47 -0
  291. package/templates/blank/docs/errors/CAGE-CONN-002.md +47 -0
  292. package/templates/blank/docs/errors/CAGE-CONN-003.md +47 -0
  293. package/templates/blank/docs/errors/CAGE-CONN-004.md +47 -0
  294. package/templates/blank/docs/errors/CAGE-CONN-005.md +47 -0
  295. package/templates/blank/docs/errors/CAGE-CONN-006.md +47 -0
  296. package/templates/blank/docs/errors/CAGE-CONN-007.md +47 -0
  297. package/templates/blank/docs/errors/CAGE-CONN-008.md +47 -0
  298. package/templates/blank/docs/errors/CAGE-CONN-009.md +47 -0
  299. package/templates/blank/docs/errors/CAGE-CONN-010.md +47 -0
  300. package/templates/blank/docs/errors/CAGE-CONN-011.md +47 -0
  301. package/templates/blank/docs/errors/CAGE-CONN-012.md +47 -0
  302. package/templates/blank/docs/errors/CAGE-CREATE-001.md +52 -0
  303. package/templates/blank/docs/errors/CAGE-DECL-001.md +48 -0
  304. package/templates/blank/docs/errors/CAGE-DECL-002.md +47 -0
  305. package/templates/blank/docs/errors/CAGE-DECL-003.md +47 -0
  306. package/templates/blank/docs/errors/CAGE-DECL-004.md +47 -0
  307. package/templates/blank/docs/errors/CAGE-DEP-001.md +48 -0
  308. package/templates/blank/docs/errors/CAGE-DEP-002.md +47 -0
  309. package/templates/blank/docs/errors/CAGE-DEP-003.md +47 -0
  310. package/templates/blank/docs/errors/CAGE-DEP-004.md +47 -0
  311. package/templates/blank/docs/errors/CAGE-DEP-005.md +47 -0
  312. package/templates/blank/docs/errors/CAGE-DLQ-001.md +48 -0
  313. package/templates/blank/docs/errors/CAGE-ENV-001.md +52 -0
  314. package/templates/blank/docs/errors/CAGE-EVENT-001.md +47 -0
  315. package/templates/blank/docs/errors/CAGE-EVENT-002.md +50 -0
  316. package/templates/blank/docs/errors/CAGE-FIELD-001.md +47 -0
  317. package/templates/blank/docs/errors/CAGE-FIELD-002.md +47 -0
  318. package/templates/blank/docs/errors/CAGE-FIELD-003.md +47 -0
  319. package/templates/blank/docs/errors/CAGE-FIELD-004.md +47 -0
  320. package/templates/blank/docs/errors/CAGE-GEN-001.md +48 -0
  321. package/templates/blank/docs/errors/CAGE-GEN-002.md +47 -0
  322. package/templates/blank/docs/errors/CAGE-GRANT-001.md +49 -0
  323. package/templates/blank/docs/errors/CAGE-GRANT-002.md +48 -0
  324. package/templates/blank/docs/errors/CAGE-GRANT-003.md +47 -0
  325. package/templates/blank/docs/errors/CAGE-IMPACT-001.md +48 -0
  326. package/templates/blank/docs/errors/CAGE-INIT-001.md +47 -0
  327. package/templates/blank/docs/errors/CAGE-INIT-002.md +49 -0
  328. package/templates/blank/docs/errors/CAGE-INIT-003.md +48 -0
  329. package/templates/blank/docs/errors/CAGE-INIT-004.md +48 -0
  330. package/templates/blank/docs/errors/CAGE-JOB-001.md +47 -0
  331. package/templates/blank/docs/errors/CAGE-JOB-002.md +47 -0
  332. package/templates/blank/docs/errors/CAGE-JOB-003.md +47 -0
  333. package/templates/blank/docs/errors/CAGE-LINT-001.md +47 -0
  334. package/templates/blank/docs/errors/CAGE-MIG-001.md +47 -0
  335. package/templates/blank/docs/errors/CAGE-MIG-002.md +47 -0
  336. package/templates/blank/docs/errors/CAGE-MIG-003.md +5 -0
  337. package/templates/blank/docs/errors/CAGE-MIG-004.md +5 -0
  338. package/templates/blank/docs/errors/CAGE-MIG-005.md +47 -0
  339. package/templates/blank/docs/errors/CAGE-NAME-001.md +47 -0
  340. package/templates/blank/docs/errors/CAGE-NAME-002.md +47 -0
  341. package/templates/blank/docs/errors/CAGE-NAME-003.md +47 -0
  342. package/templates/blank/docs/errors/CAGE-NAME-004.md +47 -0
  343. package/templates/blank/docs/errors/CAGE-NAME-005.md +47 -0
  344. package/templates/blank/docs/errors/CAGE-NAME-006.md +47 -0
  345. package/templates/blank/docs/errors/CAGE-ORG-001.md +49 -0
  346. package/templates/blank/docs/errors/CAGE-PAIR-002.md +50 -0
  347. package/templates/blank/docs/errors/CAGE-QUERY-001.md +47 -0
  348. package/templates/blank/docs/errors/CAGE-QUERY-002.md +47 -0
  349. package/templates/blank/docs/errors/CAGE-QUERY-003.md +49 -0
  350. package/templates/blank/docs/errors/CAGE-REACT-001.md +47 -0
  351. package/templates/blank/docs/errors/CAGE-REACT-002.md +47 -0
  352. package/templates/blank/docs/errors/CAGE-READS-001.md +47 -0
  353. package/templates/blank/docs/errors/CAGE-REG-001.md +53 -0
  354. package/templates/blank/docs/errors/CAGE-REG-002.md +48 -0
  355. package/templates/blank/docs/errors/CAGE-REG-003.md +47 -0
  356. package/templates/blank/docs/errors/CAGE-REL-001.md +64 -0
  357. package/templates/blank/docs/errors/CAGE-ROUTE-001.md +47 -0
  358. package/templates/blank/docs/errors/CAGE-SCOPE-001.md +47 -0
  359. package/templates/blank/docs/errors/CAGE-SCOPE-002.md +47 -0
  360. package/templates/blank/docs/errors/CAGE-SECRET-001.md +48 -0
  361. package/templates/blank/docs/errors/CAGE-SECRET-002.md +47 -0
  362. package/templates/blank/docs/errors/CAGE-SENS-001.md +48 -0
  363. package/templates/blank/docs/errors/CAGE-SQL-001.md +47 -0
  364. package/templates/blank/docs/errors/CAGE-SQL-002.md +47 -0
  365. package/templates/blank/docs/errors/CAGE-STATE-001.md +49 -0
  366. package/templates/blank/docs/errors/CAGE-STATE-002.md +47 -0
  367. package/templates/blank/docs/errors/CAGE-STATE-003.md +47 -0
  368. package/templates/blank/docs/errors/CAGE-STATE-004.md +47 -0
  369. package/templates/blank/docs/errors/CAGE-STATE-005.md +48 -0
  370. package/templates/blank/docs/errors/CAGE-STATE-010.md +48 -0
  371. package/templates/blank/docs/errors/CAGE-STATE-011.md +48 -0
  372. package/templates/blank/docs/errors/CAGE-STRUCT-001.md +51 -0
  373. package/templates/blank/docs/errors/CAGE-STRUCT-002.md +51 -0
  374. package/templates/blank/docs/errors/CAGE-SYNC-001.md +48 -0
  375. package/templates/blank/docs/errors/CAGE-TEST-001.md +47 -0
  376. package/templates/blank/docs/errors/CAGE-UNSAFE-001.md +48 -0
  377. package/templates/blank/docs/errors/CAGE-UPGRADE-001.md +48 -0
  378. package/templates/blank/docs/errors/README.md +307 -0
  379. package/templates/blank/docs/errors/runtime.md +50 -0
  380. package/templates/blank/docs/examples/purchase-admin/README.md +5 -0
  381. package/templates/blank/docs/examples/purchase-admin/apps/api/src/main.ts +10 -0
  382. package/templates/blank/docs/examples/purchase-admin/apps/api/src/worker.ts +14 -0
  383. package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/app.tsx +18 -0
  384. package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/styles/global.css +663 -0
  385. package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/workspace-layout.tsx +70 -0
  386. package/templates/blank/docs/examples/purchase-admin/apps/web/src/main.tsx +13 -0
  387. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +20 -0
  388. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/index.ts +2 -0
  389. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +54 -0
  390. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/auth/index.ts +1 -0
  391. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/auth/pages/login-page.tsx +59 -0
  392. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/inventory/index.ts +1 -0
  393. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/inventory/pages/inventory-page.tsx +74 -0
  394. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-order-form.tsx +60 -0
  395. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/index.ts +2 -0
  396. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +210 -0
  397. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/hooks/use-command.ts +29 -0
  398. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/error-message.ts +15 -0
  399. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/notice.tsx +13 -0
  400. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-heading.tsx +28 -0
  401. package/templates/blank/docs/examples/purchase-admin/cage.config.json +114 -0
  402. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/dept/index.ts +74 -0
  403. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/inventory/index.ts +57 -0
  404. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/inventory-lock/index.ts +52 -0
  405. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/purchase-order/index.ts +72 -0
  406. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/role/index.ts +85 -0
  407. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/user/index.ts +89 -0
  408. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/index.ts +81 -0
  409. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/queries/index.ts +17 -0
  410. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/index.ts +6 -0
  411. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/integrations/erp.ts +36 -0
  412. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/inventory/index.ts +2 -0
  413. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/inventory/inventory.ts +43 -0
  414. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approvals.ts +18 -0
  415. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/index.ts +6 -0
  416. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/jobs.ts +13 -0
  417. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.test.ts +137 -0
  418. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.ts +122 -0
  419. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/queries.ts +10 -0
  420. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/workflows/purchase-inventory.ts +24 -0
  421. package/templates/blank/package.json +22 -0
  422. package/templates/blank/packages/contracts/package.json +16 -0
  423. package/templates/blank/packages/contracts/src/aggregates/dept/index.ts +74 -0
  424. package/templates/blank/packages/contracts/src/aggregates/role/index.ts +85 -0
  425. package/templates/blank/packages/contracts/src/aggregates/user/index.ts +89 -0
  426. package/templates/blank/packages/contracts/src/index.ts +55 -0
  427. package/templates/blank/packages/contracts/src/queries/index.ts +13 -0
  428. package/templates/blank/packages/contracts/tsconfig.json +5 -0
  429. package/templates/blank/packages/domain/package.json +23 -0
  430. package/templates/blank/packages/domain/src/index.ts +4 -0
  431. package/templates/blank/packages/domain/tsconfig.json +5 -0
  432. package/templates/blank/pnpm-workspace.yaml +10 -0
  433. package/templates/blank/renovate.json +5 -0
  434. package/templates/blank/tsconfig.base.json +8 -0
  435. package/dist/database.d.ts +0 -5
  436. package/dist/database.js +0 -70
  437. package/dist/database.js.map +0 -1
  438. package/managed/errors/CAGE-APPR-001.md +0 -32
  439. package/managed/errors/CAGE-APPR-002.md +0 -32
  440. package/managed/errors/CAGE-APPR-003.md +0 -32
  441. package/managed/errors/CAGE-APPR-004.md +0 -32
  442. package/managed/errors/CAGE-APPR-005.md +0 -32
  443. package/managed/errors/CAGE-APPR-006.md +0 -32
  444. package/managed/errors/CAGE-APPR-007.md +0 -32
  445. package/managed/errors/CAGE-APPR-010.md +0 -32
  446. package/managed/errors/CAGE-AUTH-001.md +0 -32
  447. package/managed/errors/CAGE-BUDGET-001.md +0 -32
  448. package/managed/errors/CAGE-BUDGET-002.md +0 -32
  449. package/managed/errors/CAGE-BUDGET-003.md +0 -32
  450. package/managed/errors/CAGE-CMD-002.md +0 -32
  451. package/managed/errors/CAGE-CMD-003.md +0 -34
  452. package/managed/errors/CAGE-CONN-001.md +0 -32
  453. package/managed/errors/CAGE-CONN-002.md +0 -32
  454. package/managed/errors/CAGE-CONN-003.md +0 -32
  455. package/managed/errors/CAGE-CONN-004.md +0 -32
  456. package/managed/errors/CAGE-CONN-005.md +0 -32
  457. package/managed/errors/CAGE-CONN-006.md +0 -32
  458. package/managed/errors/CAGE-CONN-007.md +0 -32
  459. package/managed/errors/CAGE-CONN-008.md +0 -32
  460. package/managed/errors/CAGE-CONN-009.md +0 -32
  461. package/managed/errors/CAGE-CONN-010.md +0 -32
  462. package/managed/errors/CAGE-CONN-011.md +0 -32
  463. package/managed/errors/CAGE-CONN-012.md +0 -32
  464. package/managed/errors/CAGE-CREATE-001.md +0 -32
  465. package/managed/errors/CAGE-DECL-001.md +0 -34
  466. package/managed/errors/CAGE-DECL-002.md +0 -34
  467. package/managed/errors/CAGE-DECL-003.md +0 -34
  468. package/managed/errors/CAGE-DECL-004.md +0 -34
  469. package/managed/errors/CAGE-DEP-001.md +0 -34
  470. package/managed/errors/CAGE-DEP-002.md +0 -34
  471. package/managed/errors/CAGE-DEP-003.md +0 -34
  472. package/managed/errors/CAGE-DEP-004.md +0 -34
  473. package/managed/errors/CAGE-DEP-005.md +0 -34
  474. package/managed/errors/CAGE-DLQ-001.md +0 -32
  475. package/managed/errors/CAGE-ENV-001.md +0 -32
  476. package/managed/errors/CAGE-EVENT-001.md +0 -32
  477. package/managed/errors/CAGE-EVENT-002.md +0 -32
  478. package/managed/errors/CAGE-FIELD-001.md +0 -32
  479. package/managed/errors/CAGE-FIELD-002.md +0 -32
  480. package/managed/errors/CAGE-FIELD-003.md +0 -32
  481. package/managed/errors/CAGE-FIELD-004.md +0 -32
  482. package/managed/errors/CAGE-GEN-001.md +0 -33
  483. package/managed/errors/CAGE-GEN-002.md +0 -33
  484. package/managed/errors/CAGE-GRANT-001.md +0 -32
  485. package/managed/errors/CAGE-GRANT-002.md +0 -32
  486. package/managed/errors/CAGE-GRANT-003.md +0 -32
  487. package/managed/errors/CAGE-IMPACT-001.md +0 -32
  488. package/managed/errors/CAGE-JOB-001.md +0 -32
  489. package/managed/errors/CAGE-JOB-002.md +0 -32
  490. package/managed/errors/CAGE-JOB-003.md +0 -32
  491. package/managed/errors/CAGE-LINT-001.md +0 -32
  492. package/managed/errors/CAGE-MIG-001.md +0 -32
  493. package/managed/errors/CAGE-MIG-002.md +0 -32
  494. package/managed/errors/CAGE-MIG-003.md +0 -32
  495. package/managed/errors/CAGE-MIG-004.md +0 -32
  496. package/managed/errors/CAGE-MIG-005.md +0 -32
  497. package/managed/errors/CAGE-NAME-001.md +0 -32
  498. package/managed/errors/CAGE-NAME-002.md +0 -32
  499. package/managed/errors/CAGE-NAME-003.md +0 -32
  500. package/managed/errors/CAGE-NAME-004.md +0 -32
  501. package/managed/errors/CAGE-NAME-005.md +0 -32
  502. package/managed/errors/CAGE-NAME-006.md +0 -32
  503. package/managed/errors/CAGE-ORG-001.md +0 -32
  504. package/managed/errors/CAGE-PAIR-002.md +0 -33
  505. package/managed/errors/CAGE-QUERY-001.md +0 -32
  506. package/managed/errors/CAGE-QUERY-002.md +0 -32
  507. package/managed/errors/CAGE-QUERY-003.md +0 -32
  508. package/managed/errors/CAGE-REACT-001.md +0 -32
  509. package/managed/errors/CAGE-REACT-002.md +0 -32
  510. package/managed/errors/CAGE-READS-001.md +0 -32
  511. package/managed/errors/CAGE-REG-001.md +0 -32
  512. package/managed/errors/CAGE-REG-002.md +0 -32
  513. package/managed/errors/CAGE-REG-003.md +0 -32
  514. package/managed/errors/CAGE-ROUTE-001.md +0 -32
  515. package/managed/errors/CAGE-SCOPE-001.md +0 -32
  516. package/managed/errors/CAGE-SCOPE-002.md +0 -32
  517. package/managed/errors/CAGE-SECRET-001.md +0 -32
  518. package/managed/errors/CAGE-SECRET-002.md +0 -32
  519. package/managed/errors/CAGE-SENS-001.md +0 -32
  520. package/managed/errors/CAGE-SQL-001.md +0 -32
  521. package/managed/errors/CAGE-SQL-002.md +0 -32
  522. package/managed/errors/CAGE-STATE-001.md +0 -32
  523. package/managed/errors/CAGE-STATE-002.md +0 -32
  524. package/managed/errors/CAGE-STATE-003.md +0 -32
  525. package/managed/errors/CAGE-STATE-004.md +0 -32
  526. package/managed/errors/CAGE-STATE-005.md +0 -32
  527. package/managed/errors/CAGE-STATE-010.md +0 -32
  528. package/managed/errors/CAGE-STATE-011.md +0 -32
  529. package/managed/errors/CAGE-SYNC-001.md +0 -35
  530. package/managed/errors/CAGE-TEST-001.md +0 -33
  531. package/managed/errors/CAGE-UNSAFE-001.md +0 -32
  532. package/managed/errors/CAGE-UPGRADE-001.md +0 -32
  533. package/managed/errors/README.md +0 -99
  534. package/templates/app/compose.yaml +0 -39
  535. /package/templates/app/apps/web/src/{style.css → app/styles/global.css} +0 -0
  536. /package/templates/app/packages/contracts/src/{queries.ts → queries/index.ts} +0 -0
  537. /package/templates/app/packages/domain/src/{inventory.ts → modules/inventory/inventory.ts} +0 -0
  538. /package/templates/app/packages/domain/src/{approvals.ts → modules/purchase/approvals.ts} +0 -0
  539. /package/templates/app/packages/domain/src/{jobs.ts → modules/purchase/jobs.ts} +0 -0
  540. /package/templates/app/packages/domain/src/{queries.ts → modules/purchase/queries.ts} +0 -0
@@ -0,0 +1,50 @@
1
+ # CAGE-EVENT-002:事件变更不向后兼容
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:写事务 / 基线比较。
10
+
11
+ 与基线相比,删除旧载荷字段、改变字段 kind,或新增必填字段。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 保留旧字段和类型,新字段 optional;不兼容含义新建事件,并考虑旧 outbox 消息和消费者升级顺序。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ note: text().optional() // 新增字段
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ 给线上已有事件新增必填 note,旧消息没有该值
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 运行相关命令与消费者测试;兼容性使用修改前基线检查,考虑尚未消费的旧事件。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/cli/src/rules.ts:225`
38
+ - `packages/cli/src/rules.ts:237`
39
+ - `packages/cli/src/rules.ts:244`
40
+ - `packages/cli/src/rules.ts:254`
41
+
42
+ 实现片段(位置随框架版本更新):
43
+
44
+ ```ts
45
+
46
+ /** CAGE-EVENT-002:事件载荷只允许向后兼容的变更(只能新增可选字段) */
47
+ export function checkEventCompat(base: Ontology, head: Ontology): Finding[] {
48
+ const findings: Finding[] = [];
49
+ const b = new Map(base.nodes.filter((n) => n.kind === 'event').map((n) => [n.id, n]));
50
+ ```
@@ -0,0 +1,47 @@
1
+ # CAGE-FIELD-001:敏感字段种类不存在
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:声明加载。
10
+
11
+ sensitive 使用了 SENSITIVE_KINDS 之外的值。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 选用当前包导出的敏感种类;确需新掩码规则时评估框架扩展,不以 any 绕过声明。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ supplierPhone: text(32).sensitive('phone')
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ text().sensitive('自定义随意字符串')
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 重跑 cage check/gen,审查契约与迁移;敏感字段还要验证普通用户读结果。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/kernel/src/primitives/fields.ts:100`
38
+
39
+ 实现片段(位置随框架版本更新):
40
+
41
+ ```ts
42
+ if (isRelation(this)) throw declError('CAGE-REL-001', '关系字段不支持 sensitive;目标字段按目标聚合权限掩码');
43
+ if (!SENSITIVE_KINDS.includes(kind)) throw declError('CAGE-FIELD-001', `未知的敏感种类 ${kind}`);
44
+ return this.with({ sensitiveKind: kind });
45
+ }
46
+ /** 唯一约束(租户内) */
47
+ ```
@@ -0,0 +1,47 @@
1
+ # CAGE-FIELD-002:引用目标为空
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:声明加载。
10
+
11
+ ref 收到空目标,常见原因是循环导入。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 使用 ref("聚合名") 避免循环求值,确保对应聚合从入口导出且名称正确。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ deptId: ref('Dept')
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ deptId: ref(undefined)
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 重跑 cage check/gen,审查契约与迁移;敏感字段还要验证普通用户读结果。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/kernel/src/primitives/fields.ts:160`
38
+
39
+ 实现片段(位置随框架版本更新):
40
+
41
+ ```ts
42
+ const target = typeof to === 'string' ? to : to?.name;
43
+ if (!target) throw declError('CAGE-FIELD-002', 'ref() 的目标为空,可能是循环导入;可改为 ref("聚合名")');
44
+ return mk(z.string().uuid(), { kind: 'ref', sql: 'uuid', ref: target });
45
+ }
46
+
47
+ ```
@@ -0,0 +1,47 @@
1
+ # CAGE-FIELD-003:字段不是字段原语
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:声明加载。
10
+
11
+ aggregate.fields 中存在不是 field/states 描述对象的值。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 使用 text/int/money/ref/list 等公开字段工厂;Zod 用在命令输入或 json schema,不能直接代替 fields 的字段描述。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ fields: { amount: money() }
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ fields: { amount: z.string() }
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 重跑 cage check/gen,审查契约与迁移;敏感字段还要验证普通用户读结果。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/kernel/src/primitives/aggregate.ts:83`
38
+
39
+ 实现片段(位置随框架版本更新):
40
+
41
+ ```ts
42
+ }
43
+ if (!isField(v)) throw declError('CAGE-FIELD-003', `${name}.${k} 不是字段原语`);
44
+ if ((RESERVED_FIELDS as readonly string[]).includes(k)) {
45
+ throw declError('CAGE-FIELD-004', `${name}.${k} 是保留字段名,由内核维护`);
46
+ }
47
+ ```
@@ -0,0 +1,47 @@
1
+ # CAGE-FIELD-004:覆盖系统保留列
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:声明加载。
10
+
11
+ 业务 fields 定义了 id/version/status/createdAt/updatedAt/tenantId 等保留字段。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 移除重复系统字段;状态使用 aggregate.states 或唯一 fields.status 状态声明;业务另取有意义名称。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ fields: { externalId: text() }, states: POStatus
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ fields: { version: text() }
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 重跑 cage check/gen,审查契约与迁移;敏感字段还要验证普通用户读结果。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/kernel/src/primitives/aggregate.ts:85`
38
+
39
+ 实现片段(位置随框架版本更新):
40
+
41
+ ```ts
42
+ if ((RESERVED_FIELDS as readonly string[]).includes(k)) {
43
+ throw declError('CAGE-FIELD-004', `${name}.${k} 是保留字段名,由内核维护`);
44
+ }
45
+ if (!/^[a-z][A-Za-z0-9]*$/.test(k)) throw declError('CAGE-NAME-002', `字段名 ${name}.${k} 必须是小驼峰`);
46
+ fields[k] = v;
47
+ ```
@@ -0,0 +1,48 @@
1
+ # CAGE-GEN-001:契约等生成结果过期
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:gen --check / verify。
10
+
11
+ gen --check/verify 比较发现需提交的生成文件缺失或与声明不一致。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 改源声明后运行 pnpm gen,审查并提交结果;手改生成物会被覆盖,不靠更新预期掩盖错误。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ 修改 domain → pnpm gen → pnpm exec cage gen --check
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ 直接编辑 packages/contracts/src/aggregates/purchase-order/index.ts
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 重新生成并审查后执行 cage gen --check;结构变化还需审查并执行 migrate。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/cli/src/gen/index.ts:48`
38
+ - `packages/cli/src/gen/index.ts:90`
39
+
40
+ 实现片段(位置随框架版本更新):
41
+
42
+ ```ts
43
+ findings: Finding[],
44
+ code = 'CAGE-GEN-001',
45
+ ) {
46
+ const cur = existsSync(path) ? readFileSync(path, 'utf8') : null;
47
+ if (cur === content) return;
48
+ ```
@@ -0,0 +1,47 @@
1
+ # CAGE-GEN-002:声明结构没有对应迁移
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:gen --check / verify。
10
+
11
+ 声明的期望结构与最后一个迁移内嵌的结构快照不一致。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 运行 pnpm gen 生成新迁移草稿,审查回填、非空与破坏性变更后提交;实际落库还需 pnpm migrate。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ 新增字段 → gen → 审查新迁移 → migrate
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ 修改已执行 0001_init.sql,或把 gen 当作已更新数据库
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 重新生成并审查后执行 cage gen --check;结构变化还需审查并执行 migrate。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/cli/src/gen/index.ts:162`
38
+
39
+ 实现片段(位置随框架版本更新):
40
+
41
+ ```ts
42
+ findings.push({
43
+ code: 'CAGE-GEN-002',
44
+ at: cfg.migrations,
45
+ reason: `声明的表结构与迁移不一致(${stmts.length} 处变化)`,
46
+ fix: '运行 cage gen 生成迁移草稿,人审后提交',
47
+ ```
@@ -0,0 +1,49 @@
1
+ # CAGE-GRANT-001:授予超出自己的能力或额度
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:组织命令。
10
+
11
+ 管理员授予自己没有的能力/更高参数,或分配含越权能力的角色。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 由具备足够能力和参数的管理员操作;降低授予范围到自身权限内,不禁用防提权约束。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ 有 approve=100000 额度的管理员授予不超过自身的额度
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ 自己没有采购审批能力,却给别人分配该能力或包含它的角色
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 用真实操作人验证允许与拒绝场景,检查目标角色最终能力、参数和范围。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/admin/src/domain/constraints.ts:21`
38
+ - `packages/admin/src/domain/constraints.ts:24`
39
+ - `packages/admin/src/domain/constraints.ts:51`
40
+
41
+ 实现片段(位置随框架版本更新):
42
+
43
+ ```ts
44
+ const mine = ctx.capabilities.get(input.capability);
45
+ if (!mine) return violation('[CAGE-GRANT-001] 不能授出自己没有的能力点');
46
+ for (const [k, v] of Object.entries(input.params ?? {})) {
47
+ if (typeof v === 'number' && typeof mine[k] === 'number' && v > (mine[k] as number)) {
48
+ return violation(`[CAGE-GRANT-001] 参数 ${k}=${v} 超过了你自己的 ${mine[k]}`);
49
+ ```
@@ -0,0 +1,48 @@
1
+ # CAGE-GRANT-002:授予超出自己的数据范围
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:组织命令。
10
+
11
+ 设置范围或分配角色时,目标范围比操作人自身范围更宽。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 核对操作人在该聚合的范围,由具有足够范围的管理员配置;部门限定还需对应范围字段。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ 自己有 all 范围时,按业务需求授予部门范围
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ 仅有本人范围的管理员给角色授予全部部门
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 用真实操作人验证允许与拒绝场景,检查目标角色最终能力、参数和范围。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/admin/src/domain/constraints.ts:37`
38
+ - `packages/admin/src/domain/constraints.ts:55`
39
+
40
+ 实现片段(位置随框架版本更新):
41
+
42
+ ```ts
43
+ const want = COMBINATOR_WIDTH[input.combinator as Combinator] ?? 99;
44
+ return want <= ownWidth(ctx, input.aggregate) ? ok() : violation('[CAGE-GRANT-002] 不能授出比自己更宽的数据范围');
45
+ },
46
+ });
47
+
48
+ ```
@@ -0,0 +1,47 @@
1
+ # CAGE-GRANT-003:能力不在代码目录中
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:组织命令。
10
+
11
+ 授权请求引用了注册表没有声明的能力点。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 先在 domain 声明并导出相应命令/聚合,再查看能力目录;不要在管理页面凭空发明能力名称。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ PurchaseOrder.submit // 由已导出的命令形成
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ PurchaseOrder.anything // 没有对应声明
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 用真实操作人验证允许与拒绝场景,检查目标角色最终能力、参数和范围。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/admin/src/domain/constraints.ts:13`
38
+
39
+ 实现片段(位置随框架版本更新):
40
+
41
+ ```ts
42
+ check: (_role, _ctx, input, meta) =>
43
+ meta.catalog().includes(input.capability) ? ok() : violation(`[CAGE-GRANT-003] 能力点 ${input.capability} 不在能力目录里`),
44
+ });
45
+
46
+ /** 防提权:不能授出自己没有的能力点;数值参数(额度)不能超过自己的 */
47
+ ```
@@ -0,0 +1,48 @@
1
+ # CAGE-IMPACT-001:影响分析没有可用基线
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:impact / 基线加载。
10
+
11
+ impact 未指定基线,或 Git 基线无法加载/抽取。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 使用真实存在且能加载的提交,或修改前保存的完整 ontology.json。基线失败不能当作没有变化。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ pnpm exec cage impact --base-file .cage/before-change.json
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ 修改后才保存旧图,或指定不存在的提交并忽略失败
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 使用可靠基线重新 impact,确认报告中的变化与本次需求相符。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/cli/src/baseline.ts:45`
38
+ - `packages/cli/src/main.ts:212`
39
+
40
+ 实现片段(位置随框架版本更新):
41
+
42
+ ```ts
43
+ );
44
+ if (code !== 0) throw new Error('[CAGE-IMPACT-001] 基线抽取失败,请修复基线声明或使用保存的 --base-file');
45
+ return readOntology(join(project, '.cage/ontology.json'));
46
+ } finally {
47
+ // 先断开本次建立的 junction,避免清理工作树时遍历共享依赖目录。
48
+ ```
@@ -0,0 +1,47 @@
1
+ # CAGE-INIT-001:管理员 URL 没有数据库名
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:init。
10
+
11
+ init 的管理员连接没有指定一个明确的已有数据库。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 在 URL 路径填写实际数据库名,确认该库已经存在;init 不负责创建数据库。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ postgresql://postgres:已编码密码@主机:端口/business_db
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ postgresql://postgres:密码@主机:端口/
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 恢复/核对配置后运行 cage init 验证,随后按流程 gen、审查迁移并 migrate;不输出凭证。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/cli/src/init.ts:80`
38
+
39
+ 实现片段(位置随框架版本更新):
40
+
41
+ ```ts
42
+ if (!target.pathname || target.pathname === '/') {
43
+ throw new Error('[CAGE-INIT-001] 管理员连接必须指定已经存在的数据库名,例如 postgresql://postgres:密码@localhost:5432/business_db');
44
+ }
45
+ const admin = new pg.Client({ connectionString: adminUrl, connectionTimeoutMillis: 5000, application_name: 'cage-init' });
46
+ let staged: string | undefined;
47
+ ```
@@ -0,0 +1,49 @@
1
+ # CAGE-INIT-002:集群已有账号但缺少原凭证
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:init。
10
+
11
+ PostgreSQL 集群已经存在 Cage 登录角色,而本项目没有保存可复用的三种连接。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 从已有项目或管理员安全取得对应角色的原连接,填入本项目 .env,再运行 init 验证。
16
+ 2. 角色名在集群共享;不要为新项目随机重置 cage_app/read/migrate 的密码,影响其他项目。
17
+ 3. 如需完全隔离的账号策略,先规划集群/角色隔离方案;不删除共享角色绕过检查。
18
+
19
+ ## 正例
20
+
21
+ ```text
22
+ 复用原 APP/READ/MIGRATE 凭证,指向本项目实际同一库
23
+ ```
24
+
25
+ ## 反例
26
+
27
+ ```text
28
+ ALTER ROLE 重置共享账号密码,导致已有应用断连
29
+ ```
30
+
31
+ ## 修复后验证
32
+
33
+ 恢复/核对配置后运行 cage init 验证,随后按流程 gen、审查迁移并 migrate;不输出凭证。
34
+
35
+ ## 框架内的检查位置
36
+
37
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
38
+
39
+ - `packages/cli/src/init.ts:94`
40
+
41
+ 实现片段(位置随框架版本更新):
42
+
43
+ ```ts
44
+ if (existing.rowCount !== 4 || !hasSaved) {
45
+ throw new Error('[CAGE-INIT-002] PostgreSQL 集群已有 Cage 账号;请在 .env 提供已有的 APP / READ / MIGRATE 连接后重试。初始化不会重置这些账号的密码');
46
+ }
47
+ if (new URL(saved.APP).host !== target.host || new URL(saved.APP).pathname !== target.pathname) {
48
+ throw new Error('[CAGE-INIT-003] 已有账号连接与管理员连接必须指向同一个数据库;请检查 .env');
49
+ ```
@@ -0,0 +1,48 @@
1
+ # CAGE-INIT-003:三种连接身份或目标不一致
2
+
3
+ [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
4
+
5
+ > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
+
7
+ ## 何时出现
8
+
9
+ 阶段:init。
10
+
11
+ APP/READ/MIGRATE 账号不是各自 Cage 账号,或三者及管理员连接不指向同一目标数据库。
12
+
13
+ ## 修复步骤
14
+
15
+ 1. 核对 URL 的用户名、主机、端口、数据库名;各自使用正确账号,并连接同一个库,不输出密码。
16
+
17
+ ## 正例
18
+
19
+ ```text
20
+ cage_app/cage_read/cage_migrate 均连接同一 host:port/business_db
21
+ ```
22
+
23
+ ## 反例
24
+
25
+ ```text
26
+ app 连接 business_db,而 read/migrate 指向另一个库
27
+ ```
28
+
29
+ ## 修复后验证
30
+
31
+ 恢复/核对配置后运行 cage init 验证,随后按流程 gen、审查迁移并 migrate;不输出凭证。
32
+
33
+ ## 框架内的检查位置
34
+
35
+ 以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
+
37
+ - `packages/cli/src/init.ts:22`
38
+ - `packages/cli/src/init.ts:97`
39
+
40
+ 实现片段(位置随框架版本更新):
41
+
42
+ ```ts
43
+ if (url.username !== accounts[key] || url.host !== target.host || url.pathname !== target.pathname) {
44
+ throw new Error('[CAGE-INIT-003] APP / READ / MIGRATE 需使用各自的 cage 账号,指向同一个数据库;请检查 .env');
45
+ }
46
+ const client = new pg.Client({ connectionString: urls[key], connectionTimeoutMillis: 5000 });
47
+ try {
48
+ ```