@tailor-platform/erp-kit 0.2.1 → 0.3.0

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