@open-mercato/cli 0.6.8-develop.6925.1.cefa200fa4 → 0.6.8-develop.6931.1.4a1e1c786b

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 (70) hide show
  1. package/.turbo/turbo-build.log +3 -2
  2. package/dist/agentic/guides/module-facts.json +4970 -111
  3. package/dist/agentic/guides/modules/ai_assistant.md +1 -1
  4. package/dist/agentic/guides/modules/api_docs.md +1 -1
  5. package/dist/agentic/guides/modules/api_keys.md +1 -1
  6. package/dist/agentic/guides/modules/attachments.md +5 -2
  7. package/dist/agentic/guides/modules/audit_logs.md +1 -1
  8. package/dist/agentic/guides/modules/auth.md +1 -1
  9. package/dist/agentic/guides/modules/business_rules.md +1 -1
  10. package/dist/agentic/guides/modules/catalog.md +4 -1
  11. package/dist/agentic/guides/modules/channel_gmail.md +1 -1
  12. package/dist/agentic/guides/modules/channel_imap.md +1 -1
  13. package/dist/agentic/guides/modules/checkout.md +1 -1
  14. package/dist/agentic/guides/modules/communication_channels.md +1 -1
  15. package/dist/agentic/guides/modules/configs.md +1 -1
  16. package/dist/agentic/guides/modules/content.md +1 -1
  17. package/dist/agentic/guides/modules/currencies.md +1 -1
  18. package/dist/agentic/guides/modules/customer_accounts.md +1 -1
  19. package/dist/agentic/guides/modules/customers.md +5 -1
  20. package/dist/agentic/guides/modules/dashboards.md +1 -1
  21. package/dist/agentic/guides/modules/data_sync.md +1 -1
  22. package/dist/agentic/guides/modules/design_system.md +1 -1
  23. package/dist/agentic/guides/modules/dictionaries.md +1 -1
  24. package/dist/agentic/guides/modules/directory.md +1 -1
  25. package/dist/agentic/guides/modules/entities.md +1 -1
  26. package/dist/agentic/guides/modules/eudr.md +363 -0
  27. package/dist/agentic/guides/modules/events.md +1 -1
  28. package/dist/agentic/guides/modules/feature_toggles.md +1 -1
  29. package/dist/agentic/guides/modules/gateway_stripe.md +1 -1
  30. package/dist/agentic/guides/modules/generators.md +1 -1
  31. package/dist/agentic/guides/modules/inbox_ops.md +1 -1
  32. package/dist/agentic/guides/modules/integrations.md +1 -1
  33. package/dist/agentic/guides/modules/messages.md +1 -1
  34. package/dist/agentic/guides/modules/notifications.md +1 -1
  35. package/dist/agentic/guides/modules/onboarding.md +1 -1
  36. package/dist/agentic/guides/modules/payment_gateways.md +1 -1
  37. package/dist/agentic/guides/modules/perspectives.md +1 -1
  38. package/dist/agentic/guides/modules/planner.md +1 -1
  39. package/dist/agentic/guides/modules/portal.md +1 -1
  40. package/dist/agentic/guides/modules/progress.md +1 -1
  41. package/dist/agentic/guides/modules/query_index.md +1 -1
  42. package/dist/agentic/guides/modules/record_locks.md +1 -1
  43. package/dist/agentic/guides/modules/resources.md +1 -1
  44. package/dist/agentic/guides/modules/sales.md +1 -1
  45. package/dist/agentic/guides/modules/scheduler.md +1 -1
  46. package/dist/agentic/guides/modules/search.md +1 -1
  47. package/dist/agentic/guides/modules/security.md +1 -1
  48. package/dist/agentic/guides/modules/shipping_carriers.md +1 -1
  49. package/dist/agentic/guides/modules/sso.md +1 -1
  50. package/dist/agentic/guides/modules/staff.md +1 -1
  51. package/dist/agentic/guides/modules/storage_s3.md +1 -1
  52. package/dist/agentic/guides/modules/sync_akeneo.md +1 -1
  53. package/dist/agentic/guides/modules/sync_excel.md +1 -1
  54. package/dist/agentic/guides/modules/system_status_overlays.md +1 -1
  55. package/dist/agentic/guides/modules/translations.md +1 -1
  56. package/dist/agentic/guides/modules/webhooks.md +1 -1
  57. package/dist/agentic/guides/modules/wms.md +1 -1
  58. package/dist/agentic/guides/modules/workflows.md +1 -1
  59. package/dist/agentic/guides/upstream/manifest.json +1 -1
  60. package/dist/agentic/shared/ai/harness/README.md +2 -2
  61. package/dist/agentic/shared/ai/harness/RELEASE.md +4 -4
  62. package/dist/agentic/shared/ai/harness/cases.json +86 -0
  63. package/dist/agentic/shared/ai/harness/cases.schema.json +3 -3
  64. package/dist/agentic/shared/ai/harness/validators.json +1 -1
  65. package/dist/agentic/shared/scripts/check-lessons.mjs +5 -1
  66. package/dist/lib/testing/integration.js +10 -0
  67. package/dist/lib/testing/integration.js.map +2 -2
  68. package/package.json +6 -6
  69. package/src/lib/generators/__tests__/module-facts.bc-guard.test.ts +8 -2
  70. package/src/lib/testing/integration.ts +10 -0
@@ -1,5 +1,5 @@
1
1
  # record_locks — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/enterprise 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/enterprise 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/enterprise/src/modules/record_locks](../../../node_modules/@open-mercato/enterprise/src/modules/record_locks)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # resources — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/core 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/core 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/core/src/modules/resources](../../../node_modules/@open-mercato/core/src/modules/resources)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # sales — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/core 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/core 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/core/src/modules/sales](../../../node_modules/@open-mercato/core/src/modules/sales)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # scheduler — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/scheduler 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/scheduler 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/scheduler/src/modules/scheduler](../../../node_modules/@open-mercato/scheduler/src/modules/scheduler)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # search — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/search 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/search 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/search/src/modules/search](../../../node_modules/@open-mercato/search/src/modules/search)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # security — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/enterprise 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/enterprise 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/enterprise/src/modules/security](../../../node_modules/@open-mercato/enterprise/src/modules/security)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # shipping_carriers — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/core 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/core 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/core/src/modules/shipping_carriers](../../../node_modules/@open-mercato/core/src/modules/shipping_carriers)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # sso — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/enterprise 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/enterprise 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/enterprise/src/modules/sso](../../../node_modules/@open-mercato/enterprise/src/modules/sso)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # staff — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/core 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/core 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/core/src/modules/staff](../../../node_modules/@open-mercato/core/src/modules/staff)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # storage_s3 — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/storage-s3 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/storage-s3 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/storage-s3/src/modules/storage_s3](../../../node_modules/@open-mercato/storage-s3/src/modules/storage_s3)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # sync_akeneo — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/sync-akeneo 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/sync-akeneo 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/sync-akeneo/src/modules/sync_akeneo](../../../node_modules/@open-mercato/sync-akeneo/src/modules/sync_akeneo)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # sync_excel — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/core 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/core 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/core/src/modules/sync_excel](../../../node_modules/@open-mercato/core/src/modules/sync_excel)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # system_status_overlays — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/enterprise 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/enterprise 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/enterprise/src/modules/system_status_overlays](../../../node_modules/@open-mercato/enterprise/src/modules/system_status_overlays)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # translations — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/core 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/core 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/core/src/modules/translations](../../../node_modules/@open-mercato/core/src/modules/translations)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # webhooks — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/webhooks 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/webhooks 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/webhooks/src/modules/webhooks](../../../node_modules/@open-mercato/webhooks/src/modules/webhooks)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # wms — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/core 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/core 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/core/src/modules/wms](../../../node_modules/@open-mercato/core/src/modules/wms)
4
4
 
5
5
  ## Entities
@@ -1,5 +1,5 @@
1
1
  # workflows — module facts (generated, do not edit)
2
- <!-- generated from @open-mercato/core 0.6.8-develop.6925.1.cefa200fa4; core 0.6.8-develop.6925.1.cefa200fa4 — R1 staleness stamp -->
2
+ <!-- generated from @open-mercato/core 0.6.8-develop.6931.1.4a1e1c786b; core 0.6.8-develop.6931.1.4a1e1c786b — R1 staleness stamp -->
3
3
  Source root: [node_modules/@open-mercato/core/src/modules/workflows](../../../node_modules/@open-mercato/core/src/modules/workflows)
4
4
 
5
5
  ## Entities
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generator": "@open-mercato/cli@0.6.8-develop.6925.1.cefa200fa4",
3
+ "generator": "@open-mercato/cli@0.6.8-develop.6931.1.4a1e1c786b",
4
4
  "files": {
5
5
  "AGENTS.md": "b781066684c8b92ef1e1fc7114252cd29a7a546a70eea6f30ddecf4ad35f578c",
6
6
  "BACKWARD_COMPATIBILITY.md": "968ac7ab472dd58fe69cd3f9720e90d0a6f14d1faa2bf92544c5b3ee0e78f9fb"
@@ -1,6 +1,6 @@
1
1
  # Agent harness evaluations
2
2
 
3
- `cases.json` is the 213-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 214-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
 
@@ -18,7 +18,7 @@ yarn harness:release --runner codex --prepare-targets /absolute/empty-release-ta
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 213 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 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.
22
22
 
23
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:
24
24
 
@@ -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 213-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 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.
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 213 cases, including 46 writable implementation/regression cases (21.6%). 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 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.
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 213-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 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.
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 213 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 214 live-routing cases, followed by the optional distinct portability runner across the exact 46-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
@@ -14497,5 +14497,91 @@
14497
14497
  "OMH-002",
14498
14498
  "OMH-194"
14499
14499
  ]
14500
+ },
14501
+ {
14502
+ "id": "OMH-214",
14503
+ "title": "Use the installed EUDR compliance workflow instead of building a duplicate module",
14504
+ "family": "architecture",
14505
+ "mode": "analysis",
14506
+ "evaluationKind": "routing",
14507
+ "risk": "high",
14508
+ "prompt": "In a freshly scaffolded standalone Open Mercato app, compliance staff need to map catalog products to EUDR commodities, collect supplier evidence and geolocated plots, assess and mitigate risk, and prepare due-diligence statements and annual reports. Decide the smallest safe design against what the installed modules already provide, say how that capability is activated for this application, keep tenant and organization boundaries intact, state the access-control posture for viewing versus managing compliance records, and identify the smallest relevant validation. Do not build a duplicate compliance module before establishing whether an installed module already owns this capability.",
14509
+ "tags": [
14510
+ "architecture",
14511
+ "module-facts",
14512
+ "reuse-installed",
14513
+ "eudr-compliance"
14514
+ ],
14515
+ "owner": {
14516
+ "kind": "facts",
14517
+ "path": ".ai/guides/modules/eudr.md",
14518
+ "ruleIds": [
14519
+ "BC-01",
14520
+ "BC-04"
14521
+ ]
14522
+ },
14523
+ "expectedRouter": {
14524
+ "required": [
14525
+ "architecture"
14526
+ ],
14527
+ "allowedExtra": [
14528
+ "module-data",
14529
+ "backend-ui",
14530
+ "umes",
14531
+ "framework-context"
14532
+ ]
14533
+ },
14534
+ "requiredSkills": [
14535
+ "om-help"
14536
+ ],
14537
+ "context": {
14538
+ "required": [
14539
+ "AGENTS.md",
14540
+ ".ai/guides/architecture.md",
14541
+ ".ai/skills/om-help/SKILL.md",
14542
+ ".ai/guides/modules/eudr.md"
14543
+ ],
14544
+ "allowedExtra": [
14545
+ ".ai/guides/contracts.md",
14546
+ ".ai/guides/extensions.md",
14547
+ ".ai/guides/backend-ui.md",
14548
+ ".ai/skills/om-data-model-design/SKILL.md"
14549
+ ],
14550
+ "warn": [
14551
+ "node_modules/@open-mercato/*/src/**"
14552
+ ],
14553
+ "forbidden": [
14554
+ ".env*",
14555
+ ".git/**"
14556
+ ]
14557
+ },
14558
+ "requiredDecisions": [
14559
+ "facts-first",
14560
+ "app-module-activation",
14561
+ "tenant-scope",
14562
+ "acl-features",
14563
+ "smallest-validation"
14564
+ ],
14565
+ "forbiddenPatterns": [
14566
+ "node_modules.{0,40}(?:write|edit|patch)",
14567
+ "(?:tenant|organization).{0,30}(?:unscoped|scope optional)"
14568
+ ],
14569
+ "validators": [
14570
+ "catalog.schema",
14571
+ "owner.reference",
14572
+ "skills.reference",
14573
+ "router.contract",
14574
+ "context.budget",
14575
+ "context.forbidden",
14576
+ "patterns.forbidden"
14577
+ ],
14578
+ "maxContextFiles": 12,
14579
+ "maxInitialContextBytes": 57344,
14580
+ "maxTotalContextBytes": 147456,
14581
+ "relatedCases": [
14582
+ "OMH-002",
14583
+ "OMH-194",
14584
+ "OMH-202"
14585
+ ]
14500
14586
  }
14501
14587
  ]
@@ -3,8 +3,8 @@
3
3
  "$id": "https://open-mercato.dev/schemas/standalone-harness-cases.schema.json",
4
4
  "title": "Open Mercato standalone harness case catalog",
5
5
  "type": "array",
6
- "minItems": 213,
7
- "maxItems": 213,
6
+ "minItems": 214,
7
+ "maxItems": 214,
8
8
  "items": {
9
9
  "type": "object",
10
10
  "additionalProperties": false,
@@ -15,7 +15,7 @@
15
15
  "maxTotalContextBytes", "relatedCases"
16
16
  ],
17
17
  "properties": {
18
- "id": { "type": "string", "pattern": "^OMH-(00[1-9]|0[1-9][0-9]|1[0-9][0-9]|20[0-9]|21[0-3])$" },
18
+ "id": { "type": "string", "pattern": "^OMH-(00[1-9]|0[1-9][0-9]|1[0-9][0-9]|20[0-9]|21[0-4])$" },
19
19
  "title": { "type": "string", "minLength": 12, "maxLength": 180 },
20
20
  "family": { "enum": ["architecture", "module", "umes", "integration", "ai-workflow", "bugfix", "business", "testing"] },
21
21
  "mode": { "enum": ["analysis", "one-shot", "spec", "bugfix", "review"] },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "catalog": {
4
- "expectedCaseCount": 213,
4
+ "expectedCaseCount": 214,
5
5
  "maxContextFiles": 16,
6
6
  "maxInitialContextBytes": 98304,
7
7
  "maxTotalContextBytes": 262144,
@@ -17,7 +17,11 @@ export const LESSON_AREAS = new Set([
17
17
  'spec-pr',
18
18
  ])
19
19
 
20
- const INDEX_MAX_BYTES = 30 * 1024
20
+ // Raised from 30 KiB when the catalog legitimately reached 119 records and overran the
21
+ // old cap by 5 bytes. The budget exists to keep the index cheap to load in full, not to
22
+ // cap how many lessons the repo may accumulate — trimming real rows to fit would defeat
23
+ // the routing the catalog exists to provide.
24
+ const INDEX_MAX_BYTES = 32 * 1024
21
25
  const RECORD_NAME_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*\.md$/
22
26
  const MODULE_PATTERN = /^[a-z0-9]+(?:_[a-z0-9]+)*$/
23
27
  const TOPIC_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/
@@ -1472,6 +1472,12 @@ function buildReusableEnvironment(baseUrl, databaseUrl, queueBaseDir, captureScr
1472
1472
  // not have to call flushPendingCrudAccessLogs() explicitly.
1473
1473
  OM_CRUD_ACCESS_LOG_BLOCKING: process.env.OM_CRUD_ACCESS_LOG_BLOCKING ?? "1",
1474
1474
  OM_WEBHOOKS_ALLOW_PRIVATE_URLS: process.env.OM_WEBHOOKS_ALLOW_PRIVATE_URLS ?? "1",
1475
+ // TC-ONB-001/002 drive the self-service signup flow, whose routes are not
1476
+ // mounted while the feature is off. `apps/mercato/.env` ships it disabled,
1477
+ // so both specs 404'd on every local run while CI stayed green — it exports
1478
+ // the var at the workflow level, the same gap the MOCK_INBOUND_WEBHOOK_SECRET
1479
+ // note below describes. Keep in sync with the app-server env block.
1480
+ SELF_SERVICE_ONBOARDING_ENABLED: process.env.SELF_SERVICE_ONBOARDING_ENABLED ?? "true",
1475
1481
  // Keep the bus in the Playwright process (used by in-test queue-drain helpers)
1476
1482
  // on the same delivery mode as the app server it drives: inline persistent
1477
1483
  // delivery so event side effects are deterministic for assertions. See the
@@ -2645,6 +2651,10 @@ async function startEphemeralEnvironment(options) {
2645
2651
  OM_TEST_AUTH_RATE_LIMIT_MODE: "opt-in",
2646
2652
  OM_DISABLE_EMAIL_DELIVERY: "1",
2647
2653
  OM_WEBHOOKS_ALLOW_PRIVATE_URLS: process.env.OM_WEBHOOKS_ALLOW_PRIVATE_URLS ?? "1",
2654
+ // Read at build time as well as at runtime, so this block has to carry it:
2655
+ // the app build and `yarn start` both run with this environment. See the
2656
+ // matching note on the Playwright-process env block above.
2657
+ SELF_SERVICE_ONBOARDING_ENABLED: process.env.SELF_SERVICE_ONBOARDING_ENABLED ?? "true",
2648
2658
  ENABLE_CRUD_API_CACHE: "true",
2649
2659
  MOCK_GATEWAY_WEBHOOK_SECRET: "open-mercato-mock-dev-webhook-secret",
2650
2660
  MOCK_CARRIER_WEBHOOK_SECRET: "open-mercato-mock-dev-carrier-webhook-secret",