@tailor-platform/erp-kit 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (618) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -23
  3. package/dist/cli.mjs +1613 -0
  4. package/package.json +14 -13
  5. package/schemas/app-compose/story.yml +12 -0
  6. package/schemas/module/command.yml +9 -0
  7. package/schemas/module/module.yml +4 -0
  8. package/schemas/module/query.yml +9 -0
  9. package/skills/erp-kit-app-1-requirements/SKILL.md +4 -4
  10. package/skills/erp-kit-app-2-requirements-review/SKILL.md +102 -0
  11. package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +66 -0
  12. package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +69 -0
  13. package/skills/erp-kit-app-2-requirements-review/references/requirements-report-format.md +25 -0
  14. package/skills/erp-kit-app-3-plan/SKILL.md +157 -0
  15. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +107 -0
  16. package/skills/erp-kit-app-3-plan/references/screen-extraction.md +74 -0
  17. package/skills/erp-kit-app-3-plan/references/story-extraction.md +86 -0
  18. package/skills/erp-kit-app-4-plan-review/SKILL.md +177 -0
  19. package/skills/erp-kit-app-4-plan-review/references/actor-flow-parity.md +73 -0
  20. package/skills/erp-kit-app-4-plan-review/references/business-flow-story-parity.md +86 -0
  21. package/skills/erp-kit-app-4-plan-review/references/orphan-detection.md +69 -0
  22. package/skills/erp-kit-app-4-plan-review/references/parity-report-format.md +52 -0
  23. package/skills/erp-kit-app-4-plan-review/references/story-resolver-parity.md +83 -0
  24. package/skills/erp-kit-app-4-plan-review/references/story-screen-parity.md +73 -0
  25. package/skills/{erp-kit-app-5-implementation → erp-kit-app-5-impl-backend}/SKILL.md +24 -68
  26. package/skills/erp-kit-app-5-impl-backend/references/app-config.md +38 -0
  27. package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +48 -0
  28. package/skills/erp-kit-app-5-impl-backend/references/resolver-patterns.md +68 -0
  29. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +74 -0
  30. package/skills/{erp-kit-app-5-implementation/references/frontend.md → erp-kit-app-6-impl-frontend/references/pages.md} +8 -90
  31. package/skills/erp-kit-app-7-impl-review/SKILL.md +176 -0
  32. package/skills/erp-kit-app-7-impl-review/references/impl-parity-report-format.md +52 -0
  33. package/skills/erp-kit-app-7-impl-review/references/module-wiring-parity.md +84 -0
  34. package/skills/erp-kit-app-7-impl-review/references/resolver-doc-code-parity.md +86 -0
  35. package/skills/erp-kit-app-7-impl-review/references/screen-doc-code-parity.md +86 -0
  36. package/skills/erp-kit-module-1-requirements/SKILL.md +126 -0
  37. package/skills/erp-kit-module-1-requirements/references/boundary-analysis.md +51 -0
  38. package/skills/erp-kit-module-1-requirements/references/erp-research.md +57 -0
  39. package/skills/erp-kit-module-1-requirements/references/feature-doc.md +61 -0
  40. package/skills/erp-kit-module-2-requirements-review/SKILL.md +112 -0
  41. package/skills/erp-kit-module-2-requirements-review/references/best-practices-check.md +79 -0
  42. package/skills/erp-kit-module-2-requirements-review/references/boundary-consistency-check.md +70 -0
  43. package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +25 -0
  44. package/skills/erp-kit-module-3-plan/SKILL.md +107 -0
  45. package/skills/erp-kit-module-3-plan/references/command-extraction.md +87 -0
  46. package/skills/erp-kit-module-3-plan/references/model-extraction.md +72 -0
  47. package/skills/erp-kit-module-3-plan/references/query-extraction.md +59 -0
  48. package/skills/erp-kit-module-4-plan-review/SKILL.md +158 -0
  49. package/skills/erp-kit-module-4-plan-review/references/command-model-consistency.md +46 -0
  50. package/skills/erp-kit-module-4-plan-review/references/feature-command-parity.md +97 -0
  51. package/skills/erp-kit-module-4-plan-review/references/feature-model-parity.md +47 -0
  52. package/skills/erp-kit-module-4-plan-review/references/feature-query-parity.md +70 -0
  53. package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +52 -0
  54. package/skills/erp-kit-module-5-impl/SKILL.md +118 -0
  55. package/skills/erp-kit-module-5-impl/references/command-impl.md +68 -0
  56. package/skills/erp-kit-module-5-impl/references/exports.md +10 -0
  57. package/skills/erp-kit-module-5-impl/references/model-impl.md +45 -0
  58. package/skills/erp-kit-module-5-impl/references/query-impl.md +53 -0
  59. package/skills/erp-kit-module-6-impl-review/SKILL.md +187 -0
  60. package/skills/erp-kit-module-6-impl-review/references/command-doc-code-parity.md +92 -0
  61. package/skills/erp-kit-module-6-impl-review/references/command-doc-test-parity.md +93 -0
  62. package/skills/erp-kit-module-6-impl-review/references/error-implementation-parity.md +95 -0
  63. package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/errors.md +1 -1
  64. package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +52 -0
  65. package/skills/erp-kit-module-6-impl-review/references/model-doc-code-parity.md +80 -0
  66. package/skills/erp-kit-module-shared/SKILL.md +1 -1
  67. package/skills/erp-kit-module-shared/references/commands.md +1 -1
  68. package/skills/erp-kit-module-shared/references/errors.md +12 -9
  69. package/skills/erp-kit-module-shared/references/queries.md +109 -36
  70. package/skills/erp-kit-module-shared/references/testing.md +10 -0
  71. package/skills/erp-kit-update/SKILL.md +2 -2
  72. package/src/app.ts +1 -1
  73. package/src/commands/check.ts +1 -1
  74. package/src/commands/index.ts +16 -5
  75. package/src/commands/init.test.ts +22 -69
  76. package/src/commands/init.ts +28 -115
  77. package/src/commands/lib/distribute.test.ts +126 -0
  78. package/src/commands/lib/distribute.ts +129 -0
  79. package/src/commands/parse-doc-test-cases.ts +55 -0
  80. package/src/commands/scaffold.test.ts +74 -33
  81. package/src/commands/scaffold.ts +54 -18
  82. package/src/commands/sync-check.test.ts +173 -0
  83. package/src/commands/sync-check.ts +103 -2
  84. package/src/commands/update.test.ts +87 -0
  85. package/src/commands/update.ts +41 -0
  86. package/src/generator/generate-code.test.ts +23 -12
  87. package/src/generator/generate-code.ts +22 -16
  88. package/src/integration.test.ts +1 -1
  89. package/src/module.ts +14 -97
  90. package/src/modules/item-management/README.md +8 -0
  91. package/src/modules/item-management/command/activateItem.generated.ts +1 -1
  92. package/src/modules/item-management/command/activateItem.test.ts +12 -18
  93. package/src/modules/item-management/command/activateItem.ts +9 -5
  94. package/src/modules/item-management/command/assignItemToTaxonomy.generated.ts +1 -1
  95. package/src/modules/item-management/command/assignItemToTaxonomy.test.ts +10 -24
  96. package/src/modules/item-management/command/assignItemToTaxonomy.ts +19 -16
  97. package/src/modules/item-management/command/createItem.generated.ts +1 -1
  98. package/src/modules/item-management/command/createItem.test.ts +11 -11
  99. package/src/modules/item-management/command/createItem.ts +16 -7
  100. package/src/modules/item-management/command/createTaxonomyNode.generated.ts +1 -1
  101. package/src/modules/item-management/command/createTaxonomyNode.test.ts +9 -9
  102. package/src/modules/item-management/command/createTaxonomyNode.ts +33 -14
  103. package/src/modules/item-management/command/deactivateItem.generated.ts +1 -1
  104. package/src/modules/item-management/command/deactivateItem.test.ts +12 -18
  105. package/src/modules/item-management/command/deactivateItem.ts +9 -5
  106. package/src/modules/item-management/command/deleteItem.generated.ts +1 -1
  107. package/src/modules/item-management/command/deleteItem.test.ts +10 -16
  108. package/src/modules/item-management/command/deleteItem.ts +9 -5
  109. package/src/modules/item-management/command/deleteTaxonomyNode.generated.ts +1 -1
  110. package/src/modules/item-management/command/deleteTaxonomyNode.test.ts +10 -16
  111. package/src/modules/item-management/command/deleteTaxonomyNode.ts +22 -12
  112. package/src/modules/item-management/command/moveTaxonomyNode.generated.ts +1 -1
  113. package/src/modules/item-management/command/moveTaxonomyNode.test.ts +10 -10
  114. package/src/modules/item-management/command/moveTaxonomyNode.ts +63 -19
  115. package/src/modules/item-management/command/reactivateItem.generated.ts +1 -1
  116. package/src/modules/item-management/command/reactivateItem.test.ts +12 -18
  117. package/src/modules/item-management/command/reactivateItem.ts +9 -5
  118. package/src/modules/item-management/command/removeItemFromTaxonomy.generated.ts +1 -1
  119. package/src/modules/item-management/command/removeItemFromTaxonomy.test.ts +9 -16
  120. package/src/modules/item-management/command/removeItemFromTaxonomy.ts +11 -6
  121. package/src/modules/item-management/command/updateItem.generated.ts +1 -1
  122. package/src/modules/item-management/command/updateItem.test.ts +16 -16
  123. package/src/modules/item-management/command/updateItem.ts +11 -6
  124. package/src/modules/item-management/command/updateTaxonomyNode.generated.ts +1 -1
  125. package/src/modules/item-management/command/updateTaxonomyNode.test.ts +14 -20
  126. package/src/modules/item-management/command/updateTaxonomyNode.ts +9 -6
  127. package/src/modules/item-management/docs/commands/ActivateItem.md +8 -0
  128. package/src/modules/item-management/docs/commands/AssignItemToTaxonomy.md +7 -0
  129. package/src/modules/item-management/docs/commands/CreateItem.md +10 -0
  130. package/src/modules/item-management/docs/commands/CreateTaxonomyNode.md +9 -0
  131. package/src/modules/item-management/docs/commands/DeactivateItem.md +8 -0
  132. package/src/modules/item-management/docs/commands/DeleteItem.md +7 -0
  133. package/src/modules/item-management/docs/commands/DeleteTaxonomyNode.md +7 -0
  134. package/src/modules/item-management/docs/commands/MoveTaxonomyNode.md +10 -0
  135. package/src/modules/item-management/docs/commands/ReactivateItem.md +8 -0
  136. package/src/modules/item-management/docs/commands/RemoveItemFromTaxonomy.md +5 -0
  137. package/src/modules/item-management/docs/commands/UpdateItem.md +15 -0
  138. package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +9 -0
  139. package/src/modules/item-management/docs/queries/CalculateNodeDepth.md +8 -0
  140. package/src/modules/item-management/docs/queries/CalculateSubtreeDepth.md +7 -0
  141. package/src/modules/item-management/docs/queries/DetectCircularReference.md +9 -0
  142. package/src/modules/item-management/docs/queries/GetItem.md +9 -0
  143. package/src/modules/item-management/docs/queries/GetItemTaxonomyAssignment.md +5 -0
  144. package/src/modules/item-management/docs/queries/GetTaxonomyNode.md +7 -0
  145. package/src/modules/item-management/docs/queries/GetTaxonomyNodeAssignments.md +5 -0
  146. package/src/modules/item-management/docs/queries/GetTaxonomyNodeChildren.md +6 -0
  147. package/src/modules/item-management/index.ts +0 -51
  148. package/src/modules/item-management/lib/errors.generated.ts +24 -24
  149. package/src/modules/item-management/lib/permissions.generated.ts +1 -1
  150. package/src/modules/item-management/lib/types.ts +1 -1
  151. package/src/modules/item-management/module.ts +1 -1
  152. package/src/modules/item-management/query/calculateNodeDepth.generated.ts +1 -1
  153. package/src/modules/item-management/query/calculateNodeDepth.test.ts +21 -6
  154. package/src/modules/item-management/query/calculateNodeDepth.ts +2 -2
  155. package/src/modules/item-management/query/calculateSubtreeDepth.generated.ts +1 -1
  156. package/src/modules/item-management/query/calculateSubtreeDepth.test.ts +17 -5
  157. package/src/modules/item-management/query/calculateSubtreeDepth.ts +2 -2
  158. package/src/modules/item-management/query/detectCircularReference.generated.ts +1 -1
  159. package/src/modules/item-management/query/detectCircularReference.test.ts +25 -7
  160. package/src/modules/item-management/query/detectCircularReference.ts +4 -4
  161. package/src/modules/item-management/query/getItem.generated.ts +1 -1
  162. package/src/modules/item-management/query/getItem.test.ts +25 -7
  163. package/src/modules/item-management/query/getItem.ts +2 -2
  164. package/src/modules/item-management/query/getItemTaxonomyAssignment.generated.ts +1 -1
  165. package/src/modules/item-management/query/getItemTaxonomyAssignment.test.ts +9 -3
  166. package/src/modules/item-management/query/getItemTaxonomyAssignment.ts +2 -2
  167. package/src/modules/item-management/query/getTaxonomyNode.generated.ts +1 -1
  168. package/src/modules/item-management/query/getTaxonomyNode.test.ts +17 -5
  169. package/src/modules/item-management/query/getTaxonomyNode.ts +2 -2
  170. package/src/modules/item-management/query/getTaxonomyNodeAssignments.generated.ts +1 -1
  171. package/src/modules/item-management/query/getTaxonomyNodeAssignments.test.ts +9 -3
  172. package/src/modules/item-management/query/getTaxonomyNodeAssignments.ts +2 -2
  173. package/src/modules/item-management/query/getTaxonomyNodeChildren.generated.ts +1 -1
  174. package/src/modules/item-management/query/getTaxonomyNodeChildren.test.ts +13 -4
  175. package/src/modules/item-management/query/getTaxonomyNodeChildren.ts +2 -2
  176. package/src/modules/item-management/tailor.config.ts +6 -4
  177. package/src/modules/item-management/tailor.d.ts +13 -0
  178. package/src/modules/primitives/README.md +8 -0
  179. package/src/modules/primitives/command/activateCategory.generated.ts +1 -1
  180. package/src/modules/primitives/command/activateCategory.test.ts +8 -18
  181. package/src/modules/primitives/command/activateCategory.ts +9 -5
  182. package/src/modules/primitives/command/activateCurrency.generated.ts +1 -1
  183. package/src/modules/primitives/command/activateCurrency.test.ts +8 -18
  184. package/src/modules/primitives/command/activateCurrency.ts +9 -5
  185. package/src/modules/primitives/command/activateUnit.generated.ts +1 -1
  186. package/src/modules/primitives/command/activateUnit.test.ts +8 -15
  187. package/src/modules/primitives/command/activateUnit.ts +9 -5
  188. package/src/modules/primitives/command/createCategory.generated.ts +1 -1
  189. package/src/modules/primitives/command/createCategory.test.ts +29 -44
  190. package/src/modules/primitives/command/createCategory.ts +9 -5
  191. package/src/modules/primitives/command/createCurrency.generated.ts +1 -1
  192. package/src/modules/primitives/command/createCurrency.test.ts +53 -78
  193. package/src/modules/primitives/command/createCurrency.ts +9 -6
  194. package/src/modules/primitives/command/createExchangeRate.generated.ts +1 -1
  195. package/src/modules/primitives/command/createExchangeRate.test.ts +59 -97
  196. package/src/modules/primitives/command/createExchangeRate.ts +13 -7
  197. package/src/modules/primitives/command/createUnit.generated.ts +1 -1
  198. package/src/modules/primitives/command/createUnit.test.ts +59 -90
  199. package/src/modules/primitives/command/createUnit.ts +9 -6
  200. package/src/modules/primitives/command/deactivateCategory.generated.ts +1 -1
  201. package/src/modules/primitives/command/deactivateCategory.test.ts +15 -33
  202. package/src/modules/primitives/command/deactivateCategory.ts +9 -5
  203. package/src/modules/primitives/command/deactivateCurrency.generated.ts +1 -1
  204. package/src/modules/primitives/command/deactivateCurrency.test.ts +12 -26
  205. package/src/modules/primitives/command/deactivateCurrency.ts +9 -5
  206. package/src/modules/primitives/command/deactivateUnit.generated.ts +1 -1
  207. package/src/modules/primitives/command/deactivateUnit.test.ts +15 -30
  208. package/src/modules/primitives/command/deactivateUnit.ts +14 -7
  209. package/src/modules/primitives/command/setBaseCurrency.generated.ts +1 -1
  210. package/src/modules/primitives/command/setBaseCurrency.test.ts +18 -40
  211. package/src/modules/primitives/command/setBaseCurrency.ts +15 -7
  212. package/src/modules/primitives/command/setReferenceUnit.generated.ts +1 -1
  213. package/src/modules/primitives/command/setReferenceUnit.test.ts +22 -44
  214. package/src/modules/primitives/command/setReferenceUnit.ts +21 -9
  215. package/src/modules/primitives/docs/commands/ActivateCategory.md +6 -0
  216. package/src/modules/primitives/docs/commands/ActivateCurrency.md +6 -0
  217. package/src/modules/primitives/docs/commands/ActivateUnit.md +6 -0
  218. package/src/modules/primitives/docs/commands/CreateCategory.md +6 -0
  219. package/src/modules/primitives/docs/commands/CreateCurrency.md +10 -0
  220. package/src/modules/primitives/docs/commands/CreateExchangeRate.md +11 -0
  221. package/src/modules/primitives/docs/commands/CreateUnit.md +10 -0
  222. package/src/modules/primitives/docs/commands/DeactivateCategory.md +7 -0
  223. package/src/modules/primitives/docs/commands/DeactivateCurrency.md +7 -0
  224. package/src/modules/primitives/docs/commands/DeactivateUnit.md +7 -0
  225. package/src/modules/primitives/docs/commands/SetBaseCurrency.md +7 -0
  226. package/src/modules/primitives/docs/commands/SetReferenceUnit.md +7 -0
  227. package/src/modules/primitives/docs/queries/ConvertAmount.md +14 -0
  228. package/src/modules/primitives/docs/queries/ConvertQuantity.md +13 -0
  229. package/src/modules/primitives/docs/queries/GetBaseCurrency.md +5 -0
  230. package/src/modules/primitives/docs/queries/GetCurrency.md +7 -0
  231. package/src/modules/primitives/docs/queries/GetUnit.md +7 -0
  232. package/src/modules/primitives/docs/queries/GetUoMCategory.md +7 -0
  233. package/src/modules/primitives/docs/queries/ListUnitsByCategory.md +15 -5
  234. package/src/modules/primitives/index.ts +0 -49
  235. package/src/modules/primitives/lib/errors.generated.ts +23 -23
  236. package/src/modules/primitives/lib/permissions.generated.ts +1 -1
  237. package/src/modules/primitives/lib/types.ts +1 -1
  238. package/src/modules/primitives/module.ts +1 -1
  239. package/src/modules/primitives/query/convertAmount.generated.ts +1 -1
  240. package/src/modules/primitives/query/convertAmount.test.ts +110 -77
  241. package/src/modules/primitives/query/convertAmount.ts +61 -47
  242. package/src/modules/primitives/query/convertQuantity.generated.ts +1 -1
  243. package/src/modules/primitives/query/convertQuantity.test.ts +99 -69
  244. package/src/modules/primitives/query/convertQuantity.ts +12 -10
  245. package/src/modules/primitives/query/getBaseCurrency.generated.ts +1 -1
  246. package/src/modules/primitives/query/getBaseCurrency.test.ts +10 -4
  247. package/src/modules/primitives/query/getBaseCurrency.ts +2 -2
  248. package/src/modules/primitives/query/getCurrency.generated.ts +1 -1
  249. package/src/modules/primitives/query/getCurrency.test.ts +17 -5
  250. package/src/modules/primitives/query/getCurrency.ts +2 -2
  251. package/src/modules/primitives/query/getUnit.generated.ts +1 -1
  252. package/src/modules/primitives/query/getUnit.test.ts +17 -5
  253. package/src/modules/primitives/query/getUnit.ts +2 -2
  254. package/src/modules/primitives/query/getUoMCategory.generated.ts +1 -1
  255. package/src/modules/primitives/query/getUoMCategory.test.ts +17 -5
  256. package/src/modules/primitives/query/getUoMCategory.ts +2 -2
  257. package/src/modules/primitives/query/listUnitsByCategory.generated.ts +1 -1
  258. package/src/modules/primitives/query/listUnitsByCategory.test.ts +80 -0
  259. package/src/modules/primitives/query/listUnitsByCategory.ts +19 -3
  260. package/src/modules/primitives/tailor.config.ts +6 -4
  261. package/src/modules/primitives/tailor.d.ts +13 -0
  262. package/src/modules/product-management/README.md +52 -0
  263. package/src/modules/product-management/command/activateProduct.generated.ts +6 -0
  264. package/src/modules/product-management/command/activateProduct.test.ts +40 -0
  265. package/src/modules/product-management/command/activateProduct.ts +42 -0
  266. package/src/modules/product-management/command/assignProductToCategory.generated.ts +6 -0
  267. package/src/modules/product-management/command/assignProductToCategory.test.ts +90 -0
  268. package/src/modules/product-management/command/assignProductToCategory.ts +62 -0
  269. package/src/modules/product-management/command/createProduct.generated.ts +6 -0
  270. package/src/modules/product-management/command/createProduct.test.ts +149 -0
  271. package/src/modules/product-management/command/createProduct.ts +73 -0
  272. package/src/modules/product-management/command/createProductAttribute.generated.ts +6 -0
  273. package/src/modules/product-management/command/createProductAttribute.test.ts +70 -0
  274. package/src/modules/product-management/command/createProductAttribute.ts +53 -0
  275. package/src/modules/product-management/command/createProductAttributeValue.generated.ts +6 -0
  276. package/src/modules/product-management/command/createProductAttributeValue.test.ts +68 -0
  277. package/src/modules/product-management/command/createProductAttributeValue.ts +63 -0
  278. package/src/modules/product-management/command/createProductCategory.generated.ts +6 -0
  279. package/src/modules/product-management/command/createProductCategory.test.ts +135 -0
  280. package/src/modules/product-management/command/createProductCategory.ts +82 -0
  281. package/src/modules/product-management/command/deactivateProduct.generated.ts +6 -0
  282. package/src/modules/product-management/command/deactivateProduct.test.ts +40 -0
  283. package/src/modules/product-management/command/deactivateProduct.ts +42 -0
  284. package/src/modules/product-management/command/deleteProduct.generated.ts +6 -0
  285. package/src/modules/product-management/command/deleteProduct.test.ts +42 -0
  286. package/src/modules/product-management/command/deleteProduct.ts +42 -0
  287. package/src/modules/product-management/command/deleteProductAttribute.generated.ts +6 -0
  288. package/src/modules/product-management/command/deleteProductAttribute.test.ts +49 -0
  289. package/src/modules/product-management/command/deleteProductAttribute.ts +45 -0
  290. package/src/modules/product-management/command/deleteProductAttributeValue.generated.ts +6 -0
  291. package/src/modules/product-management/command/deleteProductAttributeValue.test.ts +71 -0
  292. package/src/modules/product-management/command/deleteProductAttributeValue.ts +68 -0
  293. package/src/modules/product-management/command/deleteProductCategory.generated.ts +6 -0
  294. package/src/modules/product-management/command/deleteProductCategory.test.ts +74 -0
  295. package/src/modules/product-management/command/deleteProductCategory.ts +53 -0
  296. package/src/modules/product-management/command/generateVariants.generated.ts +6 -0
  297. package/src/modules/product-management/command/generateVariants.test.ts +365 -0
  298. package/src/modules/product-management/command/generateVariants.ts +168 -0
  299. package/src/modules/product-management/command/moveProductCategory.generated.ts +6 -0
  300. package/src/modules/product-management/command/moveProductCategory.test.ts +170 -0
  301. package/src/modules/product-management/command/moveProductCategory.ts +124 -0
  302. package/src/modules/product-management/command/reactivateProduct.generated.ts +6 -0
  303. package/src/modules/product-management/command/reactivateProduct.test.ts +40 -0
  304. package/src/modules/product-management/command/reactivateProduct.ts +42 -0
  305. package/src/modules/product-management/command/removeProductFromCategory.generated.ts +6 -0
  306. package/src/modules/product-management/command/removeProductFromCategory.test.ts +42 -0
  307. package/src/modules/product-management/command/removeProductFromCategory.ts +32 -0
  308. package/src/modules/product-management/command/setProductAttributeAssignment.generated.ts +6 -0
  309. package/src/modules/product-management/command/setProductAttributeAssignment.test.ts +206 -0
  310. package/src/modules/product-management/command/setProductAttributeAssignment.ts +102 -0
  311. package/src/modules/product-management/command/updateProduct.generated.ts +6 -0
  312. package/src/modules/product-management/command/updateProduct.test.ts +168 -0
  313. package/src/modules/product-management/command/updateProduct.ts +95 -0
  314. package/src/modules/product-management/command/updateProductAttribute.generated.ts +6 -0
  315. package/src/modules/product-management/command/updateProductAttribute.test.ts +101 -0
  316. package/src/modules/product-management/command/updateProductAttribute.ts +68 -0
  317. package/src/modules/product-management/command/updateProductAttributeValue.generated.ts +6 -0
  318. package/src/modules/product-management/command/updateProductAttributeValue.test.ts +80 -0
  319. package/src/modules/product-management/command/updateProductAttributeValue.ts +58 -0
  320. package/src/modules/product-management/command/updateProductCategory.generated.ts +6 -0
  321. package/src/modules/product-management/command/updateProductCategory.test.ts +80 -0
  322. package/src/modules/product-management/command/updateProductCategory.ts +66 -0
  323. package/src/modules/product-management/db/product.ts +47 -0
  324. package/src/modules/product-management/db/productAttribute.ts +26 -0
  325. package/src/modules/product-management/db/productAttributeAssignment.ts +58 -0
  326. package/src/modules/product-management/db/productAttributeValue.ts +39 -0
  327. package/src/modules/product-management/db/productCategory.ts +34 -0
  328. package/src/modules/product-management/db/productCategoryAssignment.ts +49 -0
  329. package/src/modules/product-management/db/productVariant.ts +52 -0
  330. package/src/modules/product-management/docs/commands/ActivateProduct.md +39 -0
  331. package/src/modules/product-management/docs/commands/AssignProductToCategory.md +43 -0
  332. package/src/modules/product-management/docs/commands/CreateProduct.md +48 -0
  333. package/src/modules/product-management/docs/commands/CreateProductAttribute.md +39 -0
  334. package/src/modules/product-management/docs/commands/CreateProductAttributeValue.md +42 -0
  335. package/src/modules/product-management/docs/commands/CreateProductCategory.md +54 -0
  336. package/src/modules/product-management/docs/commands/DeactivateProduct.md +39 -0
  337. package/src/modules/product-management/docs/commands/DeleteProduct.md +42 -0
  338. package/src/modules/product-management/docs/commands/DeleteProductAttribute.md +39 -0
  339. package/src/modules/product-management/docs/commands/DeleteProductAttributeValue.md +42 -0
  340. package/src/modules/product-management/docs/commands/DeleteProductCategory.md +43 -0
  341. package/src/modules/product-management/docs/commands/GenerateVariants.md +68 -0
  342. package/src/modules/product-management/docs/commands/MoveProductCategory.md +54 -0
  343. package/src/modules/product-management/docs/commands/ReactivateProduct.md +38 -0
  344. package/src/modules/product-management/docs/commands/RemoveProductFromCategory.md +34 -0
  345. package/src/modules/product-management/docs/commands/SetProductAttributeAssignment.md +62 -0
  346. package/src/modules/product-management/docs/commands/UpdateProduct.md +61 -0
  347. package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +46 -0
  348. package/src/modules/product-management/docs/commands/UpdateProductAttributeValue.md +47 -0
  349. package/src/modules/product-management/docs/commands/UpdateProductCategory.md +46 -0
  350. package/src/modules/product-management/docs/features/attribute-management.md +48 -0
  351. package/src/modules/product-management/docs/features/product-category.md +71 -0
  352. package/src/modules/product-management/docs/features/product-lifecycle.md +66 -0
  353. package/src/modules/product-management/docs/features/variant-generation.md +77 -0
  354. package/src/modules/product-management/docs/models/Product.md +58 -0
  355. package/src/modules/product-management/docs/models/ProductAttribute.md +37 -0
  356. package/src/modules/product-management/docs/models/ProductAttributeAssignment.md +41 -0
  357. package/src/modules/product-management/docs/models/ProductAttributeValue.md +40 -0
  358. package/src/modules/product-management/docs/models/ProductCategory.md +46 -0
  359. package/src/modules/product-management/docs/models/ProductCategoryAssignment.md +37 -0
  360. package/src/modules/product-management/docs/models/ProductVariant.md +41 -0
  361. package/src/modules/product-management/docs/queries/CalculateCategoryDepth.md +47 -0
  362. package/src/modules/product-management/docs/queries/DetectCategoryCircularReference.md +51 -0
  363. package/src/modules/product-management/docs/queries/GetProduct.md +42 -0
  364. package/src/modules/product-management/docs/queries/GetProductAttribute.md +42 -0
  365. package/src/modules/product-management/docs/queries/GetProductAttributeAssignment.md +34 -0
  366. package/src/modules/product-management/docs/queries/GetProductAttributeValue.md +40 -0
  367. package/src/modules/product-management/docs/queries/GetProductCategory.md +42 -0
  368. package/src/modules/product-management/docs/queries/GetProductCategoryAssignment.md +34 -0
  369. package/src/modules/product-management/docs/queries/GetProductVariant.md +41 -0
  370. package/src/modules/product-management/docs/queries/ListAttributeAssignmentsByAttribute.md +34 -0
  371. package/src/modules/product-management/docs/queries/ListCategoryAssignmentsByProduct.md +35 -0
  372. package/src/modules/product-management/docs/queries/ListProductAttributeAssignments.md +34 -0
  373. package/src/modules/product-management/docs/queries/ListProductAttributeValues.md +36 -0
  374. package/src/modules/product-management/docs/queries/ListProductCategoryAssignments.md +34 -0
  375. package/src/modules/product-management/docs/queries/ListProductCategoryChildren.md +34 -0
  376. package/src/modules/product-management/docs/queries/ListProductVariants.md +34 -0
  377. package/src/modules/product-management/generated/enums.ts +9 -0
  378. package/src/modules/product-management/generated/kysely-tailordb.ts +100 -0
  379. package/src/modules/product-management/index.ts +2 -0
  380. package/src/modules/product-management/lib/_db_deps.ts +17 -0
  381. package/src/modules/product-management/lib/errors.generated.ts +152 -0
  382. package/src/modules/product-management/lib/permissions.generated.ts +25 -0
  383. package/src/modules/product-management/lib/types.ts +51 -0
  384. package/src/modules/product-management/module.ts +201 -0
  385. package/src/modules/product-management/query/calculateCategoryDepth.generated.ts +5 -0
  386. package/src/modules/product-management/query/calculateCategoryDepth.test.ts +72 -0
  387. package/src/modules/product-management/query/calculateCategoryDepth.ts +37 -0
  388. package/src/modules/product-management/query/detectCategoryCircularReference.generated.ts +5 -0
  389. package/src/modules/product-management/query/detectCategoryCircularReference.test.ts +72 -0
  390. package/src/modules/product-management/query/detectCategoryCircularReference.ts +44 -0
  391. package/src/modules/product-management/query/getProduct.generated.ts +5 -0
  392. package/src/modules/product-management/query/getProduct.test.ts +59 -0
  393. package/src/modules/product-management/query/getProduct.ts +18 -0
  394. package/src/modules/product-management/query/getProductAttribute.generated.ts +5 -0
  395. package/src/modules/product-management/query/getProductAttribute.test.ts +59 -0
  396. package/src/modules/product-management/query/getProductAttribute.ts +18 -0
  397. package/src/modules/product-management/query/getProductAttributeAssignment.generated.ts +5 -0
  398. package/src/modules/product-management/query/getProductAttributeAssignment.test.ts +37 -0
  399. package/src/modules/product-management/query/getProductAttributeAssignment.ts +18 -0
  400. package/src/modules/product-management/query/getProductAttributeValue.generated.ts +5 -0
  401. package/src/modules/product-management/query/getProductAttributeValue.test.ts +31 -0
  402. package/src/modules/product-management/query/getProductAttributeValue.ts +16 -0
  403. package/src/modules/product-management/query/getProductCategory.generated.ts +5 -0
  404. package/src/modules/product-management/query/getProductCategory.test.ts +59 -0
  405. package/src/modules/product-management/query/getProductCategory.ts +18 -0
  406. package/src/modules/product-management/query/getProductCategoryAssignment.generated.ts +5 -0
  407. package/src/modules/product-management/query/getProductCategoryAssignment.test.ts +37 -0
  408. package/src/modules/product-management/query/getProductCategoryAssignment.ts +18 -0
  409. package/src/modules/product-management/query/getProductVariant.generated.ts +5 -0
  410. package/src/modules/product-management/query/getProductVariant.test.ts +43 -0
  411. package/src/modules/product-management/query/getProductVariant.ts +20 -0
  412. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.generated.ts +5 -0
  413. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.test.ts +31 -0
  414. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.ts +16 -0
  415. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.generated.ts +5 -0
  416. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.test.ts +31 -0
  417. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.ts +16 -0
  418. package/src/modules/product-management/query/listProductAttributeAssignments.generated.ts +5 -0
  419. package/src/modules/product-management/query/listProductAttributeAssignments.test.ts +31 -0
  420. package/src/modules/product-management/query/listProductAttributeAssignments.ts +16 -0
  421. package/src/modules/product-management/query/listProductAttributeValues.generated.ts +5 -0
  422. package/src/modules/product-management/query/listProductAttributeValues.test.ts +31 -0
  423. package/src/modules/product-management/query/listProductAttributeValues.ts +17 -0
  424. package/src/modules/product-management/query/listProductCategoryAssignments.generated.ts +5 -0
  425. package/src/modules/product-management/query/listProductCategoryAssignments.test.ts +31 -0
  426. package/src/modules/product-management/query/listProductCategoryAssignments.ts +16 -0
  427. package/src/modules/product-management/query/listProductCategoryChildren.generated.ts +5 -0
  428. package/src/modules/product-management/query/listProductCategoryChildren.test.ts +31 -0
  429. package/src/modules/product-management/query/listProductCategoryChildren.ts +16 -0
  430. package/src/modules/product-management/query/listProductVariants.generated.ts +5 -0
  431. package/src/modules/product-management/query/listProductVariants.test.ts +31 -0
  432. package/src/modules/product-management/query/listProductVariants.ts +16 -0
  433. package/src/modules/product-management/tailor.config.ts +13 -0
  434. package/src/modules/product-management/tailor.d.ts +13 -0
  435. package/src/modules/product-management/testing/fixtures.ts +151 -0
  436. package/src/modules/user-management/README.md +9 -3
  437. package/src/modules/user-management/command/activateUser.generated.ts +1 -1
  438. package/src/modules/user-management/command/activateUser.test.ts +12 -65
  439. package/src/modules/user-management/command/activateUser.ts +5 -20
  440. package/src/modules/user-management/command/assignPermissionToRole.generated.ts +1 -1
  441. package/src/modules/user-management/command/assignPermissionToRole.test.ts +25 -60
  442. package/src/modules/user-management/command/assignPermissionToRole.ts +5 -24
  443. package/src/modules/user-management/command/assignRoleToUser.generated.ts +1 -1
  444. package/src/modules/user-management/command/assignRoleToUser.test.ts +35 -87
  445. package/src/modules/user-management/command/assignRoleToUser.ts +5 -24
  446. package/src/modules/user-management/command/createPermission.generated.ts +1 -1
  447. package/src/modules/user-management/command/createPermission.test.ts +23 -33
  448. package/src/modules/user-management/command/createPermission.ts +4 -5
  449. package/src/modules/user-management/command/createRole.generated.ts +1 -1
  450. package/src/modules/user-management/command/createRole.test.ts +17 -27
  451. package/src/modules/user-management/command/createRole.ts +4 -5
  452. package/src/modules/user-management/command/createUser.generated.ts +1 -1
  453. package/src/modules/user-management/command/createUser.test.ts +31 -118
  454. package/src/modules/user-management/command/createUser.ts +7 -25
  455. package/src/modules/user-management/command/deactivateUser.generated.ts +1 -1
  456. package/src/modules/user-management/command/deactivateUser.test.ts +12 -65
  457. package/src/modules/user-management/command/deactivateUser.ts +6 -21
  458. package/src/modules/user-management/command/reactivateUser.generated.ts +1 -1
  459. package/src/modules/user-management/command/reactivateUser.test.ts +13 -66
  460. package/src/modules/user-management/command/reactivateUser.ts +5 -20
  461. package/src/modules/user-management/command/revokePermissionFromRole.generated.ts +1 -1
  462. package/src/modules/user-management/command/revokePermissionFromRole.test.ts +24 -62
  463. package/src/modules/user-management/command/revokePermissionFromRole.ts +5 -24
  464. package/src/modules/user-management/command/revokeRoleFromUser.generated.ts +1 -1
  465. package/src/modules/user-management/command/revokeRoleFromUser.test.ts +24 -60
  466. package/src/modules/user-management/command/revokeRoleFromUser.ts +5 -24
  467. package/src/modules/user-management/docs/commands/ActivateUser.md +7 -0
  468. package/src/modules/user-management/docs/commands/AssignPermissionToRole.md +7 -0
  469. package/src/modules/user-management/docs/commands/AssignRoleToUser.md +9 -0
  470. package/src/modules/user-management/docs/commands/CreatePermission.md +12 -0
  471. package/src/modules/user-management/docs/commands/CreateRole.md +9 -0
  472. package/src/modules/user-management/docs/commands/CreateUser.md +11 -0
  473. package/src/modules/user-management/docs/commands/DeactivateUser.md +7 -0
  474. package/src/modules/user-management/docs/commands/ReactivateUser.md +7 -0
  475. package/src/modules/user-management/docs/commands/RevokePermissionFromRole.md +7 -0
  476. package/src/modules/user-management/docs/commands/RevokeRoleFromUser.md +7 -0
  477. package/src/modules/user-management/index.ts +0 -30
  478. package/src/modules/user-management/lib/errors.generated.ts +14 -14
  479. package/src/modules/user-management/lib/permissions.generated.ts +1 -2
  480. package/src/modules/user-management/lib/recomputeUserPermissions.ts +4 -3
  481. package/src/modules/user-management/lib/types.ts +1 -1
  482. package/src/modules/user-management/module.ts +2 -7
  483. package/src/modules/user-management/tailor.config.ts +6 -4
  484. package/src/modules/user-management/tailor.d.ts +13 -0
  485. package/src/modules/user-management/testing/fixtures.ts +1 -20
  486. package/src/schemas.ts +1 -1
  487. package/src/{modules/shared → shared}/defineCommand.test.ts +23 -7
  488. package/src/{modules/shared → shared}/defineCommand.ts +19 -10
  489. package/src/{modules/shared/internal.ts → shared/index.ts} +9 -1
  490. package/src/shared/pagination.test.ts +43 -0
  491. package/src/shared/pagination.ts +22 -0
  492. package/src/{modules/shared → shared}/types.ts +13 -0
  493. package/src/{modules/testing → testing}/index.ts +14 -7
  494. package/src/testing.ts +1 -1
  495. package/src/util.ts +8 -0
  496. package/templates/config/license.config.json +4 -0
  497. package/templates/scaffold/app/backend/.env.example +1 -0
  498. package/templates/scaffold/app/backend/__dot__gitignore +4 -0
  499. package/templates/scaffold/app/backend/eslint.config.js +32 -0
  500. package/templates/scaffold/app/backend/package.json +31 -0
  501. package/templates/scaffold/app/backend/seed/data/AuditEvent.jsonl +0 -0
  502. package/templates/scaffold/app/backend/seed/data/Permission.jsonl +0 -0
  503. package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +20 -0
  504. package/templates/scaffold/app/backend/seed/data/Role.jsonl +0 -0
  505. package/templates/scaffold/app/backend/seed/data/Role.schema.ts +20 -0
  506. package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +0 -0
  507. package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +24 -0
  508. package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -0
  509. package/templates/scaffold/app/backend/seed/data/User.schema.ts +20 -0
  510. package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +0 -0
  511. package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +24 -0
  512. package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -0
  513. package/templates/scaffold/app/backend/seed/data/_User.schema.ts +30 -0
  514. package/templates/scaffold/app/backend/seed/exec.mjs +659 -0
  515. package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +3 -0
  516. package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +3 -0
  517. package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +83 -0
  518. package/templates/scaffold/app/backend/src/modules.ts +9 -0
  519. package/templates/scaffold/app/backend/src/resolvers/createUser.ts +46 -0
  520. package/templates/scaffold/app/backend/tailor.config.ts +68 -0
  521. package/templates/scaffold/app/backend/tailor.d.ts +15 -0
  522. package/templates/scaffold/app/backend/tsconfig.json +19 -0
  523. package/templates/scaffold/app/docs/actors/.gitkeep +0 -0
  524. package/templates/scaffold/app/docs/business-flow/.gitkeep +0 -0
  525. package/templates/scaffold/app/docs/resolver/.gitkeep +0 -0
  526. package/templates/scaffold/app/docs/screen/.gitkeep +0 -0
  527. package/templates/scaffold/app/frontend/.env.example +2 -0
  528. package/templates/scaffold/app/frontend/__dot__gitignore +3 -0
  529. package/templates/scaffold/app/frontend/components.json +23 -0
  530. package/templates/scaffold/app/frontend/eslint.config.js +48 -0
  531. package/templates/scaffold/app/frontend/index.html +13 -0
  532. package/templates/scaffold/app/frontend/package.json +53 -0
  533. package/templates/scaffold/app/frontend/scripts/generate-graphql.mjs +6 -0
  534. package/templates/scaffold/app/frontend/src/App.tsx +58 -0
  535. package/templates/scaffold/app/frontend/src/components/composed/empty-state.tsx +26 -0
  536. package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +28 -0
  537. package/templates/scaffold/app/frontend/src/components/composed/loading.tsx +13 -0
  538. package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +39 -0
  539. package/templates/scaffold/app/frontend/src/components/ui/button.tsx +60 -0
  540. package/templates/scaffold/app/frontend/src/components/ui/card.tsx +75 -0
  541. package/templates/scaffold/app/frontend/src/components/ui/form.tsx +152 -0
  542. package/templates/scaffold/app/frontend/src/components/ui/input.tsx +21 -0
  543. package/templates/scaffold/app/frontend/src/components/ui/label.tsx +21 -0
  544. package/templates/scaffold/app/frontend/src/components/ui/spinner.tsx +16 -0
  545. package/templates/scaffold/app/frontend/src/components/ui/table.tsx +90 -0
  546. package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +103 -0
  547. package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1235 -0
  548. package/templates/scaffold/app/frontend/src/graphql/index.ts +15 -0
  549. package/templates/scaffold/app/frontend/src/index.css +5 -0
  550. package/templates/scaffold/app/frontend/src/lib/auth-client.ts +17 -0
  551. package/templates/scaffold/app/frontend/src/lib/utils.ts +6 -0
  552. package/templates/scaffold/app/frontend/src/main.tsx +10 -0
  553. package/templates/scaffold/app/frontend/src/pages/page.tsx +20 -0
  554. package/templates/scaffold/app/frontend/src/pages/user-management/page.tsx +19 -0
  555. package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +97 -0
  556. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +58 -0
  557. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +51 -0
  558. package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +101 -0
  559. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +99 -0
  560. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/page.tsx +19 -0
  561. package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +61 -0
  562. package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +21 -0
  563. package/templates/scaffold/app/frontend/tsconfig.app.json +35 -0
  564. package/templates/scaffold/app/frontend/tsconfig.json +16 -0
  565. package/templates/scaffold/app/frontend/tsconfig.node.json +23 -0
  566. package/templates/scaffold/app/frontend/vite.config.ts +23 -0
  567. package/templates/scaffold/module/command/.gitkeep +0 -0
  568. package/templates/scaffold/module/db/.gitkeep +0 -0
  569. package/templates/scaffold/module/executor/.gitkeep +0 -0
  570. package/templates/scaffold/module/generated/.gitkeep +0 -0
  571. package/templates/scaffold/module/index.ts +2 -0
  572. package/templates/scaffold/module/lib/errors.ts +1 -0
  573. package/templates/scaffold/module/lib/types.ts +4 -0
  574. package/templates/scaffold/module/module.ts +7 -0
  575. package/templates/scaffold/module/permissions.ts +3 -0
  576. package/templates/scaffold/module/query/.gitkeep +0 -0
  577. package/templates/scaffold/module/tailor.config.ts +13 -0
  578. package/templates/scaffold/module/testing/fixtures.ts +1 -0
  579. package/templates/workflows/erp-kit-check.yml +37 -0
  580. package/dist/cli.js +0 -1654
  581. package/skills/erp-kit-app-2-breakdown/SKILL.md +0 -88
  582. package/skills/erp-kit-app-3-doc-review/SKILL.md +0 -112
  583. package/skills/erp-kit-app-4-impl-spec/SKILL.md +0 -116
  584. package/skills/erp-kit-app-5-implementation/references/backend.md +0 -232
  585. package/skills/erp-kit-module-1-docs/SKILL.md +0 -111
  586. package/skills/erp-kit-module-2-feature-breakdown/SKILL.md +0 -76
  587. package/skills/erp-kit-module-3-doc-review/SKILL.md +0 -294
  588. package/skills/erp-kit-module-4-tdd/SKILL.md +0 -94
  589. package/skills/erp-kit-module-4-tdd/references/exports.md +0 -8
  590. package/skills/erp-kit-module-5-impl-review/SKILL.md +0 -410
  591. package/src/commands/scaffold-templates.ts +0 -65
  592. package/src/modules/shared/index.ts +0 -1
  593. package/src/modules/user-management/command/logAuditEvent.generated.ts +0 -6
  594. package/src/modules/user-management/command/logAuditEvent.test.ts +0 -187
  595. package/src/modules/user-management/command/logAuditEvent.ts +0 -56
  596. package/src/modules/user-management/db/auditEvent.ts +0 -47
  597. package/src/modules/user-management/docs/commands/LogAuditEvent.md +0 -37
  598. package/src/modules/user-management/docs/features/audit-trail.md +0 -80
  599. package/src/modules/user-management/docs/models/AuditEvent.md +0 -36
  600. /package/skills/{erp-kit-module-2-feature-breakdown → erp-kit-module-3-plan}/references/naming.md +0 -0
  601. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/cross-module-dependency.md +0 -0
  602. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/db-relations.md +0 -0
  603. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/generated-code.md +0 -0
  604. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/models.md +0 -0
  605. /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/commands.md +0 -0
  606. /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/testing.md +0 -0
  607. /package/src/modules/{product-management → audit}/.gitkeep +0 -0
  608. /package/src/{modules/shared → shared}/createContext.test.ts +0 -0
  609. /package/src/{modules/shared → shared}/createContext.ts +0 -0
  610. /package/src/{modules/shared → shared}/definePermissions.test.ts +0 -0
  611. /package/src/{modules/shared → shared}/definePermissions.ts +0 -0
  612. /package/src/{modules/shared → shared}/defineQuery.test.ts +0 -0
  613. /package/src/{modules/shared → shared}/defineQuery.ts +0 -0
  614. /package/src/{modules/shared → shared}/entityTypes.ts +0 -0
  615. /package/src/{modules/shared → shared}/errors.ts +0 -0
  616. /package/src/{modules/shared → shared}/requirePermission.test.ts +0 -0
  617. /package/src/{modules/shared → shared}/requirePermission.ts +0 -0
  618. /package/src/{modules/shared → shared}/result.ts +0 -0
package/package.json CHANGED
@@ -1,18 +1,19 @@
1
1
  {
2
2
  "name": "@tailor-platform/erp-kit",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Opinionated ERP toolkit for building business applications on Tailor Platform",
5
5
  "license": "MIT",
6
6
  "bin": {
7
- "erp-kit": "./dist/cli.js"
7
+ "erp-kit": "./dist/cli.mjs"
8
8
  },
9
9
  "files": [
10
10
  "CHANGELOG.md",
11
- "dist",
12
11
  "LICENSE",
12
+ "dist",
13
13
  "schemas",
14
14
  "skills",
15
- "src"
15
+ "src",
16
+ "templates"
16
17
  ],
17
18
  "type": "module",
18
19
  "exports": {
@@ -34,12 +35,12 @@
34
35
  "devDependencies": {
35
36
  "@tailor-platform/function-kysely-tailordb": "0.1.3",
36
37
  "@tailor-platform/function-types": "0.8.2",
37
- "@tailor-platform/sdk": "1.17.1",
38
+ "@tailor-platform/sdk": "1.25.1",
38
39
  "@types/mdast": "^4.0.4",
39
40
  "@types/node": "^25.1.0",
40
- "eslint": "9.39.4",
41
- "kysely": "0.28.10",
42
- "tsup": "^8.0.0",
41
+ "eslint": "10.0.3",
42
+ "kysely": "0.28.11",
43
+ "tsdown": "0.21.2",
43
44
  "typescript": "^5.7.3",
44
45
  "vitest": "^4.0.0",
45
46
  "@tailor-platform/eslint-config": "0.0.1"
@@ -47,14 +48,14 @@
47
48
  "peerDependencies": {
48
49
  "@tailor-platform/function-kysely-tailordb": "0.1.3",
49
50
  "@tailor-platform/function-types": "0.8.2",
50
- "@tailor-platform/sdk": "1.17.1",
51
- "kysely": "0.28.10"
51
+ "@tailor-platform/sdk": "1.25.1",
52
+ "kysely": "0.28.11"
52
53
  },
53
54
  "engines": {
54
55
  "node": ">=24"
55
56
  },
56
57
  "scripts": {
57
- "build": "tsup",
58
+ "build": "tsdown",
58
59
  "generate": "for dir in src/modules/*/; do [ -f \"$dir/tailor.config.ts\" ] && (cd \"$dir\" && echo \"Generating $dir...\" && tailor-sdk generate); done",
59
60
  "lint": "eslint --cache .",
60
61
  "lint:fix": "eslint --cache --fix .",
@@ -64,8 +65,8 @@
64
65
  "test:primitives": "vitest run src/modules/primitives/",
65
66
  "test:user-management": "vitest run src/modules/user-management/",
66
67
  "test:shared": "vitest run src/modules/shared/",
67
- "mock:start": "node dist/cli.js mock start",
68
- "mock:validate": "node dist/cli.js mock validate",
68
+ "mock:start": "node dist/cli.mjs mock start",
69
+ "mock:validate": "node dist/cli.mjs mock validate",
69
70
  "doc:gen": "POLITTY_DOCS_UPDATE=true vitest run src/cli.doc.test.ts",
70
71
  "doc:check": "vitest run src/cli.doc.test.ts"
71
72
  }
@@ -55,6 +55,18 @@ structure:
55
55
  type: unordered
56
56
  min_items: 1
57
57
 
58
+ # Resolvers that implement this story's backend operations - OPTIONAL
59
+ # Enables M:N relationship between stories and resolvers
60
+ # Stories that only read data (browse, view, list) may not need resolvers
61
+ - heading: "## Resolvers"
62
+ description: |
63
+ Link to resolver docs that implement this story's backend operations.
64
+ Write "None" if this story does not require any resolvers.
65
+ lists:
66
+ - min: 0
67
+ type: unordered
68
+ min_items: 1
69
+
58
70
  # Link validation
59
71
  links:
60
72
  validate_internal: true
@@ -41,6 +41,15 @@ structure:
41
41
  type: unordered
42
42
  min_items: 1
43
43
 
44
+ # Test cases - REQUIRED
45
+ # Each item corresponds to an it() block in the test file
46
+ - heading: "## Test Cases"
47
+ description: "List test case descriptions that correspond to it() blocks in the test file.\ne.g. `- returns error when code is empty`"
48
+ lists:
49
+ - min: 1
50
+ type: unordered
51
+ min_items: 1
52
+
44
53
  # Link validation
45
54
  links:
46
55
  validate_internal: true
@@ -30,6 +30,10 @@ structure:
30
30
  - min: 1
31
31
  type: unordered
32
32
  min_items: 1
33
+ - heading: "### Scope Decision Rationale"
34
+ description: "Explain why capabilities are in-scope or out-of-scope — domain alignment, separation of concerns, etc."
35
+ paragraphs:
36
+ min: 1
33
37
 
34
38
  # Module dependencies - REQUIRED
35
39
  - heading: "## Module Dependencies"
@@ -41,6 +41,15 @@ structure:
41
41
  type: unordered
42
42
  min_items: 1
43
43
 
44
+ # Test cases - REQUIRED
45
+ # Each item corresponds to an it() block in the test file
46
+ - heading: "## Test Cases"
47
+ description: "List test case descriptions that correspond to it() blocks in the test file.\ne.g. `- returns product when found by id`"
48
+ lists:
49
+ - min: 1
50
+ type: unordered
51
+ min_items: 1
52
+
44
53
  # Link validation
45
54
  links:
46
55
  validate_internal: true
@@ -43,8 +43,8 @@ Ask 3-4 questions at a time using multiSelect where appropriate.
43
43
  Generate documentation using `erp-kit` CLI:
44
44
 
45
45
  ```bash
46
- # Tier 1: Requirements
47
- erp-kit app scaffold requirements <app-name> --root examples
46
+ # Tier 1: Requirements + project structure
47
+ erp-kit app scaffold app <app-name> --root examples
48
48
 
49
49
  # Tier 2: Actors
50
50
  erp-kit app scaffold actors <app-name> <actor-name> --root examples
@@ -62,7 +62,7 @@ erp-kit app scaffold business-flow <app-name> <flow-name> --root examples
62
62
 
63
63
  **Business flow `## Stories` section:**
64
64
 
65
- At Tier 2, story files do not exist yet. Use `- TBD` as a placeholder to avoid broken link violations. Replace with actual story links in `/erp-kit-app-2-breakdown`.
65
+ At Tier 2, story files do not exist yet. Use `- TBD` as a placeholder to avoid broken link violations. Replace with actual story links in `/erp-kit-app-3-plan`.
66
66
 
67
67
  ### Phase 4: Validate
68
68
 
@@ -80,4 +80,4 @@ pnpm run app:doc:check
80
80
 
81
81
  ## Next Step
82
82
 
83
- After completing Tier 1-2, use `/erp-kit-app-2-breakdown` to create Tier 3 documentation.
83
+ After completing Tier 1-2, use `/erp-kit-app-2-requirements-review` to review documentation quality.
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: erp-kit-app-2-requirements-review
3
+ description: Review requirements quality and documentation consistency for app-compose applications. Use after creating Tier 1-2 documentation (requirements, actors, business-flow) with erp-kit-app-1-requirements.
4
+ ---
5
+
6
+ # Requirements Review
7
+
8
+ Review **requirements quality** and **documentation consistency** for an app-compose application's Tier 1-2 documentation.
9
+
10
+ ## When to Use
11
+
12
+ - After writing application requirements and business flows (step 1)
13
+ - When validating that actors, flows, and sequences follow best practices
14
+ - When checking for gaps or inconsistencies in Tier 1-2 documentation
15
+
16
+ ## Step 1: Setup
17
+
18
+ Define shared context for all agents:
19
+
20
+ - `APP_ROOT`: from argument or current working directory. Must contain a `docs/` directory.
21
+ - `APP_NAME`: basename of APP_ROOT
22
+ - `APP_README`: `<APP_ROOT>/README.md`
23
+ - `BUSINESS_FLOW_DOCS`: glob `<APP_ROOT>/docs/business-flow/*/README.md`
24
+ - `ACTOR_DOCS`: glob `<APP_ROOT>/docs/actors/*.md`
25
+
26
+ Verify at least `APP_README` exists. If not, stop with: "No application README found at <APP_ROOT>. Run erp-kit-app-1-requirements first."
27
+
28
+ ## Step 2: Dispatch Agents (parallelize if possible)
29
+
30
+ Launch 2 Agent tool calls in parallel — one per review concern.
31
+ Each agent receives: APP_NAME, relevant doc file paths.
32
+ Each agent returns: structured markdown per [references/requirements-report-format.md](references/requirements-report-format.md).
33
+
34
+ | Agent | Prompt Template | Inputs |
35
+ | ----- | ------------------------------------------------------------------------------------ | ------------------------------------------ |
36
+ | 1 | [references/best-practices-check.md](references/best-practices-check.md) | APP_README, ACTOR_DOCS, BUSINESS_FLOW_DOCS |
37
+ | 2 | [references/boundary-consistency-check.md](references/boundary-consistency-check.md) | APP_README, ACTOR_DOCS, BUSINESS_FLOW_DOCS |
38
+
39
+ For each agent:
40
+
41
+ 1. Read the prompt template file
42
+ 2. Replace `{{APP_NAME}}` with the resolved app name
43
+ 3. Replace `{{APP_README}}`, `{{ACTOR_DOCS}}`, `{{BUSINESS_FLOW_DOCS}}` with the actual file paths
44
+ 4. Dispatch the agent with the filled prompt
45
+
46
+ ## Step 3: Aggregate Results
47
+
48
+ After ALL agents return:
49
+
50
+ 1. Collect the markdown results from each agent
51
+ 2. Merge all `issues[]` arrays into a single list
52
+ 3. Merge all `recommendations[]` arrays into a single list
53
+ 4. Calculate totals across all summaries
54
+ 5. Render the final report below
55
+
56
+ ## Report Format
57
+
58
+ Render the aggregated results as markdown:
59
+
60
+ ### Requirements Review Report
61
+
62
+ **Application:** <APP_NAME>
63
+
64
+ ---
65
+
66
+ ### 1. Best Practices
67
+
68
+ | Check | Scope | Status | Detail |
69
+ | ----- | ----- | ------ | ------ |
70
+
71
+ (Populated from agent 1 issues)
72
+
73
+ ---
74
+
75
+ ### 2. Documentation Consistency
76
+
77
+ | Actor/Flow | Check | Status | Detail |
78
+ | ---------- | ----- | ------ | ------ |
79
+
80
+ (Populated from agent 2 issues)
81
+
82
+ ---
83
+
84
+ ### 3. Summary
85
+
86
+ | Aspect | Status | Details |
87
+ | ------------------------- | ------ | ----------------- |
88
+ | Best Practices | | X/Y checks passed |
89
+ | Documentation Consistency | | X/Y checks passed |
90
+
91
+ ### 4. Recommendations
92
+
93
+ Numbered list of actionable fixes, grouped by priority:
94
+
95
+ 1. Critical documentation gaps (highest priority)
96
+ 2. Best practice violations
97
+ 3. Improvement suggestions
98
+
99
+ ## References
100
+
101
+ - [Requirements report format](references/requirements-report-format.md)
102
+ - For requirements creation, see erp-kit-app-1-requirements
@@ -0,0 +1,66 @@
1
+ # Application Best Practices Check
2
+
3
+ ## Context
4
+
5
+ App: {{APP_NAME}}
6
+ App README: {{APP_README}}
7
+ Actor docs: {{ACTOR_DOCS}}
8
+ Business flow docs: {{BUSINESS_FLOW_DOCS}}
9
+
10
+ ## Instructions
11
+
12
+ 1. Read the application README at the path above
13
+ 2. Read ALL actor docs and business flow docs at the paths above
14
+ 3. **Web search** app-compose and ERP application best practices (actor modeling, business flow design, user journey patterns)
15
+ 4. Evaluate whether the Tier 1-2 documentation follows best practices
16
+ 5. Return results as markdown per the Output Format section
17
+
18
+ ## Application Design Checks
19
+
20
+ For each actor and business flow, evaluate:
21
+
22
+ | Check ID | Question |
23
+ | ------------------------ | -------------------------------------------------------------------------------------------- |
24
+ | actor_completeness | Does each actor have a clear role description, permissions scope, and linked business flows? |
25
+ | actor_separation | Are actor responsibilities well-separated? No single actor doing everything? |
26
+ | flow_coherence | Does each business flow have a clear trigger, logical step sequence, and defined outcome? |
27
+ | sequence_diagram_quality | Do sequence diagrams accurately represent actor interactions and system responses? |
28
+ | requirement_coverage | Do business flows collectively cover the requirements stated in README? |
29
+ | missing_flows | Are there obvious workflows missing based on the stated requirements? |
30
+ | flow_granularity | Are flows at the right level of granularity? (not too coarse, not too fine) |
31
+ | error_path_coverage | Do flows account for error paths and edge cases, not just happy paths? |
32
+
33
+ ## Common Application Design Issues
34
+
35
+ - **Overloaded actors**: A single actor responsible for too many unrelated flows
36
+ - **Missing system actor**: Automated/system-triggered flows not represented as an actor
37
+ - **Disconnected flows**: Flows that don't link to each other when they should (e.g., an approval flow that doesn't connect to the submission flow)
38
+ - **Missing error flows**: Only happy-path documented, no handling of rejections, cancellations, or failures
39
+ - **Vague requirements**: README states features that no business flow implements
40
+ - **Inconsistent granularity**: Some flows are very detailed while others are hand-wavy
41
+
42
+ ## Output Format
43
+
44
+ Return your findings as a structured markdown report:
45
+
46
+ ### Check Results
47
+
48
+ For each finding:
49
+
50
+ - **Scope:** actor name, flow name, or "application-level"
51
+ - **Check:** check ID
52
+ - **Status:** pass / fail / warn
53
+ - **Detail:** what was found and why it matters
54
+
55
+ ### Recommendations
56
+
57
+ Numbered list grouped by priority (critical → high → medium → low). Each item should explain the issue and the recommended fix.
58
+
59
+ ### Summary
60
+
61
+ Table with columns: Metric, Count
62
+
63
+ - Total checks
64
+ - Passed
65
+ - Failed
66
+ - Warned
@@ -0,0 +1,69 @@
1
+ # Documentation Consistency Check
2
+
3
+ ## Context
4
+
5
+ App: {{APP_NAME}}
6
+ App README: {{APP_README}}
7
+ Actor docs: {{ACTOR_DOCS}}
8
+ Business flow docs: {{BUSINESS_FLOW_DOCS}}
9
+
10
+ ## Instructions
11
+
12
+ 1. Read the application README at the path above
13
+ 2. Read ALL actor docs and business flow docs at the paths above
14
+ 3. Cross-reference actors, flows, and requirements for internal consistency
15
+ 4. Return results as markdown per the Output Format section
16
+
17
+ ## Consistency Checks
18
+
19
+ | Check ID | Question |
20
+ | ---------------------- | -------------------------------------------------------------------------------- |
21
+ | actor_flow_cross_ref | Is every actor referenced in at least one business flow? |
22
+ | flow_actor_cross_ref | Does every business flow reference only actors that have actor docs? |
23
+ | actor_link_validity | Do actor docs link to business flows that exist? |
24
+ | flow_link_validity | Do business flow docs link to actor docs that exist? |
25
+ | readme_flow_coverage | Does every requirement/feature in README have a corresponding business flow? |
26
+ | naming_consistency | Are actor and flow names consistent across all documents? (no typos, no aliases) |
27
+ | diagram_actor_match | Do sequence diagram participants match the "Actors Involved" section? |
28
+ | flow_step_completeness | Does every flow step identify a responsible actor? |
29
+
30
+ ### How to Check
31
+
32
+ 1. Extract all actor names from actor docs (filename slugs and H1 headings)
33
+ 2. Extract all flow names from business flow docs (directory names and H1 headings)
34
+ 3. For each actor doc, check "Authorized Flows" links resolve to existing flows
35
+ 4. For each flow doc, check "Actors Involved" references match existing actor docs
36
+ 5. For each sequence diagram, verify participants match the actors listed in "Actors Involved"
37
+ 6. Compare README features/requirements against business flow coverage
38
+
39
+ ## Common Consistency Issues
40
+
41
+ - **Phantom actors**: Flow references an actor with no actor doc
42
+ - **Orphaned actors**: Actor doc exists but no flow references them
43
+ - **Broken links**: Actor→flow or flow→actor links point to non-existent files
44
+ - **Name drift**: Actor called "Admin" in one doc and "Administrator" in another
45
+ - **Diagram mismatch**: Sequence diagram uses different participant names than "Actors Involved"
46
+ - **Uncovered requirements**: README lists a feature but no business flow implements it
47
+
48
+ ## Output Format
49
+
50
+ Return your findings as a structured markdown report:
51
+
52
+ ### Check Results
53
+
54
+ Table with columns: Actor/Flow, Check, Status (pass/fail/warn), Detail
55
+
56
+ One row per check performed.
57
+
58
+ ### Recommendations
59
+
60
+ Numbered list grouped by priority (critical → high → medium → low). Each item is an actionable recommendation.
61
+
62
+ ### Summary
63
+
64
+ Table with columns: Metric, Count
65
+
66
+ - Total checks
67
+ - Passed
68
+ - Failed
69
+ - Warned
@@ -0,0 +1,25 @@
1
+ # Requirements Report Format
2
+
3
+ All requirements review agents return results as structured markdown.
4
+
5
+ ## Expected Sections
6
+
7
+ ### Check Results
8
+
9
+ A table with one row per check performed. Columns vary by agent type but always include:
10
+
11
+ - **Status**: `pass` (no issues), `fail` (significant issue), or `warn` (minor concern)
12
+ - **Detail**: Human-readable description of the finding
13
+
14
+ ### Recommendations
15
+
16
+ A numbered list of actionable suggestions, grouped by priority:
17
+
18
+ - **critical**: must fix before proceeding to planning
19
+ - **high**: should fix, may cause issues downstream
20
+ - **medium**: recommended improvement
21
+ - **low**: nice to have
22
+
23
+ ### Summary
24
+
25
+ A summary table with aggregate counts: total checks, passed, failed, warned.
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: erp-kit-app-3-plan
3
+ description: Create Tier 3-4 documentation (stories, screens, resolvers) by breaking down business flows. Use after completing requirements review with erp-kit-app-2-requirements-review.
4
+ ---
5
+
6
+ # Business Flow Breakdown to Stories, Screens, and Resolvers
7
+
8
+ Convert Tier 2 business flows into Tier 3 (stories, screens) and Tier 4 (resolvers) documentation using parallel extraction agents.
9
+
10
+ ## When to Use
11
+
12
+ - User has Tier 1-2 documentation and wants to plan Tier 3-4
13
+ - User asks to create story, screen, or resolver documentation
14
+ - User wants to break down business flows into actionable specs
15
+
16
+ ## Prerequisites
17
+
18
+ Tier 1-2 documentation must exist:
19
+
20
+ - `README.md` (requirements)
21
+ - `docs/actors/*.md` (actor definitions)
22
+ - `docs/business-flow/*/README.md` (business workflows)
23
+
24
+ ## Step 1: Setup
25
+
26
+ Define shared context for all agents:
27
+
28
+ - `APP_ROOT`: from argument or current working directory. Must contain a `docs/` directory.
29
+ - `APP_NAME`: basename of APP_ROOT
30
+ - `BUSINESS_FLOW_DOCS`: glob `<APP_ROOT>/docs/business-flow/*/README.md`
31
+ - `ACTOR_DOCS`: glob `<APP_ROOT>/docs/actors/*.md`
32
+
33
+ Verify at least `BUSINESS_FLOW_DOCS` is non-empty. If no business flow docs exist, stop with: "No business flow docs found under <APP_ROOT>/docs/. Run erp-kit-app-1-requirements first."
34
+
35
+ ## Step 2: Dispatch Agents (parallelize if possible)
36
+
37
+ Launch 3 Agent tool calls in parallel — one per extraction concern.
38
+ Each agent receives: APP_NAME, relevant doc file paths.
39
+
40
+ | Agent | Prompt Template | Inputs |
41
+ | ----- | ---------------------------------------------------------------------- | ---------------------------------------- |
42
+ | 1 | [references/story-extraction.md](references/story-extraction.md) | APP_NAME, ACTOR_DOCS, BUSINESS_FLOW_DOCS |
43
+ | 2 | [references/screen-extraction.md](references/screen-extraction.md) | APP_NAME, ACTOR_DOCS, BUSINESS_FLOW_DOCS |
44
+ | 3 | [references/resolver-extraction.md](references/resolver-extraction.md) | APP_NAME, ACTOR_DOCS, BUSINESS_FLOW_DOCS |
45
+
46
+ For each agent:
47
+
48
+ 1. Read the prompt template file
49
+ 2. Replace `{{APP_NAME}}` with the resolved app name
50
+ 3. Replace `{{ACTOR_DOCS}}`, `{{BUSINESS_FLOW_DOCS}}` with the actual file paths
51
+ 4. Dispatch the agent with the filled prompt
52
+
53
+ ## Step 3: Aggregate & Present Plan
54
+
55
+ After ALL agents return:
56
+
57
+ 1. Collect extraction results from each agent
58
+ 2. Present consolidated plan to user:
59
+ - Stories to create (with actor, flow, scenario patterns)
60
+ - Screens to create (with type, fields, actions)
61
+ - Resolvers to create (with operation type, module mapping)
62
+ 3. Wait for user approval
63
+
64
+ ## Step 4: Check Module Dependencies
65
+
66
+ Before creating resolver docs, verify required modules exist:
67
+
68
+ ```bash
69
+ ls packages/erp-kit/src/modules/
70
+ ```
71
+
72
+ For each resolver that references a module command, check the module and command exist:
73
+
74
+ ```bash
75
+ ls packages/erp-kit/src/modules/<module-name>/docs/commands/
76
+ ```
77
+
78
+ **If modules don't exist:**
79
+
80
+ 1. Identify needed modules — group resolver operations by domain
81
+ 2. Create module docs first — use `erp-kit-module-1-requirements` skill
82
+ 3. Return to this step after modules have documented commands
83
+
84
+ **Only reference existing module commands** in resolver documentation.
85
+
86
+ ## Step 5: Scaffold & Populate
87
+
88
+ After approval, scaffold using `erp-kit` CLI:
89
+
90
+ ```bash
91
+ # Tier 3: Stories
92
+ erp-kit app scaffold story <app> <flow>/<actor>--<story> --root examples
93
+
94
+ # Tier 3: Screens
95
+ erp-kit app scaffold screen <app> <screen-name> --root examples
96
+
97
+ # Tier 4: Resolvers
98
+ erp-kit scaffold --app-root examples resolver <app> <resolver-name>
99
+ ```
100
+
101
+ Fill scaffolded docs with details from agent extraction results.
102
+
103
+ **After creating stories**, replace `- TBD` placeholders in the `## Stories` section of each business flow README with actual links:
104
+
105
+ ```markdown
106
+ - [Story Title](./story/<actor>--<story-name>.md)
107
+ ```
108
+
109
+ **After creating resolvers**, replace `- TBD` placeholders in the `## Resolvers` section of each story with actual links:
110
+
111
+ ```markdown
112
+ - [resolverName](../../../resolver/resolverName.md)
113
+ ```
114
+
115
+ Read-only stories should have `None` under `## Resolvers`.
116
+
117
+ ## Step 6: Validate
118
+
119
+ ```bash
120
+ pnpm run app:doc:check
121
+ ```
122
+
123
+ ## Naming Conventions
124
+
125
+ - Story filename: `<actor>--<story-name>.md` (double-dash separator)
126
+ - Story heading: Title Case of story name (after `--`)
127
+ - Screen filename: kebab-case, noun-focused (e.g., `supplier-list.md`)
128
+ - Resolver filename: camelCase action-verb (e.g., `createSupplierInvitation.md`)
129
+
130
+ ## Schema Reference
131
+
132
+ | Schema | Tier | Output Path |
133
+ | -------------- | ---- | ---------------------------------------------------- |
134
+ | `story.yml` | 3 | `docs/business-flow/<flow>/story/<actor>--<name>.md` |
135
+ | `screen.yml` | 3 | `docs/screen/<name>.md` |
136
+ | `resolver.yml` | 4 | `docs/resolver/<name>.md` |
137
+
138
+ ## Common Patterns
139
+
140
+ | Flow Element | Documentation Type |
141
+ | -------------------- | ---------------------------- |
142
+ | User action step | Story |
143
+ | UI requirement | Screen |
144
+ | Actor in flow | Story actor |
145
+ | Create/Update/Delete | Resolver (Mutation) |
146
+ | View/List/Search | Resolver (Query) or built-in |
147
+
148
+ ## Tips
149
+
150
+ - One business flow typically produces 3-8 stories
151
+ - Stories should be completable in a single user session
152
+ - Screens can be shared across multiple stories
153
+ - Prefer built-in queries over custom resolvers for simple list/get operations
154
+
155
+ ## Next Step
156
+
157
+ After completing Tier 3-4, use `/erp-kit-app-4-plan-review` to validate documentation parity.