@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,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: erp-kit-app-7-impl-review
|
|
3
|
+
description: Review implementation parity between documentation and code for app-compose applications. Use after frontend implementation (step 6) to validate code matches documentation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Implementation Parity Review
|
|
7
|
+
|
|
8
|
+
Review **implementation consistency** between Tier 3-4 documentation and actual backend/frontend code.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- After backend and frontend implementation, verify code matches documentation
|
|
13
|
+
- Before merging feature branches
|
|
14
|
+
- Quality check during code review
|
|
15
|
+
|
|
16
|
+
## Step 1: Setup
|
|
17
|
+
|
|
18
|
+
Define shared context for all agents:
|
|
19
|
+
|
|
20
|
+
- `APP_ROOT`: from argument or current working directory. Must contain a `docs/` directory.
|
|
21
|
+
- `APP_NAME`: basename of APP_ROOT
|
|
22
|
+
- `RESOLVER_DOCS`: glob `<APP_ROOT>/docs/resolver/*.md`
|
|
23
|
+
- `SCREEN_DOCS`: glob `<APP_ROOT>/docs/screen/*.md`
|
|
24
|
+
- `BACKEND_RESOLVERS`: glob `<APP_ROOT>/backend/src/modules/*/resolvers/*.ts`
|
|
25
|
+
- `BACKEND_EXECUTORS`: glob `<APP_ROOT>/backend/executors/*.ts`
|
|
26
|
+
- `BACKEND_MODULES`: `<APP_ROOT>/backend/src/modules.ts`
|
|
27
|
+
- `BACKEND_CONFIG`: `<APP_ROOT>/backend/tailor.config.ts`
|
|
28
|
+
- `FRONTEND_PAGES`: glob `<APP_ROOT>/frontend/src/app/(main)/**/*.tsx`
|
|
29
|
+
|
|
30
|
+
Verify at least `RESOLVER_DOCS` or `SCREEN_DOCS` is non-empty. If no docs exist, stop with: "No docs found for app <APP_NAME>."
|
|
31
|
+
|
|
32
|
+
## Step 2: Dispatch Agents (parallelize if possible)
|
|
33
|
+
|
|
34
|
+
Launch 4 Agent tool calls in parallel — one per parity check.
|
|
35
|
+
Each agent receives: APP_NAME, relevant doc/code file paths.
|
|
36
|
+
Each agent returns: structured JSON per [references/impl-parity-report-format.md](references/impl-parity-report-format.md).
|
|
37
|
+
If a doc or code directory is empty, the agent reports "no files found" and skips.
|
|
38
|
+
|
|
39
|
+
| Agent | Prompt Template | Inputs |
|
|
40
|
+
| ----- | -------------------------------------------------------------------------------- | --------------------------------------------------- |
|
|
41
|
+
| 1 | [references/resolver-doc-code-parity.md](references/resolver-doc-code-parity.md) | RESOLVER_DOCS, BACKEND_RESOLVERS, BACKEND_EXECUTORS |
|
|
42
|
+
| 2 | [references/screen-doc-code-parity.md](references/screen-doc-code-parity.md) | SCREEN_DOCS, FRONTEND_PAGES |
|
|
43
|
+
| 3 | [references/module-wiring-parity.md](references/module-wiring-parity.md) | RESOLVER_DOCS, BACKEND_MODULES, BACKEND_CONFIG |
|
|
44
|
+
| 4 | (build verification — inline, no template) | APP_ROOT |
|
|
45
|
+
|
|
46
|
+
For agents 1-3:
|
|
47
|
+
|
|
48
|
+
1. Read the prompt template file
|
|
49
|
+
2. Replace `{{APP_NAME}}` with the resolved app name
|
|
50
|
+
3. Replace doc/code path placeholders with the actual file paths
|
|
51
|
+
4. Dispatch the agent with the filled prompt
|
|
52
|
+
|
|
53
|
+
For agent 4 (build verification):
|
|
54
|
+
|
|
55
|
+
Run build checks inline:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
cd <APP_ROOT>/backend && pnpm lint && pnpm typecheck
|
|
59
|
+
cd <APP_ROOT>/frontend && pnpm lint && pnpm typecheck && pnpm build
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Report pass/fail for each check.
|
|
63
|
+
|
|
64
|
+
## Step 3: Aggregate Results
|
|
65
|
+
|
|
66
|
+
After ALL agents return:
|
|
67
|
+
|
|
68
|
+
1. Collect the JSON results from each agent
|
|
69
|
+
2. Merge all `gaps[]` arrays into a single list
|
|
70
|
+
3. Merge all `inconsistencies[]` arrays into a single list
|
|
71
|
+
4. Deduplicate: if two gaps share the same `source + target + check`, keep only one
|
|
72
|
+
5. Calculate totals across all summaries
|
|
73
|
+
6. Render the final report below
|
|
74
|
+
|
|
75
|
+
## Report Format
|
|
76
|
+
|
|
77
|
+
Render the aggregated results as markdown:
|
|
78
|
+
|
|
79
|
+
### Implementation Parity Review Report
|
|
80
|
+
|
|
81
|
+
**Application:** <APP_NAME>
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### 1. Resolver Doc → Backend Code Coverage
|
|
86
|
+
|
|
87
|
+
| Resolver Doc | Module Command | Implemented | Error Handling | Gap |
|
|
88
|
+
| ------------ | -------------- | ----------- | -------------- | --- |
|
|
89
|
+
|
|
90
|
+
(Populated from agent 1 gaps)
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### 2. Screen Doc → Frontend Code Coverage
|
|
95
|
+
|
|
96
|
+
| Screen Doc | Screen Type | Page Exists | Fields Match | Gap |
|
|
97
|
+
| ---------- | ----------- | ----------- | ------------ | --- |
|
|
98
|
+
|
|
99
|
+
(Populated from agent 2 gaps)
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
### 3. Module Wiring Consistency
|
|
104
|
+
|
|
105
|
+
| Resolver | Required Module | Wired in modules.ts | Config Reference | Gap |
|
|
106
|
+
| -------- | --------------- | ------------------- | ---------------- | --- |
|
|
107
|
+
|
|
108
|
+
(Populated from agent 3 gaps)
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### 4. Build Verification
|
|
113
|
+
|
|
114
|
+
| Check | Backend | Frontend |
|
|
115
|
+
| ----- | ------- | -------- |
|
|
116
|
+
| Lint | | |
|
|
117
|
+
| Types | | |
|
|
118
|
+
| Build | N/A | |
|
|
119
|
+
|
|
120
|
+
(Populated from agent 4 results)
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### 5. Missing Implementation
|
|
125
|
+
|
|
126
|
+
#### Missing Backend Resolvers
|
|
127
|
+
|
|
128
|
+
| Resolver Doc | Expected File | Purpose |
|
|
129
|
+
| ------------ | ------------- | ------- |
|
|
130
|
+
|
|
131
|
+
#### Missing Frontend Pages
|
|
132
|
+
|
|
133
|
+
| Screen Doc | Expected Path | Screen Type |
|
|
134
|
+
| ---------- | ------------- | ----------- |
|
|
135
|
+
|
|
136
|
+
#### Missing Module Wiring
|
|
137
|
+
|
|
138
|
+
| Module | Referenced by Resolver | Status |
|
|
139
|
+
| ------ | ---------------------- | ------ |
|
|
140
|
+
|
|
141
|
+
(Populated from all agents' gaps where status is `fail`)
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
### 6. Inconsistencies
|
|
146
|
+
|
|
147
|
+
| Type | Location | Issue |
|
|
148
|
+
| ---- | -------- | ----- |
|
|
149
|
+
|
|
150
|
+
(Populated from all agents' `inconsistencies[]`)
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
### 7. Summary
|
|
155
|
+
|
|
156
|
+
| Aspect | Status | Details |
|
|
157
|
+
| ---------------------------- | ------ | ----------------- |
|
|
158
|
+
| Resolver Doc → Code Coverage | | X/Y checks passed |
|
|
159
|
+
| Screen Doc → Code Coverage | | X/Y checks passed |
|
|
160
|
+
| Module Wiring Consistency | | X/Y checks passed |
|
|
161
|
+
| Build Verification | | pass / fail |
|
|
162
|
+
|
|
163
|
+
### 8. Recommendations
|
|
164
|
+
|
|
165
|
+
Numbered list of actionable fixes, grouped by priority:
|
|
166
|
+
|
|
167
|
+
1. Implement missing resolvers/pages (highest priority)
|
|
168
|
+
2. Fix module wiring gaps
|
|
169
|
+
3. Resolve field/type mismatches
|
|
170
|
+
4. Fix build errors
|
|
171
|
+
|
|
172
|
+
## References
|
|
173
|
+
|
|
174
|
+
- [Implementation parity report format](references/impl-parity-report-format.md)
|
|
175
|
+
- For backend patterns, see erp-kit-app-5-impl-backend
|
|
176
|
+
- For frontend patterns, see erp-kit-app-6-impl-frontend
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Implementation Parity Report Format
|
|
2
|
+
|
|
3
|
+
All implementation parity check agents return results in this JSON structure.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"check_type": "<one of: resolver-doc-code-parity, screen-doc-code-parity, module-wiring-parity>",
|
|
10
|
+
"app": "<app-name>",
|
|
11
|
+
"gaps": [
|
|
12
|
+
{
|
|
13
|
+
"source": "<source doc or code path>",
|
|
14
|
+
"target": "<target code or doc path, or 'missing'>",
|
|
15
|
+
"check": "<check_id from the agent's parity checks table>",
|
|
16
|
+
"status": "pass | fail | skip",
|
|
17
|
+
"detail": "<human-readable description of the finding>"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"inconsistencies": [
|
|
21
|
+
{
|
|
22
|
+
"type": "<inconsistency type, e.g. type_mismatch, missing_field>",
|
|
23
|
+
"location": "<source vs target description>",
|
|
24
|
+
"detail": "<human-readable description>"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"summary": {
|
|
28
|
+
"total_checks": 0,
|
|
29
|
+
"passed": 0,
|
|
30
|
+
"failed": 0,
|
|
31
|
+
"skipped": 0
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Field Reference
|
|
37
|
+
|
|
38
|
+
### gaps[]
|
|
39
|
+
|
|
40
|
+
One entry per parity check performed. `status` is:
|
|
41
|
+
|
|
42
|
+
- `pass`: doc and code are consistent
|
|
43
|
+
- `fail`: gap or mismatch found
|
|
44
|
+
- `skip`: target code/doc missing or empty, check could not run
|
|
45
|
+
|
|
46
|
+
### inconsistencies[]
|
|
47
|
+
|
|
48
|
+
Cross-cutting issues that don't fit a single gap entry (e.g., type mismatches, naming violations, missing patterns).
|
|
49
|
+
|
|
50
|
+
### summary
|
|
51
|
+
|
|
52
|
+
Aggregate counts. `total_checks = passed + failed + skipped`.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Module Wiring Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
App: {{APP_NAME}}
|
|
6
|
+
Resolver docs: {{RESOLVER_DOCS}}
|
|
7
|
+
Backend modules file: {{BACKEND_MODULES}}
|
|
8
|
+
Backend config file: {{BACKEND_CONFIG}}
|
|
9
|
+
|
|
10
|
+
## Instructions
|
|
11
|
+
|
|
12
|
+
1. Read ALL resolver docs at the paths above
|
|
13
|
+
2. Read the modules file (`src/modules.ts`)
|
|
14
|
+
3. Read the config file (`tailor.config.ts`)
|
|
15
|
+
4. Verify all required modules are wired and configured
|
|
16
|
+
5. Return results as JSON per the Output Format section
|
|
17
|
+
|
|
18
|
+
## Extraction: Resolver Docs
|
|
19
|
+
|
|
20
|
+
From each resolver doc, extract:
|
|
21
|
+
|
|
22
|
+
- Module it depends on (which `defineXxxModule` it needs)
|
|
23
|
+
- Commands it calls (which module command functions)
|
|
24
|
+
|
|
25
|
+
## Extraction: modules.ts
|
|
26
|
+
|
|
27
|
+
From the modules file, extract:
|
|
28
|
+
|
|
29
|
+
- All `defineXxxModule()` calls
|
|
30
|
+
- Inter-module dependency wiring (e.g., primitives passed to item-management)
|
|
31
|
+
- Exported `db`, `commands`, and `executors`
|
|
32
|
+
|
|
33
|
+
## Extraction: tailor.config.ts
|
|
34
|
+
|
|
35
|
+
From the config file, extract:
|
|
36
|
+
|
|
37
|
+
- DB namespace configuration
|
|
38
|
+
- Resolver/executor glob patterns
|
|
39
|
+
- Auth configuration (IdP, Auth, user profile)
|
|
40
|
+
- Generator configuration
|
|
41
|
+
|
|
42
|
+
## Parity Checks
|
|
43
|
+
|
|
44
|
+
| Check ID | Question |
|
|
45
|
+
| -------------------- | ---------------------------------------------------------------- |
|
|
46
|
+
| module_wired | Is every module referenced by resolvers wired in modules.ts? |
|
|
47
|
+
| dependency_order | Are inter-module dependencies passed correctly? |
|
|
48
|
+
| exports_complete | Are db, commands, and executors all exported? |
|
|
49
|
+
| config_resolver_glob | Does the resolver glob in config cover all resolver directories? |
|
|
50
|
+
| config_executor_glob | Does the executor glob in config cover all executor files? |
|
|
51
|
+
| config_db_namespace | Is the DB namespace configured? |
|
|
52
|
+
| config_auth | Is auth configured with IdP, Auth, and user profile? |
|
|
53
|
+
|
|
54
|
+
### How to Check
|
|
55
|
+
|
|
56
|
+
1. Build a set of required modules from resolver docs
|
|
57
|
+
2. Check each required module appears as a `defineXxxModule()` call in modules.ts
|
|
58
|
+
3. Verify dependency wiring (e.g., if item-management resolvers exist, primitives must be wired into it)
|
|
59
|
+
4. Check tailor.config.ts resolver glob pattern covers all module resolver directories
|
|
60
|
+
5. Verify auth is configured if any resolver requires authentication
|
|
61
|
+
|
|
62
|
+
## Common Gap Patterns
|
|
63
|
+
|
|
64
|
+
- **Missing module**: Resolver references a module not wired in modules.ts
|
|
65
|
+
- **Missing dependency**: Module wired but not given required dependencies
|
|
66
|
+
- **Glob mismatch**: Config resolver glob doesn't cover a module's resolvers directory
|
|
67
|
+
- **Missing auth**: Resolvers exist but no auth configured
|
|
68
|
+
- **Missing executors**: Module has event handlers but no executor glob configured
|
|
69
|
+
|
|
70
|
+
## Output Format
|
|
71
|
+
|
|
72
|
+
Return a JSON object:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"check_type": "module-wiring-parity",
|
|
77
|
+
"app": "{{APP_NAME}}",
|
|
78
|
+
"gaps": [...],
|
|
79
|
+
"inconsistencies": [...],
|
|
80
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Resolver Doc → Backend Code Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
App: {{APP_NAME}}
|
|
6
|
+
Resolver docs: {{RESOLVER_DOCS}}
|
|
7
|
+
Backend resolvers: {{BACKEND_RESOLVERS}}
|
|
8
|
+
Backend executors: {{BACKEND_EXECUTORS}}
|
|
9
|
+
|
|
10
|
+
## Instructions
|
|
11
|
+
|
|
12
|
+
1. Read ALL resolver docs at the paths above
|
|
13
|
+
2. Read ALL backend resolver code files at the paths above
|
|
14
|
+
3. Read ALL backend executor code files at the paths above
|
|
15
|
+
4. For each resolver doc, check if it has a corresponding implementation
|
|
16
|
+
5. Return results as JSON per the Output Format section
|
|
17
|
+
|
|
18
|
+
## Extraction: Resolver Docs
|
|
19
|
+
|
|
20
|
+
From each resolver doc, extract:
|
|
21
|
+
|
|
22
|
+
- Resolver name (from filename or heading)
|
|
23
|
+
- Type: Mutation or Query
|
|
24
|
+
- Module and command it calls
|
|
25
|
+
- Input parameters (name, type, required/optional)
|
|
26
|
+
- Error scenarios (error codes and conditions)
|
|
27
|
+
- Expected output shape
|
|
28
|
+
|
|
29
|
+
## Extraction: Backend Code
|
|
30
|
+
|
|
31
|
+
From each resolver file (`src/modules/*/resolvers/*.ts`), extract:
|
|
32
|
+
|
|
33
|
+
- Resolver name (from `createResolver()` call or filename)
|
|
34
|
+
- Module command called (import path and function name)
|
|
35
|
+
- Input parameter handling (`context.input.*` accesses)
|
|
36
|
+
- Error handling (`result.error.code` switch cases)
|
|
37
|
+
- Return value structure
|
|
38
|
+
|
|
39
|
+
From each executor file (`executors/*.ts`), extract:
|
|
40
|
+
|
|
41
|
+
- Executor name and which module event handler it re-exports
|
|
42
|
+
|
|
43
|
+
## Parity Checks
|
|
44
|
+
|
|
45
|
+
| Check ID | Question |
|
|
46
|
+
| -------------------- | --------------------------------------------------------------- |
|
|
47
|
+
| resolver_impl_exists | Does a backend resolver file exist for each resolver doc? |
|
|
48
|
+
| command_reference | Does the resolver code call the correct module command? |
|
|
49
|
+
| input_coverage | Does the resolver handle all documented input parameters? |
|
|
50
|
+
| error_handling | Does the resolver handle all documented error scenarios? |
|
|
51
|
+
| return_shape | Does the resolver return the documented output shape? |
|
|
52
|
+
| executor_exists | Does an executor exist for each module that has event handlers? |
|
|
53
|
+
| no_direct_mutation | Does the resolver avoid directly mutating module-owned tables? |
|
|
54
|
+
|
|
55
|
+
### How to Check
|
|
56
|
+
|
|
57
|
+
1. For each resolver doc, find the corresponding code file by name
|
|
58
|
+
2. Verify the code imports and calls the documented module command
|
|
59
|
+
3. Check that `context.input.*` accesses match documented inputs
|
|
60
|
+
4. Check that error `switch` cases cover all documented error codes
|
|
61
|
+
5. Verify return value structure matches documentation
|
|
62
|
+
6. Check executors re-export module event handlers without custom logic
|
|
63
|
+
|
|
64
|
+
## Common Gap Patterns
|
|
65
|
+
|
|
66
|
+
- **Missing resolver file**: Doc exists but no code file
|
|
67
|
+
- **Wrong command**: Code calls a different module command than documented
|
|
68
|
+
- **Missing input handling**: Doc specifies an input parameter not accessed in code
|
|
69
|
+
- **Missing error cases**: Error scenario in doc not handled in code's switch
|
|
70
|
+
- **Direct table mutation**: Code uses `db.insertInto()` on module-owned tables instead of module commands
|
|
71
|
+
|
|
72
|
+
## Output Format
|
|
73
|
+
|
|
74
|
+
Return a JSON object:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"check_type": "resolver-doc-code-parity",
|
|
79
|
+
"app": "{{APP_NAME}}",
|
|
80
|
+
"gaps": [...],
|
|
81
|
+
"inconsistencies": [...],
|
|
82
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Screen Doc → Frontend Code Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
App: {{APP_NAME}}
|
|
6
|
+
Screen docs: {{SCREEN_DOCS}}
|
|
7
|
+
Frontend pages: {{FRONTEND_PAGES}}
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
1. Read ALL screen docs at the paths above
|
|
12
|
+
2. Read ALL frontend page/component files at the paths above
|
|
13
|
+
3. For each screen doc, check if a corresponding page implementation exists
|
|
14
|
+
4. Return results as JSON per the Output Format section
|
|
15
|
+
|
|
16
|
+
## Extraction: Screen Docs
|
|
17
|
+
|
|
18
|
+
From each screen doc, extract:
|
|
19
|
+
|
|
20
|
+
- Screen name (from filename or heading)
|
|
21
|
+
- Screen type: ListView, Form (create/edit), or DetailView
|
|
22
|
+
- Fields/columns specified
|
|
23
|
+
- Actions specified (create, edit, delete, activate, etc.)
|
|
24
|
+
- Navigation targets
|
|
25
|
+
|
|
26
|
+
## Extraction: Frontend Code
|
|
27
|
+
|
|
28
|
+
From frontend pages, identify:
|
|
29
|
+
|
|
30
|
+
- Page files (`page.tsx`) and their routes
|
|
31
|
+
- Component files (tables, forms, details, actions)
|
|
32
|
+
- GraphQL fragments and queries used
|
|
33
|
+
- Form fields and validation schemas (Zod)
|
|
34
|
+
- Table columns defined
|
|
35
|
+
- Action buttons and navigation
|
|
36
|
+
|
|
37
|
+
### Screen Type → File Pattern
|
|
38
|
+
|
|
39
|
+
| Screen Type | Expected Files |
|
|
40
|
+
| ------------- | -------------------------------------------------------------------- |
|
|
41
|
+
| ListView | `page.tsx` + `components/<entity>-table.tsx` |
|
|
42
|
+
| Form (create) | `create/page.tsx` + `create/components/create-<entity>-form.tsx` |
|
|
43
|
+
| Form (edit) | `[id]/edit/page.tsx` + `[id]/edit/components/edit-<entity>-form.tsx` |
|
|
44
|
+
| DetailView | `[id]/page.tsx` + `[id]/components/<entity>-detail.tsx` |
|
|
45
|
+
|
|
46
|
+
## Parity Checks
|
|
47
|
+
|
|
48
|
+
| Check ID | Question |
|
|
49
|
+
| ----------------- | ------------------------------------------------------------- |
|
|
50
|
+
| page_exists | Does a page file exist for each screen doc? |
|
|
51
|
+
| component_exists | Do the expected components exist for the screen type? |
|
|
52
|
+
| field_coverage | Does the page/component render all documented fields/columns? |
|
|
53
|
+
| action_coverage | Does the page implement all documented actions? |
|
|
54
|
+
| screen_type_match | Does the implementation match the documented screen type? |
|
|
55
|
+
|
|
56
|
+
### How to Check
|
|
57
|
+
|
|
58
|
+
1. For each screen doc, map the screen name to an expected route path
|
|
59
|
+
2. Check if the expected `page.tsx` and component files exist
|
|
60
|
+
3. Read component code and verify documented fields appear (in table columns, form fields, or detail fields)
|
|
61
|
+
4. Verify documented actions appear as buttons, links, or mutations
|
|
62
|
+
5. Confirm the implementation pattern matches the screen type (table for ListView, form for Form, etc.)
|
|
63
|
+
|
|
64
|
+
## Common Gap Patterns
|
|
65
|
+
|
|
66
|
+
- **Missing page**: Screen doc exists but no page file
|
|
67
|
+
- **Missing component**: Page exists but table/form/detail component missing
|
|
68
|
+
- **Missing fields**: Doc specifies columns/fields not rendered in code
|
|
69
|
+
- **Missing actions**: Doc specifies actions not implemented
|
|
70
|
+
- **Type mismatch**: Doc says ListView but implementation is a DetailView
|
|
71
|
+
|
|
72
|
+
## Output Format
|
|
73
|
+
|
|
74
|
+
Return a JSON object:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"check_type": "screen-doc-code-parity",
|
|
79
|
+
"app": "{{APP_NAME}}",
|
|
80
|
+
"gaps": [...],
|
|
81
|
+
"inconsistencies": [...],
|
|
82
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: erp-kit-app-shared
|
|
3
|
+
description: Shared references for erp-kit app skills. Not invoked directly — referenced by erp-kit-app-1 through erp-kit-app-7.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# erp-kit-app-shared
|
|
7
|
+
|
|
8
|
+
Canonical reference files shared across app skills. Individual skills reference these instead of maintaining their own copies.
|
|
9
|
+
|
|
10
|
+
## References
|
|
11
|
+
|
|
12
|
+
- [Schema constraints](references/schema-constraints.md) — H1 heading rules and validation constraints enforced by `erp-kit app check`
|
|
13
|
+
- [Naming conventions](references/naming-conventions.md) — File and heading naming patterns for all doc types
|
|
14
|
+
- [Link format reference](references/link-format-reference.md) — Canonical doc-to-doc link formats across tiers
|
|
15
|
+
- [Resolver classification](references/resolver-classification.md) — Custom vs built-in resolver decision table and operation mapping
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Link Format Reference
|
|
2
|
+
|
|
3
|
+
Canonical link formats used across all documentation tiers.
|
|
4
|
+
|
|
5
|
+
## Doc-to-Doc Links
|
|
6
|
+
|
|
7
|
+
| From | To | Format |
|
|
8
|
+
| ------------- | ------------- | ----------------------------------- |
|
|
9
|
+
| Business Flow | Story | `./story/<actor>--<name>.md` |
|
|
10
|
+
| Business Flow | Actor | `../../actors/<actor>.md` |
|
|
11
|
+
| Actor | Business Flow | `../business-flow/<flow>/README.md` |
|
|
12
|
+
| Story | Screen | `../../../screen/<screen>.md` |
|
|
13
|
+
| Story | Resolver | `../../../resolver/<name>.md` |
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Naming Conventions
|
|
2
|
+
|
|
3
|
+
## File Naming
|
|
4
|
+
|
|
5
|
+
| Doc Type | Pattern | Example |
|
|
6
|
+
| -------- | ------------------------------------ | -------------------------------- |
|
|
7
|
+
| Actor | kebab-case | `sales-representative.md` |
|
|
8
|
+
| Flow | kebab-case directory | `employee-onboarding/README.md` |
|
|
9
|
+
| Story | `<actor>--<story-name>.md` | `admin--create-user.md` |
|
|
10
|
+
| Screen | kebab-case, noun-focused | `supplier-list.md` |
|
|
11
|
+
| Resolver | camelCase action-verb | `createSupplierInvitation.md` |
|
|
12
|
+
|
|
13
|
+
## Heading Conventions
|
|
14
|
+
|
|
15
|
+
See [schema-constraints.md](schema-constraints.md) for H1 heading rules enforced by `erp-kit app check`.
|
|
16
|
+
|
|
17
|
+
Additional conventions:
|
|
18
|
+
|
|
19
|
+
- Story heading: Title Case of story name after `--` prefix (e.g., `admin--create-user.md` → `# Create User`)
|
|
20
|
+
- Screen heading: Title Case of filename slug
|
|
21
|
+
- Resolver heading: camelCase matching filename
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Resolver Classification
|
|
2
|
+
|
|
3
|
+
## Custom vs Built-in
|
|
4
|
+
|
|
5
|
+
| Category | Description | Implementation |
|
|
6
|
+
| -------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
|
|
7
|
+
| **Custom resolvers** | Mutations that call module commands (create, update, activate, deactivate, assign) | Write `createResolver()` files |
|
|
8
|
+
| **Built-in queries** | List and get operations for reading data | Handled automatically by `gqlOperations: "query"` in config — no code needed |
|
|
9
|
+
|
|
10
|
+
Prefer built-in queries over custom resolvers for list/get operations where possible.
|
|
11
|
+
|
|
12
|
+
## Operation → Resolver Mapping
|
|
13
|
+
|
|
14
|
+
| Flow Operation | Resolver Type | Naming Pattern |
|
|
15
|
+
| -------------------- | ------------- | ---------------------- |
|
|
16
|
+
| Create/Add entity | Mutation | `create<Entity>` |
|
|
17
|
+
| Update/Modify entity | Mutation | `update<Entity>` |
|
|
18
|
+
| Delete/Remove entity | Mutation | `delete<Entity>` |
|
|
19
|
+
| Activate entity | Mutation | `activate<Entity>` |
|
|
20
|
+
| Deactivate entity | Mutation | `deactivate<Entity>` |
|
|
21
|
+
| Assign X to Y | Mutation | `assign<X>To<Y>` |
|
|
22
|
+
| Submit/Approve | Mutation | `submit<Entity>` etc. |
|
|
23
|
+
| View/List/Get | Query | Built-in (no resolver) |
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Schema Constraints
|
|
2
|
+
|
|
3
|
+
Rules enforced by `erp-kit app check`. **Never recommend changes that violate them.**
|
|
4
|
+
|
|
5
|
+
## H1 Heading Rules
|
|
6
|
+
|
|
7
|
+
| Doc Type | H1 Rule | Example |
|
|
8
|
+
| ------------- | ---------------------------------------------------- | -------------------------------------------------------- |
|
|
9
|
+
| README.md | Must be `# README` (literal) | `# README` |
|
|
10
|
+
| Actor | Slug must match filename | `admin.md` → `# Admin`, `sales-rep.md` → `# Sales Rep` |
|
|
11
|
+
| Business Flow | Kebab-case matching folder name (`[a-zA-Z0-9_\-]+`) | `employee-onboarding/README.md` → `# employee-onboarding` |
|
|
12
|
+
| Story | Slug matches filename after actor prefix removal | `admin--create-user.md` → `# Create User` |
|
|
13
|
+
|
|
14
|
+
## Requirements Structure
|
|
15
|
+
|
|
16
|
+
The `## Industry Context` section contains `### Target Industry` and `### Domain Terminology` subsections. Requirements are bare list items under `### Domain Terminology` — do **not** add a separate `## Requirements` heading.
|
|
17
|
+
|
|
18
|
+
## Naming Conventions
|
|
19
|
+
|
|
20
|
+
- Files: kebab-case (e.g., `sales-representative.md`)
|
|
21
|
+
- Business flow H1 headings are kebab-case — do **not** flag them as inconsistent with title-case actor headings. They follow different schemas.
|
|
22
|
+
|
|
23
|
+
## Validation Notes
|
|
24
|
+
|
|
25
|
+
- `app check` outputs "No matching files found" for doc types that don't exist yet (e.g., stories at Tier 2, screens at Tier 3). This is expected.
|