@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,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: erp-kit-module-3-plan
|
|
3
|
+
description: Create implementation plan by breaking down feature specs into model, command, and query documentation. Use after requirements review (step 2) to plan the implementation structure.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Feature Breakdown to Model/Command/Query Docs
|
|
7
|
+
|
|
8
|
+
Convert feature specifications into structured model, command, and query documentation. The main agent creates the plan and populates scaffolded docs, then parallel subagents refine each doc type.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- User has feature specs (e.g., `docs/features/*.md`) and wants implementation docs
|
|
13
|
+
- User asks to create model, command, or query documentation
|
|
14
|
+
- User references `model.yml` or `command.yml` schemas
|
|
15
|
+
|
|
16
|
+
## Step 1: Setup
|
|
17
|
+
|
|
18
|
+
Define shared context:
|
|
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
|
+
- `FEATURE_DOCS`: glob `<MODULES_ROOT>/<MODULE_NAME>/docs/features/*.md`
|
|
23
|
+
|
|
24
|
+
Verify at least `FEATURE_DOCS` is non-empty. If no feature docs exist, stop with: "No feature docs found for module <MODULE_NAME>. Run erp-kit-module-1-requirements first."
|
|
25
|
+
|
|
26
|
+
## Step 2: Extract Plan (single agent)
|
|
27
|
+
|
|
28
|
+
Read ALL feature docs and extract models, commands, and queries yourself (no subagents).
|
|
29
|
+
|
|
30
|
+
Use the extraction rules from:
|
|
31
|
+
|
|
32
|
+
- [references/model-extraction.md](references/model-extraction.md) — entity/model identification, field extraction, state machines, relationships
|
|
33
|
+
- [references/command-extraction.md](references/command-extraction.md) — write operations, business rules, error scenarios, process flows
|
|
34
|
+
- [references/query-extraction.md](references/query-extraction.md) — read operations, lookups, aggregations, conversions
|
|
35
|
+
|
|
36
|
+
Present consolidated plan to user:
|
|
37
|
+
|
|
38
|
+
- Models to create (with fields, relationships, states)
|
|
39
|
+
- Commands to create (with business rules, error scenarios)
|
|
40
|
+
- Queries to create (with inputs, outputs)
|
|
41
|
+
|
|
42
|
+
Wait for user approval.
|
|
43
|
+
|
|
44
|
+
## Step 3: Scaffold & Populate
|
|
45
|
+
|
|
46
|
+
After approval, scaffold using `erp-kit` CLI. **Names must be PascalCase** (see [naming convention](references/naming.md)):
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
erp-kit module generate doc model ModelName -p <MODULES_ROOT>/<module-name>
|
|
50
|
+
erp-kit module generate doc command CommandName -p <MODULES_ROOT>/<module-name>
|
|
51
|
+
erp-kit module generate doc query QueryName -p <MODULES_ROOT>/<module-name>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Fill in the scaffolded docs with details from the extraction in Step 2.
|
|
55
|
+
|
|
56
|
+
## Step 4: Dispatch Update Agents (parallelize)
|
|
57
|
+
|
|
58
|
+
Launch 3 Agent tool calls in parallel — one per doc type — to review and refine populated docs.
|
|
59
|
+
Each agent receives: MODULE_NAME, the list of created doc file paths, and FEATURE_DOCS for cross-reference.
|
|
60
|
+
|
|
61
|
+
| Agent | Prompt Template | Inputs |
|
|
62
|
+
| ----- | -------------------------------------------------------------------- | -------------------------------------------- |
|
|
63
|
+
| 1 | [references/model-extraction.md](references/model-extraction.md) | MODULE_NAME, model doc paths, FEATURE_DOCS |
|
|
64
|
+
| 2 | [references/command-extraction.md](references/command-extraction.md) | MODULE_NAME, command doc paths, FEATURE_DOCS |
|
|
65
|
+
| 3 | [references/query-extraction.md](references/query-extraction.md) | MODULE_NAME, query doc paths, FEATURE_DOCS |
|
|
66
|
+
|
|
67
|
+
For each agent:
|
|
68
|
+
|
|
69
|
+
1. Read the prompt template file
|
|
70
|
+
2. Replace `{{MODULE_NAME}}` with the resolved module name
|
|
71
|
+
3. Replace `{{FEATURE_DOCS}}` with the actual file paths
|
|
72
|
+
4. Add to the prompt: "Read the populated docs at [doc paths]. Cross-reference against the feature docs and the extraction rules. Fix any missing fields, incorrect types, incomplete business rules, or inconsistencies. Edit files directly."
|
|
73
|
+
5. Dispatch the agent with the filled prompt
|
|
74
|
+
|
|
75
|
+
## Step 5: Validate
|
|
76
|
+
|
|
77
|
+
Run `pnpm run module:doc:check` and fix any violations.
|
|
78
|
+
|
|
79
|
+
## Schema Quick Reference
|
|
80
|
+
|
|
81
|
+
Schemas are bundled in `@tailor-platform/erp-kit` (model.yml, command.yml).
|
|
82
|
+
|
|
83
|
+
## Common Patterns
|
|
84
|
+
|
|
85
|
+
| Feature Element | Documentation Type |
|
|
86
|
+
| --------------------- | -------------------------------- |
|
|
87
|
+
| Entity with fields | Model doc |
|
|
88
|
+
| State machine | Model doc with State Transitions |
|
|
89
|
+
| Verb in state diagram | Command doc |
|
|
90
|
+
| CRUD operation | Command doc |
|
|
91
|
+
| Validation logic | Command doc Business Rules |
|
|
92
|
+
| Data lookup | Query doc |
|
|
93
|
+
| Unit/currency convert | Query doc |
|
|
94
|
+
| Computed aggregation | Query doc |
|
|
95
|
+
|
|
96
|
+
## Validation
|
|
97
|
+
|
|
98
|
+
Always run before completing:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
pnpm run module:doc:check
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## References
|
|
105
|
+
|
|
106
|
+
- [Naming convention (PascalCase files + command verbs)](references/naming.md)
|
|
107
|
+
- [Module structure](../erp-kit-module-shared/references/structure.md)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Command Extraction
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Feature docs: {{FEATURE_DOCS}}
|
|
7
|
+
|
|
8
|
+
## Instructions
|
|
9
|
+
|
|
10
|
+
Read ALL feature docs and extract command (write operation) definitions.
|
|
11
|
+
|
|
12
|
+
1. Read ALL feature docs at the paths above
|
|
13
|
+
2. For each feature, identify operations that change state
|
|
14
|
+
3. For each operation, extract:
|
|
15
|
+
- Command name (following naming convention)
|
|
16
|
+
- Input parameters
|
|
17
|
+
- Business rules and validations
|
|
18
|
+
- Error scenarios
|
|
19
|
+
- Process flow (step-by-step)
|
|
20
|
+
|
|
21
|
+
## Naming Convention
|
|
22
|
+
|
|
23
|
+
See [naming.md](naming.md) for the full canonical verb vocabulary.
|
|
24
|
+
|
|
25
|
+
Key mappings:
|
|
26
|
+
|
|
27
|
+
| Feature Operation | Command Name |
|
|
28
|
+
| -------------------- | -------------- |
|
|
29
|
+
| "Create X" / "Add X" | `createX` |
|
|
30
|
+
| "Update X" | `updateX` |
|
|
31
|
+
| "Delete X" | `deleteX` |
|
|
32
|
+
| "Deactivate X" | `deactivateX` |
|
|
33
|
+
| "Activate X" | `activateX` |
|
|
34
|
+
| "Reactivate X" | `reactivateX` |
|
|
35
|
+
| "Set default X" | `setDefaultX` |
|
|
36
|
+
| "Assign X to Y" | `assignXToY` |
|
|
37
|
+
| "Remove X from Y" | `removeXFromY` |
|
|
38
|
+
| "Revoke X from Y" | `revokeXFromY` |
|
|
39
|
+
| "Move X" | `moveX` |
|
|
40
|
+
| "Log X" | `logX` |
|
|
41
|
+
|
|
42
|
+
**Banned verbs**: `archive`, `unarchive`, `disable`, `enable`, `add...To...`, `unlink`
|
|
43
|
+
|
|
44
|
+
## Extraction Rules
|
|
45
|
+
|
|
46
|
+
### Business Rules
|
|
47
|
+
|
|
48
|
+
- Extract explicit validation rules from feature scenarios
|
|
49
|
+
- Extract implicit rules from test cases ("should not allow X when Y")
|
|
50
|
+
- Map each rule to an error scenario
|
|
51
|
+
|
|
52
|
+
### Error Scenarios
|
|
53
|
+
|
|
54
|
+
- For each business rule violation, define an error code
|
|
55
|
+
- Follow SCREAMING_SNAKE_CASE convention
|
|
56
|
+
- Categories: NOT_FOUND, DUPLICATE, LOCKED/INACTIVE, INVALID_STATE, NO_OP
|
|
57
|
+
|
|
58
|
+
### Process Flow
|
|
59
|
+
|
|
60
|
+
- Extract step-by-step flow from feature scenarios
|
|
61
|
+
- Identify branching points (conditional logic)
|
|
62
|
+
- Map to validate → query → mutate pattern
|
|
63
|
+
|
|
64
|
+
## Output Format
|
|
65
|
+
|
|
66
|
+
Return your extraction as a structured markdown report:
|
|
67
|
+
|
|
68
|
+
### Commands
|
|
69
|
+
|
|
70
|
+
For each command:
|
|
71
|
+
|
|
72
|
+
#### <commandName>
|
|
73
|
+
|
|
74
|
+
- **Source features:** list of feature files
|
|
75
|
+
- **Target model:** ModelName
|
|
76
|
+
- **Inputs:**
|
|
77
|
+
|
|
78
|
+
| Param | Type | Required | Description |
|
|
79
|
+
| ----- | ---- | -------- | ----------- |
|
|
80
|
+
|
|
81
|
+
- **Business Rules:**
|
|
82
|
+
|
|
83
|
+
| Rule | Error Code | Error Message |
|
|
84
|
+
| ---- | ---------- | ------------- |
|
|
85
|
+
|
|
86
|
+
- **Process Flow:** numbered steps
|
|
87
|
+
- **Permissions:** list
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Model Extraction
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Feature docs: {{FEATURE_DOCS}}
|
|
7
|
+
|
|
8
|
+
## Instructions
|
|
9
|
+
|
|
10
|
+
Read ALL feature docs and extract entity/model definitions.
|
|
11
|
+
|
|
12
|
+
1. Read ALL feature docs at the paths above
|
|
13
|
+
2. For each feature, identify entities that need database models
|
|
14
|
+
3. For each entity, extract:
|
|
15
|
+
- Fields and their types
|
|
16
|
+
- Relationships to other entities
|
|
17
|
+
- State machines (if stateful)
|
|
18
|
+
- Required constraints (unique, required, etc.)
|
|
19
|
+
4. Resolve cross-feature entity references (same entity mentioned in multiple features)
|
|
20
|
+
|
|
21
|
+
## Extraction Rules
|
|
22
|
+
|
|
23
|
+
### Entity Identification
|
|
24
|
+
|
|
25
|
+
- Look for nouns that represent persistent data
|
|
26
|
+
- Check for explicit "Entity" or "Model" mentions
|
|
27
|
+
- Identify implicit entities from relationship descriptions
|
|
28
|
+
|
|
29
|
+
### Field Extraction
|
|
30
|
+
|
|
31
|
+
- Map feature attributes to database field types
|
|
32
|
+
- Identify required vs optional fields
|
|
33
|
+
- Note any validation constraints
|
|
34
|
+
|
|
35
|
+
### State Machine Extraction
|
|
36
|
+
|
|
37
|
+
- Look for state diagrams or transition descriptions
|
|
38
|
+
- Extract all possible states
|
|
39
|
+
- Map transitions to operations (verbs → commands)
|
|
40
|
+
|
|
41
|
+
### Relationship Extraction
|
|
42
|
+
|
|
43
|
+
- Identify foreign key relationships (N-1, 1-1)
|
|
44
|
+
- Identify junction table needs (N-N)
|
|
45
|
+
- Note cross-module entity references
|
|
46
|
+
|
|
47
|
+
## Output Format
|
|
48
|
+
|
|
49
|
+
Return your extraction as a structured markdown report:
|
|
50
|
+
|
|
51
|
+
### Models
|
|
52
|
+
|
|
53
|
+
For each model:
|
|
54
|
+
|
|
55
|
+
#### <ModelName>
|
|
56
|
+
|
|
57
|
+
- **Source features:** list of feature files
|
|
58
|
+
- **Fields:**
|
|
59
|
+
|
|
60
|
+
| Field | Type | Required | Description |
|
|
61
|
+
| ----- | ---- | -------- | ----------- |
|
|
62
|
+
|
|
63
|
+
- **Relationships:**
|
|
64
|
+
|
|
65
|
+
| Type | Target | Field | Cross-module |
|
|
66
|
+
| ---- | ------ | ----- | ------------ |
|
|
67
|
+
|
|
68
|
+
- **States:** list of states (if stateful)
|
|
69
|
+
- **State Transitions:**
|
|
70
|
+
|
|
71
|
+
| From | To | Trigger (command) |
|
|
72
|
+
| ---- | --- | ----------------- |
|
package/skills/{erp-kit-module-2-feature-breakdown → erp-kit-module-3-plan}/references/naming.md
RENAMED
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Naming Convention
|
|
2
|
+
|
|
3
|
+
## Doc File Names — PascalCase
|
|
4
|
+
|
|
5
|
+
Documentation files under `docs/models/`, `docs/commands/`, and `docs/queries/` **must** use PascalCase. The code generator derives the camelCase command/query name by lowercasing the first character of the file name.
|
|
6
|
+
|
|
7
|
+
| Doc type | File name format | Example file | Derived name |
|
|
8
|
+
| -------- | ----------------- | ------------------ | --------------- |
|
|
9
|
+
| Model | `{Entity}.md` | `Product.md` | — |
|
|
10
|
+
| Command | `{VerbEntity}.md` | `CreateProduct.md` | `createProduct` |
|
|
11
|
+
| Query | `{VerbEntity}.md` | `GetProduct.md` | `getProduct` |
|
|
12
|
+
|
|
13
|
+
**Never use kebab-case** (`create-product.md`) — the generator will produce a broken name (`create-product`).
|
|
14
|
+
|
|
15
|
+
## Command Naming Convention
|
|
2
16
|
|
|
3
17
|
Commands use imperative `{verb}{Entity}` format. Use this canonical verb vocabulary when scaffolding commands.
|
|
4
18
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Query Extraction
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Feature docs: {{FEATURE_DOCS}}
|
|
7
|
+
|
|
8
|
+
## Instructions
|
|
9
|
+
|
|
10
|
+
Read ALL feature docs and extract read-only query definitions.
|
|
11
|
+
|
|
12
|
+
1. Read ALL feature docs at the paths above
|
|
13
|
+
2. For each feature, identify read operations needed by external consumers
|
|
14
|
+
3. For each read operation, extract:
|
|
15
|
+
- Query name (following naming convention)
|
|
16
|
+
- Input parameters
|
|
17
|
+
- Output shape
|
|
18
|
+
- Business logic (filtering, aggregation, conversion)
|
|
19
|
+
|
|
20
|
+
## Query Identification
|
|
21
|
+
|
|
22
|
+
Queries are read-only operations for external consumers. Look for:
|
|
23
|
+
|
|
24
|
+
- **Lookups**: "Get X by Y", "Find X where Z"
|
|
25
|
+
- **Conversions**: "Convert X to Y", "Calculate X"
|
|
26
|
+
- **Aggregations**: "Total X", "Count X by Y"
|
|
27
|
+
- **Listings**: "List all X", "List X by status"
|
|
28
|
+
|
|
29
|
+
See [CQRS read rule](../../erp-kit-module-shared/references/commands.md#command-side-reads-cqrs-separation) for when to use queries vs command-side reads.
|
|
30
|
+
|
|
31
|
+
## Naming Convention
|
|
32
|
+
|
|
33
|
+
| Operation | Query Name |
|
|
34
|
+
| ------------------- | ------------------------ |
|
|
35
|
+
| Get single entity | `get{Entity}` |
|
|
36
|
+
| List by status | `list{Status}{Entities}` |
|
|
37
|
+
| List all | `list{Entities}` |
|
|
38
|
+
| Search with filters | `search{Entities}` |
|
|
39
|
+
| Calculate/convert | `calculate{Result}` |
|
|
40
|
+
| Aggregate | `get{Aggregate}` |
|
|
41
|
+
|
|
42
|
+
## Output Format
|
|
43
|
+
|
|
44
|
+
Return your extraction as a structured markdown report:
|
|
45
|
+
|
|
46
|
+
### Queries
|
|
47
|
+
|
|
48
|
+
For each query:
|
|
49
|
+
|
|
50
|
+
#### <queryName>
|
|
51
|
+
|
|
52
|
+
- **Source features:** list of feature files
|
|
53
|
+
- **Inputs:**
|
|
54
|
+
|
|
55
|
+
| Param | Type | Required | Description |
|
|
56
|
+
| ----- | ---- | -------- | ----------- |
|
|
57
|
+
|
|
58
|
+
- **Output:** type (single/list/aggregate) and shape description
|
|
59
|
+
- **Business logic:** description of filtering, aggregation, or transformation
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: erp-kit-module-4-plan-review
|
|
3
|
+
description: Review parity between feature documentation and command/model/query documentation. Use after creating implementation plan (step 3) to validate completeness.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Feature Parity Review
|
|
7
|
+
|
|
8
|
+
Review **documentation consistency** between feature specs and command/model/query docs.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- After writing feature documentation, check for gaps in command/model/query documentation
|
|
13
|
+
- After writing command/model/query documentation, verify consistency with features
|
|
14
|
+
- Quality check during documentation 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
|
+
- `FEATURE_DOCS`: glob `<MODULES_ROOT>/<MODULE_NAME>/docs/features/*.md`
|
|
23
|
+
- `COMMAND_DOCS`: glob `<MODULES_ROOT>/<MODULE_NAME>/docs/commands/*.md`
|
|
24
|
+
- `QUERY_DOCS`: glob `<MODULES_ROOT>/<MODULE_NAME>/docs/queries/*.md`
|
|
25
|
+
- `MODEL_DOCS`: glob `<MODULES_ROOT>/<MODULE_NAME>/docs/models/*.md`
|
|
26
|
+
|
|
27
|
+
Verify at least `FEATURE_DOCS` is non-empty. If no feature docs exist, stop with: "No feature docs found for module <MODULE_NAME>."
|
|
28
|
+
|
|
29
|
+
## Step 2: Dispatch Agents (parallelize if possible)
|
|
30
|
+
|
|
31
|
+
Launch 4 Agent tool calls in parallel — one per parity check.
|
|
32
|
+
Each agent receives: MODULE_NAME, relevant doc file paths.
|
|
33
|
+
Each agent returns: structured JSON per [references/parity-report-format.md](references/parity-report-format.md).
|
|
34
|
+
If a doc directory is empty, the agent reports "no docs found" and skips.
|
|
35
|
+
Otherwise, query each sequentially.
|
|
36
|
+
|
|
37
|
+
| Agent | Prompt Template | Inputs |
|
|
38
|
+
| ----- | ---------------------------------------------------------------------------------- | -------------------------- |
|
|
39
|
+
| 1 | [references/feature-command-parity.md](references/feature-command-parity.md) | FEATURE_DOCS, COMMAND_DOCS |
|
|
40
|
+
| 2 | [references/feature-query-parity.md](references/feature-query-parity.md) | FEATURE_DOCS, QUERY_DOCS |
|
|
41
|
+
| 3 | [references/feature-model-parity.md](references/feature-model-parity.md) | FEATURE_DOCS, MODEL_DOCS |
|
|
42
|
+
| 4 | [references/command-model-consistency.md](references/command-model-consistency.md) | COMMAND_DOCS, MODEL_DOCS |
|
|
43
|
+
|
|
44
|
+
For each agent:
|
|
45
|
+
|
|
46
|
+
1. Read the prompt template file
|
|
47
|
+
2. Replace `{{MODULE_NAME}}` with the resolved module name
|
|
48
|
+
3. Replace `{{FEATURE_DOCS}}`, `{{COMMAND_DOCS}}`, `{{QUERY_DOCS}}`, `{{MODEL_DOCS}}` with the actual file paths
|
|
49
|
+
4. Dispatch the agent with the filled prompt
|
|
50
|
+
|
|
51
|
+
## Step 3: Aggregate Results
|
|
52
|
+
|
|
53
|
+
After ALL agents return:
|
|
54
|
+
|
|
55
|
+
1. Collect the JSON results from each agent
|
|
56
|
+
2. Merge all `gaps[]` arrays into a single list
|
|
57
|
+
3. Merge all `inconsistencies[]` arrays into a single list
|
|
58
|
+
4. Deduplicate: if two gaps share the same `source + target + check`, keep only one
|
|
59
|
+
5. Calculate totals across all summaries
|
|
60
|
+
6. Render the final report below
|
|
61
|
+
|
|
62
|
+
## Report Format
|
|
63
|
+
|
|
64
|
+
Render the aggregated results as markdown:
|
|
65
|
+
|
|
66
|
+
### Feature Parity Review Report
|
|
67
|
+
|
|
68
|
+
**Module:** <MODULE_NAME>
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### 1. Feature → Command Coverage
|
|
73
|
+
|
|
74
|
+
| Feature | Scenarios | Required Commands | Documented Commands | Gap |
|
|
75
|
+
| ------- | --------- | ----------------- | ------------------- | --- |
|
|
76
|
+
|
|
77
|
+
(Populated from agent 1 gaps where check is `command_existence`)
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### 2. Feature → Query Coverage
|
|
82
|
+
|
|
83
|
+
| Feature | Read Operations | Required Queries | Documented Queries | Gap |
|
|
84
|
+
| ------- | --------------- | ---------------- | ------------------ | --- |
|
|
85
|
+
|
|
86
|
+
(Populated from agent 2 gaps where check is `query_existence`)
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### 3. Feature → Model Coverage
|
|
91
|
+
|
|
92
|
+
| Feature | Required Models | Documented Models | Gap |
|
|
93
|
+
| ------- | --------------- | ----------------- | --- |
|
|
94
|
+
|
|
95
|
+
(Populated from agent 3 gaps where check is `model_existence`)
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### 4. Test Case → Business Rule Mapping
|
|
100
|
+
|
|
101
|
+
| Feature | Test Case | Covered by Command | Status |
|
|
102
|
+
| ------- | --------- | ------------------ | ------ |
|
|
103
|
+
|
|
104
|
+
(Populated from agent 1 gaps where check is `business_rule_coverage`)
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### 5. Missing Documentation
|
|
109
|
+
|
|
110
|
+
#### Missing Command Docs
|
|
111
|
+
|
|
112
|
+
| Feature | Expected Command | Purpose |
|
|
113
|
+
| ------- | ---------------- | ------- |
|
|
114
|
+
|
|
115
|
+
#### Missing Query Docs
|
|
116
|
+
|
|
117
|
+
| Feature | Expected Query | Purpose |
|
|
118
|
+
| ------- | -------------- | ------- |
|
|
119
|
+
|
|
120
|
+
#### Missing Model Docs
|
|
121
|
+
|
|
122
|
+
| Feature | Expected Model | Purpose |
|
|
123
|
+
| ------- | -------------- | ------- |
|
|
124
|
+
|
|
125
|
+
(Populated from all agents' gaps where status is `fail`)
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
### 6. Inconsistencies
|
|
130
|
+
|
|
131
|
+
| Type | Location | Issue |
|
|
132
|
+
| ---- | -------- | ----- |
|
|
133
|
+
|
|
134
|
+
(Populated from all agents' `inconsistencies[]`)
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### 7. Summary
|
|
139
|
+
|
|
140
|
+
| Aspect | Status | Details |
|
|
141
|
+
| --------------------------- | ------ | ----------------- |
|
|
142
|
+
| Feature → Command Coverage | | X/Y checks passed |
|
|
143
|
+
| Feature → Query Coverage | | X/Y checks passed |
|
|
144
|
+
| Feature → Model Coverage | | X/Y checks passed |
|
|
145
|
+
| Command → Model Consistency | | X/Y checks passed |
|
|
146
|
+
|
|
147
|
+
### 8. Recommendations
|
|
148
|
+
|
|
149
|
+
Numbered list of actionable fixes, grouped by priority:
|
|
150
|
+
|
|
151
|
+
1. Create missing docs (highest priority)
|
|
152
|
+
2. Add missing business rules / error scenarios
|
|
153
|
+
3. Resolve inconsistencies
|
|
154
|
+
|
|
155
|
+
## References
|
|
156
|
+
|
|
157
|
+
- [Parity report format](references/parity-report-format.md)
|
|
158
|
+
- For implementation patterns (models, commands, testing), see erp-kit-module-5-impl
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Command → Model Consistency Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Command docs: {{COMMAND_DOCS}}
|
|
7
|
+
Model docs: {{MODEL_DOCS}}
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
1. Read ALL command docs at the paths above
|
|
12
|
+
2. Read ALL model docs at the paths above
|
|
13
|
+
3. For each command, identify its target model 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 command doc:
|
|
20
|
+
|
|
21
|
+
| Check ID | Question |
|
|
22
|
+
| -------------------------- | -------------------------------------------------------------- |
|
|
23
|
+
| target_model | Does a model doc exist for the model that command operates on? |
|
|
24
|
+
| state_transition_alignment | Do state changes by command match model state transitions? |
|
|
25
|
+
|
|
26
|
+
## Common Gap Patterns
|
|
27
|
+
|
|
28
|
+
- **Missing target model**: Command operates on a model with no model doc
|
|
29
|
+
- **State transition mismatch**: Command changes status to a state not in model's state diagram
|
|
30
|
+
- **Validation gaps**: Command enforces constraints not reflected in model doc
|
|
31
|
+
|
|
32
|
+
## Output Format
|
|
33
|
+
|
|
34
|
+
Return a JSON object:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"check_type": "command-model-consistency",
|
|
39
|
+
"module": "{{MODULE_NAME}}",
|
|
40
|
+
"gaps": [...],
|
|
41
|
+
"inconsistencies": [...],
|
|
42
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
See [parity-report-format.md](parity-report-format.md) for field definitions.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Feature → Command Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Feature docs: {{FEATURE_DOCS}}
|
|
7
|
+
Command docs: {{COMMAND_DOCS}}
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
1. Read ALL feature docs at the paths above
|
|
12
|
+
2. Read ALL command docs at the paths above
|
|
13
|
+
3. For each feature, extract scenario patterns and test cases
|
|
14
|
+
4. For each command doc, extract business rules, error scenarios, process flows
|
|
15
|
+
5. Run every parity check below against each feature
|
|
16
|
+
6. Return results as JSON per the Output Format section
|
|
17
|
+
|
|
18
|
+
## Extraction: Feature Docs
|
|
19
|
+
|
|
20
|
+
From each feature doc, extract:
|
|
21
|
+
|
|
22
|
+
### Scenario Patterns
|
|
23
|
+
|
|
24
|
+
- **Add <entity>**: ... → Expected command: create<Entity>
|
|
25
|
+
- **Change default <entity>**: ... → Expected command: setDefault<Entity>
|
|
26
|
+
|
|
27
|
+
### Test Cases
|
|
28
|
+
|
|
29
|
+
- "Adding a <entity> with valid data creates it in active status"
|
|
30
|
+
→ Maps to business rule in create<Entity>
|
|
31
|
+
- "Only one <entity> can be default per <parent> at a time"
|
|
32
|
+
→ Maps to business rule in setDefault<Entity>
|
|
33
|
+
|
|
34
|
+
## Expected Command Docs for Feature
|
|
35
|
+
|
|
36
|
+
See [command naming convention](../../erp-kit-module-3-plan/references/naming.md) for the full rule, disambiguation guide, and banned verbs.
|
|
37
|
+
|
|
38
|
+
| Feature Operation | Expected Command Doc | Notes |
|
|
39
|
+
| -------------------- | -------------------- | ------------------------------ |
|
|
40
|
+
| "Create X" / "Add X" | `createX` | Never `addX` |
|
|
41
|
+
| "Update X" | `updateX` | |
|
|
42
|
+
| "Delete X" | `deleteX` | Hard delete only |
|
|
43
|
+
| "Deactivate X" | `deactivateX` | Soft-disable (reversible) |
|
|
44
|
+
| "Activate X" | `activateX` | Enable entity |
|
|
45
|
+
| "Reactivate X" | `reactivateX` | Re-enable after deactivation |
|
|
46
|
+
| "Set default X" | `setDefaultX` | Singular value/reference |
|
|
47
|
+
| "Assign X to Y" | `assignXToY` | Never `addXToY` |
|
|
48
|
+
| "Remove X from Y" | `removeXFromY` | Generic relationship unlinking |
|
|
49
|
+
| "Revoke X from Y" | `revokeXFromY` | RBAC/security domain only |
|
|
50
|
+
| "Move X" | `moveX` | Hierarchy position change |
|
|
51
|
+
| "Log X" | `logX` | Append-only audit/event |
|
|
52
|
+
|
|
53
|
+
**Banned verbs** — flag as naming violation inconsistency:
|
|
54
|
+
`archive`, `unarchive`, `disable`, `enable`, `add...To...`, `unlink`
|
|
55
|
+
|
|
56
|
+
## Parity Checks
|
|
57
|
+
|
|
58
|
+
For each feature's scenarios and test cases:
|
|
59
|
+
|
|
60
|
+
| Check ID | Question |
|
|
61
|
+
| ---------------------- | -------------------------------------------------------------------------- |
|
|
62
|
+
| command_existence | Does a command doc exist to implement the scenario? |
|
|
63
|
+
| business_rule_coverage | Are feature test cases covered by command business rules? |
|
|
64
|
+
| error_handling | Are expected error cases from feature included in command error scenarios? |
|
|
65
|
+
| process_flow_alignment | Does feature process flow match command process flow? |
|
|
66
|
+
|
|
67
|
+
### How to Check
|
|
68
|
+
|
|
69
|
+
1. List all scenario patterns from feature
|
|
70
|
+
2. Identify required operations (verbs) for each scenario
|
|
71
|
+
3. Verify corresponding command doc exists using the Expected Command Docs table
|
|
72
|
+
4. Map feature test cases to command business rules / error scenarios
|
|
73
|
+
|
|
74
|
+
## Common Gap Patterns
|
|
75
|
+
|
|
76
|
+
Watch for these specific patterns:
|
|
77
|
+
|
|
78
|
+
- **Orphaned scenarios**: Feature describes operation but no command doc exists
|
|
79
|
+
- **Missing CRUD**: Feature implies create/update/delete but only some are documented
|
|
80
|
+
- **Implicit commands**: Feature scenario requires helper command not documented
|
|
81
|
+
- **Default handling**: Feature mentions "default" selection but no setDefault command
|
|
82
|
+
|
|
83
|
+
## Output Format
|
|
84
|
+
|
|
85
|
+
Return a JSON object matching this structure:
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"check_type": "feature-command-parity",
|
|
90
|
+
"module": "{{MODULE_NAME}}",
|
|
91
|
+
"gaps": [...],
|
|
92
|
+
"inconsistencies": [...],
|
|
93
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
See [parity-report-format.md](parity-report-format.md) for field definitions.
|