create-mercato-app 0.6.8-develop.6930.1.1e5976efc3 → 0.6.8-develop.6940.1.177ea30c6e

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 (327) hide show
  1. package/README.md +1 -1
  2. package/agentic/guides/backend-ui.md +7 -1
  3. package/agentic/guides/spec-delivery.md +34 -0
  4. package/agentic/guides/testing-debugging.md +2 -1
  5. package/agentic/shared/AGENTS.md.template +10 -14
  6. package/agentic/shared/ai/harness/README.md +4 -4
  7. package/agentic/shared/ai/harness/RELEASE.md +4 -4
  8. package/agentic/shared/ai/harness/cases.json +11350 -5088
  9. package/agentic/shared/ai/harness/cases.schema.json +70 -7
  10. package/agentic/shared/ai/harness/design-system-inventory.json +6697 -0
  11. package/agentic/shared/ai/harness/fixtures/index.json +3 -1
  12. package/agentic/shared/ai/harness/fixtures/seeds.json +4 -0
  13. package/agentic/shared/ai/harness/knowledge-change.schema.json +228 -0
  14. package/agentic/shared/ai/harness/release-matrix.json +9 -4
  15. package/agentic/shared/ai/harness/result.schema.json +60 -0
  16. package/agentic/shared/ai/harness/routing-response.schema.json +10 -0
  17. package/agentic/shared/ai/harness/source-link-inventory.json +3231 -0
  18. package/agentic/shared/ai/harness/validators.json +8 -4
  19. package/agentic/shared/ai/harness/writable-ast-oracles.mjs +5 -2
  20. package/agentic/shared/ai/harness/writable-behavior-oracles.mjs +3 -0
  21. package/agentic/shared/ai/harness/writable-spec-oracles.mjs +879 -0
  22. package/agentic/shared/ai/skills/om-auto-upgrade-0.6.7-to-0.7.0/SKILL.md +102 -0
  23. package/agentic/shared/ai/skills/om-backend-ui-design/SKILL.md +1 -0
  24. package/agentic/shared/ai/skills/om-backend-ui-design/references/crud-surfaces.md +15 -0
  25. package/agentic/shared/ai/skills/om-backend-ui-design/references/frontend-and-design-system.md +6 -0
  26. package/agentic/shared/ai/skills/om-backend-ui-design/references/page-and-navigation.md +4 -0
  27. package/agentic/shared/ai/skills/om-data-model-design/SKILL.md +1 -0
  28. package/agentic/shared/ai/skills/om-data-model-design/references/integrity-and-concurrency.md +2 -0
  29. package/agentic/shared/ai/skills/om-data-model-design/references/migration-workflow.md +2 -0
  30. package/agentic/shared/ai/skills/om-data-model-design/references/schema-design.md +3 -1
  31. package/agentic/shared/ai/skills/om-eject-and-customize/SKILL.md +1 -0
  32. package/agentic/shared/ai/skills/om-eject-and-customize/references/decision-and-procedure.md +2 -0
  33. package/agentic/shared/ai/skills/om-evolve-harness/SKILL.md +2 -0
  34. package/agentic/shared/ai/skills/om-evolve-harness/references/case-template.md +3 -3
  35. package/agentic/shared/ai/skills/om-evolve-harness/references/case-workflow.md +1 -1
  36. package/agentic/shared/ai/skills/om-evolve-harness/references/knowledge-change.md +133 -0
  37. package/agentic/shared/ai/skills/om-integration-builder/SKILL.md +1 -0
  38. package/agentic/shared/ai/skills/om-integration-builder/references/provider-families.md +11 -0
  39. package/agentic/shared/ai/skills/om-judge-agent-session/references/judge-workflow.md +1 -1
  40. package/agentic/shared/ai/skills/om-module-scaffold/SKILL.md +2 -2
  41. package/agentic/shared/ai/skills/om-module-scaffold/references/api-and-domain.md +14 -1
  42. package/agentic/shared/ai/skills/om-module-scaffold/references/data-and-migrations.md +2 -0
  43. package/agentic/shared/ai/skills/om-module-scaffold/references/module-surfaces.md +19 -0
  44. package/agentic/shared/ai/skills/om-share-this-session/scripts/prepare-share-bundle.mjs +1 -4
  45. package/agentic/shared/ai/skills/om-system-extension/SKILL.md +1 -0
  46. package/agentic/shared/ai/skills/om-system-extension/references/extension-branches.md +24 -0
  47. package/agentic/shared/ai/skills/om-system-extension/references/unified-overrides.md +3 -1
  48. package/agentic/shared/ai/skills/om-troubleshooter/SKILL.md +1 -0
  49. package/agentic/shared/ai/skills/om-troubleshooter/references/diagnosis-map.md +13 -0
  50. package/agentic/shared/ai/skills/tiers.json +2 -1
  51. package/agentic/shared/ai/specs/2026-08-06-reference-module-activation.md +248 -0
  52. package/agentic/shared/scripts/agent-harness-tool-server.mjs +39 -2
  53. package/agentic/shared/scripts/design-source-contract.mjs +108 -0
  54. package/agentic/shared/scripts/evaluate-agent-harness.mjs +935 -28
  55. package/agentic/shared/scripts/framework-context.mjs +4 -1
  56. package/agentic/shared/scripts/run-agent-harness-release.mjs +1 -1
  57. package/agentic/shared/scripts/validate-knowledge-change.mjs +1511 -0
  58. package/dist/agentic/guides/backend-ui.md +7 -1
  59. package/dist/agentic/guides/module-facts.json +565 -224
  60. package/dist/agentic/guides/module-facts.v2.json +122933 -0
  61. package/dist/agentic/guides/modules/ai_assistant.md +2 -2
  62. package/dist/agentic/guides/modules/api_docs.md +2 -2
  63. package/dist/agentic/guides/modules/api_keys.md +2 -2
  64. package/dist/agentic/guides/modules/attachments.md +2 -2
  65. package/dist/agentic/guides/modules/audit_logs.md +2 -2
  66. package/dist/agentic/guides/modules/auth.md +2 -2
  67. package/dist/agentic/guides/modules/business_rules.md +2 -2
  68. package/dist/agentic/guides/modules/catalog.md +11 -4
  69. package/dist/agentic/guides/modules/channel_gmail.md +2 -2
  70. package/dist/agentic/guides/modules/channel_imap.md +2 -2
  71. package/dist/agentic/guides/modules/checkout.md +8 -2
  72. package/dist/agentic/guides/modules/communication_channels.md +6 -6
  73. package/dist/agentic/guides/modules/configs.md +2 -2
  74. package/dist/agentic/guides/modules/content.md +2 -2
  75. package/dist/agentic/guides/modules/currencies.md +2 -2
  76. package/dist/agentic/guides/modules/customer_accounts.md +2 -2
  77. package/dist/agentic/guides/modules/customers.md +8 -8
  78. package/dist/agentic/guides/modules/dashboards.md +12 -12
  79. package/dist/agentic/guides/modules/data_sync.md +4 -4
  80. package/dist/agentic/guides/modules/design_system.md +2 -2
  81. package/dist/agentic/guides/modules/dictionaries.md +2 -2
  82. package/dist/agentic/guides/modules/directory.md +2 -2
  83. package/dist/agentic/guides/modules/entities.md +3 -3
  84. package/dist/agentic/guides/modules/eudr.md +3 -3
  85. package/dist/agentic/guides/modules/events.md +2 -2
  86. package/dist/agentic/guides/modules/feature_toggles.md +2 -2
  87. package/dist/agentic/guides/modules/gateway_stripe.md +2 -2
  88. package/dist/agentic/guides/modules/generators.md +2 -2
  89. package/dist/agentic/guides/modules/inbox_ops.md +2 -2
  90. package/dist/agentic/guides/modules/integrations.md +5 -2
  91. package/dist/agentic/guides/modules/messages.md +2 -2
  92. package/dist/agentic/guides/modules/notifications.md +2 -2
  93. package/dist/agentic/guides/modules/onboarding.md +2 -2
  94. package/dist/agentic/guides/modules/payment_gateways.md +7 -3
  95. package/dist/agentic/guides/modules/perspectives.md +2 -2
  96. package/dist/agentic/guides/modules/planner.md +2 -2
  97. package/dist/agentic/guides/modules/portal.md +2 -2
  98. package/dist/agentic/guides/modules/progress.md +2 -2
  99. package/dist/agentic/guides/modules/query_index.md +2 -2
  100. package/dist/agentic/guides/modules/record_locks.md +3 -3
  101. package/dist/agentic/guides/modules/resources.md +2 -2
  102. package/dist/agentic/guides/modules/sales.md +13 -4
  103. package/dist/agentic/guides/modules/scheduler.md +2 -2
  104. package/dist/agentic/guides/modules/search.md +4 -4
  105. package/dist/agentic/guides/modules/security.md +3 -3
  106. package/dist/agentic/guides/modules/shipping_carriers.md +2 -2
  107. package/dist/agentic/guides/modules/sso.md +2 -2
  108. package/dist/agentic/guides/modules/staff.md +7 -4
  109. package/dist/agentic/guides/modules/storage_s3.md +2 -2
  110. package/dist/agentic/guides/modules/sync_akeneo.md +4 -4
  111. package/dist/agentic/guides/modules/sync_excel.md +2 -2
  112. package/dist/agentic/guides/modules/system_status_overlays.md +2 -2
  113. package/dist/agentic/guides/modules/translations.md +2 -2
  114. package/dist/agentic/guides/modules/webhooks.md +2 -2
  115. package/dist/agentic/guides/modules/wms.md +31 -4
  116. package/dist/agentic/guides/modules/workflows.md +2 -2
  117. package/dist/agentic/guides/reference-module-facts.json +8335 -0
  118. package/dist/agentic/guides/reference-modules/example.md +489 -0
  119. package/dist/agentic/guides/spec-delivery.md +34 -0
  120. package/dist/agentic/guides/testing-debugging.md +2 -1
  121. package/dist/agentic/guides/upstream/BACKWARD_COMPATIBILITY.md +3 -2
  122. package/dist/agentic/guides/upstream/manifest.json +2 -2
  123. package/dist/agentic/shared/AGENTS.md.template +10 -14
  124. package/dist/agentic/shared/ai/harness/README.md +4 -4
  125. package/dist/agentic/shared/ai/harness/RELEASE.md +4 -4
  126. package/dist/agentic/shared/ai/harness/cases.json +11350 -5088
  127. package/dist/agentic/shared/ai/harness/cases.schema.json +70 -7
  128. package/dist/agentic/shared/ai/harness/design-system-inventory.json +6697 -0
  129. package/dist/agentic/shared/ai/harness/fixtures/index.json +3 -1
  130. package/dist/agentic/shared/ai/harness/fixtures/seeds.json +4 -0
  131. package/dist/agentic/shared/ai/harness/knowledge-change.schema.json +228 -0
  132. package/dist/agentic/shared/ai/harness/release-matrix.json +9 -4
  133. package/dist/agentic/shared/ai/harness/result.schema.json +60 -0
  134. package/dist/agentic/shared/ai/harness/routing-response.schema.json +10 -0
  135. package/dist/agentic/shared/ai/harness/source-link-inventory.json +3231 -0
  136. package/dist/agentic/shared/ai/harness/validators.json +8 -4
  137. package/dist/agentic/shared/ai/harness/writable-ast-oracles.mjs +5 -2
  138. package/dist/agentic/shared/ai/harness/writable-behavior-oracles.mjs +3 -0
  139. package/dist/agentic/shared/ai/harness/writable-spec-oracles.mjs +879 -0
  140. package/dist/agentic/shared/ai/skills/om-auto-upgrade-0.6.7-to-0.7.0/SKILL.md +102 -0
  141. package/dist/agentic/shared/ai/skills/om-backend-ui-design/SKILL.md +1 -0
  142. package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/crud-surfaces.md +15 -0
  143. package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/frontend-and-design-system.md +6 -0
  144. package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/page-and-navigation.md +4 -0
  145. package/dist/agentic/shared/ai/skills/om-data-model-design/SKILL.md +1 -0
  146. package/dist/agentic/shared/ai/skills/om-data-model-design/references/integrity-and-concurrency.md +2 -0
  147. package/dist/agentic/shared/ai/skills/om-data-model-design/references/migration-workflow.md +2 -0
  148. package/dist/agentic/shared/ai/skills/om-data-model-design/references/schema-design.md +3 -1
  149. package/dist/agentic/shared/ai/skills/om-eject-and-customize/SKILL.md +1 -0
  150. package/dist/agentic/shared/ai/skills/om-eject-and-customize/references/decision-and-procedure.md +2 -0
  151. package/dist/agentic/shared/ai/skills/om-evolve-harness/SKILL.md +2 -0
  152. package/dist/agentic/shared/ai/skills/om-evolve-harness/references/case-template.md +3 -3
  153. package/dist/agentic/shared/ai/skills/om-evolve-harness/references/case-workflow.md +1 -1
  154. package/dist/agentic/shared/ai/skills/om-evolve-harness/references/knowledge-change.md +133 -0
  155. package/dist/agentic/shared/ai/skills/om-integration-builder/SKILL.md +1 -0
  156. package/dist/agentic/shared/ai/skills/om-integration-builder/references/provider-families.md +11 -0
  157. package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/judge-workflow.md +1 -1
  158. package/dist/agentic/shared/ai/skills/om-module-scaffold/SKILL.md +2 -2
  159. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/api-and-domain.md +14 -1
  160. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/data-and-migrations.md +2 -0
  161. package/dist/agentic/shared/ai/skills/om-module-scaffold/references/module-surfaces.md +19 -0
  162. package/dist/agentic/shared/ai/skills/om-share-this-session/scripts/prepare-share-bundle.mjs +1 -4
  163. package/dist/agentic/shared/ai/skills/om-system-extension/SKILL.md +1 -0
  164. package/dist/agentic/shared/ai/skills/om-system-extension/references/extension-branches.md +24 -0
  165. package/dist/agentic/shared/ai/skills/om-system-extension/references/unified-overrides.md +3 -1
  166. package/dist/agentic/shared/ai/skills/om-troubleshooter/SKILL.md +1 -0
  167. package/dist/agentic/shared/ai/skills/om-troubleshooter/references/diagnosis-map.md +13 -0
  168. package/dist/agentic/shared/ai/skills/tiers.json +2 -1
  169. package/dist/agentic/shared/ai/specs/2026-08-06-reference-module-activation.md +248 -0
  170. package/dist/agentic/shared/scripts/agent-harness-tool-server.mjs +39 -2
  171. package/dist/agentic/shared/scripts/design-source-contract.mjs +108 -0
  172. package/dist/agentic/shared/scripts/evaluate-agent-harness.mjs +935 -28
  173. package/dist/agentic/shared/scripts/framework-context.mjs +4 -1
  174. package/dist/agentic/shared/scripts/run-agent-harness-release.mjs +1 -1
  175. package/dist/agentic/shared/scripts/validate-knowledge-change.mjs +1511 -0
  176. package/dist/index.js +21 -2
  177. package/package.json +9 -3
  178. package/template/AGENTS.md +10 -14
  179. package/template/jest.config.cjs +5 -1
  180. package/template/package.json.template +1 -0
  181. package/template/scripts/jest-mikroorm-transformer.cjs +50 -0
  182. package/template/scripts/validate-knowledge-change.mjs +4 -0
  183. package/template/src/components/ComponentOverridesBootstrap.tsx +19 -1
  184. package/template/src/components/OrganizationSwitcher.tsx +28 -10
  185. package/template/src/components/__tests__/ComponentOverridesBootstrap.test.tsx +26 -2
  186. package/template/src/components/__tests__/OrganizationSwitcher.tenantCookie.test.tsx +163 -0
  187. package/template/src/components/__tests__/starter-chrome-ds.test.ts +20 -0
  188. package/template/src/modules/example/README.md +82 -0
  189. package/template/src/modules/example/__integration__/TC-EXAMPLE-003-todo-bulk-progress.spec.ts +734 -0
  190. package/template/src/modules/example/__integration__/TC-EXAMPLE-004-encryption.spec.ts +199 -0
  191. package/template/src/modules/example/__integration__/TC-EXAMPLE-005-extension-links.spec.ts +168 -0
  192. package/template/src/modules/example/__integration__/TC-EXAMPLE-006-search.spec.ts +179 -0
  193. package/template/src/modules/example/__integration__/TC-EXAMPLE-007-cache.spec.ts +173 -0
  194. package/template/src/modules/example/__integration__/TC-EXAMPLE-008-notification-renderer.spec.ts +146 -0
  195. package/template/src/modules/example/__integration__/TC-EXAMPLE-009-translations.spec.ts +156 -0
  196. package/template/src/modules/example/__integration__/TC-EXAMPLE-010-setup-seeding.spec.ts +354 -0
  197. package/template/src/modules/example/__integration__/TC-EXAMPLE-011-form-locking.spec.ts +213 -0
  198. package/template/src/modules/example/__integration__/TC-EXAMPLE-012-extension-topology.spec.ts +148 -0
  199. package/template/src/modules/example/__integration__/TC-EXAMPLE-013-page-middleware.spec.ts +230 -0
  200. package/template/src/modules/example/__integration__/TC-EXAMPLE-014-ai-contracts.spec.ts +294 -0
  201. package/template/src/modules/example/__integration__/TC-EXAMPLE-015-specialized-registries.spec.ts +544 -0
  202. package/template/src/modules/example/__integration__/TC-EXAMPLE-016-generator-plugin.spec.ts +152 -0
  203. package/template/src/modules/example/__integration__/TC-EXAMPLE-017-bound-extension-ui.spec.ts +630 -0
  204. package/template/src/modules/example/__integration__/TC-UMES-003.spec.ts +20 -3
  205. package/template/src/modules/example/__tests__/ai-agents.test.ts +104 -0
  206. package/template/src/modules/example/__tests__/ai-overrides.test.ts +227 -0
  207. package/template/src/modules/example/__tests__/ai-tools.test.ts +176 -0
  208. package/template/src/modules/example/__tests__/announce-todo-to-portal.test.ts +139 -0
  209. package/template/src/modules/example/__tests__/backend-middleware.test.ts +88 -0
  210. package/template/src/modules/example/__tests__/di-registration.test.ts +85 -0
  211. package/template/src/modules/example/__tests__/encryption-search-contract.test.ts +68 -0
  212. package/template/src/modules/example/__tests__/enricher-encrypted-reads.test.ts +135 -0
  213. package/template/src/modules/example/__tests__/entity-extensions.test.ts +72 -0
  214. package/template/src/modules/example/__tests__/extension-points.test.ts +100 -0
  215. package/template/src/modules/example/__tests__/frontend-middleware.test.ts +101 -0
  216. package/template/src/modules/example/__tests__/guards.test.ts +14 -0
  217. package/template/src/modules/example/__tests__/invalidate-todo-summary.test.ts +81 -0
  218. package/template/src/modules/example/__tests__/inventory-evidence-honesty.test.ts +125 -0
  219. package/template/src/modules/example/__tests__/module-overrides-reference.test.ts +358 -0
  220. package/template/src/modules/example/__tests__/notifications.client.test.tsx +106 -0
  221. package/template/src/modules/example/__tests__/setup-bulk-dispatch-schedule.test.ts +180 -0
  222. package/template/src/modules/example/__tests__/setup-seeding.test.ts +168 -0
  223. package/template/src/modules/example/__tests__/specialized-registries.test.ts +240 -0
  224. package/template/src/modules/example/__tests__/translations.test.ts +55 -0
  225. package/template/src/modules/example/ai-agents.ts +227 -0
  226. package/template/src/modules/example/ai-tools.ts +175 -0
  227. package/template/src/modules/example/api/__tests__/notifications.route.test.ts +71 -0
  228. package/template/src/modules/example/api/__tests__/organizations.contract.test.ts +109 -0
  229. package/template/src/modules/example/api/__tests__/tags.tenant-scope.test.ts +92 -0
  230. package/template/src/modules/example/api/__tests__/todos.bulk-complete.test.ts +218 -0
  231. package/template/src/modules/example/api/__tests__/todos.encrypted-search.test.ts +149 -0
  232. package/template/src/modules/example/api/__tests__/todos.optimistic-lock.test.ts +103 -0
  233. package/template/src/modules/example/api/__tests__/todos.request-scope.test.ts +199 -0
  234. package/template/src/modules/example/api/__tests__/todos.summary.test.ts +88 -0
  235. package/template/src/modules/example/api/assignees/route.ts +2 -1
  236. package/template/src/modules/example/api/notifications/route.ts +8 -2
  237. package/template/src/modules/example/api/openapi.ts +2 -0
  238. package/template/src/modules/example/api/organizations/route.ts +21 -21
  239. package/template/src/modules/example/api/tags/route.ts +17 -9
  240. package/template/src/modules/example/api/todos/bulk-complete/route.ts +141 -0
  241. package/template/src/modules/example/api/todos/route.ts +224 -118
  242. package/template/src/modules/example/api/todos/summary/route.ts +76 -0
  243. package/template/src/modules/example/backend/component-overrides/page.meta.ts +18 -0
  244. package/template/src/modules/example/backend/component-overrides/page.tsx +29 -0
  245. package/template/src/modules/example/backend/middleware.ts +61 -0
  246. package/template/src/modules/example/backend/page.tsx +0 -24
  247. package/template/src/modules/example/backend/todos/[id]/edit/page.tsx +2 -185
  248. package/template/src/modules/example/backend/todos/create/page.tsx +2 -48
  249. package/template/src/modules/example/backend/umes-handlers/page.tsx +2 -1
  250. package/template/src/modules/example/cli.ts +1 -1
  251. package/template/src/modules/example/commands/__tests__/todos.expected-updated-at.test.ts +145 -0
  252. package/template/src/modules/example/commands/__tests__/todos.notes-encryption.test.ts +109 -0
  253. package/template/src/modules/example/commands/__tests__/todos.prepare-scope.test.ts +4 -0
  254. package/template/src/modules/example/commands/__tests__/todos.update.test.ts +4 -0
  255. package/template/src/modules/example/commands/interceptors.ts +17 -6
  256. package/template/src/modules/example/commands/todos.ts +140 -14
  257. package/template/src/modules/example/components/ComponentOverrideShowcase.tsx +161 -0
  258. package/template/src/modules/example/components/TodoForm.tsx +255 -0
  259. package/template/src/modules/example/components/TodosTable.tsx +16 -3
  260. package/template/src/modules/example/components/__tests__/todo-form-values.test.ts +61 -0
  261. package/template/src/modules/example/data/enrichers.ts +25 -6
  262. package/template/src/modules/example/data/entities.ts +99 -1
  263. package/template/src/modules/example/data/extensions.ts +40 -0
  264. package/template/src/modules/example/data/validators.ts +8 -0
  265. package/template/src/modules/example/di.ts +20 -0
  266. package/template/src/modules/example/encryption.ts +27 -0
  267. package/template/src/modules/example/events.ts +29 -0
  268. package/template/src/modules/example/extension-points.ts +49 -0
  269. package/template/src/modules/example/frontend/middleware.ts +67 -0
  270. package/template/src/modules/example/generators.ts +38 -0
  271. package/template/src/modules/example/i18n/de.json +17 -0
  272. package/template/src/modules/example/i18n/en.json +17 -0
  273. package/template/src/modules/example/i18n/es.json +17 -0
  274. package/template/src/modules/example/i18n/ko.json +17 -0
  275. package/template/src/modules/example/i18n/pl.json +17 -0
  276. package/template/src/modules/example/integration.ts +55 -0
  277. package/template/src/modules/example/lib/__tests__/module-reference-index.test.ts +43 -0
  278. package/template/src/modules/example/lib/__tests__/todoBulkComplete.loop.test.ts +509 -0
  279. package/template/src/modules/example/lib/__tests__/todoBulkComplete.test.ts +320 -0
  280. package/template/src/modules/example/lib/__tests__/todoSummaryCache.test.ts +276 -0
  281. package/template/src/modules/example/lib/exampleSeeds.ts +96 -0
  282. package/template/src/modules/example/lib/mock-currency-rate-provider.ts +38 -0
  283. package/template/src/modules/example/lib/module-reference-index.ts +64 -0
  284. package/template/src/modules/example/lib/todoBulkComplete.ts +730 -0
  285. package/template/src/modules/example/lib/todoSummaryCache.ts +132 -0
  286. package/template/src/modules/example/lib/todoSummaryService.ts +54 -0
  287. package/template/src/modules/example/migrations/.snapshot-open-mercato.json +478 -79
  288. package/template/src/modules/example/migrations/Migration20260804120546_example.ts +13 -0
  289. package/template/src/modules/example/migrations/Migration20260804163220_example.ts +14 -0
  290. package/template/src/modules/example/notifications.client.ts +126 -0
  291. package/template/src/modules/example/reference-index.ts +21 -0
  292. package/template/src/modules/example/references/module-overrides.reference.ts +146 -0
  293. package/template/src/modules/example/references/surface-inventory.json +2800 -0
  294. package/template/src/modules/example/references/surface-map.md +285 -0
  295. package/template/src/modules/example/search.ts +102 -0
  296. package/template/src/modules/example/setup.ts +132 -0
  297. package/template/src/modules/example/subscribers/announce-todo-to-portal.ts +90 -0
  298. package/template/src/modules/example/subscribers/audit-delete.ts +9 -5
  299. package/template/src/modules/example/subscribers/example-event.ts +31 -6
  300. package/template/src/modules/example/subscribers/invalidate-todo-summary.ts +67 -0
  301. package/template/src/modules/example/translations.ts +5 -0
  302. package/template/src/modules/example/types.ts +6 -0
  303. package/template/src/modules/example/vector.ts +71 -0
  304. package/template/src/modules/example/widgets/__tests__/component-override-modes.test.ts +237 -0
  305. package/template/src/modules/example/widgets/__tests__/components.test.ts +139 -24
  306. package/template/src/modules/example/widgets/__tests__/crud-validation-widget.client.test.tsx +30 -0
  307. package/template/src/modules/example/widgets/__tests__/crud-validation-widget.transform-display.test.ts +83 -0
  308. package/template/src/modules/example/widgets/__tests__/injection-table.test.ts +116 -65
  309. package/template/src/modules/example/widgets/__tests__/required-modules.test.ts +98 -0
  310. package/template/src/modules/example/widgets/__tests__/todo-bulk-complete.test.ts +101 -0
  311. package/template/src/modules/example/widgets/components.ts +172 -48
  312. package/template/src/modules/example/widgets/injection/catalog-seo-report/widget.ts +1 -0
  313. package/template/src/modules/example/widgets/injection/crud-validation/widget.client.tsx +10 -0
  314. package/template/src/modules/example/widgets/injection/crud-validation/widget.ts +29 -5
  315. package/template/src/modules/example/widgets/injection/customer-priority-bulk-actions/widget.ts +1 -0
  316. package/template/src/modules/example/widgets/injection/customer-priority-column/widget.ts +1 -0
  317. package/template/src/modules/example/widgets/injection/customer-priority-detail/widget.ts +1 -0
  318. package/template/src/modules/example/widgets/injection/customer-priority-field/widget.ts +1 -0
  319. package/template/src/modules/example/widgets/injection/customer-priority-filter/widget.ts +1 -0
  320. package/template/src/modules/example/widgets/injection/customer-priority-row-action/widget.ts +1 -0
  321. package/template/src/modules/example/widgets/injection/sales-todos/widget.ts +1 -0
  322. package/template/src/modules/example/widgets/injection/todo-bulk-complete/widget.ts +80 -0
  323. package/template/src/modules/example/widgets/injection-table.ts +27 -25
  324. package/template/src/modules/example/workers/todos-bulk-complete.ts +46 -0
  325. package/template/src/modules/example/workers/todos-bulk-dispatch.ts +76 -0
  326. package/template/src/modules/example/workflows.ts +63 -0
  327. package/template/src/modules.ts +0 -29
package/README.md CHANGED
@@ -144,7 +144,7 @@ yarn install-skills
144
144
  yarn harness:release --runner codex --prepare-targets /absolute/empty-release-targets --acknowledge-writes
145
145
  ```
146
146
 
147
- The target directory must be absolute, new or empty, and outside the controller app. Select one blocking primary runner with `--runner codex` or `--runner claude`; it owns all 214 routing cases and every writable/review lane, with no per-case fallback. Optionally add the different authenticated runner through `--portability-runner` for the exact 46-case representative read-only lane. Omitting it is valid and recorded as not requested; once requested, its failures are blocking. Use a fresh, sanitized controller: automatic preparation fails before copying `.env`/`.env.*` local configuration (safe example/sample/template files remain allowed), credential files, or private-key files. The complete gate requires Linux with trusted system Bubblewrap (`bwrap`) and user namespaces because its Playwright API/browser lanes need a loopback namespace isolated from the host. Preflight rejects untrusted/no-op/pass-through executables and proves isolated loopback plus a capability-free payload before target preparation, provider invocation, or writes; native macOS and Windows therefore fail closed. The command also fails closed when a required runner, browser, or test runtime is unavailable. The 214-case catalog includes 93 framework-neutral business prompts and 46 writable implementation/regression cases (21.5%). The release command runs live routing, writable trusted oracles, per-target `generate`/`typecheck`/`lint`/`build`, any declared generated test, and isolated generated-code review for every writable result. Foundation and target validation—including `yarn build`—receive a minimal environment with network access denied, and persisted diagnostics redact sensitive environment values and URL userinfo. Test-authoring coverage executes a Jest unit test plus Linux/Bubblewrap loopback-only Playwright API and browser tests through fixed controller-owned commands against a read-only target; runtime reports must attest at least one passed test and zero skipped, todo, focused, flaky, or expected-failure tests. The suite then writes a schema-valid sanitized mode-`0600` report under `.ai/harness/results/` with the selected primary and optional portability runner policy.
147
+ The target directory must be absolute, new or empty, and outside the controller app. Select one blocking primary runner with `--runner codex` or `--runner claude`; it owns all 229 routing cases and every writable/review lane, with no per-case fallback. Optionally add the different authenticated runner through `--portability-runner` for the exact 48-case representative read-only lane. Omitting it is valid and recorded as not requested; once requested, its failures are blocking. Use a fresh, sanitized controller: automatic preparation fails before copying `.env`/`.env.*` local configuration (safe example/sample/template files remain allowed), credential files, or private-key files. The complete gate requires Linux with trusted system Bubblewrap (`bwrap`) and user namespaces because its Playwright API/browser lanes need a loopback namespace isolated from the host. Preflight rejects untrusted/no-op/pass-through executables and proves isolated loopback plus a capability-free payload before target preparation, provider invocation, or writes; native macOS and Windows therefore fail closed. The command also fails closed when a required runner, browser, or test runtime is unavailable. The 229-case catalog includes 93 framework-neutral business prompts and 48 writable implementation/regression cases (21.0%). The release command runs live routing, writable trusted oracles, per-target `generate`/`typecheck`/`lint`/`build`, any declared generated test, and isolated generated-code review for every writable result. Foundation and target validation—including `yarn build`—receive a minimal environment with network access denied, and persisted diagnostics redact sensitive environment values and URL userinfo. Test-authoring coverage executes a Jest unit test plus Linux/Bubblewrap loopback-only Playwright API and browser tests through fixed controller-owned commands against a read-only target; runtime reports must attest at least one passed test and zero skipped, todo, focused, flaky, or expected-failure tests. The suite then writes a schema-valid sanitized mode-`0600` report under `.ai/harness/results/` with the selected primary and optional portability runner policy.
148
148
 
149
149
  Use the bundled `om-evolve-harness` skill to add a real case: reproduce failure first, select one smallest knowledge owner, run any generated unit/integration tests plus target checks, require code review, and finish with the full release suite. Open Mercato framework maintainers use the monorepo-only `$om-refresh-standalone-harness --from <ref> --to <ref>` workflow for every release range and retain its sanitized maintenance report.
150
150
 
@@ -18,7 +18,7 @@ Every app page is module-owned and auto-discovered: author it under `src/modules
18
18
  | Public frontend | `src/modules/<id>/frontend/**/page.tsx`; explicitly declare auth posture in metadata. |
19
19
  | Customer portal | `src/modules/<id>/frontend/[orgSlug]/portal/**/page.tsx`; public login/signup/verify/landing pages are `navHidden` without customer auth, authenticated pages require customer auth/features, and only sidebar destinations add `nav`. |
20
20
 
21
- List destinations need stable `pageGroup`, `pageGroupKey`, and order. Prefer a registered string icon name in `page.meta.ts` so generated metadata stays serializable; use `lucide-react` components in page-body UI. Hide create/edit/detail destinations from navigation when they are reached from a list.
21
+ List destinations need stable `pageGroup`, `pageGroupKey`, and order. A `page.meta.ts` `icon` MUST be a name the installed icon registry already lists — an unlisted Lucide name renders no icon at all, silently — so verify it before use; use `lucide-react` components in page-body UI. Hide create/edit/detail destinations from navigation when they are reached from a list.
22
22
 
23
23
  ## Default CRUD Completeness
24
24
 
@@ -78,3 +78,9 @@ For a new editable entity or module, unless the brief explicitly excludes an ope
78
78
  2. Exercise loading, empty, validation error, server error, conflict, success, and delete flows.
79
79
  3. Save, reload, edit, clear nullable fields, and verify the API payload and rendered state agree.
80
80
  4. Check keyboard and narrow-width behavior; run affected integration tests through real API fixtures.
81
+
82
+ ## Canonical example source
83
+
84
+ This guide stays the rule owner. For one compiling implementation of a table, form, page shell, or rendered injected widget, open the exact row in [`src/modules/example/references/surface-map.md`](../../src/modules/example/references/surface-map.md) — its `Backend UI` section links each file — or go straight to [`components/TodosTable.tsx`](../../src/modules/example/components/TodosTable.tsx) and [`components/TodoForm.tsx`](../../src/modules/example/components/TodoForm.tsx). That module is source-present and runtime-disabled: read one row, never the tree, and rename every `example` identifier.
85
+
86
+ When you need what the component *accepts*, not how the example uses it, open the installed implementation: [`@open-mercato/ui/src/backend/DataTable.tsx`](../../node_modules/@open-mercato/ui/src/backend/DataTable.tsx). That exact file is what your app installs. Read-only: never edit inside `node_modules`, and take no sibling or import target this guide does not link.
@@ -2,6 +2,40 @@
2
2
 
3
3
  Use this guide for a new application, multi-module feature, or other non-trivial business slice.
4
4
 
5
+ ## Spec-first decision gate
6
+
7
+ `AGENTS.md` owns the ordered rule; this section only expands it with examples and the surrounding delivery procedure. Apply it before writing code, in order:
8
+
9
+ 1. Search the configured specs path (`.ai/specs`, plus any enterprise directory the config names) once for a covering specification. Open the one match; a plan-only request stops there.
10
+ 2. A new user-facing or platform capability, an architecture decision, a schema or public API contract, cross-module behavior, or multi-phase behavior means authoring or amending a spec **before** coding (`spec-first`). Examples: "add a rental-booking module", "let customers self-serve returns", "introduce a second pricing engine".
11
+ 3. A bug fix, minor behavioral correction, small documentation change, dependency maintenance, or an isolated refactor that adds no architecture and no public contract proceeds without a spec (`direct`). Examples: "the overdue filter is off by one day", "rename an internal helper", "bump the queue dependency".
12
+ 4. A covering spec already exists: implement against it and update it in place (`reuse-spec`). Never open a second spec for the same capability.
13
+ 5. A new feature skips the spec **only** when the user's current request explicitly says to skip or bypass it. Silence, urgency, an "it's small" estimate, and an earlier generic preference are not overrides; neither is your own time estimate.
14
+ 6. When the classification is genuinely ambiguous **and** the answer materially changes the workflow, ask one bounded question (`ask`). Do not ask when repository evidence — an existing spec, an existing module, a reproducible defect — already resolves it.
15
+
16
+ After `spec-first` or `reuse-spec`, implementation routing is a one-way handoff: module work loads `om-module-scaffold`, which starts at `src/modules/example/README.md` and its `references/surface-inventory.json`, and adapts only the capability-linked source files. UI-bearing work additionally loads `om-backend-ui-design`. Never propose a second teaching module, copy the example tree wholesale, or treat `ratelimit_probe` as a blueprint. Every newly added or materially changed extension surface names its own self-contained integration test in the plan.
17
+
18
+ ## Extension-surface traceability
19
+
20
+ Every added or materially changed runtime or discovery extension surface gets its own row in the spec's requirement traceability table. Putting a new surface inside an existing capability row does not waive the row. Each row names:
21
+
22
+ - the requirement it satisfies (`REQ-001`, …);
23
+ - the reference capability ID and the exact `src/modules/example/**` source file it adapts — an exact file, never a directory or wildcard, and never a path `references/surface-inventory.json` does not map;
24
+ - the implementation phase that lands it;
25
+ - its own self-contained integration test; and
26
+ - exactly one mechanism classification: `emitted-example` when the reference module already emits that mechanism, `framework-only` for an app-level setting that never becomes a module contribution, `catalog-only` when the framework describes the surface but the reference contributes nothing for it, `currently-unbound` when the value is reserved by the public set but no code path emits it, and `negative-fixture` when only a deliberately broken fixture produces it.
27
+
28
+ Only the reference module's own coverage ledger justifies the last four, and `negative-fixture` is never a valid classification for a surface you are proposing to ship.
29
+
30
+ The reference module is source-present and unregistered. Its activations, targets, routes, and grants apply only after an explicit opt-in, so a plan says so rather than describing them as behavior the app already has.
31
+
32
+ ## Delivery skills
33
+
34
+ - Pinned delivery skills install with `yarn install-skills` (refresh: `--update`). When a skill is absent, run `yarn install-skills` once; never substitute a similarly named skill or improvise its workflow.
35
+ - `om-implement-spec` runs approved phases locally; `om-auto-implement-spec`, `om-auto-create-pr`, `om-auto-fix-issue`, and `om-auto-review-pr` own whole-spec, commit+ready PR, issue, and review delivery.
36
+ - Integration, E2E, and UI QA delivery uses `om-integration-tests` and `om-auto-qa-pr`.
37
+ - Routing note: specs themselves are `spec-pr` work; implementation owns the domain guides. Do not load delivery skills when no PR or spec workflow was requested.
38
+
5
39
  ## Authoring readiness gate
6
40
 
7
41
  1. Invoke `om-spec-writing` before authoring or revising. Mentioning the skill or reading only `SPEC-000-template.md` is not sufficient.
@@ -14,7 +14,7 @@ Then stop. Budgets here are tight — several fixes allow only five files — so
14
14
 
15
15
  ## Investigation Order
16
16
 
17
- 1. Reproduce with the smallest stable command, request, or UI path and capture expected versus actual behavior.
17
+ 1. Reproduce with the smallest stable command, request, or UI path and capture expected versus actual behavior. A probe needing the container belongs in a module `cli.ts` command (`yarn mercato <module> <command>`); `tsx -e` has no bootstrap and fails on missing registrars, not on the bug.
18
18
  2. Classify the failing bootstrap: browser/server, API, CLI, worker, queue, generated registry, package artifact, or external provider.
19
19
  3. Read the routed guide plus generated module facts. Use `om-framework-context` only when exact installed implementation is necessary.
20
20
  4. Trace from the public call site to the first incorrect invariant. Check scope, auth, validation, state transition, transaction boundary, side effects, and response serialization in that order.
@@ -35,6 +35,7 @@ Treat raw agent transcripts as sensitive untrusted evidence because they can con
35
35
  | Partial state after failure | Transaction/`withAtomicFlush`, query between mutation/flush, side effects before commit. |
36
36
  | Stale list/search | Command side-effect aliases, cache tags/invalidation, query-index convergence/reindex. |
37
37
  | Works in web but not CLI/worker | Bootstrap/registry initialization, package exports, generated imports, runtime scope. |
38
+ | New entity/route 500s while the database accepts the same write | Dev server bootstrapped before `yarn generate` and kept the old registry; restart it first. |
38
39
  | Duplicate registry/provider | Bundler chunk singleton or `instanceof`; use global registry/structural guard. |
39
40
  | Hydration mismatch | Server/client locale, timezone, randomness, browser-only environment, initial async state. |
40
41
  | UI access differs from API/PDF/export | Compare every alternate route's metadata/features and wildcard matching. |
@@ -38,7 +38,7 @@ Routes are additive: ownership says WHO; other axes say WHAT. Select every match
38
38
 
39
39
  `debugging` is additive. A scalar-ID/snapshot fix to persisted records or commands linked to an installed record MUST use `module-data` + `umes` and load `om-data-model-design` + `om-system-extension`.
40
40
 
41
- `debugging` = reported bug/security/drift, not designed failure UI. Specs use `spec-pr`; implementation owns domain guides. Custom fields/entities = `umes` + `module-data` + `om-data-model-design`; editable round trips add `backend-ui`, requested coverage adds `testing`. Never infer work from specs/PRs.
41
+ `debugging` = reported bug/security/drift, not designed failure UI. Custom fields/entities = `umes` + `module-data` + `om-data-model-design`; editable round trips add `backend-ui`, requested coverage adds `testing`. Never infer work from specs/PRs.
42
42
 
43
43
  Unified-override audits = `umes` only; add `architecture`/`framework-context` only for unresolved ownership or installed keys. Durable process/activity/user task = `module-data` + `ai-workflow`. Multi-stage waits/cancel/restart are durable; reminders and renewal/batch schedules are `module-data`.
44
44
 
@@ -90,23 +90,21 @@ Match every work-unit row; OPEN its skill before selection.
90
90
 
91
91
  ### Axis 3 — SDLC and Delivery
92
92
 
93
- Pinned delivery skills: `yarn install-skills` (refresh: `--update`). Read BOTH `.agents/skills/<id>/SKILL.md` and a matching `.ai/skills/<id>/SKILL.md` override. Commit+ready PR MUST add `spec-pr`, read `.ai/skills/om-auto-create-pr/SKILL.md`, and keep task routes (`delivery-route-preserves-task-routes`).
93
+ Spec gate before code: new capability/architecture/schema/API contract/cross-module/multi-phase -> spec first (`spec-first`); covering `.ai/specs` match -> reuse and update it (`reuse-spec`); bug fix/minor fix/docs/dependency/isolated refactor -> proceed (`direct`); only the request's explicit words waive a feature spec; workflow-changing ambiguity -> ask once (`ask`). Then `om-module-scaffold` starts at `src/modules/example/README.md`.
94
+
95
+ Read `.agents/skills/<id>/SKILL.md` AND any `.ai/skills/<id>/SKILL.md` override. Commit+ready PR MUST add `spec-pr`, read `.ai/skills/om-auto-create-pr/SKILL.md`, and keep task routes (`delivery-route-preserves-task-routes`).
94
96
 
95
97
  | Route ID | Delivery need | Skill |
96
98
  |---|---|---|
97
- | `spec-pr` | Write/revise spec | MUST invoke `om-spec-writing` (OMH-005) + `.ai/guides/spec-delivery.md` + config specs path |
98
- | `spec-pr` | Implement approved phases locally | `om-implement-spec` (OMH-006) |
99
- | `spec-pr` | Whole-spec / commit+ready PR / issue / review | `om-auto-implement-spec` / `om-auto-create-pr` / `om-auto-fix-issue` / `om-auto-review-pr` |
100
- | `testing` | Integration/E2E/UI QA | `om-integration-tests` / `om-auto-qa-pr` |
101
- | — | No PR/spec workflow requested | Do not load delivery skills |
102
-
103
- Absent skill: run `yarn install-skills` once; never substitute.
99
+ | `spec-pr` | Write/revise spec | MUST invoke `om-spec-writing` (OMH-005) + `.ai/guides/spec-delivery.md` |
100
+ | `spec-pr` | Local phases / whole-spec / PR / issue / review | `om-implement-spec` (OMH-006) / `om-auto-implement-spec` / `om-auto-create-pr` / `om-auto-fix-issue` / `om-auto-review-pr` |
101
+ | — | No PR/spec workflow | Do not load delivery skills |
104
102
 
105
103
  ### Token-Efficient Assembly Policy
106
104
 
107
105
  - Load matched guides once, then only needed references/facts.
108
106
  - Hard budgets: guide > skill > references; open a reference only for its named subject.
109
- - Specs: open one match; `spec-pr` reads template via spec-delivery.
107
+ - `spec-pr` reads template via spec-delivery.
110
108
  - Inspect app call sites before bounded `framework-context`.
111
109
  - Additive page/form/table/conflict UI skips it.
112
110
  - Never bulk-read guide, skill, fact, or source trees.
@@ -120,9 +118,7 @@ Load facts for every named/targeted module, not incidental use. Mechanisms: even
120
118
 
121
119
  ## Working Sequence
122
120
 
123
- 1. `spec-pr`: list `.ai/specs` once; open one match; plan-only skips specs.
124
- 2. Route; load only matched guides/skills/facts.
125
- 3. Implement the smallest complete slice through real call sites.
126
- 4. Discovery change: run `yarn generate`; then the smallest gate/integration paths.
121
+ 1. Route, then implement the smallest complete slice through real call sites.
122
+ 2. Discovery change: run `yarn generate`; then the smallest gate/integration paths.
127
123
 
128
124
  Precedence: root → BC → installed `AGENTS.md` → facts; stop on skew/conflict; never guess.
@@ -1,6 +1,6 @@
1
1
  # Agent harness evaluations
2
2
 
3
- `cases.json` is the 214-case standalone-app contract. Run `yarn harness:validate --all` for the deterministic gate. Live routing uses a fresh read-only process per case:
3
+ `cases.json` is the 229-case standalone-app contract. Run `yarn harness:validate --all` for the deterministic gate. Live routing uses a fresh read-only process per case:
4
4
 
5
5
  UMES routing is fact-first. The additive and unified-override audit evaluations, plus their targeted cases, resolve exact/pattern hosts, outgoing contributions, correlation provenance, round-trip groups, framework-owned targets, and override domain/key/mode from the generated module sheets and `.ai/guides/framework-extension-points.md` before bounded installed source. The repository UMES umbrella spec may appear as optional source-checkout provenance; it is never required in a standalone scaffold.
6
6
 
@@ -11,16 +11,16 @@ yarn harness:validate --runner claude --case OMH-009
11
11
 
12
12
  For an explicitly requested Codex comparison outside the blocking release matrix, pin both dimensions so the sanitized result is reproducible, for example `--model gpt-5.4-mini --reasoning-effort high`. The effort override is Codex-only; supported values are `minimal`, `low`, `medium`, `high`, and `xhigh`, and omitting it preserves the existing runner default. Measured high-effort mini runs legitimately exceed ten minutes on broad context, so that exact model/effort pair uses a 15-minute per-attempt floor; measured Claude/Sonnet runs use a 10-minute floor. Passing `--timeout` remains authoritative, and other routing runs retain the five-minute default.
13
13
 
14
- A blocking release selects one primary runner for every live lane. The optional portability runner must be different and receives only the exact 46-case representative read-only set:
14
+ A blocking release selects one primary runner for every live lane. The optional portability runner must be different and receives only the exact 48-case representative read-only set:
15
15
 
16
16
  ```text
17
17
  yarn harness:release --runner codex --prepare-targets /absolute/empty-release-targets --acknowledge-writes
18
18
  yarn harness:release --runner codex --portability-runner claude --prepare-targets /absolute/empty-release-targets --acknowledge-writes
19
19
  ```
20
20
 
21
- The primary runner owns all 214 routing cases, all 46 writable cases, and all generative-judge runs. No per-case fallback or mixed primary ownership is allowed. Omitting `--portability-runner` is valid and the sanitized report records `portabilityRunner: null`; explicitly requesting an unavailable or failing secondary runner fails that extended run.
21
+ The primary runner owns all 229 routing cases, all 48 writable cases, and all generative-judge runs. No per-case fallback or mixed primary ownership is allowed. Omitting `--portability-runner` is valid and the sanitized report records `portabilityRunner: null`; explicitly requesting an unavailable or failing secondary runner fails that extended run.
22
22
 
23
- Writable evaluation is intentionally opt-in. The expanded catalog has a 46-case writable release target, but only cases registered in `release-matrix.json` and backed by controller-owned fixtures and oracles are executable. Copy or create a fresh standalone app for one registered case, then seed only that case and mark the target disposable:
23
+ Writable evaluation is intentionally opt-in. The expanded catalog has a 48-case writable release target, but only cases registered in `release-matrix.json` and backed by controller-owned fixtures and oracles are executable. Copy or create a fresh standalone app for one registered case, then seed only that case and mark the target disposable:
24
24
 
25
25
  ```text
26
26
  yarn harness:fixture --case OMH-009 --target /absolute/disposable/app --acknowledge-writes
@@ -6,7 +6,7 @@ Run the complete per-release gate from a generated standalone app with one comma
6
6
  yarn harness:release --runner codex --prepare-targets /absolute/empty-release-targets --acknowledge-writes
7
7
  ```
8
8
 
9
- Choose exactly one blocking primary runner with `--runner codex` or `--runner claude`. That runner owns the complete 214-case routing gate and every writable/review lane. To add cross-model portability evidence, explicitly pass the other runner as `--portability-runner claude` or `--portability-runner codex`; it runs only the exact 46-case representative read-only set. The two runners must differ. Omitting the portability option is valid and is recorded as `portabilityRunner: null`; no secondary result is claimed. There is no per-case fallback or mixed primary ownership. Once requested, a portability failure or unavailable runner fails that extended release run.
9
+ Choose exactly one blocking primary runner with `--runner codex` or `--runner claude`. That runner owns the complete 229-case routing gate and every writable/review lane. To add cross-model portability evidence, explicitly pass the other runner as `--portability-runner claude` or `--portability-runner codex`; it runs only the exact 48-case representative read-only set. The two runners must differ. Omitting the portability option is valid and is recorded as `portabilityRunner: null`; no secondary result is claimed. There is no per-case fallback or mixed primary ownership. Once requested, a portability failure or unavailable runner fails that extended release run.
10
10
 
11
11
  `--prepare-targets` accepts only an absolute, new or empty regular directory outside the controller app. The controller must be a sanitized fresh scaffold: automatic preparation fails before copying when it finds `.env`, `.env.*` (except `.env.example`, `.env.sample`, and `.env.template`), credential files, or private-key files. Never use a configured development or production app as the controller. It copies the fresh scaffold once per catalog case whose `evaluationKind` is `implementation` or `regression`, while excluding `.git`, `node_modules`, build/cache/coverage output, `.ai/harness/results`, `.ai/reports`, and `.ai/framework-context`. Each target receives a guarded link to the controller's installed dependency tree. The OS sandbox resolves that link as read-only during both the writable model run and the target command gate. The release gate also hashes every dependency entry and regular-file body once before execution and once after the complete suite, and fails if any nested content or metadata changed. A generated `release-targets.json` records the local mapping.
12
12
 
@@ -34,17 +34,17 @@ For externally prepared apps, `--writable-targets /absolute/release-targets.json
34
34
  }
35
35
  ```
36
36
 
37
- The current catalog contains 214 cases, including 46 writable implementation/regression cases (21.5%). The command still derives all counts and case IDs from `cases.json`, `validators.json`, and `release-matrix.json`; those figures are documented release facts, not runner constants. The matrix keeps both supported runner model selectors, an exact all-case primary profile, an exact 46-case portability profile, and runner-neutral writable assignments. Run `yarn install-skills` first so the pinned external `om-code-review` skill and ownership evidence are present; the reusable local `om-judge-agent-session` skill ships with the scaffold. Before running a model or writing a fixture, the release command requires complete deterministic, primary live-routing, writable, trusted-oracle, target, generated-test, and generative-judge coverage. Every one of the 46 writable cases must have a judge assignment composing both skills. Missing business fixtures or release-matrix entries fail preflight and are listed by exact case ID in the report.
37
+ The current catalog contains 229 cases, including 48 writable implementation/regression cases (21.0%). The command still derives all counts and case IDs from `cases.json`, `validators.json`, and `release-matrix.json`; those figures are documented release facts, not runner constants. The matrix keeps both supported runner model selectors, an exact all-case primary profile, an exact 48-case portability profile, and runner-neutral writable assignments. Run `yarn install-skills` first so the pinned external `om-code-review` skill and ownership evidence are present; the reusable local `om-judge-agent-session` skill ships with the scaffold. Before running a model or writing a fixture, the release command requires complete deterministic, primary live-routing, writable, trusted-oracle, target, generated-test, and generative-judge coverage. Every one of the 48 writable cases must have a judge assignment composing both skills. Missing business fixtures or release-matrix entries fail preflight and are listed by exact case ID in the report.
38
38
 
39
39
  ## PR #4529 remediation evidence
40
40
 
41
- The PR's focused remediation evidence is not a release-certification substitute. Fresh emitted controllers pass deterministic 192/192, and the field-tested OMH-188–192 generative cohort passes on default Codex, Claude Sonnet, and high-effort gpt-5.4-mini. Fresh OMH-185 writable attempts fixed concrete organization-scope, command-object, module-activation, command-snapshot, schema, custom-field, UI, and Jest guidance defects at their routed owners without relaxing trusted oracles. The final attempt reached the case's fixed 600-second ceiling and is excluded from pass evidence. Issue #4670 now owns the complete selected-primary 214-case routing and 46-case writable/generated-test/review certification, prioritizing the generative cohort and recording unavailable Claude lanes without fallback or mixed-runner ownership.
41
+ The PR's focused remediation evidence is not a release-certification substitute. Fresh emitted controllers pass deterministic 192/192, and the field-tested OMH-188–192 generative cohort passes on default Codex, Claude Sonnet, and high-effort gpt-5.4-mini. Fresh OMH-185 writable attempts fixed concrete organization-scope, command-object, module-activation, command-snapshot, schema, custom-field, UI, and Jest guidance defects at their routed owners without relaxing trusted oracles. The final attempt reached the case's fixed 600-second ceiling and is excluded from pass evidence. Issue #4670 now owns the complete selected-primary 229-case routing and 48-case writable/generated-test/review certification, prioritizing the generative cohort and recording unavailable Claude lanes without fallback or mixed-runner ownership.
42
42
 
43
43
  After preflight it runs, in order:
44
44
 
45
45
  1. deterministic validation for the complete catalog;
46
46
  2. the release matrix's fixed `yarn generate`, `yarn typecheck`, `yarn lint`, and `yarn build` foundation;
47
- 3. the selected primary runner across all 214 live-routing cases, followed by the optional distinct portability runner across the exact 46-case read-only sample when requested;
47
+ 3. the selected primary runner across all 229 live-routing cases, followed by the optional distinct portability runner across the exact 48-case read-only sample when requested;
48
48
  4. fixture preparation and the selected primary runner for every writable case, including the controller-owned AST/behavior oracles and target typecheck;
49
49
  5. `yarn generate`, `yarn typecheck`, `yarn lint`, and `yarn build` in every writable target, after its trusted oracles;
50
50
  6. real generated-code execution for OMH-163 and OMH-192 through fixed Jest, OMH-164 through API-only Playwright, and OMH-165 through real-browser Playwright; and