@tailor-platform/erp-kit 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +3 -26
  3. package/dist/cli.mjs +1613 -0
  4. package/package.json +14 -13
  5. package/schemas/app-compose/business-flow.yml +3 -0
  6. package/schemas/app-compose/story.yml +13 -1
  7. package/schemas/module/command.yml +9 -0
  8. package/schemas/module/module.yml +4 -0
  9. package/schemas/module/query.yml +9 -0
  10. package/skills/erp-kit-app-1-requirements/SKILL.md +8 -14
  11. package/skills/erp-kit-app-2-requirements-review/SKILL.md +102 -0
  12. package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +66 -0
  13. package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +69 -0
  14. package/skills/erp-kit-app-2-requirements-review/references/requirements-report-format.md +25 -0
  15. package/skills/erp-kit-app-3-plan/SKILL.md +157 -0
  16. package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +107 -0
  17. package/skills/erp-kit-app-3-plan/references/screen-extraction.md +74 -0
  18. package/skills/erp-kit-app-3-plan/references/story-extraction.md +86 -0
  19. package/skills/erp-kit-app-4-plan-review/SKILL.md +177 -0
  20. package/skills/erp-kit-app-4-plan-review/references/actor-flow-parity.md +73 -0
  21. package/skills/erp-kit-app-4-plan-review/references/business-flow-story-parity.md +86 -0
  22. package/skills/erp-kit-app-4-plan-review/references/orphan-detection.md +69 -0
  23. package/skills/erp-kit-app-4-plan-review/references/parity-report-format.md +52 -0
  24. package/skills/erp-kit-app-4-plan-review/references/story-resolver-parity.md +83 -0
  25. package/skills/erp-kit-app-4-plan-review/references/story-screen-parity.md +73 -0
  26. package/skills/erp-kit-app-5-impl-backend/SKILL.md +105 -0
  27. package/skills/erp-kit-app-5-impl-backend/references/app-config.md +38 -0
  28. package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +48 -0
  29. package/skills/erp-kit-app-5-impl-backend/references/resolver-patterns.md +68 -0
  30. package/skills/erp-kit-app-6-impl-frontend/SKILL.md +74 -0
  31. package/skills/erp-kit-app-6-impl-frontend/references/pages.md +160 -0
  32. package/skills/erp-kit-app-7-impl-review/SKILL.md +176 -0
  33. package/skills/erp-kit-app-7-impl-review/references/impl-parity-report-format.md +52 -0
  34. package/skills/erp-kit-app-7-impl-review/references/module-wiring-parity.md +84 -0
  35. package/skills/erp-kit-app-7-impl-review/references/resolver-doc-code-parity.md +86 -0
  36. package/skills/erp-kit-app-7-impl-review/references/screen-doc-code-parity.md +86 -0
  37. package/skills/erp-kit-module-1-requirements/SKILL.md +126 -0
  38. package/skills/erp-kit-module-1-requirements/references/boundary-analysis.md +51 -0
  39. package/skills/erp-kit-module-1-requirements/references/erp-research.md +57 -0
  40. package/skills/erp-kit-module-1-requirements/references/feature-doc.md +61 -0
  41. package/skills/erp-kit-module-2-requirements-review/SKILL.md +112 -0
  42. package/skills/erp-kit-module-2-requirements-review/references/best-practices-check.md +79 -0
  43. package/skills/erp-kit-module-2-requirements-review/references/boundary-consistency-check.md +70 -0
  44. package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +25 -0
  45. package/skills/erp-kit-module-3-plan/SKILL.md +107 -0
  46. package/skills/erp-kit-module-3-plan/references/command-extraction.md +87 -0
  47. package/skills/erp-kit-module-3-plan/references/model-extraction.md +72 -0
  48. package/skills/erp-kit-module-3-plan/references/query-extraction.md +59 -0
  49. package/skills/erp-kit-module-4-plan-review/SKILL.md +158 -0
  50. package/skills/erp-kit-module-4-plan-review/references/command-model-consistency.md +46 -0
  51. package/skills/erp-kit-module-4-plan-review/references/feature-command-parity.md +97 -0
  52. package/skills/erp-kit-module-4-plan-review/references/feature-model-parity.md +47 -0
  53. package/skills/erp-kit-module-4-plan-review/references/feature-query-parity.md +70 -0
  54. package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +52 -0
  55. package/skills/erp-kit-module-5-impl/SKILL.md +118 -0
  56. package/skills/erp-kit-module-5-impl/references/command-impl.md +68 -0
  57. package/skills/erp-kit-module-5-impl/references/exports.md +10 -0
  58. package/skills/erp-kit-module-5-impl/references/model-impl.md +45 -0
  59. package/skills/erp-kit-module-5-impl/references/query-impl.md +53 -0
  60. package/skills/erp-kit-module-6-impl-review/SKILL.md +187 -0
  61. package/skills/erp-kit-module-6-impl-review/references/command-doc-code-parity.md +92 -0
  62. package/skills/erp-kit-module-6-impl-review/references/command-doc-test-parity.md +93 -0
  63. package/skills/erp-kit-module-6-impl-review/references/error-implementation-parity.md +95 -0
  64. package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/errors.md +1 -1
  65. package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +52 -0
  66. package/skills/erp-kit-module-6-impl-review/references/model-doc-code-parity.md +80 -0
  67. package/skills/erp-kit-module-shared/SKILL.md +1 -1
  68. package/skills/erp-kit-module-shared/references/commands.md +1 -1
  69. package/skills/erp-kit-module-shared/references/errors.md +12 -9
  70. package/skills/erp-kit-module-shared/references/queries.md +109 -36
  71. package/skills/erp-kit-module-shared/references/testing.md +10 -0
  72. package/skills/erp-kit-update/SKILL.md +2 -2
  73. package/src/app.ts +1 -1
  74. package/src/commands/check.ts +1 -1
  75. package/src/commands/index.ts +16 -5
  76. package/src/commands/init.test.ts +22 -69
  77. package/src/commands/init.ts +28 -115
  78. package/src/commands/lib/distribute.test.ts +126 -0
  79. package/src/commands/lib/distribute.ts +129 -0
  80. package/src/commands/parse-doc-test-cases.ts +55 -0
  81. package/src/commands/scaffold.test.ts +74 -33
  82. package/src/commands/scaffold.ts +54 -18
  83. package/src/commands/sync-check.test.ts +173 -0
  84. package/src/commands/sync-check.ts +103 -2
  85. package/src/commands/update.test.ts +87 -0
  86. package/src/commands/update.ts +41 -0
  87. package/src/generator/generate-code.test.ts +23 -12
  88. package/src/generator/generate-code.ts +22 -16
  89. package/src/integration.test.ts +1 -1
  90. package/src/module.ts +20 -65
  91. package/src/modules/item-management/README.md +8 -0
  92. package/src/modules/item-management/command/activateItem.generated.ts +1 -1
  93. package/src/modules/item-management/command/activateItem.test.ts +12 -18
  94. package/src/modules/item-management/command/activateItem.ts +9 -5
  95. package/src/modules/item-management/command/assignItemToTaxonomy.generated.ts +1 -1
  96. package/src/modules/item-management/command/assignItemToTaxonomy.test.ts +10 -24
  97. package/src/modules/item-management/command/assignItemToTaxonomy.ts +19 -16
  98. package/src/modules/item-management/command/createItem.generated.ts +1 -1
  99. package/src/modules/item-management/command/createItem.test.ts +11 -11
  100. package/src/modules/item-management/command/createItem.ts +16 -7
  101. package/src/modules/item-management/command/createTaxonomyNode.generated.ts +1 -1
  102. package/src/modules/item-management/command/createTaxonomyNode.test.ts +9 -9
  103. package/src/modules/item-management/command/createTaxonomyNode.ts +33 -14
  104. package/src/modules/item-management/command/deactivateItem.generated.ts +1 -1
  105. package/src/modules/item-management/command/deactivateItem.test.ts +12 -18
  106. package/src/modules/item-management/command/deactivateItem.ts +9 -5
  107. package/src/modules/item-management/command/deleteItem.generated.ts +1 -1
  108. package/src/modules/item-management/command/deleteItem.test.ts +10 -16
  109. package/src/modules/item-management/command/deleteItem.ts +9 -5
  110. package/src/modules/item-management/command/deleteTaxonomyNode.generated.ts +1 -1
  111. package/src/modules/item-management/command/deleteTaxonomyNode.test.ts +10 -16
  112. package/src/modules/item-management/command/deleteTaxonomyNode.ts +22 -12
  113. package/src/modules/item-management/command/moveTaxonomyNode.generated.ts +1 -1
  114. package/src/modules/item-management/command/moveTaxonomyNode.test.ts +10 -10
  115. package/src/modules/item-management/command/moveTaxonomyNode.ts +63 -19
  116. package/src/modules/item-management/command/reactivateItem.generated.ts +1 -1
  117. package/src/modules/item-management/command/reactivateItem.test.ts +12 -18
  118. package/src/modules/item-management/command/reactivateItem.ts +9 -5
  119. package/src/modules/item-management/command/removeItemFromTaxonomy.generated.ts +1 -1
  120. package/src/modules/item-management/command/removeItemFromTaxonomy.test.ts +9 -16
  121. package/src/modules/item-management/command/removeItemFromTaxonomy.ts +11 -6
  122. package/src/modules/item-management/command/updateItem.generated.ts +1 -1
  123. package/src/modules/item-management/command/updateItem.test.ts +16 -16
  124. package/src/modules/item-management/command/updateItem.ts +11 -6
  125. package/src/modules/item-management/command/updateTaxonomyNode.generated.ts +1 -1
  126. package/src/modules/item-management/command/updateTaxonomyNode.test.ts +14 -20
  127. package/src/modules/item-management/command/updateTaxonomyNode.ts +9 -6
  128. package/src/modules/item-management/docs/commands/ActivateItem.md +8 -0
  129. package/src/modules/item-management/docs/commands/AssignItemToTaxonomy.md +7 -0
  130. package/src/modules/item-management/docs/commands/CreateItem.md +10 -0
  131. package/src/modules/item-management/docs/commands/CreateTaxonomyNode.md +9 -0
  132. package/src/modules/item-management/docs/commands/DeactivateItem.md +8 -0
  133. package/src/modules/item-management/docs/commands/DeleteItem.md +7 -0
  134. package/src/modules/item-management/docs/commands/DeleteTaxonomyNode.md +7 -0
  135. package/src/modules/item-management/docs/commands/MoveTaxonomyNode.md +10 -0
  136. package/src/modules/item-management/docs/commands/ReactivateItem.md +8 -0
  137. package/src/modules/item-management/docs/commands/RemoveItemFromTaxonomy.md +5 -0
  138. package/src/modules/item-management/docs/commands/UpdateItem.md +15 -0
  139. package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +9 -0
  140. package/src/modules/item-management/docs/queries/CalculateNodeDepth.md +8 -0
  141. package/src/modules/item-management/docs/queries/CalculateSubtreeDepth.md +7 -0
  142. package/src/modules/item-management/docs/queries/DetectCircularReference.md +9 -0
  143. package/src/modules/item-management/docs/queries/GetItem.md +9 -0
  144. package/src/modules/item-management/docs/queries/GetItemTaxonomyAssignment.md +5 -0
  145. package/src/modules/item-management/docs/queries/GetTaxonomyNode.md +7 -0
  146. package/src/modules/item-management/docs/queries/GetTaxonomyNodeAssignments.md +5 -0
  147. package/src/modules/item-management/docs/queries/GetTaxonomyNodeChildren.md +6 -0
  148. package/src/modules/item-management/index.ts +0 -51
  149. package/src/modules/item-management/lib/errors.generated.ts +24 -24
  150. package/src/modules/item-management/lib/permissions.generated.ts +1 -1
  151. package/src/modules/item-management/lib/types.ts +1 -1
  152. package/src/modules/item-management/module.ts +1 -1
  153. package/src/modules/item-management/query/calculateNodeDepth.generated.ts +1 -1
  154. package/src/modules/item-management/query/calculateNodeDepth.test.ts +21 -6
  155. package/src/modules/item-management/query/calculateNodeDepth.ts +2 -2
  156. package/src/modules/item-management/query/calculateSubtreeDepth.generated.ts +1 -1
  157. package/src/modules/item-management/query/calculateSubtreeDepth.test.ts +17 -5
  158. package/src/modules/item-management/query/calculateSubtreeDepth.ts +2 -2
  159. package/src/modules/item-management/query/detectCircularReference.generated.ts +1 -1
  160. package/src/modules/item-management/query/detectCircularReference.test.ts +25 -7
  161. package/src/modules/item-management/query/detectCircularReference.ts +4 -4
  162. package/src/modules/item-management/query/getItem.generated.ts +1 -1
  163. package/src/modules/item-management/query/getItem.test.ts +25 -7
  164. package/src/modules/item-management/query/getItem.ts +2 -2
  165. package/src/modules/item-management/query/getItemTaxonomyAssignment.generated.ts +1 -1
  166. package/src/modules/item-management/query/getItemTaxonomyAssignment.test.ts +9 -3
  167. package/src/modules/item-management/query/getItemTaxonomyAssignment.ts +2 -2
  168. package/src/modules/item-management/query/getTaxonomyNode.generated.ts +1 -1
  169. package/src/modules/item-management/query/getTaxonomyNode.test.ts +17 -5
  170. package/src/modules/item-management/query/getTaxonomyNode.ts +2 -2
  171. package/src/modules/item-management/query/getTaxonomyNodeAssignments.generated.ts +1 -1
  172. package/src/modules/item-management/query/getTaxonomyNodeAssignments.test.ts +9 -3
  173. package/src/modules/item-management/query/getTaxonomyNodeAssignments.ts +2 -2
  174. package/src/modules/item-management/query/getTaxonomyNodeChildren.generated.ts +1 -1
  175. package/src/modules/item-management/query/getTaxonomyNodeChildren.test.ts +13 -4
  176. package/src/modules/item-management/query/getTaxonomyNodeChildren.ts +2 -2
  177. package/src/modules/item-management/tailor.config.ts +6 -4
  178. package/src/modules/item-management/tailor.d.ts +13 -0
  179. package/src/modules/primitives/README.md +8 -0
  180. package/src/modules/primitives/command/activateCategory.generated.ts +1 -1
  181. package/src/modules/primitives/command/activateCategory.test.ts +8 -18
  182. package/src/modules/primitives/command/activateCategory.ts +9 -5
  183. package/src/modules/primitives/command/activateCurrency.generated.ts +1 -1
  184. package/src/modules/primitives/command/activateCurrency.test.ts +8 -18
  185. package/src/modules/primitives/command/activateCurrency.ts +9 -5
  186. package/src/modules/primitives/command/activateUnit.generated.ts +1 -1
  187. package/src/modules/primitives/command/activateUnit.test.ts +8 -15
  188. package/src/modules/primitives/command/activateUnit.ts +9 -5
  189. package/src/modules/primitives/command/createCategory.generated.ts +1 -1
  190. package/src/modules/primitives/command/createCategory.test.ts +29 -44
  191. package/src/modules/primitives/command/createCategory.ts +9 -5
  192. package/src/modules/primitives/command/createCurrency.generated.ts +1 -1
  193. package/src/modules/primitives/command/createCurrency.test.ts +53 -78
  194. package/src/modules/primitives/command/createCurrency.ts +9 -6
  195. package/src/modules/primitives/command/createExchangeRate.generated.ts +1 -1
  196. package/src/modules/primitives/command/createExchangeRate.test.ts +59 -97
  197. package/src/modules/primitives/command/createExchangeRate.ts +13 -7
  198. package/src/modules/primitives/command/createUnit.generated.ts +1 -1
  199. package/src/modules/primitives/command/createUnit.test.ts +59 -90
  200. package/src/modules/primitives/command/createUnit.ts +9 -6
  201. package/src/modules/primitives/command/deactivateCategory.generated.ts +1 -1
  202. package/src/modules/primitives/command/deactivateCategory.test.ts +15 -33
  203. package/src/modules/primitives/command/deactivateCategory.ts +9 -5
  204. package/src/modules/primitives/command/deactivateCurrency.generated.ts +1 -1
  205. package/src/modules/primitives/command/deactivateCurrency.test.ts +12 -26
  206. package/src/modules/primitives/command/deactivateCurrency.ts +9 -5
  207. package/src/modules/primitives/command/deactivateUnit.generated.ts +1 -1
  208. package/src/modules/primitives/command/deactivateUnit.test.ts +15 -30
  209. package/src/modules/primitives/command/deactivateUnit.ts +14 -7
  210. package/src/modules/primitives/command/setBaseCurrency.generated.ts +1 -1
  211. package/src/modules/primitives/command/setBaseCurrency.test.ts +18 -40
  212. package/src/modules/primitives/command/setBaseCurrency.ts +15 -7
  213. package/src/modules/primitives/command/setReferenceUnit.generated.ts +1 -1
  214. package/src/modules/primitives/command/setReferenceUnit.test.ts +22 -44
  215. package/src/modules/primitives/command/setReferenceUnit.ts +21 -9
  216. package/src/modules/primitives/docs/commands/ActivateCategory.md +6 -0
  217. package/src/modules/primitives/docs/commands/ActivateCurrency.md +6 -0
  218. package/src/modules/primitives/docs/commands/ActivateUnit.md +6 -0
  219. package/src/modules/primitives/docs/commands/CreateCategory.md +6 -0
  220. package/src/modules/primitives/docs/commands/CreateCurrency.md +10 -0
  221. package/src/modules/primitives/docs/commands/CreateExchangeRate.md +11 -0
  222. package/src/modules/primitives/docs/commands/CreateUnit.md +10 -0
  223. package/src/modules/primitives/docs/commands/DeactivateCategory.md +7 -0
  224. package/src/modules/primitives/docs/commands/DeactivateCurrency.md +7 -0
  225. package/src/modules/primitives/docs/commands/DeactivateUnit.md +7 -0
  226. package/src/modules/primitives/docs/commands/SetBaseCurrency.md +7 -0
  227. package/src/modules/primitives/docs/commands/SetReferenceUnit.md +7 -0
  228. package/src/modules/primitives/docs/queries/ConvertAmount.md +14 -0
  229. package/src/modules/primitives/docs/queries/ConvertQuantity.md +13 -0
  230. package/src/modules/primitives/docs/queries/GetBaseCurrency.md +5 -0
  231. package/src/modules/primitives/docs/queries/GetCurrency.md +7 -0
  232. package/src/modules/primitives/docs/queries/GetUnit.md +7 -0
  233. package/src/modules/primitives/docs/queries/GetUoMCategory.md +7 -0
  234. package/src/modules/primitives/docs/queries/ListUnitsByCategory.md +15 -5
  235. package/src/modules/primitives/index.ts +0 -49
  236. package/src/modules/primitives/lib/errors.generated.ts +23 -23
  237. package/src/modules/primitives/lib/permissions.generated.ts +1 -1
  238. package/src/modules/primitives/lib/types.ts +1 -1
  239. package/src/modules/primitives/module.ts +1 -1
  240. package/src/modules/primitives/query/convertAmount.generated.ts +1 -1
  241. package/src/modules/primitives/query/convertAmount.test.ts +110 -77
  242. package/src/modules/primitives/query/convertAmount.ts +61 -47
  243. package/src/modules/primitives/query/convertQuantity.generated.ts +1 -1
  244. package/src/modules/primitives/query/convertQuantity.test.ts +99 -69
  245. package/src/modules/primitives/query/convertQuantity.ts +12 -10
  246. package/src/modules/primitives/query/getBaseCurrency.generated.ts +1 -1
  247. package/src/modules/primitives/query/getBaseCurrency.test.ts +10 -4
  248. package/src/modules/primitives/query/getBaseCurrency.ts +2 -2
  249. package/src/modules/primitives/query/getCurrency.generated.ts +1 -1
  250. package/src/modules/primitives/query/getCurrency.test.ts +17 -5
  251. package/src/modules/primitives/query/getCurrency.ts +2 -2
  252. package/src/modules/primitives/query/getUnit.generated.ts +1 -1
  253. package/src/modules/primitives/query/getUnit.test.ts +17 -5
  254. package/src/modules/primitives/query/getUnit.ts +2 -2
  255. package/src/modules/primitives/query/getUoMCategory.generated.ts +1 -1
  256. package/src/modules/primitives/query/getUoMCategory.test.ts +17 -5
  257. package/src/modules/primitives/query/getUoMCategory.ts +2 -2
  258. package/src/modules/primitives/query/listUnitsByCategory.generated.ts +1 -1
  259. package/src/modules/primitives/query/listUnitsByCategory.test.ts +80 -0
  260. package/src/modules/primitives/query/listUnitsByCategory.ts +19 -3
  261. package/src/modules/primitives/tailor.config.ts +6 -4
  262. package/src/modules/primitives/tailor.d.ts +13 -0
  263. package/src/modules/product-management/README.md +52 -0
  264. package/src/modules/product-management/command/activateProduct.generated.ts +6 -0
  265. package/src/modules/product-management/command/activateProduct.test.ts +40 -0
  266. package/src/modules/product-management/command/activateProduct.ts +42 -0
  267. package/src/modules/product-management/command/assignProductToCategory.generated.ts +6 -0
  268. package/src/modules/product-management/command/assignProductToCategory.test.ts +90 -0
  269. package/src/modules/product-management/command/assignProductToCategory.ts +62 -0
  270. package/src/modules/product-management/command/createProduct.generated.ts +6 -0
  271. package/src/modules/product-management/command/createProduct.test.ts +149 -0
  272. package/src/modules/product-management/command/createProduct.ts +73 -0
  273. package/src/modules/product-management/command/createProductAttribute.generated.ts +6 -0
  274. package/src/modules/product-management/command/createProductAttribute.test.ts +70 -0
  275. package/src/modules/product-management/command/createProductAttribute.ts +53 -0
  276. package/src/modules/product-management/command/createProductAttributeValue.generated.ts +6 -0
  277. package/src/modules/product-management/command/createProductAttributeValue.test.ts +68 -0
  278. package/src/modules/product-management/command/createProductAttributeValue.ts +63 -0
  279. package/src/modules/product-management/command/createProductCategory.generated.ts +6 -0
  280. package/src/modules/product-management/command/createProductCategory.test.ts +135 -0
  281. package/src/modules/product-management/command/createProductCategory.ts +82 -0
  282. package/src/modules/product-management/command/deactivateProduct.generated.ts +6 -0
  283. package/src/modules/product-management/command/deactivateProduct.test.ts +40 -0
  284. package/src/modules/product-management/command/deactivateProduct.ts +42 -0
  285. package/src/modules/product-management/command/deleteProduct.generated.ts +6 -0
  286. package/src/modules/product-management/command/deleteProduct.test.ts +42 -0
  287. package/src/modules/product-management/command/deleteProduct.ts +42 -0
  288. package/src/modules/product-management/command/deleteProductAttribute.generated.ts +6 -0
  289. package/src/modules/product-management/command/deleteProductAttribute.test.ts +49 -0
  290. package/src/modules/product-management/command/deleteProductAttribute.ts +45 -0
  291. package/src/modules/product-management/command/deleteProductAttributeValue.generated.ts +6 -0
  292. package/src/modules/product-management/command/deleteProductAttributeValue.test.ts +71 -0
  293. package/src/modules/product-management/command/deleteProductAttributeValue.ts +68 -0
  294. package/src/modules/product-management/command/deleteProductCategory.generated.ts +6 -0
  295. package/src/modules/product-management/command/deleteProductCategory.test.ts +74 -0
  296. package/src/modules/product-management/command/deleteProductCategory.ts +53 -0
  297. package/src/modules/product-management/command/generateVariants.generated.ts +6 -0
  298. package/src/modules/product-management/command/generateVariants.test.ts +365 -0
  299. package/src/modules/product-management/command/generateVariants.ts +168 -0
  300. package/src/modules/product-management/command/moveProductCategory.generated.ts +6 -0
  301. package/src/modules/product-management/command/moveProductCategory.test.ts +170 -0
  302. package/src/modules/product-management/command/moveProductCategory.ts +124 -0
  303. package/src/modules/product-management/command/reactivateProduct.generated.ts +6 -0
  304. package/src/modules/product-management/command/reactivateProduct.test.ts +40 -0
  305. package/src/modules/product-management/command/reactivateProduct.ts +42 -0
  306. package/src/modules/product-management/command/removeProductFromCategory.generated.ts +6 -0
  307. package/src/modules/product-management/command/removeProductFromCategory.test.ts +42 -0
  308. package/src/modules/product-management/command/removeProductFromCategory.ts +32 -0
  309. package/src/modules/product-management/command/setProductAttributeAssignment.generated.ts +6 -0
  310. package/src/modules/product-management/command/setProductAttributeAssignment.test.ts +206 -0
  311. package/src/modules/product-management/command/setProductAttributeAssignment.ts +102 -0
  312. package/src/modules/product-management/command/updateProduct.generated.ts +6 -0
  313. package/src/modules/product-management/command/updateProduct.test.ts +168 -0
  314. package/src/modules/product-management/command/updateProduct.ts +95 -0
  315. package/src/modules/product-management/command/updateProductAttribute.generated.ts +6 -0
  316. package/src/modules/product-management/command/updateProductAttribute.test.ts +101 -0
  317. package/src/modules/product-management/command/updateProductAttribute.ts +68 -0
  318. package/src/modules/product-management/command/updateProductAttributeValue.generated.ts +6 -0
  319. package/src/modules/product-management/command/updateProductAttributeValue.test.ts +80 -0
  320. package/src/modules/product-management/command/updateProductAttributeValue.ts +58 -0
  321. package/src/modules/product-management/command/updateProductCategory.generated.ts +6 -0
  322. package/src/modules/product-management/command/updateProductCategory.test.ts +80 -0
  323. package/src/modules/product-management/command/updateProductCategory.ts +66 -0
  324. package/src/modules/product-management/db/product.ts +47 -0
  325. package/src/modules/product-management/db/productAttribute.ts +26 -0
  326. package/src/modules/product-management/db/productAttributeAssignment.ts +58 -0
  327. package/src/modules/product-management/db/productAttributeValue.ts +39 -0
  328. package/src/modules/product-management/db/productCategory.ts +34 -0
  329. package/src/modules/product-management/db/productCategoryAssignment.ts +49 -0
  330. package/src/modules/product-management/db/productVariant.ts +52 -0
  331. package/src/modules/product-management/docs/commands/ActivateProduct.md +39 -0
  332. package/src/modules/product-management/docs/commands/AssignProductToCategory.md +43 -0
  333. package/src/modules/product-management/docs/commands/CreateProduct.md +48 -0
  334. package/src/modules/product-management/docs/commands/CreateProductAttribute.md +39 -0
  335. package/src/modules/product-management/docs/commands/CreateProductAttributeValue.md +42 -0
  336. package/src/modules/product-management/docs/commands/CreateProductCategory.md +54 -0
  337. package/src/modules/product-management/docs/commands/DeactivateProduct.md +39 -0
  338. package/src/modules/product-management/docs/commands/DeleteProduct.md +42 -0
  339. package/src/modules/product-management/docs/commands/DeleteProductAttribute.md +39 -0
  340. package/src/modules/product-management/docs/commands/DeleteProductAttributeValue.md +42 -0
  341. package/src/modules/product-management/docs/commands/DeleteProductCategory.md +43 -0
  342. package/src/modules/product-management/docs/commands/GenerateVariants.md +68 -0
  343. package/src/modules/product-management/docs/commands/MoveProductCategory.md +54 -0
  344. package/src/modules/product-management/docs/commands/ReactivateProduct.md +38 -0
  345. package/src/modules/product-management/docs/commands/RemoveProductFromCategory.md +34 -0
  346. package/src/modules/product-management/docs/commands/SetProductAttributeAssignment.md +62 -0
  347. package/src/modules/product-management/docs/commands/UpdateProduct.md +61 -0
  348. package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +46 -0
  349. package/src/modules/product-management/docs/commands/UpdateProductAttributeValue.md +47 -0
  350. package/src/modules/product-management/docs/commands/UpdateProductCategory.md +46 -0
  351. package/src/modules/product-management/docs/features/attribute-management.md +48 -0
  352. package/src/modules/product-management/docs/features/product-category.md +71 -0
  353. package/src/modules/product-management/docs/features/product-lifecycle.md +66 -0
  354. package/src/modules/product-management/docs/features/variant-generation.md +77 -0
  355. package/src/modules/product-management/docs/models/Product.md +58 -0
  356. package/src/modules/product-management/docs/models/ProductAttribute.md +37 -0
  357. package/src/modules/product-management/docs/models/ProductAttributeAssignment.md +41 -0
  358. package/src/modules/product-management/docs/models/ProductAttributeValue.md +40 -0
  359. package/src/modules/product-management/docs/models/ProductCategory.md +46 -0
  360. package/src/modules/product-management/docs/models/ProductCategoryAssignment.md +37 -0
  361. package/src/modules/product-management/docs/models/ProductVariant.md +41 -0
  362. package/src/modules/product-management/docs/queries/CalculateCategoryDepth.md +47 -0
  363. package/src/modules/product-management/docs/queries/DetectCategoryCircularReference.md +51 -0
  364. package/src/modules/product-management/docs/queries/GetProduct.md +42 -0
  365. package/src/modules/product-management/docs/queries/GetProductAttribute.md +42 -0
  366. package/src/modules/product-management/docs/queries/GetProductAttributeAssignment.md +34 -0
  367. package/src/modules/product-management/docs/queries/GetProductAttributeValue.md +40 -0
  368. package/src/modules/product-management/docs/queries/GetProductCategory.md +42 -0
  369. package/src/modules/product-management/docs/queries/GetProductCategoryAssignment.md +34 -0
  370. package/src/modules/product-management/docs/queries/GetProductVariant.md +41 -0
  371. package/src/modules/product-management/docs/queries/ListAttributeAssignmentsByAttribute.md +34 -0
  372. package/src/modules/product-management/docs/queries/ListCategoryAssignmentsByProduct.md +35 -0
  373. package/src/modules/product-management/docs/queries/ListProductAttributeAssignments.md +34 -0
  374. package/src/modules/product-management/docs/queries/ListProductAttributeValues.md +36 -0
  375. package/src/modules/product-management/docs/queries/ListProductCategoryAssignments.md +34 -0
  376. package/src/modules/product-management/docs/queries/ListProductCategoryChildren.md +34 -0
  377. package/src/modules/product-management/docs/queries/ListProductVariants.md +34 -0
  378. package/src/modules/product-management/generated/enums.ts +9 -0
  379. package/src/modules/product-management/generated/kysely-tailordb.ts +100 -0
  380. package/src/modules/product-management/index.ts +2 -0
  381. package/src/modules/product-management/lib/_db_deps.ts +17 -0
  382. package/src/modules/product-management/lib/errors.generated.ts +152 -0
  383. package/src/modules/product-management/lib/permissions.generated.ts +25 -0
  384. package/src/modules/product-management/lib/types.ts +51 -0
  385. package/src/modules/product-management/module.ts +201 -0
  386. package/src/modules/product-management/query/calculateCategoryDepth.generated.ts +5 -0
  387. package/src/modules/product-management/query/calculateCategoryDepth.test.ts +72 -0
  388. package/src/modules/product-management/query/calculateCategoryDepth.ts +37 -0
  389. package/src/modules/product-management/query/detectCategoryCircularReference.generated.ts +5 -0
  390. package/src/modules/product-management/query/detectCategoryCircularReference.test.ts +72 -0
  391. package/src/modules/product-management/query/detectCategoryCircularReference.ts +44 -0
  392. package/src/modules/product-management/query/getProduct.generated.ts +5 -0
  393. package/src/modules/product-management/query/getProduct.test.ts +59 -0
  394. package/src/modules/product-management/query/getProduct.ts +18 -0
  395. package/src/modules/product-management/query/getProductAttribute.generated.ts +5 -0
  396. package/src/modules/product-management/query/getProductAttribute.test.ts +59 -0
  397. package/src/modules/product-management/query/getProductAttribute.ts +18 -0
  398. package/src/modules/product-management/query/getProductAttributeAssignment.generated.ts +5 -0
  399. package/src/modules/product-management/query/getProductAttributeAssignment.test.ts +37 -0
  400. package/src/modules/product-management/query/getProductAttributeAssignment.ts +18 -0
  401. package/src/modules/product-management/query/getProductAttributeValue.generated.ts +5 -0
  402. package/src/modules/product-management/query/getProductAttributeValue.test.ts +31 -0
  403. package/src/modules/product-management/query/getProductAttributeValue.ts +16 -0
  404. package/src/modules/product-management/query/getProductCategory.generated.ts +5 -0
  405. package/src/modules/product-management/query/getProductCategory.test.ts +59 -0
  406. package/src/modules/product-management/query/getProductCategory.ts +18 -0
  407. package/src/modules/product-management/query/getProductCategoryAssignment.generated.ts +5 -0
  408. package/src/modules/product-management/query/getProductCategoryAssignment.test.ts +37 -0
  409. package/src/modules/product-management/query/getProductCategoryAssignment.ts +18 -0
  410. package/src/modules/product-management/query/getProductVariant.generated.ts +5 -0
  411. package/src/modules/product-management/query/getProductVariant.test.ts +43 -0
  412. package/src/modules/product-management/query/getProductVariant.ts +20 -0
  413. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.generated.ts +5 -0
  414. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.test.ts +31 -0
  415. package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.ts +16 -0
  416. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.generated.ts +5 -0
  417. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.test.ts +31 -0
  418. package/src/modules/product-management/query/listCategoryAssignmentsByProduct.ts +16 -0
  419. package/src/modules/product-management/query/listProductAttributeAssignments.generated.ts +5 -0
  420. package/src/modules/product-management/query/listProductAttributeAssignments.test.ts +31 -0
  421. package/src/modules/product-management/query/listProductAttributeAssignments.ts +16 -0
  422. package/src/modules/product-management/query/listProductAttributeValues.generated.ts +5 -0
  423. package/src/modules/product-management/query/listProductAttributeValues.test.ts +31 -0
  424. package/src/modules/product-management/query/listProductAttributeValues.ts +17 -0
  425. package/src/modules/product-management/query/listProductCategoryAssignments.generated.ts +5 -0
  426. package/src/modules/product-management/query/listProductCategoryAssignments.test.ts +31 -0
  427. package/src/modules/product-management/query/listProductCategoryAssignments.ts +16 -0
  428. package/src/modules/product-management/query/listProductCategoryChildren.generated.ts +5 -0
  429. package/src/modules/product-management/query/listProductCategoryChildren.test.ts +31 -0
  430. package/src/modules/product-management/query/listProductCategoryChildren.ts +16 -0
  431. package/src/modules/product-management/query/listProductVariants.generated.ts +5 -0
  432. package/src/modules/product-management/query/listProductVariants.test.ts +31 -0
  433. package/src/modules/product-management/query/listProductVariants.ts +16 -0
  434. package/src/modules/product-management/tailor.config.ts +13 -0
  435. package/src/modules/product-management/tailor.d.ts +13 -0
  436. package/src/modules/product-management/testing/fixtures.ts +151 -0
  437. package/src/modules/user-management/README.md +9 -3
  438. package/src/modules/user-management/command/activateUser.generated.ts +1 -1
  439. package/src/modules/user-management/command/activateUser.test.ts +12 -65
  440. package/src/modules/user-management/command/activateUser.ts +5 -20
  441. package/src/modules/user-management/command/assignPermissionToRole.generated.ts +1 -1
  442. package/src/modules/user-management/command/assignPermissionToRole.test.ts +25 -60
  443. package/src/modules/user-management/command/assignPermissionToRole.ts +5 -24
  444. package/src/modules/user-management/command/assignRoleToUser.generated.ts +1 -1
  445. package/src/modules/user-management/command/assignRoleToUser.test.ts +35 -87
  446. package/src/modules/user-management/command/assignRoleToUser.ts +5 -24
  447. package/src/modules/user-management/command/createPermission.generated.ts +1 -1
  448. package/src/modules/user-management/command/createPermission.test.ts +23 -33
  449. package/src/modules/user-management/command/createPermission.ts +4 -5
  450. package/src/modules/user-management/command/createRole.generated.ts +1 -1
  451. package/src/modules/user-management/command/createRole.test.ts +17 -27
  452. package/src/modules/user-management/command/createRole.ts +4 -5
  453. package/src/modules/user-management/command/createUser.generated.ts +1 -1
  454. package/src/modules/user-management/command/createUser.test.ts +31 -118
  455. package/src/modules/user-management/command/createUser.ts +7 -25
  456. package/src/modules/user-management/command/deactivateUser.generated.ts +1 -1
  457. package/src/modules/user-management/command/deactivateUser.test.ts +12 -65
  458. package/src/modules/user-management/command/deactivateUser.ts +6 -21
  459. package/src/modules/user-management/command/reactivateUser.generated.ts +1 -1
  460. package/src/modules/user-management/command/reactivateUser.test.ts +13 -66
  461. package/src/modules/user-management/command/reactivateUser.ts +5 -20
  462. package/src/modules/user-management/command/revokePermissionFromRole.generated.ts +1 -1
  463. package/src/modules/user-management/command/revokePermissionFromRole.test.ts +24 -62
  464. package/src/modules/user-management/command/revokePermissionFromRole.ts +5 -24
  465. package/src/modules/user-management/command/revokeRoleFromUser.generated.ts +1 -1
  466. package/src/modules/user-management/command/revokeRoleFromUser.test.ts +24 -60
  467. package/src/modules/user-management/command/revokeRoleFromUser.ts +5 -24
  468. package/src/modules/user-management/docs/commands/ActivateUser.md +7 -0
  469. package/src/modules/user-management/docs/commands/AssignPermissionToRole.md +7 -0
  470. package/src/modules/user-management/docs/commands/AssignRoleToUser.md +9 -0
  471. package/src/modules/user-management/docs/commands/CreatePermission.md +12 -0
  472. package/src/modules/user-management/docs/commands/CreateRole.md +9 -0
  473. package/src/modules/user-management/docs/commands/CreateUser.md +11 -0
  474. package/src/modules/user-management/docs/commands/DeactivateUser.md +7 -0
  475. package/src/modules/user-management/docs/commands/ReactivateUser.md +7 -0
  476. package/src/modules/user-management/docs/commands/RevokePermissionFromRole.md +7 -0
  477. package/src/modules/user-management/docs/commands/RevokeRoleFromUser.md +7 -0
  478. package/src/modules/user-management/index.ts +0 -30
  479. package/src/modules/user-management/lib/errors.generated.ts +14 -14
  480. package/src/modules/user-management/lib/permissions.generated.ts +1 -2
  481. package/src/modules/user-management/lib/recomputeUserPermissions.ts +4 -3
  482. package/src/modules/user-management/lib/types.ts +1 -1
  483. package/src/modules/user-management/module.ts +2 -7
  484. package/src/modules/user-management/tailor.config.ts +6 -4
  485. package/src/modules/user-management/tailor.d.ts +13 -0
  486. package/src/modules/user-management/testing/fixtures.ts +1 -20
  487. package/src/schemas.ts +1 -1
  488. package/src/{modules/shared → shared}/defineCommand.test.ts +23 -7
  489. package/src/{modules/shared → shared}/defineCommand.ts +19 -10
  490. package/src/{modules/shared/internal.ts → shared/index.ts} +9 -1
  491. package/src/shared/pagination.test.ts +43 -0
  492. package/src/shared/pagination.ts +22 -0
  493. package/src/{modules/shared → shared}/types.ts +13 -0
  494. package/src/{modules/testing → testing}/index.ts +14 -7
  495. package/src/testing.ts +1 -1
  496. package/src/util.ts +8 -0
  497. package/templates/config/license.config.json +4 -0
  498. package/templates/scaffold/app/backend/.env.example +1 -0
  499. package/templates/scaffold/app/backend/__dot__gitignore +4 -0
  500. package/templates/scaffold/app/backend/eslint.config.js +32 -0
  501. package/templates/scaffold/app/backend/package.json +31 -0
  502. package/templates/scaffold/app/backend/seed/data/AuditEvent.jsonl +0 -0
  503. package/templates/scaffold/app/backend/seed/data/Permission.jsonl +0 -0
  504. package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +20 -0
  505. package/templates/scaffold/app/backend/seed/data/Role.jsonl +0 -0
  506. package/templates/scaffold/app/backend/seed/data/Role.schema.ts +20 -0
  507. package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +0 -0
  508. package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +24 -0
  509. package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -0
  510. package/templates/scaffold/app/backend/seed/data/User.schema.ts +20 -0
  511. package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +0 -0
  512. package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +24 -0
  513. package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -0
  514. package/templates/scaffold/app/backend/seed/data/_User.schema.ts +30 -0
  515. package/templates/scaffold/app/backend/seed/exec.mjs +659 -0
  516. package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +3 -0
  517. package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +3 -0
  518. package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +83 -0
  519. package/templates/scaffold/app/backend/src/modules.ts +9 -0
  520. package/templates/scaffold/app/backend/src/resolvers/createUser.ts +46 -0
  521. package/templates/scaffold/app/backend/tailor.config.ts +68 -0
  522. package/templates/scaffold/app/backend/tailor.d.ts +15 -0
  523. package/templates/scaffold/app/backend/tsconfig.json +19 -0
  524. package/templates/scaffold/app/docs/actors/.gitkeep +0 -0
  525. package/templates/scaffold/app/docs/business-flow/.gitkeep +0 -0
  526. package/templates/scaffold/app/docs/resolver/.gitkeep +0 -0
  527. package/templates/scaffold/app/docs/screen/.gitkeep +0 -0
  528. package/templates/scaffold/app/frontend/.env.example +2 -0
  529. package/templates/scaffold/app/frontend/__dot__gitignore +3 -0
  530. package/templates/scaffold/app/frontend/components.json +23 -0
  531. package/templates/scaffold/app/frontend/eslint.config.js +48 -0
  532. package/templates/scaffold/app/frontend/index.html +13 -0
  533. package/templates/scaffold/app/frontend/package.json +53 -0
  534. package/templates/scaffold/app/frontend/scripts/generate-graphql.mjs +6 -0
  535. package/templates/scaffold/app/frontend/src/App.tsx +58 -0
  536. package/templates/scaffold/app/frontend/src/components/composed/empty-state.tsx +26 -0
  537. package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +28 -0
  538. package/templates/scaffold/app/frontend/src/components/composed/loading.tsx +13 -0
  539. package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +39 -0
  540. package/templates/scaffold/app/frontend/src/components/ui/button.tsx +60 -0
  541. package/templates/scaffold/app/frontend/src/components/ui/card.tsx +75 -0
  542. package/templates/scaffold/app/frontend/src/components/ui/form.tsx +152 -0
  543. package/templates/scaffold/app/frontend/src/components/ui/input.tsx +21 -0
  544. package/templates/scaffold/app/frontend/src/components/ui/label.tsx +21 -0
  545. package/templates/scaffold/app/frontend/src/components/ui/spinner.tsx +16 -0
  546. package/templates/scaffold/app/frontend/src/components/ui/table.tsx +90 -0
  547. package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +103 -0
  548. package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1235 -0
  549. package/templates/scaffold/app/frontend/src/graphql/index.ts +15 -0
  550. package/templates/scaffold/app/frontend/src/index.css +5 -0
  551. package/templates/scaffold/app/frontend/src/lib/auth-client.ts +17 -0
  552. package/templates/scaffold/app/frontend/src/lib/utils.ts +6 -0
  553. package/templates/scaffold/app/frontend/src/main.tsx +10 -0
  554. package/templates/scaffold/app/frontend/src/pages/page.tsx +20 -0
  555. package/templates/scaffold/app/frontend/src/pages/user-management/page.tsx +19 -0
  556. package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +97 -0
  557. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +58 -0
  558. package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +51 -0
  559. package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +101 -0
  560. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +99 -0
  561. package/templates/scaffold/app/frontend/src/pages/user-management/user/create/page.tsx +19 -0
  562. package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +61 -0
  563. package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +21 -0
  564. package/templates/scaffold/app/frontend/tsconfig.app.json +35 -0
  565. package/templates/scaffold/app/frontend/tsconfig.json +16 -0
  566. package/templates/scaffold/app/frontend/tsconfig.node.json +23 -0
  567. package/templates/scaffold/app/frontend/vite.config.ts +23 -0
  568. package/templates/scaffold/module/command/.gitkeep +0 -0
  569. package/templates/scaffold/module/db/.gitkeep +0 -0
  570. package/templates/scaffold/module/executor/.gitkeep +0 -0
  571. package/templates/scaffold/module/generated/.gitkeep +0 -0
  572. package/templates/scaffold/module/index.ts +2 -0
  573. package/templates/scaffold/module/lib/errors.ts +1 -0
  574. package/templates/scaffold/module/lib/types.ts +4 -0
  575. package/templates/scaffold/module/module.ts +7 -0
  576. package/templates/scaffold/module/permissions.ts +3 -0
  577. package/templates/scaffold/module/query/.gitkeep +0 -0
  578. package/templates/scaffold/module/tailor.config.ts +13 -0
  579. package/templates/scaffold/module/testing/fixtures.ts +1 -0
  580. package/templates/workflows/erp-kit-check.yml +37 -0
  581. package/dist/cli.js +0 -1654
  582. package/skills/erp-kit-app-1-requirements/references/structure.md +0 -27
  583. package/skills/erp-kit-app-2-breakdown/SKILL.md +0 -95
  584. package/skills/erp-kit-app-2-breakdown/references/screen-detailview.md +0 -106
  585. package/skills/erp-kit-app-2-breakdown/references/screen-form.md +0 -139
  586. package/skills/erp-kit-app-2-breakdown/references/screen-listview.md +0 -153
  587. package/skills/erp-kit-app-2-breakdown/references/structure.md +0 -27
  588. package/skills/erp-kit-app-3-doc-review/SKILL.md +0 -116
  589. package/skills/erp-kit-app-3-doc-review/references/structure.md +0 -27
  590. package/skills/erp-kit-app-4-design/SKILL.md +0 -256
  591. package/skills/erp-kit-app-4-design/references/component.md +0 -50
  592. package/skills/erp-kit-app-4-design/references/screen-detailview.md +0 -106
  593. package/skills/erp-kit-app-4-design/references/screen-form.md +0 -139
  594. package/skills/erp-kit-app-4-design/references/screen-listview.md +0 -153
  595. package/skills/erp-kit-app-4-design/references/structure.md +0 -27
  596. package/skills/erp-kit-app-5-design-review/SKILL.md +0 -290
  597. package/skills/erp-kit-app-5-design-review/references/component.md +0 -50
  598. package/skills/erp-kit-app-5-design-review/references/screen-detailview.md +0 -106
  599. package/skills/erp-kit-app-5-design-review/references/screen-form.md +0 -139
  600. package/skills/erp-kit-app-5-design-review/references/screen-listview.md +0 -153
  601. package/skills/erp-kit-app-6-impl-spec/SKILL.md +0 -127
  602. package/skills/erp-kit-app-6-impl-spec/references/auth.md +0 -72
  603. package/skills/erp-kit-app-6-impl-spec/references/structure.md +0 -27
  604. package/skills/erp-kit-module-1-docs/SKILL.md +0 -111
  605. package/skills/erp-kit-module-2-feature-breakdown/SKILL.md +0 -76
  606. package/skills/erp-kit-module-3-doc-review/SKILL.md +0 -294
  607. package/skills/erp-kit-module-4-tdd/SKILL.md +0 -94
  608. package/skills/erp-kit-module-4-tdd/references/exports.md +0 -8
  609. package/skills/erp-kit-module-5-impl-review/SKILL.md +0 -410
  610. package/src/commands/scaffold-templates.ts +0 -65
  611. package/src/modules/shared/index.ts +0 -1
  612. package/src/modules/user-management/command/logAuditEvent.generated.ts +0 -6
  613. package/src/modules/user-management/command/logAuditEvent.test.ts +0 -187
  614. package/src/modules/user-management/command/logAuditEvent.ts +0 -56
  615. package/src/modules/user-management/db/auditEvent.ts +0 -47
  616. package/src/modules/user-management/docs/commands/LogAuditEvent.md +0 -37
  617. package/src/modules/user-management/docs/features/audit-trail.md +0 -80
  618. package/src/modules/user-management/docs/models/AuditEvent.md +0 -36
  619. /package/skills/{erp-kit-module-2-feature-breakdown → erp-kit-module-3-plan}/references/naming.md +0 -0
  620. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/cross-module-dependency.md +0 -0
  621. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/db-relations.md +0 -0
  622. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/generated-code.md +0 -0
  623. /package/skills/{erp-kit-module-4-tdd → erp-kit-module-5-impl}/references/models.md +0 -0
  624. /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/commands.md +0 -0
  625. /package/skills/{erp-kit-module-5-impl-review → erp-kit-module-6-impl-review}/references/testing.md +0 -0
  626. /package/src/modules/{product-management → audit}/.gitkeep +0 -0
  627. /package/src/{modules/shared → shared}/createContext.test.ts +0 -0
  628. /package/src/{modules/shared → shared}/createContext.ts +0 -0
  629. /package/src/{modules/shared → shared}/definePermissions.test.ts +0 -0
  630. /package/src/{modules/shared → shared}/definePermissions.ts +0 -0
  631. /package/src/{modules/shared → shared}/defineQuery.test.ts +0 -0
  632. /package/src/{modules/shared → shared}/defineQuery.ts +0 -0
  633. /package/src/{modules/shared → shared}/entityTypes.ts +0 -0
  634. /package/src/{modules/shared → shared}/errors.ts +0 -0
  635. /package/src/{modules/shared → shared}/requirePermission.test.ts +0 -0
  636. /package/src/{modules/shared → shared}/requirePermission.ts +0 -0
  637. /package/src/{modules/shared → shared}/result.ts +0 -0
@@ -0,0 +1,160 @@
1
+ # Frontend Pages
2
+
3
+ ### GraphQL Setup
4
+
5
+ All operations use gql.tada for type safety:
6
+
7
+ ```ts
8
+ import { graphql, type FragmentOf, readFragment } from "@/graphql";
9
+ ```
10
+
11
+ Built-in queries (`gqlOperations: "query"`) generate:
12
+
13
+ - `<Entity>(id: ID!)` — get by ID
14
+ - `<entities>` — list with connection pattern (`edges { node { ... } }`)
15
+
16
+ Mutations are defined by custom resolvers.
17
+
18
+ ### ListView
19
+
20
+ Key points:
21
+
22
+ - Query uses connection pattern: `edges { node { ...Fragment } }`
23
+ - Two-level fragments: row fragment for items, table fragment for the connection
24
+ - `EmptyState` when `edges.length === 0`
25
+ - Columns map to screen spec's "Required Columns"
26
+ - `Layout` with title and create action button
27
+
28
+ ### DetailView
29
+
30
+ Key points:
31
+
32
+ - Two-column `Layout`: detail on left, actions on right
33
+ - `useParams()` to get entity ID from route
34
+ - `DescriptionCard` from `@tailor-platform/app-shell` for key-value fields:
35
+
36
+ ```tsx
37
+ <DescriptionCard
38
+ data={resource}
39
+ title="Overview"
40
+ columns={3}
41
+ fields={[
42
+ { key: "name", label: "Name", meta: { copyable: true } },
43
+ {
44
+ key: "status",
45
+ label: "Status",
46
+ type: "badge",
47
+ meta: { badgeVariantMap: { ACTIVE: "success" } },
48
+ },
49
+ { key: "createdAt", label: "Created At", type: "date", meta: { dateFormat: "medium" } },
50
+ ]}
51
+ />
52
+ ```
53
+
54
+ Field types: `"text"` (default), `"badge"`, `"money"`, `"date"`, `"link"`, `"address"`, `"reference"`, `"divider"`
55
+
56
+ ### Form Pattern
57
+
58
+ Create and edit forms share the same structure:
59
+
60
+ - **React Hook Form + Zod** for validation with `zodResolver`
61
+ - **urql `useMutation`** for GraphQL mutations
62
+ - **Cache invalidation**: pass `additionalTypenames` to the mutation context so urql invalidates related queries (e.g., `createUser(values, { additionalTypenames: ["User"] })`)
63
+ - **Toast notifications**: use `useToast` from `@tailor-platform/app-shell` (sonner-based, `Toaster` is built into AppShell) for success/error feedback
64
+ - **Navigate `".."`** to go back to list after success
65
+ - Edit form pre-fills `defaultValues` from existing entity via fragment
66
+
67
+ #### Field Type Mapping
68
+
69
+ | Field Type | Component | Zod Schema |
70
+ | ---------- | ------------------------- | ------------------------------- |
71
+ | Email | `<Input type="email" />` | `z.email()` |
72
+ | Text | `<Input />` | `z.string()` |
73
+ | Textarea | `<textarea />` | `z.string()` |
74
+ | Dropdown | `<Select />` | `z.string()` or `z.enum([...])` |
75
+ | Date | `<Input type="date" />` | `z.string()` (ISO format) |
76
+ | Number | `<Input type="number" />` | `z.coerce.number()` |
77
+ | Checkbox | `<Checkbox />` | `z.boolean()` |
78
+
79
+ #### Validation
80
+
81
+ - **Required: Yes** → `.min(1, "Field is required")` (string) / `.positive()` (number)
82
+ - **Required: No** → `.optional()`
83
+
84
+ ### Shared Component Patterns
85
+
86
+ #### Fragment Collocation
87
+
88
+ Each component defines and exports its own GraphQL fragment. The parent page imports it and includes it in the query:
89
+
90
+ ```tsx
91
+ // components/user-card.tsx
92
+ export const UserCardFragment = graphql(`
93
+ fragment UserCard on User {
94
+ id
95
+ name
96
+ email
97
+ }
98
+ `);
99
+
100
+ export const UserCard = ({ user }: { user: FragmentOf<typeof UserCardFragment> }) => {
101
+ const data = readFragment(UserCardFragment, user);
102
+ return <div>{data.name}</div>;
103
+ };
104
+
105
+ // page.tsx
106
+ const UserQuery = graphql(
107
+ `
108
+ query User($id: ID!) {
109
+ user(id: $id) {
110
+ ...UserCard
111
+ }
112
+ }
113
+ `,
114
+ [UserCardFragment],
115
+ );
116
+ ```
117
+
118
+ #### App.tsx
119
+
120
+ - `AuthGuard`: implement yourself, pass via `guardComponent` prop. AuthProvider shows it automatically when `!isReady || !isAuthenticated`, so the guard only needs to render a sign-in UI — no state checks needed inside it
121
+ - `GraphQLProvider`: pass `authClient.fetch` directly to urql's `fetch` option and `authClient.getAppUri()` for the URL
122
+ - `useAuth()` returns `{ isAuthenticated, isReady, login, logout }` directly (not nested in `authState`)
123
+ - Built-in `me` query returns the current user's `User` record — use it instead of writing a custom resolver for profile info
124
+ - Required env vars: `VITE_TAILOR_APP_URL`, `VITE_TAILOR_CLIENT_ID`
125
+ - Auth client: create once in `src/lib/auth-client.ts` using `createAuthClient({ appUri, clientId })`
126
+ - Sidebar: use `SidebarGroup` + `SidebarItem` for custom ordering
127
+
128
+ #### Module-level page.tsx (required)
129
+
130
+ Every module directory must have a `page.tsx` that redirects to the first child. Use **absolute paths** to avoid double-path bugs:
131
+
132
+ ```tsx
133
+ useEffect(() => {
134
+ void navigate("/item-management/item", { replace: true });
135
+ }, [navigate]);
136
+ ```
137
+
138
+ #### Page conventions
139
+
140
+ Every page component must:
141
+
142
+ 1. Be the **default export** of `page.tsx`
143
+ 2. Set `appShellPageProps` with at least `meta.title`
144
+
145
+ #### Common imports
146
+
147
+ ```tsx
148
+ import {
149
+ Layout,
150
+ Link,
151
+ useParams,
152
+ useNavigate,
153
+ type AppShellPageProps,
154
+ } from "@tailor-platform/app-shell";
155
+ import { useQuery, useMutation } from "urql";
156
+ import { graphql, type FragmentOf, readFragment } from "@/graphql";
157
+ import { useForm } from "react-hook-form";
158
+ import { zodResolver } from "@hookform/resolvers/zod";
159
+ import { z } from "zod";
160
+ ```
@@ -0,0 +1,176 @@
1
+ ---
2
+ name: erp-kit-app-7-impl-review
3
+ description: Review implementation parity between documentation and code for app-compose applications. Use after frontend implementation (step 6) to validate code matches documentation.
4
+ ---
5
+
6
+ # Implementation Parity Review
7
+
8
+ Review **implementation consistency** between Tier 3-4 documentation and actual backend/frontend code.
9
+
10
+ ## When to Use
11
+
12
+ - After backend and frontend implementation, verify code matches documentation
13
+ - Before merging feature branches
14
+ - Quality check during code review
15
+
16
+ ## Step 1: Setup
17
+
18
+ Define shared context for all agents:
19
+
20
+ - `APP_ROOT`: from argument or current working directory. Must contain a `docs/` directory.
21
+ - `APP_NAME`: basename of APP_ROOT
22
+ - `RESOLVER_DOCS`: glob `<APP_ROOT>/docs/resolver/*.md`
23
+ - `SCREEN_DOCS`: glob `<APP_ROOT>/docs/screen/*.md`
24
+ - `BACKEND_RESOLVERS`: glob `<APP_ROOT>/backend/src/modules/*/resolvers/*.ts`
25
+ - `BACKEND_EXECUTORS`: glob `<APP_ROOT>/backend/executors/*.ts`
26
+ - `BACKEND_MODULES`: `<APP_ROOT>/backend/src/modules.ts`
27
+ - `BACKEND_CONFIG`: `<APP_ROOT>/backend/tailor.config.ts`
28
+ - `FRONTEND_PAGES`: glob `<APP_ROOT>/frontend/src/app/(main)/**/*.tsx`
29
+
30
+ Verify at least `RESOLVER_DOCS` or `SCREEN_DOCS` is non-empty. If no docs exist, stop with: "No docs found for app <APP_NAME>."
31
+
32
+ ## Step 2: Dispatch Agents (parallelize if possible)
33
+
34
+ Launch 4 Agent tool calls in parallel — one per parity check.
35
+ Each agent receives: APP_NAME, relevant doc/code file paths.
36
+ Each agent returns: structured JSON per [references/impl-parity-report-format.md](references/impl-parity-report-format.md).
37
+ If a doc or code directory is empty, the agent reports "no files found" and skips.
38
+
39
+ | Agent | Prompt Template | Inputs |
40
+ | ----- | -------------------------------------------------------------------------------- | --------------------------------------------------- |
41
+ | 1 | [references/resolver-doc-code-parity.md](references/resolver-doc-code-parity.md) | RESOLVER_DOCS, BACKEND_RESOLVERS, BACKEND_EXECUTORS |
42
+ | 2 | [references/screen-doc-code-parity.md](references/screen-doc-code-parity.md) | SCREEN_DOCS, FRONTEND_PAGES |
43
+ | 3 | [references/module-wiring-parity.md](references/module-wiring-parity.md) | RESOLVER_DOCS, BACKEND_MODULES, BACKEND_CONFIG |
44
+ | 4 | (build verification — inline, no template) | APP_ROOT |
45
+
46
+ For agents 1-3:
47
+
48
+ 1. Read the prompt template file
49
+ 2. Replace `{{APP_NAME}}` with the resolved app name
50
+ 3. Replace doc/code path placeholders with the actual file paths
51
+ 4. Dispatch the agent with the filled prompt
52
+
53
+ For agent 4 (build verification):
54
+
55
+ Run build checks inline:
56
+
57
+ ```bash
58
+ cd <APP_ROOT>/backend && pnpm lint && pnpm typecheck
59
+ cd <APP_ROOT>/frontend && pnpm lint && pnpm typecheck && pnpm build
60
+ ```
61
+
62
+ Report pass/fail for each check.
63
+
64
+ ## Step 3: Aggregate Results
65
+
66
+ After ALL agents return:
67
+
68
+ 1. Collect the JSON results from each agent
69
+ 2. Merge all `gaps[]` arrays into a single list
70
+ 3. Merge all `inconsistencies[]` arrays into a single list
71
+ 4. Deduplicate: if two gaps share the same `source + target + check`, keep only one
72
+ 5. Calculate totals across all summaries
73
+ 6. Render the final report below
74
+
75
+ ## Report Format
76
+
77
+ Render the aggregated results as markdown:
78
+
79
+ ### Implementation Parity Review Report
80
+
81
+ **Application:** <APP_NAME>
82
+
83
+ ---
84
+
85
+ ### 1. Resolver Doc → Backend Code Coverage
86
+
87
+ | Resolver Doc | Module Command | Implemented | Error Handling | Gap |
88
+ | ------------ | -------------- | ----------- | -------------- | --- |
89
+
90
+ (Populated from agent 1 gaps)
91
+
92
+ ---
93
+
94
+ ### 2. Screen Doc → Frontend Code Coverage
95
+
96
+ | Screen Doc | Screen Type | Page Exists | Fields Match | Gap |
97
+ | ---------- | ----------- | ----------- | ------------ | --- |
98
+
99
+ (Populated from agent 2 gaps)
100
+
101
+ ---
102
+
103
+ ### 3. Module Wiring Consistency
104
+
105
+ | Resolver | Required Module | Wired in modules.ts | Config Reference | Gap |
106
+ | -------- | --------------- | ------------------- | ---------------- | --- |
107
+
108
+ (Populated from agent 3 gaps)
109
+
110
+ ---
111
+
112
+ ### 4. Build Verification
113
+
114
+ | Check | Backend | Frontend |
115
+ | ----- | ------- | -------- |
116
+ | Lint | | |
117
+ | Types | | |
118
+ | Build | N/A | |
119
+
120
+ (Populated from agent 4 results)
121
+
122
+ ---
123
+
124
+ ### 5. Missing Implementation
125
+
126
+ #### Missing Backend Resolvers
127
+
128
+ | Resolver Doc | Expected File | Purpose |
129
+ | ------------ | ------------- | ------- |
130
+
131
+ #### Missing Frontend Pages
132
+
133
+ | Screen Doc | Expected Path | Screen Type |
134
+ | ---------- | ------------- | ----------- |
135
+
136
+ #### Missing Module Wiring
137
+
138
+ | Module | Referenced by Resolver | Status |
139
+ | ------ | ---------------------- | ------ |
140
+
141
+ (Populated from all agents' gaps where status is `fail`)
142
+
143
+ ---
144
+
145
+ ### 6. Inconsistencies
146
+
147
+ | Type | Location | Issue |
148
+ | ---- | -------- | ----- |
149
+
150
+ (Populated from all agents' `inconsistencies[]`)
151
+
152
+ ---
153
+
154
+ ### 7. Summary
155
+
156
+ | Aspect | Status | Details |
157
+ | ---------------------------- | ------ | ----------------- |
158
+ | Resolver Doc → Code Coverage | | X/Y checks passed |
159
+ | Screen Doc → Code Coverage | | X/Y checks passed |
160
+ | Module Wiring Consistency | | X/Y checks passed |
161
+ | Build Verification | | pass / fail |
162
+
163
+ ### 8. Recommendations
164
+
165
+ Numbered list of actionable fixes, grouped by priority:
166
+
167
+ 1. Implement missing resolvers/pages (highest priority)
168
+ 2. Fix module wiring gaps
169
+ 3. Resolve field/type mismatches
170
+ 4. Fix build errors
171
+
172
+ ## References
173
+
174
+ - [Implementation parity report format](references/impl-parity-report-format.md)
175
+ - For backend patterns, see erp-kit-app-5-impl-backend
176
+ - For frontend patterns, see erp-kit-app-6-impl-frontend
@@ -0,0 +1,52 @@
1
+ # Implementation Parity Report Format
2
+
3
+ All implementation parity check agents return results in this JSON structure.
4
+
5
+ ## Schema
6
+
7
+ ```json
8
+ {
9
+ "check_type": "<one of: resolver-doc-code-parity, screen-doc-code-parity, module-wiring-parity>",
10
+ "app": "<app-name>",
11
+ "gaps": [
12
+ {
13
+ "source": "<source doc or code path>",
14
+ "target": "<target code or doc path, or 'missing'>",
15
+ "check": "<check_id from the agent's parity checks table>",
16
+ "status": "pass | fail | skip",
17
+ "detail": "<human-readable description of the finding>"
18
+ }
19
+ ],
20
+ "inconsistencies": [
21
+ {
22
+ "type": "<inconsistency type, e.g. type_mismatch, missing_field>",
23
+ "location": "<source vs target description>",
24
+ "detail": "<human-readable description>"
25
+ }
26
+ ],
27
+ "summary": {
28
+ "total_checks": 0,
29
+ "passed": 0,
30
+ "failed": 0,
31
+ "skipped": 0
32
+ }
33
+ }
34
+ ```
35
+
36
+ ## Field Reference
37
+
38
+ ### gaps[]
39
+
40
+ One entry per parity check performed. `status` is:
41
+
42
+ - `pass`: doc and code are consistent
43
+ - `fail`: gap or mismatch found
44
+ - `skip`: target code/doc missing or empty, check could not run
45
+
46
+ ### inconsistencies[]
47
+
48
+ Cross-cutting issues that don't fit a single gap entry (e.g., type mismatches, naming violations, missing patterns).
49
+
50
+ ### summary
51
+
52
+ Aggregate counts. `total_checks = passed + failed + skipped`.
@@ -0,0 +1,84 @@
1
+ # Module Wiring Parity Check
2
+
3
+ ## Context
4
+
5
+ App: {{APP_NAME}}
6
+ Resolver docs: {{RESOLVER_DOCS}}
7
+ Backend modules file: {{BACKEND_MODULES}}
8
+ Backend config file: {{BACKEND_CONFIG}}
9
+
10
+ ## Instructions
11
+
12
+ 1. Read ALL resolver docs at the paths above
13
+ 2. Read the modules file (`src/modules.ts`)
14
+ 3. Read the config file (`tailor.config.ts`)
15
+ 4. Verify all required modules are wired and configured
16
+ 5. Return results as JSON per the Output Format section
17
+
18
+ ## Extraction: Resolver Docs
19
+
20
+ From each resolver doc, extract:
21
+
22
+ - Module it depends on (which `defineXxxModule` it needs)
23
+ - Commands it calls (which module command functions)
24
+
25
+ ## Extraction: modules.ts
26
+
27
+ From the modules file, extract:
28
+
29
+ - All `defineXxxModule()` calls
30
+ - Inter-module dependency wiring (e.g., primitives passed to item-management)
31
+ - Exported `db`, `commands`, and `executors`
32
+
33
+ ## Extraction: tailor.config.ts
34
+
35
+ From the config file, extract:
36
+
37
+ - DB namespace configuration
38
+ - Resolver/executor glob patterns
39
+ - Auth configuration (IdP, Auth, user profile)
40
+ - Generator configuration
41
+
42
+ ## Parity Checks
43
+
44
+ | Check ID | Question |
45
+ | -------------------- | ---------------------------------------------------------------- |
46
+ | module_wired | Is every module referenced by resolvers wired in modules.ts? |
47
+ | dependency_order | Are inter-module dependencies passed correctly? |
48
+ | exports_complete | Are db, commands, and executors all exported? |
49
+ | config_resolver_glob | Does the resolver glob in config cover all resolver directories? |
50
+ | config_executor_glob | Does the executor glob in config cover all executor files? |
51
+ | config_db_namespace | Is the DB namespace configured? |
52
+ | config_auth | Is auth configured with IdP, Auth, and user profile? |
53
+
54
+ ### How to Check
55
+
56
+ 1. Build a set of required modules from resolver docs
57
+ 2. Check each required module appears as a `defineXxxModule()` call in modules.ts
58
+ 3. Verify dependency wiring (e.g., if item-management resolvers exist, primitives must be wired into it)
59
+ 4. Check tailor.config.ts resolver glob pattern covers all module resolver directories
60
+ 5. Verify auth is configured if any resolver requires authentication
61
+
62
+ ## Common Gap Patterns
63
+
64
+ - **Missing module**: Resolver references a module not wired in modules.ts
65
+ - **Missing dependency**: Module wired but not given required dependencies
66
+ - **Glob mismatch**: Config resolver glob doesn't cover a module's resolvers directory
67
+ - **Missing auth**: Resolvers exist but no auth configured
68
+ - **Missing executors**: Module has event handlers but no executor glob configured
69
+
70
+ ## Output Format
71
+
72
+ Return a JSON object:
73
+
74
+ ```json
75
+ {
76
+ "check_type": "module-wiring-parity",
77
+ "app": "{{APP_NAME}}",
78
+ "gaps": [...],
79
+ "inconsistencies": [...],
80
+ "summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
81
+ }
82
+ ```
83
+
84
+ See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
@@ -0,0 +1,86 @@
1
+ # Resolver Doc → Backend Code Parity Check
2
+
3
+ ## Context
4
+
5
+ App: {{APP_NAME}}
6
+ Resolver docs: {{RESOLVER_DOCS}}
7
+ Backend resolvers: {{BACKEND_RESOLVERS}}
8
+ Backend executors: {{BACKEND_EXECUTORS}}
9
+
10
+ ## Instructions
11
+
12
+ 1. Read ALL resolver docs at the paths above
13
+ 2. Read ALL backend resolver code files at the paths above
14
+ 3. Read ALL backend executor code files at the paths above
15
+ 4. For each resolver doc, check if it has a corresponding implementation
16
+ 5. Return results as JSON per the Output Format section
17
+
18
+ ## Extraction: Resolver Docs
19
+
20
+ From each resolver doc, extract:
21
+
22
+ - Resolver name (from filename or heading)
23
+ - Type: Mutation or Query
24
+ - Module and command it calls
25
+ - Input parameters (name, type, required/optional)
26
+ - Error scenarios (error codes and conditions)
27
+ - Expected output shape
28
+
29
+ ## Extraction: Backend Code
30
+
31
+ From each resolver file (`src/modules/*/resolvers/*.ts`), extract:
32
+
33
+ - Resolver name (from `createResolver()` call or filename)
34
+ - Module command called (import path and function name)
35
+ - Input parameter handling (`context.input.*` accesses)
36
+ - Error handling (`result.error.code` switch cases)
37
+ - Return value structure
38
+
39
+ From each executor file (`executors/*.ts`), extract:
40
+
41
+ - Executor name and which module event handler it re-exports
42
+
43
+ ## Parity Checks
44
+
45
+ | Check ID | Question |
46
+ | -------------------- | --------------------------------------------------------------- |
47
+ | resolver_impl_exists | Does a backend resolver file exist for each resolver doc? |
48
+ | command_reference | Does the resolver code call the correct module command? |
49
+ | input_coverage | Does the resolver handle all documented input parameters? |
50
+ | error_handling | Does the resolver handle all documented error scenarios? |
51
+ | return_shape | Does the resolver return the documented output shape? |
52
+ | executor_exists | Does an executor exist for each module that has event handlers? |
53
+ | no_direct_mutation | Does the resolver avoid directly mutating module-owned tables? |
54
+
55
+ ### How to Check
56
+
57
+ 1. For each resolver doc, find the corresponding code file by name
58
+ 2. Verify the code imports and calls the documented module command
59
+ 3. Check that `context.input.*` accesses match documented inputs
60
+ 4. Check that error `switch` cases cover all documented error codes
61
+ 5. Verify return value structure matches documentation
62
+ 6. Check executors re-export module event handlers without custom logic
63
+
64
+ ## Common Gap Patterns
65
+
66
+ - **Missing resolver file**: Doc exists but no code file
67
+ - **Wrong command**: Code calls a different module command than documented
68
+ - **Missing input handling**: Doc specifies an input parameter not accessed in code
69
+ - **Missing error cases**: Error scenario in doc not handled in code's switch
70
+ - **Direct table mutation**: Code uses `db.insertInto()` on module-owned tables instead of module commands
71
+
72
+ ## Output Format
73
+
74
+ Return a JSON object:
75
+
76
+ ```json
77
+ {
78
+ "check_type": "resolver-doc-code-parity",
79
+ "app": "{{APP_NAME}}",
80
+ "gaps": [...],
81
+ "inconsistencies": [...],
82
+ "summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
83
+ }
84
+ ```
85
+
86
+ See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
@@ -0,0 +1,86 @@
1
+ # Screen Doc → Frontend Code Parity Check
2
+
3
+ ## Context
4
+
5
+ App: {{APP_NAME}}
6
+ Screen docs: {{SCREEN_DOCS}}
7
+ Frontend pages: {{FRONTEND_PAGES}}
8
+
9
+ ## Instructions
10
+
11
+ 1. Read ALL screen docs at the paths above
12
+ 2. Read ALL frontend page/component files at the paths above
13
+ 3. For each screen doc, check if a corresponding page implementation exists
14
+ 4. Return results as JSON per the Output Format section
15
+
16
+ ## Extraction: Screen Docs
17
+
18
+ From each screen doc, extract:
19
+
20
+ - Screen name (from filename or heading)
21
+ - Screen type: ListView, Form (create/edit), or DetailView
22
+ - Fields/columns specified
23
+ - Actions specified (create, edit, delete, activate, etc.)
24
+ - Navigation targets
25
+
26
+ ## Extraction: Frontend Code
27
+
28
+ From frontend pages, identify:
29
+
30
+ - Page files (`page.tsx`) and their routes
31
+ - Component files (tables, forms, details, actions)
32
+ - GraphQL fragments and queries used
33
+ - Form fields and validation schemas (Zod)
34
+ - Table columns defined
35
+ - Action buttons and navigation
36
+
37
+ ### Screen Type → File Pattern
38
+
39
+ | Screen Type | Expected Files |
40
+ | ------------- | -------------------------------------------------------------------- |
41
+ | ListView | `page.tsx` + `components/<entity>-table.tsx` |
42
+ | Form (create) | `create/page.tsx` + `create/components/create-<entity>-form.tsx` |
43
+ | Form (edit) | `[id]/edit/page.tsx` + `[id]/edit/components/edit-<entity>-form.tsx` |
44
+ | DetailView | `[id]/page.tsx` + `[id]/components/<entity>-detail.tsx` |
45
+
46
+ ## Parity Checks
47
+
48
+ | Check ID | Question |
49
+ | ----------------- | ------------------------------------------------------------- |
50
+ | page_exists | Does a page file exist for each screen doc? |
51
+ | component_exists | Do the expected components exist for the screen type? |
52
+ | field_coverage | Does the page/component render all documented fields/columns? |
53
+ | action_coverage | Does the page implement all documented actions? |
54
+ | screen_type_match | Does the implementation match the documented screen type? |
55
+
56
+ ### How to Check
57
+
58
+ 1. For each screen doc, map the screen name to an expected route path
59
+ 2. Check if the expected `page.tsx` and component files exist
60
+ 3. Read component code and verify documented fields appear (in table columns, form fields, or detail fields)
61
+ 4. Verify documented actions appear as buttons, links, or mutations
62
+ 5. Confirm the implementation pattern matches the screen type (table for ListView, form for Form, etc.)
63
+
64
+ ## Common Gap Patterns
65
+
66
+ - **Missing page**: Screen doc exists but no page file
67
+ - **Missing component**: Page exists but table/form/detail component missing
68
+ - **Missing fields**: Doc specifies columns/fields not rendered in code
69
+ - **Missing actions**: Doc specifies actions not implemented
70
+ - **Type mismatch**: Doc says ListView but implementation is a DetailView
71
+
72
+ ## Output Format
73
+
74
+ Return a JSON object:
75
+
76
+ ```json
77
+ {
78
+ "check_type": "screen-doc-code-parity",
79
+ "app": "{{APP_NAME}}",
80
+ "gaps": [...],
81
+ "inconsistencies": [...],
82
+ "summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
83
+ }
84
+ ```
85
+
86
+ See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.