@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.
- package/README.md +23 -1
- package/dist/analyze.js +2 -0
- package/dist/analyze.js.map +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.js +0 -1
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +72 -0
- package/dist/context.js +202 -0
- package/dist/context.js.map +1 -0
- package/dist/create-prompt.d.ts +5 -0
- package/dist/create-prompt.js +50 -0
- package/dist/create-prompt.js.map +1 -0
- package/dist/create.d.ts +18 -1
- package/dist/create.js +30 -13
- package/dist/create.js.map +1 -1
- package/dist/dev.js +12 -51
- package/dist/dev.js.map +1 -1
- package/dist/gen/contracts.js +34 -13
- package/dist/gen/contracts.js.map +1 -1
- package/dist/gen/index.js +43 -3
- package/dist/gen/index.js.map +1 -1
- package/dist/gen/zod-code.d.ts +1 -1
- package/dist/gen/zod-code.js +3 -1
- package/dist/gen/zod-code.js.map +1 -1
- package/dist/graph-command.d.ts +11 -0
- package/dist/graph-command.js +67 -0
- package/dist/graph-command.js.map +1 -0
- package/dist/graph-model.d.ts +21 -0
- package/dist/graph-model.js +101 -0
- package/dist/graph-model.js.map +1 -0
- package/dist/graph-presentation.d.ts +11 -0
- package/dist/graph-presentation.js +25 -0
- package/dist/graph-presentation.js.map +1 -0
- package/dist/graph-query.d.ts +171 -0
- package/dist/graph-query.js +242 -0
- package/dist/graph-query.js.map +1 -0
- package/dist/graph-relations.d.ts +14 -0
- package/dist/graph-relations.js +142 -0
- package/dist/graph-relations.js.map +1 -0
- package/dist/graph-search.d.ts +21 -0
- package/dist/graph-search.js +63 -0
- package/dist/graph-search.js.map +1 -0
- package/dist/graph-snapshot.d.ts +2 -4
- package/dist/graph-snapshot.js +2 -19
- package/dist/graph-snapshot.js.map +1 -1
- package/dist/graph.js +19 -1
- package/dist/graph.js.map +1 -1
- package/dist/impact.d.ts +6 -0
- package/dist/impact.js +28 -16
- package/dist/impact.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +6 -0
- package/dist/init.js +131 -0
- package/dist/init.js.map +1 -0
- package/dist/main.js +77 -32
- package/dist/main.js.map +1 -1
- package/dist/migrate.d.ts +3 -6
- package/dist/migrate.js +14 -53
- package/dist/migrate.js.map +1 -1
- package/dist/ontology.d.ts +3 -1
- package/dist/ontology.js +13 -3
- package/dist/ontology.js.map +1 -1
- package/dist/project-structure.d.ts +8 -0
- package/dist/project-structure.js +94 -0
- package/dist/project-structure.js.map +1 -0
- package/dist/static-check.js +1 -4
- package/dist/static-check.js.map +1 -1
- package/dist/sync.js +82 -10
- package/dist/sync.js.map +1 -1
- package/graph-ui/app.js +46 -8
- package/graph-ui/graph-model.js +100 -0
- package/graph-ui/graph-relations.js +141 -0
- package/graph-ui/graph-search.js +62 -0
- package/graph-ui/model.js +19 -77
- package/graph-ui/relations.js +2 -125
- package/graph-ui/structure.js +4 -1
- package/graph-ui/style.css +21 -0
- package/package.json +8 -8
- package/templates/app/.env.example +58 -14
- package/templates/app/AGENTS.md +95 -12
- package/templates/app/Dockerfile +2 -0
- package/templates/app/README.md +46 -16
- package/templates/app/_gitignore +8 -0
- package/templates/app/apps/api/package.json +2 -2
- package/templates/app/apps/web/src/app/app.tsx +18 -0
- package/templates/app/apps/web/src/app/workspace-layout.tsx +70 -0
- package/templates/app/apps/web/src/main.tsx +4 -543
- package/templates/app/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +20 -0
- package/templates/app/apps/web/src/modules/approval/index.ts +2 -0
- package/templates/app/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +54 -0
- package/templates/app/apps/web/src/modules/auth/index.ts +1 -0
- package/templates/app/apps/web/src/modules/auth/pages/login-page.tsx +59 -0
- package/templates/app/apps/web/src/modules/inventory/index.ts +1 -0
- package/templates/app/apps/web/src/modules/inventory/pages/inventory-page.tsx +74 -0
- package/templates/app/apps/web/src/modules/purchase/components/purchase-order-form.tsx +60 -0
- package/templates/app/apps/web/src/modules/purchase/index.ts +2 -0
- package/templates/app/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +210 -0
- package/templates/app/apps/web/src/shared/hooks/use-command.ts +29 -0
- package/templates/app/apps/web/src/shared/lib/error-message.ts +15 -0
- package/templates/app/apps/web/src/shared/ui/notice.tsx +13 -0
- package/templates/app/apps/web/src/shared/ui/page-heading.tsx +28 -0
- package/templates/app/apps/web/vite.config.ts +3 -0
- package/templates/app/cage.config.json +1 -1
- package/templates/app/docs/ai/README.md +77 -0
- package/templates/app/docs/ai/architecture.md +122 -0
- package/templates/app/docs/ai/ontology-context.md +117 -0
- package/templates/app/docs/ai/primitives.md +249 -0
- package/templates/app/docs/ai/project-structure.md +123 -0
- package/templates/app/docs/ai/purchase-example.md +97 -0
- package/templates/app/docs/ai/recipes.md +81 -0
- package/templates/app/docs/ai/relations.md +160 -0
- package/templates/app/docs/ai/transfers.md +92 -0
- package/templates/app/docs/ai/troubleshooting.md +60 -0
- package/templates/app/docs/ai/workflow.md +139 -0
- package/templates/app/docs/errors/CAGE-APPR-001.md +47 -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 +47 -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-AUTH-001.md +47 -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-CREATE-001.md +52 -0
- package/templates/app/docs/errors/CAGE-DECL-001.md +48 -0
- package/templates/app/docs/errors/CAGE-DECL-002.md +47 -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-DLQ-001.md +48 -0
- package/templates/app/docs/errors/CAGE-ENV-001.md +52 -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-GEN-001.md +48 -0
- package/templates/app/docs/errors/CAGE-GEN-002.md +47 -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 +47 -0
- package/templates/app/docs/errors/CAGE-IMPACT-001.md +48 -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-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 +49 -0
- package/templates/app/docs/errors/CAGE-PAIR-002.md +50 -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 +49 -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-READS-001.md +47 -0
- package/templates/app/docs/errors/CAGE-REG-001.md +53 -0
- package/templates/app/docs/errors/CAGE-REG-002.md +48 -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 +47 -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 +48 -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 +48 -0
- package/templates/app/docs/errors/CAGE-TEST-001.md +47 -0
- package/templates/app/docs/errors/CAGE-UNSAFE-001.md +48 -0
- package/templates/app/docs/errors/CAGE-UPGRADE-001.md +48 -0
- package/templates/app/docs/errors/README.md +307 -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} +3 -3
- package/templates/app/packages/contracts/src/{inventory.ts → aggregates/inventory/index.ts} +3 -3
- package/templates/app/packages/contracts/src/{inventory-lock.ts → aggregates/inventory-lock/index.ts} +3 -3
- package/templates/app/packages/contracts/src/{purchase-order.ts → aggregates/purchase-order/index.ts} +3 -3
- package/templates/app/packages/contracts/src/{role.ts → aggregates/role/index.ts} +3 -3
- package/templates/app/packages/contracts/src/{user.ts → aggregates/user/index.ts} +3 -3
- package/templates/app/packages/contracts/src/index.ts +14 -14
- package/templates/app/packages/domain/package.json +4 -4
- package/templates/app/packages/domain/src/index.ts +4 -7
- package/templates/app/packages/domain/src/{erp.ts → integrations/erp.ts} +1 -1
- package/templates/app/packages/domain/src/modules/inventory/index.ts +2 -0
- package/templates/app/packages/domain/src/modules/purchase/index.ts +6 -0
- package/templates/app/packages/domain/src/{purchase-order.test.ts → modules/purchase/purchase-order.test.ts} +2 -2
- package/templates/app/packages/domain/src/{purchase-order.ts → modules/purchase/purchase-order.ts} +1 -1
- package/templates/app/packages/domain/src/{reactions.ts → workflows/purchase-inventory.ts} +2 -2
- package/templates/blank/.dockerignore +10 -0
- package/templates/blank/.env.example +61 -0
- package/templates/blank/.github/workflows/cage.yml +44 -0
- package/templates/blank/AGENTS.md +96 -0
- package/templates/blank/Dockerfile +25 -0
- package/templates/blank/README.md +37 -0
- package/templates/blank/_gitignore +8 -0
- package/templates/blank/apps/api/package.json +15 -0
- package/templates/blank/apps/api/src/main.ts +11 -0
- package/templates/blank/apps/api/src/worker.ts +8 -0
- package/templates/blank/apps/api/tsconfig.json +5 -0
- package/templates/blank/apps/web/index.html +13 -0
- package/templates/blank/apps/web/package.json +22 -0
- package/templates/blank/apps/web/src/app/app.tsx +44 -0
- package/templates/blank/apps/web/src/app/styles/global.css +516 -0
- package/templates/blank/apps/web/src/app/workspace-layout.tsx +70 -0
- package/templates/blank/apps/web/src/main.tsx +13 -0
- package/templates/blank/apps/web/src/modules/auth/index.ts +1 -0
- package/templates/blank/apps/web/src/modules/auth/pages/login-page.tsx +87 -0
- package/templates/blank/apps/web/src/modules/workspace/index.ts +1 -0
- package/templates/blank/apps/web/src/modules/workspace/pages/home-page.tsx +45 -0
- package/templates/blank/apps/web/src/shared/lib/error-message.ts +11 -0
- package/templates/blank/apps/web/src/shared/ui/brand.tsx +11 -0
- package/templates/blank/apps/web/tsconfig.json +11 -0
- package/templates/blank/apps/web/vite.config.ts +19 -0
- package/templates/blank/cage.config.json +14 -0
- package/templates/blank/db/migrations/0001_init.sql +63 -0
- package/templates/blank/docs/ai/README.md +77 -0
- package/templates/blank/docs/ai/architecture.md +122 -0
- package/templates/blank/docs/ai/ontology-context.md +117 -0
- package/templates/blank/docs/ai/primitives.md +249 -0
- package/templates/blank/docs/ai/project-structure.md +123 -0
- package/templates/blank/docs/ai/purchase-example.md +97 -0
- package/templates/blank/docs/ai/recipes.md +81 -0
- package/templates/blank/docs/ai/relations.md +160 -0
- package/templates/blank/docs/ai/transfers.md +92 -0
- package/templates/blank/docs/ai/troubleshooting.md +60 -0
- package/templates/blank/docs/ai/workflow.md +139 -0
- package/templates/blank/docs/errors/CAGE-APPR-001.md +47 -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 +47 -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-AUTH-001.md +47 -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-CREATE-001.md +52 -0
- package/templates/blank/docs/errors/CAGE-DECL-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-DECL-002.md +47 -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-DLQ-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-ENV-001.md +52 -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-GEN-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-GEN-002.md +47 -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 +47 -0
- package/templates/blank/docs/errors/CAGE-IMPACT-001.md +48 -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-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 +49 -0
- package/templates/blank/docs/errors/CAGE-PAIR-002.md +50 -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 +49 -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-READS-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-REG-001.md +53 -0
- package/templates/blank/docs/errors/CAGE-REG-002.md +48 -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 +47 -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 +48 -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 +48 -0
- package/templates/blank/docs/errors/CAGE-TEST-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-UNSAFE-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-UPGRADE-001.md +48 -0
- package/templates/blank/docs/errors/README.md +307 -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 +10 -0
- package/templates/blank/docs/examples/purchase-admin/apps/api/src/worker.ts +14 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/app.tsx +18 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/styles/global.css +663 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/workspace-layout.tsx +70 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/main.tsx +13 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +20 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/index.ts +2 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +54 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/auth/index.ts +1 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/auth/pages/login-page.tsx +59 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/inventory/index.ts +1 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/inventory/pages/inventory-page.tsx +74 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-order-form.tsx +60 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/index.ts +2 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +210 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/hooks/use-command.ts +29 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/error-message.ts +15 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/notice.tsx +13 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-heading.tsx +28 -0
- package/templates/blank/docs/examples/purchase-admin/cage.config.json +114 -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 +72 -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 +81 -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 +6 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/integrations/erp.ts +36 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/inventory/index.ts +2 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/inventory/inventory.ts +43 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approvals.ts +18 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/index.ts +6 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/jobs.ts +13 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.test.ts +137 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.ts +122 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/queries.ts +10 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/workflows/purchase-inventory.ts +24 -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 +23 -0
- package/templates/blank/packages/domain/src/index.ts +4 -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/apps/web/src/{style.css → app/styles/global.css} +0 -0
- /package/templates/app/packages/contracts/src/{queries.ts → queries/index.ts} +0 -0
- /package/templates/app/packages/domain/src/{inventory.ts → modules/inventory/inventory.ts} +0 -0
- /package/templates/app/packages/domain/src/{approvals.ts → modules/purchase/approvals.ts} +0 -0
- /package/templates/app/packages/domain/src/{jobs.ts → modules/purchase/jobs.ts} +0 -0
- /package/templates/app/packages/domain/src/{queries.ts → modules/purchase/queries.ts} +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-BUDGET-003:新增未经基线认可的 unsafe
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:budget / verify。
|
|
10
|
+
|
|
11
|
+
本次图中的 unsafe 数超过给定基线;没有基线时允许值为零。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 优先移除逃生口;确需使用时写明 reason/owner,评审后更新受审基线。不要用刚改后的图冒充旧基线。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
unsafe({ reason: '受审的历史修复', owner: '负责人' }, action) 并使用受审基线
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
随手调用 unsafe,再覆盖基线隐藏增长
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage budget;有 unsafe 基线时使用真实受审基线。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/cli/src/budget.ts:58`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
findings.push({
|
|
43
|
+
code: 'CAGE-BUDGET-003',
|
|
44
|
+
reason: `unsafe 从 ${allowance} 增加到 ${graph.unsafeCount}`,
|
|
45
|
+
fix: '移除新增逃生口,或在评审完成后更新受审基线',
|
|
46
|
+
});
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CMD-002:已有记录命令缺少 id
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明加载。
|
|
10
|
+
|
|
11
|
+
非新建命令的对象输入 schema 没有 id,无法确定要加载哪条记录。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 在 input 添加 UUID id;没有其他输入时可省略 input 使用默认 idOnly。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
input: z.object({ id: z.string().uuid(), title: z.string() })
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
input: z.object({ title: z.string() }) // from 不是 new
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage check、gen 和相关命令测试,检查生成输入/方法签名。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/kernel/src/primitives/command.ts:142`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
if (from !== 'new' && input instanceof z.ZodObject && !('id' in input.shape)) {
|
|
43
|
+
throw declError('CAGE-CMD-002', `${agg.name} 的非新建命令输入必须包含 id`);
|
|
44
|
+
}
|
|
45
|
+
if (def.name !== undefined && !/^[a-z][A-Za-z0-9]*$/.test(def.name)) {
|
|
46
|
+
throw declError('CAGE-NAME-004', `命令名 ${def.name} 必须是小驼峰`);
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CMD-003:新建命令没有目标状态
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明加载。
|
|
10
|
+
|
|
11
|
+
from 为 new 时使用 to: null,新记录没有可保留的当前状态。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 新建必须指向已声明状态;to: null 只用于已有记录的字段更新,仍检查 from、身份、版本并写审计。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
from: 'new', to: 'draft' // 或已有记录 from: 'approved', to: null
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
from: 'new', to: null
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
重跑 cage check、gen 和相关命令测试,检查生成输入/方法签名。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/kernel/src/primitives/command.ts:135`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
if (from === 'new' && def.to === null) {
|
|
43
|
+
throw declError('CAGE-CMD-003', `${agg.name} 的新建命令必须指定目标状态,不能使用 to: null`);
|
|
44
|
+
}
|
|
45
|
+
if (def.to !== null && !hasStates(agg, def.to as string)) {
|
|
46
|
+
throw declError('CAGE-STATE-001', `${agg.name} 的命令 to 是未声明的状态:${String(def.to)}`);
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-001:连接器名称格式错误
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
connector 的名称不是小写字母开头的小写短横线格式。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 采用稳定的英文连接器标识,中文名称写 description 或图谱 label。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
connector('finance-erp', definition)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
connector('FinanceERP', definition)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/primitives.ts:56`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
export function connector<Ops extends Record<string, OpDef<any, any>>>(name: string, def: ConnectorDef<Ops>): Connector<Ops> {
|
|
43
|
+
if (!/^[a-z][a-z0-9-]*$/.test(name)) throw declError('CAGE-CONN-001', `连接器名 ${name} 必须是小写短横线`);
|
|
44
|
+
for (const h of Object.values(def.hosts)) {
|
|
45
|
+
if (h && /[/:\s]/.test(h.replace(/:\d+$/, ''))) throw declError('CAGE-CONN-003', `地址白名单只能写主机名(可带端口):${h}`);
|
|
46
|
+
}
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-002:外部操作路径格式错误
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
op.path 没有以斜线开头。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. host 在连接器白名单中配置,操作 path 只写从 / 开始的相对接口路径。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
path: '/api/purchase-orders'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
path: 'https://erp.example.com/api/orders'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/primitives.ts:29`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
export function op<Req extends z.ZodObject<any>, Res extends z.ZodType>(def: OpDef<Req, Res>): OpDef<Req, Res> {
|
|
43
|
+
if (!def.path.startsWith('/')) throw declError('CAGE-CONN-002', `操作路径 ${def.path} 必须以 / 开头`);
|
|
44
|
+
return def;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-003:地址白名单包含协议或路径
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
connector.hosts 中包含协议、路径或空白,而不是主机名(可带端口)。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 将协议和路径从 host 移除;实际路径写 op.path,环境 host 按声明配置。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
hosts: { test: 'erp-sandbox.example.com:8443', prod: 'erp.example.com' }
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
hosts: { prod: 'https://erp.example.com/api' }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/primitives.ts:58`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
for (const h of Object.values(def.hosts)) {
|
|
43
|
+
if (h && /[/:\s]/.test(h.replace(/:\d+$/, ''))) throw declError('CAGE-CONN-003', `地址白名单只能写主机名(可带端口):${h}`);
|
|
44
|
+
}
|
|
45
|
+
const c: any = {
|
|
46
|
+
[CONNECTOR]: true,
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-004:只读操作被用作出站写映射
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
outbound 绑定了 effect 为 read 的操作。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 按真实副作用给操作声明 write/retryableWrite;有可重试写入时设计远端幂等协议,不能只改标签。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
effect: 'retryableWrite' // 第三方实际支持幂等写入
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
effect: 'read' // 却在业务事件后创建远端订单
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/primitives.ts:99`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
): Outbound<E, O> {
|
|
43
|
+
if (operation.effect === 'read') throw declError('CAGE-CONN-004', '只读操作不能用于出站映射');
|
|
44
|
+
const o: any = {
|
|
45
|
+
[OUTBOUND]: true,
|
|
46
|
+
event: ev,
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-005:入站事件名称格式错误
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
inbound 的事件名不是小驼峰格式。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 使用小驼峰稳定标识,展示文案另设中文。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
inbound(erp, 'goodsReceived', definition)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
inbound(erp, 'GoodsReceived', definition)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/primitives.ts:153`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
): Inbound<P> {
|
|
43
|
+
if (!/^[a-z][A-Za-z0-9]*$/.test(eventName)) throw declError('CAGE-CONN-005', `入站事件名 ${eventName} 必须是小驼峰`);
|
|
44
|
+
if (!def.command.invokedBy.includes('external') && !def.command.invokedBy.includes('user')) {
|
|
45
|
+
throw declError('CAGE-CONN-006', `入站回调调用的命令必须声明 invokedBy: 'external'`);
|
|
46
|
+
}
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-006:回调命令未允许 external
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
入站回调指向的命令没有声明 external 调用身份。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 为专用回调命令声明 external;验签和输入校验之后才能调用,不把内部命令暴露为普通用户接口。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
invokedBy: 'external'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
invokedBy: 'user' // 作为 inbound.command
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/primitives.ts:155`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
if (!def.command.invokedBy.includes('external') && !def.command.invokedBy.includes('user')) {
|
|
43
|
+
throw declError('CAGE-CONN-006', `入站回调调用的命令必须声明 invokedBy: 'external'`);
|
|
44
|
+
}
|
|
45
|
+
return Object.freeze({ [INBOUND]: true as const, connector: conn, event: eventName, ...def });
|
|
46
|
+
}
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-007:当前环境没有连接器地址
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
非 fake 环境中,连接器 hosts 找不到当前 stage 对应的主机。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 检查 CAGE_STAGE 与 hosts.test/prod。fake 不需要真实主机;真实联调必须配置正确环境及密钥。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
CAGE_STAGE=test,hosts.test 指向沙箱主机
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
只配置 prod 却用 test 环境启动,或把 fake 成功称作真实联调通过
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/runtime.ts:131`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
const host = o.connector.hosts[st];
|
|
43
|
+
if (!host) throw new ConnectorError(`[CAGE-CONN-007] 连接器 ${o.connector.name} 没有 ${st} 环境的地址`, null, false);
|
|
44
|
+
const token = o.connector.secret ? await secrets.get(o.connector.secret) : undefined;
|
|
45
|
+
await take(o.connector);
|
|
46
|
+
const url = new URL(o.path, `https://${host}`);
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-008:外部请求发生网络错误或超时
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
fetch 在收到有效 HTTP 响应前失败,例如 DNS、网络、TLS 或 timeout。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 核对脱敏后的主机、网络、代理和 timeoutMs;排除临时故障后由 worker 重试,不能在 handler 内加网络重试。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
使用同步记录定位失败阶段;保持同一业务幂等键重试
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
每次重试换远端幂等键,导致重复写入
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/runtime.ts:151`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
await recordCall(opts.kernel, o, key, opts.tenantId ?? null, 'failed', null, body, undefined, String(e));
|
|
43
|
+
throw new ConnectorError(`[CAGE-CONN-008] 调用 ${o.connector.name}.${o.name} 失败:${String(e)}`, null, true);
|
|
44
|
+
}
|
|
45
|
+
const text = await res.text();
|
|
46
|
+
let json: unknown = null;
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-009:外部服务返回非成功状态
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
连接器取得 HTTP 响应,但状态码不是成功码。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 看同步记录的状态与脱敏响应;核对鉴权、字段及限流。可重试性还受 effect 和状态码控制,不是所有 4xx 都会重试。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
修正 401 的运行环境密钥,确认后重放失败事件
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
把所有 4xx 改成成功,或无限重试无效请求
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/runtime.ts:163`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
const retryable = o.effect === 'retryableWrite' || o.effect === 'read' ? res.status >= 500 || res.status === 429 : false;
|
|
43
|
+
throw new ConnectorError(`[CAGE-CONN-009] ${o.connector.name}.${o.name} 返回 ${res.status}`, res.status, retryable);
|
|
44
|
+
}
|
|
45
|
+
const parsed = o.response.safeParse(json);
|
|
46
|
+
if (!parsed.success) {
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-010:外部响应不符合 schema
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
外部返回成功 HTTP 状态,但内容不满足声明的 response schema。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 对照真实协议、响应样例和声明,修正一方;不要用 any 或空对象吞掉未知格式。该错误按永久失败处理。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
response: z.object({ erpNo: z.string() }) 与真实成功协议一致
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
后端返回 { orderNo: 123 },却继续读取 res.erpNo
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/runtime.ts:168`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
await recordCall(opts.kernel, o, key, opts.tenantId ?? null, 'failed', res.status, body, json, '响应格式不符合声明');
|
|
43
|
+
throw new ConnectorError(`[CAGE-CONN-010] ${o.connector.name}.${o.name} 的响应格式与声明不符`, res.status, false);
|
|
44
|
+
}
|
|
45
|
+
await recordCall(opts.kernel, o, key, opts.tenantId ?? null, 'ok', res.status, body, parsed.data);
|
|
46
|
+
return parsed.data;
|
|
47
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CAGE-CONN-011:出站永久失败进入死信
|
|
2
|
+
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
|
|
4
|
+
|
|
5
|
+
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
|
+
|
|
7
|
+
## 何时出现
|
|
8
|
+
|
|
9
|
+
阶段:声明、图规则或 worker。
|
|
10
|
+
|
|
11
|
+
出站消费者将不可重试的 ConnectorError 包装为永久错误;真正原因是内层错误码。
|
|
12
|
+
|
|
13
|
+
## 修复步骤
|
|
14
|
+
|
|
15
|
+
1. 先按内层 CAGE-CONN-007/009/010 等修正配置/协议,再重放死信;检查远端是否已完成写入并复用业务幂等键。
|
|
16
|
+
|
|
17
|
+
## 正例
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
修复响应 schema,核对远端幂等结果,再重放指定 outboxId
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 反例
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
只重启 worker,希望永久错误自动恢复或直接删 outbox
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 修复后验证
|
|
30
|
+
|
|
31
|
+
先 cage check;涉及网络时检查同步记录、外部幂等结果与成功回写。fake 与真实联调分别报告。
|
|
32
|
+
|
|
33
|
+
## 框架内的检查位置
|
|
34
|
+
|
|
35
|
+
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
|
+
|
|
37
|
+
- `packages/connectors/src/runtime.ts:190`
|
|
38
|
+
|
|
39
|
+
实现片段(位置随框架版本更新):
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
// 不可重试:标成永久错误,直接进死信
|
|
43
|
+
throw Object.assign(new Error(`[CAGE-CONN-011] ${e.message}`), { permanent: true });
|
|
44
|
+
}
|
|
45
|
+
throw e;
|
|
46
|
+
}
|
|
47
|
+
```
|