@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.
Files changed (342) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +158 -62
  3. package/dist/cli.js +1010 -270
  4. package/package.json +11 -8
  5. package/schemas/module/command.yml +1 -0
  6. package/schemas/module/model.yml +14 -0
  7. package/schemas/module/query.yml +53 -0
  8. package/skills/{app-compose-1-requirement-analysis → erp-kit-app-1-requirements}/SKILL.md +2 -2
  9. package/skills/{app-compose-2-requirements-breakdown → erp-kit-app-2-breakdown}/SKILL.md +3 -3
  10. package/skills/{app-compose-3-doc-review → erp-kit-app-3-doc-review}/SKILL.md +2 -2
  11. package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/SKILL.md +3 -3
  12. package/skills/{app-compose-5-design-mock-review → erp-kit-app-5-design-review}/SKILL.md +4 -4
  13. package/skills/{app-compose-6-implementation-spec → erp-kit-app-6-impl-spec}/SKILL.md +3 -3
  14. package/skills/{mock-scenario → erp-kit-mock-scenario}/SKILL.md +1 -1
  15. package/skills/{1-module-docs → erp-kit-module-1-docs}/SKILL.md +2 -2
  16. package/skills/{2-module-feature-breakdown → erp-kit-module-2-feature-breakdown}/SKILL.md +13 -9
  17. package/skills/erp-kit-module-2-feature-breakdown/references/naming.md +59 -0
  18. package/skills/{3-module-doc-review → erp-kit-module-3-doc-review}/SKILL.md +83 -25
  19. package/skills/erp-kit-module-4-tdd/SKILL.md +94 -0
  20. package/skills/erp-kit-module-4-tdd/references/cross-module-dependency.md +133 -0
  21. package/skills/{4-module-tdd-implementation → erp-kit-module-4-tdd}/references/db-relations.md +5 -1
  22. package/skills/{4-module-tdd-implementation → erp-kit-module-4-tdd}/references/exports.md +1 -1
  23. package/skills/erp-kit-module-4-tdd/references/generated-code.md +32 -0
  24. package/skills/{5-module-implementation-review → erp-kit-module-5-impl-review}/SKILL.md +46 -44
  25. package/skills/erp-kit-module-5-impl-review/references/commands.md +62 -0
  26. package/skills/erp-kit-module-5-impl-review/references/errors.md +10 -0
  27. package/skills/{5-module-implementation-review → erp-kit-module-5-impl-review}/references/testing.md +1 -1
  28. package/skills/erp-kit-module-shared/SKILL.md +16 -0
  29. package/skills/erp-kit-module-shared/references/commands.md +203 -0
  30. package/skills/erp-kit-module-shared/references/errors.md +35 -0
  31. package/skills/erp-kit-module-shared/references/queries.md +168 -0
  32. package/skills/erp-kit-module-shared/references/structure.md +36 -0
  33. package/skills/{3-module-doc-review → erp-kit-module-shared}/references/testing.md +4 -3
  34. package/skills/erp-kit-update/SKILL.md +64 -0
  35. package/src/cli.doc.test.ts +65 -0
  36. package/src/cli.ts +3 -117
  37. package/src/commands/app/index.ts +74 -0
  38. package/src/commands/check.test.ts +3 -2
  39. package/src/commands/check.ts +3 -2
  40. package/src/commands/index.ts +73 -0
  41. package/src/commands/init.test.ts +22 -5
  42. package/src/commands/init.ts +25 -16
  43. package/src/commands/license.ts +193 -0
  44. package/src/commands/mock/index.ts +2 -2
  45. package/src/commands/mock/start.ts +1 -1
  46. package/src/commands/mock/validate.test.ts +1 -1
  47. package/src/commands/module/generate.ts +35 -0
  48. package/src/commands/module/index.ts +87 -0
  49. package/src/commands/module/list.test.ts +57 -0
  50. package/src/commands/module/list.ts +64 -0
  51. package/src/commands/scaffold-templates.ts +65 -0
  52. package/src/commands/scaffold.test.ts +97 -2
  53. package/src/commands/scaffold.ts +24 -3
  54. package/src/commands/sync-check.test.ts +88 -1
  55. package/src/commands/sync-check.ts +41 -2
  56. package/src/generator/generate-code.test.ts +200 -0
  57. package/src/generator/generate-code.ts +260 -0
  58. package/src/generator/parse-command-doc.test.ts +159 -0
  59. package/src/generator/parse-command-doc.ts +116 -0
  60. package/src/integration.test.ts +6 -8
  61. package/src/module.ts +10 -9
  62. package/src/modules/item-management/README.md +38 -0
  63. package/src/modules/item-management/command/activateItem.generated.ts +6 -0
  64. package/src/modules/item-management/command/activateItem.test.ts +76 -0
  65. package/src/modules/item-management/command/activateItem.ts +42 -0
  66. package/src/modules/item-management/command/assignItemToTaxonomy.generated.ts +6 -0
  67. package/src/modules/item-management/command/assignItemToTaxonomy.test.ts +88 -0
  68. package/src/modules/item-management/command/assignItemToTaxonomy.ts +63 -0
  69. package/src/modules/item-management/command/createItem.generated.ts +6 -0
  70. package/src/modules/item-management/command/createItem.test.ts +152 -0
  71. package/src/modules/item-management/command/createItem.ts +72 -0
  72. package/src/modules/item-management/command/createTaxonomyNode.generated.ts +6 -0
  73. package/src/modules/item-management/command/createTaxonomyNode.test.ts +126 -0
  74. package/src/modules/item-management/command/createTaxonomyNode.ts +70 -0
  75. package/src/modules/item-management/command/deactivateItem.generated.ts +6 -0
  76. package/src/modules/item-management/command/deactivateItem.test.ts +76 -0
  77. package/src/modules/item-management/command/deactivateItem.ts +42 -0
  78. package/src/modules/item-management/command/deleteItem.generated.ts +6 -0
  79. package/src/modules/item-management/command/deleteItem.test.ts +61 -0
  80. package/src/modules/item-management/command/deleteItem.ts +38 -0
  81. package/src/modules/item-management/command/deleteTaxonomyNode.generated.ts +6 -0
  82. package/src/modules/item-management/command/deleteTaxonomyNode.test.ts +73 -0
  83. package/src/modules/item-management/command/deleteTaxonomyNode.ts +50 -0
  84. package/src/modules/item-management/command/moveTaxonomyNode.generated.ts +6 -0
  85. package/src/modules/item-management/command/moveTaxonomyNode.test.ts +136 -0
  86. package/src/modules/item-management/command/moveTaxonomyNode.ts +85 -0
  87. package/src/modules/item-management/command/reactivateItem.generated.ts +6 -0
  88. package/src/modules/item-management/command/reactivateItem.test.ts +76 -0
  89. package/src/modules/item-management/command/reactivateItem.ts +42 -0
  90. package/src/modules/item-management/command/removeItemFromTaxonomy.generated.ts +6 -0
  91. package/src/modules/item-management/command/removeItemFromTaxonomy.test.ts +43 -0
  92. package/src/modules/item-management/command/removeItemFromTaxonomy.ts +30 -0
  93. package/src/modules/item-management/command/updateItem.generated.ts +6 -0
  94. package/src/modules/item-management/command/updateItem.test.ts +178 -0
  95. package/src/modules/item-management/command/updateItem.ts +103 -0
  96. package/src/modules/item-management/command/updateTaxonomyNode.generated.ts +6 -0
  97. package/src/modules/item-management/command/updateTaxonomyNode.test.ts +88 -0
  98. package/src/modules/item-management/command/updateTaxonomyNode.ts +62 -0
  99. package/src/modules/item-management/db/item.ts +47 -0
  100. package/src/modules/item-management/db/itemTaxonomyAssignment.ts +49 -0
  101. package/src/modules/item-management/db/taxonomyNode.ts +34 -0
  102. package/src/modules/item-management/docs/commands/ActivateItem.md +32 -0
  103. package/src/modules/item-management/docs/commands/AssignItemToTaxonomy.md +38 -0
  104. package/src/modules/item-management/docs/commands/CreateItem.md +44 -0
  105. package/src/modules/item-management/docs/commands/CreateTaxonomyNode.md +44 -0
  106. package/src/modules/item-management/docs/commands/DeactivateItem.md +34 -0
  107. package/src/modules/item-management/docs/commands/DeleteItem.md +35 -0
  108. package/src/modules/item-management/docs/commands/DeleteTaxonomyNode.md +39 -0
  109. package/src/modules/item-management/docs/commands/MoveTaxonomyNode.md +45 -0
  110. package/src/modules/item-management/docs/commands/ReactivateItem.md +34 -0
  111. package/src/modules/item-management/docs/commands/RemoveItemFromTaxonomy.md +30 -0
  112. package/src/modules/item-management/docs/commands/UpdateItem.md +55 -0
  113. package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +36 -0
  114. package/src/modules/item-management/docs/features/item-lifecycle.md +60 -0
  115. package/src/modules/item-management/docs/features/item-taxonomy.md +65 -0
  116. package/src/modules/item-management/docs/models/ItemTaxonomyAssignment.md +36 -0
  117. package/src/modules/item-management/docs/models/TaxonomyNode.md +47 -0
  118. package/src/modules/item-management/docs/models/item.md +59 -0
  119. package/src/modules/item-management/docs/queries/CalculateNodeDepth.md +36 -0
  120. package/src/modules/item-management/docs/queries/CalculateSubtreeDepth.md +40 -0
  121. package/src/modules/item-management/docs/queries/DetectCircularReference.md +41 -0
  122. package/src/modules/item-management/docs/queries/GetItem.md +38 -0
  123. package/src/modules/item-management/docs/queries/GetItemTaxonomyAssignment.md +29 -0
  124. package/src/modules/item-management/docs/queries/GetTaxonomyNode.md +35 -0
  125. package/src/modules/item-management/docs/queries/GetTaxonomyNodeAssignments.md +29 -0
  126. package/src/modules/item-management/docs/queries/GetTaxonomyNodeChildren.md +29 -0
  127. package/src/modules/item-management/generated/enums.ts +9 -0
  128. package/src/modules/item-management/generated/kysely-tailordb.ts +62 -0
  129. package/src/modules/item-management/index.ts +53 -0
  130. package/src/modules/item-management/lib/_db_deps.ts +13 -0
  131. package/src/modules/item-management/lib/errors.generated.ts +117 -0
  132. package/src/modules/item-management/lib/permissions.generated.ts +17 -0
  133. package/src/modules/item-management/lib/types.ts +19 -0
  134. package/src/modules/item-management/module.ts +97 -0
  135. package/src/modules/item-management/query/calculateNodeDepth.generated.ts +5 -0
  136. package/src/modules/item-management/query/calculateNodeDepth.test.ts +56 -0
  137. package/src/modules/item-management/query/calculateNodeDepth.ts +28 -0
  138. package/src/modules/item-management/query/calculateSubtreeDepth.generated.ts +5 -0
  139. package/src/modules/item-management/query/calculateSubtreeDepth.test.ts +75 -0
  140. package/src/modules/item-management/query/calculateSubtreeDepth.ts +29 -0
  141. package/src/modules/item-management/query/detectCircularReference.generated.ts +5 -0
  142. package/src/modules/item-management/query/detectCircularReference.test.ts +61 -0
  143. package/src/modules/item-management/query/detectCircularReference.ts +32 -0
  144. package/src/modules/item-management/query/getItem.generated.ts +5 -0
  145. package/src/modules/item-management/query/getItem.test.ts +67 -0
  146. package/src/modules/item-management/query/getItem.ts +20 -0
  147. package/src/modules/item-management/query/getItemTaxonomyAssignment.generated.ts +5 -0
  148. package/src/modules/item-management/query/getItemTaxonomyAssignment.test.ts +25 -0
  149. package/src/modules/item-management/query/getItemTaxonomyAssignment.ts +18 -0
  150. package/src/modules/item-management/query/getTaxonomyNode.generated.ts +5 -0
  151. package/src/modules/item-management/query/getTaxonomyNode.test.ts +47 -0
  152. package/src/modules/item-management/query/getTaxonomyNode.ts +18 -0
  153. package/src/modules/item-management/query/getTaxonomyNodeAssignments.generated.ts +5 -0
  154. package/src/modules/item-management/query/getTaxonomyNodeAssignments.test.ts +25 -0
  155. package/src/modules/item-management/query/getTaxonomyNodeAssignments.ts +16 -0
  156. package/src/modules/item-management/query/getTaxonomyNodeChildren.generated.ts +5 -0
  157. package/src/modules/item-management/query/getTaxonomyNodeChildren.test.ts +34 -0
  158. package/src/modules/item-management/query/getTaxonomyNodeChildren.ts +16 -0
  159. package/src/modules/item-management/tailor.config.ts +11 -0
  160. package/src/modules/item-management/testing/fixtures.ts +81 -0
  161. package/src/modules/primitives/command/activateCategory.generated.ts +6 -0
  162. package/src/modules/primitives/command/activateCategory.test.ts +11 -29
  163. package/src/modules/primitives/command/activateCategory.ts +27 -34
  164. package/src/modules/primitives/command/activateCurrency.generated.ts +6 -0
  165. package/src/modules/primitives/command/activateCurrency.test.ts +11 -29
  166. package/src/modules/primitives/command/activateCurrency.ts +27 -34
  167. package/src/modules/primitives/command/activateUnit.generated.ts +6 -0
  168. package/src/modules/primitives/command/activateUnit.test.ts +11 -15
  169. package/src/modules/primitives/command/activateUnit.ts +27 -34
  170. package/src/modules/primitives/command/createCategory.generated.ts +6 -0
  171. package/src/modules/primitives/command/createCategory.test.ts +27 -39
  172. package/src/modules/primitives/command/createCategory.ts +53 -62
  173. package/src/modules/primitives/command/createCurrency.generated.ts +6 -0
  174. package/src/modules/primitives/command/createCurrency.test.ts +78 -71
  175. package/src/modules/primitives/command/createCurrency.ts +43 -48
  176. package/src/modules/primitives/command/createExchangeRate.generated.ts +6 -0
  177. package/src/modules/primitives/command/createExchangeRate.test.ts +101 -100
  178. package/src/modules/primitives/command/createExchangeRate.ts +50 -59
  179. package/src/modules/primitives/command/createUnit.generated.ts +6 -0
  180. package/src/modules/primitives/command/createUnit.test.ts +92 -95
  181. package/src/modules/primitives/command/createUnit.ts +54 -57
  182. package/src/modules/primitives/command/deactivateCategory.generated.ts +6 -0
  183. package/src/modules/primitives/command/deactivateCategory.test.ts +27 -28
  184. package/src/modules/primitives/command/deactivateCategory.ts +43 -50
  185. package/src/modules/primitives/command/deactivateCurrency.generated.ts +6 -0
  186. package/src/modules/primitives/command/deactivateCurrency.test.ts +23 -38
  187. package/src/modules/primitives/command/deactivateCurrency.ts +31 -38
  188. package/src/modules/primitives/command/deactivateUnit.generated.ts +6 -0
  189. package/src/modules/primitives/command/deactivateUnit.test.ts +27 -23
  190. package/src/modules/primitives/command/deactivateUnit.ts +39 -49
  191. package/src/modules/primitives/command/setBaseCurrency.generated.ts +6 -0
  192. package/src/modules/primitives/command/setBaseCurrency.test.ts +40 -33
  193. package/src/modules/primitives/command/setBaseCurrency.ts +43 -50
  194. package/src/modules/primitives/command/setReferenceUnit.generated.ts +6 -0
  195. package/src/modules/primitives/command/setReferenceUnit.test.ts +39 -35
  196. package/src/modules/primitives/command/setReferenceUnit.ts +46 -59
  197. package/src/modules/primitives/db/unit.ts +13 -3
  198. package/src/modules/primitives/docs/commands/ActivateCategory.md +1 -2
  199. package/src/modules/primitives/docs/commands/ActivateCurrency.md +1 -2
  200. package/src/modules/primitives/docs/commands/ActivateUnit.md +1 -2
  201. package/src/modules/primitives/docs/commands/CreateCategory.md +1 -4
  202. package/src/modules/primitives/docs/commands/CreateCurrency.md +3 -4
  203. package/src/modules/primitives/docs/commands/CreateExchangeRate.md +4 -5
  204. package/src/modules/primitives/docs/commands/CreateUnit.md +5 -5
  205. package/src/modules/primitives/docs/commands/DeactivateCategory.md +2 -3
  206. package/src/modules/primitives/docs/commands/DeactivateCurrency.md +2 -3
  207. package/src/modules/primitives/docs/commands/DeactivateUnit.md +2 -3
  208. package/src/modules/primitives/docs/commands/SetBaseCurrency.md +2 -3
  209. package/src/modules/primitives/docs/commands/SetReferenceUnit.md +2 -3
  210. package/src/modules/primitives/docs/models/Currency.md +4 -0
  211. package/src/modules/primitives/docs/models/ExchangeRate.md +4 -1
  212. package/src/modules/primitives/docs/models/Unit.md +4 -1
  213. package/src/modules/primitives/docs/models/UoMCategory.md +2 -0
  214. package/src/modules/primitives/docs/{commands → queries}/ConvertAmount.md +3 -5
  215. package/src/modules/primitives/docs/{commands → queries}/ConvertQuantity.md +3 -5
  216. package/src/modules/primitives/docs/queries/GetBaseCurrency.md +32 -0
  217. package/src/modules/primitives/docs/queries/GetCurrency.md +36 -0
  218. package/src/modules/primitives/docs/queries/GetUnit.md +36 -0
  219. package/src/modules/primitives/docs/queries/GetUoMCategory.md +36 -0
  220. package/src/modules/primitives/docs/queries/ListUnitsByCategory.md +26 -0
  221. package/src/modules/primitives/generated/kysely-tailordb.ts +24 -45
  222. package/src/modules/primitives/index.ts +17 -6
  223. package/src/modules/primitives/lib/errors.generated.ts +112 -0
  224. package/src/modules/primitives/{permissions.ts → lib/permissions.generated.ts} +9 -10
  225. package/src/modules/primitives/module.ts +39 -27
  226. package/src/modules/primitives/query/convertAmount.generated.ts +5 -0
  227. package/src/modules/primitives/{command → query}/convertAmount.test.ts +4 -21
  228. package/src/modules/primitives/query/convertAmount.ts +121 -0
  229. package/src/modules/primitives/query/convertQuantity.generated.ts +5 -0
  230. package/src/modules/primitives/{command → query}/convertQuantity.test.ts +8 -15
  231. package/src/modules/primitives/query/convertQuantity.ts +63 -0
  232. package/src/modules/primitives/query/getBaseCurrency.generated.ts +5 -0
  233. package/src/modules/primitives/query/getBaseCurrency.test.ts +28 -0
  234. package/src/modules/primitives/query/getBaseCurrency.ts +16 -0
  235. package/src/modules/primitives/query/getCurrency.generated.ts +5 -0
  236. package/src/modules/primitives/query/getCurrency.test.ts +47 -0
  237. package/src/modules/primitives/query/getCurrency.ts +18 -0
  238. package/src/modules/primitives/query/getUnit.generated.ts +5 -0
  239. package/src/modules/primitives/query/getUnit.test.ts +47 -0
  240. package/src/modules/primitives/query/getUnit.ts +18 -0
  241. package/src/modules/primitives/query/getUoMCategory.generated.ts +5 -0
  242. package/src/modules/primitives/query/getUoMCategory.test.ts +47 -0
  243. package/src/modules/primitives/query/getUoMCategory.ts +18 -0
  244. package/src/modules/primitives/query/listUnitsByCategory.generated.ts +5 -0
  245. package/src/modules/primitives/query/listUnitsByCategory.ts +16 -0
  246. package/src/modules/primitives/tailor.config.ts +3 -3
  247. package/src/modules/shared/defineCommand.test.ts +23 -10
  248. package/src/modules/shared/defineCommand.ts +23 -10
  249. package/src/modules/shared/defineQuery.test.ts +28 -0
  250. package/src/modules/shared/defineQuery.ts +16 -0
  251. package/src/modules/shared/internal.ts +3 -1
  252. package/src/modules/shared/requirePermission.test.ts +22 -21
  253. package/src/modules/shared/requirePermission.ts +8 -2
  254. package/src/modules/shared/result.ts +12 -0
  255. package/src/modules/shared/types.ts +8 -0
  256. package/src/modules/testing/index.ts +36 -11
  257. package/src/modules/user-management/command/activateUser.generated.ts +6 -0
  258. package/src/modules/user-management/command/activateUser.test.ts +27 -27
  259. package/src/modules/user-management/command/activateUser.ts +40 -48
  260. package/src/modules/user-management/command/assignPermissionToRole.generated.ts +6 -0
  261. package/src/modules/user-management/command/assignPermissionToRole.test.ts +42 -43
  262. package/src/modules/user-management/command/assignPermissionToRole.ts +59 -62
  263. package/src/modules/user-management/command/assignRoleToUser.generated.ts +6 -0
  264. package/src/modules/user-management/command/assignRoleToUser.test.ts +70 -63
  265. package/src/modules/user-management/command/assignRoleToUser.ts +63 -66
  266. package/src/modules/user-management/command/createPermission.generated.ts +6 -0
  267. package/src/modules/user-management/command/createPermission.test.ts +45 -38
  268. package/src/modules/user-management/command/createPermission.ts +42 -46
  269. package/src/modules/user-management/command/createRole.generated.ts +6 -0
  270. package/src/modules/user-management/command/createRole.test.ts +30 -29
  271. package/src/modules/user-management/command/createRole.ts +33 -33
  272. package/src/modules/user-management/command/createUser.generated.ts +6 -0
  273. package/src/modules/user-management/command/createUser.test.ts +64 -42
  274. package/src/modules/user-management/command/createUser.ts +54 -56
  275. package/src/modules/user-management/command/deactivateUser.generated.ts +6 -0
  276. package/src/modules/user-management/command/deactivateUser.test.ts +27 -27
  277. package/src/modules/user-management/command/deactivateUser.ts +40 -48
  278. package/src/modules/user-management/command/logAuditEvent.generated.ts +6 -0
  279. package/src/modules/user-management/command/logAuditEvent.test.ts +50 -42
  280. package/src/modules/user-management/command/logAuditEvent.ts +25 -28
  281. package/src/modules/user-management/command/reactivateUser.generated.ts +6 -0
  282. package/src/modules/user-management/command/reactivateUser.test.ts +31 -27
  283. package/src/modules/user-management/command/reactivateUser.ts +40 -48
  284. package/src/modules/user-management/command/revokePermissionFromRole.generated.ts +6 -0
  285. package/src/modules/user-management/command/revokePermissionFromRole.test.ts +52 -51
  286. package/src/modules/user-management/command/revokePermissionFromRole.ts +60 -57
  287. package/src/modules/user-management/command/revokeRoleFromUser.generated.ts +6 -0
  288. package/src/modules/user-management/command/revokeRoleFromUser.test.ts +53 -48
  289. package/src/modules/user-management/command/revokeRoleFromUser.ts +58 -57
  290. package/src/modules/user-management/docs/commands/CreatePermission.md +2 -2
  291. package/src/modules/user-management/docs/commands/CreateRole.md +1 -1
  292. package/src/modules/user-management/docs/models/AuditEvent.md +2 -0
  293. package/src/modules/user-management/docs/models/Permission.md +2 -0
  294. package/src/modules/user-management/docs/models/Role.md +2 -0
  295. package/src/modules/user-management/docs/models/RolePermission.md +2 -0
  296. package/src/modules/user-management/docs/models/User.md +2 -0
  297. package/src/modules/user-management/docs/models/UserRole.md +2 -0
  298. package/src/modules/user-management/generated/enums.ts +11 -11
  299. package/src/modules/user-management/generated/kysely-tailordb.ts +27 -56
  300. package/src/modules/user-management/index.ts +2 -2
  301. package/src/modules/user-management/lib/errors.generated.ts +67 -0
  302. package/src/modules/user-management/{permissions.ts → lib/permissions.generated.ts} +8 -7
  303. package/src/modules/user-management/module.ts +22 -22
  304. package/src/modules/user-management/tailor.config.ts +3 -3
  305. package/src/schemas.ts +2 -1
  306. package/skills/1-module-docs/references/structure.md +0 -22
  307. package/skills/2-module-feature-breakdown/references/commands.md +0 -48
  308. package/skills/2-module-feature-breakdown/references/structure.md +0 -22
  309. package/skills/3-module-doc-review/references/commands.md +0 -54
  310. package/skills/3-module-doc-review/references/models.md +0 -29
  311. package/skills/4-module-tdd-implementation/SKILL.md +0 -74
  312. package/skills/4-module-tdd-implementation/references/commands.md +0 -45
  313. package/skills/4-module-tdd-implementation/references/errors.md +0 -7
  314. package/skills/4-module-tdd-implementation/references/models.md +0 -30
  315. package/skills/4-module-tdd-implementation/references/structure.md +0 -22
  316. package/skills/4-module-tdd-implementation/references/testing.md +0 -37
  317. package/skills/5-module-implementation-review/references/commands.md +0 -45
  318. package/skills/5-module-implementation-review/references/errors.md +0 -7
  319. package/skills/5-module-implementation-review/references/exports.md +0 -8
  320. package/skills/5-module-implementation-review/references/models.md +0 -30
  321. package/src/modules/primitives/command/convertAmount.ts +0 -126
  322. package/src/modules/primitives/command/convertQuantity.ts +0 -73
  323. package/src/modules/primitives/lib/errors.ts +0 -138
  324. package/src/modules/user-management/lib/errors.ts +0 -81
  325. /package/skills/{app-compose-1-requirement-analysis → erp-kit-app-1-requirements}/references/structure.md +0 -0
  326. /package/skills/{app-compose-2-requirements-breakdown → erp-kit-app-2-breakdown}/references/screen-detailview.md +0 -0
  327. /package/skills/{app-compose-2-requirements-breakdown → erp-kit-app-2-breakdown}/references/screen-form.md +0 -0
  328. /package/skills/{app-compose-2-requirements-breakdown → erp-kit-app-2-breakdown}/references/screen-listview.md +0 -0
  329. /package/skills/{app-compose-2-requirements-breakdown → erp-kit-app-2-breakdown}/references/structure.md +0 -0
  330. /package/skills/{app-compose-3-doc-review → erp-kit-app-3-doc-review}/references/structure.md +0 -0
  331. /package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/references/component.md +0 -0
  332. /package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/references/screen-detailview.md +0 -0
  333. /package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/references/screen-form.md +0 -0
  334. /package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/references/screen-listview.md +0 -0
  335. /package/skills/{app-compose-4-design-mock → erp-kit-app-4-design}/references/structure.md +0 -0
  336. /package/skills/{app-compose-5-design-mock-review → erp-kit-app-5-design-review}/references/component.md +0 -0
  337. /package/skills/{app-compose-5-design-mock-review → erp-kit-app-5-design-review}/references/screen-detailview.md +0 -0
  338. /package/skills/{app-compose-5-design-mock-review → erp-kit-app-5-design-review}/references/screen-form.md +0 -0
  339. /package/skills/{app-compose-5-design-mock-review → erp-kit-app-5-design-review}/references/screen-listview.md +0 -0
  340. /package/skills/{app-compose-6-implementation-spec → erp-kit-app-6-impl-spec}/references/auth.md +0 -0
  341. /package/skills/{app-compose-6-implementation-spec → erp-kit-app-6-impl-spec}/references/structure.md +0 -0
  342. /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.1.1",
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.1",
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.2",
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.1",
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": "pnpm generate:primitives && pnpm generate:user-management",
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
@@ -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-compose-1-requirement-analysis
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-compose-2-requirements-breakdown` to create Tier 3 documentation.
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-compose-2-requirements-breakdown
3
- description: Create Tier 3 documentation (stories, screens) by breaking down business flows. Use after completing Tier 1-2 documentation with app-compose-1-requirement-analysis.
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-compose-3-doc-review` to validate documentation parity.
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-compose-3-doc-review
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-compose-4-design-mock` to create visual UI mockups from screen specifications.
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-compose-4-design-mock
3
- description: Create design mockups from screen specifications using .pen files. Use after completing documentation review with app-compose-3-doc-review. Generates visual UI mockups with shadcn components.
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-compose-5-design-mock-review` to review and validate the mockups against screen specifications.
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-compose-5-design-mock-review
3
- description: Review design mockups (.pen files) against screen specifications. Use after completing design mockups with app-compose-4-design-mock. Validates visual consistency, detects regressions, and fixes layout issues.
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-compose-4-design-mock)
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-compose-6-implementation-spec` to create Tier 4 documentation (resolvers).
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-compose-6-implementation-spec
3
- description: Create Tier 4 documentation (resolvers) for GraphQL operations. Use after completing design review with app-compose-5-design-mock-review.
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 `1-module-docs` skill
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: mock-scenario
2
+ name: erp-kit-mock-scenario
3
3
  description: Scaffold a new Mockoon mock scenario with CRUD routes, error scenarios, and registry updates
4
4
  ---
5
5
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: 1-module-docs
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: 2-module-feature-breakdown
3
- description: Use when breaking down a feature spec into model and command documentation. Triggers on feature implementation planning, creating model docs, creating command docs, or when user references model.yml/command.yml schemas.
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 command documentation following framework schemas.
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 command documentation
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 command, scaffold the documentation files using `erp-kit` CLI:
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
- - [Module structure](references/structure.md)
71
- - [Model patterns](references/models.md)
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-module-review
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 (command specifications) and model documentation (data structures).
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 Model Documentation
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
- ### 4. Feature → Command Parity Check
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
- ### 5. Feature → Model Parity Check
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
- ### 6. Command → Model Consistency Check
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
- ### 7. Report Findings
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
- | Feature Operation | Expected Command Doc |
222
- | ----------------- | -------------------- |
223
- | "Add X" | addX / createX |
224
- | "Update X" | updateX |
225
- | "Delete X" | deleteX |
226
- | "Set default X" | setDefaultX |
227
- | "Activate X" | activateX |
228
- | "Deactivate X" | deactivateX |
229
- | "Assign X to Y" | assignXToY |
230
- | "Remove X from Y" | removeXFromY |
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
- - [Model patterns](references/models.md)
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.