@tailor-platform/erp-kit 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +154 -80
- package/dist/cli.mjs +1742 -0
- package/package.json +16 -14
- 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 +22 -11
- package/skills/erp-kit-app-2-requirements-review/SKILL.md +103 -0
- package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +71 -0
- package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +74 -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 +154 -0
- package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +89 -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 +168 -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-impl-backend/SKILL.md +98 -0
- 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-app-shared/SKILL.md +15 -0
- package/skills/erp-kit-app-shared/references/link-format-reference.md +13 -0
- package/skills/erp-kit-app-shared/references/naming-conventions.md +21 -0
- package/skills/erp-kit-app-shared/references/resolver-classification.md +23 -0
- package/skills/erp-kit-app-shared/references/schema-constraints.md +25 -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-2-feature-breakdown → erp-kit-module-3-plan}/references/naming.md +15 -1
- 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 +120 -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-4-tdd → erp-kit-module-5-impl}/references/generated-code.md +2 -2
- 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 +2 -2
- 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 +13 -10
- package/skills/erp-kit-module-shared/references/queries.md +110 -37
- package/skills/erp-kit-module-shared/references/structure.md +1 -1
- package/skills/erp-kit-module-shared/references/testing.md +10 -0
- package/skills/erp-kit-update/SKILL.md +4 -4
- package/src/app.ts +1 -1
- package/src/commands/app/index.ts +57 -24
- package/src/commands/check.ts +1 -1
- package/src/commands/generate-doc.test.ts +63 -0
- package/src/commands/generate-doc.ts +98 -0
- package/src/commands/index.ts +16 -5
- package/src/commands/init-module.test.ts +43 -0
- package/src/commands/init-module.ts +74 -0
- 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/module/generate.ts +33 -13
- package/src/commands/module/index.ts +18 -28
- package/src/commands/parse-doc-test-cases.ts +55 -0
- 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-boilerplate.test.ts +142 -0
- package/src/generator/generate-code.test.ts +47 -12
- package/src/generator/generate-code.ts +123 -20
- package/src/integration.test.ts +3 -3
- 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/SKILL.md +0 -149
- 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/commands/scaffold.test.ts +0 -171
- package/src/commands/scaffold.ts +0 -140
- 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-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/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,47 @@
|
|
|
1
|
+
# Feature → Model Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Feature docs: {{FEATURE_DOCS}}
|
|
7
|
+
Model docs: {{MODEL_DOCS}}
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
1. Read ALL feature docs at the paths above
|
|
12
|
+
2. Read ALL model docs at the paths above
|
|
13
|
+
3. For each feature, identify referenced entities and state transitions
|
|
14
|
+
4. Run every parity check below
|
|
15
|
+
5. Return results as JSON per the Output Format section
|
|
16
|
+
|
|
17
|
+
## Parity Checks
|
|
18
|
+
|
|
19
|
+
For each entity mentioned in feature:
|
|
20
|
+
|
|
21
|
+
| Check ID | Question |
|
|
22
|
+
| ---------------- | ------------------------------------------------------------------ |
|
|
23
|
+
| model_existence | Does a model doc exist for entities mentioned in feature? |
|
|
24
|
+
| state_management | Do feature state transitions match model state transitions? |
|
|
25
|
+
| relationships | Are relationships shown in feature defined in model relationships? |
|
|
26
|
+
|
|
27
|
+
## Common Gap Patterns
|
|
28
|
+
|
|
29
|
+
- **Missing models**: Feature references entity with no model doc
|
|
30
|
+
- **State mismatch**: Feature shows states not in model's state diagram
|
|
31
|
+
- **Relationship gaps**: Feature implies relationship not in model doc
|
|
32
|
+
|
|
33
|
+
## Output Format
|
|
34
|
+
|
|
35
|
+
Return a JSON object:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"check_type": "feature-model-parity",
|
|
40
|
+
"module": "{{MODULE_NAME}}",
|
|
41
|
+
"gaps": [...],
|
|
42
|
+
"inconsistencies": [...],
|
|
43
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
See [parity-report-format.md](parity-report-format.md) for field definitions.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Feature → Query Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Feature docs: {{FEATURE_DOCS}}
|
|
7
|
+
Query docs: {{QUERY_DOCS}}
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
1. Read ALL feature docs at the paths above
|
|
12
|
+
2. Read ALL query docs at the paths above
|
|
13
|
+
3. For each feature, identify read-only operations
|
|
14
|
+
4. Run every parity check below
|
|
15
|
+
5. Return results as JSON per the Output Format section
|
|
16
|
+
|
|
17
|
+
## Extraction: Read Operations
|
|
18
|
+
|
|
19
|
+
Identify read-only operations in each feature:
|
|
20
|
+
|
|
21
|
+
- "look up", "get", "list", "convert", "calculate"
|
|
22
|
+
- Any data retrieval that doesn't modify state
|
|
23
|
+
|
|
24
|
+
## Expected Query Docs for Feature
|
|
25
|
+
|
|
26
|
+
| Feature Operation | Expected Query Doc |
|
|
27
|
+
| ----------------- | ------------------- |
|
|
28
|
+
| "Get X" | GetX |
|
|
29
|
+
| "Look up X by Y" | GetX (with Y input) |
|
|
30
|
+
| "List X by Y" | ListXsByY |
|
|
31
|
+
| "Convert X" | ConvertX |
|
|
32
|
+
| "Calculate X" | CalculateX |
|
|
33
|
+
|
|
34
|
+
## Parity Checks
|
|
35
|
+
|
|
36
|
+
For each read operation implied by the feature:
|
|
37
|
+
|
|
38
|
+
| Check ID | Question |
|
|
39
|
+
| --------------- | --------------------------------------------------------------------- |
|
|
40
|
+
| query_existence | Does a query doc exist for lookups, conversions, or aggregations? |
|
|
41
|
+
| input_coverage | Are all lookup dimensions documented (by id, by unique field, by FK)? |
|
|
42
|
+
| error_handling | Are error scenarios for missing data documented? |
|
|
43
|
+
|
|
44
|
+
### How to Check
|
|
45
|
+
|
|
46
|
+
1. Identify read-only operations in the feature
|
|
47
|
+
2. Verify corresponding query doc exists in `docs/queries/`
|
|
48
|
+
3. Check that query docs have error scenarios where applicable
|
|
49
|
+
|
|
50
|
+
## Common Gap Patterns
|
|
51
|
+
|
|
52
|
+
- **Missing query docs**: Feature implies read operation but no query doc exists
|
|
53
|
+
- **Missing conversions**: Feature mentions unit/currency conversion but no query doc
|
|
54
|
+
- **Missing lookups**: Feature requires data retrieval not covered by a query doc
|
|
55
|
+
|
|
56
|
+
## Output Format
|
|
57
|
+
|
|
58
|
+
Return a JSON object:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"check_type": "feature-query-parity",
|
|
63
|
+
"module": "{{MODULE_NAME}}",
|
|
64
|
+
"gaps": [...],
|
|
65
|
+
"inconsistencies": [...],
|
|
66
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
See [parity-report-format.md](parity-report-format.md) for field definitions.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Parity Report Format
|
|
2
|
+
|
|
3
|
+
All parity check agents return results in this JSON structure.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"check_type": "<one of: feature-command-parity, feature-query-parity, feature-model-parity, command-model-consistency>",
|
|
10
|
+
"module": "<module-name>",
|
|
11
|
+
"gaps": [
|
|
12
|
+
{
|
|
13
|
+
"source": "<source doc path>",
|
|
14
|
+
"target": "<target 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. state_transition_mismatch>",
|
|
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`: source and target are consistent
|
|
43
|
+
- `fail`: gap or mismatch found
|
|
44
|
+
- `skip`: target docs 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., naming violations, state mismatches across multiple docs).
|
|
49
|
+
|
|
50
|
+
### summary
|
|
51
|
+
|
|
52
|
+
Aggregate counts. `total_checks = passed + failed + skipped`.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: erp-kit-module-5-impl
|
|
3
|
+
description: Implement features in modules using TDD. Use after plan review (step 4) to implement database models, commands, and queries with test-driven development.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# TDD Implementation for Module Development
|
|
7
|
+
|
|
8
|
+
Implement features in modules using Test-Driven Development with per-item agent delegation.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- Implementing new domain commands in any module
|
|
13
|
+
- Implementing read-only queries in any module
|
|
14
|
+
- Adding database models with `@tailor-platform/sdk`
|
|
15
|
+
- Creating tests with `@tailor-platform/erp-kit` testing utilities
|
|
16
|
+
|
|
17
|
+
## Workflow
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
SETUP → GENERATE → DB MODELS (agents) → COMMANDS (agents) → QUERIES (agents) → EXPORT → VERIFY
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Step 1: Setup
|
|
24
|
+
|
|
25
|
+
Define shared context:
|
|
26
|
+
|
|
27
|
+
- `MODULES_ROOT`: glob `**/modules/*/README.md` and derive the parent directory
|
|
28
|
+
- `MODULE_NAME`: from argument or detect from current working directory
|
|
29
|
+
- `MODEL_DOCS`: glob `<MODULES_ROOT>/<MODULE_NAME>/docs/models/*.md`
|
|
30
|
+
- `COMMAND_DOCS`: glob `<MODULES_ROOT>/<MODULE_NAME>/docs/commands/*.md`
|
|
31
|
+
- `QUERY_DOCS`: glob `<MODULES_ROOT>/<MODULE_NAME>/docs/queries/*.md`
|
|
32
|
+
|
|
33
|
+
Verify at least one doc type exists. If none, stop with: "No docs found for module <MODULE_NAME>. Run steps 1-4 first."
|
|
34
|
+
|
|
35
|
+
## Step 2: Generate Code from Docs
|
|
36
|
+
|
|
37
|
+
Run generation first to create `.generated.ts` files (error classes, permission definitions, command/query shells) before implementing any code:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
erp-kit module generate code -p <MODULES_ROOT>/<module>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Never edit these generated files.
|
|
44
|
+
|
|
45
|
+
## Step 3: DB Models — Agent per model
|
|
46
|
+
|
|
47
|
+
**Read [models rules](references/models.md) and [db-relations rules](references/db-relations.md) before dispatching.**
|
|
48
|
+
|
|
49
|
+
For each model doc in `MODEL_DOCS`, launch an Agent:
|
|
50
|
+
|
|
51
|
+
| Agent per model | Prompt Template | Inputs |
|
|
52
|
+
| --------------- | ---------------------------------------------------- | ---------------------------------- |
|
|
53
|
+
| N | [references/model-impl.md](references/model-impl.md) | MODULE_NAME, single MODEL_DOC path |
|
|
54
|
+
|
|
55
|
+
Parallelize across models when they have no cross-dependencies.
|
|
56
|
+
For models with foreign key dependencies, implement the referenced model first.
|
|
57
|
+
|
|
58
|
+
After all model agents complete, run:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
pnpm generate
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Step 4: Commands — Agent per command
|
|
65
|
+
|
|
66
|
+
**Read [commands rules](../erp-kit-module-shared/references/commands.md) and [testing rules](../erp-kit-module-shared/references/testing.md) before dispatching.**
|
|
67
|
+
|
|
68
|
+
For each command doc in `COMMAND_DOCS`, launch an Agent:
|
|
69
|
+
|
|
70
|
+
| Agent per command | Prompt Template | Inputs |
|
|
71
|
+
| ----------------- | -------------------------------------------------------- | ------------------------------------ |
|
|
72
|
+
| N | [references/command-impl.md](references/command-impl.md) | MODULE_NAME, single COMMAND_DOC path |
|
|
73
|
+
|
|
74
|
+
Each agent implements:
|
|
75
|
+
|
|
76
|
+
1. Test fixtures in `testing/fixtures.ts` (if not already created)
|
|
77
|
+
2. Tests in `command/<name>.test.ts`
|
|
78
|
+
3. Implementation in `command/<name>.ts` (export `run` function)
|
|
79
|
+
|
|
80
|
+
Parallelize across commands when they have no shared fixture dependencies.
|
|
81
|
+
|
|
82
|
+
## Step 5: Queries — Agent per query
|
|
83
|
+
|
|
84
|
+
**Read [queries rules](../erp-kit-module-shared/references/queries.md) before dispatching.**
|
|
85
|
+
|
|
86
|
+
For each query doc in `QUERY_DOCS`, launch an Agent:
|
|
87
|
+
|
|
88
|
+
| Agent per query | Prompt Template | Inputs |
|
|
89
|
+
| --------------- | ---------------------------------------------------- | ---------------------------------- |
|
|
90
|
+
| N | [references/query-impl.md](references/query-impl.md) | MODULE_NAME, single QUERY_DOC path |
|
|
91
|
+
|
|
92
|
+
Each agent implements the query in `query/<name>.ts`.
|
|
93
|
+
Parallelize across all queries.
|
|
94
|
+
|
|
95
|
+
## Step 6: Export
|
|
96
|
+
|
|
97
|
+
**Read [exports rules](references/exports.md) for export order.**
|
|
98
|
+
|
|
99
|
+
Update `index.ts` with all new exports.
|
|
100
|
+
|
|
101
|
+
## Step 7: Verify
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
pnpm generate # Regenerate types if models changed
|
|
105
|
+
pnpm lint # Check code style
|
|
106
|
+
pnpm typecheck # Verify TypeScript types
|
|
107
|
+
pnpm test # Run all tests
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## References
|
|
111
|
+
|
|
112
|
+
- [Module structure](../erp-kit-module-shared/references/structure.md)
|
|
113
|
+
- [Model patterns](references/models.md)
|
|
114
|
+
- [Database relations](references/db-relations.md)
|
|
115
|
+
- [Cross-module dependencies](references/cross-module-dependency.md)
|
|
116
|
+
- [Command patterns](../erp-kit-module-shared/references/commands.md)
|
|
117
|
+
- [Query patterns](../erp-kit-module-shared/references/queries.md)
|
|
118
|
+
- [Generated code](references/generated-code.md)
|
|
119
|
+
- [Testing patterns](../erp-kit-module-shared/references/testing.md)
|
|
120
|
+
- [Export order](references/exports.md)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Command Implementation
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Command doc: {{COMMAND_DOC}}
|
|
7
|
+
|
|
8
|
+
## Instructions
|
|
9
|
+
|
|
10
|
+
Implement a command with tests using TDD.
|
|
11
|
+
|
|
12
|
+
1. Read the command doc at the path above
|
|
13
|
+
2. Read the generated shell at `{{MODULES_ROOT}}/{{MODULE_NAME}}/command/<name>.generated.ts`
|
|
14
|
+
3. Read existing commands in `{{MODULES_ROOT}}/{{MODULE_NAME}}/command/` for patterns
|
|
15
|
+
4. Implement in this order: fixtures → tests → implementation
|
|
16
|
+
|
|
17
|
+
## Implementation Rules
|
|
18
|
+
|
|
19
|
+
**Read these references before implementing:**
|
|
20
|
+
|
|
21
|
+
- [Command patterns](../../erp-kit-module-shared/references/commands.md) — run function, custom fields, CQRS
|
|
22
|
+
- [Testing patterns](../../erp-kit-module-shared/references/testing.md) — mock DB, fixtures, test structure
|
|
23
|
+
|
|
24
|
+
### Step 1: Test Fixtures
|
|
25
|
+
|
|
26
|
+
Add fixtures to `{{MODULES_ROOT}}/{{MODULE_NAME}}/testing/fixtures.ts`:
|
|
27
|
+
|
|
28
|
+
- Use fixed IDs: `"entity-1"`, `"entity-2"`
|
|
29
|
+
- Create minimal valid entities for the command under test
|
|
30
|
+
- Include fixtures for related entities if needed
|
|
31
|
+
|
|
32
|
+
### Step 2: Write Tests
|
|
33
|
+
|
|
34
|
+
Create `{{MODULES_ROOT}}/{{MODULE_NAME}}/command/<name>.test.ts`:
|
|
35
|
+
|
|
36
|
+
- Test every process flow branch from the doc
|
|
37
|
+
- Test every error scenario from the doc
|
|
38
|
+
- Test idempotent paths if applicable
|
|
39
|
+
- Use `createMockDb<DB>()` for mock database
|
|
40
|
+
- Assert on result type (ok/err) and values
|
|
41
|
+
|
|
42
|
+
### Step 3: Implement
|
|
43
|
+
|
|
44
|
+
Create `{{MODULES_ROOT}}/{{MODULE_NAME}}/command/<name>.ts`:
|
|
45
|
+
|
|
46
|
+
- Export a `run` function
|
|
47
|
+
- Generated shell wraps with `defineCommand(permissions.xxx, run)`
|
|
48
|
+
- Pattern: validate → query → mutate
|
|
49
|
+
- Generic `CF` for custom fields support
|
|
50
|
+
- Use `from` parameter for state transition commands
|
|
51
|
+
|
|
52
|
+
### From Doc to Code
|
|
53
|
+
|
|
54
|
+
| Doc Element | Code Element |
|
|
55
|
+
| ---------------- | ----------------------------------------------- |
|
|
56
|
+
| Business rules | Validation checks in `run` function |
|
|
57
|
+
| Error scenarios | Import from `errors.generated.ts`, return `err` |
|
|
58
|
+
| Process flow | Implementation steps in `run` function |
|
|
59
|
+
| Input parameters | `Input` interface (exported) |
|
|
60
|
+
| Permissions | Generated in `permissions.generated.ts` |
|
|
61
|
+
|
|
62
|
+
## Output
|
|
63
|
+
|
|
64
|
+
Write files:
|
|
65
|
+
|
|
66
|
+
- `{{MODULES_ROOT}}/{{MODULE_NAME}}/testing/fixtures.ts` (add fixtures, don't overwrite existing)
|
|
67
|
+
- `{{MODULES_ROOT}}/{{MODULE_NAME}}/command/<name>.test.ts`
|
|
68
|
+
- `{{MODULES_ROOT}}/{{MODULE_NAME}}/command/<name>.ts`
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Module Exports
|
|
2
|
+
|
|
3
|
+
Module `index.ts` exports are kept minimal:
|
|
4
|
+
|
|
5
|
+
1. `defineModule` from module.ts
|
|
6
|
+
2. `permissions`, `own`, `all` from `lib/permissions.generated`
|
|
7
|
+
|
|
8
|
+
Error classes, input types, and query functions are **not** re-exported from `index.ts`. Consumers import them directly from their source files (e.g., `../lib/errors.generated`, `../command/createItem`). This avoids naming conflicts in the top-level barrel file when multiple modules define similar error classes.
|
|
9
|
+
|
|
10
|
+
Test files are exempt from the ESLint cross-module import restriction and may use direct path imports freely.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
Run `erp-kit module generate code
|
|
5
|
+
Run `erp-kit module generate code -p <modules-dir>/<module-name>` to generate deterministic `.generated.ts` files from command and query documentation.
|
|
6
6
|
|
|
7
7
|
## What gets generated
|
|
8
8
|
|
|
@@ -21,7 +21,7 @@ Run `erp-kit module generate code --root <modules-dir> <module-name>` to generat
|
|
|
21
21
|
1. Write command/query docs (skills 1-3)
|
|
22
22
|
2. Write db models (skill 4, step 2)
|
|
23
23
|
3. Run `pnpm generate` for kysely types
|
|
24
|
-
4. Run `erp-kit module generate code
|
|
24
|
+
4. Run `erp-kit module generate code -p <root>/<module>`
|
|
25
25
|
5. Implement business logic in `.ts` files importing from `.generated.ts`
|
|
26
26
|
|
|
27
27
|
## What you still write by hand
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Model Implementation
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Model doc: {{MODEL_DOC}}
|
|
7
|
+
|
|
8
|
+
## Instructions
|
|
9
|
+
|
|
10
|
+
Implement a database model based on the documentation.
|
|
11
|
+
|
|
12
|
+
1. Read the model doc at the path above
|
|
13
|
+
2. Read existing models in `{{MODULES_ROOT}}/{{MODULE_NAME}}/db/` for patterns
|
|
14
|
+
3. Implement the model in `{{MODULES_ROOT}}/{{MODULE_NAME}}/db/<model-name>.ts`
|
|
15
|
+
|
|
16
|
+
## Implementation Rules
|
|
17
|
+
|
|
18
|
+
**Read these references before implementing:**
|
|
19
|
+
|
|
20
|
+
- [Model patterns](models.md) — factory function, generics, stateful enums
|
|
21
|
+
- [Database relations](db-relations.md) — `.relation()` for foreign keys
|
|
22
|
+
- [Cross-module dependencies](cross-module-dependency.md) — DB type injection
|
|
23
|
+
|
|
24
|
+
### Key Patterns
|
|
25
|
+
|
|
26
|
+
1. **Factory function**: `export function create<Model>Type<const F extends Record<string, TailorAnyDBField> = Record<string, never>>(params?: { customFields?: F })`
|
|
27
|
+
2. **Timestamps**: Always include `db.fields.timestamps()`
|
|
28
|
+
3. **Descriptions**: Add `.description()` on every field
|
|
29
|
+
4. **Relations**: Use `.relation()` instead of plain `db.uuid()` for foreign keys
|
|
30
|
+
5. **Stateful models**: Use `additionalStatuses` for extension, never replace base statuses
|
|
31
|
+
|
|
32
|
+
### From Doc to Code
|
|
33
|
+
|
|
34
|
+
| Doc Element | Code Element |
|
|
35
|
+
| ------------------ | ----------------------------------------- |
|
|
36
|
+
| Fields table | `db.fields.*` definitions |
|
|
37
|
+
| Required fields | Field without `.optional()` |
|
|
38
|
+
| Status/state enum | `db.fields.enum()` with status values |
|
|
39
|
+
| Relationships | `.relation()` with type and toward config |
|
|
40
|
+
| Unique constraints | `.unique()` on fields or composite index |
|
|
41
|
+
|
|
42
|
+
## Output
|
|
43
|
+
|
|
44
|
+
Write the model file to `{{MODULES_ROOT}}/{{MODULE_NAME}}/db/<model-name>.ts`.
|
|
45
|
+
Follow existing patterns in the module's `db/` directory.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Query Implementation
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Query doc: {{QUERY_DOC}}
|
|
7
|
+
|
|
8
|
+
## Instructions
|
|
9
|
+
|
|
10
|
+
Implement a read-only query based on the documentation.
|
|
11
|
+
|
|
12
|
+
1. Read the query doc at the path above
|
|
13
|
+
2. Read the generated shell at `{{MODULES_ROOT}}/{{MODULE_NAME}}/query/<name>.generated.ts` (if exists)
|
|
14
|
+
3. Read existing queries in `{{MODULES_ROOT}}/{{MODULE_NAME}}/query/` for patterns
|
|
15
|
+
4. Implement the query
|
|
16
|
+
|
|
17
|
+
## Implementation Rules
|
|
18
|
+
|
|
19
|
+
**Read these references before implementing:**
|
|
20
|
+
|
|
21
|
+
- [Query patterns](../../erp-kit-module-shared/references/queries.md) — defineQuery, ReadonlyDB, conventions
|
|
22
|
+
|
|
23
|
+
### Key Patterns
|
|
24
|
+
|
|
25
|
+
1. **Generated queries**: Handle simple lookups automatically; write custom for joins/aggregations
|
|
26
|
+
2. **ReadonlyDB**: Always use `ReadonlyDB<DB>` type for database access
|
|
27
|
+
3. **QueryContext**: Use for dependency injection
|
|
28
|
+
4. **Results**: Return `ok(data)` or `err(error)`
|
|
29
|
+
|
|
30
|
+
### Query Naming Convention
|
|
31
|
+
|
|
32
|
+
| Pattern | Name |
|
|
33
|
+
| ------------------- | ------------------------ |
|
|
34
|
+
| Get single entity | `get{Entity}` |
|
|
35
|
+
| List by status | `list{Status}{Entities}` |
|
|
36
|
+
| List all | `list{Entities}` |
|
|
37
|
+
| Search with filters | `search{Entities}` |
|
|
38
|
+
| Calculate/convert | `calculate{Result}` |
|
|
39
|
+
|
|
40
|
+
### From Doc to Code
|
|
41
|
+
|
|
42
|
+
| Doc Element | Code Element |
|
|
43
|
+
| ---------------- | ------------------------- |
|
|
44
|
+
| Input parameters | Query input type |
|
|
45
|
+
| Output shape | Return type |
|
|
46
|
+
| Filtering logic | WHERE clauses |
|
|
47
|
+
| Aggregation | SQL aggregation functions |
|
|
48
|
+
| Business logic | Post-query transformation |
|
|
49
|
+
|
|
50
|
+
## Output
|
|
51
|
+
|
|
52
|
+
Write the query file to `{{MODULES_ROOT}}/{{MODULE_NAME}}/query/<name>.ts`.
|
|
53
|
+
Follow existing patterns in the module's `query/` directory.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: erp-kit-module-6-impl-review
|
|
3
|
+
description: Review implementation parity between documentation and code. Use after TDD implementation (step 5) to validate code matches documentation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Implementation Parity Review
|
|
7
|
+
|
|
8
|
+
Review **implementation consistency** between documentation and actual code.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- After TDD implementation (step 4), verify it matches documentation
|
|
13
|
+
- Before merging feature branches
|
|
14
|
+
- Quality check during code review
|
|
15
|
+
|
|
16
|
+
## Step 1: Setup
|
|
17
|
+
|
|
18
|
+
Define shared context for all agents:
|
|
19
|
+
|
|
20
|
+
- `MODULES_ROOT`: glob `**/modules/*/README.md` and derive the parent directory
|
|
21
|
+
- `MODULE_NAME`: from argument or detect from current working directory
|
|
22
|
+
- `MODEL_DOCS`: glob `<MODULES_ROOT>/<MODULE_NAME>/docs/models/*.md`
|
|
23
|
+
- `COMMAND_DOCS`: glob `<MODULES_ROOT>/<MODULE_NAME>/docs/commands/*.md`
|
|
24
|
+
- `MODEL_CODE`: glob `<MODULES_ROOT>/<MODULE_NAME>/db/*.ts`
|
|
25
|
+
- `COMMAND_CODE`: glob `<MODULES_ROOT>/<MODULE_NAME>/command/*.ts` (exclude `*.test.ts` and `*.generated.ts`)
|
|
26
|
+
- `TEST_CODE`: glob `<MODULES_ROOT>/<MODULE_NAME>/command/*.test.ts`
|
|
27
|
+
- `ERROR_DEFS`: `<MODULES_ROOT>/<MODULE_NAME>/lib/errors.generated.ts`
|
|
28
|
+
|
|
29
|
+
Verify at least `MODEL_DOCS` or `COMMAND_DOCS` is non-empty. If no docs exist, stop with: "No docs found for module <MODULE_NAME>."
|
|
30
|
+
|
|
31
|
+
## Step 2: Dispatch Agents (parallelize if possible)
|
|
32
|
+
|
|
33
|
+
Launch 4 Agent tool calls in parallel — one per parity check.
|
|
34
|
+
Each agent receives: MODULE_NAME, relevant doc/code file paths.
|
|
35
|
+
Each agent returns: structured JSON per [references/impl-parity-report-format.md](references/impl-parity-report-format.md).
|
|
36
|
+
If a doc or code directory is empty, the agent reports "no files found" and skips.
|
|
37
|
+
Otherwise, query each sequentially.
|
|
38
|
+
|
|
39
|
+
| Agent | Prompt Template | Inputs |
|
|
40
|
+
| ----- | -------------------------------------------------------------------------------------- | ------------------------------------------------- |
|
|
41
|
+
| 1 | [references/model-doc-code-parity.md](references/model-doc-code-parity.md) | MODEL_DOCS, MODEL_CODE |
|
|
42
|
+
| 2 | [references/command-doc-code-parity.md](references/command-doc-code-parity.md) | COMMAND_DOCS, COMMAND_CODE |
|
|
43
|
+
| 3 | [references/error-implementation-parity.md](references/error-implementation-parity.md) | COMMAND_DOCS, ERROR_DEFS, COMMAND_CODE, TEST_CODE |
|
|
44
|
+
| 4 | [references/command-doc-test-parity.md](references/command-doc-test-parity.md) | COMMAND_DOCS, TEST_CODE |
|
|
45
|
+
|
|
46
|
+
For each agent:
|
|
47
|
+
|
|
48
|
+
1. Read the prompt template file
|
|
49
|
+
2. Replace `{{MODULE_NAME}}` with the resolved module name
|
|
50
|
+
3. Replace `{{MODEL_DOCS}}`, `{{COMMAND_DOCS}}`, `{{MODEL_CODE}}`, `{{COMMAND_CODE}}`, `{{TEST_CODE}}`, `{{ERROR_DEFS}}` with the actual file paths
|
|
51
|
+
4. Dispatch the agent with the filled prompt
|
|
52
|
+
|
|
53
|
+
## Step 3: Aggregate Results
|
|
54
|
+
|
|
55
|
+
After ALL agents return:
|
|
56
|
+
|
|
57
|
+
1. Collect the JSON results from each agent
|
|
58
|
+
2. Merge all `gaps[]` arrays into a single list
|
|
59
|
+
3. Merge all `inconsistencies[]` arrays into a single list
|
|
60
|
+
4. Deduplicate: if two gaps share the same `source + target + check`, keep only one
|
|
61
|
+
5. Calculate totals across all summaries
|
|
62
|
+
6. Render the final report below
|
|
63
|
+
|
|
64
|
+
## Report Format
|
|
65
|
+
|
|
66
|
+
Render the aggregated results as markdown:
|
|
67
|
+
|
|
68
|
+
### Implementation Parity Review Report
|
|
69
|
+
|
|
70
|
+
**Module:** <MODULE_NAME>
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### 1. Model Doc → Model Code Coverage
|
|
75
|
+
|
|
76
|
+
| Model Doc | Fields Documented | Fields Implemented | Gap |
|
|
77
|
+
| --------- | ----------------- | ------------------ | --- |
|
|
78
|
+
|
|
79
|
+
(Populated from agent 1 gaps where check is `field_coverage`)
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
### 2. Model State Transitions
|
|
84
|
+
|
|
85
|
+
| Model | Documented States | Implemented States | Gap |
|
|
86
|
+
| ----- | ----------------- | ------------------ | --- |
|
|
87
|
+
|
|
88
|
+
(Populated from agent 1 gaps where check is `state_transitions`)
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### 3. Command Doc → Command Code Coverage
|
|
93
|
+
|
|
94
|
+
| Command Doc | Business Rules | Implemented | Gap |
|
|
95
|
+
| ----------- | -------------- | ----------- | --- |
|
|
96
|
+
|
|
97
|
+
(Populated from agent 2 gaps where check is `business_rule_impl`)
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### 4. Error Scenario Implementation
|
|
102
|
+
|
|
103
|
+
| Command Doc | Error Code | Generated in errors.generated.ts | Returned in command | Test assertion |
|
|
104
|
+
| ----------- | ---------- | -------------------------------- | ------------------- | -------------- |
|
|
105
|
+
|
|
106
|
+
(Populated from agent 3 gaps)
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### 5. Process Flow → Test Coverage
|
|
111
|
+
|
|
112
|
+
| Command Doc | Process Flow Branches | Test Cases | Gap |
|
|
113
|
+
| ----------- | --------------------- | ---------- | --- |
|
|
114
|
+
|
|
115
|
+
(Populated from agent 4 gaps where check is `process_flow_coverage`)
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
### 6. Implementation Pattern Compliance
|
|
120
|
+
|
|
121
|
+
| Command | Generated Shell | Input Interface Exported | JSDoc Present |
|
|
122
|
+
| ------- | --------------- | ------------------------ | ------------- |
|
|
123
|
+
|
|
124
|
+
(Populated from agent 2 gaps where check is `generated_shell_pattern`, `input_interface_export`, `jsdoc_present`)
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
### 7. Missing Implementation
|
|
129
|
+
|
|
130
|
+
#### Missing in Model Code
|
|
131
|
+
|
|
132
|
+
| Model Doc | Missing Item | Type | Doc Reference |
|
|
133
|
+
| --------- | ------------ | ---- | ------------- |
|
|
134
|
+
|
|
135
|
+
#### Missing in Command Code
|
|
136
|
+
|
|
137
|
+
| Command Doc | Missing Item | Type | Doc Reference |
|
|
138
|
+
| ----------- | ------------ | ---- | ------------- |
|
|
139
|
+
|
|
140
|
+
#### Missing Error Classes
|
|
141
|
+
|
|
142
|
+
| Command Doc | Error Code | Expected Class |
|
|
143
|
+
| ----------- | ---------- | -------------- |
|
|
144
|
+
|
|
145
|
+
#### Missing Tests
|
|
146
|
+
|
|
147
|
+
| Command Doc | Missing Test Case | Doc Reference |
|
|
148
|
+
| ----------- | ----------------- | ------------- |
|
|
149
|
+
|
|
150
|
+
(Populated from all agents' gaps where status is `fail`)
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
### 8. Inconsistencies
|
|
155
|
+
|
|
156
|
+
| Type | Location | Issue |
|
|
157
|
+
| ---- | -------- | ----- |
|
|
158
|
+
|
|
159
|
+
(Populated from all agents' `inconsistencies[]`)
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### 9. Summary
|
|
164
|
+
|
|
165
|
+
| Aspect | Status | Details |
|
|
166
|
+
| ----------------------------- | ------ | ----------------- |
|
|
167
|
+
| Model Doc → Code Coverage | | X/Y checks passed |
|
|
168
|
+
| Command Doc → Code Coverage | | X/Y checks passed |
|
|
169
|
+
| Error Scenario Implementation | | X/Y checks passed |
|
|
170
|
+
| Test Coverage | | X/Y checks passed |
|
|
171
|
+
|
|
172
|
+
### 10. Recommendations
|
|
173
|
+
|
|
174
|
+
Numbered list of actionable fixes, grouped by priority:
|
|
175
|
+
|
|
176
|
+
1. Add missing model fields/states (highest priority)
|
|
177
|
+
2. Implement missing business rules
|
|
178
|
+
3. Define missing error classes (re-run `erp-kit module generate code -p <path>`)
|
|
179
|
+
4. Add missing test cases
|
|
180
|
+
5. Fix inconsistencies
|
|
181
|
+
|
|
182
|
+
## References
|
|
183
|
+
|
|
184
|
+
- [Implementation parity report format](references/impl-parity-report-format.md)
|
|
185
|
+
- [Command patterns](references/commands.md)
|
|
186
|
+
- [Error patterns](references/errors.md)
|
|
187
|
+
- [Testing patterns](references/testing.md)
|