@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
@@ -53,3 +53,18 @@ flowchart TD
53
53
  - **UNIT_NOT_FOUND**: Referenced unit does not exist or is inactive
54
54
  - **UOM_LOCKED**: UoM cannot be changed after item has been activated (status is ACTIVE or INACTIVE)
55
55
  - **NO_FIELDS_TO_UPDATE**: No updatable fields were provided in the request
56
+
57
+ ## Test Cases
58
+
59
+ - returns error when item does not exist
60
+ - returns error when attempting to change SKU
61
+ - returns error when no fields to update
62
+ - returns error when barcode is duplicate
63
+ - returns error when changing UoM on non-DRAFT item
64
+ - returns error when changing UoM on INACTIVE item
65
+ - returns error when new UoM does not exist
66
+ - updates name in any status
67
+ - updates barcode in any status
68
+ - clears barcode by setting to null
69
+ - updates UoM in DRAFT status
70
+ - passes custom fields through to set
@@ -34,3 +34,12 @@ flowchart TD
34
34
  - **NODE_NOT_FOUND**: Specified node ID does not exist
35
35
  - **CODE_IMMUTABLE**: Attempt to change the node code
36
36
  - **MISSING_REQUIRED_FIELDS**: Name not provided or empty
37
+
38
+ ## Test Cases
39
+
40
+ - returns error when node does not exist
41
+ - returns error when attempting to change code
42
+ - returns error when name is empty
43
+ - returns error when name is not provided
44
+ - updates node name
45
+ - passes custom fields through to set
@@ -34,3 +34,11 @@ flowchart TD
34
34
  ## Error Scenarios
35
35
 
36
36
  - **NODE_NOT_FOUND**: The starting node or an ancestor in the chain is not found — traversal stops and returns partial depth
37
+
38
+ ## Test Cases
39
+
40
+ - returns depth 1 for root node
41
+ - returns depth 2 for child of root
42
+ - returns depth 3 for grandchild of root
43
+ - returns depth 1 when node not found
44
+ - handles broken ancestor chain gracefully
@@ -38,3 +38,10 @@ flowchart TD
38
38
  ## Error Scenarios
39
39
 
40
40
  - **MAX_DEPTH_EXCEEDED**: Combined new parent depth + subtree depth exceeds maxDepth — enforced by the calling command, not this query directly
41
+
42
+ ## Test Cases
43
+
44
+ - returns 1 for leaf node (no children)
45
+ - returns 2 for node with one level of children
46
+ - returns 3 for node with two levels of children
47
+ - returns max depth for node with multiple branches
@@ -39,3 +39,12 @@ flowchart TD
39
39
 
40
40
  - **CIRCULAR_REFERENCE**: The moved node appears in the ancestor chain of the new parent — returns isCircular: true
41
41
  - **SELF_REFERENCE**: Node is moved to itself as parent — returns isCircular: true
42
+
43
+ ## Test Cases
44
+
45
+ - detects self-reference as circular
46
+ - detects moving node under its child as circular
47
+ - detects moving node under its grandchild as circular
48
+ - returns not circular for valid move
49
+ - returns not circular when new parent is root
50
+ - handles broken ancestor chain gracefully (not circular)
@@ -36,3 +36,12 @@ flowchart TD
36
36
  ## Error Scenarios
37
37
 
38
38
  - **ITEM_NOT_FOUND**: No item matches the given criteria — caller receives null
39
+
40
+ ## Test Cases
41
+
42
+ - returns item when found
43
+ - returns null when item not found
44
+ - returns item when found
45
+ - returns null when item not found
46
+ - returns item when found
47
+ - returns null when item not found
@@ -27,3 +27,8 @@ flowchart TD
27
27
  ## Error Scenarios
28
28
 
29
29
  - **ASSIGNMENT_NOT_FOUND**: No assignment exists for the item-node pair — caller receives null
30
+
31
+ ## Test Cases
32
+
33
+ - returns assignment when found
34
+ - returns null when assignment not found
@@ -33,3 +33,10 @@ flowchart TD
33
33
  ## Error Scenarios
34
34
 
35
35
  - **NODE_NOT_FOUND**: No taxonomy node matches the given criteria — caller receives null
36
+
37
+ ## Test Cases
38
+
39
+ - returns node when found
40
+ - returns null when node not found
41
+ - returns node when found
42
+ - returns null when node not found
@@ -27,3 +27,8 @@ flowchart TD
27
27
  ## Error Scenarios
28
28
 
29
29
  - **NO_ASSIGNMENTS**: No item assignments exist for the given node — caller receives empty array
30
+
31
+ ## Test Cases
32
+
33
+ - returns assignments when found
34
+ - returns empty array when no assignments
@@ -27,3 +27,9 @@ flowchart TD
27
27
  ## Error Scenarios
28
28
 
29
29
  - **NO_CHILDREN**: No child nodes exist for the given parent — caller receives empty array
30
+
31
+ ## Test Cases
32
+
33
+ - returns children when found
34
+ - returns multiple children
35
+ - returns empty array when no children
@@ -1,53 +1,2 @@
1
1
  export { defineModule } from "./module";
2
2
  export { permissions, own, all } from "./lib/permissions.generated";
3
-
4
- // generated types
5
- export { ItemStatus } from "./generated/enums";
6
-
7
- // errors
8
- export {
9
- ItemNotFoundError,
10
- DuplicateSkuError,
11
- DuplicateBarcodeError,
12
- UnitNotFoundError,
13
- SkuImmutableError,
14
- UomLockedError,
15
- NoFieldsToUpdateError,
16
- InvalidStateTransitionError,
17
- DeleteNonDraftError,
18
- NodeNotFoundError,
19
- DuplicateNodeCodeError,
20
- ParentNodeNotFoundError,
21
- MaxDepthExceededError,
22
- CodeImmutableError,
23
- MissingRequiredFieldsError,
24
- CircularReferenceError,
25
- NodeHasChildrenError,
26
- NodeHasAssignmentsError,
27
- DuplicateAssignmentError,
28
- AssignmentNotFoundError,
29
- } from "./lib/errors.generated";
30
-
31
- // query input types
32
- export { type GetItemInput } from "./query/getItem";
33
- export { type GetTaxonomyNodeInput } from "./query/getTaxonomyNode";
34
- export { type GetTaxonomyNodeChildrenInput } from "./query/getTaxonomyNodeChildren";
35
- export { type GetItemTaxonomyAssignmentInput } from "./query/getItemTaxonomyAssignment";
36
- export { type GetTaxonomyNodeAssignmentsInput } from "./query/getTaxonomyNodeAssignments";
37
- export { type CalculateNodeDepthInput } from "./query/calculateNodeDepth";
38
- export { type CalculateSubtreeDepthInput } from "./query/calculateSubtreeDepth";
39
- export { type DetectCircularReferenceInput } from "./query/detectCircularReference";
40
-
41
- // command input types
42
- export { type CreateItemInput } from "./command/createItem";
43
- export { type UpdateItemInput } from "./command/updateItem";
44
- export { type ActivateItemInput } from "./command/activateItem";
45
- export { type DeactivateItemInput } from "./command/deactivateItem";
46
- export { type ReactivateItemInput } from "./command/reactivateItem";
47
- export { type DeleteItemInput } from "./command/deleteItem";
48
- export { type CreateTaxonomyNodeInput } from "./command/createTaxonomyNode";
49
- export { type UpdateTaxonomyNodeInput } from "./command/updateTaxonomyNode";
50
- export { type MoveTaxonomyNodeInput } from "./command/moveTaxonomyNode";
51
- export { type DeleteTaxonomyNodeInput } from "./command/deleteTaxonomyNode";
52
- export { type AssignItemToTaxonomyInput } from "./command/assignItemToTaxonomy";
53
- export { type RemoveItemFromTaxonomyInput } from "./command/removeItemFromTaxonomy";
@@ -1,117 +1,117 @@
1
1
  // @generated — do not edit
2
- import { createDomainError } from "../../shared/internal";
2
+ import { createDomainError } from "../../../shared";
3
3
 
4
4
  export const ItemNotFoundError = createDomainError(
5
- "ItemNotFoundError", "ITEM_NOT_FOUND",
5
+ "ItemNotFoundError", "ITEM_MANAGEMENT_ITEM_NOT_FOUND",
6
6
  (identifier: string) => `Specified item ID does not exist: ${identifier}`,
7
7
  );
8
8
 
9
9
  export const InvalidStateTransitionError = createDomainError(
10
- "InvalidStateTransitionError", "INVALID_STATE_TRANSITION",
10
+ "InvalidStateTransitionError", "ITEM_MANAGEMENT_INVALID_STATE_TRANSITION",
11
11
  (identifier: string) => `Item is not in DRAFT status: ${identifier}`,
12
12
  );
13
13
 
14
14
  export const NodeNotFoundError = createDomainError(
15
- "NodeNotFoundError", "NODE_NOT_FOUND",
15
+ "NodeNotFoundError", "ITEM_MANAGEMENT_NODE_NOT_FOUND",
16
16
  (identifier: string) => `Specified taxonomy node ID does not exist: ${identifier}`,
17
17
  );
18
18
 
19
19
  export const DuplicateAssignmentError = createDomainError(
20
- "DuplicateAssignmentError", "DUPLICATE_ASSIGNMENT",
20
+ "DuplicateAssignmentError", "ITEM_MANAGEMENT_DUPLICATE_ASSIGNMENT",
21
21
  (identifier: string) => `Item is already assigned to this taxonomy node: ${identifier}`,
22
22
  );
23
23
 
24
24
  export const DuplicateSkuError = createDomainError(
25
- "DuplicateSkuError", "DUPLICATE_SKU",
25
+ "DuplicateSkuError", "ITEM_MANAGEMENT_DUPLICATE_SKU",
26
26
  (identifier: string) => `An item with the same SKU already exists: ${identifier}`,
27
27
  );
28
28
 
29
29
  export const DuplicateBarcodeError = createDomainError(
30
- "DuplicateBarcodeError", "DUPLICATE_BARCODE",
30
+ "DuplicateBarcodeError", "ITEM_MANAGEMENT_DUPLICATE_BARCODE",
31
31
  (identifier: string) => `An item with the same barcode already exists: ${identifier}`,
32
32
  );
33
33
 
34
34
  export const UnitNotFoundError = createDomainError(
35
- "UnitNotFoundError", "UNIT_NOT_FOUND",
35
+ "UnitNotFoundError", "ITEM_MANAGEMENT_UNIT_NOT_FOUND",
36
36
  (identifier: string) => `Referenced unit does not exist or is inactive: ${identifier}`,
37
37
  );
38
38
 
39
39
  export const DuplicateNodeCodeError = createDomainError(
40
- "DuplicateNodeCodeError", "DUPLICATE_NODE_CODE",
40
+ "DuplicateNodeCodeError", "ITEM_MANAGEMENT_DUPLICATE_NODE_CODE",
41
41
  (identifier: string) => `A node with the same code already exists: ${identifier}`,
42
42
  );
43
43
 
44
44
  export const ParentNodeNotFoundError = createDomainError(
45
- "ParentNodeNotFoundError", "PARENT_NODE_NOT_FOUND",
45
+ "ParentNodeNotFoundError", "ITEM_MANAGEMENT_PARENT_NODE_NOT_FOUND",
46
46
  (identifier: string) => `Specified parent node ID does not exist: ${identifier}`,
47
47
  );
48
48
 
49
49
  export const MaxDepthExceededError = createDomainError(
50
- "MaxDepthExceededError", "MAX_DEPTH_EXCEEDED",
50
+ "MaxDepthExceededError", "ITEM_MANAGEMENT_MAX_DEPTH_EXCEEDED",
51
51
  (identifier: string) => `Adding this child would exceed the configurable tree depth limit: ${identifier}`,
52
52
  );
53
53
 
54
54
  export const DeleteNonDraftError = createDomainError(
55
- "DeleteNonDraftError", "DELETE_NON_DRAFT",
55
+ "DeleteNonDraftError", "ITEM_MANAGEMENT_DELETE_NON_DRAFT",
56
56
  (identifier: string) => `Item is in ACTIVE or INACTIVE status — only DRAFT items can be deleted: ${identifier}`,
57
57
  );
58
58
 
59
59
  export const NodeHasChildrenError = createDomainError(
60
- "NodeHasChildrenError", "NODE_HAS_CHILDREN",
60
+ "NodeHasChildrenError", "ITEM_MANAGEMENT_NODE_HAS_CHILDREN",
61
61
  (identifier: string) => `Node has one or more child nodes — children must be moved or deleted first: ${identifier}`,
62
62
  );
63
63
 
64
64
  export const NodeHasAssignmentsError = createDomainError(
65
- "NodeHasAssignmentsError", "NODE_HAS_ASSIGNMENTS",
65
+ "NodeHasAssignmentsError", "ITEM_MANAGEMENT_NODE_HAS_ASSIGNMENTS",
66
66
  (identifier: string) => `Node has one or more item assignments — assignments must be removed first: ${identifier}`,
67
67
  );
68
68
 
69
69
  export const CircularReferenceError = createDomainError(
70
- "CircularReferenceError", "CIRCULAR_REFERENCE",
70
+ "CircularReferenceError", "ITEM_MANAGEMENT_CIRCULAR_REFERENCE",
71
71
  (identifier: string) => `New parent is the node itself or one of its descendants: ${identifier}`,
72
72
  );
73
73
 
74
74
  export const AssignmentNotFoundError = createDomainError(
75
- "AssignmentNotFoundError", "ASSIGNMENT_NOT_FOUND",
75
+ "AssignmentNotFoundError", "ITEM_MANAGEMENT_ASSIGNMENT_NOT_FOUND",
76
76
  (identifier: string) => `No assignment exists for the specified item and taxonomy node combination: ${identifier}`,
77
77
  );
78
78
 
79
79
  export const SkuImmutableError = createDomainError(
80
- "SkuImmutableError", "SKU_IMMUTABLE",
80
+ "SkuImmutableError", "ITEM_MANAGEMENT_SKU_IMMUTABLE",
81
81
  (identifier: string) => `Attempt to change the SKU field: ${identifier}`,
82
82
  );
83
83
 
84
84
  export const UomLockedError = createDomainError(
85
- "UomLockedError", "UOM_LOCKED",
85
+ "UomLockedError", "ITEM_MANAGEMENT_UOM_LOCKED",
86
86
  (identifier: string) => `UoM cannot be changed after item has been activated (status is ACTIVE or INACTIVE): ${identifier}`,
87
87
  );
88
88
 
89
89
  export const NoFieldsToUpdateError = createDomainError(
90
- "NoFieldsToUpdateError", "NO_FIELDS_TO_UPDATE",
90
+ "NoFieldsToUpdateError", "ITEM_MANAGEMENT_NO_FIELDS_TO_UPDATE",
91
91
  (identifier: string) => `No updatable fields were provided in the request: ${identifier}`,
92
92
  );
93
93
 
94
94
  export const CodeImmutableError = createDomainError(
95
- "CodeImmutableError", "CODE_IMMUTABLE",
95
+ "CodeImmutableError", "ITEM_MANAGEMENT_CODE_IMMUTABLE",
96
96
  (identifier: string) => `Attempt to change the node code: ${identifier}`,
97
97
  );
98
98
 
99
99
  export const MissingRequiredFieldsError = createDomainError(
100
- "MissingRequiredFieldsError", "MISSING_REQUIRED_FIELDS",
100
+ "MissingRequiredFieldsError", "ITEM_MANAGEMENT_MISSING_REQUIRED_FIELDS",
101
101
  (identifier: string) => `Name not provided or empty: ${identifier}`,
102
102
  );
103
103
 
104
104
  export const SelfReferenceError = createDomainError(
105
- "SelfReferenceError", "SELF_REFERENCE",
105
+ "SelfReferenceError", "ITEM_MANAGEMENT_SELF_REFERENCE",
106
106
  (identifier: string) => `Node is moved to itself as parent — returns isCircular: true: ${identifier}`,
107
107
  );
108
108
 
109
109
  export const NoAssignmentsError = createDomainError(
110
- "NoAssignmentsError", "NO_ASSIGNMENTS",
110
+ "NoAssignmentsError", "ITEM_MANAGEMENT_NO_ASSIGNMENTS",
111
111
  (identifier: string) => `No item assignments exist for the given node — caller receives empty array: ${identifier}`,
112
112
  );
113
113
 
114
114
  export const NoChildrenError = createDomainError(
115
- "NoChildrenError", "NO_CHILDREN",
115
+ "NoChildrenError", "ITEM_MANAGEMENT_NO_CHILDREN",
116
116
  (identifier: string) => `No child nodes exist for the given parent — caller receives empty array: ${identifier}`,
117
117
  );
@@ -1,5 +1,5 @@
1
1
  // @generated — do not edit
2
- import { definePermissions } from "../../shared/internal";
2
+ import { definePermissions } from "../../../shared";
3
3
 
4
4
  export const { permissions, own, all } = definePermissions("item-management", [
5
5
  "activateItem",
@@ -1,4 +1,4 @@
1
- import type { InferSchema, Selectable, Insertable, Updateable } from "../../shared/internal";
1
+ import type { InferSchema, Selectable, Insertable, Updateable } from "../../../shared";
2
2
  import type { DB } from "../generated/kysely-tailordb";
3
3
 
4
4
  export type Schema = InferSchema<DB>;
@@ -1,5 +1,5 @@
1
1
  import { type TailorAnyDBField } from "@tailor-platform/sdk";
2
- import { type EmptyFields, type FieldsToInsertable } from "../shared/internal";
2
+ import { type EmptyFields, type FieldsToInsertable } from "../../shared";
3
3
  import type { defineModule as definePrimitivesModule } from "../primitives";
4
4
  import { createItem } from "./command/createItem.generated";
5
5
  import { updateItem } from "./command/updateItem.generated";
@@ -1,5 +1,5 @@
1
1
  // @generated — do not edit
2
- import { defineQuery } from "../../shared/internal";
2
+ import { defineQuery } from "../../../shared";
3
3
  import { run } from "./calculateNodeDepth";
4
4
 
5
5
  export const calculateNodeDepth = defineQuery(run);
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { createMockDb } from "../../testing/index";
2
+ import { createMockDb } from "../../../testing/index";
3
3
  import type { DB } from "../generated/kysely-tailordb";
4
4
  import { baseRootNode, baseChildNode, baseLeafNode } from "../testing/fixtures";
5
5
  import { run } from "./calculateNodeDepth";
@@ -11,7 +11,10 @@ describe("calculateNodeDepth", () => {
11
11
 
12
12
  const result = await run(db, { nodeId: "node-1" });
13
13
 
14
- expect(result.depth).toBe(1);
14
+ expect(result.ok).toBe(true);
15
+ if (result.ok) {
16
+ expect(result.value.depth).toBe(1);
17
+ }
15
18
  });
16
19
 
17
20
  it("returns depth 2 for child of root", async () => {
@@ -20,7 +23,10 @@ describe("calculateNodeDepth", () => {
20
23
 
21
24
  const result = await run(db, { nodeId: "node-2" });
22
25
 
23
- expect(result.depth).toBe(2);
26
+ expect(result.ok).toBe(true);
27
+ if (result.ok) {
28
+ expect(result.value.depth).toBe(2);
29
+ }
24
30
  });
25
31
 
26
32
  it("returns depth 3 for grandchild of root", async () => {
@@ -32,7 +38,10 @@ describe("calculateNodeDepth", () => {
32
38
 
33
39
  const result = await run(db, { nodeId: "node-3" });
34
40
 
35
- expect(result.depth).toBe(3);
41
+ expect(result.ok).toBe(true);
42
+ if (result.ok) {
43
+ expect(result.value.depth).toBe(3);
44
+ }
36
45
  });
37
46
 
38
47
  it("returns depth 1 when node not found", async () => {
@@ -41,7 +50,10 @@ describe("calculateNodeDepth", () => {
41
50
 
42
51
  const result = await run(db, { nodeId: "nonexistent" });
43
52
 
44
- expect(result.depth).toBe(1);
53
+ expect(result.ok).toBe(true);
54
+ if (result.ok) {
55
+ expect(result.value.depth).toBe(1);
56
+ }
45
57
  });
46
58
 
47
59
  it("handles broken ancestor chain gracefully", async () => {
@@ -51,6 +63,9 @@ describe("calculateNodeDepth", () => {
51
63
 
52
64
  const result = await run(db, { nodeId: "node-2" });
53
65
 
54
- expect(result.depth).toBe(2);
66
+ expect(result.ok).toBe(true);
67
+ if (result.ok) {
68
+ expect(result.value.depth).toBe(2);
69
+ }
55
70
  });
56
71
  });
@@ -1,4 +1,4 @@
1
- import type { ReadonlyDB } from "../../shared/internal";
1
+ import { ok, type ReadonlyDB } from "../../../shared";
2
2
  import type { DB } from "../generated/kysely-tailordb";
3
3
 
4
4
  export interface CalculateNodeDepthInput {
@@ -24,5 +24,5 @@ export async function run(db: ReadonlyDB<DB>, input: CalculateNodeDepthInput) {
24
24
  currentId = node.parentId;
25
25
  }
26
26
 
27
- return { depth };
27
+ return ok({ depth });
28
28
  }
@@ -1,5 +1,5 @@
1
1
  // @generated — do not edit
2
- import { defineQuery } from "../../shared/internal";
2
+ import { defineQuery } from "../../../shared";
3
3
  import { run } from "./calculateSubtreeDepth";
4
4
 
5
5
  export const calculateSubtreeDepth = defineQuery(run);
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { createMockDb } from "../../testing/index";
2
+ import { createMockDb } from "../../../testing/index";
3
3
  import type { DB } from "../generated/kysely-tailordb";
4
4
  import { baseChildNode, baseLeafNode } from "../testing/fixtures";
5
5
  import { run } from "./calculateSubtreeDepth";
@@ -11,7 +11,10 @@ describe("calculateSubtreeDepth", () => {
11
11
 
12
12
  const result = await run(db, { nodeId: "node-3" });
13
13
 
14
- expect(result.depth).toBe(1);
14
+ expect(result.ok).toBe(true);
15
+ if (result.ok) {
16
+ expect(result.value.depth).toBe(1);
17
+ }
15
18
  });
16
19
 
17
20
  it("returns 2 for node with one level of children", async () => {
@@ -20,7 +23,10 @@ describe("calculateSubtreeDepth", () => {
20
23
 
21
24
  const result = await run(db, { nodeId: "node-1" });
22
25
 
23
- expect(result.depth).toBe(2);
26
+ expect(result.ok).toBe(true);
27
+ if (result.ok) {
28
+ expect(result.value.depth).toBe(2);
29
+ }
24
30
  });
25
31
 
26
32
  it("returns 3 for node with two levels of children", async () => {
@@ -32,7 +38,10 @@ describe("calculateSubtreeDepth", () => {
32
38
 
33
39
  const result = await run(db, { nodeId: "node-1" });
34
40
 
35
- expect(result.depth).toBe(3);
41
+ expect(result.ok).toBe(true);
42
+ if (result.ok) {
43
+ expect(result.value.depth).toBe(3);
44
+ }
36
45
  });
37
46
 
38
47
  it("returns max depth for node with multiple branches", async () => {
@@ -70,6 +79,9 @@ describe("calculateSubtreeDepth", () => {
70
79
 
71
80
  const result = await run(db, { nodeId: "node-1" });
72
81
 
73
- expect(result.depth).toBe(3);
82
+ expect(result.ok).toBe(true);
83
+ if (result.ok) {
84
+ expect(result.value.depth).toBe(3);
85
+ }
74
86
  });
75
87
  });
@@ -1,4 +1,4 @@
1
- import type { ReadonlyDB } from "../../shared/internal";
1
+ import { ok, type ReadonlyDB } from "../../../shared";
2
2
  import type { DB } from "../generated/kysely-tailordb";
3
3
 
4
4
  export interface CalculateSubtreeDepthInput {
@@ -25,5 +25,5 @@ async function getSubtreeDepth(db: ReadonlyDB<DB>, nodeId: string): Promise<numb
25
25
 
26
26
  export async function run(db: ReadonlyDB<DB>, input: CalculateSubtreeDepthInput) {
27
27
  const depth = await getSubtreeDepth(db, input.nodeId);
28
- return { depth };
28
+ return ok({ depth });
29
29
  }
@@ -1,5 +1,5 @@
1
1
  // @generated — do not edit
2
- import { defineQuery } from "../../shared/internal";
2
+ import { defineQuery } from "../../../shared";
3
3
  import { run } from "./detectCircularReference";
4
4
 
5
5
  export const detectCircularReference = defineQuery(run);
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { createMockDb } from "../../testing/index";
2
+ import { createMockDb } from "../../../testing/index";
3
3
  import type { DB } from "../generated/kysely-tailordb";
4
4
  import { baseRootNode, baseChildNode, baseLeafNode } from "../testing/fixtures";
5
5
  import { run } from "./detectCircularReference";
@@ -10,7 +10,10 @@ describe("detectCircularReference", () => {
10
10
 
11
11
  const result = await run(db, { nodeId: "node-1", newParentId: "node-1" });
12
12
 
13
- expect(result.isCircular).toBe(true);
13
+ expect(result.ok).toBe(true);
14
+ if (result.ok) {
15
+ expect(result.value.isCircular).toBe(true);
16
+ }
14
17
  });
15
18
 
16
19
  it("detects moving node under its child as circular", async () => {
@@ -19,7 +22,10 @@ describe("detectCircularReference", () => {
19
22
 
20
23
  const result = await run(db, { nodeId: "node-1", newParentId: "node-2" });
21
24
 
22
- expect(result.isCircular).toBe(true);
25
+ expect(result.ok).toBe(true);
26
+ if (result.ok) {
27
+ expect(result.value.isCircular).toBe(true);
28
+ }
23
29
  });
24
30
 
25
31
  it("detects moving node under its grandchild as circular", async () => {
@@ -28,7 +34,10 @@ describe("detectCircularReference", () => {
28
34
 
29
35
  const result = await run(db, { nodeId: "node-1", newParentId: "node-3" });
30
36
 
31
- expect(result.isCircular).toBe(true);
37
+ expect(result.ok).toBe(true);
38
+ if (result.ok) {
39
+ expect(result.value.isCircular).toBe(true);
40
+ }
32
41
  });
33
42
 
34
43
  it("returns not circular for valid move", async () => {
@@ -38,7 +47,10 @@ describe("detectCircularReference", () => {
38
47
 
39
48
  const result = await run(db, { nodeId: "node-3", newParentId: "node-4" });
40
49
 
41
- expect(result.isCircular).toBe(false);
50
+ expect(result.ok).toBe(true);
51
+ if (result.ok) {
52
+ expect(result.value.isCircular).toBe(false);
53
+ }
42
54
  });
43
55
 
44
56
  it("returns not circular when new parent is root", async () => {
@@ -47,7 +59,10 @@ describe("detectCircularReference", () => {
47
59
 
48
60
  const result = await run(db, { nodeId: "node-2", newParentId: "node-1" });
49
61
 
50
- expect(result.isCircular).toBe(false);
62
+ expect(result.ok).toBe(true);
63
+ if (result.ok) {
64
+ expect(result.value.isCircular).toBe(false);
65
+ }
51
66
  });
52
67
 
53
68
  it("handles broken ancestor chain gracefully (not circular)", async () => {
@@ -56,6 +71,9 @@ describe("detectCircularReference", () => {
56
71
 
57
72
  const result = await run(db, { nodeId: "node-1", newParentId: "missing-node" });
58
73
 
59
- expect(result.isCircular).toBe(false);
74
+ expect(result.ok).toBe(true);
75
+ if (result.ok) {
76
+ expect(result.value.isCircular).toBe(false);
77
+ }
60
78
  });
61
79
  });
@@ -1,4 +1,4 @@
1
- import type { ReadonlyDB } from "../../shared/internal";
1
+ import { ok, type ReadonlyDB } from "../../../shared";
2
2
  import type { DB } from "../generated/kysely-tailordb";
3
3
 
4
4
  export interface DetectCircularReferenceInput {
@@ -8,7 +8,7 @@ export interface DetectCircularReferenceInput {
8
8
 
9
9
  export async function run(db: ReadonlyDB<DB>, input: DetectCircularReferenceInput) {
10
10
  if (input.newParentId === input.nodeId) {
11
- return { isCircular: true };
11
+ return ok({ isCircular: true });
12
12
  }
13
13
 
14
14
  // Walk up from new parent to root, checking if the moved node appears
@@ -24,9 +24,9 @@ export async function run(db: ReadonlyDB<DB>, input: DetectCircularReferenceInpu
24
24
 
25
25
  ancestorId = ancestor.parentId;
26
26
  if (ancestorId === input.nodeId) {
27
- return { isCircular: true };
27
+ return ok({ isCircular: true });
28
28
  }
29
29
  }
30
30
 
31
- return { isCircular: false };
31
+ return ok({ isCircular: false });
32
32
  }
@@ -1,5 +1,5 @@
1
1
  // @generated — do not edit
2
- import { defineQuery } from "../../shared/internal";
2
+ import { defineQuery } from "../../../shared";
3
3
  import { run } from "./getItem";
4
4
 
5
5
  export const getItem = defineQuery(run);