@yss123/cage-cli 0.1.0 → 0.3.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.
- package/README.md +69 -3
- package/bin/cage.js +5 -0
- package/bin/create-cage-app.js +5 -0
- package/dist/analyze.d.ts +16 -0
- package/dist/analyze.js +20 -2
- package/dist/analyze.js.map +1 -1
- package/dist/baseline.d.ts +8 -0
- package/dist/baseline.js +13 -0
- package/dist/baseline.js.map +1 -1
- package/dist/bootstrap.d.ts +20 -0
- package/dist/bootstrap.js +75 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/budget.d.ts +7 -0
- package/dist/budget.js +49 -5
- package/dist/budget.js.map +1 -1
- package/dist/capabilities.d.ts +38 -0
- package/dist/capabilities.js +133 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/config.d.ts +33 -4
- package/dist/config.js +22 -1
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +86 -0
- package/dist/context.js +235 -0
- package/dist/context.js.map +1 -0
- package/dist/create-prompt.d.ts +12 -0
- package/dist/create-prompt.js +62 -0
- package/dist/create-prompt.js.map +1 -0
- package/dist/create.d.ts +38 -1
- package/dist/create.js +52 -13
- package/dist/create.js.map +1 -1
- package/dist/derive.d.ts +23 -0
- package/dist/derive.js +40 -0
- package/dist/derive.js.map +1 -1
- package/dist/dev.d.ts +6 -0
- package/dist/dev.js +23 -51
- package/dist/dev.js.map +1 -1
- package/dist/doctor.d.ts +98 -0
- package/dist/doctor.js +93 -0
- package/dist/doctor.js.map +1 -0
- package/dist/env.d.ts +6 -0
- package/dist/env.js +11 -0
- package/dist/env.js.map +1 -1
- package/dist/findings.d.ts +27 -0
- package/dist/findings.js +20 -0
- package/dist/findings.js.map +1 -1
- package/dist/gen/contracts.d.ts +28 -0
- package/dist/gen/contracts.js +81 -20
- package/dist/gen/contracts.js.map +1 -1
- package/dist/gen/index.d.ts +26 -0
- package/dist/gen/index.js +112 -4
- package/dist/gen/index.js.map +1 -1
- package/dist/gen/zod-code.d.ts +43 -1
- package/dist/gen/zod-code.js +180 -16
- package/dist/gen/zod-code.js.map +1 -1
- package/dist/graph-approvals.d.ts +60 -0
- package/dist/graph-approvals.js +80 -0
- package/dist/graph-approvals.js.map +1 -0
- package/dist/graph-business.d.ts +135 -0
- package/dist/graph-business.js +404 -0
- package/dist/graph-business.js.map +1 -0
- package/dist/graph-command.d.ts +28 -0
- package/dist/graph-command.js +88 -0
- package/dist/graph-command.js.map +1 -0
- package/dist/graph-model.d.ts +65 -0
- package/dist/graph-model.js +134 -0
- package/dist/graph-model.js.map +1 -0
- package/dist/graph-presentation.d.ts +27 -0
- package/dist/graph-presentation.js +34 -0
- package/dist/graph-presentation.js.map +1 -0
- package/dist/graph-query.d.ts +266 -0
- package/dist/graph-query.js +304 -0
- package/dist/graph-query.js.map +1 -0
- package/dist/graph-relations.d.ts +34 -0
- package/dist/graph-relations.js +172 -0
- package/dist/graph-relations.js.map +1 -0
- package/dist/graph-search.d.ts +56 -0
- package/dist/graph-search.js +99 -0
- package/dist/graph-search.js.map +1 -0
- package/dist/graph-snapshot.d.ts +28 -4
- package/dist/graph-snapshot.js +32 -20
- package/dist/graph-snapshot.js.map +1 -1
- package/dist/graph.d.ts +13 -2
- package/dist/graph.js +78 -5
- package/dist/graph.js.map +1 -1
- package/dist/impact.d.ts +56 -0
- package/dist/impact.js +90 -18
- package/dist/impact.js.map +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.js +15 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +18 -0
- package/dist/init.js +146 -0
- package/dist/init.js.map +1 -0
- package/dist/load.d.ts +10 -0
- package/dist/load.js +15 -0
- package/dist/load.js.map +1 -1
- package/dist/main.d.ts +6 -0
- package/dist/main.js +170 -37
- package/dist/main.js.map +1 -1
- package/dist/migrate.d.ts +15 -6
- package/dist/migrate.js +31 -53
- package/dist/migrate.js.map +1 -1
- package/dist/ontology.d.ts +69 -2
- package/dist/ontology.js +101 -4
- package/dist/ontology.js.map +1 -1
- package/dist/process-rules.d.ts +21 -0
- package/dist/process-rules.js +100 -0
- package/dist/process-rules.js.map +1 -0
- package/dist/process.d.ts +32 -0
- package/dist/process.js +32 -0
- package/dist/process.js.map +1 -1
- package/dist/project-structure.d.ts +13 -0
- package/dist/project-structure.js +104 -0
- package/dist/project-structure.js.map +1 -0
- package/dist/registration.d.ts +16 -0
- package/dist/registration.js +56 -0
- package/dist/registration.js.map +1 -0
- package/dist/rules.d.ts +52 -0
- package/dist/rules.js +58 -0
- package/dist/rules.js.map +1 -1
- package/dist/runtime-diagnostics.d.ts +27 -0
- package/dist/runtime-diagnostics.js +60 -0
- package/dist/runtime-diagnostics.js.map +1 -0
- package/dist/snapshots.d.ts +40 -0
- package/dist/snapshots.js +62 -0
- package/dist/snapshots.js.map +1 -0
- package/dist/static-check.d.ts +33 -0
- package/dist/static-check.js +38 -5
- package/dist/static-check.js.map +1 -1
- package/dist/sync.d.ts +11 -0
- package/dist/sync.js +139 -10
- package/dist/sync.js.map +1 -1
- package/dist/upgrade.d.ts +16 -0
- package/dist/upgrade.js +21 -0
- package/dist/upgrade.js.map +1 -1
- package/dist/verify.d.ts +14 -0
- package/dist/verify.js +19 -0
- package/dist/verify.js.map +1 -1
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -1
- package/graph-ui/app.js +367 -35
- package/graph-ui/approval-flow.js +165 -0
- package/graph-ui/business.css +985 -0
- package/graph-ui/business.js +549 -0
- package/graph-ui/flowchart-interaction.js +177 -0
- package/graph-ui/flowchart.js +1059 -0
- package/graph-ui/graph-approvals.js +79 -0
- package/graph-ui/graph-business.js +403 -0
- package/graph-ui/graph-model.js +133 -0
- package/graph-ui/graph-relations.js +171 -0
- package/graph-ui/graph-search.js +98 -0
- package/graph-ui/index.html +26 -12
- package/graph-ui/model.js +47 -77
- package/graph-ui/relations.js +6 -125
- package/graph-ui/structure.js +48 -1
- package/graph-ui/style.css +33 -0
- package/package.json +10 -8
- package/templates/app/.dockerignore +2 -0
- package/templates/app/.env.example +68 -14
- package/templates/app/AGENTS.md +135 -12
- package/templates/app/Dockerfile +2 -0
- package/templates/app/README.md +49 -16
- package/templates/app/_gitignore +9 -0
- package/templates/app/apps/api/package.json +2 -2
- package/templates/app/apps/api/src/main.ts +5 -1
- package/templates/app/apps/api/src/worker.ts +3 -0
- package/templates/app/apps/web/index.html +1 -0
- package/templates/app/apps/web/package.json +7 -3
- package/templates/app/apps/web/src/app/app.tsx +128 -0
- package/templates/app/apps/web/src/{style.css → app/styles/global.css} +88 -8
- package/templates/app/apps/web/src/app/use-session.ts +43 -0
- package/templates/app/apps/web/src/app/workspace-layout.tsx +109 -0
- package/templates/app/apps/web/src/main.tsx +9 -543
- package/templates/app/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +31 -0
- package/templates/app/apps/web/src/modules/approval/index.ts +6 -0
- package/templates/app/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +73 -0
- package/templates/app/apps/web/src/modules/auth/index.ts +5 -0
- package/templates/app/apps/web/src/modules/auth/pages/login-page.tsx +71 -0
- package/templates/app/apps/web/src/modules/inventory/index.ts +5 -0
- package/templates/app/apps/web/src/modules/inventory/pages/inventory-page.tsx +102 -0
- package/templates/app/apps/web/src/modules/purchase/components/approval-history.tsx +32 -0
- package/templates/app/apps/web/src/modules/purchase/components/order-attachments.tsx +29 -0
- package/templates/app/apps/web/src/modules/purchase/components/purchase-assistant-context.tsx +17 -0
- package/templates/app/apps/web/src/modules/purchase/components/purchase-order-form.css +6 -0
- package/templates/app/apps/web/src/modules/purchase/components/purchase-order-form.tsx +82 -0
- package/templates/app/apps/web/src/modules/purchase/index.ts +7 -0
- package/templates/app/apps/web/src/modules/purchase/lib/presentation.ts +20 -0
- package/templates/app/apps/web/src/modules/purchase/pages/purchase-intelligence.css +15 -0
- package/templates/app/apps/web/src/modules/purchase/pages/purchase-order-detail-page.tsx +154 -0
- package/templates/app/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +240 -0
- package/templates/app/apps/web/src/modules/workspace/index.ts +5 -0
- package/templates/app/apps/web/src/modules/workspace/pages/home-page.tsx +44 -0
- package/templates/app/apps/web/src/shared/hooks/use-command.ts +42 -0
- package/templates/app/apps/web/src/shared/lib/error-message.ts +24 -0
- package/templates/app/apps/web/src/shared/lib/navigation.ts +21 -0
- package/templates/app/apps/web/src/shared/ui/assistant-markdown.tsx +19 -0
- package/templates/app/apps/web/src/shared/ui/assistant-panel.css +134 -0
- package/templates/app/apps/web/src/shared/ui/assistant-panel.tsx +200 -0
- package/templates/app/apps/web/src/shared/ui/assistant-scope.tsx +72 -0
- package/templates/app/apps/web/src/shared/ui/attachment-upload.css +28 -0
- package/templates/app/apps/web/src/shared/ui/attachment-upload.tsx +163 -0
- package/templates/app/apps/web/src/shared/ui/notice.tsx +20 -0
- package/templates/app/apps/web/src/shared/ui/page-heading.tsx +35 -0
- package/templates/app/apps/web/src/shared/ui/page-state.css +47 -0
- package/templates/app/apps/web/src/shared/ui/page-state.tsx +76 -0
- package/templates/app/apps/web/src/shared/ui/require-capability.tsx +34 -0
- package/templates/app/apps/web/vite.config.ts +8 -0
- package/templates/app/cage.config.json +10 -1
- package/templates/app/db/migrations/0002_draft.sql +12 -0
- package/templates/app/db/migrations/0003_draft.sql +8 -0
- package/templates/app/deploy/nginx.conf +52 -0
- package/templates/app/docs/ai/README.md +98 -0
- package/templates/app/docs/ai/architecture.md +148 -0
- package/templates/app/docs/ai/commenting.md +203 -0
- package/templates/app/docs/ai/diagnostics.md +80 -0
- package/templates/app/docs/ai/files.md +93 -0
- package/templates/app/docs/ai/intelligence.md +348 -0
- package/templates/app/docs/ai/ontology-context.md +172 -0
- package/templates/app/docs/ai/primitives.md +282 -0
- package/templates/app/docs/ai/project-structure.md +128 -0
- package/templates/app/docs/ai/purchase-example.md +111 -0
- package/templates/app/docs/ai/recipes.md +89 -0
- package/templates/app/docs/ai/relations.md +160 -0
- package/templates/app/docs/ai/routing.md +86 -0
- package/templates/app/docs/ai/transfers.md +92 -0
- package/templates/app/docs/ai/troubleshooting.md +65 -0
- package/templates/app/docs/ai/workflow.md +152 -0
- package/templates/app/docs/errors/CAGE-AI-001.md +61 -0
- package/templates/app/docs/errors/CAGE-APPR-001.md +48 -0
- package/templates/app/docs/errors/CAGE-APPR-002.md +47 -0
- package/templates/app/docs/errors/CAGE-APPR-003.md +47 -0
- package/templates/app/docs/errors/CAGE-APPR-004.md +47 -0
- package/templates/app/docs/errors/CAGE-APPR-005.md +47 -0
- package/templates/app/docs/errors/CAGE-APPR-006.md +53 -0
- package/templates/app/docs/errors/CAGE-APPR-007.md +50 -0
- package/templates/app/docs/errors/CAGE-APPR-010.md +48 -0
- package/templates/app/docs/errors/CAGE-AUDIT-001.md +53 -0
- package/templates/app/docs/errors/CAGE-AUTH-001.md +47 -0
- package/templates/app/docs/errors/CAGE-BIZ-001.md +51 -0
- package/templates/app/docs/errors/CAGE-BIZ-002.md +49 -0
- package/templates/app/docs/errors/CAGE-BUDGET-001.md +47 -0
- package/templates/app/docs/errors/CAGE-BUDGET-002.md +47 -0
- package/templates/app/docs/errors/CAGE-BUDGET-003.md +47 -0
- package/templates/app/docs/errors/CAGE-CMD-002.md +47 -0
- package/templates/app/docs/errors/CAGE-CMD-003.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-001.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-002.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-003.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-004.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-005.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-006.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-007.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-008.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-009.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-010.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-011.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-012.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-013.md +49 -0
- package/templates/app/docs/errors/CAGE-CONN-014.md +48 -0
- package/templates/app/docs/errors/CAGE-CONN-015.md +49 -0
- package/templates/app/docs/errors/CAGE-CREATE-001.md +53 -0
- package/templates/app/docs/errors/CAGE-DECL-001.md +48 -0
- package/templates/app/docs/errors/CAGE-DECL-002.md +48 -0
- package/templates/app/docs/errors/CAGE-DECL-003.md +47 -0
- package/templates/app/docs/errors/CAGE-DECL-004.md +47 -0
- package/templates/app/docs/errors/CAGE-DEP-001.md +48 -0
- package/templates/app/docs/errors/CAGE-DEP-002.md +47 -0
- package/templates/app/docs/errors/CAGE-DEP-003.md +47 -0
- package/templates/app/docs/errors/CAGE-DEP-004.md +47 -0
- package/templates/app/docs/errors/CAGE-DEP-005.md +47 -0
- package/templates/app/docs/errors/CAGE-DIAG-001.md +53 -0
- package/templates/app/docs/errors/CAGE-DLQ-001.md +48 -0
- package/templates/app/docs/errors/CAGE-ENV-001.md +52 -0
- package/templates/app/docs/errors/CAGE-ENV-002.md +51 -0
- package/templates/app/docs/errors/CAGE-ENV-003.md +48 -0
- package/templates/app/docs/errors/CAGE-EVENT-001.md +47 -0
- package/templates/app/docs/errors/CAGE-EVENT-002.md +50 -0
- package/templates/app/docs/errors/CAGE-FIELD-001.md +47 -0
- package/templates/app/docs/errors/CAGE-FIELD-002.md +47 -0
- package/templates/app/docs/errors/CAGE-FIELD-003.md +47 -0
- package/templates/app/docs/errors/CAGE-FIELD-004.md +47 -0
- package/templates/app/docs/errors/CAGE-FILE-001.md +56 -0
- package/templates/app/docs/errors/CAGE-GEN-001.md +48 -0
- package/templates/app/docs/errors/CAGE-GEN-002.md +47 -0
- package/templates/app/docs/errors/CAGE-GEN-003.md +53 -0
- package/templates/app/docs/errors/CAGE-GRANT-001.md +49 -0
- package/templates/app/docs/errors/CAGE-GRANT-002.md +48 -0
- package/templates/app/docs/errors/CAGE-GRANT-003.md +48 -0
- package/templates/app/docs/errors/CAGE-IMPACT-001.md +48 -0
- package/templates/app/docs/errors/CAGE-IMPACT-002.md +52 -0
- package/templates/app/docs/errors/CAGE-INIT-001.md +47 -0
- package/templates/app/docs/errors/CAGE-INIT-002.md +49 -0
- package/templates/app/docs/errors/CAGE-INIT-003.md +48 -0
- package/templates/app/docs/errors/CAGE-INIT-004.md +48 -0
- package/templates/app/docs/errors/CAGE-INIT-005.md +52 -0
- package/templates/app/docs/errors/CAGE-JOB-001.md +47 -0
- package/templates/app/docs/errors/CAGE-JOB-002.md +47 -0
- package/templates/app/docs/errors/CAGE-JOB-003.md +47 -0
- package/templates/app/docs/errors/CAGE-LINT-001.md +47 -0
- package/templates/app/docs/errors/CAGE-MIG-001.md +47 -0
- package/templates/app/docs/errors/CAGE-MIG-002.md +47 -0
- package/templates/app/docs/errors/CAGE-MIG-003.md +5 -0
- package/templates/app/docs/errors/CAGE-MIG-004.md +5 -0
- package/templates/app/docs/errors/CAGE-MIG-005.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-001.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-002.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-003.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-004.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-005.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-006.md +47 -0
- package/templates/app/docs/errors/CAGE-ORG-001.md +50 -0
- package/templates/app/docs/errors/CAGE-PAIR-002.md +51 -0
- package/templates/app/docs/errors/CAGE-QUERY-001.md +47 -0
- package/templates/app/docs/errors/CAGE-QUERY-002.md +47 -0
- package/templates/app/docs/errors/CAGE-QUERY-003.md +50 -0
- package/templates/app/docs/errors/CAGE-REACT-001.md +47 -0
- package/templates/app/docs/errors/CAGE-REACT-002.md +47 -0
- package/templates/app/docs/errors/CAGE-REACT-003.md +50 -0
- package/templates/app/docs/errors/CAGE-READS-001.md +50 -0
- package/templates/app/docs/errors/CAGE-REG-001.md +54 -0
- package/templates/app/docs/errors/CAGE-REG-002.md +49 -0
- package/templates/app/docs/errors/CAGE-REG-003.md +47 -0
- package/templates/app/docs/errors/CAGE-REL-001.md +64 -0
- package/templates/app/docs/errors/CAGE-ROUTE-001.md +48 -0
- package/templates/app/docs/errors/CAGE-SCOPE-001.md +47 -0
- package/templates/app/docs/errors/CAGE-SCOPE-002.md +47 -0
- package/templates/app/docs/errors/CAGE-SECRET-001.md +48 -0
- package/templates/app/docs/errors/CAGE-SECRET-002.md +47 -0
- package/templates/app/docs/errors/CAGE-SENS-001.md +48 -0
- package/templates/app/docs/errors/CAGE-SQL-001.md +47 -0
- package/templates/app/docs/errors/CAGE-SQL-002.md +47 -0
- package/templates/app/docs/errors/CAGE-STATE-001.md +49 -0
- package/templates/app/docs/errors/CAGE-STATE-002.md +47 -0
- package/templates/app/docs/errors/CAGE-STATE-003.md +47 -0
- package/templates/app/docs/errors/CAGE-STATE-004.md +47 -0
- package/templates/app/docs/errors/CAGE-STATE-005.md +49 -0
- package/templates/app/docs/errors/CAGE-STATE-010.md +48 -0
- package/templates/app/docs/errors/CAGE-STATE-011.md +48 -0
- package/templates/app/docs/errors/CAGE-STRUCT-001.md +51 -0
- package/templates/app/docs/errors/CAGE-STRUCT-002.md +51 -0
- package/templates/app/docs/errors/CAGE-SYNC-001.md +49 -0
- package/templates/app/docs/errors/CAGE-TEST-001.md +47 -0
- package/templates/app/docs/errors/CAGE-TEST-002.md +50 -0
- package/templates/app/docs/errors/CAGE-TEST-003.md +52 -0
- package/templates/app/docs/errors/CAGE-UNSAFE-001.md +49 -0
- package/templates/app/docs/errors/CAGE-UPGRADE-001.md +48 -0
- package/templates/app/docs/errors/CAGE-WORKER-001.md +48 -0
- package/templates/app/docs/errors/CAGE-WORKER-002.md +50 -0
- package/templates/app/docs/errors/CAGE-WORKER-003.md +48 -0
- package/templates/app/docs/errors/README.md +357 -0
- package/templates/app/docs/errors/runtime.md +50 -0
- package/templates/app/package.json +4 -7
- package/templates/app/packages/contracts/package.json +1 -1
- package/templates/app/packages/contracts/src/{dept.ts → aggregates/dept/index.ts} +11 -11
- package/templates/app/packages/contracts/src/{inventory.ts → aggregates/inventory/index.ts} +6 -6
- package/templates/app/packages/contracts/src/{inventory-lock.ts → aggregates/inventory-lock/index.ts} +5 -5
- package/templates/app/packages/contracts/src/aggregates/purchase-order/index.ts +86 -0
- package/templates/app/packages/contracts/src/{role.ts → aggregates/role/index.ts} +16 -16
- package/templates/app/packages/contracts/src/aggregates/user/index.ts +89 -0
- package/templates/app/packages/contracts/src/index.ts +20 -14
- package/templates/app/packages/contracts/src/{queries.ts → queries/index.ts} +2 -2
- package/templates/app/packages/domain/package.json +5 -4
- package/templates/app/packages/domain/src/index.ts +8 -7
- package/templates/app/packages/domain/src/{erp.ts → integrations/erp.ts} +16 -1
- package/templates/app/packages/domain/src/integrations/intelligence.ts +20 -0
- package/templates/app/packages/domain/src/modules/inventory/index.ts +3 -0
- package/templates/app/packages/domain/src/{inventory.ts → modules/inventory/inventory.ts} +12 -0
- package/templates/app/packages/domain/src/modules/purchase/approvals.ts +39 -0
- package/templates/app/packages/domain/src/modules/purchase/index.ts +7 -0
- package/templates/app/packages/domain/src/modules/purchase/intelligence.test.ts +62 -0
- package/templates/app/packages/domain/src/{jobs.ts → modules/purchase/jobs.ts} +5 -0
- package/templates/app/packages/domain/src/{purchase-order.test.ts → modules/purchase/purchase-order.test.ts} +11 -2
- package/templates/app/packages/domain/src/modules/purchase/purchase-order.ts +192 -0
- package/templates/app/packages/domain/src/{queries.ts → modules/purchase/queries.ts} +5 -0
- package/templates/app/packages/domain/src/{reactions.ts → workflows/purchase-inventory.ts} +8 -2
- package/templates/app/packages/domain/src/workflows/purchase-process.ts +42 -0
- package/templates/blank/.dockerignore +12 -0
- package/templates/blank/.env.example +71 -0
- package/templates/blank/.github/workflows/cage.yml +44 -0
- package/templates/blank/AGENTS.md +136 -0
- package/templates/blank/Dockerfile +25 -0
- package/templates/blank/README.md +40 -0
- package/templates/blank/_gitignore +9 -0
- package/templates/blank/apps/api/package.json +15 -0
- package/templates/blank/apps/api/src/main.ts +14 -0
- package/templates/blank/apps/api/src/worker.ts +10 -0
- package/templates/blank/apps/api/tsconfig.json +5 -0
- package/templates/blank/apps/web/index.html +14 -0
- package/templates/blank/apps/web/package.json +26 -0
- package/templates/blank/apps/web/src/app/app.tsx +106 -0
- package/templates/blank/apps/web/src/app/styles/global.css +606 -0
- package/templates/blank/apps/web/src/app/use-session.ts +43 -0
- package/templates/blank/apps/web/src/app/workspace-layout.tsx +95 -0
- package/templates/blank/apps/web/src/main.tsx +18 -0
- package/templates/blank/apps/web/src/modules/auth/index.ts +5 -0
- package/templates/blank/apps/web/src/modules/auth/pages/login-page.tsx +104 -0
- package/templates/blank/apps/web/src/modules/directory/index.ts +7 -0
- package/templates/blank/apps/web/src/modules/directory/pages/user-detail-page.tsx +78 -0
- package/templates/blank/apps/web/src/modules/directory/pages/users-page.tsx +93 -0
- package/templates/blank/apps/web/src/modules/workspace/index.ts +5 -0
- package/templates/blank/apps/web/src/modules/workspace/pages/home-page.tsx +62 -0
- package/templates/blank/apps/web/src/shared/lib/error-message.ts +22 -0
- package/templates/blank/apps/web/src/shared/lib/navigation.ts +21 -0
- package/templates/blank/apps/web/src/shared/ui/brand.tsx +19 -0
- package/templates/blank/apps/web/src/shared/ui/page-state.css +47 -0
- package/templates/blank/apps/web/src/shared/ui/page-state.tsx +76 -0
- package/templates/blank/apps/web/src/shared/ui/require-capability.tsx +34 -0
- package/templates/blank/apps/web/tsconfig.json +11 -0
- package/templates/blank/apps/web/vite.config.ts +24 -0
- package/templates/blank/cage.config.json +14 -0
- package/templates/blank/db/migrations/0001_init.sql +63 -0
- package/templates/blank/deploy/nginx.conf +52 -0
- package/templates/blank/docs/ai/README.md +98 -0
- package/templates/blank/docs/ai/architecture.md +148 -0
- package/templates/blank/docs/ai/commenting.md +203 -0
- package/templates/blank/docs/ai/diagnostics.md +80 -0
- package/templates/blank/docs/ai/files.md +93 -0
- package/templates/blank/docs/ai/intelligence.md +348 -0
- package/templates/blank/docs/ai/ontology-context.md +172 -0
- package/templates/blank/docs/ai/primitives.md +282 -0
- package/templates/blank/docs/ai/project-structure.md +128 -0
- package/templates/blank/docs/ai/purchase-example.md +111 -0
- package/templates/blank/docs/ai/recipes.md +89 -0
- package/templates/blank/docs/ai/relations.md +160 -0
- package/templates/blank/docs/ai/routing.md +86 -0
- package/templates/blank/docs/ai/transfers.md +92 -0
- package/templates/blank/docs/ai/troubleshooting.md +65 -0
- package/templates/blank/docs/ai/workflow.md +152 -0
- package/templates/blank/docs/errors/CAGE-AI-001.md +61 -0
- package/templates/blank/docs/errors/CAGE-APPR-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-APPR-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-APPR-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-APPR-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-APPR-005.md +47 -0
- package/templates/blank/docs/errors/CAGE-APPR-006.md +53 -0
- package/templates/blank/docs/errors/CAGE-APPR-007.md +50 -0
- package/templates/blank/docs/errors/CAGE-APPR-010.md +48 -0
- package/templates/blank/docs/errors/CAGE-AUDIT-001.md +53 -0
- package/templates/blank/docs/errors/CAGE-AUTH-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-BIZ-001.md +51 -0
- package/templates/blank/docs/errors/CAGE-BIZ-002.md +49 -0
- package/templates/blank/docs/errors/CAGE-BUDGET-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-BUDGET-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-BUDGET-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-CMD-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-CMD-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-005.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-006.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-007.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-008.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-009.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-010.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-011.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-012.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-013.md +49 -0
- package/templates/blank/docs/errors/CAGE-CONN-014.md +48 -0
- package/templates/blank/docs/errors/CAGE-CONN-015.md +49 -0
- package/templates/blank/docs/errors/CAGE-CREATE-001.md +53 -0
- package/templates/blank/docs/errors/CAGE-DECL-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-DECL-002.md +48 -0
- package/templates/blank/docs/errors/CAGE-DECL-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-DECL-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-DEP-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-DEP-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-DEP-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-DEP-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-DEP-005.md +47 -0
- package/templates/blank/docs/errors/CAGE-DIAG-001.md +53 -0
- package/templates/blank/docs/errors/CAGE-DLQ-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-ENV-001.md +52 -0
- package/templates/blank/docs/errors/CAGE-ENV-002.md +51 -0
- package/templates/blank/docs/errors/CAGE-ENV-003.md +48 -0
- package/templates/blank/docs/errors/CAGE-EVENT-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-EVENT-002.md +50 -0
- package/templates/blank/docs/errors/CAGE-FIELD-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-FIELD-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-FIELD-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-FIELD-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-FILE-001.md +56 -0
- package/templates/blank/docs/errors/CAGE-GEN-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-GEN-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-GEN-003.md +53 -0
- package/templates/blank/docs/errors/CAGE-GRANT-001.md +49 -0
- package/templates/blank/docs/errors/CAGE-GRANT-002.md +48 -0
- package/templates/blank/docs/errors/CAGE-GRANT-003.md +48 -0
- package/templates/blank/docs/errors/CAGE-IMPACT-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-IMPACT-002.md +52 -0
- package/templates/blank/docs/errors/CAGE-INIT-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-INIT-002.md +49 -0
- package/templates/blank/docs/errors/CAGE-INIT-003.md +48 -0
- package/templates/blank/docs/errors/CAGE-INIT-004.md +48 -0
- package/templates/blank/docs/errors/CAGE-INIT-005.md +52 -0
- package/templates/blank/docs/errors/CAGE-JOB-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-JOB-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-JOB-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-LINT-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-MIG-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-MIG-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-MIG-003.md +5 -0
- package/templates/blank/docs/errors/CAGE-MIG-004.md +5 -0
- package/templates/blank/docs/errors/CAGE-MIG-005.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-005.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-006.md +47 -0
- package/templates/blank/docs/errors/CAGE-ORG-001.md +50 -0
- package/templates/blank/docs/errors/CAGE-PAIR-002.md +51 -0
- package/templates/blank/docs/errors/CAGE-QUERY-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-QUERY-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-QUERY-003.md +50 -0
- package/templates/blank/docs/errors/CAGE-REACT-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-REACT-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-REACT-003.md +50 -0
- package/templates/blank/docs/errors/CAGE-READS-001.md +50 -0
- package/templates/blank/docs/errors/CAGE-REG-001.md +54 -0
- package/templates/blank/docs/errors/CAGE-REG-002.md +49 -0
- package/templates/blank/docs/errors/CAGE-REG-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-REL-001.md +64 -0
- package/templates/blank/docs/errors/CAGE-ROUTE-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-SCOPE-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-SCOPE-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-SECRET-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-SECRET-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-SENS-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-SQL-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-SQL-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-STATE-001.md +49 -0
- package/templates/blank/docs/errors/CAGE-STATE-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-STATE-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-STATE-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-STATE-005.md +49 -0
- package/templates/blank/docs/errors/CAGE-STATE-010.md +48 -0
- package/templates/blank/docs/errors/CAGE-STATE-011.md +48 -0
- package/templates/blank/docs/errors/CAGE-STRUCT-001.md +51 -0
- package/templates/blank/docs/errors/CAGE-STRUCT-002.md +51 -0
- package/templates/blank/docs/errors/CAGE-SYNC-001.md +49 -0
- package/templates/blank/docs/errors/CAGE-TEST-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-TEST-002.md +50 -0
- package/templates/blank/docs/errors/CAGE-TEST-003.md +52 -0
- package/templates/blank/docs/errors/CAGE-UNSAFE-001.md +49 -0
- package/templates/blank/docs/errors/CAGE-UPGRADE-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-WORKER-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-WORKER-002.md +50 -0
- package/templates/blank/docs/errors/CAGE-WORKER-003.md +48 -0
- package/templates/blank/docs/errors/README.md +357 -0
- package/templates/blank/docs/errors/runtime.md +50 -0
- package/templates/blank/docs/examples/purchase-admin/README.md +5 -0
- package/templates/blank/docs/examples/purchase-admin/apps/api/src/main.ts +14 -0
- package/templates/blank/docs/examples/purchase-admin/apps/api/src/worker.ts +17 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/app.tsx +128 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/styles/global.css +743 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/use-session.ts +43 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/workspace-layout.tsx +109 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/main.tsx +18 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +31 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/index.ts +6 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +73 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/auth/index.ts +5 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/auth/pages/login-page.tsx +71 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/inventory/index.ts +5 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/inventory/pages/inventory-page.tsx +102 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/approval-history.tsx +32 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/order-attachments.tsx +29 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-assistant-context.tsx +17 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-order-form.css +6 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-order-form.tsx +82 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/index.ts +7 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/lib/presentation.ts +20 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-intelligence.css +15 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-order-detail-page.tsx +154 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +240 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/workspace/index.ts +5 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/workspace/pages/home-page.tsx +44 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/hooks/use-command.ts +42 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/error-message.ts +24 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/navigation.ts +21 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-markdown.tsx +19 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-panel.css +134 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-panel.tsx +200 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-scope.tsx +72 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/attachment-upload.css +28 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/attachment-upload.tsx +163 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/notice.tsx +20 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-heading.tsx +35 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-state.css +47 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-state.tsx +76 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/require-capability.tsx +34 -0
- package/templates/blank/docs/examples/purchase-admin/cage.config.json +123 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/dept/index.ts +74 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/inventory/index.ts +57 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/inventory-lock/index.ts +52 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/purchase-order/index.ts +86 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/role/index.ts +85 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/user/index.ts +89 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/index.ts +87 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/queries/index.ts +17 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/index.ts +10 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/integrations/erp.ts +51 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/integrations/intelligence.ts +20 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/inventory/index.ts +3 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/inventory/inventory.ts +55 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approvals.ts +39 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/index.ts +7 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/intelligence.test.ts +62 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/jobs.ts +18 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.test.ts +146 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.ts +192 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/queries.ts +15 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/workflows/purchase-inventory.ts +30 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/workflows/purchase-process.ts +42 -0
- package/templates/blank/package.json +22 -0
- package/templates/blank/packages/contracts/package.json +16 -0
- package/templates/blank/packages/contracts/src/aggregates/dept/index.ts +74 -0
- package/templates/blank/packages/contracts/src/aggregates/role/index.ts +85 -0
- package/templates/blank/packages/contracts/src/aggregates/user/index.ts +89 -0
- package/templates/blank/packages/contracts/src/index.ts +55 -0
- package/templates/blank/packages/contracts/src/queries/index.ts +13 -0
- package/templates/blank/packages/contracts/tsconfig.json +5 -0
- package/templates/blank/packages/domain/package.json +24 -0
- package/templates/blank/packages/domain/src/index.ts +5 -0
- package/templates/blank/packages/domain/tsconfig.json +5 -0
- package/templates/blank/pnpm-workspace.yaml +10 -0
- package/templates/blank/renovate.json +5 -0
- package/templates/blank/tsconfig.base.json +8 -0
- package/dist/database.d.ts +0 -5
- package/dist/database.js +0 -70
- package/dist/database.js.map +0 -1
- package/managed/errors/CAGE-APPR-001.md +0 -32
- package/managed/errors/CAGE-APPR-002.md +0 -32
- package/managed/errors/CAGE-APPR-003.md +0 -32
- package/managed/errors/CAGE-APPR-004.md +0 -32
- package/managed/errors/CAGE-APPR-005.md +0 -32
- package/managed/errors/CAGE-APPR-006.md +0 -32
- package/managed/errors/CAGE-APPR-007.md +0 -32
- package/managed/errors/CAGE-APPR-010.md +0 -32
- package/managed/errors/CAGE-AUTH-001.md +0 -32
- package/managed/errors/CAGE-BUDGET-001.md +0 -32
- package/managed/errors/CAGE-BUDGET-002.md +0 -32
- package/managed/errors/CAGE-BUDGET-003.md +0 -32
- package/managed/errors/CAGE-CMD-002.md +0 -32
- package/managed/errors/CAGE-CMD-003.md +0 -34
- package/managed/errors/CAGE-CONN-001.md +0 -32
- package/managed/errors/CAGE-CONN-002.md +0 -32
- package/managed/errors/CAGE-CONN-003.md +0 -32
- package/managed/errors/CAGE-CONN-004.md +0 -32
- package/managed/errors/CAGE-CONN-005.md +0 -32
- package/managed/errors/CAGE-CONN-006.md +0 -32
- package/managed/errors/CAGE-CONN-007.md +0 -32
- package/managed/errors/CAGE-CONN-008.md +0 -32
- package/managed/errors/CAGE-CONN-009.md +0 -32
- package/managed/errors/CAGE-CONN-010.md +0 -32
- package/managed/errors/CAGE-CONN-011.md +0 -32
- package/managed/errors/CAGE-CONN-012.md +0 -32
- package/managed/errors/CAGE-CREATE-001.md +0 -32
- package/managed/errors/CAGE-DECL-001.md +0 -34
- package/managed/errors/CAGE-DECL-002.md +0 -34
- package/managed/errors/CAGE-DECL-003.md +0 -34
- package/managed/errors/CAGE-DECL-004.md +0 -34
- package/managed/errors/CAGE-DEP-001.md +0 -34
- package/managed/errors/CAGE-DEP-002.md +0 -34
- package/managed/errors/CAGE-DEP-003.md +0 -34
- package/managed/errors/CAGE-DEP-004.md +0 -34
- package/managed/errors/CAGE-DEP-005.md +0 -34
- package/managed/errors/CAGE-DLQ-001.md +0 -32
- package/managed/errors/CAGE-ENV-001.md +0 -32
- package/managed/errors/CAGE-EVENT-001.md +0 -32
- package/managed/errors/CAGE-EVENT-002.md +0 -32
- package/managed/errors/CAGE-FIELD-001.md +0 -32
- package/managed/errors/CAGE-FIELD-002.md +0 -32
- package/managed/errors/CAGE-FIELD-003.md +0 -32
- package/managed/errors/CAGE-FIELD-004.md +0 -32
- package/managed/errors/CAGE-GEN-001.md +0 -33
- package/managed/errors/CAGE-GEN-002.md +0 -33
- package/managed/errors/CAGE-GRANT-001.md +0 -32
- package/managed/errors/CAGE-GRANT-002.md +0 -32
- package/managed/errors/CAGE-GRANT-003.md +0 -32
- package/managed/errors/CAGE-IMPACT-001.md +0 -32
- package/managed/errors/CAGE-JOB-001.md +0 -32
- package/managed/errors/CAGE-JOB-002.md +0 -32
- package/managed/errors/CAGE-JOB-003.md +0 -32
- package/managed/errors/CAGE-LINT-001.md +0 -32
- package/managed/errors/CAGE-MIG-001.md +0 -32
- package/managed/errors/CAGE-MIG-002.md +0 -32
- package/managed/errors/CAGE-MIG-003.md +0 -32
- package/managed/errors/CAGE-MIG-004.md +0 -32
- package/managed/errors/CAGE-MIG-005.md +0 -32
- package/managed/errors/CAGE-NAME-001.md +0 -32
- package/managed/errors/CAGE-NAME-002.md +0 -32
- package/managed/errors/CAGE-NAME-003.md +0 -32
- package/managed/errors/CAGE-NAME-004.md +0 -32
- package/managed/errors/CAGE-NAME-005.md +0 -32
- package/managed/errors/CAGE-NAME-006.md +0 -32
- package/managed/errors/CAGE-ORG-001.md +0 -32
- package/managed/errors/CAGE-PAIR-002.md +0 -33
- package/managed/errors/CAGE-QUERY-001.md +0 -32
- package/managed/errors/CAGE-QUERY-002.md +0 -32
- package/managed/errors/CAGE-QUERY-003.md +0 -32
- package/managed/errors/CAGE-REACT-001.md +0 -32
- package/managed/errors/CAGE-REACT-002.md +0 -32
- package/managed/errors/CAGE-READS-001.md +0 -32
- package/managed/errors/CAGE-REG-001.md +0 -32
- package/managed/errors/CAGE-REG-002.md +0 -32
- package/managed/errors/CAGE-REG-003.md +0 -32
- package/managed/errors/CAGE-ROUTE-001.md +0 -32
- package/managed/errors/CAGE-SCOPE-001.md +0 -32
- package/managed/errors/CAGE-SCOPE-002.md +0 -32
- package/managed/errors/CAGE-SECRET-001.md +0 -32
- package/managed/errors/CAGE-SECRET-002.md +0 -32
- package/managed/errors/CAGE-SENS-001.md +0 -32
- package/managed/errors/CAGE-SQL-001.md +0 -32
- package/managed/errors/CAGE-SQL-002.md +0 -32
- package/managed/errors/CAGE-STATE-001.md +0 -32
- package/managed/errors/CAGE-STATE-002.md +0 -32
- package/managed/errors/CAGE-STATE-003.md +0 -32
- package/managed/errors/CAGE-STATE-004.md +0 -32
- package/managed/errors/CAGE-STATE-005.md +0 -32
- package/managed/errors/CAGE-STATE-010.md +0 -32
- package/managed/errors/CAGE-STATE-011.md +0 -32
- package/managed/errors/CAGE-SYNC-001.md +0 -35
- package/managed/errors/CAGE-TEST-001.md +0 -33
- package/managed/errors/CAGE-UNSAFE-001.md +0 -32
- package/managed/errors/CAGE-UPGRADE-001.md +0 -32
- package/managed/errors/README.md +0 -99
- package/templates/app/compose.yaml +0 -39
- package/templates/app/packages/contracts/src/purchase-order.ts +0 -72
- package/templates/app/packages/contracts/src/user.ts +0 -89
- package/templates/app/packages/domain/src/approvals.ts +0 -18
- package/templates/app/packages/domain/src/purchase-order.ts +0 -122
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# CAGE-PAIR-002:离开持有资源状态却没有释放
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:图规则。
|
|
10
|
+
|
|
11
|
+
图规则沿进入状态的 acquires 反应推断资源持有,发现离开该状态的迁移没有 releases 路径,也未进入同样持有的状态。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 沿报错命令 → emits → reaction → 释放命令检查,新增所需事件与真正释放行为。
|
|
16
|
+
2. 释放反应标注与获取一致的资源名;检查取消、收货、撤回等每条离开路径及 map 的条件分支。
|
|
17
|
+
3. 标签只参与静态分析,不会自动释放资源;重要路径需用业务数据验证。不要删除 acquires 或添加永不执行的 map 来骗过检查。
|
|
18
|
+
|
|
19
|
+
## 正例
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
reaction(OrderCancelled, { command: releaseLock, releases: 'inventory.lock', map: e => e.previousStatus === 'approved' ? { id: e.orderId } : null })
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 反例
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
新增 approved → draft 的撤回命令,却没有事件及释放反应
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 修复后验证
|
|
32
|
+
|
|
33
|
+
重跑 cage check,并用业务用例验证每条关键离开路径确实释放资源。
|
|
34
|
+
|
|
35
|
+
## 框架内的检查位置
|
|
36
|
+
|
|
37
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
38
|
+
|
|
39
|
+
- `packages/cli/src/rules.ts:63`
|
|
40
|
+
- `packages/cli/src/rules.ts:67`
|
|
41
|
+
- `packages/cli/src/rules.ts:81`
|
|
42
|
+
|
|
43
|
+
实现片段(位置随框架版本更新):
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
|
|
47
|
+
/** CAGE-PAIR-002:进入某状态时获得了资源,从该状态出发的每一条迁移都必须释放它,或进入一个同样持有它的状态 */
|
|
48
|
+
/**
|
|
49
|
+
* 检查离开持有状态的迁移是否声明释放,或进入同样持有资源的状态。
|
|
50
|
+
* @param g 当前图。
|
|
51
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-QUERY-001:查询必须选择一种实现
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明 / 图规则。
|
|
10
|
+
|
|
11
|
+
query 同时提供或同时未提供 sql/build。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 在参数化手写 SQL 与查询构建器之间选择一种,显式声明 reads 和 input。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
query('poByStatus', { reads: [PurchaseOrder], input, sql })
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
query('poByStatus', { reads: [PurchaseOrder], sql, build })
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage check/gen;用普通用户验证查询参数、read 能力、范围和掩码。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/kernel/src/primitives/flow.ts:166`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
if (!/^[a-z][A-Za-z0-9]*$/.test(name)) throw declError('CAGE-NAME-005', `查询名 ${name} 必须是小驼峰`);
|
|
43
|
+
if (!def.sql === !def.build) throw declError('CAGE-QUERY-001', `查询 ${name} 必须二选一:sql 或 build`);
|
|
44
|
+
if (def.sql && /\bcore\.|\bsys\./i.test(def.sql)) {
|
|
45
|
+
throw declError('CAGE-QUERY-002', `查询 ${name} 引用了基表,只能引用 safe.* 安全视图`);
|
|
46
|
+
}
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-QUERY-002:自定义查询直接访问基表
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明 / 图规则。
|
|
10
|
+
|
|
11
|
+
query.sql 引用了 core.* 或 sys.*。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 改成对应 safe 视图,让只读账号落实范围与掩码。需要系统管理数据时使用框架已有系统接口,不绕过安全层。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
'select amount from safe.purchase_order where status = :status'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
'select * from core.purchase_order'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage check/gen;用普通用户验证查询参数、read 能力、范围和掩码。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/kernel/src/primitives/flow.ts:168`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
if (def.sql && /\bcore\.|\bsys\./i.test(def.sql)) {
|
|
43
|
+
throw declError('CAGE-QUERY-002', `查询 ${name} 引用了基表,只能引用 safe.* 安全视图`);
|
|
44
|
+
}
|
|
45
|
+
if (def.audit && !def.audit.purpose.trim()) throw declError('CAGE-QUERY-003', `查询 ${name} 的审计 purpose 不能为空`);
|
|
46
|
+
return Object.freeze({
|
|
47
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# CAGE-QUERY-003:查询读取范围与声明不一致
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明 / 图规则。
|
|
10
|
+
|
|
11
|
+
SQL 引用了 reads 未声明聚合的 safe 视图,或引用非 safe 的限定表。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 在 reads 列出每个实际读取的聚合,并只查询相应安全视图;join 同样要声明。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
reads: [PurchaseOrder];SQL from safe.purchase_order
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
reads: [];SQL from safe.purchase_order
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage check/gen;用普通用户验证查询参数、read 能力、范围和掩码。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/cli/src/rules.ts:208`
|
|
38
|
+
- `packages/cli/src/rules.ts:228`
|
|
39
|
+
- `packages/cli/src/rules.ts:246`
|
|
40
|
+
- `packages/kernel/src/primitives/flow.ts:170`
|
|
41
|
+
|
|
42
|
+
实现片段(位置随框架版本更新):
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
|
|
46
|
+
/** CAGE-QUERY-003:手写 SQL 只能引用 reads 里聚合的安全视图 */
|
|
47
|
+
/**
|
|
48
|
+
* 从 SQL 文本检查 safe 视图与 reads 对应关系及显式基表引用。
|
|
49
|
+
* @param g 当前图。
|
|
50
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-REACT-001:反应目标与命令聚合不一致
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明 / 写流水线。
|
|
10
|
+
|
|
11
|
+
reaction 显式 target 与 command.agg 不同。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 省略 target 由框架从命令推导;确需写出时必须是命令所属聚合。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
reaction(OrderApproved, { command: acquireLock, map })
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
target: PurchaseOrder,command 却属于 InventoryLock
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage check;同事务链验证共同提交/回滚,异步链检查 worker 和死信。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/kernel/src/primitives/flow.ts:87`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
if (def.target && def.target !== def.command.agg) {
|
|
43
|
+
throw declError('CAGE-REACT-001', `反应的 target 与 command 所属聚合不一致`);
|
|
44
|
+
}
|
|
45
|
+
if (def.order !== undefined && (!Number.isSafeInteger(def.order) || def.order < 0)) {
|
|
46
|
+
throw declError('CAGE-REACT-003', '反应 order 必须为非负安全整数');
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-REACT-002:同事务反应链嵌套过深
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明 / 写流水线。
|
|
10
|
+
|
|
11
|
+
同事务执行深度超出内核上限,常见原因是命令与事件互相触发形成循环。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 沿事件/反应图定位循环,减少同事务级联;仅在业务允许最终一致时改成 outbox,并避免异步循环。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
单向批准 → 建锁,释放不会再次触发批准
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
批准触发建锁,建锁又触发批准,或随意调高深度上限
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage check;同事务链验证共同提交/回滚,异步链检查 worker 和死信。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/kernel/src/kernel.ts:263`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
const agg = cmd.agg;
|
|
43
|
+
if (depth > this.maxDepth) throw new Error(`[CAGE-REACT-002] 同事务反应嵌套超过 ${this.maxDepth} 层`);
|
|
44
|
+
|
|
45
|
+
// 第 1 关:认证
|
|
46
|
+
if (!ctx.actor || (ctx.actor.kind === 'anonymous' && !cmd.public)) throw cageError('UNAUTHENTICATED');
|
|
47
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# CAGE-REACT-003:集合或步骤顺序声明无效
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明 / 写流水线。
|
|
10
|
+
|
|
11
|
+
reactionEach 没有正整数上限或排序字段,order 非法,或同事件同事务分组混用有序/无序步骤、顺序重复。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 为集合声明 maxItems、orderBy、items 和 map;排序键必须稳定、非空且唯一。
|
|
16
|
+
2. 同事件同 tx 分组需要显式顺序时,为全部步骤声明不同的非负整数 order;锁资源按稳定键串行处理。
|
|
17
|
+
|
|
18
|
+
## 正例
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
reactionEach(Allocated, { command: acquire, items: e => e.assets, maxItems: 20, orderBy: 'assetId', order: 20, tx: 'same', map: item => ({ id: item.assetId }) })
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 反例
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
同事件同事务一条 order: 10、另一条没有 order,或两个步骤都 order: 10
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 修复后验证
|
|
31
|
+
|
|
32
|
+
重跑 cage check;同事务链验证共同提交/回滚,异步链检查 worker 和死信。
|
|
33
|
+
|
|
34
|
+
## 框架内的检查位置
|
|
35
|
+
|
|
36
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
37
|
+
|
|
38
|
+
- `packages/kernel/src/primitives/collection.ts:68`
|
|
39
|
+
- `packages/kernel/src/primitives/flow.ts:90`
|
|
40
|
+
- `packages/kernel/src/registry.ts:230`
|
|
41
|
+
|
|
42
|
+
实现片段(位置随框架版本更新):
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
if (!Number.isSafeInteger(def.maxItems) || def.maxItems < 1 || !def.orderBy) {
|
|
46
|
+
throw declError('CAGE-REACT-003', '集合反应必须声明正整数 maxItems 和非空 orderBy 字段');
|
|
47
|
+
}
|
|
48
|
+
const base = reaction(event, { ...def, map: () => null });
|
|
49
|
+
const expand = (payload: PayloadOf<E>): ReactionEntry<z.input<C['input']>>[] => {
|
|
50
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# CAGE-READS-001:handler 使用了未声明读依赖
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:handler 执行。
|
|
10
|
+
|
|
11
|
+
handler 访问 deps 中不存在的别名。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 在命令 reads 添加真实聚合与正确别名,核对入口导出。不要通过 any 或自建仓储绕过依赖声明。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
reads: { stock: Inventory };使用 deps.stock.findOne({ sku })
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
reads: {};使用 deps.stock
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
检查本体图 reads 边并运行该命令的业务用例。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/kernel/src/pipeline/load.ts:74`
|
|
38
|
+
- `packages/kernel/src/pipeline/load.ts:99`
|
|
39
|
+
- `packages/kernel/src/primitives/command.ts:54`
|
|
40
|
+
- `packages/kernel/src/primitives/command.ts:183`
|
|
41
|
+
|
|
42
|
+
实现片段(位置随框架版本更新):
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
* 仓储绑定当前事务与身份,handler 的读操作因此看到同一事务状态且不能写入。
|
|
46
|
+
* Proxy 将未声明别名转成明确 CAGE-READS-001;then/toJSON 保留为普通对象协议属性。
|
|
47
|
+
*/
|
|
48
|
+
export function bindReads<R extends Reads>(tx: Db, reads: R, ctx: Ctx): Record<string, ReadRepo<any>> {
|
|
49
|
+
const deps: Record<string, ReadRepo<any>> = {};
|
|
50
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# CAGE-REG-001:注册表缺少被引用声明
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明加载 / 执行。
|
|
10
|
+
|
|
11
|
+
命令、读依赖、反应、审批或任务引用了没有从 domain 入口导出的聚合/命令,或执行时找不到命令。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 从统一入口导出依赖双方,确认引用是同一个声明对象且名字正确;修复后重新 check/gen。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
export * from './inventory.js'; export * from './purchase-order.js';
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
只导出反应,却没有导出它的目标命令
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage check/analyze/gen,确认统一入口包含引用双方。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/approval/src/route.ts:161`
|
|
38
|
+
- `packages/kernel/src/kernel.ts:161`
|
|
39
|
+
- `packages/kernel/src/registry.ts:209`
|
|
40
|
+
- `packages/kernel/src/registry.ts:215`
|
|
41
|
+
- `packages/kernel/src/registry.ts:220`
|
|
42
|
+
- `packages/kernel/src/registry.ts:234`
|
|
43
|
+
- `packages/kernel/src/registry.ts:238`
|
|
44
|
+
- `packages/kernel/src/registry.ts:268`
|
|
45
|
+
|
|
46
|
+
实现片段(位置随框架版本更新):
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
for (const query of s.context.queries ?? []) if (!registry.queries.some(q => q.name === query))
|
|
50
|
+
throw declError('CAGE-REG-001', `AI 步骤引用的查询 ${query} 未导出`);
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# CAGE-REG-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
|
+
aggregate('PurchaseOrder', ...)、aggregate('Inventory', ...)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
不同文件都 aggregate('Order', ...) 并导出
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage check/analyze/gen,确认统一入口包含引用双方。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/kernel/src/registry.ts:134`
|
|
38
|
+
- `packages/kernel/src/registry.ts:176`
|
|
39
|
+
- `packages/kernel/src/registry.ts:242`
|
|
40
|
+
|
|
41
|
+
实现片段(位置随框架版本更新):
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
if (aggregates.some((a) => a.name === (v as AnyAggregate).name)) {
|
|
45
|
+
throw declError('CAGE-REG-002', `聚合名重复:${(v as AnyAggregate).name}`);
|
|
46
|
+
}
|
|
47
|
+
aggregates.push(v as AnyAggregate);
|
|
48
|
+
break;
|
|
49
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-REG-003:命令能力点重复
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明加载 / 执行。
|
|
10
|
+
|
|
11
|
+
同一聚合的多个命令解析成同一个 Aggregate.command 能力点。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 为不同操作指定不同 name,跨文件导出名也保持唯一;相同操作复用同一命令对象。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
name: 'submit' 与 name: 'cancel'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
同一聚合两个命令都 name: 'update'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage check/analyze/gen,确认统一入口包含引用双方。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/kernel/src/registry.ts:212`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
throw declError('CAGE-REL-001', `${c.cmd.agg.name}.related 是生成客户端的关联读取入口;请为业务命令使用其他 name`);
|
|
43
|
+
if (caps.has(c.capability)) throw declError('CAGE-REG-003', `能力点重复:${c.capability},可用 command({ name }) 区分`);
|
|
44
|
+
caps.add(c.capability);
|
|
45
|
+
for (const [alias, a] of Object.entries(c.cmd.reads)) {
|
|
46
|
+
if (!aggSet.has(a)) throw declError('CAGE-REG-001', `命令 ${c.capability} 的 reads.${alias} 引用的聚合没有导出`);
|
|
47
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# CAGE-REL-001:关系字段声明无效
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明加载 / 生成。
|
|
10
|
+
|
|
11
|
+
关系目标未导出、hasMany.mappedBy 不是指回当前聚合的公开 ref、关系表重名/过长,或集合关系用于不支持的位置与修饰。带关系聚合的用户命令名 related 也会占用生成客户端入口。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 把 ref/hasMany/manyToMany 的目标从 domain 入口导出;循环引用使用聚合名字符串。
|
|
16
|
+
2. hasMany 的 mappedBy 写目标上的真实 ref 字段名,该字段不能 hidden 或 sensitive;修改归属调用子对象命令。
|
|
17
|
+
3. 集合关系只写在聚合 fields 中,不放进 list、事件载荷或 scope 字段。不要对关系链式调用 optional/unique/hidden/sensitive;没有关联用空集合表示。
|
|
18
|
+
4. 缩短或调整发生冲突的字段/表名;业务命令避开 related,运行 cage check/gen 后审查迁移。
|
|
19
|
+
|
|
20
|
+
## 正例
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
Note.fields.members = manyToMany('User', { description: '协作成员' }); // User 已导出
|
|
24
|
+
Notebook.fields.notes = hasMany('Note', { mappedBy: 'notebookId' }); // Note.notebookId = ref('Notebook')
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 反例
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
hasMany('Note', { mappedBy: 'title' }); // title 不是反向 ref
|
|
31
|
+
list({ members: manyToMany('User') }); // JSON 明细中不能声明关系
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 修复后验证
|
|
35
|
+
|
|
36
|
+
重跑 cage check/gen;迁移后用真实用户验证关系命令、关联分页读取和双侧范围。不要手写纯中间表聚合。
|
|
37
|
+
|
|
38
|
+
## 框架内的检查位置
|
|
39
|
+
|
|
40
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
41
|
+
|
|
42
|
+
- `packages/kernel/src/primitives/aggregate.ts:188`
|
|
43
|
+
- `packages/kernel/src/primitives/event.ts:50`
|
|
44
|
+
- `packages/kernel/src/primitives/fields.ts:190`
|
|
45
|
+
- `packages/kernel/src/primitives/fields.ts:196`
|
|
46
|
+
- `packages/kernel/src/primitives/fields.ts:203`
|
|
47
|
+
- `packages/kernel/src/primitives/fields.ts:209`
|
|
48
|
+
- `packages/kernel/src/primitives/fields.ts:277`
|
|
49
|
+
- `packages/kernel/src/primitives/fields.ts:284`
|
|
50
|
+
- `packages/kernel/src/primitives/fields.ts:335`
|
|
51
|
+
- `packages/kernel/src/registry.ts:193`
|
|
52
|
+
- `packages/kernel/src/registry.ts:197`
|
|
53
|
+
- `packages/kernel/src/registry.ts:203`
|
|
54
|
+
- `packages/kernel/src/registry.ts:211`
|
|
55
|
+
|
|
56
|
+
实现片段(位置随框架版本更新):
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
if (f && f !== 'id' && !(f in fields)) throw declError('CAGE-SCOPE-002', `${name} 的范围字段 ${f} 不存在`);
|
|
60
|
+
if (f && f !== 'id' && isRelation(fields[f])) throw declError('CAGE-REL-001', `${name} 的范围字段必须是主表列,不能使用集合关系 ${f}`);
|
|
61
|
+
if (f && f !== 'id' && isFile(fields[f])) throw declError('CAGE-FILE-001', `${name} 的范围字段不能使用文件 ${f}`);
|
|
62
|
+
}
|
|
63
|
+
const scope: ScopeSpec = Object.freeze({ ...sc, ownerField });
|
|
64
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# CAGE-ROUTE-001:业务项目手写 HTTP 路由
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:lint / verify。
|
|
10
|
+
|
|
11
|
+
业务代码调用 app.get/post 等手动注册接口,绕过声明生成路径。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 将普通业务写接口声明为 command、读接口声明为 query;API 入口只装配框架。协议扩展另按框架边界评估。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
领域 command → gen → 自动路由和前端契约
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
app.post('/api/order/submit', handler)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重新生成,检查 generated/routes.json 和前端契约,再验证自动接口。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/lint/src/rules/no-manual-routes.ts:3`
|
|
38
|
+
- `packages/lint/src/rules/no-manual-routes.ts:23`
|
|
39
|
+
|
|
40
|
+
实现片段(位置随框架版本更新):
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
* 检查业务代码是否绕过声明直接注册 HTTP 路由。
|
|
44
|
+
* 通过常见接收器名、HTTP 方法和路径形状识别调用,命中返回 CAGE-ROUTE-001。
|
|
45
|
+
* 这是有界语法检查,不解析任意变量别名或运行时动态路由;框架自己的 HTTP 实现由其维护边界管理。
|
|
46
|
+
*/
|
|
47
|
+
// 业务项目里禁止手写 HTTP 路由:没有声明就没有路由,所有写入都经过内核
|
|
48
|
+
```
|