@open-mercato/cli 0.6.7 → 0.6.8-develop.6875.1.871a4afc94

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 (278) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/build.mjs +24 -7
  3. package/dist/agentic/claude-code/hooks/entity-migration-check.ts +32 -88
  4. package/dist/agentic/codex/enforcement-rules.md +2 -16
  5. package/dist/agentic/cursor/hooks/entity-migration-check.mjs +19 -50
  6. package/dist/agentic/cursor/rules/entity-guard.mdc +9 -21
  7. package/dist/agentic/cursor/rules/generated-guard.mdc +3 -5
  8. package/dist/agentic/cursor/rules/open-mercato.mdc +3 -29
  9. package/dist/agentic/guides/ai-workflows.md +76 -0
  10. package/dist/agentic/guides/architecture.md +107 -0
  11. package/dist/agentic/guides/backend-ui.md +80 -0
  12. package/dist/agentic/guides/contracts.md +92 -0
  13. package/dist/agentic/guides/extensions.md +121 -0
  14. package/dist/agentic/guides/framework-extension-points.md +36 -0
  15. package/dist/agentic/guides/integrations.md +81 -0
  16. package/dist/agentic/guides/module-facts.json +115537 -3951
  17. package/dist/agentic/guides/module-system.md +12 -127
  18. package/dist/agentic/guides/modules/ai_assistant.md +227 -28
  19. package/dist/agentic/guides/modules/api_docs.md +58 -2
  20. package/dist/agentic/guides/modules/api_keys.md +92 -7
  21. package/dist/agentic/guides/modules/attachments.md +119 -14
  22. package/dist/agentic/guides/modules/audit_logs.md +131 -10
  23. package/dist/agentic/guides/modules/auth.md +276 -33
  24. package/dist/agentic/guides/modules/business_rules.md +149 -14
  25. package/dist/agentic/guides/modules/catalog.md +475 -43
  26. package/dist/agentic/guides/modules/channel_gmail.md +82 -3
  27. package/dist/agentic/guides/modules/channel_imap.md +82 -3
  28. package/dist/agentic/guides/modules/checkout.md +299 -27
  29. package/dist/agentic/guides/modules/communication_channels.md +315 -33
  30. package/dist/agentic/guides/modules/configs.md +104 -8
  31. package/dist/agentic/guides/modules/content.md +57 -2
  32. package/dist/agentic/guides/modules/currencies.md +152 -17
  33. package/dist/agentic/guides/modules/customer_accounts.md +387 -45
  34. package/dist/agentic/guides/modules/customers.md +746 -85
  35. package/dist/agentic/guides/modules/dashboards.md +155 -10
  36. package/dist/agentic/guides/modules/data_sync.md +149 -16
  37. package/dist/agentic/guides/modules/design_system.md +102 -0
  38. package/dist/agentic/guides/modules/dictionaries.md +107 -12
  39. package/dist/agentic/guides/modules/directory.md +148 -15
  40. package/dist/agentic/guides/modules/entities.md +145 -13
  41. package/dist/agentic/guides/modules/events.md +59 -2
  42. package/dist/agentic/guides/modules/feature_toggles.md +119 -9
  43. package/dist/agentic/guides/modules/gateway_stripe.md +92 -4
  44. package/dist/agentic/guides/modules/generators.md +45 -2
  45. package/dist/agentic/guides/modules/inbox_ops.md +207 -27
  46. package/dist/agentic/guides/modules/integrations.md +146 -16
  47. package/dist/agentic/guides/modules/messages.md +223 -24
  48. package/dist/agentic/guides/modules/notifications.md +96 -8
  49. package/dist/agentic/guides/modules/onboarding.md +77 -6
  50. package/dist/agentic/guides/modules/payment_gateways.md +164 -21
  51. package/dist/agentic/guides/modules/perspectives.md +77 -7
  52. package/dist/agentic/guides/modules/planner.md +136 -18
  53. package/dist/agentic/guides/modules/portal.md +93 -2
  54. package/dist/agentic/guides/modules/progress.md +104 -14
  55. package/dist/agentic/guides/modules/query_index.md +154 -15
  56. package/dist/agentic/guides/modules/record_locks.md +206 -21
  57. package/dist/agentic/guides/modules/resources.md +197 -30
  58. package/dist/agentic/guides/modules/sales.md +678 -84
  59. package/dist/agentic/guides/modules/scheduler.md +133 -14
  60. package/dist/agentic/guides/modules/search.md +170 -6
  61. package/dist/agentic/guides/modules/security.md +294 -35
  62. package/dist/agentic/guides/modules/shipping_carriers.md +134 -18
  63. package/dist/agentic/guides/modules/sso.md +151 -26
  64. package/dist/agentic/guides/modules/staff.md +369 -57
  65. package/dist/agentic/guides/modules/storage_s3.md +95 -5
  66. package/dist/agentic/guides/modules/sync_akeneo.md +85 -3
  67. package/dist/agentic/guides/modules/sync_excel.md +75 -6
  68. package/dist/agentic/guides/modules/system_status_overlays.md +60 -2
  69. package/dist/agentic/guides/modules/translations.md +104 -10
  70. package/dist/agentic/guides/modules/webhooks.md +203 -24
  71. package/dist/agentic/guides/modules/wms.md +441 -46
  72. package/dist/agentic/guides/modules/workflows.md +302 -43
  73. package/dist/agentic/guides/spec-delivery.md +22 -0
  74. package/dist/agentic/guides/testing-debugging.md +80 -0
  75. package/dist/agentic/guides/upstream/AGENTS.md +299 -0
  76. package/dist/agentic/guides/upstream/BACKWARD_COMPATIBILITY.md +316 -0
  77. package/dist/agentic/guides/upstream/manifest.json +8 -0
  78. package/dist/agentic/shared/AGENTS.md.template +124 -311
  79. package/dist/agentic/shared/ai/agentic.config.json +2 -0
  80. package/dist/agentic/shared/ai/harness/README.md +50 -0
  81. package/dist/agentic/shared/ai/harness/RELEASE.md +57 -0
  82. package/dist/agentic/shared/ai/harness/cases.json +13680 -0
  83. package/dist/agentic/shared/ai/harness/cases.schema.json +133 -0
  84. package/dist/agentic/shared/ai/harness/fixtures/index.json +49 -0
  85. package/dist/agentic/shared/ai/harness/fixtures/seeds.json +162 -0
  86. package/dist/agentic/shared/ai/harness/generated-code-review-policy.md +21 -0
  87. package/dist/agentic/shared/ai/harness/generated-code-review-response.schema.json +96 -0
  88. package/dist/agentic/shared/ai/harness/generated-code-review-result.schema.json +172 -0
  89. package/dist/agentic/shared/ai/harness/release-matrix.json +158 -0
  90. package/dist/agentic/shared/ai/harness/release-result.schema.json +219 -0
  91. package/dist/agentic/shared/ai/harness/result.schema.json +76 -0
  92. package/dist/agentic/shared/ai/harness/routing-response.schema.json +12 -0
  93. package/dist/agentic/shared/ai/harness/target-validation-result.schema.json +73 -0
  94. package/dist/agentic/shared/ai/harness/validators.json +78 -0
  95. package/dist/agentic/shared/ai/harness/writable-ast-oracles.mjs +2121 -0
  96. package/dist/agentic/shared/ai/harness/writable-behavior-oracles.mjs +1096 -0
  97. package/dist/agentic/shared/ai/lessons/_template.md +16 -0
  98. package/dist/agentic/shared/ai/lessons.md +26 -3
  99. package/dist/agentic/shared/ai/review-checklist.md +36 -0
  100. package/dist/agentic/shared/ai/skills/om-auto-implement-spec/SKILL.md +21 -0
  101. package/dist/agentic/shared/ai/skills/om-auto-review-pr/SKILL.md +4 -0
  102. package/dist/agentic/shared/ai/skills/om-auto-upgrade-0.6.6-to-0.6.7/SKILL.md +98 -0
  103. package/dist/agentic/shared/ai/skills/om-backend-ui-design/SKILL.md +20 -241
  104. package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/crud-surfaces.md +16 -0
  105. package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/frontend-and-design-system.md +53 -0
  106. package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/page-and-navigation.md +13 -0
  107. package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/quality-states.md +11 -0
  108. package/dist/agentic/shared/ai/skills/om-build-workflow/SKILL.md +30 -0
  109. package/dist/agentic/shared/ai/skills/om-build-workflow/references/activity-contracts.md +12 -0
  110. package/dist/agentic/shared/ai/skills/om-build-workflow/references/durability-and-progress.md +13 -0
  111. package/dist/agentic/shared/ai/skills/om-build-workflow/references/workflow-design.md +14 -0
  112. package/dist/agentic/shared/ai/skills/om-create-ai-agent/SKILL.md +28 -0
  113. package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/attachments-and-overrides.md +12 -0
  114. package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/module-agents-and-tools.md +22 -0
  115. package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/orchestrator-agents.md +12 -0
  116. package/dist/agentic/shared/ai/skills/om-create-ai-agent/references/surface-selector.md +19 -0
  117. package/dist/agentic/shared/ai/skills/om-data-model-design/SKILL.md +16 -601
  118. package/dist/agentic/shared/ai/skills/om-data-model-design/references/integrity-and-concurrency.md +19 -0
  119. package/dist/agentic/shared/ai/skills/om-data-model-design/references/migration-workflow.md +13 -0
  120. package/dist/agentic/shared/ai/skills/om-data-model-design/references/schema-design.md +14 -0
  121. package/dist/agentic/shared/ai/skills/om-data-model-design/references/sensitive-data.md +10 -0
  122. package/dist/agentic/shared/ai/skills/om-eject-and-customize/SKILL.md +14 -310
  123. package/dist/agentic/shared/ai/skills/om-eject-and-customize/references/decision-and-procedure.md +17 -0
  124. package/dist/agentic/shared/ai/skills/om-evolve-harness/SKILL.md +29 -0
  125. package/dist/agentic/shared/ai/skills/om-evolve-harness/references/case-template.md +100 -0
  126. package/dist/agentic/shared/ai/skills/om-evolve-harness/references/case-workflow.md +16 -0
  127. package/dist/agentic/shared/ai/skills/om-evolve-harness/references/owner-selection.md +17 -0
  128. package/dist/agentic/shared/ai/skills/om-framework-context/SKILL.md +25 -0
  129. package/dist/agentic/shared/ai/skills/om-framework-context/references/resolver-procedure.md +11 -0
  130. package/dist/agentic/shared/ai/skills/om-framework-context/references/skew-and-escalation.md +13 -0
  131. package/dist/agentic/shared/ai/skills/om-help/SKILL.md +15 -97
  132. package/dist/agentic/shared/ai/skills/om-help/references/delivery-workflows.md +18 -0
  133. package/dist/agentic/shared/ai/skills/om-help/references/task-families.md +20 -0
  134. package/dist/agentic/shared/ai/skills/om-implement-spec/SKILL.md +33 -152
  135. package/dist/agentic/shared/ai/skills/om-implement-spec/references/phases-and-gates.md +33 -0
  136. package/dist/agentic/shared/ai/skills/om-implement-spec/references/planning-and-progress.md +40 -0
  137. package/dist/agentic/shared/ai/skills/om-implement-spec/references/report-templates.md +27 -0
  138. package/dist/agentic/shared/ai/skills/om-implement-spec/references/spec-resolution.md +24 -0
  139. package/dist/agentic/shared/ai/skills/om-integration-builder/SKILL.md +24 -708
  140. package/dist/agentic/shared/ai/skills/om-integration-builder/references/package-and-activation.md +16 -0
  141. package/dist/agentic/shared/ai/skills/om-integration-builder/references/provider-families.md +14 -0
  142. package/dist/agentic/shared/ai/skills/om-integration-builder/references/security-and-reliability.md +15 -0
  143. package/dist/agentic/shared/ai/skills/om-integration-builder/references/sync-and-files.md +12 -0
  144. package/dist/agentic/shared/ai/skills/om-judge-agent-session/SKILL.md +34 -0
  145. package/dist/agentic/shared/ai/skills/om-judge-agent-session/agents/openai.yaml +4 -0
  146. package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/agentic-setup.md +11 -0
  147. package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/input-normalization.md +31 -0
  148. package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/judge-workflow.md +39 -0
  149. package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/report-template.md +43 -0
  150. package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/rules.md +11 -0
  151. package/dist/agentic/shared/ai/skills/om-module-scaffold/SKILL.md +20 -820
  152. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/api-and-domain.md +19 -0
  153. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/business-one-shot-blueprints.md +172 -0
  154. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/data-and-migrations.md +12 -0
  155. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/discovery-surface-catalog.md +83 -0
  156. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/module-surfaces.md +21 -0
  157. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/planning.md +11 -0
  158. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/runtime-cache-and-queues.md +22 -0
  159. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/verification.md +13 -0
  160. package/dist/agentic/shared/ai/skills/om-share-this-session/SKILL.md +41 -0
  161. package/dist/agentic/shared/ai/skills/om-share-this-session/references/agentic-setup.md +19 -0
  162. package/dist/agentic/shared/ai/skills/om-share-this-session/references/bundle-preparation.md +44 -0
  163. package/dist/agentic/shared/ai/skills/om-share-this-session/references/consent-and-review.md +39 -0
  164. package/dist/agentic/shared/ai/skills/om-share-this-session/references/publication.md +20 -0
  165. package/dist/agentic/shared/ai/skills/om-share-this-session/references/report-templates.md +57 -0
  166. package/dist/agentic/shared/ai/skills/om-share-this-session/references/rules.md +11 -0
  167. package/dist/agentic/shared/ai/skills/om-share-this-session/scripts/prepare-share-bundle.mjs +486 -0
  168. package/dist/agentic/shared/ai/skills/om-system-extension/SKILL.md +19 -843
  169. package/dist/agentic/shared/ai/skills/om-system-extension/references/extension-branches.md +18 -0
  170. package/dist/agentic/shared/ai/skills/om-system-extension/references/mechanism-selector.md +27 -0
  171. package/dist/agentic/shared/ai/skills/om-system-extension/references/read-write-roundtrip.md +13 -0
  172. package/dist/agentic/shared/ai/skills/om-system-extension/references/unified-overrides.md +41 -0
  173. package/dist/agentic/shared/ai/skills/om-system-extension/references/verification.md +11 -0
  174. package/dist/agentic/shared/ai/skills/om-trim-unused-modules/SKILL.md +15 -63
  175. package/dist/agentic/shared/ai/skills/om-trim-unused-modules/references/dependency-and-redirect.md +15 -0
  176. package/dist/agentic/shared/ai/skills/om-troubleshooter/SKILL.md +16 -467
  177. package/dist/agentic/shared/ai/skills/om-troubleshooter/references/diagnosis-map.md +16 -0
  178. package/dist/agentic/shared/ai/skills/om-troubleshooter/references/regression-oracles.md +14 -0
  179. package/dist/agentic/shared/ai/skills/tiers.json +143 -21
  180. package/dist/agentic/shared/ai/skills/tiers.schema.json +52 -40
  181. package/dist/agentic/shared/ai/specs/README.md +4 -3
  182. package/dist/agentic/shared/ai/specs/SPEC-000-template.md +226 -10
  183. package/dist/agentic/shared/ai/trackers/github.md +108 -4
  184. package/dist/agentic/shared/scripts/agent-harness-tool-server.mjs +187 -0
  185. package/dist/agentic/shared/scripts/check-lessons.mjs +178 -0
  186. package/dist/agentic/shared/scripts/evaluate-agent-harness.mjs +2958 -0
  187. package/dist/agentic/shared/scripts/execution-sandbox.mjs +329 -0
  188. package/dist/agentic/shared/scripts/framework-context.mjs +888 -0
  189. package/dist/agentic/shared/scripts/install-skills.mjs +1029 -0
  190. package/dist/agentic/shared/scripts/install-skills.sh +4 -694
  191. package/dist/agentic/shared/scripts/prepare-agent-harness-fixture.mjs +222 -0
  192. package/dist/agentic/shared/scripts/run-agent-harness-release.mjs +1774 -0
  193. package/dist/bin.js +13 -1
  194. package/dist/bin.js.map +2 -2
  195. package/dist/lib/__integration__/TC-INT-008.spec.js +88 -8
  196. package/dist/lib/__integration__/TC-INT-008.spec.js.map +2 -2
  197. package/dist/lib/agentic-init.js +13 -3
  198. package/dist/lib/agentic-init.js.map +2 -2
  199. package/dist/lib/agentic-setup.js +434 -186
  200. package/dist/lib/agentic-setup.js.map +2 -2
  201. package/dist/lib/generators/extensions/injection-widgets.js +20 -0
  202. package/dist/lib/generators/extensions/injection-widgets.js.map +2 -2
  203. package/dist/lib/generators/module-extension-facts.js +1840 -0
  204. package/dist/lib/generators/module-extension-facts.js.map +7 -0
  205. package/dist/lib/generators/module-fact-sources.js +70 -0
  206. package/dist/lib/generators/module-fact-sources.js.map +7 -0
  207. package/dist/lib/generators/module-facts-discovery.js +41 -7
  208. package/dist/lib/generators/module-facts-discovery.js.map +2 -2
  209. package/dist/lib/generators/module-facts.js +1387 -45
  210. package/dist/lib/generators/module-facts.js.map +3 -3
  211. package/dist/lib/generators/module-override-targets.js +688 -0
  212. package/dist/lib/generators/module-override-targets.js.map +7 -0
  213. package/dist/lib/generators/module-registry.js +11 -5
  214. package/dist/lib/generators/module-registry.js.map +2 -2
  215. package/dist/lib/load-env.js +24 -0
  216. package/dist/lib/load-env.js.map +7 -0
  217. package/dist/lib/resolver.js +2 -0
  218. package/dist/lib/resolver.js.map +2 -2
  219. package/dist/lib/telemetry-init.js +358 -0
  220. package/dist/lib/telemetry-init.js.map +7 -0
  221. package/dist/lib/testing/integration.js +5 -0
  222. package/dist/lib/testing/integration.js.map +2 -2
  223. package/dist/mercato.js +23 -1
  224. package/dist/mercato.js.map +2 -2
  225. package/package.json +13 -11
  226. package/src/bin.ts +33 -1
  227. package/src/lib/__integration__/TC-INT-008.spec.ts +107 -9
  228. package/src/lib/__tests__/agentic-init.test.ts +41 -5
  229. package/src/lib/__tests__/agentic-setup.ownership.test.ts +386 -0
  230. package/src/lib/__tests__/injection-widget-id-validation.test.ts +184 -0
  231. package/src/lib/__tests__/load-env.test.ts +65 -0
  232. package/src/lib/__tests__/telemetry-init.test.ts +298 -0
  233. package/src/lib/agentic-init.ts +15 -3
  234. package/src/lib/agentic-setup.ts +573 -222
  235. package/src/lib/generators/__tests__/activation-adapter-coverage.test.ts +92 -0
  236. package/src/lib/generators/__tests__/module-extension-activations.test.ts +762 -0
  237. package/src/lib/generators/__tests__/module-extension-facts.test.ts +404 -0
  238. package/src/lib/generators/__tests__/module-facts.bc-guard.test.ts +88 -2
  239. package/src/lib/generators/__tests__/module-facts.customers.fixture.test.ts +1 -0
  240. package/src/lib/generators/__tests__/module-facts.discovery.test.ts +54 -10
  241. package/src/lib/generators/__tests__/module-facts.extension-hosts.test.ts +108 -0
  242. package/src/lib/generators/__tests__/module-facts.owned-contracts.test.ts +561 -0
  243. package/src/lib/generators/__tests__/module-facts.source-links.test.ts +119 -0
  244. package/src/lib/generators/__tests__/module-override-targets.roundtrip.test.ts +149 -0
  245. package/src/lib/generators/__tests__/module-override-targets.test.ts +304 -0
  246. package/src/lib/generators/__tests__/module-subset.test.ts +18 -0
  247. package/src/lib/generators/extensions/injection-widgets.ts +51 -0
  248. package/src/lib/generators/module-extension-facts.ts +2365 -0
  249. package/src/lib/generators/module-fact-sources.ts +108 -0
  250. package/src/lib/generators/module-facts-discovery.ts +58 -7
  251. package/src/lib/generators/module-facts.ts +1851 -46
  252. package/src/lib/generators/module-override-targets.ts +863 -0
  253. package/src/lib/generators/module-registry.ts +16 -6
  254. package/src/lib/load-env.ts +30 -0
  255. package/src/lib/resolver.ts +3 -0
  256. package/src/lib/telemetry-init.ts +461 -0
  257. package/src/lib/testing/__tests__/integration.test.ts +4 -0
  258. package/src/lib/testing/integration.ts +5 -0
  259. package/src/mercato.ts +26 -1
  260. package/dist/agentic/guides/cache.md +0 -45
  261. package/dist/agentic/guides/core.md +0 -453
  262. package/dist/agentic/guides/events.md +0 -117
  263. package/dist/agentic/guides/queue.md +0 -53
  264. package/dist/agentic/guides/search.md +0 -115
  265. package/dist/agentic/guides/shared.md +0 -108
  266. package/dist/agentic/guides/ui.md +0 -347
  267. package/dist/agentic/shared/ai/skills/om-auto-continue-pr-loop/SKILL.md +0 -27
  268. package/dist/agentic/shared/ai/skills/om-auto-create-pr-loop/SKILL.md +0 -27
  269. package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/ui-components.md +0 -260
  270. package/dist/agentic/shared/ai/skills/om-data-model-design/references/mikro-orm-cheatsheet.md +0 -146
  271. package/dist/agentic/shared/ai/skills/om-help/references/skills-catalog.md +0 -84
  272. package/dist/agentic/shared/ai/skills/om-help/references/workflow-sequences.md +0 -193
  273. package/dist/agentic/shared/ai/skills/om-integration-builder/STANDALONE.md +0 -34
  274. package/dist/agentic/shared/ai/skills/om-integration-builder/references/adapter-contracts.md +0 -762
  275. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/naming-conventions.md +0 -50
  276. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/navigation-patterns.md +0 -97
  277. package/dist/agentic/shared/ai/skills/om-system-extension/references/extension-contracts.md +0 -271
  278. package/dist/agentic/shared/ai/skills/om-troubleshooter/references/diagnostic-commands.md +0 -101
@@ -1,50 +0,0 @@
1
- # Naming Conventions Quick Reference
2
-
3
- > **Source of truth:** `AGENTS.md` (Naming Conventions / Conventions, Architecture Rules, Multi-tenant scoping) owns these rules. This file is an example-oriented cheat sheet for scaffolding — when it disagrees with `AGENTS.md`, `AGENTS.md` wins.
4
-
5
- ## Module & Files
6
-
7
- | Element | Convention | Example |
8
- |---------|-----------|---------|
9
- | Module ID | plural, snake_case | `fleet_vehicles`, `loyalty_points` |
10
- | Module folder | same as module ID | `src/modules/fleet_vehicles/` |
11
- | Entity class | PascalCase, singular | `FleetVehicle`, `LoyaltyPoint` |
12
- | Entity file | single `data/entities.ts` (one class per entity) | `data/entities.ts` → `class FleetVehicle` |
13
- | Table name | plural, snake_case | `fleet_vehicles`, `loyalty_points` |
14
- | Column name | snake_case | `vehicle_type`, `point_balance` |
15
-
16
- ## Identifiers
17
-
18
- | Element | Convention | Example |
19
- |---------|-----------|---------|
20
- | JS/TS fields | camelCase | `vehicleType`, `pointBalance` |
21
- | Event ID | `module.entity.action` (dots, singular entity, past tense) | `fleet_vehicles.vehicle.created` |
22
- | Feature ID | `module.entity.action` (per-entity; use `view` / `manage`) | `fleet_vehicles.vehicle.view`, `fleet_vehicles.vehicle.manage` |
23
- | Enricher ID | `module.enricher-name` | `fleet_vehicles.maintenance-stats` |
24
- | Widget ID | `module.injection.widget-name` | `fleet_vehicles.injection.status-column` |
25
- | Interceptor ID | `module.interceptor-name` | `fleet_vehicles.validate-vin` |
26
- | Guard ID | `module.guard-name` | `fleet_vehicles.mileage-limit` |
27
-
28
- ## Standard Entity Columns
29
-
30
- Every tenant-scoped entity MUST carry the standard columns (`id`, `organization_id`, `tenant_id`, `is_active`, `created_at`, `updated_at`, `deleted_at`) with `organization_id`/`tenant_id` indexed. See `AGENTS.md` → Conventions / Multi-tenant scoping for the authoritative list and types.
31
-
32
- ## API Routes
33
-
34
- All HTTP methods live in a **single** `api/<entities>/route.ts` that exports named handlers `{ GET, POST, PUT, DELETE }` + `metadata` + `openApi` (not separate `api/get/`, `api/post/` files).
35
-
36
- | File Path | Methods | URL |
37
- |-----------|---------|-----|
38
- | `api/<entities>/route.ts` | `GET` / `POST` / `PUT` / `DELETE` | `/api/<module>/<entities>` |
39
-
40
- ## Backend Pages
41
-
42
- | File Path | URL |
43
- |----------|-----|
44
- | `backend/page.tsx` | `/backend/<module>` |
45
- | `backend/<entities>/new.tsx` | `/backend/<module>/<entities>/new` |
46
- | `backend/<entities>/[id].tsx` | `/backend/<module>/<entities>/<id>` |
47
-
48
- ## Cross-Module References
49
-
50
- Store cross-module links as `uuid` FK fields (`customer_id`, `order_id`) and fetch related data via separate API calls or enrichers — never `@ManyToOne` / `@OneToMany` decorators across modules. See `AGENTS.md` → Architecture Rules for the authoritative rule.
@@ -1,97 +0,0 @@
1
- # Navigation & Sidebar Patterns
2
-
3
- ## page.meta.ts — Field Reference
4
-
5
- Every backend page needs a `page.meta.ts` file alongside its `page.tsx`. The metadata controls sidebar placement, access control, and display.
6
-
7
- | Field | Type | Default | Purpose |
8
- |-------|------|---------|---------|
9
- | `pageTitle` | string | — | Display title in sidebar and breadcrumb |
10
- | `pageTitleKey` | string | — | i18n key for title (preferred over `pageTitle`) |
11
- | `pageGroup` | string | — | **Sidebar section name** — items with same group appear together |
12
- | `pageGroupKey` | string | — | **i18n key for group** — used as the group identifier for matching |
13
- | `pageOrder` | number | 10000 | Sort position within group (lower = higher in sidebar) |
14
- | `icon` | ReactNode | — | Sidebar icon — MUST use `lucide-react` components |
15
- | `requireAuth` | boolean | false | Require authenticated user |
16
- | `requireFeatures` | string[] | — | Required ACL feature IDs (from `acl.ts`) |
17
- | `navHidden` | boolean | false | Hide from sidebar (page still accessible by URL) |
18
- | `pageContext` | `'main'` \| `'settings'` \| `'profile'` | `'main'` | Which navigation tier this page belongs to |
19
- | `breadcrumb` | `{ label, labelKey?, href? }[]` | — | Breadcrumb trail above page title |
20
-
21
- ## Sidebar Group Configuration
22
-
23
- Items are grouped by `pageGroupKey` (falls back to `pageGroup` if no key). **All related pages in a module MUST share the same `pageGroupKey`** to appear in the same sidebar section.
24
-
25
- ```typescript
26
- // page.meta.ts — List page (appears in sidebar)
27
- import { ShoppingCart } from 'lucide-react'
28
-
29
- export const metadata = {
30
- requireAuth: true,
31
- requireFeatures: ['order_items.view'],
32
- pageTitle: 'Order Items',
33
- pageTitleKey: 'order_items.nav.title',
34
- pageGroup: 'Orders', // Display name for the sidebar section
35
- pageGroupKey: 'order_items.nav.group', // Matching key — all module pages use this
36
- pageOrder: 100, // Position in the group
37
- icon: <ShoppingCart className="size-4" />,
38
- breadcrumb: [{ label: 'Order Items', labelKey: 'order_items.nav.title' }],
39
- }
40
- ```
41
-
42
- **Group sorting**: Core module groups (Customers, Catalog, Sales) appear first in a hardcoded order. Custom module groups appear after, sorted by their lowest `pageOrder` value.
43
-
44
- ## Settings Pages
45
-
46
- Settings pages appear in the Settings hub, not the main sidebar. They require two fields:
47
-
48
- ```typescript
49
- // backend/config/page.meta.ts
50
- import { Settings } from 'lucide-react'
51
-
52
- export const metadata = {
53
- requireAuth: true,
54
- requireFeatures: ['order_items.settings.manage'],
55
- pageTitle: 'Order Items Settings',
56
- pageTitleKey: 'order_items.config.title',
57
- pageGroup: 'Module Configs',
58
- pageGroupKey: 'settings.sections.moduleConfigs',
59
- pageOrder: 10,
60
- icon: <Settings className="size-4" />,
61
- pageContext: 'settings' as const, // ← Places in Settings hub
62
- navHidden: true, // ← MUST set — prevents duplicate in main sidebar
63
- }
64
- ```
65
-
66
- **Standard settings section keys**: `settings.sections.system`, `settings.sections.auth`, `settings.sections.moduleConfigs`, `settings.sections.directory`.
67
-
68
- ## Sub-Pages (Create / Edit / Detail)
69
-
70
- - **`[id]` pages**: Auto-excluded from sidebar (framework skips dynamic segments). Still need `pageGroupKey` for breadcrumb context.
71
- - **Create pages** (`new.tsx`): Set `navHidden: true` since they're accessed via the list page's create button.
72
-
73
- ```typescript
74
- // backend/<entities>/new.meta.ts
75
- export const metadata = {
76
- requireAuth: true,
77
- requireFeatures: ['order_items.create'],
78
- pageTitle: 'Create Order Item',
79
- pageTitleKey: 'order_items.create.title',
80
- pageGroup: 'Orders',
81
- pageGroupKey: 'order_items.nav.group', // ← Same key as list page
82
- navHidden: true, // ← Not shown in sidebar
83
- }
84
- ```
85
-
86
- ## Anti-Patterns
87
-
88
- | Mistake | Symptom | Fix |
89
- |---------|---------|-----|
90
- | Missing `pageGroup` + `pageGroupKey` | Item creates orphan group or lands in "Uncategorized" | Add both fields matching your module's group |
91
- | Mismatched `pageGroupKey` across pages | Items from same module split into separate sidebar sections | Use identical `pageGroupKey` on all module pages |
92
- | Missing `icon` | Blank space in sidebar next to title | Add `lucide-react` icon component |
93
- | Inline SVG via `React.createElement` | Broken/wrong icon after `yarn generate` | Use `import { X } from 'lucide-react'` |
94
- | `pageContext: 'settings'` without `navHidden: true` | Page appears in both main sidebar AND settings hub | Always pair both fields |
95
- | Missing `as const` on `pageContext` | TypeScript error — type widened to `string` | Use `pageContext: 'settings' as const` |
96
- | Missing `pageOrder` | Unpredictable sort position (defaults to 10000) | Set explicit order value |
97
- | Missing `requireFeatures` | Page visible to users without permission | Add feature IDs from `acl.ts` |
@@ -1,271 +0,0 @@
1
- # UMES Extension Contracts — Type Reference
2
-
3
- Complete TypeScript type definitions for all extension mechanisms.
4
-
5
- ## ResponseEnricher
6
-
7
- ```typescript
8
- interface ResponseEnricher<TRecord = any, TEnriched = any> {
9
- id: string
10
- targetEntity: string
11
- features?: string[]
12
- priority?: number // Higher = runs first. Default: 0
13
- timeout?: number // Max ms before skip. Default: 2000
14
- fallback?: Record<string, unknown>
15
- critical?: boolean // Propagate errors? Default: false
16
- disabledTenantIds?: string[]
17
- cache?: {
18
- strategy: 'read-through'
19
- ttl: number
20
- tags?: string[]
21
- invalidateOn?: string[]
22
- }
23
- queryEngine?: {
24
- enabled: boolean
25
- engines?: Array<'basic' | 'hybrid'>
26
- applyOn?: Array<'list' | 'detail'>
27
- }
28
-
29
- enrichOne(record: TRecord, context: EnricherContext): Promise<TRecord & TEnriched>
30
- enrichMany?(records: TRecord[], context: EnricherContext): Promise<(TRecord & TEnriched)[]>
31
- }
32
-
33
- interface EnricherContext {
34
- organizationId: string
35
- tenantId: string
36
- userId: string
37
- em: EntityManager
38
- container: AwilixContainer
39
- requestedFields?: string[]
40
- userFeatures?: string[]
41
- }
42
- ```
43
-
44
- ## ApiInterceptor
45
-
46
- ```typescript
47
- type ApiInterceptorMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'
48
-
49
- type InterceptorRequest = {
50
- method: ApiInterceptorMethod
51
- url: string
52
- body?: Record<string, unknown>
53
- query?: Record<string, unknown>
54
- headers: Record<string, string>
55
- }
56
-
57
- type InterceptorResponse = {
58
- statusCode: number
59
- body: Record<string, unknown>
60
- headers: Record<string, string>
61
- }
62
-
63
- type InterceptorContext = {
64
- userId: string
65
- organizationId: string
66
- tenantId: string
67
- em: EntityManager
68
- container: AwilixContainer
69
- userFeatures?: string[]
70
- metadata?: Record<string, unknown>
71
- }
72
-
73
- type InterceptorBeforeResult = {
74
- ok: boolean
75
- body?: Record<string, unknown>
76
- query?: Record<string, unknown>
77
- headers?: Record<string, string>
78
- message?: string
79
- statusCode?: number
80
- metadata?: Record<string, unknown>
81
- }
82
-
83
- type InterceptorAfterResult = {
84
- merge?: Record<string, unknown>
85
- replace?: Record<string, unknown>
86
- }
87
-
88
- type ApiInterceptor = {
89
- id: string
90
- targetRoute: string
91
- methods: ApiInterceptorMethod[]
92
- priority?: number // Lower = earlier. Default: 50
93
- features?: string[]
94
- timeoutMs?: number // Default: 5000
95
- before?: (request: InterceptorRequest, context: InterceptorContext) => Promise<InterceptorBeforeResult>
96
- after?: (request: InterceptorRequest, response: InterceptorResponse, context: InterceptorContext) => Promise<InterceptorAfterResult>
97
- }
98
- ```
99
-
100
- ## MutationGuard
101
-
102
- ```typescript
103
- interface MutationGuard {
104
- id: string
105
- targetEntity: string | '*'
106
- operations: ('create' | 'update' | 'delete')[]
107
- priority?: number // Lower = earlier. Default: 50
108
- features?: string[]
109
-
110
- validate(input: MutationGuardInput): Promise<MutationGuardResult>
111
- afterSuccess?(input: MutationGuardAfterInput): Promise<void>
112
- }
113
-
114
- interface MutationGuardInput {
115
- tenantId: string
116
- organizationId: string | null
117
- userId: string
118
- resourceKind: string
119
- resourceId: string | null // null for create
120
- operation: 'create' | 'update' | 'delete'
121
- requestMethod: string
122
- requestHeaders: Headers
123
- mutationPayload?: Record<string, unknown> | null
124
- }
125
-
126
- interface MutationGuardResult {
127
- ok: boolean
128
- status?: number // Default: 422
129
- message?: string
130
- body?: Record<string, unknown>
131
- modifiedPayload?: Record<string, unknown>
132
- shouldRunAfterSuccess?: boolean
133
- metadata?: Record<string, unknown>
134
- }
135
-
136
- interface MutationGuardAfterInput {
137
- tenantId: string
138
- organizationId: string | null
139
- userId: string
140
- resourceKind: string
141
- resourceId: string
142
- operation: 'create' | 'update' | 'delete'
143
- requestMethod: string
144
- requestHeaders: Headers
145
- metadata?: Record<string, unknown> | null
146
- }
147
- ```
148
-
149
- ## InjectionPosition
150
-
151
- ```typescript
152
- enum InjectionPosition {
153
- Before = 'before',
154
- After = 'after',
155
- First = 'first',
156
- Last = 'last',
157
- }
158
-
159
- type InjectionPlacement = {
160
- position?: InjectionPosition
161
- relativeTo?: string
162
- }
163
- ```
164
-
165
- ## ComponentOverride
166
-
167
- ```typescript
168
- type ComponentOverride<TProps = unknown> = {
169
- target: { componentId: string }
170
- priority: number
171
- features?: string[]
172
- metadata?: { module?: string }
173
- } & (
174
- | { replacement: LazyExoticComponent<ComponentType<TProps>> | ComponentType<TProps>; propsSchema: ZodType<TProps> }
175
- | { wrapper: (Original: ComponentType<TProps>) => ComponentType<TProps> }
176
- | { propsTransform: (props: TProps) => TProps }
177
- )
178
-
179
- // Handle constructors
180
- ComponentReplacementHandles.page(path) // → 'page:<path>'
181
- ComponentReplacementHandles.dataTable(tableId) // → 'data-table:<tableId>'
182
- ComponentReplacementHandles.crudForm(entityId) // → 'crud-form:<entityId>'
183
- ComponentReplacementHandles.section(scope, id) // → 'section:<scope>.<id>'
184
- ```
185
-
186
- ## Widget Event Handlers
187
-
188
- ```typescript
189
- type WidgetInjectionEventHandlers<TContext = unknown, TData = unknown> = {
190
- filter?: WidgetInjectionEventFilter
191
- onLoad?: (context: TContext) => void | Promise<void>
192
- onBeforeSave?: (data: TData, context: TContext) => WidgetBeforeSaveResult | Promise<WidgetBeforeSaveResult>
193
- onSave?: (data: TData, context: TContext) => void | Promise<void>
194
- onAfterSave?: (data: TData, context: TContext) => void | Promise<void>
195
- onBeforeDelete?: (data: TData, context: TContext) => WidgetBeforeDeleteResult | Promise<WidgetBeforeDeleteResult>
196
- onDelete?: (data: TData, context: TContext) => void | Promise<void>
197
- onAfterDelete?: (data: TData, context: TContext) => void | Promise<void>
198
- onFieldChange?: (fieldId: string, value: unknown, data: TData, context: TContext) => Promise<FieldChangeResult | void>
199
- onBeforeNavigate?: (target: string, context: TContext) => Promise<NavigateGuardResult>
200
- onVisibilityChange?: (visible: boolean, context: TContext) => Promise<void>
201
- onAppEvent?: (event: AppEventPayload, context: TContext) => Promise<void>
202
- transformFormData?: (data: TData, context: TContext) => Promise<TData | { data: TData; applyToForm: true }>
203
- transformDisplayData?: (data: TData, context: TContext) => Promise<TData>
204
- transformValidation?: (errors: Record<string, string>, data: TData, context: TContext) => Promise<Record<string, string>>
205
- }
206
-
207
- type FieldChangeResult = {
208
- value?: unknown
209
- sideEffects?: Record<string, unknown>
210
- message?: { text: string; severity: 'info' | 'warning' | 'error' }
211
- }
212
- ```
213
-
214
- ## Widget Injection Spot IDs
215
-
216
- ### CrudForm Spots
217
-
218
- ```
219
- crud-form:<entityId>:fields
220
- ```
221
-
222
- Examples: `crud-form:customers.person:fields`, `crud-form:catalog.product:fields`
223
-
224
- ### DataTable Spots
225
-
226
- ```
227
- data-table:<tableId>:columns
228
- data-table:<tableId>:row-actions
229
- data-table:<tableId>:bulk-actions
230
- data-table:<tableId>:filters
231
- ```
232
-
233
- Examples: `data-table:customers.people:columns`, `data-table:sales.orders:row-actions`
234
-
235
- ### Menu Spots
236
-
237
- ```
238
- menu:sidebar:main
239
- menu:sidebar:settings
240
- menu:sidebar:profile
241
- menu:topbar:profile-dropdown
242
- menu:topbar:actions
243
- ```
244
-
245
- ### Detail Page Spots
246
-
247
- ```
248
- <module>.<entity>:detail:tabs
249
- <module>.<entity>:detail:sections
250
- ```
251
-
252
- ## Execution Pipeline Order
253
-
254
- ```
255
- Request arrives
256
- ↓
257
- 1. Zod schema validation
258
- 2. API Interceptor before hooks
259
- 3. Sync before-event subscribers (*.creating)
260
- 4. CrudHooks.beforeCreate/Update/Delete (module-local)
261
- 5. Mutation Guard Registry validate
262
- 6. Entity mutation + ORM flush
263
- 7. CrudHooks.afterCreate/Update/Delete
264
- 8. Mutation Guard Registry afterSuccess
265
- 9. Sync after-event subscribers (*.created)
266
- 10. Async event subscribers (persistent, queued)
267
- 11. Response Enrichers (list/detail endpoints only)
268
- 12. API Interceptor after hooks
269
- ↓
270
- Response returned
271
- ```
@@ -1,101 +0,0 @@
1
- # Diagnostic Commands Reference
2
-
3
- ## Health Check Sequence
4
-
5
- Run in this order — each step depends on the previous:
6
-
7
- ```bash
8
- # 1. Are services running?
9
- docker compose ps
10
-
11
- # 2. Is the database reachable?
12
- yarn db:migrate --dry-run # Lists pending migrations without applying
13
-
14
- # 3. Are generated files up to date?
15
- yarn generate
16
-
17
- # 4. Are types correct?
18
- yarn typecheck
19
-
20
- # 5. Do tests pass?
21
- yarn test
22
-
23
- # 6. Does it build?
24
- yarn build
25
- ```
26
-
27
- ## Module Discovery
28
-
29
- ```bash
30
- # Check what modules are registered
31
- grep -n 'from:' src/modules.ts
32
-
33
- # Check what was auto-discovered
34
- ls .mercato/generated/
35
-
36
- # Check a specific module's files
37
- ls -la src/modules/<module_id>/
38
- ```
39
-
40
- ## Database State
41
-
42
- ```bash
43
- # Check pending migrations
44
- yarn db:migrate --dry-run
45
-
46
- # Generate migration for entity changes
47
- yarn db:generate
48
-
49
- # Apply migrations (destructive — confirm first)
50
- yarn db:migrate
51
-
52
- # Full database reset (destructive — deletes all data)
53
- yarn initialize --force
54
- ```
55
-
56
- ## API Testing
57
-
58
- ```bash
59
- # Test an API endpoint (requires auth token)
60
- curl -H "Authorization: Bearer <token>" http://localhost:3000/api/<module>/<entities>
61
-
62
- # Check API docs
63
- # Navigate to: http://localhost:3000/api/docs
64
- ```
65
-
66
- ## Extension Debugging
67
-
68
- ```bash
69
- # Check if enrichers are registered
70
- grep 'enrichers' .mercato/generated/enrichers.generated.ts
71
-
72
- # Check if widgets are registered
73
- grep 'injection' .mercato/generated/injection-widgets.generated.ts
74
-
75
- # Check if interceptors are registered
76
- grep 'interceptors' .mercato/generated/interceptors.generated.ts
77
- ```
78
-
79
- ## Clean Reset
80
-
81
- When everything is broken and you need a fresh start:
82
-
83
- ```bash
84
- # 1. Clean generated files
85
- rm -rf .mercato/generated/
86
-
87
- # 2. Clean node_modules cache
88
- rm -rf node_modules/.cache
89
-
90
- # 3. Reinstall dependencies
91
- yarn install
92
-
93
- # 4. Regenerate everything
94
- yarn generate
95
-
96
- # 5. Check for pending migrations
97
- yarn db:generate
98
-
99
- # 6. Restart dev server
100
- yarn dev
101
- ```