@yss123/cage-cli 0.3.1 → 0.4.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 +7 -3
- package/dist/analyze.js +3 -0
- package/dist/analyze.js.map +1 -1
- package/dist/capabilities.js +50 -40
- package/dist/capabilities.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.js.map +1 -1
- package/dist/context.js +2 -2
- package/dist/context.js.map +1 -1
- package/dist/doctor.js +1 -1
- package/dist/doctor.js.map +1 -1
- package/dist/findings.d.ts +1 -1
- package/dist/findings.js +2 -2
- package/dist/findings.js.map +1 -1
- package/dist/graph-business.d.ts +11 -8
- package/dist/graph-business.js +16 -16
- package/dist/graph-business.js.map +1 -1
- package/dist/graph-relations.js +3 -5
- package/dist/graph-relations.js.map +1 -1
- package/dist/impact.js +1 -4
- package/dist/impact.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/ontology-names.d.ts +17 -0
- package/dist/ontology-names.js +42 -0
- package/dist/ontology-names.js.map +1 -0
- package/dist/project-structure.js +2 -2
- package/dist/project-structure.js.map +1 -1
- package/dist/sync.d.ts +5 -1
- package/dist/sync.js +45 -121
- package/dist/sync.js.map +1 -1
- package/graph-ui/app.js +3 -2
- package/graph-ui/business.js +11 -3
- package/graph-ui/graph-business.js +16 -16
- package/graph-ui/graph-relations.js +3 -5
- package/package.json +6 -6
- package/templates/app/.agents/skills/cage-development/SKILL.md +10 -0
- package/templates/app/AGENTS.md +42 -122
- package/templates/app/CLAUDE.md +6 -0
- package/templates/app/README.md +6 -6
- package/templates/app/apps/api/package.json +2 -2
- package/templates/app/apps/web/package.json +3 -1
- package/templates/app/apps/web/src/app/styles/global.css +12 -11
- package/templates/app/apps/web/src/main.tsx +18 -7
- package/templates/app/apps/web/src/shared/lib/error-message.ts +1 -1
- package/templates/app/apps/web/src/shared/ui/approval-member-picker.tsx +1 -1
- package/templates/app/cage.config.json +2 -1
- package/templates/app/docs/README.md +13 -0
- package/templates/app/docs/development/README.md +80 -0
- package/templates/app/docs/development/examples/note/note-detail-page.tsx +106 -0
- package/templates/app/docs/development/examples/note/note.ts +71 -0
- package/templates/app/docs/development/examples/note/notes-page.tsx +87 -0
- package/templates/{blank/docs/ai → app/docs/development/examples}/purchase-example.md +10 -10
- package/templates/{blank/docs/ai → app/docs/development/getting-started}/architecture.md +9 -9
- package/templates/app/docs/development/getting-started/first-feature.md +66 -0
- package/templates/{blank/docs/ai → app/docs/development/getting-started}/workflow.md +22 -27
- package/templates/app/docs/{ai → development/guides}/approvals.md +19 -9
- package/templates/app/docs/development/guides/business-collaboration.md +65 -0
- package/templates/{blank/docs/ai → app/docs/development/guides}/files.md +5 -1
- package/templates/app/docs/development/guides/frontend-ui.md +30 -0
- package/templates/app/docs/{ai → development/guides}/intelligence.md +18 -16
- package/templates/app/docs/development/guides/ontology-modeling.md +83 -0
- package/templates/app/docs/development/guides/recipes.md +123 -0
- package/templates/app/docs/{ai → development/guides}/relations.md +33 -10
- package/templates/{blank/docs/ai → app/docs/development/guides}/routing.md +1 -1
- package/templates/app/docs/{ai → development/guides}/transfers.md +1 -1
- package/templates/{blank/docs/ai → app/docs/development/reference}/commenting.md +8 -5
- package/templates/app/docs/{ai → development/reference}/primitives.md +12 -64
- package/templates/app/docs/{ai → development/reference}/project-structure.md +2 -2
- package/templates/app/docs/development/skills/cage-development/SKILL.md +144 -0
- package/templates/{blank/docs/ai → app/docs/development/tools}/diagnostics.md +7 -4
- package/templates/{blank/docs/ai → app/docs/development/tools}/ontology-context.md +4 -4
- package/templates/app/docs/{ai → development/tools}/troubleshooting.md +10 -4
- package/templates/app/docs/errors/CAGE-AI-001.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-001.md +2 -2
- package/templates/app/docs/errors/CAGE-APPR-002.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-003.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-004.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-005.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-006.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-007.md +2 -2
- package/templates/app/docs/errors/CAGE-APPR-010.md +1 -1
- package/templates/app/docs/errors/CAGE-AUDIT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-AUTH-001.md +1 -1
- package/templates/app/docs/errors/CAGE-BIZ-001.md +1 -1
- package/templates/app/docs/errors/CAGE-BIZ-002.md +1 -1
- package/templates/app/docs/errors/CAGE-BUDGET-001.md +1 -1
- package/templates/app/docs/errors/CAGE-BUDGET-002.md +1 -1
- package/templates/app/docs/errors/CAGE-BUDGET-003.md +1 -1
- package/templates/app/docs/errors/CAGE-CMD-002.md +1 -1
- package/templates/app/docs/errors/CAGE-CMD-003.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-001.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-002.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-003.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-004.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-005.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-006.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-007.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-008.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-009.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-010.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-011.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-012.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-013.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-014.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-015.md +1 -1
- package/templates/app/docs/errors/CAGE-CREATE-001.md +2 -2
- package/templates/app/docs/errors/CAGE-DECL-001.md +1 -1
- package/templates/app/docs/errors/CAGE-DECL-002.md +1 -1
- package/templates/app/docs/errors/CAGE-DECL-003.md +1 -1
- package/templates/app/docs/errors/CAGE-DECL-004.md +1 -1
- package/templates/app/docs/errors/CAGE-DEP-001.md +1 -1
- package/templates/app/docs/errors/CAGE-DEP-002.md +1 -1
- package/templates/app/docs/errors/CAGE-DEP-003.md +1 -1
- package/templates/app/docs/errors/CAGE-DEP-004.md +1 -1
- package/templates/app/docs/errors/CAGE-DEP-005.md +1 -1
- package/templates/app/docs/errors/CAGE-DIAG-001.md +1 -1
- package/templates/app/docs/errors/CAGE-DLQ-001.md +1 -1
- package/templates/app/docs/errors/CAGE-ENV-001.md +1 -1
- package/templates/app/docs/errors/CAGE-ENV-002.md +1 -1
- package/templates/app/docs/errors/CAGE-ENV-003.md +1 -1
- package/templates/app/docs/errors/CAGE-EVENT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-EVENT-002.md +1 -1
- package/templates/app/docs/errors/CAGE-FIELD-001.md +1 -1
- package/templates/app/docs/errors/CAGE-FIELD-002.md +1 -1
- package/templates/app/docs/errors/CAGE-FIELD-003.md +1 -1
- package/templates/app/docs/errors/CAGE-FIELD-004.md +1 -1
- package/templates/app/docs/errors/CAGE-FILE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-GEN-001.md +1 -1
- package/templates/app/docs/errors/CAGE-GEN-002.md +1 -1
- package/templates/app/docs/errors/CAGE-GEN-003.md +1 -1
- package/templates/app/docs/errors/CAGE-GRANT-001.md +19 -13
- package/templates/app/docs/errors/CAGE-GRANT-002.md +3 -3
- package/templates/app/docs/errors/CAGE-GRANT-003.md +4 -4
- package/templates/app/docs/errors/CAGE-IMPACT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-IMPACT-002.md +1 -1
- package/templates/app/docs/errors/CAGE-INIT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-INIT-002.md +1 -1
- package/templates/app/docs/errors/CAGE-INIT-003.md +1 -1
- package/templates/app/docs/errors/CAGE-INIT-004.md +1 -1
- package/templates/app/docs/errors/CAGE-INIT-005.md +1 -1
- package/templates/app/docs/errors/CAGE-JOB-001.md +1 -1
- package/templates/app/docs/errors/CAGE-JOB-002.md +1 -1
- package/templates/app/docs/errors/CAGE-JOB-003.md +1 -1
- package/templates/app/docs/errors/CAGE-LINT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-MIG-001.md +1 -1
- package/templates/app/docs/errors/CAGE-MIG-002.md +1 -1
- package/templates/app/docs/errors/CAGE-MIG-005.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-001.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-002.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-003.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-004.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-005.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-006.md +1 -1
- package/templates/app/docs/errors/CAGE-ONTOLOGY-001.md +52 -0
- package/templates/app/docs/errors/CAGE-ORG-001.md +1 -1
- package/templates/app/docs/errors/CAGE-PAIR-002.md +1 -1
- package/templates/app/docs/errors/CAGE-QUERY-001.md +1 -1
- package/templates/app/docs/errors/CAGE-QUERY-002.md +1 -1
- package/templates/app/docs/errors/CAGE-QUERY-003.md +1 -1
- package/templates/app/docs/errors/CAGE-REACT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-REACT-002.md +1 -1
- package/templates/app/docs/errors/CAGE-REACT-003.md +1 -1
- package/templates/app/docs/errors/CAGE-READS-001.md +1 -1
- package/templates/app/docs/errors/CAGE-REG-001.md +1 -1
- package/templates/app/docs/errors/CAGE-REG-002.md +1 -1
- package/templates/app/docs/errors/CAGE-REG-003.md +1 -1
- package/templates/app/docs/errors/CAGE-REL-001.md +1 -1
- package/templates/app/docs/errors/CAGE-ROUTE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-SCOPE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-SCOPE-002.md +1 -1
- package/templates/app/docs/errors/CAGE-SECRET-001.md +1 -1
- package/templates/app/docs/errors/CAGE-SECRET-002.md +1 -1
- package/templates/app/docs/errors/CAGE-SENS-001.md +1 -1
- package/templates/app/docs/errors/CAGE-SQL-001.md +1 -1
- package/templates/app/docs/errors/CAGE-SQL-002.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-002.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-003.md +2 -2
- package/templates/app/docs/errors/CAGE-STATE-004.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-005.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-010.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-011.md +1 -1
- package/templates/app/docs/errors/CAGE-STRUCT-001.md +4 -4
- package/templates/app/docs/errors/CAGE-STRUCT-002.md +3 -3
- package/templates/app/docs/errors/CAGE-SYNC-001.md +4 -4
- package/templates/app/docs/errors/CAGE-TEST-001.md +1 -1
- package/templates/app/docs/errors/CAGE-TEST-002.md +1 -1
- package/templates/app/docs/errors/CAGE-TEST-003.md +1 -1
- package/templates/app/docs/errors/CAGE-UNSAFE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-UPGRADE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-WORKER-001.md +1 -1
- package/templates/app/docs/errors/CAGE-WORKER-002.md +1 -1
- package/templates/app/docs/errors/CAGE-WORKER-003.md +1 -1
- package/templates/app/docs/errors/README.md +8 -2
- package/templates/app/docs/errors/runtime.md +2 -2
- package/templates/app/package.json +3 -3
- package/templates/app/packages/contracts/package.json +1 -1
- package/templates/app/packages/contracts/src/aggregates/role/index.ts +2 -2
- package/templates/app/packages/contracts/src/aggregates/user/index.ts +3 -3
- package/templates/app/packages/domain/package.json +5 -5
- package/templates/app/packages/domain/src/modules/purchase/approval-members.ts +1 -1
- package/templates/app/packages/domain/src/modules/purchase/approvals.ts +2 -2
- package/templates/app/packages/domain/src/modules/purchase/intelligence.test.ts +4 -4
- package/templates/app/packages/domain/src/modules/purchase/purchase-order.test.ts +10 -17
- package/templates/app/packages/domain/src/modules/purchase/purchase-order.ts +4 -5
- package/templates/app/packages/domain/src/workflows/purchase-process.ts +1 -1
- package/templates/blank/.agents/skills/cage-development/SKILL.md +10 -0
- package/templates/blank/AGENTS.md +42 -122
- package/templates/blank/CLAUDE.md +6 -0
- package/templates/blank/README.md +3 -3
- package/templates/blank/apps/api/package.json +1 -1
- package/templates/blank/apps/web/package.json +3 -1
- package/templates/blank/apps/web/src/app/styles/global.css +6 -5
- package/templates/blank/apps/web/src/main.tsx +18 -7
- package/templates/blank/cage.config.json +1 -0
- package/templates/blank/docs/README.md +13 -0
- package/templates/blank/docs/development/README.md +80 -0
- package/templates/blank/docs/development/examples/note/note-detail-page.tsx +106 -0
- package/templates/blank/docs/development/examples/note/note.ts +71 -0
- package/templates/blank/docs/development/examples/note/notes-page.tsx +87 -0
- package/templates/{app/docs/ai → blank/docs/development/examples}/purchase-example.md +10 -10
- package/templates/{app/docs/ai → blank/docs/development/getting-started}/architecture.md +9 -9
- package/templates/blank/docs/development/getting-started/first-feature.md +66 -0
- package/templates/{app/docs/ai → blank/docs/development/getting-started}/workflow.md +22 -27
- package/templates/blank/docs/{ai → development/guides}/approvals.md +19 -9
- package/templates/blank/docs/development/guides/business-collaboration.md +65 -0
- package/templates/{app/docs/ai → blank/docs/development/guides}/files.md +5 -1
- package/templates/blank/docs/development/guides/frontend-ui.md +30 -0
- package/templates/blank/docs/{ai → development/guides}/intelligence.md +18 -16
- package/templates/blank/docs/development/guides/ontology-modeling.md +83 -0
- package/templates/blank/docs/development/guides/recipes.md +123 -0
- package/templates/blank/docs/{ai → development/guides}/relations.md +33 -10
- package/templates/{app/docs/ai → blank/docs/development/guides}/routing.md +1 -1
- package/templates/blank/docs/{ai → development/guides}/transfers.md +1 -1
- package/templates/{app/docs/ai → blank/docs/development/reference}/commenting.md +8 -5
- package/templates/blank/docs/{ai → development/reference}/primitives.md +12 -64
- package/templates/blank/docs/{ai → development/reference}/project-structure.md +2 -2
- package/templates/blank/docs/development/skills/cage-development/SKILL.md +144 -0
- package/templates/{app/docs/ai → blank/docs/development/tools}/diagnostics.md +7 -4
- package/templates/{app/docs/ai → blank/docs/development/tools}/ontology-context.md +4 -4
- package/templates/blank/docs/{ai → development/tools}/troubleshooting.md +10 -4
- package/templates/blank/docs/errors/CAGE-AI-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-001.md +2 -2
- package/templates/blank/docs/errors/CAGE-APPR-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-006.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-007.md +2 -2
- package/templates/blank/docs/errors/CAGE-APPR-010.md +1 -1
- package/templates/blank/docs/errors/CAGE-AUDIT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-AUTH-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-BIZ-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-BIZ-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-BUDGET-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-BUDGET-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-BUDGET-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-CMD-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-CMD-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-006.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-007.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-008.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-009.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-010.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-011.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-012.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-013.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-014.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-015.md +1 -1
- package/templates/blank/docs/errors/CAGE-CREATE-001.md +2 -2
- package/templates/blank/docs/errors/CAGE-DECL-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-DECL-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-DECL-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-DECL-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-DEP-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-DEP-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-DEP-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-DEP-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-DEP-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-DIAG-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-DLQ-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-ENV-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-ENV-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-ENV-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-EVENT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-EVENT-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-FIELD-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-FIELD-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-FIELD-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-FIELD-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-FILE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-GEN-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-GEN-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-GEN-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-GRANT-001.md +19 -13
- package/templates/blank/docs/errors/CAGE-GRANT-002.md +3 -3
- package/templates/blank/docs/errors/CAGE-GRANT-003.md +4 -4
- package/templates/blank/docs/errors/CAGE-IMPACT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-IMPACT-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-INIT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-INIT-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-INIT-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-INIT-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-INIT-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-JOB-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-JOB-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-JOB-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-LINT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-MIG-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-MIG-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-MIG-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-006.md +1 -1
- package/templates/blank/docs/errors/CAGE-ONTOLOGY-001.md +52 -0
- package/templates/blank/docs/errors/CAGE-ORG-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-PAIR-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-QUERY-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-QUERY-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-QUERY-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-REACT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-REACT-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-REACT-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-READS-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-REG-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-REG-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-REG-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-REL-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-ROUTE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-SCOPE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-SCOPE-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-SECRET-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-SECRET-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-SENS-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-SQL-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-SQL-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-003.md +2 -2
- package/templates/blank/docs/errors/CAGE-STATE-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-010.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-011.md +1 -1
- package/templates/blank/docs/errors/CAGE-STRUCT-001.md +4 -4
- package/templates/blank/docs/errors/CAGE-STRUCT-002.md +3 -3
- package/templates/blank/docs/errors/CAGE-SYNC-001.md +4 -4
- package/templates/blank/docs/errors/CAGE-TEST-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-TEST-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-TEST-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-UNSAFE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-UPGRADE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-WORKER-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-WORKER-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-WORKER-003.md +1 -1
- package/templates/blank/docs/errors/README.md +8 -2
- package/templates/blank/docs/errors/runtime.md +2 -2
- package/templates/blank/docs/examples/purchase-admin/README.md +1 -1
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/styles/global.css +12 -11
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/main.tsx +18 -7
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/error-message.ts +1 -1
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/approval-member-picker.tsx +1 -1
- package/templates/blank/docs/examples/purchase-admin/cage.config.json +2 -1
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/role/index.ts +2 -2
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/user/index.ts +3 -3
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approval-members.ts +1 -1
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approvals.ts +2 -2
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/intelligence.test.ts +4 -4
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.test.ts +10 -17
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.ts +4 -5
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/workflows/purchase-process.ts +1 -1
- package/templates/blank/package.json +3 -3
- package/templates/blank/packages/contracts/package.json +1 -1
- package/templates/blank/packages/contracts/src/aggregates/role/index.ts +2 -2
- package/templates/blank/packages/contracts/src/aggregates/user/index.ts +3 -3
- package/templates/blank/packages/domain/package.json +5 -5
- package/templates/app/docs/ai/README.md +0 -103
- package/templates/app/docs/ai/recipes.md +0 -89
- package/templates/blank/docs/ai/README.md +0 -103
- package/templates/blank/docs/ai/recipes.md +0 -89
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CAGE-STATE-003:状态名称格式错误
|
|
2
2
|
|
|
3
|
-
[返回错误码册](README.md) · [业务排错](../
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
|
|
4
4
|
|
|
5
5
|
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
## 修复步骤
|
|
14
14
|
|
|
15
|
-
1. 状态标识使用 pending_approval
|
|
15
|
+
1. 状态标识使用 pending_approval 等,业务名称在 states 的 labels 中填写,graph.labels 可覆盖显示;页面文案和普通注释不会自动进入本体。
|
|
16
16
|
|
|
17
17
|
## 正例
|
|
18
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CAGE-STRUCT-001:业务源码目录不符合模块约定
|
|
2
2
|
|
|
3
|
-
[返回错误码册](README.md) · [业务排错](../
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
|
|
4
4
|
|
|
5
5
|
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
1. 前端使用 app / modules / shared,src 根目录只保留 main.tsx;领域使用 modules / workflows / integrations / shared,根目录只保留 index.ts。
|
|
16
16
|
2. 把页面、表单、hooks 和业务辅助代码放在同一业务模块,需要时再拆文件;不要创建空目录凑层级。测试就近放置,类型声明 .d.ts 不受入口约束。
|
|
17
|
-
3. 目录调整后修正导入并运行 cage check、gen、verify;完整规范见 docs/
|
|
17
|
+
3. 目录调整后修正导入并运行 cage check、gen、verify;完整规范见 docs/development/reference/project-structure.md。
|
|
18
18
|
|
|
19
19
|
## 正例
|
|
20
20
|
|
|
@@ -32,7 +32,7 @@ packages/domain/src/expense.ts
|
|
|
32
32
|
|
|
33
33
|
## 修复后验证
|
|
34
34
|
|
|
35
|
-
按 docs/
|
|
35
|
+
按 docs/development/reference/project-structure.md 整理归属和导入后重跑 cage check 与 verify;不关闭目录规则,也不改业务表或能力标识。
|
|
36
36
|
|
|
37
37
|
## 框架内的检查位置
|
|
38
38
|
|
|
@@ -47,5 +47,5 @@ packages/domain/src/expense.ts
|
|
|
47
47
|
code: 'CAGE-STRUCT-001',
|
|
48
48
|
at,
|
|
49
49
|
reason: `${kind} 源码没有放入约定模块:${from.path}`,
|
|
50
|
-
fix: `src 根目录只保留${kind === 'domain' ? '领域 index.ts' : '浏览器 main.tsx'};业务按归属放入 ${layers.join(' / ')},见 docs/
|
|
50
|
+
fix: `src 根目录只保留${kind === 'domain' ? '领域 index.ts' : '浏览器 main.tsx'};业务按归属放入 ${layers.join(' / ')},见 docs/development/reference/project-structure.md`,
|
|
51
51
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CAGE-STRUCT-002:源码依赖越过模块边界
|
|
2
2
|
|
|
3
|
-
[返回错误码册](README.md) · [业务排错](../
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
|
|
4
4
|
|
|
5
5
|
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
6
|
|
|
@@ -32,7 +32,7 @@ import { ExpensePage } from '../../modules/expense/pages/expense-page';
|
|
|
32
32
|
|
|
33
33
|
## 修复后验证
|
|
34
34
|
|
|
35
|
-
按 docs/
|
|
35
|
+
按 docs/development/reference/project-structure.md 整理归属和导入后重跑 cage check 与 verify;不关闭目录规则,也不改业务表或能力标识。
|
|
36
36
|
|
|
37
37
|
## 框架内的检查位置
|
|
38
38
|
|
|
@@ -47,5 +47,5 @@ import { ExpensePage } from '../../modules/expense/pages/expense-page';
|
|
|
47
47
|
code: 'CAGE-STRUCT-002',
|
|
48
48
|
at: `${at}:${source.slice(0, spec.pos).split('\n').length}`,
|
|
49
49
|
reason: `${reason}(${spec.fileName})`,
|
|
50
|
-
fix: '调整依赖归属;共用纯逻辑下沉到 shared,页面协作由 app 传参,领域交互通过模块公开声明。见 docs/
|
|
50
|
+
fix: '调整依赖归属;共用纯逻辑下沉到 shared,页面协作由 app 传参,领域交互通过模块公开声明。见 docs/development/reference/project-structure.md',
|
|
51
51
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CAGE-SYNC-001:AGENTS 托管区过期或标记损坏
|
|
2
2
|
|
|
3
|
-
[返回错误码册](README.md) · [业务排错](../
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
|
|
4
4
|
|
|
5
5
|
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
6
|
|
|
@@ -34,9 +34,9 @@ sync --check 发现框架规则需更新,或 begin/end 标记缺失一边、
|
|
|
34
34
|
|
|
35
35
|
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
36
|
|
|
37
|
-
- `packages/cli/src/sync.ts:
|
|
38
|
-
- `packages/cli/src/sync.ts:
|
|
39
|
-
- `packages/cli/src/sync.ts:
|
|
37
|
+
- `packages/cli/src/sync.ts:73`
|
|
38
|
+
- `packages/cli/src/sync.ts:80`
|
|
39
|
+
- `packages/cli/src/sync.ts:91`
|
|
40
40
|
|
|
41
41
|
实现片段(位置随框架版本更新):
|
|
42
42
|
|
|
@@ -3,11 +3,17 @@
|
|
|
3
3
|
这是本业务项目自带的离线诊断手册。先使用错误码、声明位置、reason/fix 定位;不需要克隆框架仓库。
|
|
4
4
|
|
|
5
5
|
- [HTTP 运行时错误与业务码](runtime.md):401/403/404、状态冲突、约束拒绝、DOMAIN_ERROR 等。
|
|
6
|
-
- [业务排错顺序](../
|
|
6
|
+
- [业务排错顺序](../development/tools/troubleshooting.md):启动、权限、审批人、worker、死信与导入导出。
|
|
7
7
|
- CAGE-* 是声明、工具链或内部运行诊断;HTTP code 与业务 domainCode 是另一层,不要混为一谈。
|
|
8
8
|
|
|
9
9
|
每页包含触发阶段、具体原因、修复步骤、正反例、验证方法与当前版实现位置。例子为局部说明,不能替代完整业务输入。
|
|
10
10
|
|
|
11
|
+
## 本体业务名称
|
|
12
|
+
|
|
13
|
+
| 诊断码 | 含义 |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| [CAGE-ONTOLOGY-001](CAGE-ONTOLOGY-001.md) | 本体节点缺少结构化业务名称 |
|
|
16
|
+
|
|
11
17
|
## 智能运行时
|
|
12
18
|
|
|
13
19
|
| 诊断码 | 含义 |
|
|
@@ -181,7 +187,7 @@
|
|
|
181
187
|
|
|
182
188
|
| 诊断码 | 含义 |
|
|
183
189
|
| --- | --- |
|
|
184
|
-
| [CAGE-GRANT-001](CAGE-GRANT-001.md) |
|
|
190
|
+
| [CAGE-GRANT-001](CAGE-GRANT-001.md) | 授予超出自己的能力或参数 |
|
|
185
191
|
| [CAGE-GRANT-002](CAGE-GRANT-002.md) | 授予超出自己的数据范围 |
|
|
186
192
|
| [CAGE-GRANT-003](CAGE-GRANT-003.md) | 能力不在代码目录中 |
|
|
187
193
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# HTTP 运行时错误与业务码
|
|
2
2
|
|
|
3
|
-
[返回错误码册](README.md) · [排错方法](../
|
|
3
|
+
[返回错误码册](README.md) · [排错方法](../development/tools/troubleshooting.md)
|
|
4
4
|
|
|
5
5
|
框架诊断分三层:`CAGE-APPR-007` 等内部/工具码、HTTP 响应的通用 `code`、业务拒绝的 `domainCode`。同一次失败可以同时涉及几层;例如审批人配置问题出现在 worker 死信,前端提交此前可能已成功。
|
|
6
6
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
| NOT_FOUND | 404 | 记录不存在或超出范围 | 用当前用户检查 id/租户/范围,不泄漏范围外数据 |
|
|
14
14
|
| INVALID_INPUT | 400 | Zod/协议输入错误、外键或检查约束等 | 按输入 schema 修正字段和格式,不直接扩大 schema |
|
|
15
15
|
| INVALID_TRANSITION | 409 | 当前状态不允许该命令 | 刷新记录,按真实生命周期显示允许操作 |
|
|
16
|
-
| CONSTRAINT_VIOLATED | 403 |
|
|
16
|
+
| CONSTRAINT_VIOLATED | 403 | 职责分离、二次认证、防提权等拒绝 | 看约束原因,调整业务操作或由有权管理员配置;不删除约束 |
|
|
17
17
|
| INVARIANT_VIOLATED | 409 | 命令结果不满足聚合不变量 | 修正输入或 handler,保持合法结果 |
|
|
18
18
|
| CONFLICT | 409 | 版本、唯一性、数据库串行化/死锁等冲突 | 看 detail、重新读取再决定是否重试;不要盲目重复创建 |
|
|
19
19
|
| DOMAIN_ERROR | 422 | handler 返回 fail | 读取 domainCode,展示业务文案和必要 detail |
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"build:app": "pnpm --filter @app/domain build && pnpm --filter @app/api build && pnpm --filter @app/web build"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@yss123/cage-cli": "0.
|
|
15
|
-
"@yss123/cage-testkit": "0.
|
|
16
|
-
"@yss123/cage-lint": "0.
|
|
14
|
+
"@yss123/cage-cli": "0.4.0",
|
|
15
|
+
"@yss123/cage-testkit": "0.4.0",
|
|
16
|
+
"@yss123/cage-lint": "0.4.0",
|
|
17
17
|
"@types/node": "^24.3.0",
|
|
18
18
|
"typescript": "~5.9.3",
|
|
19
19
|
"vitest": "^4.1.12",
|
|
@@ -31,7 +31,7 @@ export const RoleInputs = {
|
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
/** Role.archive 可能返回的错误码 */
|
|
34
|
-
export type RoleArchiveError = 'CONFLICT' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
34
|
+
export type RoleArchiveError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
35
35
|
/** Role.create 可能返回的错误码 */
|
|
36
36
|
export type RoleCreateError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT';
|
|
37
37
|
/** Role.grantCapability 可能返回的错误码 */
|
|
@@ -39,7 +39,7 @@ export type RoleGrantCapabilityError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOM
|
|
|
39
39
|
/** Role.rename 可能返回的错误码 */
|
|
40
40
|
export type RoleRenameError = 'CONFLICT' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
41
41
|
/** Role.revokeCapability 可能返回的错误码 */
|
|
42
|
-
export type RoleRevokeCapabilityError = 'CONFLICT' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
42
|
+
export type RoleRevokeCapabilityError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
43
43
|
/** Role.setScope 可能返回的错误码 */
|
|
44
44
|
export type RoleSetScopeError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
45
45
|
|
|
@@ -38,11 +38,11 @@ export type UserAssignRolesError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOMAIN_
|
|
|
38
38
|
/** User.create 可能返回的错误码 */
|
|
39
39
|
export type UserCreateError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT';
|
|
40
40
|
/** User.disable 可能返回的错误码 */
|
|
41
|
-
export type UserDisableError = 'CONFLICT' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
41
|
+
export type UserDisableError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
42
42
|
/** User.enable 可能返回的错误码 */
|
|
43
|
-
export type UserEnableError = 'CONFLICT' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
43
|
+
export type UserEnableError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
44
44
|
/** User.setPassword 可能返回的错误码 */
|
|
45
|
-
export type UserSetPasswordError = 'CONFLICT' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
45
|
+
export type UserSetPasswordError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
46
46
|
/** User.update 可能返回的错误码 */
|
|
47
47
|
export type UserUpdateError = 'CONFLICT' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
|
|
48
48
|
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@yss123/cage-kernel": "0.
|
|
18
|
-
"@yss123/cage-admin": "0.
|
|
19
|
-
"@yss123/cage-approval": "0.
|
|
20
|
-
"@yss123/cage-connectors": "0.
|
|
21
|
-
"@yss123/cage-ai": "0.
|
|
17
|
+
"@yss123/cage-kernel": "0.4.0",
|
|
18
|
+
"@yss123/cage-admin": "0.4.0",
|
|
19
|
+
"@yss123/cage-approval": "0.4.0",
|
|
20
|
+
"@yss123/cage-connectors": "0.4.0",
|
|
21
|
+
"@yss123/cage-ai": "0.4.0",
|
|
22
22
|
"zod": "^4.1.5"
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 采购协作名录:由业务管理员登记可参与采购复核的账号、公开业务姓名和专业领域,供草稿选人及任务操作使用。
|
|
3
3
|
* 聚合通过标准命令维护,浏览器读取 safe.approval_member;名录与 sys.user 的私密资料、角色授权分离。
|
|
4
|
-
* 名录在同租户内向具 ApprovalMember.read 且显式获 all
|
|
4
|
+
* 名录在同租户内向具 ApprovalMember.read 且显式获 all 范围的采购参与者公开;加入名录不授予审批权限或范围。
|
|
5
5
|
*/
|
|
6
6
|
import { aggregate, command, ref, scope, states, text } from '@yss123/cage-kernel';
|
|
7
7
|
import { z } from 'zod';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 采购实际审批路由:AI 预审、部门审核、可选专业会签和大额财务候选受理,共用一个采购流程实例。
|
|
3
3
|
* 人工节点显式开放转办、委派和前后/并行加签;步骤/政策随提交保存,旧实例保持自己的快照。
|
|
4
|
-
*
|
|
4
|
+
* 路由只决定任务分配与签序,最终结论仍执行领域命令的职责分离与库存约束。
|
|
5
5
|
*/
|
|
6
6
|
import { approval } from '@yss123/cage-kernel';
|
|
7
7
|
import { approver, eq, gt, route, step, when } from '@yss123/cage-approval';
|
|
@@ -28,7 +28,7 @@ export const poApproval = approval(PurchaseOrder, {
|
|
|
28
28
|
* needsSpecialistReview=true 才增加专业会签,名单来自提交快照且全部人必须通过;金额严格大于 50000 元才增加财务节点。
|
|
29
29
|
* AI 只读取 reason/amount/items,pass 仅推进到经理,return 回到草稿,manual 在当前节点交部门负责人。
|
|
30
30
|
* 模型失败同样转人工,最多四轮/五次工具调用/120 秒;不以失败兜底为自动批准。
|
|
31
|
-
* 财务共享一项未分配任务,finance
|
|
31
|
+
* 财务共享一项未分配任务,finance 当前成员须先领取;所有人工动作仍需真实命令能力、范围和职责分离。
|
|
32
32
|
* AI 人工接管保持原节点规则;经理、专业和财务才开放三项管理动作,新实例自动保存允许的加签位置。
|
|
33
33
|
*/
|
|
34
34
|
export const poRoute = route('po-approval', [
|
|
@@ -25,7 +25,7 @@ beforeAll(async () => {
|
|
|
25
25
|
env = await createTestEnv({ domain: { ...purchase, intelligence }, migrations: readMigrations(fileURLToPath(new URL('../../../../../db/migrations/', import.meta.url))) });
|
|
26
26
|
buyer = await env.user({ caps: ['PurchaseOrder.read', 'PurchaseOrder.create', 'PurchaseOrder.explainPurpose', 'PurchaseOrder.submit', 'PurchaseOrder.setReviewers', 'ApprovalMember.read'],
|
|
27
27
|
scopes: { ApprovalMember: 'all' } });
|
|
28
|
-
reviewer = await env.user({ caps: ['PurchaseOrder.read', 'PurchaseOrder.approve', 'PurchaseOrder.returnForChanges'], scopes: { PurchaseOrder: 'dept' }
|
|
28
|
+
reviewer = await env.user({ caps: ['PurchaseOrder.read', 'PurchaseOrder.approve', 'PurchaseOrder.returnForChanges'], scopes: { PurchaseOrder: 'dept' } });
|
|
29
29
|
await env.kernel.execute('Dept.update', { id: env.rootDeptId, leaderId: reviewer.id }, env.system());
|
|
30
30
|
await env.kernel.execute('Inventory.create', { sku: 'AI-01', available: 100 }, env.system());
|
|
31
31
|
const role = await env.kernel.execute('Role.create', { code: 'purchase_ai_reviewer', name: '材料预审角色' }, env.system());
|
|
@@ -39,12 +39,12 @@ beforeAll(async () => {
|
|
|
39
39
|
afterAll(() => env?.close());
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* 通过组织和业务命令登记同部门协作人;名录本身不授予能力。
|
|
43
43
|
* 专业和财务共享这些真实审批能力,财务候选身份由额外的 finance 角色单独赋予。
|
|
44
44
|
*/
|
|
45
45
|
async function collaborator(specialty: string) {
|
|
46
46
|
const user = await env.user({ caps: ['PurchaseOrder.read', 'PurchaseOrder.approve', 'PurchaseOrder.reject', 'PurchaseOrder.returnForChanges'],
|
|
47
|
-
scopes: { PurchaseOrder: 'dept' }
|
|
47
|
+
scopes: { PurchaseOrder: 'dept' } });
|
|
48
48
|
await env.kernel.execute('ApprovalMember.create', { userId: user.id, displayName: specialty, specialty }, env.system());
|
|
49
49
|
return user;
|
|
50
50
|
}
|
|
@@ -145,7 +145,7 @@ it('经理后开启所选专业人员 all 会签,全部通过才批准并锁
|
|
|
145
145
|
expect((await env.query('select status from core.inventory_lock where id=$1', [order.id]))[0].status).toBe('held');
|
|
146
146
|
});
|
|
147
147
|
|
|
148
|
-
/** gt 阈值必须保持严格大于;恰好 5
|
|
148
|
+
/** gt 阈值必须保持严格大于;恰好 5 万元时不创建财务候选任务。 */
|
|
149
149
|
it('恰好 50000 元经理通过后直接批准,不产生财务候选待办', async () => {
|
|
150
150
|
decision = 'pass'; const order = await submit({ amount: '50000.00' });
|
|
151
151
|
await approveBy(reviewer, order.id);
|