@tailor-platform/erp-kit 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +1 -23
- package/dist/cli.mjs +1613 -0
- package/package.json +14 -13
- package/schemas/app-compose/story.yml +12 -0
- package/schemas/module/command.yml +9 -0
- package/schemas/module/module.yml +4 -0
- package/schemas/module/query.yml +9 -0
- package/skills/erp-kit-app-1-requirements/SKILL.md +4 -4
- package/skills/erp-kit-app-2-requirements-review/SKILL.md +102 -0
- package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +66 -0
- package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +69 -0
- package/skills/erp-kit-app-2-requirements-review/references/requirements-report-format.md +25 -0
- package/skills/erp-kit-app-3-plan/SKILL.md +157 -0
- package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +107 -0
- package/skills/erp-kit-app-3-plan/references/screen-extraction.md +74 -0
- package/skills/erp-kit-app-3-plan/references/story-extraction.md +86 -0
- package/skills/erp-kit-app-4-plan-review/SKILL.md +177 -0
- package/skills/erp-kit-app-4-plan-review/references/actor-flow-parity.md +73 -0
- package/skills/erp-kit-app-4-plan-review/references/business-flow-story-parity.md +86 -0
- package/skills/erp-kit-app-4-plan-review/references/orphan-detection.md +69 -0
- package/skills/erp-kit-app-4-plan-review/references/parity-report-format.md +52 -0
- package/skills/erp-kit-app-4-plan-review/references/story-resolver-parity.md +83 -0
- package/skills/erp-kit-app-4-plan-review/references/story-screen-parity.md +73 -0
- package/skills/{erp-kit-app-5-implementation → erp-kit-app-5-impl-backend}/SKILL.md +24 -68
- package/skills/erp-kit-app-5-impl-backend/references/app-config.md +38 -0
- package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +48 -0
- package/skills/erp-kit-app-5-impl-backend/references/resolver-patterns.md +68 -0
- package/skills/erp-kit-app-6-impl-frontend/SKILL.md +74 -0
- package/skills/{erp-kit-app-5-implementation/references/frontend.md → erp-kit-app-6-impl-frontend/references/pages.md} +8 -90
- package/skills/erp-kit-app-7-impl-review/SKILL.md +176 -0
- package/skills/erp-kit-app-7-impl-review/references/impl-parity-report-format.md +52 -0
- package/skills/erp-kit-app-7-impl-review/references/module-wiring-parity.md +84 -0
- package/skills/erp-kit-app-7-impl-review/references/resolver-doc-code-parity.md +86 -0
- package/skills/erp-kit-app-7-impl-review/references/screen-doc-code-parity.md +86 -0
- package/skills/erp-kit-module-1-requirements/SKILL.md +126 -0
- package/skills/erp-kit-module-1-requirements/references/boundary-analysis.md +51 -0
- package/skills/erp-kit-module-1-requirements/references/erp-research.md +57 -0
- package/skills/erp-kit-module-1-requirements/references/feature-doc.md +61 -0
- package/skills/erp-kit-module-2-requirements-review/SKILL.md +112 -0
- package/skills/erp-kit-module-2-requirements-review/references/best-practices-check.md +79 -0
- package/skills/erp-kit-module-2-requirements-review/references/boundary-consistency-check.md +70 -0
- package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +25 -0
- package/skills/erp-kit-module-3-plan/SKILL.md +107 -0
- package/skills/erp-kit-module-3-plan/references/command-extraction.md +87 -0
- package/skills/erp-kit-module-3-plan/references/model-extraction.md +72 -0
- package/skills/erp-kit-module-3-plan/references/query-extraction.md +59 -0
- package/skills/erp-kit-module-4-plan-review/SKILL.md +158 -0
- package/skills/erp-kit-module-4-plan-review/references/command-model-consistency.md +46 -0
- package/skills/erp-kit-module-4-plan-review/references/feature-command-parity.md +97 -0
- package/skills/erp-kit-module-4-plan-review/references/feature-model-parity.md +47 -0
- package/skills/erp-kit-module-4-plan-review/references/feature-query-parity.md +70 -0
- package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +52 -0
- package/skills/erp-kit-module-5-impl/SKILL.md +118 -0
- package/skills/erp-kit-module-5-impl/references/command-impl.md +68 -0
- package/skills/erp-kit-module-5-impl/references/exports.md +10 -0
- package/skills/erp-kit-module-5-impl/references/model-impl.md +45 -0
- package/skills/erp-kit-module-5-impl/references/query-impl.md +53 -0
- package/skills/erp-kit-module-6-impl-review/SKILL.md +187 -0
- package/skills/erp-kit-module-6-impl-review/references/command-doc-code-parity.md +92 -0
- package/skills/erp-kit-module-6-impl-review/references/command-doc-test-parity.md +93 -0
- package/skills/erp-kit-module-6-impl-review/references/error-implementation-parity.md +95 -0
- package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/errors.md +1 -1
- package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +52 -0
- package/skills/erp-kit-module-6-impl-review/references/model-doc-code-parity.md +80 -0
- package/skills/erp-kit-module-shared/SKILL.md +1 -1
- package/skills/erp-kit-module-shared/references/commands.md +1 -1
- package/skills/erp-kit-module-shared/references/errors.md +12 -9
- package/skills/erp-kit-module-shared/references/queries.md +109 -36
- package/skills/erp-kit-module-shared/references/testing.md +10 -0
- package/skills/erp-kit-update/SKILL.md +2 -2
- package/src/app.ts +1 -1
- package/src/commands/check.ts +1 -1
- package/src/commands/index.ts +16 -5
- package/src/commands/init.test.ts +22 -69
- package/src/commands/init.ts +28 -115
- package/src/commands/lib/distribute.test.ts +126 -0
- package/src/commands/lib/distribute.ts +129 -0
- package/src/commands/parse-doc-test-cases.ts +55 -0
- package/src/commands/scaffold.test.ts +74 -33
- package/src/commands/scaffold.ts +54 -18
- package/src/commands/sync-check.test.ts +173 -0
- package/src/commands/sync-check.ts +103 -2
- package/src/commands/update.test.ts +87 -0
- package/src/commands/update.ts +41 -0
- package/src/generator/generate-code.test.ts +23 -12
- package/src/generator/generate-code.ts +22 -16
- package/src/integration.test.ts +1 -1
- package/src/module.ts +14 -97
- package/src/modules/item-management/README.md +8 -0
- package/src/modules/item-management/command/activateItem.generated.ts +1 -1
- package/src/modules/item-management/command/activateItem.test.ts +12 -18
- package/src/modules/item-management/command/activateItem.ts +9 -5
- package/src/modules/item-management/command/assignItemToTaxonomy.generated.ts +1 -1
- package/src/modules/item-management/command/assignItemToTaxonomy.test.ts +10 -24
- package/src/modules/item-management/command/assignItemToTaxonomy.ts +19 -16
- package/src/modules/item-management/command/createItem.generated.ts +1 -1
- package/src/modules/item-management/command/createItem.test.ts +11 -11
- package/src/modules/item-management/command/createItem.ts +16 -7
- package/src/modules/item-management/command/createTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/createTaxonomyNode.test.ts +9 -9
- package/src/modules/item-management/command/createTaxonomyNode.ts +33 -14
- package/src/modules/item-management/command/deactivateItem.generated.ts +1 -1
- package/src/modules/item-management/command/deactivateItem.test.ts +12 -18
- package/src/modules/item-management/command/deactivateItem.ts +9 -5
- package/src/modules/item-management/command/deleteItem.generated.ts +1 -1
- package/src/modules/item-management/command/deleteItem.test.ts +10 -16
- package/src/modules/item-management/command/deleteItem.ts +9 -5
- package/src/modules/item-management/command/deleteTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/deleteTaxonomyNode.test.ts +10 -16
- package/src/modules/item-management/command/deleteTaxonomyNode.ts +22 -12
- package/src/modules/item-management/command/moveTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/moveTaxonomyNode.test.ts +10 -10
- package/src/modules/item-management/command/moveTaxonomyNode.ts +63 -19
- package/src/modules/item-management/command/reactivateItem.generated.ts +1 -1
- package/src/modules/item-management/command/reactivateItem.test.ts +12 -18
- package/src/modules/item-management/command/reactivateItem.ts +9 -5
- package/src/modules/item-management/command/removeItemFromTaxonomy.generated.ts +1 -1
- package/src/modules/item-management/command/removeItemFromTaxonomy.test.ts +9 -16
- package/src/modules/item-management/command/removeItemFromTaxonomy.ts +11 -6
- package/src/modules/item-management/command/updateItem.generated.ts +1 -1
- package/src/modules/item-management/command/updateItem.test.ts +16 -16
- package/src/modules/item-management/command/updateItem.ts +11 -6
- package/src/modules/item-management/command/updateTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/updateTaxonomyNode.test.ts +14 -20
- package/src/modules/item-management/command/updateTaxonomyNode.ts +9 -6
- package/src/modules/item-management/docs/commands/ActivateItem.md +8 -0
- package/src/modules/item-management/docs/commands/AssignItemToTaxonomy.md +7 -0
- package/src/modules/item-management/docs/commands/CreateItem.md +10 -0
- package/src/modules/item-management/docs/commands/CreateTaxonomyNode.md +9 -0
- package/src/modules/item-management/docs/commands/DeactivateItem.md +8 -0
- package/src/modules/item-management/docs/commands/DeleteItem.md +7 -0
- package/src/modules/item-management/docs/commands/DeleteTaxonomyNode.md +7 -0
- package/src/modules/item-management/docs/commands/MoveTaxonomyNode.md +10 -0
- package/src/modules/item-management/docs/commands/ReactivateItem.md +8 -0
- package/src/modules/item-management/docs/commands/RemoveItemFromTaxonomy.md +5 -0
- package/src/modules/item-management/docs/commands/UpdateItem.md +15 -0
- package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +9 -0
- package/src/modules/item-management/docs/queries/CalculateNodeDepth.md +8 -0
- package/src/modules/item-management/docs/queries/CalculateSubtreeDepth.md +7 -0
- package/src/modules/item-management/docs/queries/DetectCircularReference.md +9 -0
- package/src/modules/item-management/docs/queries/GetItem.md +9 -0
- package/src/modules/item-management/docs/queries/GetItemTaxonomyAssignment.md +5 -0
- package/src/modules/item-management/docs/queries/GetTaxonomyNode.md +7 -0
- package/src/modules/item-management/docs/queries/GetTaxonomyNodeAssignments.md +5 -0
- package/src/modules/item-management/docs/queries/GetTaxonomyNodeChildren.md +6 -0
- package/src/modules/item-management/index.ts +0 -51
- package/src/modules/item-management/lib/errors.generated.ts +24 -24
- package/src/modules/item-management/lib/permissions.generated.ts +1 -1
- package/src/modules/item-management/lib/types.ts +1 -1
- package/src/modules/item-management/module.ts +1 -1
- package/src/modules/item-management/query/calculateNodeDepth.generated.ts +1 -1
- package/src/modules/item-management/query/calculateNodeDepth.test.ts +21 -6
- package/src/modules/item-management/query/calculateNodeDepth.ts +2 -2
- package/src/modules/item-management/query/calculateSubtreeDepth.generated.ts +1 -1
- package/src/modules/item-management/query/calculateSubtreeDepth.test.ts +17 -5
- package/src/modules/item-management/query/calculateSubtreeDepth.ts +2 -2
- package/src/modules/item-management/query/detectCircularReference.generated.ts +1 -1
- package/src/modules/item-management/query/detectCircularReference.test.ts +25 -7
- package/src/modules/item-management/query/detectCircularReference.ts +4 -4
- package/src/modules/item-management/query/getItem.generated.ts +1 -1
- package/src/modules/item-management/query/getItem.test.ts +25 -7
- package/src/modules/item-management/query/getItem.ts +2 -2
- package/src/modules/item-management/query/getItemTaxonomyAssignment.generated.ts +1 -1
- package/src/modules/item-management/query/getItemTaxonomyAssignment.test.ts +9 -3
- package/src/modules/item-management/query/getItemTaxonomyAssignment.ts +2 -2
- package/src/modules/item-management/query/getTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNode.test.ts +17 -5
- package/src/modules/item-management/query/getTaxonomyNode.ts +2 -2
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.generated.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.test.ts +9 -3
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.ts +2 -2
- package/src/modules/item-management/query/getTaxonomyNodeChildren.generated.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNodeChildren.test.ts +13 -4
- package/src/modules/item-management/query/getTaxonomyNodeChildren.ts +2 -2
- package/src/modules/item-management/tailor.config.ts +6 -4
- package/src/modules/item-management/tailor.d.ts +13 -0
- package/src/modules/primitives/README.md +8 -0
- package/src/modules/primitives/command/activateCategory.generated.ts +1 -1
- package/src/modules/primitives/command/activateCategory.test.ts +8 -18
- package/src/modules/primitives/command/activateCategory.ts +9 -5
- package/src/modules/primitives/command/activateCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/activateCurrency.test.ts +8 -18
- package/src/modules/primitives/command/activateCurrency.ts +9 -5
- package/src/modules/primitives/command/activateUnit.generated.ts +1 -1
- package/src/modules/primitives/command/activateUnit.test.ts +8 -15
- package/src/modules/primitives/command/activateUnit.ts +9 -5
- package/src/modules/primitives/command/createCategory.generated.ts +1 -1
- package/src/modules/primitives/command/createCategory.test.ts +29 -44
- package/src/modules/primitives/command/createCategory.ts +9 -5
- package/src/modules/primitives/command/createCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/createCurrency.test.ts +53 -78
- package/src/modules/primitives/command/createCurrency.ts +9 -6
- package/src/modules/primitives/command/createExchangeRate.generated.ts +1 -1
- package/src/modules/primitives/command/createExchangeRate.test.ts +59 -97
- package/src/modules/primitives/command/createExchangeRate.ts +13 -7
- package/src/modules/primitives/command/createUnit.generated.ts +1 -1
- package/src/modules/primitives/command/createUnit.test.ts +59 -90
- package/src/modules/primitives/command/createUnit.ts +9 -6
- package/src/modules/primitives/command/deactivateCategory.generated.ts +1 -1
- package/src/modules/primitives/command/deactivateCategory.test.ts +15 -33
- package/src/modules/primitives/command/deactivateCategory.ts +9 -5
- package/src/modules/primitives/command/deactivateCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/deactivateCurrency.test.ts +12 -26
- package/src/modules/primitives/command/deactivateCurrency.ts +9 -5
- package/src/modules/primitives/command/deactivateUnit.generated.ts +1 -1
- package/src/modules/primitives/command/deactivateUnit.test.ts +15 -30
- package/src/modules/primitives/command/deactivateUnit.ts +14 -7
- package/src/modules/primitives/command/setBaseCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/setBaseCurrency.test.ts +18 -40
- package/src/modules/primitives/command/setBaseCurrency.ts +15 -7
- package/src/modules/primitives/command/setReferenceUnit.generated.ts +1 -1
- package/src/modules/primitives/command/setReferenceUnit.test.ts +22 -44
- package/src/modules/primitives/command/setReferenceUnit.ts +21 -9
- package/src/modules/primitives/docs/commands/ActivateCategory.md +6 -0
- package/src/modules/primitives/docs/commands/ActivateCurrency.md +6 -0
- package/src/modules/primitives/docs/commands/ActivateUnit.md +6 -0
- package/src/modules/primitives/docs/commands/CreateCategory.md +6 -0
- package/src/modules/primitives/docs/commands/CreateCurrency.md +10 -0
- package/src/modules/primitives/docs/commands/CreateExchangeRate.md +11 -0
- package/src/modules/primitives/docs/commands/CreateUnit.md +10 -0
- package/src/modules/primitives/docs/commands/DeactivateCategory.md +7 -0
- package/src/modules/primitives/docs/commands/DeactivateCurrency.md +7 -0
- package/src/modules/primitives/docs/commands/DeactivateUnit.md +7 -0
- package/src/modules/primitives/docs/commands/SetBaseCurrency.md +7 -0
- package/src/modules/primitives/docs/commands/SetReferenceUnit.md +7 -0
- package/src/modules/primitives/docs/queries/ConvertAmount.md +14 -0
- package/src/modules/primitives/docs/queries/ConvertQuantity.md +13 -0
- package/src/modules/primitives/docs/queries/GetBaseCurrency.md +5 -0
- package/src/modules/primitives/docs/queries/GetCurrency.md +7 -0
- package/src/modules/primitives/docs/queries/GetUnit.md +7 -0
- package/src/modules/primitives/docs/queries/GetUoMCategory.md +7 -0
- package/src/modules/primitives/docs/queries/ListUnitsByCategory.md +15 -5
- package/src/modules/primitives/index.ts +0 -49
- package/src/modules/primitives/lib/errors.generated.ts +23 -23
- package/src/modules/primitives/lib/permissions.generated.ts +1 -1
- package/src/modules/primitives/lib/types.ts +1 -1
- package/src/modules/primitives/module.ts +1 -1
- package/src/modules/primitives/query/convertAmount.generated.ts +1 -1
- package/src/modules/primitives/query/convertAmount.test.ts +110 -77
- package/src/modules/primitives/query/convertAmount.ts +61 -47
- package/src/modules/primitives/query/convertQuantity.generated.ts +1 -1
- package/src/modules/primitives/query/convertQuantity.test.ts +99 -69
- package/src/modules/primitives/query/convertQuantity.ts +12 -10
- package/src/modules/primitives/query/getBaseCurrency.generated.ts +1 -1
- package/src/modules/primitives/query/getBaseCurrency.test.ts +10 -4
- package/src/modules/primitives/query/getBaseCurrency.ts +2 -2
- package/src/modules/primitives/query/getCurrency.generated.ts +1 -1
- package/src/modules/primitives/query/getCurrency.test.ts +17 -5
- package/src/modules/primitives/query/getCurrency.ts +2 -2
- package/src/modules/primitives/query/getUnit.generated.ts +1 -1
- package/src/modules/primitives/query/getUnit.test.ts +17 -5
- package/src/modules/primitives/query/getUnit.ts +2 -2
- package/src/modules/primitives/query/getUoMCategory.generated.ts +1 -1
- package/src/modules/primitives/query/getUoMCategory.test.ts +17 -5
- package/src/modules/primitives/query/getUoMCategory.ts +2 -2
- package/src/modules/primitives/query/listUnitsByCategory.generated.ts +1 -1
- package/src/modules/primitives/query/listUnitsByCategory.test.ts +80 -0
- package/src/modules/primitives/query/listUnitsByCategory.ts +19 -3
- package/src/modules/primitives/tailor.config.ts +6 -4
- package/src/modules/primitives/tailor.d.ts +13 -0
- package/src/modules/product-management/README.md +52 -0
- package/src/modules/product-management/command/activateProduct.generated.ts +6 -0
- package/src/modules/product-management/command/activateProduct.test.ts +40 -0
- package/src/modules/product-management/command/activateProduct.ts +42 -0
- package/src/modules/product-management/command/assignProductToCategory.generated.ts +6 -0
- package/src/modules/product-management/command/assignProductToCategory.test.ts +90 -0
- package/src/modules/product-management/command/assignProductToCategory.ts +62 -0
- package/src/modules/product-management/command/createProduct.generated.ts +6 -0
- package/src/modules/product-management/command/createProduct.test.ts +149 -0
- package/src/modules/product-management/command/createProduct.ts +73 -0
- package/src/modules/product-management/command/createProductAttribute.generated.ts +6 -0
- package/src/modules/product-management/command/createProductAttribute.test.ts +70 -0
- package/src/modules/product-management/command/createProductAttribute.ts +53 -0
- package/src/modules/product-management/command/createProductAttributeValue.generated.ts +6 -0
- package/src/modules/product-management/command/createProductAttributeValue.test.ts +68 -0
- package/src/modules/product-management/command/createProductAttributeValue.ts +63 -0
- package/src/modules/product-management/command/createProductCategory.generated.ts +6 -0
- package/src/modules/product-management/command/createProductCategory.test.ts +135 -0
- package/src/modules/product-management/command/createProductCategory.ts +82 -0
- package/src/modules/product-management/command/deactivateProduct.generated.ts +6 -0
- package/src/modules/product-management/command/deactivateProduct.test.ts +40 -0
- package/src/modules/product-management/command/deactivateProduct.ts +42 -0
- package/src/modules/product-management/command/deleteProduct.generated.ts +6 -0
- package/src/modules/product-management/command/deleteProduct.test.ts +42 -0
- package/src/modules/product-management/command/deleteProduct.ts +42 -0
- package/src/modules/product-management/command/deleteProductAttribute.generated.ts +6 -0
- package/src/modules/product-management/command/deleteProductAttribute.test.ts +49 -0
- package/src/modules/product-management/command/deleteProductAttribute.ts +45 -0
- package/src/modules/product-management/command/deleteProductAttributeValue.generated.ts +6 -0
- package/src/modules/product-management/command/deleteProductAttributeValue.test.ts +71 -0
- package/src/modules/product-management/command/deleteProductAttributeValue.ts +68 -0
- package/src/modules/product-management/command/deleteProductCategory.generated.ts +6 -0
- package/src/modules/product-management/command/deleteProductCategory.test.ts +74 -0
- package/src/modules/product-management/command/deleteProductCategory.ts +53 -0
- package/src/modules/product-management/command/generateVariants.generated.ts +6 -0
- package/src/modules/product-management/command/generateVariants.test.ts +365 -0
- package/src/modules/product-management/command/generateVariants.ts +168 -0
- package/src/modules/product-management/command/moveProductCategory.generated.ts +6 -0
- package/src/modules/product-management/command/moveProductCategory.test.ts +170 -0
- package/src/modules/product-management/command/moveProductCategory.ts +124 -0
- package/src/modules/product-management/command/reactivateProduct.generated.ts +6 -0
- package/src/modules/product-management/command/reactivateProduct.test.ts +40 -0
- package/src/modules/product-management/command/reactivateProduct.ts +42 -0
- package/src/modules/product-management/command/removeProductFromCategory.generated.ts +6 -0
- package/src/modules/product-management/command/removeProductFromCategory.test.ts +42 -0
- package/src/modules/product-management/command/removeProductFromCategory.ts +32 -0
- package/src/modules/product-management/command/setProductAttributeAssignment.generated.ts +6 -0
- package/src/modules/product-management/command/setProductAttributeAssignment.test.ts +206 -0
- package/src/modules/product-management/command/setProductAttributeAssignment.ts +102 -0
- package/src/modules/product-management/command/updateProduct.generated.ts +6 -0
- package/src/modules/product-management/command/updateProduct.test.ts +168 -0
- package/src/modules/product-management/command/updateProduct.ts +95 -0
- package/src/modules/product-management/command/updateProductAttribute.generated.ts +6 -0
- package/src/modules/product-management/command/updateProductAttribute.test.ts +101 -0
- package/src/modules/product-management/command/updateProductAttribute.ts +68 -0
- package/src/modules/product-management/command/updateProductAttributeValue.generated.ts +6 -0
- package/src/modules/product-management/command/updateProductAttributeValue.test.ts +80 -0
- package/src/modules/product-management/command/updateProductAttributeValue.ts +58 -0
- package/src/modules/product-management/command/updateProductCategory.generated.ts +6 -0
- package/src/modules/product-management/command/updateProductCategory.test.ts +80 -0
- package/src/modules/product-management/command/updateProductCategory.ts +66 -0
- package/src/modules/product-management/db/product.ts +47 -0
- package/src/modules/product-management/db/productAttribute.ts +26 -0
- package/src/modules/product-management/db/productAttributeAssignment.ts +58 -0
- package/src/modules/product-management/db/productAttributeValue.ts +39 -0
- package/src/modules/product-management/db/productCategory.ts +34 -0
- package/src/modules/product-management/db/productCategoryAssignment.ts +49 -0
- package/src/modules/product-management/db/productVariant.ts +52 -0
- package/src/modules/product-management/docs/commands/ActivateProduct.md +39 -0
- package/src/modules/product-management/docs/commands/AssignProductToCategory.md +43 -0
- package/src/modules/product-management/docs/commands/CreateProduct.md +48 -0
- package/src/modules/product-management/docs/commands/CreateProductAttribute.md +39 -0
- package/src/modules/product-management/docs/commands/CreateProductAttributeValue.md +42 -0
- package/src/modules/product-management/docs/commands/CreateProductCategory.md +54 -0
- package/src/modules/product-management/docs/commands/DeactivateProduct.md +39 -0
- package/src/modules/product-management/docs/commands/DeleteProduct.md +42 -0
- package/src/modules/product-management/docs/commands/DeleteProductAttribute.md +39 -0
- package/src/modules/product-management/docs/commands/DeleteProductAttributeValue.md +42 -0
- package/src/modules/product-management/docs/commands/DeleteProductCategory.md +43 -0
- package/src/modules/product-management/docs/commands/GenerateVariants.md +68 -0
- package/src/modules/product-management/docs/commands/MoveProductCategory.md +54 -0
- package/src/modules/product-management/docs/commands/ReactivateProduct.md +38 -0
- package/src/modules/product-management/docs/commands/RemoveProductFromCategory.md +34 -0
- package/src/modules/product-management/docs/commands/SetProductAttributeAssignment.md +62 -0
- package/src/modules/product-management/docs/commands/UpdateProduct.md +61 -0
- package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +46 -0
- package/src/modules/product-management/docs/commands/UpdateProductAttributeValue.md +47 -0
- package/src/modules/product-management/docs/commands/UpdateProductCategory.md +46 -0
- package/src/modules/product-management/docs/features/attribute-management.md +48 -0
- package/src/modules/product-management/docs/features/product-category.md +71 -0
- package/src/modules/product-management/docs/features/product-lifecycle.md +66 -0
- package/src/modules/product-management/docs/features/variant-generation.md +77 -0
- package/src/modules/product-management/docs/models/Product.md +58 -0
- package/src/modules/product-management/docs/models/ProductAttribute.md +37 -0
- package/src/modules/product-management/docs/models/ProductAttributeAssignment.md +41 -0
- package/src/modules/product-management/docs/models/ProductAttributeValue.md +40 -0
- package/src/modules/product-management/docs/models/ProductCategory.md +46 -0
- package/src/modules/product-management/docs/models/ProductCategoryAssignment.md +37 -0
- package/src/modules/product-management/docs/models/ProductVariant.md +41 -0
- package/src/modules/product-management/docs/queries/CalculateCategoryDepth.md +47 -0
- package/src/modules/product-management/docs/queries/DetectCategoryCircularReference.md +51 -0
- package/src/modules/product-management/docs/queries/GetProduct.md +42 -0
- package/src/modules/product-management/docs/queries/GetProductAttribute.md +42 -0
- package/src/modules/product-management/docs/queries/GetProductAttributeAssignment.md +34 -0
- package/src/modules/product-management/docs/queries/GetProductAttributeValue.md +40 -0
- package/src/modules/product-management/docs/queries/GetProductCategory.md +42 -0
- package/src/modules/product-management/docs/queries/GetProductCategoryAssignment.md +34 -0
- package/src/modules/product-management/docs/queries/GetProductVariant.md +41 -0
- package/src/modules/product-management/docs/queries/ListAttributeAssignmentsByAttribute.md +34 -0
- package/src/modules/product-management/docs/queries/ListCategoryAssignmentsByProduct.md +35 -0
- package/src/modules/product-management/docs/queries/ListProductAttributeAssignments.md +34 -0
- package/src/modules/product-management/docs/queries/ListProductAttributeValues.md +36 -0
- package/src/modules/product-management/docs/queries/ListProductCategoryAssignments.md +34 -0
- package/src/modules/product-management/docs/queries/ListProductCategoryChildren.md +34 -0
- package/src/modules/product-management/docs/queries/ListProductVariants.md +34 -0
- package/src/modules/product-management/generated/enums.ts +9 -0
- package/src/modules/product-management/generated/kysely-tailordb.ts +100 -0
- package/src/modules/product-management/index.ts +2 -0
- package/src/modules/product-management/lib/_db_deps.ts +17 -0
- package/src/modules/product-management/lib/errors.generated.ts +152 -0
- package/src/modules/product-management/lib/permissions.generated.ts +25 -0
- package/src/modules/product-management/lib/types.ts +51 -0
- package/src/modules/product-management/module.ts +201 -0
- package/src/modules/product-management/query/calculateCategoryDepth.generated.ts +5 -0
- package/src/modules/product-management/query/calculateCategoryDepth.test.ts +72 -0
- package/src/modules/product-management/query/calculateCategoryDepth.ts +37 -0
- package/src/modules/product-management/query/detectCategoryCircularReference.generated.ts +5 -0
- package/src/modules/product-management/query/detectCategoryCircularReference.test.ts +72 -0
- package/src/modules/product-management/query/detectCategoryCircularReference.ts +44 -0
- package/src/modules/product-management/query/getProduct.generated.ts +5 -0
- package/src/modules/product-management/query/getProduct.test.ts +59 -0
- package/src/modules/product-management/query/getProduct.ts +18 -0
- package/src/modules/product-management/query/getProductAttribute.generated.ts +5 -0
- package/src/modules/product-management/query/getProductAttribute.test.ts +59 -0
- package/src/modules/product-management/query/getProductAttribute.ts +18 -0
- package/src/modules/product-management/query/getProductAttributeAssignment.generated.ts +5 -0
- package/src/modules/product-management/query/getProductAttributeAssignment.test.ts +37 -0
- package/src/modules/product-management/query/getProductAttributeAssignment.ts +18 -0
- package/src/modules/product-management/query/getProductAttributeValue.generated.ts +5 -0
- package/src/modules/product-management/query/getProductAttributeValue.test.ts +31 -0
- package/src/modules/product-management/query/getProductAttributeValue.ts +16 -0
- package/src/modules/product-management/query/getProductCategory.generated.ts +5 -0
- package/src/modules/product-management/query/getProductCategory.test.ts +59 -0
- package/src/modules/product-management/query/getProductCategory.ts +18 -0
- package/src/modules/product-management/query/getProductCategoryAssignment.generated.ts +5 -0
- package/src/modules/product-management/query/getProductCategoryAssignment.test.ts +37 -0
- package/src/modules/product-management/query/getProductCategoryAssignment.ts +18 -0
- package/src/modules/product-management/query/getProductVariant.generated.ts +5 -0
- package/src/modules/product-management/query/getProductVariant.test.ts +43 -0
- package/src/modules/product-management/query/getProductVariant.ts +20 -0
- package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.generated.ts +5 -0
- package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.test.ts +31 -0
- package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.ts +16 -0
- package/src/modules/product-management/query/listCategoryAssignmentsByProduct.generated.ts +5 -0
- package/src/modules/product-management/query/listCategoryAssignmentsByProduct.test.ts +31 -0
- package/src/modules/product-management/query/listCategoryAssignmentsByProduct.ts +16 -0
- package/src/modules/product-management/query/listProductAttributeAssignments.generated.ts +5 -0
- package/src/modules/product-management/query/listProductAttributeAssignments.test.ts +31 -0
- package/src/modules/product-management/query/listProductAttributeAssignments.ts +16 -0
- package/src/modules/product-management/query/listProductAttributeValues.generated.ts +5 -0
- package/src/modules/product-management/query/listProductAttributeValues.test.ts +31 -0
- package/src/modules/product-management/query/listProductAttributeValues.ts +17 -0
- package/src/modules/product-management/query/listProductCategoryAssignments.generated.ts +5 -0
- package/src/modules/product-management/query/listProductCategoryAssignments.test.ts +31 -0
- package/src/modules/product-management/query/listProductCategoryAssignments.ts +16 -0
- package/src/modules/product-management/query/listProductCategoryChildren.generated.ts +5 -0
- package/src/modules/product-management/query/listProductCategoryChildren.test.ts +31 -0
- package/src/modules/product-management/query/listProductCategoryChildren.ts +16 -0
- package/src/modules/product-management/query/listProductVariants.generated.ts +5 -0
- package/src/modules/product-management/query/listProductVariants.test.ts +31 -0
- package/src/modules/product-management/query/listProductVariants.ts +16 -0
- package/src/modules/product-management/tailor.config.ts +13 -0
- package/src/modules/product-management/tailor.d.ts +13 -0
- package/src/modules/product-management/testing/fixtures.ts +151 -0
- package/src/modules/user-management/README.md +9 -3
- package/src/modules/user-management/command/activateUser.generated.ts +1 -1
- package/src/modules/user-management/command/activateUser.test.ts +12 -65
- package/src/modules/user-management/command/activateUser.ts +5 -20
- package/src/modules/user-management/command/assignPermissionToRole.generated.ts +1 -1
- package/src/modules/user-management/command/assignPermissionToRole.test.ts +25 -60
- package/src/modules/user-management/command/assignPermissionToRole.ts +5 -24
- package/src/modules/user-management/command/assignRoleToUser.generated.ts +1 -1
- package/src/modules/user-management/command/assignRoleToUser.test.ts +35 -87
- package/src/modules/user-management/command/assignRoleToUser.ts +5 -24
- package/src/modules/user-management/command/createPermission.generated.ts +1 -1
- package/src/modules/user-management/command/createPermission.test.ts +23 -33
- package/src/modules/user-management/command/createPermission.ts +4 -5
- package/src/modules/user-management/command/createRole.generated.ts +1 -1
- package/src/modules/user-management/command/createRole.test.ts +17 -27
- package/src/modules/user-management/command/createRole.ts +4 -5
- package/src/modules/user-management/command/createUser.generated.ts +1 -1
- package/src/modules/user-management/command/createUser.test.ts +31 -118
- package/src/modules/user-management/command/createUser.ts +7 -25
- package/src/modules/user-management/command/deactivateUser.generated.ts +1 -1
- package/src/modules/user-management/command/deactivateUser.test.ts +12 -65
- package/src/modules/user-management/command/deactivateUser.ts +6 -21
- package/src/modules/user-management/command/reactivateUser.generated.ts +1 -1
- package/src/modules/user-management/command/reactivateUser.test.ts +13 -66
- package/src/modules/user-management/command/reactivateUser.ts +5 -20
- package/src/modules/user-management/command/revokePermissionFromRole.generated.ts +1 -1
- package/src/modules/user-management/command/revokePermissionFromRole.test.ts +24 -62
- package/src/modules/user-management/command/revokePermissionFromRole.ts +5 -24
- package/src/modules/user-management/command/revokeRoleFromUser.generated.ts +1 -1
- package/src/modules/user-management/command/revokeRoleFromUser.test.ts +24 -60
- package/src/modules/user-management/command/revokeRoleFromUser.ts +5 -24
- package/src/modules/user-management/docs/commands/ActivateUser.md +7 -0
- package/src/modules/user-management/docs/commands/AssignPermissionToRole.md +7 -0
- package/src/modules/user-management/docs/commands/AssignRoleToUser.md +9 -0
- package/src/modules/user-management/docs/commands/CreatePermission.md +12 -0
- package/src/modules/user-management/docs/commands/CreateRole.md +9 -0
- package/src/modules/user-management/docs/commands/CreateUser.md +11 -0
- package/src/modules/user-management/docs/commands/DeactivateUser.md +7 -0
- package/src/modules/user-management/docs/commands/ReactivateUser.md +7 -0
- package/src/modules/user-management/docs/commands/RevokePermissionFromRole.md +7 -0
- package/src/modules/user-management/docs/commands/RevokeRoleFromUser.md +7 -0
- package/src/modules/user-management/index.ts +0 -30
- package/src/modules/user-management/lib/errors.generated.ts +14 -14
- package/src/modules/user-management/lib/permissions.generated.ts +1 -2
- package/src/modules/user-management/lib/recomputeUserPermissions.ts +4 -3
- package/src/modules/user-management/lib/types.ts +1 -1
- package/src/modules/user-management/module.ts +2 -7
- package/src/modules/user-management/tailor.config.ts +6 -4
- package/src/modules/user-management/tailor.d.ts +13 -0
- package/src/modules/user-management/testing/fixtures.ts +1 -20
- package/src/schemas.ts +1 -1
- package/src/{modules/shared → shared}/defineCommand.test.ts +23 -7
- package/src/{modules/shared → shared}/defineCommand.ts +19 -10
- package/src/{modules/shared/internal.ts → shared/index.ts} +9 -1
- package/src/shared/pagination.test.ts +43 -0
- package/src/shared/pagination.ts +22 -0
- package/src/{modules/shared → shared}/types.ts +13 -0
- package/src/{modules/testing → testing}/index.ts +14 -7
- package/src/testing.ts +1 -1
- package/src/util.ts +8 -0
- package/templates/config/license.config.json +4 -0
- package/templates/scaffold/app/backend/.env.example +1 -0
- package/templates/scaffold/app/backend/__dot__gitignore +4 -0
- package/templates/scaffold/app/backend/eslint.config.js +32 -0
- package/templates/scaffold/app/backend/package.json +31 -0
- package/templates/scaffold/app/backend/seed/data/AuditEvent.jsonl +0 -0
- package/templates/scaffold/app/backend/seed/data/Permission.jsonl +0 -0
- package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +20 -0
- package/templates/scaffold/app/backend/seed/data/Role.jsonl +0 -0
- package/templates/scaffold/app/backend/seed/data/Role.schema.ts +20 -0
- package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +0 -0
- package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +24 -0
- package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -0
- package/templates/scaffold/app/backend/seed/data/User.schema.ts +20 -0
- package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +0 -0
- package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +24 -0
- package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -0
- package/templates/scaffold/app/backend/seed/data/_User.schema.ts +30 -0
- package/templates/scaffold/app/backend/seed/exec.mjs +659 -0
- package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +3 -0
- package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +3 -0
- package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +83 -0
- package/templates/scaffold/app/backend/src/modules.ts +9 -0
- package/templates/scaffold/app/backend/src/resolvers/createUser.ts +46 -0
- package/templates/scaffold/app/backend/tailor.config.ts +68 -0
- package/templates/scaffold/app/backend/tailor.d.ts +15 -0
- package/templates/scaffold/app/backend/tsconfig.json +19 -0
- package/templates/scaffold/app/docs/actors/.gitkeep +0 -0
- package/templates/scaffold/app/docs/business-flow/.gitkeep +0 -0
- package/templates/scaffold/app/docs/resolver/.gitkeep +0 -0
- package/templates/scaffold/app/docs/screen/.gitkeep +0 -0
- package/templates/scaffold/app/frontend/.env.example +2 -0
- package/templates/scaffold/app/frontend/__dot__gitignore +3 -0
- package/templates/scaffold/app/frontend/components.json +23 -0
- package/templates/scaffold/app/frontend/eslint.config.js +48 -0
- package/templates/scaffold/app/frontend/index.html +13 -0
- package/templates/scaffold/app/frontend/package.json +53 -0
- package/templates/scaffold/app/frontend/scripts/generate-graphql.mjs +6 -0
- package/templates/scaffold/app/frontend/src/App.tsx +58 -0
- package/templates/scaffold/app/frontend/src/components/composed/empty-state.tsx +26 -0
- package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +28 -0
- package/templates/scaffold/app/frontend/src/components/composed/loading.tsx +13 -0
- package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +39 -0
- package/templates/scaffold/app/frontend/src/components/ui/button.tsx +60 -0
- package/templates/scaffold/app/frontend/src/components/ui/card.tsx +75 -0
- package/templates/scaffold/app/frontend/src/components/ui/form.tsx +152 -0
- package/templates/scaffold/app/frontend/src/components/ui/input.tsx +21 -0
- package/templates/scaffold/app/frontend/src/components/ui/label.tsx +21 -0
- package/templates/scaffold/app/frontend/src/components/ui/spinner.tsx +16 -0
- package/templates/scaffold/app/frontend/src/components/ui/table.tsx +90 -0
- package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +103 -0
- package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1235 -0
- package/templates/scaffold/app/frontend/src/graphql/index.ts +15 -0
- package/templates/scaffold/app/frontend/src/index.css +5 -0
- package/templates/scaffold/app/frontend/src/lib/auth-client.ts +17 -0
- package/templates/scaffold/app/frontend/src/lib/utils.ts +6 -0
- package/templates/scaffold/app/frontend/src/main.tsx +10 -0
- package/templates/scaffold/app/frontend/src/pages/page.tsx +20 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/page.tsx +19 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +97 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +58 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +51 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +101 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +99 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/create/page.tsx +19 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +61 -0
- package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +21 -0
- package/templates/scaffold/app/frontend/tsconfig.app.json +35 -0
- package/templates/scaffold/app/frontend/tsconfig.json +16 -0
- package/templates/scaffold/app/frontend/tsconfig.node.json +23 -0
- package/templates/scaffold/app/frontend/vite.config.ts +23 -0
- package/templates/scaffold/module/command/.gitkeep +0 -0
- package/templates/scaffold/module/db/.gitkeep +0 -0
- package/templates/scaffold/module/executor/.gitkeep +0 -0
- package/templates/scaffold/module/generated/.gitkeep +0 -0
- package/templates/scaffold/module/index.ts +2 -0
- package/templates/scaffold/module/lib/errors.ts +1 -0
- package/templates/scaffold/module/lib/types.ts +4 -0
- package/templates/scaffold/module/module.ts +7 -0
- package/templates/scaffold/module/permissions.ts +3 -0
- package/templates/scaffold/module/query/.gitkeep +0 -0
- package/templates/scaffold/module/tailor.config.ts +13 -0
- package/templates/scaffold/module/testing/fixtures.ts +1 -0
- package/templates/workflows/erp-kit-check.yml +37 -0
- package/dist/cli.js +0 -1654
- package/skills/erp-kit-app-2-breakdown/SKILL.md +0 -88
- package/skills/erp-kit-app-3-doc-review/SKILL.md +0 -112
- package/skills/erp-kit-app-4-impl-spec/SKILL.md +0 -116
- package/skills/erp-kit-app-5-implementation/references/backend.md +0 -232
- package/skills/erp-kit-module-1-docs/SKILL.md +0 -111
- package/skills/erp-kit-module-2-feature-breakdown/SKILL.md +0 -76
- package/skills/erp-kit-module-3-doc-review/SKILL.md +0 -294
- package/skills/erp-kit-module-4-tdd/SKILL.md +0 -94
- package/skills/erp-kit-module-4-tdd/references/exports.md +0 -8
- package/skills/erp-kit-module-5-impl-review/SKILL.md +0 -410
- package/src/commands/scaffold-templates.ts +0 -65
- package/src/modules/shared/index.ts +0 -1
- package/src/modules/user-management/command/logAuditEvent.generated.ts +0 -6
- package/src/modules/user-management/command/logAuditEvent.test.ts +0 -187
- package/src/modules/user-management/command/logAuditEvent.ts +0 -56
- package/src/modules/user-management/db/auditEvent.ts +0 -47
- package/src/modules/user-management/docs/commands/LogAuditEvent.md +0 -37
- package/src/modules/user-management/docs/features/audit-trail.md +0 -80
- package/src/modules/user-management/docs/models/AuditEvent.md +0 -36
- /package/skills/{erp-kit-module-2-feature-breakdown → erp-kit-module-3-plan}/references/naming.md +0 -0
- /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/cross-module-dependency.md +0 -0
- /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/db-relations.md +0 -0
- /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/generated-code.md +0 -0
- /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/models.md +0 -0
- /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/commands.md +0 -0
- /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/testing.md +0 -0
- /package/src/modules/{product-management → audit}/.gitkeep +0 -0
- /package/src/{modules/shared → shared}/createContext.test.ts +0 -0
- /package/src/{modules/shared → shared}/createContext.ts +0 -0
- /package/src/{modules/shared → shared}/definePermissions.test.ts +0 -0
- /package/src/{modules/shared → shared}/definePermissions.ts +0 -0
- /package/src/{modules/shared → shared}/defineQuery.test.ts +0 -0
- /package/src/{modules/shared → shared}/defineQuery.ts +0 -0
- /package/src/{modules/shared → shared}/entityTypes.ts +0 -0
- /package/src/{modules/shared → shared}/errors.ts +0 -0
- /package/src/{modules/shared → shared}/requirePermission.test.ts +0 -0
- /package/src/{modules/shared → shared}/requirePermission.ts +0 -0
- /package/src/{modules/shared → shared}/result.ts +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Command Doc → Command Code Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Command docs: {{COMMAND_DOCS}}
|
|
7
|
+
Command code: {{COMMAND_CODE}}
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
1. Read ALL command docs at the paths above
|
|
12
|
+
2. Read ALL command code files at the paths above
|
|
13
|
+
3. For each command doc, extract business rules, process flow branches, input/output types
|
|
14
|
+
4. For each command code file, extract validation logic, branching paths, input interface, return type
|
|
15
|
+
5. Run every parity check below against each command
|
|
16
|
+
6. Return results as JSON per the Output Format section
|
|
17
|
+
|
|
18
|
+
## Extraction: Command Docs
|
|
19
|
+
|
|
20
|
+
From each command doc, extract:
|
|
21
|
+
|
|
22
|
+
- **Business rules**: numbered validation rules
|
|
23
|
+
- **Process flow**: branches from mermaid flowchart (decision nodes and their paths)
|
|
24
|
+
- **Input fields**: documented input parameters
|
|
25
|
+
- **Output type**: documented return structure
|
|
26
|
+
- **State transitions**: any status changes performed
|
|
27
|
+
|
|
28
|
+
## Extraction: Command Code
|
|
29
|
+
|
|
30
|
+
From each command code file (`command/*.ts`, excluding `*.test.ts` and `*.generated.ts`), extract:
|
|
31
|
+
|
|
32
|
+
- **Validation logic**: if/guard checks that enforce business rules
|
|
33
|
+
- **Branching paths**: if/else, early returns, switch statements
|
|
34
|
+
- **Input interface**: exported `interface ...Input` fields
|
|
35
|
+
- **Return type**: `ok(...)` / `err(...)` structure
|
|
36
|
+
- **Generated shell**: existence of corresponding `.generated.ts` file
|
|
37
|
+
|
|
38
|
+
## Implementation Pattern Reference
|
|
39
|
+
|
|
40
|
+
See [commands.md](commands.md) for the canonical implementation patterns:
|
|
41
|
+
|
|
42
|
+
- `run` function + generated shell pattern
|
|
43
|
+
- Custom fields (generic CF) usage rules
|
|
44
|
+
- State transition `from` parameter pattern
|
|
45
|
+
- Return format conventions
|
|
46
|
+
|
|
47
|
+
## Parity Checks
|
|
48
|
+
|
|
49
|
+
For each command:
|
|
50
|
+
|
|
51
|
+
| Check ID | Question |
|
|
52
|
+
| ----------------------- | ------------------------------------------------------- |
|
|
53
|
+
| business_rule_impl | Is each documented business rule implemented in code? |
|
|
54
|
+
| process_flow_alignment | Do code branches match documented process flow? |
|
|
55
|
+
| input_type_coverage | Does input interface include all documented inputs? |
|
|
56
|
+
| return_type_accuracy | Does return type match documented output? |
|
|
57
|
+
| generated_shell_pattern | Does command export `run` with a `.generated.ts` shell? |
|
|
58
|
+
| input_interface_export | Is the input interface exported? |
|
|
59
|
+
| jsdoc_present | Does the `run` function have a JSDoc comment? |
|
|
60
|
+
|
|
61
|
+
### How to Check
|
|
62
|
+
|
|
63
|
+
1. List all business rules from command doc
|
|
64
|
+
2. Find corresponding validation/guard in command code
|
|
65
|
+
3. Trace each process flow branch to a code path
|
|
66
|
+
4. Compare input interface fields with doc input fields
|
|
67
|
+
5. Verify `.generated.ts` file exists and imports `run`
|
|
68
|
+
6. Check return type wraps result in object (`{ entity }`)
|
|
69
|
+
|
|
70
|
+
## Common Gap Patterns
|
|
71
|
+
|
|
72
|
+
- **Unimplemented business rules**: Rule in doc but no validation code
|
|
73
|
+
- **Missing process branches**: Flowchart branch not in code logic
|
|
74
|
+
- **Missing generated shell**: No `.generated.ts` file for command
|
|
75
|
+
- **Input mismatch**: Doc input fields not in interface
|
|
76
|
+
- **Return format mismatch**: Code returns raw entity instead of `{ entity }`
|
|
77
|
+
|
|
78
|
+
## Output Format
|
|
79
|
+
|
|
80
|
+
Return a JSON object:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"check_type": "command-doc-code-parity",
|
|
85
|
+
"module": "{{MODULE_NAME}}",
|
|
86
|
+
"gaps": [...],
|
|
87
|
+
"inconsistencies": [...],
|
|
88
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Command Doc → Test Coverage Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Command docs: {{COMMAND_DOCS}}
|
|
7
|
+
Test code: {{TEST_CODE}}
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
1. Read ALL command docs at the paths above
|
|
12
|
+
2. Read ALL test code files at the paths above
|
|
13
|
+
3. For each command doc, extract process flow branches, error scenarios, and idempotent paths
|
|
14
|
+
4. For each test file, extract test case descriptions and assertions
|
|
15
|
+
5. Run every parity check below against each command
|
|
16
|
+
6. Return results as JSON per the Output Format section
|
|
17
|
+
|
|
18
|
+
## Extraction: Command Docs
|
|
19
|
+
|
|
20
|
+
From each command doc, extract:
|
|
21
|
+
|
|
22
|
+
### Process Flow Branches
|
|
23
|
+
|
|
24
|
+
From the mermaid flowchart, identify each decision node and its outcomes:
|
|
25
|
+
|
|
26
|
+
- Decision: "Entity exists?" → Yes path, No path
|
|
27
|
+
- Decision: "Status valid?" → Valid path, Invalid path
|
|
28
|
+
- Each terminal node = one expected test case
|
|
29
|
+
|
|
30
|
+
### Error Scenarios
|
|
31
|
+
|
|
32
|
+
From the Error Scenarios table:
|
|
33
|
+
|
|
34
|
+
- Error code + condition = one expected error test case
|
|
35
|
+
|
|
36
|
+
### Idempotent Paths
|
|
37
|
+
|
|
38
|
+
From the process flow, identify "already exists → return existing" patterns:
|
|
39
|
+
|
|
40
|
+
- These need explicit test cases
|
|
41
|
+
|
|
42
|
+
## Extraction: Test Code
|
|
43
|
+
|
|
44
|
+
From each test file (`command/*.test.ts`), extract:
|
|
45
|
+
|
|
46
|
+
- **Test descriptions**: `it("...")` or `test("...")` strings
|
|
47
|
+
- **Error assertions**: checks for specific error types/codes
|
|
48
|
+
- **Happy path tests**: tests that verify successful outcomes
|
|
49
|
+
- **Fixture usage**: which fixtures are used
|
|
50
|
+
|
|
51
|
+
See [testing.md](testing.md) for canonical testing patterns.
|
|
52
|
+
|
|
53
|
+
## Parity Checks
|
|
54
|
+
|
|
55
|
+
For each command:
|
|
56
|
+
|
|
57
|
+
| Check ID | Question |
|
|
58
|
+
| --------------------- | ---------------------------------------------------------- |
|
|
59
|
+
| process_flow_coverage | Does each branch in process flow have a test case? |
|
|
60
|
+
| error_scenario_tests | Does each documented error scenario have a test assertion? |
|
|
61
|
+
| happy_path_tests | Are success paths tested? |
|
|
62
|
+
| idempotent_path_tests | If doc shows "already exists → return", is this tested? |
|
|
63
|
+
|
|
64
|
+
### How to Check
|
|
65
|
+
|
|
66
|
+
1. Count process flow branches from command doc flowchart
|
|
67
|
+
2. Count test cases in corresponding test file
|
|
68
|
+
3. Map each branch to a test case by description/assertion
|
|
69
|
+
4. Identify any branches without corresponding tests
|
|
70
|
+
|
|
71
|
+
## Common Gap Patterns
|
|
72
|
+
|
|
73
|
+
- **Uncovered process branches**: Flowchart branch has no test
|
|
74
|
+
- **Missing error tests**: Error scenario has no assertion
|
|
75
|
+
- **Missing idempotent tests**: "Return existing" path untested
|
|
76
|
+
- **Missing edge cases**: Boundary conditions not tested
|
|
77
|
+
- **Test without doc branch**: Test exists but doesn't map to documented flow (potential doc gap)
|
|
78
|
+
|
|
79
|
+
## Output Format
|
|
80
|
+
|
|
81
|
+
Return a JSON object:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"check_type": "command-doc-test-parity",
|
|
86
|
+
"module": "{{MODULE_NAME}}",
|
|
87
|
+
"gaps": [...],
|
|
88
|
+
"inconsistencies": [...],
|
|
89
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Error Implementation Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Command docs: {{COMMAND_DOCS}}
|
|
7
|
+
Error definitions: {{ERROR_DEFS}}
|
|
8
|
+
Command code: {{COMMAND_CODE}}
|
|
9
|
+
Test code: {{TEST_CODE}}
|
|
10
|
+
|
|
11
|
+
## Instructions
|
|
12
|
+
|
|
13
|
+
1. Read ALL command docs at the paths above
|
|
14
|
+
2. Read the error definitions file at the path above
|
|
15
|
+
3. Read ALL command code files at the paths above
|
|
16
|
+
4. Read ALL test code files at the paths above
|
|
17
|
+
5. For each documented error scenario, trace through generated class → command return → test assertion
|
|
18
|
+
6. Run every parity check below
|
|
19
|
+
7. Return results as JSON per the Output Format section
|
|
20
|
+
|
|
21
|
+
## Extraction: Command Docs
|
|
22
|
+
|
|
23
|
+
From each command doc's Error Scenarios section, extract:
|
|
24
|
+
|
|
25
|
+
- **Error code**: e.g. `ENTITY_NOT_FOUND`
|
|
26
|
+
- **Condition**: when this error is returned
|
|
27
|
+
- **Expected class name**: derived from error code (PascalCase + `Error` suffix)
|
|
28
|
+
|
|
29
|
+
## Extraction: Error Definitions
|
|
30
|
+
|
|
31
|
+
From `lib/errors.generated.ts`, extract:
|
|
32
|
+
|
|
33
|
+
- **Error class names**: exported error classes
|
|
34
|
+
- **Error codes**: the code constant in each class
|
|
35
|
+
- **Error message patterns**: message templates
|
|
36
|
+
|
|
37
|
+
See [errors.md](errors.md) for error generation patterns.
|
|
38
|
+
|
|
39
|
+
## Extraction: Command Code
|
|
40
|
+
|
|
41
|
+
From each command file (`command/*.ts`, excluding `*.test.ts` and `*.generated.ts`), extract:
|
|
42
|
+
|
|
43
|
+
- **Error imports**: which error classes are imported from `../lib/errors.generated`
|
|
44
|
+
- **Error returns**: `return err(new XError(...))` statements
|
|
45
|
+
- **Error codes used**: which error codes appear in the code
|
|
46
|
+
|
|
47
|
+
## Extraction: Test Code
|
|
48
|
+
|
|
49
|
+
From each test file (`command/*.test.ts`), extract:
|
|
50
|
+
|
|
51
|
+
- **Error assertions**: tests that check for specific error types or codes
|
|
52
|
+
- **Error test descriptions**: test names that reference error scenarios
|
|
53
|
+
|
|
54
|
+
## Parity Checks
|
|
55
|
+
|
|
56
|
+
For each error scenario documented in command docs:
|
|
57
|
+
|
|
58
|
+
| Check ID | Question |
|
|
59
|
+
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
60
|
+
| error_class_generated | Does the error class exist in `errors.generated.ts`? |
|
|
61
|
+
| error_code_accuracy | Does the generated error code equal `{MODULE_PREFIX}_{DOC_CODE}`? The generator prefixes doc codes with the module name in UPPER_SNAKE_CASE. |
|
|
62
|
+
| error_returned | Does the command code return this error via `err(new XError(...))`? |
|
|
63
|
+
| error_import | Does the command code import the error class from `errors.generated`? |
|
|
64
|
+
| error_test_exists | Does a test case assert this error scenario? |
|
|
65
|
+
|
|
66
|
+
### How to Check
|
|
67
|
+
|
|
68
|
+
1. List all error codes from command docs
|
|
69
|
+
2. Verify each has a generated class in `errors.generated.ts`
|
|
70
|
+
3. Check command code imports and returns the error
|
|
71
|
+
4. Check test file has an assertion for this error
|
|
72
|
+
|
|
73
|
+
## Common Gap Patterns
|
|
74
|
+
|
|
75
|
+
- **Missing error class**: Error code in doc but no generated class (re-run `erp-kit module generate code`)
|
|
76
|
+
- **Error not returned**: Generated class exists but command code doesn't return it
|
|
77
|
+
- **Error not imported**: Command uses inline error instead of generated class
|
|
78
|
+
- **Missing error test**: Error is returned in code but no test asserts it
|
|
79
|
+
- **Error code mismatch**: Doc code differs from generated/code code
|
|
80
|
+
|
|
81
|
+
## Output Format
|
|
82
|
+
|
|
83
|
+
Return a JSON object:
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"check_type": "error-implementation-parity",
|
|
88
|
+
"module": "{{MODULE_NAME}}",
|
|
89
|
+
"gaps": [...],
|
|
90
|
+
"inconsistencies": [...],
|
|
91
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
|
package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/errors.md
RENAMED
|
@@ -6,5 +6,5 @@ Errors are **generated** from command/query documentation into `lib/errors.gener
|
|
|
6
6
|
|
|
7
7
|
- Every error code in `docs/commands/*.md` has a corresponding class in `lib/errors.generated.ts`
|
|
8
8
|
- Command implementations import errors from `../lib/errors.generated`
|
|
9
|
-
-
|
|
9
|
+
- Generated error codes are prefixed with the module name (e.g., doc code `UNIT_NOT_FOUND` becomes `PRIMITIVES_UNIT_NOT_FOUND`)
|
|
10
10
|
- If errors are missing, re-run `erp-kit module generate code`
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Implementation Parity Report Format
|
|
2
|
+
|
|
3
|
+
All implementation parity check agents return results in this JSON structure.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"check_type": "<one of: model-doc-code-parity, command-doc-code-parity, error-implementation-parity, command-doc-test-parity>",
|
|
10
|
+
"module": "<module-name>",
|
|
11
|
+
"gaps": [
|
|
12
|
+
{
|
|
13
|
+
"source": "<source doc or code path>",
|
|
14
|
+
"target": "<target code or doc path, or 'missing'>",
|
|
15
|
+
"check": "<check_id from the agent's parity checks table>",
|
|
16
|
+
"status": "pass | fail | skip",
|
|
17
|
+
"detail": "<human-readable description of the finding>"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"inconsistencies": [
|
|
21
|
+
{
|
|
22
|
+
"type": "<inconsistency type, e.g. type_mismatch, missing_description>",
|
|
23
|
+
"location": "<source vs target description>",
|
|
24
|
+
"detail": "<human-readable description>"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"summary": {
|
|
28
|
+
"total_checks": 0,
|
|
29
|
+
"passed": 0,
|
|
30
|
+
"failed": 0,
|
|
31
|
+
"skipped": 0
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Field Reference
|
|
37
|
+
|
|
38
|
+
### gaps[]
|
|
39
|
+
|
|
40
|
+
One entry per parity check performed. `status` is:
|
|
41
|
+
|
|
42
|
+
- `pass`: doc and code are consistent
|
|
43
|
+
- `fail`: gap or mismatch found
|
|
44
|
+
- `skip`: target code/doc missing or empty, check could not run
|
|
45
|
+
|
|
46
|
+
### inconsistencies[]
|
|
47
|
+
|
|
48
|
+
Cross-cutting issues found during the check that don't fit a single gap entry (e.g., type mismatches, naming violations, missing descriptions across multiple files).
|
|
49
|
+
|
|
50
|
+
### summary
|
|
51
|
+
|
|
52
|
+
Aggregate counts. `total_checks = passed + failed + skipped`.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Model Doc → Model Code Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Model docs: {{MODEL_DOCS}}
|
|
7
|
+
Model code: {{MODEL_CODE}}
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
1. Read ALL model docs at the paths above
|
|
12
|
+
2. Read ALL model code files at the paths above
|
|
13
|
+
3. For each model doc, extract fields, types, required/optional, relationships, state transitions, and descriptions
|
|
14
|
+
4. For each model code file, extract `createEntityType()` fields, status enums, foreign keys, and `.description()` calls
|
|
15
|
+
5. Run every parity check below against each model
|
|
16
|
+
6. Return results as JSON per the Output Format section
|
|
17
|
+
|
|
18
|
+
## Extraction: Model Docs
|
|
19
|
+
|
|
20
|
+
From each model doc, extract:
|
|
21
|
+
|
|
22
|
+
- **Fields**: name, type, required vs optional
|
|
23
|
+
- **Relationships**: foreign key fields and their target entities
|
|
24
|
+
- **State transitions**: status enum values from state diagrams
|
|
25
|
+
- **Constraints**: uniqueness, validation rules
|
|
26
|
+
- **Descriptions**: field-level descriptions
|
|
27
|
+
|
|
28
|
+
## Extraction: Model Code
|
|
29
|
+
|
|
30
|
+
From each model code file (`db/*.ts`), extract:
|
|
31
|
+
|
|
32
|
+
- **Fields**: in `createEntityType()` or equivalent
|
|
33
|
+
- **Status enums**: base statuses + additional statuses
|
|
34
|
+
- **Foreign keys**: references to other entity types
|
|
35
|
+
- **Descriptions**: `.description()` calls on fields
|
|
36
|
+
|
|
37
|
+
## Parity Checks
|
|
38
|
+
|
|
39
|
+
For each model:
|
|
40
|
+
|
|
41
|
+
| Check ID | Question |
|
|
42
|
+
| ------------------ | ---------------------------------------------------------------- |
|
|
43
|
+
| field_coverage | Does code include all fields from model doc? |
|
|
44
|
+
| type_accuracy | Do field types in code match doc specification? |
|
|
45
|
+
| required_fields | Are required fields enforced (no default, not nullable)? |
|
|
46
|
+
| relationship_impl | Are foreign key fields implemented for documented relationships? |
|
|
47
|
+
| state_transitions | Does status enum include all documented states? |
|
|
48
|
+
| field_descriptions | Do `.description()` calls match doc field descriptions? |
|
|
49
|
+
|
|
50
|
+
### How to Check
|
|
51
|
+
|
|
52
|
+
1. List all fields from model doc
|
|
53
|
+
2. Find corresponding field in `createEntityType()` code
|
|
54
|
+
3. Compare type, required/optional, description
|
|
55
|
+
4. Check status enum values against state diagram
|
|
56
|
+
5. Verify foreign key fields exist for all documented relationships
|
|
57
|
+
|
|
58
|
+
## Common Gap Patterns
|
|
59
|
+
|
|
60
|
+
- **Missing fields**: Doc specifies field but not in code
|
|
61
|
+
- **Type mismatches**: Doc says string, code uses number
|
|
62
|
+
- **Missing status values**: State diagram shows state not in enum
|
|
63
|
+
- **Missing relationships**: Doc shows FK but not implemented
|
|
64
|
+
- **Missing descriptions**: Doc has field description but no `.description()`
|
|
65
|
+
|
|
66
|
+
## Output Format
|
|
67
|
+
|
|
68
|
+
Return a JSON object:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"check_type": "model-doc-code-parity",
|
|
73
|
+
"module": "{{MODULE_NAME}}",
|
|
74
|
+
"gaps": [...],
|
|
75
|
+
"inconsistencies": [...],
|
|
76
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: erp-kit-module-shared
|
|
3
|
-
description: Shared references for erp-kit module skills. Not invoked directly — referenced by erp-kit-module-1 through erp-kit-module-
|
|
3
|
+
description: Shared references for erp-kit module skills. Not invoked directly — referenced by erp-kit-module-1 through erp-kit-module-6.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# erp-kit-module-shared
|
|
@@ -177,7 +177,7 @@ const units = await db
|
|
|
177
177
|
|
|
178
178
|
## Implementation Considerations
|
|
179
179
|
|
|
180
|
-
- **Error handling**: Use `ok()` / `err()` from `shared
|
|
180
|
+
- **Error handling**: Use `ok()` / `err()` from `shared` — do not throw
|
|
181
181
|
- **Validation**: Check referenced entities exist before operating, return `err()` if not found
|
|
182
182
|
|
|
183
183
|
## Conventions
|
|
@@ -10,25 +10,28 @@ Errors are **generated** from command/query documentation. Do not write `lib/err
|
|
|
10
10
|
|
|
11
11
|
## Naming convention (in docs)
|
|
12
12
|
|
|
13
|
-
- Error code: `SCREAMING_SNAKE_CASE` (e.g., `DUPLICATE_SKU`)
|
|
13
|
+
- Error code in docs: `SCREAMING_SNAKE_CASE` (e.g., `DUPLICATE_SKU`)
|
|
14
14
|
- Generated class name: PascalCase + `Error` suffix (e.g., `DuplicateSkuError`)
|
|
15
|
+
- Generated error code string: `{MODULE_PREFIX}_{DOC_CODE}` (e.g., `ITEM_MANAGEMENT_DUPLICATE_SKU`)
|
|
15
16
|
- Generated via `createDomainError()` with contextual message
|
|
16
17
|
|
|
18
|
+
The generator automatically prefixes error codes with the module name in `UPPER_SNAKE_CASE` to ensure uniqueness across modules. You only write the short code in docs; the prefix is added at generation time.
|
|
19
|
+
|
|
17
20
|
## Error category naming rules
|
|
18
21
|
|
|
19
22
|
Use the **entity name** (not business-domain abbreviations) in error codes. Codes should be self-describing and consistent across modules.
|
|
20
23
|
|
|
21
|
-
| Category | Pattern |
|
|
22
|
-
| ----------------- | --------------------------------------- |
|
|
23
|
-
| Not found | `{ENTITY}_NOT_FOUND` | `UNIT_NOT_FOUND
|
|
24
|
-
| Duplicate | `DUPLICATE_{FIELD}` | `DUPLICATE_SKU
|
|
25
|
-
| Inactive / locked | `{FIELD}_LOCKED` or `{ENTITY}_INACTIVE` | `UOM_LOCKED`
|
|
26
|
-
| Invalid state | `INVALID_{WHAT}` | `INVALID_STATE_TRANSITION`
|
|
27
|
-
| No-op | `NO_FIELDS_TO_UPDATE` | `NO_FIELDS_TO_UPDATE`
|
|
24
|
+
| Category | Pattern | Doc example | Generated code example |
|
|
25
|
+
| ----------------- | --------------------------------------- | -------------------------- | ------------------------------------------ |
|
|
26
|
+
| Not found | `{ENTITY}_NOT_FOUND` | `UNIT_NOT_FOUND` | `PRIMITIVES_UNIT_NOT_FOUND` |
|
|
27
|
+
| Duplicate | `DUPLICATE_{FIELD}` | `DUPLICATE_SKU` | `ITEM_MANAGEMENT_DUPLICATE_SKU` |
|
|
28
|
+
| Inactive / locked | `{FIELD}_LOCKED` or `{ENTITY}_INACTIVE` | `UOM_LOCKED` | `PRODUCT_MANAGEMENT_UOM_LOCKED` |
|
|
29
|
+
| Invalid state | `INVALID_{WHAT}` | `INVALID_STATE_TRANSITION` | `USER_MANAGEMENT_INVALID_STATE_TRANSITION` |
|
|
30
|
+
| No-op | `NO_FIELDS_TO_UPDATE` | `NO_FIELDS_TO_UPDATE` | `PRODUCT_MANAGEMENT_NO_FIELDS_TO_UPDATE` |
|
|
28
31
|
|
|
29
32
|
### Cross-module foreign key errors
|
|
30
33
|
|
|
31
|
-
When a command validates an entity from another module (e.g., item-management checking that a Unit from primitives exists), use `{ENTITY}_NOT_FOUND` — the same pattern as same-module not-found errors.
|
|
34
|
+
When a command validates an entity from another module (e.g., item-management checking that a Unit from primitives exists), use `{ENTITY}_NOT_FOUND` — the same pattern as same-module not-found errors. Each module gets its own prefixed code (e.g., both `PRIMITIVES_UNIT_NOT_FOUND` and `ITEM_MANAGEMENT_UNIT_NOT_FOUND` can coexist).
|
|
32
35
|
|
|
33
36
|
### Idempotent error policy
|
|
34
37
|
|