@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,91 +1,4 @@
|
|
|
1
|
-
# Frontend
|
|
2
|
-
|
|
3
|
-
## Table of Contents
|
|
4
|
-
|
|
5
|
-
- [Frontend Scaffold](#frontend-scaffold)
|
|
6
|
-
- [Frontend Pages](#frontend-pages)
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Frontend Scaffold
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
frontend/
|
|
14
|
-
├── src/
|
|
15
|
-
│ ├── main.tsx, App.tsx, index.css
|
|
16
|
-
│ ├── graphql/
|
|
17
|
-
│ │ ├── index.ts # gql.tada setup
|
|
18
|
-
│ │ └── generated/ # Placeholder until backend deploy
|
|
19
|
-
│ ├── lib/
|
|
20
|
-
│ │ ├── auth-client.ts
|
|
21
|
-
│ │ └── utils.ts # cn() utility
|
|
22
|
-
│ ├── providers/
|
|
23
|
-
│ │ └── graphql-provider.tsx # urql client with DPoP auth
|
|
24
|
-
│ ├── components/
|
|
25
|
-
│ │ ├── ui/ # shadcn/Radix primitives
|
|
26
|
-
│ │ └── composed/ # empty-state, error-fallback, loading
|
|
27
|
-
│ └── pages/
|
|
28
|
-
│ └── <domain>/
|
|
29
|
-
│ ├── page.tsx # Module redirect (REQUIRED)
|
|
30
|
-
│ └── <entity>/
|
|
31
|
-
│ ├── page.tsx # ListView
|
|
32
|
-
│ ├── components/<entities>-table.tsx
|
|
33
|
-
│ ├── create/page.tsx + components/create-<entity>-form.tsx
|
|
34
|
-
│ └── [id]/
|
|
35
|
-
│ ├── page.tsx # DetailView
|
|
36
|
-
│ ├── components/<entity>-detail.tsx, <entity>-actions.tsx
|
|
37
|
-
│ └── edit/page.tsx + components/edit-<entity>-form.tsx
|
|
38
|
-
├── scripts/generate-graphql.mjs
|
|
39
|
-
├── package.json, vite.config.ts, tsconfig.json, eslint.config.js
|
|
40
|
-
└── components.json
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
`package.json` key dependencies and scripts:
|
|
44
|
-
|
|
45
|
-
```json
|
|
46
|
-
{
|
|
47
|
-
"type": "module",
|
|
48
|
-
"scripts": {
|
|
49
|
-
"dev": "vite",
|
|
50
|
-
"build": "tsc -b && vite build",
|
|
51
|
-
"generate": "node --env-file=.env ./scripts/generate-graphql.mjs",
|
|
52
|
-
"lint": "eslint .",
|
|
53
|
-
"typecheck": "tsc --noEmit"
|
|
54
|
-
},
|
|
55
|
-
"dependencies": {
|
|
56
|
-
"@tailor-platform/app-shell": "...",
|
|
57
|
-
"gql.tada": "...",
|
|
58
|
-
"urql": "...",
|
|
59
|
-
"react-hook-form": "...",
|
|
60
|
-
"@hookform/resolvers": "...",
|
|
61
|
-
"zod": "...",
|
|
62
|
-
"tailwindcss": "...",
|
|
63
|
-
"lucide-react": "..."
|
|
64
|
-
},
|
|
65
|
-
"devDependencies": {
|
|
66
|
-
"@tailor-platform/app-shell-vite-plugin": "...",
|
|
67
|
-
"@tailor-platform/sdk": "...",
|
|
68
|
-
"@tailwindcss/vite": "...",
|
|
69
|
-
"vite": "...",
|
|
70
|
-
"typescript": "..."
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
`scripts/generate-graphql.mjs` — fetches the GraphQL schema from the deployed backend:
|
|
76
|
-
|
|
77
|
-
```js
|
|
78
|
-
import { execSync } from "node:child_process";
|
|
79
|
-
const url = process.env.VITE_TAILOR_APP_URL;
|
|
80
|
-
execSync(`pnpm gql-tada generate schema "${url}/query"`);
|
|
81
|
-
execSync("pnpm gql-tada generate output");
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Before deployment, create empty placeholders for `src/graphql/generated/schema.graphql` and `graphql-env.d.ts` so the project compiles. After backend deployment, configure `.env` with `VITE_TAILOR_APP_URL` and `VITE_TAILOR_CLIENT_ID`, then run `pnpm generate` to regenerate them.
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## Frontend Pages
|
|
1
|
+
# Frontend Pages
|
|
89
2
|
|
|
90
3
|
### GraphQL Setup
|
|
91
4
|
|
|
@@ -146,6 +59,8 @@ Create and edit forms share the same structure:
|
|
|
146
59
|
|
|
147
60
|
- **React Hook Form + Zod** for validation with `zodResolver`
|
|
148
61
|
- **urql `useMutation`** for GraphQL mutations
|
|
62
|
+
- **Cache invalidation**: pass `additionalTypenames` to the mutation context so urql invalidates related queries (e.g., `createUser(values, { additionalTypenames: ["User"] })`)
|
|
63
|
+
- **Toast notifications**: use `useToast` from `@tailor-platform/app-shell` (sonner-based, `Toaster` is built into AppShell) for success/error feedback
|
|
149
64
|
- **Navigate `".."`** to go back to list after success
|
|
150
65
|
- Edit form pre-fills `defaultValues` from existing entity via fragment
|
|
151
66
|
|
|
@@ -153,6 +68,7 @@ Create and edit forms share the same structure:
|
|
|
153
68
|
|
|
154
69
|
| Field Type | Component | Zod Schema |
|
|
155
70
|
| ---------- | ------------------------- | ------------------------------- |
|
|
71
|
+
| Email | `<Input type="email" />` | `z.email()` |
|
|
156
72
|
| Text | `<Input />` | `z.string()` |
|
|
157
73
|
| Textarea | `<textarea />` | `z.string()` |
|
|
158
74
|
| Dropdown | `<Select />` | `z.string()` or `z.enum([...])` |
|
|
@@ -201,8 +117,10 @@ const UserQuery = graphql(
|
|
|
201
117
|
|
|
202
118
|
#### App.tsx
|
|
203
119
|
|
|
204
|
-
- `AuthGuard`
|
|
205
|
-
- `GraphQLProvider
|
|
120
|
+
- `AuthGuard`: implement yourself, pass via `guardComponent` prop. AuthProvider shows it automatically when `!isReady || !isAuthenticated`, so the guard only needs to render a sign-in UI — no state checks needed inside it
|
|
121
|
+
- `GraphQLProvider`: pass `authClient.fetch` directly to urql's `fetch` option and `authClient.getAppUri()` for the URL
|
|
122
|
+
- `useAuth()` returns `{ isAuthenticated, isReady, login, logout }` directly (not nested in `authState`)
|
|
123
|
+
- Built-in `me` query returns the current user's `User` record — use it instead of writing a custom resolver for profile info
|
|
206
124
|
- Required env vars: `VITE_TAILOR_APP_URL`, `VITE_TAILOR_CLIENT_ID`
|
|
207
125
|
- Auth client: create once in `src/lib/auth-client.ts` using `createAuthClient({ appUri, clientId })`
|
|
208
126
|
- Sidebar: use `SidebarGroup` + `SidebarItem` for custom ordering
|
|
@@ -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.
|