@tailor-platform/erp-kit 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +1 -23
- package/dist/cli.mjs +1613 -0
- package/package.json +14 -13
- package/schemas/app-compose/story.yml +12 -0
- package/schemas/module/command.yml +9 -0
- package/schemas/module/module.yml +4 -0
- package/schemas/module/query.yml +9 -0
- package/skills/erp-kit-app-1-requirements/SKILL.md +4 -4
- package/skills/erp-kit-app-2-requirements-review/SKILL.md +102 -0
- package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +66 -0
- package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +69 -0
- package/skills/erp-kit-app-2-requirements-review/references/requirements-report-format.md +25 -0
- package/skills/erp-kit-app-3-plan/SKILL.md +157 -0
- package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +107 -0
- package/skills/erp-kit-app-3-plan/references/screen-extraction.md +74 -0
- package/skills/erp-kit-app-3-plan/references/story-extraction.md +86 -0
- package/skills/erp-kit-app-4-plan-review/SKILL.md +177 -0
- package/skills/erp-kit-app-4-plan-review/references/actor-flow-parity.md +73 -0
- package/skills/erp-kit-app-4-plan-review/references/business-flow-story-parity.md +86 -0
- package/skills/erp-kit-app-4-plan-review/references/orphan-detection.md +69 -0
- package/skills/erp-kit-app-4-plan-review/references/parity-report-format.md +52 -0
- package/skills/erp-kit-app-4-plan-review/references/story-resolver-parity.md +83 -0
- package/skills/erp-kit-app-4-plan-review/references/story-screen-parity.md +73 -0
- package/skills/{erp-kit-app-5-implementation → erp-kit-app-5-impl-backend}/SKILL.md +24 -68
- package/skills/erp-kit-app-5-impl-backend/references/app-config.md +38 -0
- package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +48 -0
- package/skills/erp-kit-app-5-impl-backend/references/resolver-patterns.md +68 -0
- package/skills/erp-kit-app-6-impl-frontend/SKILL.md +74 -0
- package/skills/{erp-kit-app-5-implementation/references/frontend.md → erp-kit-app-6-impl-frontend/references/pages.md} +8 -90
- package/skills/erp-kit-app-7-impl-review/SKILL.md +176 -0
- package/skills/erp-kit-app-7-impl-review/references/impl-parity-report-format.md +52 -0
- package/skills/erp-kit-app-7-impl-review/references/module-wiring-parity.md +84 -0
- package/skills/erp-kit-app-7-impl-review/references/resolver-doc-code-parity.md +86 -0
- package/skills/erp-kit-app-7-impl-review/references/screen-doc-code-parity.md +86 -0
- package/skills/erp-kit-module-1-requirements/SKILL.md +126 -0
- package/skills/erp-kit-module-1-requirements/references/boundary-analysis.md +51 -0
- package/skills/erp-kit-module-1-requirements/references/erp-research.md +57 -0
- package/skills/erp-kit-module-1-requirements/references/feature-doc.md +61 -0
- package/skills/erp-kit-module-2-requirements-review/SKILL.md +112 -0
- package/skills/erp-kit-module-2-requirements-review/references/best-practices-check.md +79 -0
- package/skills/erp-kit-module-2-requirements-review/references/boundary-consistency-check.md +70 -0
- package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +25 -0
- package/skills/erp-kit-module-3-plan/SKILL.md +107 -0
- package/skills/erp-kit-module-3-plan/references/command-extraction.md +87 -0
- package/skills/erp-kit-module-3-plan/references/model-extraction.md +72 -0
- package/skills/erp-kit-module-3-plan/references/query-extraction.md +59 -0
- package/skills/erp-kit-module-4-plan-review/SKILL.md +158 -0
- package/skills/erp-kit-module-4-plan-review/references/command-model-consistency.md +46 -0
- package/skills/erp-kit-module-4-plan-review/references/feature-command-parity.md +97 -0
- package/skills/erp-kit-module-4-plan-review/references/feature-model-parity.md +47 -0
- package/skills/erp-kit-module-4-plan-review/references/feature-query-parity.md +70 -0
- package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +52 -0
- package/skills/erp-kit-module-5-impl/SKILL.md +118 -0
- package/skills/erp-kit-module-5-impl/references/command-impl.md +68 -0
- package/skills/erp-kit-module-5-impl/references/exports.md +10 -0
- package/skills/erp-kit-module-5-impl/references/model-impl.md +45 -0
- package/skills/erp-kit-module-5-impl/references/query-impl.md +53 -0
- package/skills/erp-kit-module-6-impl-review/SKILL.md +187 -0
- package/skills/erp-kit-module-6-impl-review/references/command-doc-code-parity.md +92 -0
- package/skills/erp-kit-module-6-impl-review/references/command-doc-test-parity.md +93 -0
- package/skills/erp-kit-module-6-impl-review/references/error-implementation-parity.md +95 -0
- package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/errors.md +1 -1
- package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +52 -0
- package/skills/erp-kit-module-6-impl-review/references/model-doc-code-parity.md +80 -0
- package/skills/erp-kit-module-shared/SKILL.md +1 -1
- package/skills/erp-kit-module-shared/references/commands.md +1 -1
- package/skills/erp-kit-module-shared/references/errors.md +12 -9
- package/skills/erp-kit-module-shared/references/queries.md +109 -36
- package/skills/erp-kit-module-shared/references/testing.md +10 -0
- package/skills/erp-kit-update/SKILL.md +2 -2
- package/src/app.ts +1 -1
- package/src/commands/check.ts +1 -1
- package/src/commands/index.ts +16 -5
- package/src/commands/init.test.ts +22 -69
- package/src/commands/init.ts +28 -115
- package/src/commands/lib/distribute.test.ts +126 -0
- package/src/commands/lib/distribute.ts +129 -0
- package/src/commands/parse-doc-test-cases.ts +55 -0
- package/src/commands/scaffold.test.ts +74 -33
- package/src/commands/scaffold.ts +54 -18
- package/src/commands/sync-check.test.ts +173 -0
- package/src/commands/sync-check.ts +103 -2
- package/src/commands/update.test.ts +87 -0
- package/src/commands/update.ts +41 -0
- package/src/generator/generate-code.test.ts +23 -12
- package/src/generator/generate-code.ts +22 -16
- package/src/integration.test.ts +1 -1
- package/src/module.ts +14 -97
- package/src/modules/item-management/README.md +8 -0
- package/src/modules/item-management/command/activateItem.generated.ts +1 -1
- package/src/modules/item-management/command/activateItem.test.ts +12 -18
- package/src/modules/item-management/command/activateItem.ts +9 -5
- package/src/modules/item-management/command/assignItemToTaxonomy.generated.ts +1 -1
- package/src/modules/item-management/command/assignItemToTaxonomy.test.ts +10 -24
- package/src/modules/item-management/command/assignItemToTaxonomy.ts +19 -16
- package/src/modules/item-management/command/createItem.generated.ts +1 -1
- package/src/modules/item-management/command/createItem.test.ts +11 -11
- package/src/modules/item-management/command/createItem.ts +16 -7
- package/src/modules/item-management/command/createTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/createTaxonomyNode.test.ts +9 -9
- package/src/modules/item-management/command/createTaxonomyNode.ts +33 -14
- package/src/modules/item-management/command/deactivateItem.generated.ts +1 -1
- package/src/modules/item-management/command/deactivateItem.test.ts +12 -18
- package/src/modules/item-management/command/deactivateItem.ts +9 -5
- package/src/modules/item-management/command/deleteItem.generated.ts +1 -1
- package/src/modules/item-management/command/deleteItem.test.ts +10 -16
- package/src/modules/item-management/command/deleteItem.ts +9 -5
- package/src/modules/item-management/command/deleteTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/deleteTaxonomyNode.test.ts +10 -16
- package/src/modules/item-management/command/deleteTaxonomyNode.ts +22 -12
- package/src/modules/item-management/command/moveTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/moveTaxonomyNode.test.ts +10 -10
- package/src/modules/item-management/command/moveTaxonomyNode.ts +63 -19
- package/src/modules/item-management/command/reactivateItem.generated.ts +1 -1
- package/src/modules/item-management/command/reactivateItem.test.ts +12 -18
- package/src/modules/item-management/command/reactivateItem.ts +9 -5
- package/src/modules/item-management/command/removeItemFromTaxonomy.generated.ts +1 -1
- package/src/modules/item-management/command/removeItemFromTaxonomy.test.ts +9 -16
- package/src/modules/item-management/command/removeItemFromTaxonomy.ts +11 -6
- package/src/modules/item-management/command/updateItem.generated.ts +1 -1
- package/src/modules/item-management/command/updateItem.test.ts +16 -16
- package/src/modules/item-management/command/updateItem.ts +11 -6
- package/src/modules/item-management/command/updateTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/updateTaxonomyNode.test.ts +14 -20
- package/src/modules/item-management/command/updateTaxonomyNode.ts +9 -6
- package/src/modules/item-management/docs/commands/ActivateItem.md +8 -0
- package/src/modules/item-management/docs/commands/AssignItemToTaxonomy.md +7 -0
- package/src/modules/item-management/docs/commands/CreateItem.md +10 -0
- package/src/modules/item-management/docs/commands/CreateTaxonomyNode.md +9 -0
- package/src/modules/item-management/docs/commands/DeactivateItem.md +8 -0
- package/src/modules/item-management/docs/commands/DeleteItem.md +7 -0
- package/src/modules/item-management/docs/commands/DeleteTaxonomyNode.md +7 -0
- package/src/modules/item-management/docs/commands/MoveTaxonomyNode.md +10 -0
- package/src/modules/item-management/docs/commands/ReactivateItem.md +8 -0
- package/src/modules/item-management/docs/commands/RemoveItemFromTaxonomy.md +5 -0
- package/src/modules/item-management/docs/commands/UpdateItem.md +15 -0
- package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +9 -0
- package/src/modules/item-management/docs/queries/CalculateNodeDepth.md +8 -0
- package/src/modules/item-management/docs/queries/CalculateSubtreeDepth.md +7 -0
- package/src/modules/item-management/docs/queries/DetectCircularReference.md +9 -0
- package/src/modules/item-management/docs/queries/GetItem.md +9 -0
- package/src/modules/item-management/docs/queries/GetItemTaxonomyAssignment.md +5 -0
- package/src/modules/item-management/docs/queries/GetTaxonomyNode.md +7 -0
- package/src/modules/item-management/docs/queries/GetTaxonomyNodeAssignments.md +5 -0
- package/src/modules/item-management/docs/queries/GetTaxonomyNodeChildren.md +6 -0
- package/src/modules/item-management/index.ts +0 -51
- package/src/modules/item-management/lib/errors.generated.ts +24 -24
- package/src/modules/item-management/lib/permissions.generated.ts +1 -1
- package/src/modules/item-management/lib/types.ts +1 -1
- package/src/modules/item-management/module.ts +1 -1
- package/src/modules/item-management/query/calculateNodeDepth.generated.ts +1 -1
- package/src/modules/item-management/query/calculateNodeDepth.test.ts +21 -6
- package/src/modules/item-management/query/calculateNodeDepth.ts +2 -2
- package/src/modules/item-management/query/calculateSubtreeDepth.generated.ts +1 -1
- package/src/modules/item-management/query/calculateSubtreeDepth.test.ts +17 -5
- package/src/modules/item-management/query/calculateSubtreeDepth.ts +2 -2
- package/src/modules/item-management/query/detectCircularReference.generated.ts +1 -1
- package/src/modules/item-management/query/detectCircularReference.test.ts +25 -7
- package/src/modules/item-management/query/detectCircularReference.ts +4 -4
- package/src/modules/item-management/query/getItem.generated.ts +1 -1
- package/src/modules/item-management/query/getItem.test.ts +25 -7
- package/src/modules/item-management/query/getItem.ts +2 -2
- package/src/modules/item-management/query/getItemTaxonomyAssignment.generated.ts +1 -1
- package/src/modules/item-management/query/getItemTaxonomyAssignment.test.ts +9 -3
- package/src/modules/item-management/query/getItemTaxonomyAssignment.ts +2 -2
- package/src/modules/item-management/query/getTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNode.test.ts +17 -5
- package/src/modules/item-management/query/getTaxonomyNode.ts +2 -2
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.generated.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.test.ts +9 -3
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.ts +2 -2
- package/src/modules/item-management/query/getTaxonomyNodeChildren.generated.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNodeChildren.test.ts +13 -4
- package/src/modules/item-management/query/getTaxonomyNodeChildren.ts +2 -2
- package/src/modules/item-management/tailor.config.ts +6 -4
- package/src/modules/item-management/tailor.d.ts +13 -0
- package/src/modules/primitives/README.md +8 -0
- package/src/modules/primitives/command/activateCategory.generated.ts +1 -1
- package/src/modules/primitives/command/activateCategory.test.ts +8 -18
- package/src/modules/primitives/command/activateCategory.ts +9 -5
- package/src/modules/primitives/command/activateCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/activateCurrency.test.ts +8 -18
- package/src/modules/primitives/command/activateCurrency.ts +9 -5
- package/src/modules/primitives/command/activateUnit.generated.ts +1 -1
- package/src/modules/primitives/command/activateUnit.test.ts +8 -15
- package/src/modules/primitives/command/activateUnit.ts +9 -5
- package/src/modules/primitives/command/createCategory.generated.ts +1 -1
- package/src/modules/primitives/command/createCategory.test.ts +29 -44
- package/src/modules/primitives/command/createCategory.ts +9 -5
- package/src/modules/primitives/command/createCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/createCurrency.test.ts +53 -78
- package/src/modules/primitives/command/createCurrency.ts +9 -6
- package/src/modules/primitives/command/createExchangeRate.generated.ts +1 -1
- package/src/modules/primitives/command/createExchangeRate.test.ts +59 -97
- package/src/modules/primitives/command/createExchangeRate.ts +13 -7
- package/src/modules/primitives/command/createUnit.generated.ts +1 -1
- package/src/modules/primitives/command/createUnit.test.ts +59 -90
- package/src/modules/primitives/command/createUnit.ts +9 -6
- package/src/modules/primitives/command/deactivateCategory.generated.ts +1 -1
- package/src/modules/primitives/command/deactivateCategory.test.ts +15 -33
- package/src/modules/primitives/command/deactivateCategory.ts +9 -5
- package/src/modules/primitives/command/deactivateCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/deactivateCurrency.test.ts +12 -26
- package/src/modules/primitives/command/deactivateCurrency.ts +9 -5
- package/src/modules/primitives/command/deactivateUnit.generated.ts +1 -1
- package/src/modules/primitives/command/deactivateUnit.test.ts +15 -30
- package/src/modules/primitives/command/deactivateUnit.ts +14 -7
- package/src/modules/primitives/command/setBaseCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/setBaseCurrency.test.ts +18 -40
- package/src/modules/primitives/command/setBaseCurrency.ts +15 -7
- package/src/modules/primitives/command/setReferenceUnit.generated.ts +1 -1
- package/src/modules/primitives/command/setReferenceUnit.test.ts +22 -44
- package/src/modules/primitives/command/setReferenceUnit.ts +21 -9
- package/src/modules/primitives/docs/commands/ActivateCategory.md +6 -0
- package/src/modules/primitives/docs/commands/ActivateCurrency.md +6 -0
- package/src/modules/primitives/docs/commands/ActivateUnit.md +6 -0
- package/src/modules/primitives/docs/commands/CreateCategory.md +6 -0
- package/src/modules/primitives/docs/commands/CreateCurrency.md +10 -0
- package/src/modules/primitives/docs/commands/CreateExchangeRate.md +11 -0
- package/src/modules/primitives/docs/commands/CreateUnit.md +10 -0
- package/src/modules/primitives/docs/commands/DeactivateCategory.md +7 -0
- package/src/modules/primitives/docs/commands/DeactivateCurrency.md +7 -0
- package/src/modules/primitives/docs/commands/DeactivateUnit.md +7 -0
- package/src/modules/primitives/docs/commands/SetBaseCurrency.md +7 -0
- package/src/modules/primitives/docs/commands/SetReferenceUnit.md +7 -0
- package/src/modules/primitives/docs/queries/ConvertAmount.md +14 -0
- package/src/modules/primitives/docs/queries/ConvertQuantity.md +13 -0
- package/src/modules/primitives/docs/queries/GetBaseCurrency.md +5 -0
- package/src/modules/primitives/docs/queries/GetCurrency.md +7 -0
- package/src/modules/primitives/docs/queries/GetUnit.md +7 -0
- package/src/modules/primitives/docs/queries/GetUoMCategory.md +7 -0
- package/src/modules/primitives/docs/queries/ListUnitsByCategory.md +15 -5
- package/src/modules/primitives/index.ts +0 -49
- package/src/modules/primitives/lib/errors.generated.ts +23 -23
- package/src/modules/primitives/lib/permissions.generated.ts +1 -1
- package/src/modules/primitives/lib/types.ts +1 -1
- package/src/modules/primitives/module.ts +1 -1
- package/src/modules/primitives/query/convertAmount.generated.ts +1 -1
- package/src/modules/primitives/query/convertAmount.test.ts +110 -77
- package/src/modules/primitives/query/convertAmount.ts +61 -47
- package/src/modules/primitives/query/convertQuantity.generated.ts +1 -1
- package/src/modules/primitives/query/convertQuantity.test.ts +99 -69
- package/src/modules/primitives/query/convertQuantity.ts +12 -10
- package/src/modules/primitives/query/getBaseCurrency.generated.ts +1 -1
- package/src/modules/primitives/query/getBaseCurrency.test.ts +10 -4
- package/src/modules/primitives/query/getBaseCurrency.ts +2 -2
- package/src/modules/primitives/query/getCurrency.generated.ts +1 -1
- package/src/modules/primitives/query/getCurrency.test.ts +17 -5
- package/src/modules/primitives/query/getCurrency.ts +2 -2
- package/src/modules/primitives/query/getUnit.generated.ts +1 -1
- package/src/modules/primitives/query/getUnit.test.ts +17 -5
- package/src/modules/primitives/query/getUnit.ts +2 -2
- package/src/modules/primitives/query/getUoMCategory.generated.ts +1 -1
- package/src/modules/primitives/query/getUoMCategory.test.ts +17 -5
- package/src/modules/primitives/query/getUoMCategory.ts +2 -2
- package/src/modules/primitives/query/listUnitsByCategory.generated.ts +1 -1
- package/src/modules/primitives/query/listUnitsByCategory.test.ts +80 -0
- package/src/modules/primitives/query/listUnitsByCategory.ts +19 -3
- package/src/modules/primitives/tailor.config.ts +6 -4
- package/src/modules/primitives/tailor.d.ts +13 -0
- package/src/modules/product-management/README.md +52 -0
- package/src/modules/product-management/command/activateProduct.generated.ts +6 -0
- package/src/modules/product-management/command/activateProduct.test.ts +40 -0
- package/src/modules/product-management/command/activateProduct.ts +42 -0
- package/src/modules/product-management/command/assignProductToCategory.generated.ts +6 -0
- package/src/modules/product-management/command/assignProductToCategory.test.ts +90 -0
- package/src/modules/product-management/command/assignProductToCategory.ts +62 -0
- package/src/modules/product-management/command/createProduct.generated.ts +6 -0
- package/src/modules/product-management/command/createProduct.test.ts +149 -0
- package/src/modules/product-management/command/createProduct.ts +73 -0
- package/src/modules/product-management/command/createProductAttribute.generated.ts +6 -0
- package/src/modules/product-management/command/createProductAttribute.test.ts +70 -0
- package/src/modules/product-management/command/createProductAttribute.ts +53 -0
- package/src/modules/product-management/command/createProductAttributeValue.generated.ts +6 -0
- package/src/modules/product-management/command/createProductAttributeValue.test.ts +68 -0
- package/src/modules/product-management/command/createProductAttributeValue.ts +63 -0
- package/src/modules/product-management/command/createProductCategory.generated.ts +6 -0
- package/src/modules/product-management/command/createProductCategory.test.ts +135 -0
- package/src/modules/product-management/command/createProductCategory.ts +82 -0
- package/src/modules/product-management/command/deactivateProduct.generated.ts +6 -0
- package/src/modules/product-management/command/deactivateProduct.test.ts +40 -0
- package/src/modules/product-management/command/deactivateProduct.ts +42 -0
- package/src/modules/product-management/command/deleteProduct.generated.ts +6 -0
- package/src/modules/product-management/command/deleteProduct.test.ts +42 -0
- package/src/modules/product-management/command/deleteProduct.ts +42 -0
- package/src/modules/product-management/command/deleteProductAttribute.generated.ts +6 -0
- package/src/modules/product-management/command/deleteProductAttribute.test.ts +49 -0
- package/src/modules/product-management/command/deleteProductAttribute.ts +45 -0
- package/src/modules/product-management/command/deleteProductAttributeValue.generated.ts +6 -0
- package/src/modules/product-management/command/deleteProductAttributeValue.test.ts +71 -0
- package/src/modules/product-management/command/deleteProductAttributeValue.ts +68 -0
- package/src/modules/product-management/command/deleteProductCategory.generated.ts +6 -0
- package/src/modules/product-management/command/deleteProductCategory.test.ts +74 -0
- package/src/modules/product-management/command/deleteProductCategory.ts +53 -0
- package/src/modules/product-management/command/generateVariants.generated.ts +6 -0
- package/src/modules/product-management/command/generateVariants.test.ts +365 -0
- package/src/modules/product-management/command/generateVariants.ts +168 -0
- package/src/modules/product-management/command/moveProductCategory.generated.ts +6 -0
- package/src/modules/product-management/command/moveProductCategory.test.ts +170 -0
- package/src/modules/product-management/command/moveProductCategory.ts +124 -0
- package/src/modules/product-management/command/reactivateProduct.generated.ts +6 -0
- package/src/modules/product-management/command/reactivateProduct.test.ts +40 -0
- package/src/modules/product-management/command/reactivateProduct.ts +42 -0
- package/src/modules/product-management/command/removeProductFromCategory.generated.ts +6 -0
- package/src/modules/product-management/command/removeProductFromCategory.test.ts +42 -0
- package/src/modules/product-management/command/removeProductFromCategory.ts +32 -0
- package/src/modules/product-management/command/setProductAttributeAssignment.generated.ts +6 -0
- package/src/modules/product-management/command/setProductAttributeAssignment.test.ts +206 -0
- package/src/modules/product-management/command/setProductAttributeAssignment.ts +102 -0
- package/src/modules/product-management/command/updateProduct.generated.ts +6 -0
- package/src/modules/product-management/command/updateProduct.test.ts +168 -0
- package/src/modules/product-management/command/updateProduct.ts +95 -0
- package/src/modules/product-management/command/updateProductAttribute.generated.ts +6 -0
- package/src/modules/product-management/command/updateProductAttribute.test.ts +101 -0
- package/src/modules/product-management/command/updateProductAttribute.ts +68 -0
- package/src/modules/product-management/command/updateProductAttributeValue.generated.ts +6 -0
- package/src/modules/product-management/command/updateProductAttributeValue.test.ts +80 -0
- package/src/modules/product-management/command/updateProductAttributeValue.ts +58 -0
- package/src/modules/product-management/command/updateProductCategory.generated.ts +6 -0
- package/src/modules/product-management/command/updateProductCategory.test.ts +80 -0
- package/src/modules/product-management/command/updateProductCategory.ts +66 -0
- package/src/modules/product-management/db/product.ts +47 -0
- package/src/modules/product-management/db/productAttribute.ts +26 -0
- package/src/modules/product-management/db/productAttributeAssignment.ts +58 -0
- package/src/modules/product-management/db/productAttributeValue.ts +39 -0
- package/src/modules/product-management/db/productCategory.ts +34 -0
- package/src/modules/product-management/db/productCategoryAssignment.ts +49 -0
- package/src/modules/product-management/db/productVariant.ts +52 -0
- package/src/modules/product-management/docs/commands/ActivateProduct.md +39 -0
- package/src/modules/product-management/docs/commands/AssignProductToCategory.md +43 -0
- package/src/modules/product-management/docs/commands/CreateProduct.md +48 -0
- package/src/modules/product-management/docs/commands/CreateProductAttribute.md +39 -0
- package/src/modules/product-management/docs/commands/CreateProductAttributeValue.md +42 -0
- package/src/modules/product-management/docs/commands/CreateProductCategory.md +54 -0
- package/src/modules/product-management/docs/commands/DeactivateProduct.md +39 -0
- package/src/modules/product-management/docs/commands/DeleteProduct.md +42 -0
- package/src/modules/product-management/docs/commands/DeleteProductAttribute.md +39 -0
- package/src/modules/product-management/docs/commands/DeleteProductAttributeValue.md +42 -0
- package/src/modules/product-management/docs/commands/DeleteProductCategory.md +43 -0
- package/src/modules/product-management/docs/commands/GenerateVariants.md +68 -0
- package/src/modules/product-management/docs/commands/MoveProductCategory.md +54 -0
- package/src/modules/product-management/docs/commands/ReactivateProduct.md +38 -0
- package/src/modules/product-management/docs/commands/RemoveProductFromCategory.md +34 -0
- package/src/modules/product-management/docs/commands/SetProductAttributeAssignment.md +62 -0
- package/src/modules/product-management/docs/commands/UpdateProduct.md +61 -0
- package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +46 -0
- package/src/modules/product-management/docs/commands/UpdateProductAttributeValue.md +47 -0
- package/src/modules/product-management/docs/commands/UpdateProductCategory.md +46 -0
- package/src/modules/product-management/docs/features/attribute-management.md +48 -0
- package/src/modules/product-management/docs/features/product-category.md +71 -0
- package/src/modules/product-management/docs/features/product-lifecycle.md +66 -0
- package/src/modules/product-management/docs/features/variant-generation.md +77 -0
- package/src/modules/product-management/docs/models/Product.md +58 -0
- package/src/modules/product-management/docs/models/ProductAttribute.md +37 -0
- package/src/modules/product-management/docs/models/ProductAttributeAssignment.md +41 -0
- package/src/modules/product-management/docs/models/ProductAttributeValue.md +40 -0
- package/src/modules/product-management/docs/models/ProductCategory.md +46 -0
- package/src/modules/product-management/docs/models/ProductCategoryAssignment.md +37 -0
- package/src/modules/product-management/docs/models/ProductVariant.md +41 -0
- package/src/modules/product-management/docs/queries/CalculateCategoryDepth.md +47 -0
- package/src/modules/product-management/docs/queries/DetectCategoryCircularReference.md +51 -0
- package/src/modules/product-management/docs/queries/GetProduct.md +42 -0
- package/src/modules/product-management/docs/queries/GetProductAttribute.md +42 -0
- package/src/modules/product-management/docs/queries/GetProductAttributeAssignment.md +34 -0
- package/src/modules/product-management/docs/queries/GetProductAttributeValue.md +40 -0
- package/src/modules/product-management/docs/queries/GetProductCategory.md +42 -0
- package/src/modules/product-management/docs/queries/GetProductCategoryAssignment.md +34 -0
- package/src/modules/product-management/docs/queries/GetProductVariant.md +41 -0
- package/src/modules/product-management/docs/queries/ListAttributeAssignmentsByAttribute.md +34 -0
- package/src/modules/product-management/docs/queries/ListCategoryAssignmentsByProduct.md +35 -0
- package/src/modules/product-management/docs/queries/ListProductAttributeAssignments.md +34 -0
- package/src/modules/product-management/docs/queries/ListProductAttributeValues.md +36 -0
- package/src/modules/product-management/docs/queries/ListProductCategoryAssignments.md +34 -0
- package/src/modules/product-management/docs/queries/ListProductCategoryChildren.md +34 -0
- package/src/modules/product-management/docs/queries/ListProductVariants.md +34 -0
- package/src/modules/product-management/generated/enums.ts +9 -0
- package/src/modules/product-management/generated/kysely-tailordb.ts +100 -0
- package/src/modules/product-management/index.ts +2 -0
- package/src/modules/product-management/lib/_db_deps.ts +17 -0
- package/src/modules/product-management/lib/errors.generated.ts +152 -0
- package/src/modules/product-management/lib/permissions.generated.ts +25 -0
- package/src/modules/product-management/lib/types.ts +51 -0
- package/src/modules/product-management/module.ts +201 -0
- package/src/modules/product-management/query/calculateCategoryDepth.generated.ts +5 -0
- package/src/modules/product-management/query/calculateCategoryDepth.test.ts +72 -0
- package/src/modules/product-management/query/calculateCategoryDepth.ts +37 -0
- package/src/modules/product-management/query/detectCategoryCircularReference.generated.ts +5 -0
- package/src/modules/product-management/query/detectCategoryCircularReference.test.ts +72 -0
- package/src/modules/product-management/query/detectCategoryCircularReference.ts +44 -0
- package/src/modules/product-management/query/getProduct.generated.ts +5 -0
- package/src/modules/product-management/query/getProduct.test.ts +59 -0
- package/src/modules/product-management/query/getProduct.ts +18 -0
- package/src/modules/product-management/query/getProductAttribute.generated.ts +5 -0
- package/src/modules/product-management/query/getProductAttribute.test.ts +59 -0
- package/src/modules/product-management/query/getProductAttribute.ts +18 -0
- package/src/modules/product-management/query/getProductAttributeAssignment.generated.ts +5 -0
- package/src/modules/product-management/query/getProductAttributeAssignment.test.ts +37 -0
- package/src/modules/product-management/query/getProductAttributeAssignment.ts +18 -0
- package/src/modules/product-management/query/getProductAttributeValue.generated.ts +5 -0
- package/src/modules/product-management/query/getProductAttributeValue.test.ts +31 -0
- package/src/modules/product-management/query/getProductAttributeValue.ts +16 -0
- package/src/modules/product-management/query/getProductCategory.generated.ts +5 -0
- package/src/modules/product-management/query/getProductCategory.test.ts +59 -0
- package/src/modules/product-management/query/getProductCategory.ts +18 -0
- package/src/modules/product-management/query/getProductCategoryAssignment.generated.ts +5 -0
- package/src/modules/product-management/query/getProductCategoryAssignment.test.ts +37 -0
- package/src/modules/product-management/query/getProductCategoryAssignment.ts +18 -0
- package/src/modules/product-management/query/getProductVariant.generated.ts +5 -0
- package/src/modules/product-management/query/getProductVariant.test.ts +43 -0
- package/src/modules/product-management/query/getProductVariant.ts +20 -0
- package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.generated.ts +5 -0
- package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.test.ts +31 -0
- package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.ts +16 -0
- package/src/modules/product-management/query/listCategoryAssignmentsByProduct.generated.ts +5 -0
- package/src/modules/product-management/query/listCategoryAssignmentsByProduct.test.ts +31 -0
- package/src/modules/product-management/query/listCategoryAssignmentsByProduct.ts +16 -0
- package/src/modules/product-management/query/listProductAttributeAssignments.generated.ts +5 -0
- package/src/modules/product-management/query/listProductAttributeAssignments.test.ts +31 -0
- package/src/modules/product-management/query/listProductAttributeAssignments.ts +16 -0
- package/src/modules/product-management/query/listProductAttributeValues.generated.ts +5 -0
- package/src/modules/product-management/query/listProductAttributeValues.test.ts +31 -0
- package/src/modules/product-management/query/listProductAttributeValues.ts +17 -0
- package/src/modules/product-management/query/listProductCategoryAssignments.generated.ts +5 -0
- package/src/modules/product-management/query/listProductCategoryAssignments.test.ts +31 -0
- package/src/modules/product-management/query/listProductCategoryAssignments.ts +16 -0
- package/src/modules/product-management/query/listProductCategoryChildren.generated.ts +5 -0
- package/src/modules/product-management/query/listProductCategoryChildren.test.ts +31 -0
- package/src/modules/product-management/query/listProductCategoryChildren.ts +16 -0
- package/src/modules/product-management/query/listProductVariants.generated.ts +5 -0
- package/src/modules/product-management/query/listProductVariants.test.ts +31 -0
- package/src/modules/product-management/query/listProductVariants.ts +16 -0
- package/src/modules/product-management/tailor.config.ts +13 -0
- package/src/modules/product-management/tailor.d.ts +13 -0
- package/src/modules/product-management/testing/fixtures.ts +151 -0
- package/src/modules/user-management/README.md +9 -3
- package/src/modules/user-management/command/activateUser.generated.ts +1 -1
- package/src/modules/user-management/command/activateUser.test.ts +12 -65
- package/src/modules/user-management/command/activateUser.ts +5 -20
- package/src/modules/user-management/command/assignPermissionToRole.generated.ts +1 -1
- package/src/modules/user-management/command/assignPermissionToRole.test.ts +25 -60
- package/src/modules/user-management/command/assignPermissionToRole.ts +5 -24
- package/src/modules/user-management/command/assignRoleToUser.generated.ts +1 -1
- package/src/modules/user-management/command/assignRoleToUser.test.ts +35 -87
- package/src/modules/user-management/command/assignRoleToUser.ts +5 -24
- package/src/modules/user-management/command/createPermission.generated.ts +1 -1
- package/src/modules/user-management/command/createPermission.test.ts +23 -33
- package/src/modules/user-management/command/createPermission.ts +4 -5
- package/src/modules/user-management/command/createRole.generated.ts +1 -1
- package/src/modules/user-management/command/createRole.test.ts +17 -27
- package/src/modules/user-management/command/createRole.ts +4 -5
- package/src/modules/user-management/command/createUser.generated.ts +1 -1
- package/src/modules/user-management/command/createUser.test.ts +31 -118
- package/src/modules/user-management/command/createUser.ts +7 -25
- package/src/modules/user-management/command/deactivateUser.generated.ts +1 -1
- package/src/modules/user-management/command/deactivateUser.test.ts +12 -65
- package/src/modules/user-management/command/deactivateUser.ts +6 -21
- package/src/modules/user-management/command/reactivateUser.generated.ts +1 -1
- package/src/modules/user-management/command/reactivateUser.test.ts +13 -66
- package/src/modules/user-management/command/reactivateUser.ts +5 -20
- package/src/modules/user-management/command/revokePermissionFromRole.generated.ts +1 -1
- package/src/modules/user-management/command/revokePermissionFromRole.test.ts +24 -62
- package/src/modules/user-management/command/revokePermissionFromRole.ts +5 -24
- package/src/modules/user-management/command/revokeRoleFromUser.generated.ts +1 -1
- package/src/modules/user-management/command/revokeRoleFromUser.test.ts +24 -60
- package/src/modules/user-management/command/revokeRoleFromUser.ts +5 -24
- package/src/modules/user-management/docs/commands/ActivateUser.md +7 -0
- package/src/modules/user-management/docs/commands/AssignPermissionToRole.md +7 -0
- package/src/modules/user-management/docs/commands/AssignRoleToUser.md +9 -0
- package/src/modules/user-management/docs/commands/CreatePermission.md +12 -0
- package/src/modules/user-management/docs/commands/CreateRole.md +9 -0
- package/src/modules/user-management/docs/commands/CreateUser.md +11 -0
- package/src/modules/user-management/docs/commands/DeactivateUser.md +7 -0
- package/src/modules/user-management/docs/commands/ReactivateUser.md +7 -0
- package/src/modules/user-management/docs/commands/RevokePermissionFromRole.md +7 -0
- package/src/modules/user-management/docs/commands/RevokeRoleFromUser.md +7 -0
- package/src/modules/user-management/index.ts +0 -30
- package/src/modules/user-management/lib/errors.generated.ts +14 -14
- package/src/modules/user-management/lib/permissions.generated.ts +1 -2
- package/src/modules/user-management/lib/recomputeUserPermissions.ts +4 -3
- package/src/modules/user-management/lib/types.ts +1 -1
- package/src/modules/user-management/module.ts +2 -7
- package/src/modules/user-management/tailor.config.ts +6 -4
- package/src/modules/user-management/tailor.d.ts +13 -0
- package/src/modules/user-management/testing/fixtures.ts +1 -20
- package/src/schemas.ts +1 -1
- package/src/{modules/shared → shared}/defineCommand.test.ts +23 -7
- package/src/{modules/shared → shared}/defineCommand.ts +19 -10
- package/src/{modules/shared/internal.ts → shared/index.ts} +9 -1
- package/src/shared/pagination.test.ts +43 -0
- package/src/shared/pagination.ts +22 -0
- package/src/{modules/shared → shared}/types.ts +13 -0
- package/src/{modules/testing → testing}/index.ts +14 -7
- package/src/testing.ts +1 -1
- package/src/util.ts +8 -0
- package/templates/config/license.config.json +4 -0
- package/templates/scaffold/app/backend/.env.example +1 -0
- package/templates/scaffold/app/backend/__dot__gitignore +4 -0
- package/templates/scaffold/app/backend/eslint.config.js +32 -0
- package/templates/scaffold/app/backend/package.json +31 -0
- package/templates/scaffold/app/backend/seed/data/AuditEvent.jsonl +0 -0
- package/templates/scaffold/app/backend/seed/data/Permission.jsonl +0 -0
- package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +20 -0
- package/templates/scaffold/app/backend/seed/data/Role.jsonl +0 -0
- package/templates/scaffold/app/backend/seed/data/Role.schema.ts +20 -0
- package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +0 -0
- package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +24 -0
- package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -0
- package/templates/scaffold/app/backend/seed/data/User.schema.ts +20 -0
- package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +0 -0
- package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +24 -0
- package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -0
- package/templates/scaffold/app/backend/seed/data/_User.schema.ts +30 -0
- package/templates/scaffold/app/backend/seed/exec.mjs +659 -0
- package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +3 -0
- package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +3 -0
- package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +83 -0
- package/templates/scaffold/app/backend/src/modules.ts +9 -0
- package/templates/scaffold/app/backend/src/resolvers/createUser.ts +46 -0
- package/templates/scaffold/app/backend/tailor.config.ts +68 -0
- package/templates/scaffold/app/backend/tailor.d.ts +15 -0
- package/templates/scaffold/app/backend/tsconfig.json +19 -0
- package/templates/scaffold/app/docs/actors/.gitkeep +0 -0
- package/templates/scaffold/app/docs/business-flow/.gitkeep +0 -0
- package/templates/scaffold/app/docs/resolver/.gitkeep +0 -0
- package/templates/scaffold/app/docs/screen/.gitkeep +0 -0
- package/templates/scaffold/app/frontend/.env.example +2 -0
- package/templates/scaffold/app/frontend/__dot__gitignore +3 -0
- package/templates/scaffold/app/frontend/components.json +23 -0
- package/templates/scaffold/app/frontend/eslint.config.js +48 -0
- package/templates/scaffold/app/frontend/index.html +13 -0
- package/templates/scaffold/app/frontend/package.json +53 -0
- package/templates/scaffold/app/frontend/scripts/generate-graphql.mjs +6 -0
- package/templates/scaffold/app/frontend/src/App.tsx +58 -0
- package/templates/scaffold/app/frontend/src/components/composed/empty-state.tsx +26 -0
- package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +28 -0
- package/templates/scaffold/app/frontend/src/components/composed/loading.tsx +13 -0
- package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +39 -0
- package/templates/scaffold/app/frontend/src/components/ui/button.tsx +60 -0
- package/templates/scaffold/app/frontend/src/components/ui/card.tsx +75 -0
- package/templates/scaffold/app/frontend/src/components/ui/form.tsx +152 -0
- package/templates/scaffold/app/frontend/src/components/ui/input.tsx +21 -0
- package/templates/scaffold/app/frontend/src/components/ui/label.tsx +21 -0
- package/templates/scaffold/app/frontend/src/components/ui/spinner.tsx +16 -0
- package/templates/scaffold/app/frontend/src/components/ui/table.tsx +90 -0
- package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +103 -0
- package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1235 -0
- package/templates/scaffold/app/frontend/src/graphql/index.ts +15 -0
- package/templates/scaffold/app/frontend/src/index.css +5 -0
- package/templates/scaffold/app/frontend/src/lib/auth-client.ts +17 -0
- package/templates/scaffold/app/frontend/src/lib/utils.ts +6 -0
- package/templates/scaffold/app/frontend/src/main.tsx +10 -0
- package/templates/scaffold/app/frontend/src/pages/page.tsx +20 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/page.tsx +19 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +97 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +58 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +51 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +101 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +99 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/create/page.tsx +19 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +61 -0
- package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +21 -0
- package/templates/scaffold/app/frontend/tsconfig.app.json +35 -0
- package/templates/scaffold/app/frontend/tsconfig.json +16 -0
- package/templates/scaffold/app/frontend/tsconfig.node.json +23 -0
- package/templates/scaffold/app/frontend/vite.config.ts +23 -0
- package/templates/scaffold/module/command/.gitkeep +0 -0
- package/templates/scaffold/module/db/.gitkeep +0 -0
- package/templates/scaffold/module/executor/.gitkeep +0 -0
- package/templates/scaffold/module/generated/.gitkeep +0 -0
- package/templates/scaffold/module/index.ts +2 -0
- package/templates/scaffold/module/lib/errors.ts +1 -0
- package/templates/scaffold/module/lib/types.ts +4 -0
- package/templates/scaffold/module/module.ts +7 -0
- package/templates/scaffold/module/permissions.ts +3 -0
- package/templates/scaffold/module/query/.gitkeep +0 -0
- package/templates/scaffold/module/tailor.config.ts +13 -0
- package/templates/scaffold/module/testing/fixtures.ts +1 -0
- package/templates/workflows/erp-kit-check.yml +37 -0
- package/dist/cli.js +0 -1654
- package/skills/erp-kit-app-2-breakdown/SKILL.md +0 -88
- package/skills/erp-kit-app-3-doc-review/SKILL.md +0 -112
- package/skills/erp-kit-app-4-impl-spec/SKILL.md +0 -116
- package/skills/erp-kit-app-5-implementation/references/backend.md +0 -232
- package/skills/erp-kit-module-1-docs/SKILL.md +0 -111
- package/skills/erp-kit-module-2-feature-breakdown/SKILL.md +0 -76
- package/skills/erp-kit-module-3-doc-review/SKILL.md +0 -294
- package/skills/erp-kit-module-4-tdd/SKILL.md +0 -94
- package/skills/erp-kit-module-4-tdd/references/exports.md +0 -8
- package/skills/erp-kit-module-5-impl-review/SKILL.md +0 -410
- package/src/commands/scaffold-templates.ts +0 -65
- package/src/modules/shared/index.ts +0 -1
- package/src/modules/user-management/command/logAuditEvent.generated.ts +0 -6
- package/src/modules/user-management/command/logAuditEvent.test.ts +0 -187
- package/src/modules/user-management/command/logAuditEvent.ts +0 -56
- package/src/modules/user-management/db/auditEvent.ts +0 -47
- package/src/modules/user-management/docs/commands/LogAuditEvent.md +0 -37
- package/src/modules/user-management/docs/features/audit-trail.md +0 -80
- package/src/modules/user-management/docs/models/AuditEvent.md +0 -36
- /package/skills/{erp-kit-module-2-feature-breakdown → erp-kit-module-3-plan}/references/naming.md +0 -0
- /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/cross-module-dependency.md +0 -0
- /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/db-relations.md +0 -0
- /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/generated-code.md +0 -0
- /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/models.md +0 -0
- /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/commands.md +0 -0
- /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/testing.md +0 -0
- /package/src/modules/{product-management → audit}/.gitkeep +0 -0
- /package/src/{modules/shared → shared}/createContext.test.ts +0 -0
- /package/src/{modules/shared → shared}/createContext.ts +0 -0
- /package/src/{modules/shared → shared}/definePermissions.test.ts +0 -0
- /package/src/{modules/shared → shared}/definePermissions.ts +0 -0
- /package/src/{modules/shared → shared}/defineQuery.test.ts +0 -0
- /package/src/{modules/shared → shared}/defineQuery.ts +0 -0
- /package/src/{modules/shared → shared}/entityTypes.ts +0 -0
- /package/src/{modules/shared → shared}/errors.ts +0 -0
- /package/src/{modules/shared → shared}/requirePermission.test.ts +0 -0
- /package/src/{modules/shared → shared}/requirePermission.ts +0 -0
- /package/src/{modules/shared → shared}/result.ts +0 -0
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: erp-kit-app-2-breakdown
|
|
3
|
-
description: Create Tier 3 documentation (stories, screens) by breaking down business flows. Use after completing Tier 1-2 documentation with erp-kit-app-1-requirements.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Requirements Breakdown Workflow
|
|
7
|
-
|
|
8
|
-
Break down Tier 2 business flows into Tier 3 documentation: User Stories and Screens.
|
|
9
|
-
|
|
10
|
-
## Prerequisites
|
|
11
|
-
|
|
12
|
-
Tier 1-2 documentation must exist:
|
|
13
|
-
|
|
14
|
-
- `README.md` (requirements)
|
|
15
|
-
- `docs/actors/*.md` (actor definitions)
|
|
16
|
-
- `docs/business-flow/*/README.md` (business workflows)
|
|
17
|
-
|
|
18
|
-
## Workflow Phases
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
ANALYZE → BREAKDOWN → CREATE → VALIDATE
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### Phase 1: Analyze
|
|
25
|
-
|
|
26
|
-
Review existing Tier 2 documentation:
|
|
27
|
-
|
|
28
|
-
1. **Read** all business flow files in `docs/business-flow/`
|
|
29
|
-
2. **Identify** flow steps that represent user actions
|
|
30
|
-
3. **Map** each step to the responsible actor
|
|
31
|
-
4. **Note** data inputs/outputs for each step
|
|
32
|
-
|
|
33
|
-
### Phase 2: Breakdown
|
|
34
|
-
|
|
35
|
-
For each business flow, decompose into stories and screens:
|
|
36
|
-
|
|
37
|
-
| Flow Element | Maps To |
|
|
38
|
-
| ---------------- | ----------- |
|
|
39
|
-
| User action step | Story |
|
|
40
|
-
| UI requirement | Screen |
|
|
41
|
-
| Actor in flow | Story actor |
|
|
42
|
-
|
|
43
|
-
### Phase 3: Create
|
|
44
|
-
|
|
45
|
-
Generate documentation using `erp-kit` CLI:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
# Tier 3: Stories
|
|
49
|
-
erp-kit app scaffold story <app> <flow>/<actor>--<story> --root examples
|
|
50
|
-
|
|
51
|
-
# Tier 3: Screens
|
|
52
|
-
erp-kit app scaffold screen <app> <screen-name> --root examples
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
**Naming conventions:**
|
|
56
|
-
|
|
57
|
-
- Story filename: `<actor>--<story-name>.md` (double-dash separator)
|
|
58
|
-
- Story heading: Title Case of story name (after `--`)
|
|
59
|
-
- Screen filename: kebab-case, noun-focused (e.g., `supplier-list.md`)
|
|
60
|
-
|
|
61
|
-
**After creating stories**, replace `- TBD` placeholders in the `## Stories` section of each business flow README with actual links:
|
|
62
|
-
|
|
63
|
-
```markdown
|
|
64
|
-
- [Story Title](./story/<actor>--<story-name>.md)
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Phase 4: Validate
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
pnpm run app:doc:check
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Schema Reference
|
|
74
|
-
|
|
75
|
-
| Schema | Tier | Output Path |
|
|
76
|
-
| ------------ | ---- | ---------------------------------------------------- |
|
|
77
|
-
| `story.yml` | 3 | `docs/business-flow/<flow>/story/<actor>--<name>.md` |
|
|
78
|
-
| `screen.yml` | 3 | `docs/screen/<name>.md` |
|
|
79
|
-
|
|
80
|
-
## Tips
|
|
81
|
-
|
|
82
|
-
- One business flow typically produces 3-8 stories
|
|
83
|
-
- Stories should be completable in a single user session
|
|
84
|
-
- Screens can be shared across multiple stories
|
|
85
|
-
|
|
86
|
-
## Next Step
|
|
87
|
-
|
|
88
|
-
After completing Tier 3, use `/erp-kit-app-3-doc-review` to validate documentation parity.
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: erp-kit-app-3-doc-review
|
|
3
|
-
description: Review documentation parity between Tier 2 (business flows, actors) and Tier 3 (stories, screens). Use when validating that all business flow steps have corresponding stories, and that screens are properly linked.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Documentation Parity Review Workflow
|
|
7
|
-
|
|
8
|
-
Review **documentation consistency** between Tier 2 and Tier 3 documentation.
|
|
9
|
-
|
|
10
|
-
## Purpose
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
Business Flow (Tier 2) → Stories (Tier 3) → Screens (Tier 3)
|
|
14
|
-
↓ ↓ ↓
|
|
15
|
-
Flow Steps User Actions UI Components
|
|
16
|
-
Actors Involved Scenario Patterns Screen Types
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## When to Use
|
|
20
|
-
|
|
21
|
-
- After writing Tier 3 documentation, check for gaps
|
|
22
|
-
- Before proceeding to Tier 4 (implementation spec)
|
|
23
|
-
- Quality check during documentation review
|
|
24
|
-
|
|
25
|
-
## Workflow
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
READ DOCS → PARITY CHECKS → REPORT
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### Step 1: Read All Documentation
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
examples/<app-name>/docs/business-flow/*/README.md # Flows
|
|
35
|
-
examples/<app-name>/docs/business-flow/*/story/*.md # Stories
|
|
36
|
-
examples/<app-name>/docs/screen/*.md # Screens
|
|
37
|
-
examples/<app-name>/docs/actors/*.md # Actors
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### Step 2: Parity Checks
|
|
41
|
-
|
|
42
|
-
#### Business Flow → Story
|
|
43
|
-
|
|
44
|
-
| Check | Question |
|
|
45
|
-
| --------------- | ----------------------------------------------- |
|
|
46
|
-
| Story existence | Does each flow step have a corresponding story? |
|
|
47
|
-
| Actor coverage | Are all actors in flow represented in stories? |
|
|
48
|
-
| Link validity | Do story links in flow README resolve? |
|
|
49
|
-
|
|
50
|
-
#### Actor → Business Flow
|
|
51
|
-
|
|
52
|
-
| Check | Question |
|
|
53
|
-
| -------------- | ----------------------------------------- |
|
|
54
|
-
| Flow existence | Do all flows in "Authorized Flows" exist? |
|
|
55
|
-
| Link validity | Do flow links resolve correctly? |
|
|
56
|
-
|
|
57
|
-
#### Story → Screen
|
|
58
|
-
|
|
59
|
-
| Check | Question |
|
|
60
|
-
| ---------------- | ---------------------------------- |
|
|
61
|
-
| Screen existence | Do all screens in story exist? |
|
|
62
|
-
| Link validity | Do screen links resolve correctly? |
|
|
63
|
-
|
|
64
|
-
#### Orphan Detection
|
|
65
|
-
|
|
66
|
-
| Check | Question |
|
|
67
|
-
| -------------- | ------------------------------------------ |
|
|
68
|
-
| Orphan stories | Stories not linked from any business flow? |
|
|
69
|
-
| Orphan screens | Screens not referenced by any story? |
|
|
70
|
-
| Orphan actors | Actors not participating in any flow? |
|
|
71
|
-
|
|
72
|
-
### Step 3: Report
|
|
73
|
-
|
|
74
|
-
```markdown
|
|
75
|
-
## Documentation Parity Review Report
|
|
76
|
-
|
|
77
|
-
**Application:** <app-name>
|
|
78
|
-
|
|
79
|
-
### Summary
|
|
80
|
-
|
|
81
|
-
| Aspect | Status | Details |
|
|
82
|
-
| --------------------- | -------- | ----------------- |
|
|
83
|
-
| Business Flow → Story | ✅/⚠️/❌ | X/Y flows covered |
|
|
84
|
-
| Actor → Flow | ✅/⚠️/❌ | All links valid |
|
|
85
|
-
| Story → Screen | ✅/⚠️/❌ | X missing screens |
|
|
86
|
-
| Orphan Detection | ✅/⚠️/❌ | N orphans found |
|
|
87
|
-
|
|
88
|
-
### Gaps Found
|
|
89
|
-
|
|
90
|
-
- [ ] Missing: <item>
|
|
91
|
-
- [ ] Broken link: <source> → <target>
|
|
92
|
-
- [ ] Orphan: <file>
|
|
93
|
-
|
|
94
|
-
### Recommendations
|
|
95
|
-
|
|
96
|
-
1. Create missing: ...
|
|
97
|
-
2. Fix broken links: ...
|
|
98
|
-
3. Remove or link orphans: ...
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
## Link Format Reference
|
|
102
|
-
|
|
103
|
-
| From | To | Format |
|
|
104
|
-
| ------------- | ------------- | ----------------------------------- |
|
|
105
|
-
| Business Flow | Story | `./story/<actor>--<name>.md` |
|
|
106
|
-
| Business Flow | Actor | `../../actors/<actor>.md` |
|
|
107
|
-
| Actor | Business Flow | `../business-flow/<flow>/README.md` |
|
|
108
|
-
| Story | Screen | `../../../screen/<screen>.md` |
|
|
109
|
-
|
|
110
|
-
## Next Step
|
|
111
|
-
|
|
112
|
-
After fixing all issues, use `/erp-kit-app-4-impl-spec` to create implementation specifications from screen and story documentation.
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: erp-kit-app-4-impl-spec
|
|
3
|
-
description: Create Tier 4 documentation (resolvers) for GraphQL operations. Use after completing documentation review with erp-kit-app-3-doc-review.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Implementation Spec Workflow
|
|
7
|
-
|
|
8
|
-
Create Tier 4 documentation: GraphQL Resolvers (mutations and queries).
|
|
9
|
-
|
|
10
|
-
## Prerequisites
|
|
11
|
-
|
|
12
|
-
Tier 1-3 documentation must exist:
|
|
13
|
-
|
|
14
|
-
- `README.md` (requirements)
|
|
15
|
-
- `docs/actors/*.md` (actors)
|
|
16
|
-
- `docs/business-flow/*/README.md` (flows)
|
|
17
|
-
- `docs/business-flow/*/story/*.md` (stories)
|
|
18
|
-
- `docs/screen/*.md` (screens)
|
|
19
|
-
|
|
20
|
-
## Workflow Phases
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
ANALYZE → IDENTIFY → CHECK MODULES → CREATE → VALIDATE
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### Phase 1: Analyze
|
|
27
|
-
|
|
28
|
-
Read all story files and identify:
|
|
29
|
-
|
|
30
|
-
1. **Operations** that modify data → mutations
|
|
31
|
-
2. **Operations** that retrieve data → queries
|
|
32
|
-
3. **Error scenarios** for each operation
|
|
33
|
-
|
|
34
|
-
### Phase 2: Identify
|
|
35
|
-
|
|
36
|
-
Map stories to resolvers:
|
|
37
|
-
|
|
38
|
-
| Story Element | Resolver Type |
|
|
39
|
-
| -------------------- | ------------- |
|
|
40
|
-
| Create/Update/Delete | Mutation |
|
|
41
|
-
| View/List/Search | Query |
|
|
42
|
-
| Real-time updates | Subscription |
|
|
43
|
-
|
|
44
|
-
**Naming:** Use camelCase action-verb names: `create`, `update`, `delete`, `submit`, `approve`
|
|
45
|
-
|
|
46
|
-
### Phase 3: Check Module Dependencies
|
|
47
|
-
|
|
48
|
-
Resolvers reference module commands. Before creating resolver docs, verify required modules exist.
|
|
49
|
-
|
|
50
|
-
**Check existing modules:**
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
ls packages/erp-kit/src/modules/
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
**Check module commands:**
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
ls packages/erp-kit/src/modules/<module-name>/docs/commands/
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
**Map resolvers to modules:**
|
|
63
|
-
|
|
64
|
-
| Resolver Operation | Typical Module |
|
|
65
|
-
| ------------------ | --------------------- |
|
|
66
|
-
| User invite/roles | `user-management` |
|
|
67
|
-
| Supplier CRUD | `supplier-management` |
|
|
68
|
-
| Document handling | `document-management` |
|
|
69
|
-
| Task workflows | `task-management` |
|
|
70
|
-
|
|
71
|
-
**If modules don't exist:**
|
|
72
|
-
|
|
73
|
-
1. **Identify needed modules** - Group resolver operations by domain
|
|
74
|
-
2. **Create module docs first** - Use `erp-kit-module-1-docs` skill
|
|
75
|
-
3. **Return to Tier 4** - After modules have documented commands
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
Tier 4 blocked → Create modules → Return to Tier 4
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**Only reference existing module commands** in resolver documentation. Never reference modules or commands that don't exist.
|
|
82
|
-
|
|
83
|
-
### Phase 4: Create
|
|
84
|
-
|
|
85
|
-
Generate documentation using `erp-kit` CLI:
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
erp-kit scaffold --app-root examples resolver <app> <resolver-name>
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
**Naming conventions:**
|
|
92
|
-
|
|
93
|
-
- Filename must match H1 heading exactly (camelCase)
|
|
94
|
-
- Action-focused names: `createSupplierInvitation.md`
|
|
95
|
-
|
|
96
|
-
### Phase 5: Validate
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
pnpm run app:doc:check
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## Schema Reference
|
|
103
|
-
|
|
104
|
-
| Schema | Tier | Output Path |
|
|
105
|
-
| -------------- | ---- | ------------------------- |
|
|
106
|
-
| `resolver.yml` | 4 | `docs/resolver/<name>.md` |
|
|
107
|
-
|
|
108
|
-
## Tips
|
|
109
|
-
|
|
110
|
-
- One story may require 1-3 resolvers
|
|
111
|
-
- Group related operations logically
|
|
112
|
-
- Document all error scenarios
|
|
113
|
-
|
|
114
|
-
## Next Step
|
|
115
|
-
|
|
116
|
-
After completing Tier 4, use `/erp-kit-app-5-implementation` to implement backend resolvers and frontend pages.
|
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
# Backend Implementation Patterns
|
|
2
|
-
|
|
3
|
-
## Table of Contents
|
|
4
|
-
|
|
5
|
-
- [Backend Scaffold](#backend-scaffold)
|
|
6
|
-
- [Module Wiring](#module-wiring)
|
|
7
|
-
- [Application Config](#application-config)
|
|
8
|
-
- [Resolver Patterns](#resolver-patterns)
|
|
9
|
-
- [Executor Patterns](#executor-pattern)
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## Backend Scaffold
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
backend/
|
|
17
|
-
├── src/
|
|
18
|
-
│ ├── modules.ts # Module wiring
|
|
19
|
-
│ ├── generated/kysely-tailordb.ts # Auto-generated (placeholder until deploy)
|
|
20
|
-
│ └── modules/<module-name>/
|
|
21
|
-
│ ├── resolvers/<name>.ts
|
|
22
|
-
│ └── executors/<name>.ts
|
|
23
|
-
├── seed/ # Seed data scripts
|
|
24
|
-
├── package.json
|
|
25
|
-
├── tsconfig.json
|
|
26
|
-
├── eslint.config.js
|
|
27
|
-
└── tailor.config.ts
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
`package.json` key dependencies and scripts:
|
|
31
|
-
|
|
32
|
-
```json
|
|
33
|
-
{
|
|
34
|
-
"type": "module",
|
|
35
|
-
"scripts": {
|
|
36
|
-
"generate": "tailor-sdk generate",
|
|
37
|
-
"deploy": "tailor-sdk apply --env-file-if-exists .env",
|
|
38
|
-
"lint": "eslint --cache .",
|
|
39
|
-
"typecheck": "tsc --noEmit",
|
|
40
|
-
"seed": "node --env-file-if-exists=.env seed/exec.mjs"
|
|
41
|
-
},
|
|
42
|
-
"dependencies": {
|
|
43
|
-
"@tailor-platform/erp-kit": "...",
|
|
44
|
-
"@tailor-platform/function-kysely-tailordb": "...",
|
|
45
|
-
"kysely": "..."
|
|
46
|
-
},
|
|
47
|
-
"devDependencies": {
|
|
48
|
-
"@tailor-platform/sdk": "...",
|
|
49
|
-
"@tailor-platform/function-types": "...",
|
|
50
|
-
"typescript": "..."
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
`tsconfig.json` — requires `@/*` path alias and `@tailor-platform/function-types` in types:
|
|
56
|
-
|
|
57
|
-
```json
|
|
58
|
-
{
|
|
59
|
-
"compilerOptions": {
|
|
60
|
-
"target": "ES2022",
|
|
61
|
-
"module": "ESNext",
|
|
62
|
-
"moduleResolution": "bundler",
|
|
63
|
-
"strict": true,
|
|
64
|
-
"noEmit": true,
|
|
65
|
-
"skipLibCheck": true,
|
|
66
|
-
"types": ["node", "@tailor-platform/function-types"],
|
|
67
|
-
"paths": { "@/*": ["./src/*"] }
|
|
68
|
-
},
|
|
69
|
-
"include": ["**/*.ts"]
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## Module Wiring
|
|
76
|
-
|
|
77
|
-
`src/modules.ts` composes erp-kit modules and exports their parts for resolver use.
|
|
78
|
-
|
|
79
|
-
```ts
|
|
80
|
-
import { db as field } from "@tailor-platform/sdk";
|
|
81
|
-
import {
|
|
82
|
-
definePrimitivesModule,
|
|
83
|
-
defineUserManagementModule,
|
|
84
|
-
defineItemManagementModule,
|
|
85
|
-
} from "@tailor-platform/erp-kit/module";
|
|
86
|
-
|
|
87
|
-
const primitivesModules = definePrimitivesModule({});
|
|
88
|
-
|
|
89
|
-
const umModules = defineUserManagementModule({
|
|
90
|
-
dbNamespace: "main-db",
|
|
91
|
-
user: {
|
|
92
|
-
fields: {
|
|
93
|
-
/* custom fields */
|
|
94
|
-
},
|
|
95
|
-
additionalStatuses: ["SUSPENDED"],
|
|
96
|
-
},
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
// Pass inter-module dependencies explicitly
|
|
100
|
-
const imModules = defineItemManagementModule({
|
|
101
|
-
primitives: {
|
|
102
|
-
db: { unit: primitivesModules.db.unit },
|
|
103
|
-
queries: { getUnit: primitivesModules.queries.getUnit },
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
// Destructure db into individual table exports (required for DB scanner)
|
|
108
|
-
export const { db: primitivesDb, commands: primitivesCommands } = primitivesModules;
|
|
109
|
-
export const { uomCategory, unit, currency, exchangeRate } = primitivesDb;
|
|
110
|
-
|
|
111
|
-
export const { db: umDb, executors: umExecutors, commands: umCommands } = umModules;
|
|
112
|
-
export const { user, permission, role, userRole, rolePermission, auditEvent } = umDb;
|
|
113
|
-
|
|
114
|
-
export const { db: imDb, commands: imCommands } = imModules;
|
|
115
|
-
export const { item, taxonomyNode, itemTaxonomyAssignment } = imDb;
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Key conventions:
|
|
119
|
-
|
|
120
|
-
- Prefix exports to avoid collisions (`umCommands`, `imCommands`, `primitivesCommands`)
|
|
121
|
-
- Every module's `db` must be destructured into individual table exports — the DB scanner only picks up named exports
|
|
122
|
-
- Extract individual executors for re-export in executor files
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Application Config
|
|
127
|
-
|
|
128
|
-
`tailor.config.ts` defines the Tailor application configuration. Key structure:
|
|
129
|
-
|
|
130
|
-
```ts
|
|
131
|
-
export default defineConfig({
|
|
132
|
-
name: "<app-name>",
|
|
133
|
-
cors: ["http://localhost:5173", website.url],
|
|
134
|
-
db: {
|
|
135
|
-
"main-db": {
|
|
136
|
-
files: [`./src/modules.ts`],
|
|
137
|
-
gqlOperations: "query",
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
|
-
resolver: {
|
|
141
|
-
"main-resolver": { files: [`./src/modules/**/resolvers/**/*.ts`] },
|
|
142
|
-
},
|
|
143
|
-
executor: { files: [`./src/modules/**/executors/**/*.ts`] },
|
|
144
|
-
auth: auth,
|
|
145
|
-
idp: [idp],
|
|
146
|
-
staticWebsites: [website],
|
|
147
|
-
});
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
Key points:
|
|
151
|
-
|
|
152
|
-
- `gqlOperations: "query"` — Auto-generates list/get GraphQL queries for all DB types
|
|
153
|
-
- Glob patterns for resolver/executor discovery
|
|
154
|
-
- See [SDK configuration docs](https://raw.githubusercontent.com/tailor-platform/sdk/refs/heads/main/packages/sdk/docs/configuration.md) for full config options
|
|
155
|
-
|
|
156
|
-
### Auth configuration
|
|
157
|
-
|
|
158
|
-
- Define IdP (`defineIdp`), Auth (`defineAuth`), and static website (`defineStaticWebSite`) using Tailor SDK
|
|
159
|
-
- Prefer stable default naming: auth `default`, IdP `default`, OAuth2 client `default`
|
|
160
|
-
- `userProfile.type` must reference the `user` DB type from `modules.ts`
|
|
161
|
-
- `userProfile.usernameField`: stable unique field (e.g., `email`)
|
|
162
|
-
- Include static website URL and localhost in CORS: `cors: ["http://localhost:5173", website.url]`
|
|
163
|
-
- Frontend `VITE_TAILOR_CLIENT_ID` must come from `tailor-sdk oauth2client get default --json` — do not hardcode
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## Resolver Patterns
|
|
168
|
-
|
|
169
|
-
All resolvers export a default `createResolver()` from `@tailor-platform/sdk`.
|
|
170
|
-
|
|
171
|
-
### Verify command input types
|
|
172
|
-
|
|
173
|
-
Before implementing a resolver, read the command's type definition:
|
|
174
|
-
|
|
175
|
-
```
|
|
176
|
-
node_modules/@tailor-platform/erp-kit/src/modules/<module>/command/<commandName>.ts
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
The command source is the ground truth. Do not invent fields that don't exist, and preserve the required/optional distinction.
|
|
180
|
-
|
|
181
|
-
### SDK type system
|
|
182
|
-
|
|
183
|
-
See [Resolver docs](https://raw.githubusercontent.com/tailor-platform/sdk/refs/heads/main/packages/sdk/docs/services/resolver.md) for the `t` namespace.
|
|
184
|
-
|
|
185
|
-
`t.array()` and `t.boolean()` do **not exist**. Never attempt to use them.
|
|
186
|
-
|
|
187
|
-
### Command-based mutation
|
|
188
|
-
|
|
189
|
-
The most common pattern. Key points:
|
|
190
|
-
|
|
191
|
-
```ts
|
|
192
|
-
import { createContext } from "@tailor-platform/erp-kit/app";
|
|
193
|
-
|
|
194
|
-
body: async (context) => {
|
|
195
|
-
const db = getDB("main-db");
|
|
196
|
-
const result = await imCommands.createItem(db, { ...context.input }, createContext(context));
|
|
197
|
-
if (!result.ok) throw result.error;
|
|
198
|
-
return { id: result.value.item.id, ... };
|
|
199
|
-
},
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
- `context.input.optionalField ?? undefined` — Convert null to undefined for command inputs
|
|
203
|
-
- `result.value.entity.nullableField ?? ""` — Handle nullable return values
|
|
204
|
-
- `createContext(context)` wraps the resolver context for erp-kit commands
|
|
205
|
-
- `getDB("main-db")` — Namespace must match `tailor.config.ts`
|
|
206
|
-
|
|
207
|
-
### Error handling
|
|
208
|
-
|
|
209
|
-
When the resolver spec documents specific error codes, use `result.error.code` to switch:
|
|
210
|
-
|
|
211
|
-
```ts
|
|
212
|
-
if (!result.ok) {
|
|
213
|
-
switch (result.error.code) {
|
|
214
|
-
case "USER_NOT_FOUND":
|
|
215
|
-
throw new Error(`User ${context.input.userId} not found`);
|
|
216
|
-
// ...
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
Do not directly mutate module-owned tables via Kysely — always use module commands.
|
|
222
|
-
|
|
223
|
-
---
|
|
224
|
-
|
|
225
|
-
## Executor Patterns
|
|
226
|
-
|
|
227
|
-
Executors re-export module-provided event handlers. One file per executor, no custom logic:
|
|
228
|
-
|
|
229
|
-
```ts
|
|
230
|
-
import { rolePermissionCreated } from "@/modules";
|
|
231
|
-
export default rolePermissionCreated;
|
|
232
|
-
```
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: erp-kit-module-1-docs
|
|
3
|
-
description: Create ERP module documentation following framework schemas. Use when starting a new module, documenting an existing module, or when user asks to create module docs, feature docs, or design module features. Guides collaborative research, scoping, and iterative feature breakdown.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Module Documentation Workflow
|
|
7
|
-
|
|
8
|
-
Collaborative workflow for creating ERP module documentation. Human and AI work together through research, scoping, design validation, and iterative refinement.
|
|
9
|
-
|
|
10
|
-
## Workflow Phases
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
RESEARCH → SCOPE → DESIGN → CREATE → REVIEW
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
### Phase 1: Research
|
|
17
|
-
|
|
18
|
-
Study established ERP solutions for the module domain:
|
|
19
|
-
|
|
20
|
-
1. **Web search** Odoo, Oracle ERP Cloud, SAP for the domain (e.g., "Odoo inventory management features")
|
|
21
|
-
2. **Fetch documentation** from official sources when available
|
|
22
|
-
3. **Identify** common features, models, workflows, compliance requirements
|
|
23
|
-
4. **Summarize** findings before proceeding
|
|
24
|
-
|
|
25
|
-
Key ERP references:
|
|
26
|
-
|
|
27
|
-
- Odoo: https://www.odoo.com/documentation/19.0/applications.html
|
|
28
|
-
- Oracle: https://docs.oracle.com/en/cloud/saas/index.html
|
|
29
|
-
- SAP: Search SAP Docs
|
|
30
|
-
|
|
31
|
-
### Phase 2: Scope
|
|
32
|
-
|
|
33
|
-
Present scope options to user. Use AskUserQuestion:
|
|
34
|
-
|
|
35
|
-
| Option | Description |
|
|
36
|
-
| ---------------------- | ----------------------------------------------------------------------- |
|
|
37
|
-
| **Minimal** | Core entities only, basic CRUD, no workflows |
|
|
38
|
-
| **Core (Recommended)** | Essential features for production use, foundational for other modules |
|
|
39
|
-
| **Comprehensive** | Full feature set including advanced workflows, compliance, integrations |
|
|
40
|
-
|
|
41
|
-
Wait for user selection before proceeding.
|
|
42
|
-
|
|
43
|
-
### Phase 3: Design
|
|
44
|
-
|
|
45
|
-
Present features incrementally for validation:
|
|
46
|
-
|
|
47
|
-
1. **List proposed features** as a table (feature name, purpose)
|
|
48
|
-
2. **Wait for user approval** of feature list
|
|
49
|
-
3. For each feature, briefly describe:
|
|
50
|
-
- What it does
|
|
51
|
-
- Key scenarios
|
|
52
|
-
4. **Ask**: "Does this feature breakdown look right?"
|
|
53
|
-
|
|
54
|
-
Keep descriptions concise (~100-200 words per section). Do not present all details at once.
|
|
55
|
-
|
|
56
|
-
### Phase 4: Create
|
|
57
|
-
|
|
58
|
-
Generate documentation following framework schemas.
|
|
59
|
-
|
|
60
|
-
**File structure:**
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
modules/<module-name>/
|
|
64
|
-
├── README.md # module.yml schema
|
|
65
|
-
└── docs/
|
|
66
|
-
└── features/
|
|
67
|
-
└── <feature-name>.md # feature.yml schema
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**Naming conventions:**
|
|
71
|
-
|
|
72
|
-
- Feature files: kebab-case (e.g., `role-based-access-control.md`)
|
|
73
|
-
- Headings: Title Case
|
|
74
|
-
|
|
75
|
-
Create with `erp-kit` CLI:
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
erp-kit scaffold --modules-root modules module <module-name>
|
|
79
|
-
erp-kit scaffold --modules-root modules feature <module-name> <feature-name>
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Phase 5: Review
|
|
83
|
-
|
|
84
|
-
After creating docs, user reviews and may request changes:
|
|
85
|
-
|
|
86
|
-
**Split detection**: If a feature covers multiple distinct workflows, split into separate feature files.
|
|
87
|
-
|
|
88
|
-
**Iteration pattern:**
|
|
89
|
-
|
|
90
|
-
1. User identifies issue (e.g., "X is too broad, split it")
|
|
91
|
-
2. Create new feature file for split-out content
|
|
92
|
-
3. Remove split content from original file
|
|
93
|
-
4. Update README.md feature list if needed
|
|
94
|
-
|
|
95
|
-
Continue iterating until user approves.
|
|
96
|
-
|
|
97
|
-
# Framework Schemas Reference
|
|
98
|
-
|
|
99
|
-
Schemas are bundled in `@tailor-platform/erp-kit`.
|
|
100
|
-
|
|
101
|
-
## Validation
|
|
102
|
-
|
|
103
|
-
Always run before completing:
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
pnpm run module:doc:check
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## References
|
|
110
|
-
|
|
111
|
-
- [Module structure](../erp-kit-module-shared/references/structure.md)
|