@tailor-platform/erp-kit 0.1.1 → 0.2.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 +12 -0
- package/README.md +158 -62
- package/dist/cli.js +1010 -270
- package/package.json +11 -8
- package/schemas/module/command.yml +1 -0
- package/schemas/module/model.yml +14 -0
- package/schemas/module/query.yml +53 -0
- package/skills/{app-compose-1-requirement-analysis → erp-kit-app-1-requirements}/SKILL.md +2 -2
- package/skills/{app-compose-2-requirements-breakdown → erp-kit-app-2-breakdown}/SKILL.md +3 -3
- package/skills/{app-compose-3-doc-review → erp-kit-app-3-doc-review}/SKILL.md +2 -2
- package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/SKILL.md +3 -3
- package/skills/{app-compose-5-design-mock-review → erp-kit-app-5-design-review}/SKILL.md +4 -4
- package/skills/{app-compose-6-implementation-spec → erp-kit-app-6-impl-spec}/SKILL.md +3 -3
- package/skills/{mock-scenario → erp-kit-mock-scenario}/SKILL.md +1 -1
- package/skills/{1-module-docs → erp-kit-module-1-docs}/SKILL.md +2 -2
- package/skills/{2-module-feature-breakdown → erp-kit-module-2-feature-breakdown}/SKILL.md +13 -9
- package/skills/erp-kit-module-2-feature-breakdown/references/naming.md +59 -0
- package/skills/{3-module-doc-review → erp-kit-module-3-doc-review}/SKILL.md +83 -25
- package/skills/erp-kit-module-4-tdd/SKILL.md +94 -0
- package/skills/erp-kit-module-4-tdd/references/cross-module-dependency.md +133 -0
- package/skills/{4-module-tdd-implementation → erp-kit-module-4-tdd}/references/db-relations.md +5 -1
- package/skills/{4-module-tdd-implementation → erp-kit-module-4-tdd}/references/exports.md +1 -1
- package/skills/erp-kit-module-4-tdd/references/generated-code.md +32 -0
- package/skills/{5-module-implementation-review → erp-kit-module-5-impl-review}/SKILL.md +46 -44
- package/skills/erp-kit-module-5-impl-review/references/commands.md +62 -0
- package/skills/erp-kit-module-5-impl-review/references/errors.md +10 -0
- package/skills/{5-module-implementation-review → erp-kit-module-5-impl-review}/references/testing.md +1 -1
- package/skills/erp-kit-module-shared/SKILL.md +16 -0
- package/skills/erp-kit-module-shared/references/commands.md +203 -0
- package/skills/erp-kit-module-shared/references/errors.md +35 -0
- package/skills/erp-kit-module-shared/references/queries.md +168 -0
- package/skills/erp-kit-module-shared/references/structure.md +36 -0
- package/skills/{3-module-doc-review → erp-kit-module-shared}/references/testing.md +4 -3
- package/skills/erp-kit-update/SKILL.md +64 -0
- package/src/cli.doc.test.ts +65 -0
- package/src/cli.ts +3 -117
- package/src/commands/app/index.ts +74 -0
- package/src/commands/check.test.ts +3 -2
- package/src/commands/check.ts +3 -2
- package/src/commands/index.ts +73 -0
- package/src/commands/init.test.ts +22 -5
- package/src/commands/init.ts +25 -16
- package/src/commands/license.ts +193 -0
- package/src/commands/mock/index.ts +2 -2
- package/src/commands/mock/start.ts +1 -1
- package/src/commands/mock/validate.test.ts +1 -1
- package/src/commands/module/generate.ts +35 -0
- package/src/commands/module/index.ts +87 -0
- package/src/commands/module/list.test.ts +57 -0
- package/src/commands/module/list.ts +64 -0
- package/src/commands/scaffold-templates.ts +65 -0
- package/src/commands/scaffold.test.ts +97 -2
- package/src/commands/scaffold.ts +24 -3
- package/src/commands/sync-check.test.ts +88 -1
- package/src/commands/sync-check.ts +41 -2
- package/src/generator/generate-code.test.ts +200 -0
- package/src/generator/generate-code.ts +260 -0
- package/src/generator/parse-command-doc.test.ts +159 -0
- package/src/generator/parse-command-doc.ts +116 -0
- package/src/integration.test.ts +6 -8
- package/src/module.ts +10 -9
- package/src/modules/item-management/README.md +38 -0
- package/src/modules/item-management/command/activateItem.generated.ts +6 -0
- package/src/modules/item-management/command/activateItem.test.ts +76 -0
- package/src/modules/item-management/command/activateItem.ts +42 -0
- package/src/modules/item-management/command/assignItemToTaxonomy.generated.ts +6 -0
- package/src/modules/item-management/command/assignItemToTaxonomy.test.ts +88 -0
- package/src/modules/item-management/command/assignItemToTaxonomy.ts +63 -0
- package/src/modules/item-management/command/createItem.generated.ts +6 -0
- package/src/modules/item-management/command/createItem.test.ts +152 -0
- package/src/modules/item-management/command/createItem.ts +72 -0
- package/src/modules/item-management/command/createTaxonomyNode.generated.ts +6 -0
- package/src/modules/item-management/command/createTaxonomyNode.test.ts +126 -0
- package/src/modules/item-management/command/createTaxonomyNode.ts +70 -0
- package/src/modules/item-management/command/deactivateItem.generated.ts +6 -0
- package/src/modules/item-management/command/deactivateItem.test.ts +76 -0
- package/src/modules/item-management/command/deactivateItem.ts +42 -0
- package/src/modules/item-management/command/deleteItem.generated.ts +6 -0
- package/src/modules/item-management/command/deleteItem.test.ts +61 -0
- package/src/modules/item-management/command/deleteItem.ts +38 -0
- package/src/modules/item-management/command/deleteTaxonomyNode.generated.ts +6 -0
- package/src/modules/item-management/command/deleteTaxonomyNode.test.ts +73 -0
- package/src/modules/item-management/command/deleteTaxonomyNode.ts +50 -0
- package/src/modules/item-management/command/moveTaxonomyNode.generated.ts +6 -0
- package/src/modules/item-management/command/moveTaxonomyNode.test.ts +136 -0
- package/src/modules/item-management/command/moveTaxonomyNode.ts +85 -0
- package/src/modules/item-management/command/reactivateItem.generated.ts +6 -0
- package/src/modules/item-management/command/reactivateItem.test.ts +76 -0
- package/src/modules/item-management/command/reactivateItem.ts +42 -0
- package/src/modules/item-management/command/removeItemFromTaxonomy.generated.ts +6 -0
- package/src/modules/item-management/command/removeItemFromTaxonomy.test.ts +43 -0
- package/src/modules/item-management/command/removeItemFromTaxonomy.ts +30 -0
- package/src/modules/item-management/command/updateItem.generated.ts +6 -0
- package/src/modules/item-management/command/updateItem.test.ts +178 -0
- package/src/modules/item-management/command/updateItem.ts +103 -0
- package/src/modules/item-management/command/updateTaxonomyNode.generated.ts +6 -0
- package/src/modules/item-management/command/updateTaxonomyNode.test.ts +88 -0
- package/src/modules/item-management/command/updateTaxonomyNode.ts +62 -0
- package/src/modules/item-management/db/item.ts +47 -0
- package/src/modules/item-management/db/itemTaxonomyAssignment.ts +49 -0
- package/src/modules/item-management/db/taxonomyNode.ts +34 -0
- package/src/modules/item-management/docs/commands/ActivateItem.md +32 -0
- package/src/modules/item-management/docs/commands/AssignItemToTaxonomy.md +38 -0
- package/src/modules/item-management/docs/commands/CreateItem.md +44 -0
- package/src/modules/item-management/docs/commands/CreateTaxonomyNode.md +44 -0
- package/src/modules/item-management/docs/commands/DeactivateItem.md +34 -0
- package/src/modules/item-management/docs/commands/DeleteItem.md +35 -0
- package/src/modules/item-management/docs/commands/DeleteTaxonomyNode.md +39 -0
- package/src/modules/item-management/docs/commands/MoveTaxonomyNode.md +45 -0
- package/src/modules/item-management/docs/commands/ReactivateItem.md +34 -0
- package/src/modules/item-management/docs/commands/RemoveItemFromTaxonomy.md +30 -0
- package/src/modules/item-management/docs/commands/UpdateItem.md +55 -0
- package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +36 -0
- package/src/modules/item-management/docs/features/item-lifecycle.md +60 -0
- package/src/modules/item-management/docs/features/item-taxonomy.md +65 -0
- package/src/modules/item-management/docs/models/ItemTaxonomyAssignment.md +36 -0
- package/src/modules/item-management/docs/models/TaxonomyNode.md +47 -0
- package/src/modules/item-management/docs/models/item.md +59 -0
- package/src/modules/item-management/docs/queries/CalculateNodeDepth.md +36 -0
- package/src/modules/item-management/docs/queries/CalculateSubtreeDepth.md +40 -0
- package/src/modules/item-management/docs/queries/DetectCircularReference.md +41 -0
- package/src/modules/item-management/docs/queries/GetItem.md +38 -0
- package/src/modules/item-management/docs/queries/GetItemTaxonomyAssignment.md +29 -0
- package/src/modules/item-management/docs/queries/GetTaxonomyNode.md +35 -0
- package/src/modules/item-management/docs/queries/GetTaxonomyNodeAssignments.md +29 -0
- package/src/modules/item-management/docs/queries/GetTaxonomyNodeChildren.md +29 -0
- package/src/modules/item-management/generated/enums.ts +9 -0
- package/src/modules/item-management/generated/kysely-tailordb.ts +62 -0
- package/src/modules/item-management/index.ts +53 -0
- package/src/modules/item-management/lib/_db_deps.ts +13 -0
- package/src/modules/item-management/lib/errors.generated.ts +117 -0
- package/src/modules/item-management/lib/permissions.generated.ts +17 -0
- package/src/modules/item-management/lib/types.ts +19 -0
- package/src/modules/item-management/module.ts +97 -0
- package/src/modules/item-management/query/calculateNodeDepth.generated.ts +5 -0
- package/src/modules/item-management/query/calculateNodeDepth.test.ts +56 -0
- package/src/modules/item-management/query/calculateNodeDepth.ts +28 -0
- package/src/modules/item-management/query/calculateSubtreeDepth.generated.ts +5 -0
- package/src/modules/item-management/query/calculateSubtreeDepth.test.ts +75 -0
- package/src/modules/item-management/query/calculateSubtreeDepth.ts +29 -0
- package/src/modules/item-management/query/detectCircularReference.generated.ts +5 -0
- package/src/modules/item-management/query/detectCircularReference.test.ts +61 -0
- package/src/modules/item-management/query/detectCircularReference.ts +32 -0
- package/src/modules/item-management/query/getItem.generated.ts +5 -0
- package/src/modules/item-management/query/getItem.test.ts +67 -0
- package/src/modules/item-management/query/getItem.ts +20 -0
- package/src/modules/item-management/query/getItemTaxonomyAssignment.generated.ts +5 -0
- package/src/modules/item-management/query/getItemTaxonomyAssignment.test.ts +25 -0
- package/src/modules/item-management/query/getItemTaxonomyAssignment.ts +18 -0
- package/src/modules/item-management/query/getTaxonomyNode.generated.ts +5 -0
- package/src/modules/item-management/query/getTaxonomyNode.test.ts +47 -0
- package/src/modules/item-management/query/getTaxonomyNode.ts +18 -0
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.generated.ts +5 -0
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.test.ts +25 -0
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.ts +16 -0
- package/src/modules/item-management/query/getTaxonomyNodeChildren.generated.ts +5 -0
- package/src/modules/item-management/query/getTaxonomyNodeChildren.test.ts +34 -0
- package/src/modules/item-management/query/getTaxonomyNodeChildren.ts +16 -0
- package/src/modules/item-management/tailor.config.ts +11 -0
- package/src/modules/item-management/testing/fixtures.ts +81 -0
- package/src/modules/primitives/command/activateCategory.generated.ts +6 -0
- package/src/modules/primitives/command/activateCategory.test.ts +11 -29
- package/src/modules/primitives/command/activateCategory.ts +27 -34
- package/src/modules/primitives/command/activateCurrency.generated.ts +6 -0
- package/src/modules/primitives/command/activateCurrency.test.ts +11 -29
- package/src/modules/primitives/command/activateCurrency.ts +27 -34
- package/src/modules/primitives/command/activateUnit.generated.ts +6 -0
- package/src/modules/primitives/command/activateUnit.test.ts +11 -15
- package/src/modules/primitives/command/activateUnit.ts +27 -34
- package/src/modules/primitives/command/createCategory.generated.ts +6 -0
- package/src/modules/primitives/command/createCategory.test.ts +27 -39
- package/src/modules/primitives/command/createCategory.ts +53 -62
- package/src/modules/primitives/command/createCurrency.generated.ts +6 -0
- package/src/modules/primitives/command/createCurrency.test.ts +78 -71
- package/src/modules/primitives/command/createCurrency.ts +43 -48
- package/src/modules/primitives/command/createExchangeRate.generated.ts +6 -0
- package/src/modules/primitives/command/createExchangeRate.test.ts +101 -100
- package/src/modules/primitives/command/createExchangeRate.ts +50 -59
- package/src/modules/primitives/command/createUnit.generated.ts +6 -0
- package/src/modules/primitives/command/createUnit.test.ts +92 -95
- package/src/modules/primitives/command/createUnit.ts +54 -57
- package/src/modules/primitives/command/deactivateCategory.generated.ts +6 -0
- package/src/modules/primitives/command/deactivateCategory.test.ts +27 -28
- package/src/modules/primitives/command/deactivateCategory.ts +43 -50
- package/src/modules/primitives/command/deactivateCurrency.generated.ts +6 -0
- package/src/modules/primitives/command/deactivateCurrency.test.ts +23 -38
- package/src/modules/primitives/command/deactivateCurrency.ts +31 -38
- package/src/modules/primitives/command/deactivateUnit.generated.ts +6 -0
- package/src/modules/primitives/command/deactivateUnit.test.ts +27 -23
- package/src/modules/primitives/command/deactivateUnit.ts +39 -49
- package/src/modules/primitives/command/setBaseCurrency.generated.ts +6 -0
- package/src/modules/primitives/command/setBaseCurrency.test.ts +40 -33
- package/src/modules/primitives/command/setBaseCurrency.ts +43 -50
- package/src/modules/primitives/command/setReferenceUnit.generated.ts +6 -0
- package/src/modules/primitives/command/setReferenceUnit.test.ts +39 -35
- package/src/modules/primitives/command/setReferenceUnit.ts +46 -59
- package/src/modules/primitives/db/unit.ts +13 -3
- package/src/modules/primitives/docs/commands/ActivateCategory.md +1 -2
- package/src/modules/primitives/docs/commands/ActivateCurrency.md +1 -2
- package/src/modules/primitives/docs/commands/ActivateUnit.md +1 -2
- package/src/modules/primitives/docs/commands/CreateCategory.md +1 -4
- package/src/modules/primitives/docs/commands/CreateCurrency.md +3 -4
- package/src/modules/primitives/docs/commands/CreateExchangeRate.md +4 -5
- package/src/modules/primitives/docs/commands/CreateUnit.md +5 -5
- package/src/modules/primitives/docs/commands/DeactivateCategory.md +2 -3
- package/src/modules/primitives/docs/commands/DeactivateCurrency.md +2 -3
- package/src/modules/primitives/docs/commands/DeactivateUnit.md +2 -3
- package/src/modules/primitives/docs/commands/SetBaseCurrency.md +2 -3
- package/src/modules/primitives/docs/commands/SetReferenceUnit.md +2 -3
- package/src/modules/primitives/docs/models/Currency.md +4 -0
- package/src/modules/primitives/docs/models/ExchangeRate.md +4 -1
- package/src/modules/primitives/docs/models/Unit.md +4 -1
- package/src/modules/primitives/docs/models/UoMCategory.md +2 -0
- package/src/modules/primitives/docs/{commands → queries}/ConvertAmount.md +3 -5
- package/src/modules/primitives/docs/{commands → queries}/ConvertQuantity.md +3 -5
- package/src/modules/primitives/docs/queries/GetBaseCurrency.md +32 -0
- package/src/modules/primitives/docs/queries/GetCurrency.md +36 -0
- package/src/modules/primitives/docs/queries/GetUnit.md +36 -0
- package/src/modules/primitives/docs/queries/GetUoMCategory.md +36 -0
- package/src/modules/primitives/docs/queries/ListUnitsByCategory.md +26 -0
- package/src/modules/primitives/generated/kysely-tailordb.ts +24 -45
- package/src/modules/primitives/index.ts +17 -6
- package/src/modules/primitives/lib/errors.generated.ts +112 -0
- package/src/modules/primitives/{permissions.ts → lib/permissions.generated.ts} +9 -10
- package/src/modules/primitives/module.ts +39 -27
- package/src/modules/primitives/query/convertAmount.generated.ts +5 -0
- package/src/modules/primitives/{command → query}/convertAmount.test.ts +4 -21
- package/src/modules/primitives/query/convertAmount.ts +121 -0
- package/src/modules/primitives/query/convertQuantity.generated.ts +5 -0
- package/src/modules/primitives/{command → query}/convertQuantity.test.ts +8 -15
- package/src/modules/primitives/query/convertQuantity.ts +63 -0
- package/src/modules/primitives/query/getBaseCurrency.generated.ts +5 -0
- package/src/modules/primitives/query/getBaseCurrency.test.ts +28 -0
- package/src/modules/primitives/query/getBaseCurrency.ts +16 -0
- package/src/modules/primitives/query/getCurrency.generated.ts +5 -0
- package/src/modules/primitives/query/getCurrency.test.ts +47 -0
- package/src/modules/primitives/query/getCurrency.ts +18 -0
- package/src/modules/primitives/query/getUnit.generated.ts +5 -0
- package/src/modules/primitives/query/getUnit.test.ts +47 -0
- package/src/modules/primitives/query/getUnit.ts +18 -0
- package/src/modules/primitives/query/getUoMCategory.generated.ts +5 -0
- package/src/modules/primitives/query/getUoMCategory.test.ts +47 -0
- package/src/modules/primitives/query/getUoMCategory.ts +18 -0
- package/src/modules/primitives/query/listUnitsByCategory.generated.ts +5 -0
- package/src/modules/primitives/query/listUnitsByCategory.ts +16 -0
- package/src/modules/primitives/tailor.config.ts +3 -3
- package/src/modules/shared/defineCommand.test.ts +23 -10
- package/src/modules/shared/defineCommand.ts +23 -10
- package/src/modules/shared/defineQuery.test.ts +28 -0
- package/src/modules/shared/defineQuery.ts +16 -0
- package/src/modules/shared/internal.ts +3 -1
- package/src/modules/shared/requirePermission.test.ts +22 -21
- package/src/modules/shared/requirePermission.ts +8 -2
- package/src/modules/shared/result.ts +12 -0
- package/src/modules/shared/types.ts +8 -0
- package/src/modules/testing/index.ts +36 -11
- package/src/modules/user-management/command/activateUser.generated.ts +6 -0
- package/src/modules/user-management/command/activateUser.test.ts +27 -27
- package/src/modules/user-management/command/activateUser.ts +40 -48
- package/src/modules/user-management/command/assignPermissionToRole.generated.ts +6 -0
- package/src/modules/user-management/command/assignPermissionToRole.test.ts +42 -43
- package/src/modules/user-management/command/assignPermissionToRole.ts +59 -62
- package/src/modules/user-management/command/assignRoleToUser.generated.ts +6 -0
- package/src/modules/user-management/command/assignRoleToUser.test.ts +70 -63
- package/src/modules/user-management/command/assignRoleToUser.ts +63 -66
- package/src/modules/user-management/command/createPermission.generated.ts +6 -0
- package/src/modules/user-management/command/createPermission.test.ts +45 -38
- package/src/modules/user-management/command/createPermission.ts +42 -46
- package/src/modules/user-management/command/createRole.generated.ts +6 -0
- package/src/modules/user-management/command/createRole.test.ts +30 -29
- package/src/modules/user-management/command/createRole.ts +33 -33
- package/src/modules/user-management/command/createUser.generated.ts +6 -0
- package/src/modules/user-management/command/createUser.test.ts +64 -42
- package/src/modules/user-management/command/createUser.ts +54 -56
- package/src/modules/user-management/command/deactivateUser.generated.ts +6 -0
- package/src/modules/user-management/command/deactivateUser.test.ts +27 -27
- package/src/modules/user-management/command/deactivateUser.ts +40 -48
- package/src/modules/user-management/command/logAuditEvent.generated.ts +6 -0
- package/src/modules/user-management/command/logAuditEvent.test.ts +50 -42
- package/src/modules/user-management/command/logAuditEvent.ts +25 -28
- package/src/modules/user-management/command/reactivateUser.generated.ts +6 -0
- package/src/modules/user-management/command/reactivateUser.test.ts +31 -27
- package/src/modules/user-management/command/reactivateUser.ts +40 -48
- package/src/modules/user-management/command/revokePermissionFromRole.generated.ts +6 -0
- package/src/modules/user-management/command/revokePermissionFromRole.test.ts +52 -51
- package/src/modules/user-management/command/revokePermissionFromRole.ts +60 -57
- package/src/modules/user-management/command/revokeRoleFromUser.generated.ts +6 -0
- package/src/modules/user-management/command/revokeRoleFromUser.test.ts +53 -48
- package/src/modules/user-management/command/revokeRoleFromUser.ts +58 -57
- package/src/modules/user-management/docs/commands/CreatePermission.md +2 -2
- package/src/modules/user-management/docs/commands/CreateRole.md +1 -1
- package/src/modules/user-management/docs/models/AuditEvent.md +2 -0
- package/src/modules/user-management/docs/models/Permission.md +2 -0
- package/src/modules/user-management/docs/models/Role.md +2 -0
- package/src/modules/user-management/docs/models/RolePermission.md +2 -0
- package/src/modules/user-management/docs/models/User.md +2 -0
- package/src/modules/user-management/docs/models/UserRole.md +2 -0
- package/src/modules/user-management/generated/enums.ts +11 -11
- package/src/modules/user-management/generated/kysely-tailordb.ts +27 -56
- package/src/modules/user-management/index.ts +2 -2
- package/src/modules/user-management/lib/errors.generated.ts +67 -0
- package/src/modules/user-management/{permissions.ts → lib/permissions.generated.ts} +8 -7
- package/src/modules/user-management/module.ts +22 -22
- package/src/modules/user-management/tailor.config.ts +3 -3
- package/src/schemas.ts +2 -1
- package/skills/1-module-docs/references/structure.md +0 -22
- package/skills/2-module-feature-breakdown/references/commands.md +0 -48
- package/skills/2-module-feature-breakdown/references/structure.md +0 -22
- package/skills/3-module-doc-review/references/commands.md +0 -54
- package/skills/3-module-doc-review/references/models.md +0 -29
- package/skills/4-module-tdd-implementation/SKILL.md +0 -74
- package/skills/4-module-tdd-implementation/references/commands.md +0 -45
- package/skills/4-module-tdd-implementation/references/errors.md +0 -7
- package/skills/4-module-tdd-implementation/references/models.md +0 -30
- package/skills/4-module-tdd-implementation/references/structure.md +0 -22
- package/skills/4-module-tdd-implementation/references/testing.md +0 -37
- package/skills/5-module-implementation-review/references/commands.md +0 -45
- package/skills/5-module-implementation-review/references/errors.md +0 -7
- package/skills/5-module-implementation-review/references/exports.md +0 -8
- package/skills/5-module-implementation-review/references/models.md +0 -30
- package/src/modules/primitives/command/convertAmount.ts +0 -126
- package/src/modules/primitives/command/convertQuantity.ts +0 -73
- package/src/modules/primitives/lib/errors.ts +0 -138
- package/src/modules/user-management/lib/errors.ts +0 -81
- /package/skills/{app-compose-1-requirement-analysis → erp-kit-app-1-requirements}/references/structure.md +0 -0
- /package/skills/{app-compose-2-requirements-breakdown → erp-kit-app-2-breakdown}/references/screen-detailview.md +0 -0
- /package/skills/{app-compose-2-requirements-breakdown → erp-kit-app-2-breakdown}/references/screen-form.md +0 -0
- /package/skills/{app-compose-2-requirements-breakdown → erp-kit-app-2-breakdown}/references/screen-listview.md +0 -0
- /package/skills/{app-compose-2-requirements-breakdown → erp-kit-app-2-breakdown}/references/structure.md +0 -0
- /package/skills/{app-compose-3-doc-review → erp-kit-app-3-doc-review}/references/structure.md +0 -0
- /package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/references/component.md +0 -0
- /package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/references/screen-detailview.md +0 -0
- /package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/references/screen-form.md +0 -0
- /package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/references/screen-listview.md +0 -0
- /package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/references/structure.md +0 -0
- /package/skills/{app-compose-5-design-mock-review → erp-kit-app-5-design-review}/references/component.md +0 -0
- /package/skills/{app-compose-5-design-mock-review → erp-kit-app-5-design-review}/references/screen-detailview.md +0 -0
- /package/skills/{app-compose-5-design-mock-review → erp-kit-app-5-design-review}/references/screen-form.md +0 -0
- /package/skills/{app-compose-5-design-mock-review → erp-kit-app-5-design-review}/references/screen-listview.md +0 -0
- /package/skills/{app-compose-6-implementation-spec → erp-kit-app-6-impl-spec}/references/auth.md +0 -0
- /package/skills/{app-compose-6-implementation-spec → erp-kit-app-6-impl-spec}/references/structure.md +0 -0
- /package/skills/{2-module-feature-breakdown → erp-kit-module-4-tdd}/references/models.md +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailor-platform/erp-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Opinionated ERP toolkit for building business applications on Tailor Platform",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"bin": {
|
|
@@ -26,15 +26,18 @@
|
|
|
26
26
|
"@mockoon/commons-server": "^9.0.0",
|
|
27
27
|
"chalk": "^5.4.1",
|
|
28
28
|
"fast-glob": "^3.3.3",
|
|
29
|
+
"mdast-util-from-markdown": "^2.0.3",
|
|
30
|
+
"mdast-util-to-string": "^4.0.0",
|
|
29
31
|
"politty": "^0.4.0",
|
|
30
32
|
"zod": "4.3.6"
|
|
31
33
|
},
|
|
32
34
|
"devDependencies": {
|
|
33
35
|
"@tailor-platform/function-kysely-tailordb": "0.1.3",
|
|
34
|
-
"@tailor-platform/function-types": "0.8.
|
|
36
|
+
"@tailor-platform/function-types": "0.8.2",
|
|
35
37
|
"@tailor-platform/sdk": "1.17.1",
|
|
38
|
+
"@types/mdast": "^4.0.4",
|
|
36
39
|
"@types/node": "^25.1.0",
|
|
37
|
-
"eslint": "9.39.
|
|
40
|
+
"eslint": "9.39.4",
|
|
38
41
|
"kysely": "0.28.10",
|
|
39
42
|
"tsup": "^8.0.0",
|
|
40
43
|
"typescript": "^5.7.3",
|
|
@@ -43,7 +46,7 @@
|
|
|
43
46
|
},
|
|
44
47
|
"peerDependencies": {
|
|
45
48
|
"@tailor-platform/function-kysely-tailordb": "0.1.3",
|
|
46
|
-
"@tailor-platform/function-types": "0.8.
|
|
49
|
+
"@tailor-platform/function-types": "0.8.2",
|
|
47
50
|
"@tailor-platform/sdk": "1.17.1",
|
|
48
51
|
"kysely": "0.28.10"
|
|
49
52
|
},
|
|
@@ -52,9 +55,7 @@
|
|
|
52
55
|
},
|
|
53
56
|
"scripts": {
|
|
54
57
|
"build": "tsup",
|
|
55
|
-
"generate": "
|
|
56
|
-
"generate:primitives": "cd src/modules/primitives && tailor-sdk generate",
|
|
57
|
-
"generate:user-management": "cd src/modules/user-management && tailor-sdk generate",
|
|
58
|
+
"generate": "for dir in src/modules/*/; do [ -f \"$dir/tailor.config.ts\" ] && (cd \"$dir\" && echo \"Generating $dir...\" && tailor-sdk generate); done",
|
|
58
59
|
"lint": "eslint --cache .",
|
|
59
60
|
"lint:fix": "eslint --cache --fix .",
|
|
60
61
|
"typecheck": "tsc --noEmit",
|
|
@@ -64,6 +65,8 @@
|
|
|
64
65
|
"test:user-management": "vitest run src/modules/user-management/",
|
|
65
66
|
"test:shared": "vitest run src/modules/shared/",
|
|
66
67
|
"mock:start": "node dist/cli.js mock start",
|
|
67
|
-
"mock:validate": "node dist/cli.js mock validate"
|
|
68
|
+
"mock:validate": "node dist/cli.js mock validate",
|
|
69
|
+
"doc:gen": "POLITTY_DOCS_UPDATE=true vitest run src/cli.doc.test.ts",
|
|
70
|
+
"doc:check": "vitest run src/cli.doc.test.ts"
|
|
68
71
|
}
|
|
69
72
|
}
|
|
@@ -35,6 +35,7 @@ structure:
|
|
|
35
35
|
# Error handling - REQUIRED
|
|
36
36
|
# How errors are handled
|
|
37
37
|
- heading: "## Error Scenarios"
|
|
38
|
+
description: "Use UPPER_SNAKE_CASE error codes to identify each scenario.\ne.g. `- **ITEM_NOT_FOUND**: Specified item ID does not exist`"
|
|
38
39
|
lists:
|
|
39
40
|
- min: 0
|
|
40
41
|
type: unordered
|
package/schemas/module/model.yml
CHANGED
|
@@ -37,6 +37,20 @@ structure:
|
|
|
37
37
|
type: unordered
|
|
38
38
|
min_items: 0
|
|
39
39
|
|
|
40
|
+
- heading: "### Query Definitions"
|
|
41
|
+
description: |
|
|
42
|
+
Definitions of queries this domain model supports.
|
|
43
|
+
Should match with the queries defined in modules/**/docs/queries/*.md and link to them.
|
|
44
|
+
For Stateful models or models with isActive, follow the status-aware naming convention:
|
|
45
|
+
- get{Entity}: single lookup, returns any status
|
|
46
|
+
- list{Status}{Entities}: business use case with status baked into the name (e.g., listActiveItems)
|
|
47
|
+
- list{Entities}: unfiltered, returns all statuses
|
|
48
|
+
- search{Entities}: admin/exploratory with parametric status filter
|
|
49
|
+
lists:
|
|
50
|
+
- min: 0
|
|
51
|
+
type: unordered
|
|
52
|
+
min_items: 0
|
|
53
|
+
|
|
40
54
|
- heading: "### Models"
|
|
41
55
|
description: |
|
|
42
56
|
Actual database models necessary for the domain model.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
|
|
2
|
+
|
|
3
|
+
structure:
|
|
4
|
+
- heading:
|
|
5
|
+
expr: "filename == heading"
|
|
6
|
+
children:
|
|
7
|
+
# What this query does - REQUIRED
|
|
8
|
+
- heading: "## Overview"
|
|
9
|
+
|
|
10
|
+
# Business rules - REQUIRED
|
|
11
|
+
# Rules, constraints, and validation logic
|
|
12
|
+
- heading: "## Business Rules"
|
|
13
|
+
allow_additional: true
|
|
14
|
+
lists:
|
|
15
|
+
- min: 0
|
|
16
|
+
type: unordered
|
|
17
|
+
min_items: 1
|
|
18
|
+
|
|
19
|
+
# How it works - REQUIRED
|
|
20
|
+
# Step-by-step flow or workflow
|
|
21
|
+
- heading: "## Process Flow"
|
|
22
|
+
code_blocks:
|
|
23
|
+
- lang: mermaid
|
|
24
|
+
min: 1
|
|
25
|
+
|
|
26
|
+
# External dependencies - OPTIONAL
|
|
27
|
+
# Queries from other modules that this query depends on
|
|
28
|
+
- heading: "## External Dependencies"
|
|
29
|
+
description: "e.g. `- [inventory::getStockLevel](../../inventory/queries/getStockLevel.md) - Get current stock level`"
|
|
30
|
+
lists:
|
|
31
|
+
- min: 0
|
|
32
|
+
type: unordered
|
|
33
|
+
min_items: 1
|
|
34
|
+
|
|
35
|
+
# Error handling - REQUIRED
|
|
36
|
+
# How errors are handled
|
|
37
|
+
- heading: "## Error Scenarios"
|
|
38
|
+
description: "Use UPPER_SNAKE_CASE error codes to identify each scenario.\ne.g. `- **ITEM_NOT_FOUND**: Specified item ID does not exist`"
|
|
39
|
+
lists:
|
|
40
|
+
- min: 0
|
|
41
|
+
type: unordered
|
|
42
|
+
min_items: 1
|
|
43
|
+
|
|
44
|
+
# Link validation
|
|
45
|
+
links:
|
|
46
|
+
validate_internal: true
|
|
47
|
+
validate_files: true
|
|
48
|
+
|
|
49
|
+
# Heading rules
|
|
50
|
+
heading_rules:
|
|
51
|
+
no_skip_levels: true
|
|
52
|
+
unique: true
|
|
53
|
+
max_depth: 4
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: app-
|
|
2
|
+
name: erp-kit-app-1-requirements
|
|
3
3
|
description: Create Tier 1-2 documentation (requirements, actors, business-flow) for examples/. Use when starting a new application or documenting high-level requirements and workflows.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -82,7 +82,7 @@ pnpm run app:doc:check
|
|
|
82
82
|
|
|
83
83
|
## Next Step
|
|
84
84
|
|
|
85
|
-
After completing Tier 1-2, use `/app-
|
|
85
|
+
After completing Tier 1-2, use `/erp-kit-app-2-breakdown` to create Tier 3 documentation.
|
|
86
86
|
|
|
87
87
|
## References
|
|
88
88
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: app-
|
|
3
|
-
description: Create Tier 3 documentation (stories, screens) by breaking down business flows. Use after completing Tier 1-2 documentation with app-
|
|
2
|
+
name: erp-kit-app-2-breakdown
|
|
3
|
+
description: Create Tier 3 documentation (stories, screens) by breaking down business flows. Use after completing Tier 1-2 documentation with erp-kit-app-1-requirements.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Requirements Breakdown Workflow
|
|
@@ -85,7 +85,7 @@ pnpm run app:doc:check
|
|
|
85
85
|
|
|
86
86
|
## Next Step
|
|
87
87
|
|
|
88
|
-
After completing Tier 3, use `/app-
|
|
88
|
+
After completing Tier 3, use `/erp-kit-app-3-doc-review` to validate documentation parity.
|
|
89
89
|
|
|
90
90
|
## References
|
|
91
91
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: app-
|
|
2
|
+
name: erp-kit-app-3-doc-review
|
|
3
3
|
description: Review documentation parity between Tier 2 (business flows, actors) and Tier 3 (stories, screens). Use when validating that all business flow steps have corresponding stories, and that screens are properly linked.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -109,7 +109,7 @@ examples/<app-name>/docs/actors/*.md # Actors
|
|
|
109
109
|
|
|
110
110
|
## Next Step
|
|
111
111
|
|
|
112
|
-
After fixing all issues, use `/app-
|
|
112
|
+
After fixing all issues, use `/erp-kit-app-4-design` to create visual UI mockups from screen specifications.
|
|
113
113
|
|
|
114
114
|
## References
|
|
115
115
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: app-
|
|
3
|
-
description: Create design mockups from screen specifications using .pen files. Use after completing documentation review with app-
|
|
2
|
+
name: erp-kit-app-4-design
|
|
3
|
+
description: Create design mockups from screen specifications using .pen files. Use after completing documentation review with erp-kit-app-3-doc-review. Generates visual UI mockups with shadcn components.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Design Mockup Workflow
|
|
@@ -245,7 +245,7 @@ mcp__pencil__get_screenshot(filePath: "docs/design.pen", nodeId: "{frame-id}")
|
|
|
245
245
|
|
|
246
246
|
## Next Step
|
|
247
247
|
|
|
248
|
-
After completing design mockups, use `/app-
|
|
248
|
+
After completing design mockups, use `/erp-kit-app-5-design-review` to review and validate the mockups against screen specifications.
|
|
249
249
|
|
|
250
250
|
## References
|
|
251
251
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: app-
|
|
3
|
-
description: Review design mockups (.pen files) against screen specifications. Use after completing design mockups with app-
|
|
2
|
+
name: erp-kit-app-5-design-review
|
|
3
|
+
description: Review design mockups (.pen files) against screen specifications. Use after completing design mockups with erp-kit-app-4-design. Validates visual consistency, detects regressions, and fixes layout issues.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Design Mockup Review Workflow
|
|
@@ -10,7 +10,7 @@ Review visual design mockups against Tier 3 screen documentation. Detect and fix
|
|
|
10
10
|
## Prerequisites
|
|
11
11
|
|
|
12
12
|
- `docs/screen/*.md` (screen specifications)
|
|
13
|
-
- `docs/design.pen` (design mockups from app-
|
|
13
|
+
- `docs/design.pen` (design mockups from erp-kit-app-4-design)
|
|
14
14
|
|
|
15
15
|
## Workflow Phases
|
|
16
16
|
|
|
@@ -280,7 +280,7 @@ Look for `iconFontName` property in sidebar menu items. Icons use Lucide icon fo
|
|
|
280
280
|
|
|
281
281
|
## Next Step
|
|
282
282
|
|
|
283
|
-
After completing design review, use `/app-
|
|
283
|
+
After completing design review, use `/erp-kit-app-6-impl-spec` to create Tier 4 documentation (resolvers).
|
|
284
284
|
|
|
285
285
|
## References
|
|
286
286
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: app-
|
|
3
|
-
description: Create Tier 4 documentation (resolvers) for GraphQL operations. Use after completing design review with app-
|
|
2
|
+
name: erp-kit-app-6-impl-spec
|
|
3
|
+
description: Create Tier 4 documentation (resolvers) for GraphQL operations. Use after completing design review with erp-kit-app-5-design-review.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Implementation Spec Workflow
|
|
@@ -72,7 +72,7 @@ ls modules/<module-name>/docs/commands/
|
|
|
72
72
|
**If modules don't exist:**
|
|
73
73
|
|
|
74
74
|
1. **Identify needed modules** - Group resolver operations by domain
|
|
75
|
-
2. **Create module docs first** - Use `
|
|
75
|
+
2. **Create module docs first** - Use `erp-kit-module-1-docs` skill
|
|
76
76
|
3. **Return to Tier 4** - After modules have documented commands
|
|
77
77
|
|
|
78
78
|
```
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: erp-kit-module-1-docs
|
|
3
3
|
description: Create ERP module documentation following framework schemas. Use when starting a new module, documenting an existing module, or when user asks to create module docs, feature docs, or design module features. Guides collaborative research, scoping, and iterative feature breakdown.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -108,4 +108,4 @@ pnpm run module:doc:check
|
|
|
108
108
|
|
|
109
109
|
## References
|
|
110
110
|
|
|
111
|
-
- [Module structure](references/structure.md)
|
|
111
|
+
- [Module structure](../erp-kit-module-shared/references/structure.md)
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Use when breaking down a feature spec into model and
|
|
2
|
+
name: erp-kit-module-2-feature-breakdown
|
|
3
|
+
description: Use when breaking down a feature spec into model, command, and query documentation. Triggers on feature implementation planning, creating model docs, creating command docs, creating query docs, or when user references model.yml/command.yml schemas.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Feature Breakdown to Model/Command Docs
|
|
6
|
+
# Feature Breakdown to Model/Command/Query Docs
|
|
7
7
|
|
|
8
|
-
Convert feature specifications into structured model and
|
|
8
|
+
Convert feature specifications into structured model, command, and query documentation following framework schemas.
|
|
9
9
|
|
|
10
10
|
## When to Use
|
|
11
11
|
|
|
12
12
|
- User has a feature spec (e.g., `docs/features/*.md`) and wants implementation docs
|
|
13
|
-
- User asks to create model or
|
|
13
|
+
- User asks to create model, command, or query documentation
|
|
14
14
|
- User references `model.yml` or `command.yml` schemas
|
|
15
15
|
|
|
16
16
|
## Workflow
|
|
@@ -25,14 +25,16 @@ Read the feature spec and identify:
|
|
|
25
25
|
|
|
26
26
|
- **Models**: Entities with state, fields, relationships
|
|
27
27
|
- **Commands**: Operations that change state (look for verbs in state diagrams)
|
|
28
|
+
- **Queries**: Read-only operations for external consumers — lookups, conversions, aggregations. See [CQRS read rule](../erp-kit-module-shared/references/commands.md#command-side-reads-cqrs-separation)
|
|
28
29
|
|
|
29
30
|
### 2. Scaffold
|
|
30
31
|
|
|
31
|
-
For each model and
|
|
32
|
+
For each model, command, and query, scaffold the documentation files using `erp-kit` CLI:
|
|
32
33
|
|
|
33
34
|
```bash
|
|
34
35
|
erp-kit scaffold --modules-root modules model <module-name> <model-name>
|
|
35
36
|
erp-kit scaffold --modules-root modules command <module-name> <command-name>
|
|
37
|
+
erp-kit scaffold --modules-root modules query <module-name> <query-name>
|
|
36
38
|
```
|
|
37
39
|
|
|
38
40
|
### 3. Populate
|
|
@@ -56,6 +58,9 @@ Schemas are bundled in `@tailor-platform/erp-kit` (model.yml, command.yml).
|
|
|
56
58
|
| Verb in state diagram | Command doc |
|
|
57
59
|
| CRUD operation | Command doc |
|
|
58
60
|
| Validation logic | Command doc Business Rules |
|
|
61
|
+
| Data lookup | Query doc |
|
|
62
|
+
| Unit/currency convert | Query doc |
|
|
63
|
+
| Computed aggregation | Query doc |
|
|
59
64
|
|
|
60
65
|
## Validation
|
|
61
66
|
|
|
@@ -67,6 +72,5 @@ pnpm run module:doc:check
|
|
|
67
72
|
|
|
68
73
|
## References
|
|
69
74
|
|
|
70
|
-
- [
|
|
71
|
-
- [
|
|
72
|
-
- [Command patterns](references/commands.md)
|
|
75
|
+
- [Command naming convention](references/naming.md)
|
|
76
|
+
- [Module structure](../erp-kit-module-shared/references/structure.md)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Command Naming Convention
|
|
2
|
+
|
|
3
|
+
Commands use imperative `{verb}{Entity}` format. Use this canonical verb vocabulary when scaffolding commands.
|
|
4
|
+
|
|
5
|
+
## Canonical Verbs
|
|
6
|
+
|
|
7
|
+
| Verb | Meaning | Example |
|
|
8
|
+
| ------------------ | --------------------------------------------------- | ------------------------ |
|
|
9
|
+
| `create` | Insert new entity | `createItem` |
|
|
10
|
+
| `update` | Modify existing entity fields | `updateItem` |
|
|
11
|
+
| `delete` | Permanently remove entity (hard delete) | `deleteItem` |
|
|
12
|
+
| `activate` | Enable entity (inactive → active) | `activateUnit` |
|
|
13
|
+
| `deactivate` | Soft-disable entity (active → inactive, reversible) | `deactivateUnit` |
|
|
14
|
+
| `reactivate` | Re-enable after deactivation | `reactivateItem` |
|
|
15
|
+
| `assign...To...` | Create a relationship between entities | `assignRoleToUser` |
|
|
16
|
+
| `remove...From...` | Remove a relationship between entities | `removeItemFromTaxonomy` |
|
|
17
|
+
| `revoke...From...` | Remove permission/right (RBAC/security domain only) | `revokeRoleFromUser` |
|
|
18
|
+
| `set` | Configure a singular value or reference | `setBaseCurrency` |
|
|
19
|
+
| `move` | Change position or parent in a hierarchy | `moveTaxonomyNode` |
|
|
20
|
+
| `log` | Append-only audit/event record | `logAuditEvent` |
|
|
21
|
+
|
|
22
|
+
## Choosing the Right Verb
|
|
23
|
+
|
|
24
|
+
- **`delete` vs `deactivate`**: Use `delete` only for permanent removal. Use `deactivate` for soft-disable where the record is preserved.
|
|
25
|
+
- **`remove...From...` vs `revoke...From...`**: Use `revoke` only in security/RBAC contexts (permissions, roles). Use `remove` for all other relationship unlinking.
|
|
26
|
+
- **`assign...To...`**: Always use `assign` to create relationships, never `add...To...`.
|
|
27
|
+
- **`activate` vs `reactivate`**: Use `reactivate` when the command specifically re-enables a previously deactivated entity and the distinction matters for business logic. Otherwise use `activate`.
|
|
28
|
+
|
|
29
|
+
## Banned Verbs
|
|
30
|
+
|
|
31
|
+
Do not use these — use the canonical alternative instead:
|
|
32
|
+
|
|
33
|
+
| Banned | Use instead |
|
|
34
|
+
| ----------------------- | ------------------------- |
|
|
35
|
+
| `archive` / `unarchive` | `deactivate` / `activate` |
|
|
36
|
+
| `disable` / `enable` | `deactivate` / `activate` |
|
|
37
|
+
| `add...To...` | `assign...To...` |
|
|
38
|
+
| `unlink` | `remove...From...` |
|
|
39
|
+
|
|
40
|
+
## Domain-Specific Verbs
|
|
41
|
+
|
|
42
|
+
If a feature requires a verb not in this table and the domain experts use it naturally (e.g., `approve`, `reject`, `cancel`, `close`, `submit`), it can be used. Document the rationale in the command doc.
|
|
43
|
+
|
|
44
|
+
## Feature Operation → Command Name
|
|
45
|
+
|
|
46
|
+
| Feature Operation | Expected Command Doc | Notes |
|
|
47
|
+
| -------------------- | -------------------- | ------------------------------ |
|
|
48
|
+
| "Create X" / "Add X" | `createX` | Never `addX` |
|
|
49
|
+
| "Update X" | `updateX` | |
|
|
50
|
+
| "Delete X" | `deleteX` | Hard delete only |
|
|
51
|
+
| "Deactivate X" | `deactivateX` | Soft-disable (reversible) |
|
|
52
|
+
| "Activate X" | `activateX` | Enable entity |
|
|
53
|
+
| "Reactivate X" | `reactivateX` | Re-enable after deactivation |
|
|
54
|
+
| "Set default X" | `setDefaultX` | Singular value/reference |
|
|
55
|
+
| "Assign X to Y" | `assignXToY` | Never `addXToY` |
|
|
56
|
+
| "Remove X from Y" | `removeXFromY` | Generic relationship unlinking |
|
|
57
|
+
| "Revoke X from Y" | `revokeXFromY` | RBAC/security domain only |
|
|
58
|
+
| "Move X" | `moveX` | Hierarchy position change |
|
|
59
|
+
| "Log X" | `logX` | Append-only audit/event |
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Review feature parity between feature documentation and command/model documentation. Use when validating that all feature scenarios are covered by command docs, and that all required models exist.
|
|
2
|
+
name: erp-kit-module-3-doc-review
|
|
3
|
+
description: Review feature parity between feature documentation and command/model/query documentation. Use when validating that all feature scenarios are covered by command docs, all read operations have query docs, and that all required models exist.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Feature Parity Review Workflow
|
|
7
7
|
|
|
8
|
-
Review **documentation consistency** between feature specs and command/model docs.
|
|
8
|
+
Review **documentation consistency** between feature specs and command/model/query docs.
|
|
9
9
|
|
|
10
10
|
## Purpose
|
|
11
11
|
|
|
12
|
-
Verify that feature documentation (high-level business requirements) is properly covered by command documentation (
|
|
12
|
+
Verify that feature documentation (high-level business requirements) is properly covered by command documentation (write operations), query documentation (read operations), and model documentation (data structures).
|
|
13
13
|
|
|
14
14
|
```
|
|
15
15
|
Feature Docs (What) → Command Docs (How) → Model Docs (With What)
|
|
@@ -17,18 +17,22 @@ Feature Docs (What) → Command Docs (How) → Model Docs (With What)
|
|
|
17
17
|
Scenarios Business Rules Data Structures
|
|
18
18
|
Process Flows Error Scenarios Relationships
|
|
19
19
|
Test Cases Process Flows Constraints
|
|
20
|
+
Query Docs (Read)
|
|
21
|
+
↓
|
|
22
|
+
Lookups, Conversions
|
|
23
|
+
Aggregations
|
|
20
24
|
```
|
|
21
25
|
|
|
22
26
|
## When to Use
|
|
23
27
|
|
|
24
|
-
- After writing feature documentation, check for gaps in command/model documentation
|
|
25
|
-
- After writing command/model documentation, verify consistency with features
|
|
28
|
+
- After writing feature documentation, check for gaps in command/model/query documentation
|
|
29
|
+
- After writing command/model/query documentation, verify consistency with features
|
|
26
30
|
- Quality check during documentation review
|
|
27
31
|
|
|
28
32
|
## Workflow
|
|
29
33
|
|
|
30
34
|
```
|
|
31
|
-
FEATURE DOCS → COMMAND DOCS → MODEL DOCS → COMPARE → REPORT
|
|
35
|
+
FEATURE DOCS → COMMAND DOCS → QUERY DOCS → MODEL DOCS → COMPARE → REPORT
|
|
32
36
|
```
|
|
33
37
|
|
|
34
38
|
## Step-by-Step
|
|
@@ -49,7 +53,15 @@ Read ALL command docs:
|
|
|
49
53
|
modules/<module-name>/docs/commands/*.md
|
|
50
54
|
```
|
|
51
55
|
|
|
52
|
-
### 3. Read
|
|
56
|
+
### 3. Read Query Documentation
|
|
57
|
+
|
|
58
|
+
Read ALL query docs:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
modules/<module-name>/docs/queries/*.md
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 4. Read Model Documentation
|
|
53
65
|
|
|
54
66
|
Read ALL model docs:
|
|
55
67
|
|
|
@@ -57,7 +69,7 @@ Read ALL model docs:
|
|
|
57
69
|
modules/<module-name>/docs/models/*.md
|
|
58
70
|
```
|
|
59
71
|
|
|
60
|
-
###
|
|
72
|
+
### 5. Feature → Command Parity Check
|
|
61
73
|
|
|
62
74
|
For each feature's scenarios and test cases:
|
|
63
75
|
|
|
@@ -75,7 +87,23 @@ For each feature's scenarios and test cases:
|
|
|
75
87
|
3. Verify corresponding command doc exists
|
|
76
88
|
4. Map feature test cases to command business rules / error scenarios
|
|
77
89
|
|
|
78
|
-
###
|
|
90
|
+
### 6. Feature → Query Parity Check
|
|
91
|
+
|
|
92
|
+
For each read operation implied by the feature:
|
|
93
|
+
|
|
94
|
+
| Check Item | Question |
|
|
95
|
+
| --------------- | --------------------------------------------------------------------- |
|
|
96
|
+
| Query existence | Does a query doc exist for lookups, conversions, or aggregations? |
|
|
97
|
+
| Input coverage | Are all lookup dimensions documented (by id, by unique field, by FK)? |
|
|
98
|
+
| Error handling | Are error scenarios for missing data documented? |
|
|
99
|
+
|
|
100
|
+
#### How to Check
|
|
101
|
+
|
|
102
|
+
1. Identify read-only operations in the feature: "look up", "get", "list", "convert", "calculate"
|
|
103
|
+
2. Verify corresponding query doc exists in `docs/queries/`
|
|
104
|
+
3. Check that query docs have error scenarios where applicable
|
|
105
|
+
|
|
106
|
+
### 7. Feature → Model Parity Check
|
|
79
107
|
|
|
80
108
|
For each entity mentioned in feature:
|
|
81
109
|
|
|
@@ -85,7 +113,7 @@ For each entity mentioned in feature:
|
|
|
85
113
|
| State management | Do feature state transitions match model state transitions? |
|
|
86
114
|
| Relationships | Are relationships shown in feature defined in model relationships? |
|
|
87
115
|
|
|
88
|
-
###
|
|
116
|
+
### 8. Command → Model Consistency Check
|
|
89
117
|
|
|
90
118
|
For each command doc:
|
|
91
119
|
|
|
@@ -94,7 +122,7 @@ For each command doc:
|
|
|
94
122
|
| Target model | Does a model doc exist for the model that command operates on? |
|
|
95
123
|
| State transition alignment | Do state changes by command match model state transitions? |
|
|
96
124
|
|
|
97
|
-
###
|
|
125
|
+
### 9. Report Findings
|
|
98
126
|
|
|
99
127
|
```markdown
|
|
100
128
|
## Feature Parity Review Report
|
|
@@ -142,6 +170,12 @@ For each command doc:
|
|
|
142
170
|
| <feature-2> | <cmd-f> | <purpose description> |
|
|
143
171
|
| <feature-2> | <cmd-g> | <purpose description> |
|
|
144
172
|
|
|
173
|
+
#### Missing Query Docs
|
|
174
|
+
|
|
175
|
+
| Feature | Expected Query | Purpose |
|
|
176
|
+
| ----------- | -------------- | --------------------- |
|
|
177
|
+
| <feature-1> | <query-a> | <purpose description> |
|
|
178
|
+
|
|
145
179
|
#### Missing Model Docs
|
|
146
180
|
|
|
147
181
|
(none found)
|
|
@@ -162,6 +196,7 @@ For each command doc:
|
|
|
162
196
|
| Aspect | Status | Details |
|
|
163
197
|
| -------------------------- | ------ | ------------------------------------------- |
|
|
164
198
|
| Feature → Command Coverage | ⚠️ | X/Y features have complete command coverage |
|
|
199
|
+
| Feature → Query Coverage | ⚠️ | X/Y read operations have query docs |
|
|
165
200
|
| Feature → Model Coverage | ✅ | All required models documented |
|
|
166
201
|
| Test Case Coverage | ⚠️ | X/Y test cases mapped to business rules |
|
|
167
202
|
| Documentation Consistency | ⚠️ | N inconsistencies found |
|
|
@@ -186,6 +221,12 @@ For each command doc:
|
|
|
186
221
|
- **Implicit commands**: Feature scenario requires helper command not documented
|
|
187
222
|
- **Default handling**: Feature mentions "default" selection but no setDefault command
|
|
188
223
|
|
|
224
|
+
### Feature → Query
|
|
225
|
+
|
|
226
|
+
- **Missing query docs**: Feature implies read operation but no query doc exists
|
|
227
|
+
- **Missing conversions**: Feature mentions unit/currency conversion but no query doc
|
|
228
|
+
- **Missing lookups**: Feature requires data retrieval not covered by a query doc
|
|
229
|
+
|
|
189
230
|
### Feature → Model
|
|
190
231
|
|
|
191
232
|
- **Missing models**: Feature references entity with no model doc
|
|
@@ -218,19 +259,36 @@ For each command doc:
|
|
|
218
259
|
|
|
219
260
|
### Expected Command Docs for Feature
|
|
220
261
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
|
224
|
-
|
|
|
225
|
-
| "
|
|
226
|
-
| "
|
|
227
|
-
| "
|
|
228
|
-
| "Deactivate X"
|
|
229
|
-
| "
|
|
230
|
-
| "
|
|
262
|
+
See [command naming convention](../erp-kit-module-2-feature-breakdown/references/naming.md) for the full rule, disambiguation guide, and banned verbs.
|
|
263
|
+
|
|
264
|
+
| Feature Operation | Expected Command Doc | Notes |
|
|
265
|
+
| -------------------- | -------------------- | ------------------------------ |
|
|
266
|
+
| "Create X" / "Add X" | `createX` | Never `addX` |
|
|
267
|
+
| "Update X" | `updateX` | |
|
|
268
|
+
| "Delete X" | `deleteX` | Hard delete only |
|
|
269
|
+
| "Deactivate X" | `deactivateX` | Soft-disable (reversible) |
|
|
270
|
+
| "Activate X" | `activateX` | Enable entity |
|
|
271
|
+
| "Reactivate X" | `reactivateX` | Re-enable after deactivation |
|
|
272
|
+
| "Set default X" | `setDefaultX` | Singular value/reference |
|
|
273
|
+
| "Assign X to Y" | `assignXToY` | Never `addXToY` |
|
|
274
|
+
| "Remove X from Y" | `removeXFromY` | Generic relationship unlinking |
|
|
275
|
+
| "Revoke X from Y" | `revokeXFromY` | RBAC/security domain only |
|
|
276
|
+
| "Move X" | `moveX` | Hierarchy position change |
|
|
277
|
+
| "Log X" | `logX` | Append-only audit/event |
|
|
278
|
+
|
|
279
|
+
**Banned verbs** — flag as naming violation if found:
|
|
280
|
+
`archive`, `unarchive`, `disable`, `enable`, `add...To...`, `unlink`
|
|
281
|
+
|
|
282
|
+
### Expected Query Docs for Feature
|
|
283
|
+
|
|
284
|
+
| Feature Operation | Expected Query Doc |
|
|
285
|
+
| ----------------- | ------------------- |
|
|
286
|
+
| "Get X" | GetX |
|
|
287
|
+
| "Look up X by Y" | GetX (with Y input) |
|
|
288
|
+
| "List X by Y" | ListXsByY |
|
|
289
|
+
| "Convert X" | ConvertX |
|
|
290
|
+
| "Calculate X" | CalculateX |
|
|
231
291
|
|
|
232
292
|
## References
|
|
233
293
|
|
|
234
|
-
|
|
235
|
-
- [Command patterns](references/commands.md)
|
|
236
|
-
- [Testing patterns](references/testing.md)
|
|
294
|
+
For implementation patterns (models, commands, testing), see erp-kit-module-4-tdd.
|