@open-mercato/cli 0.8.1-develop.7454.1.010095490f → 0.8.1-develop.7455.1.8f7e53badb

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 (101) hide show
  1. package/dist/agentic/guides/customers-calendar.md +57 -0
  2. package/dist/agentic/guides/extensions.md +2 -0
  3. package/dist/agentic/guides/module-facts.json +289 -157
  4. package/dist/agentic/guides/module-facts.v2.json +289 -157
  5. package/dist/agentic/guides/modules/agent_orchestrator/index.md +1 -1
  6. package/dist/agentic/guides/modules/ai_assistant/index.md +1 -1
  7. package/dist/agentic/guides/modules/api_docs/index.md +1 -1
  8. package/dist/agentic/guides/modules/api_keys/index.md +1 -1
  9. package/dist/agentic/guides/modules/attachments/index.md +1 -1
  10. package/dist/agentic/guides/modules/audit_logs/index.md +1 -1
  11. package/dist/agentic/guides/modules/auth/index.md +1 -1
  12. package/dist/agentic/guides/modules/availability/index.md +1 -1
  13. package/dist/agentic/guides/modules/business_rules/index.md +1 -1
  14. package/dist/agentic/guides/modules/catalog/index.md +1 -1
  15. package/dist/agentic/guides/modules/channel_apns/index.md +1 -1
  16. package/dist/agentic/guides/modules/channel_discord/index.md +1 -1
  17. package/dist/agentic/guides/modules/channel_expo/index.md +1 -1
  18. package/dist/agentic/guides/modules/channel_fcm/index.md +1 -1
  19. package/dist/agentic/guides/modules/channel_gmail/index.md +1 -1
  20. package/dist/agentic/guides/modules/channel_imap/index.md +1 -1
  21. package/dist/agentic/guides/modules/channel_resend/index.md +1 -1
  22. package/dist/agentic/guides/modules/channel_ses/index.md +1 -1
  23. package/dist/agentic/guides/modules/checkout/index.md +1 -1
  24. package/dist/agentic/guides/modules/communication_channels/index.md +1 -1
  25. package/dist/agentic/guides/modules/configs/index.md +1 -1
  26. package/dist/agentic/guides/modules/content/index.md +1 -1
  27. package/dist/agentic/guides/modules/currencies/index.md +1 -1
  28. package/dist/agentic/guides/modules/customer_accounts/index.md +1 -1
  29. package/dist/agentic/guides/modules/customer_groups/index.md +1 -1
  30. package/dist/agentic/guides/modules/customers/active-extension-bindings.md +1 -1
  31. package/dist/agentic/guides/modules/customers/di-registrations-rich.md +5 -3
  32. package/dist/agentic/guides/modules/customers/exact-override-targets.md +5 -3
  33. package/dist/agentic/guides/modules/customers/index.md +2 -2
  34. package/dist/agentic/guides/modules/customers/umes-hosts.md +2 -0
  35. package/dist/agentic/guides/modules/dashboards/index.md +1 -1
  36. package/dist/agentic/guides/modules/data_sync/index.md +1 -1
  37. package/dist/agentic/guides/modules/design_system/index.md +1 -1
  38. package/dist/agentic/guides/modules/devices/index.md +1 -1
  39. package/dist/agentic/guides/modules/dictionaries/index.md +1 -1
  40. package/dist/agentic/guides/modules/directory/index.md +1 -1
  41. package/dist/agentic/guides/modules/documents/index.md +1 -1
  42. package/dist/agentic/guides/modules/entities/index.md +1 -1
  43. package/dist/agentic/guides/modules/eudr/index.md +1 -1
  44. package/dist/agentic/guides/modules/events/index.md +1 -1
  45. package/dist/agentic/guides/modules/feature_toggles/index.md +1 -1
  46. package/dist/agentic/guides/modules/forms/index.md +1 -1
  47. package/dist/agentic/guides/modules/gateway_stripe/index.md +1 -1
  48. package/dist/agentic/guides/modules/gateway_tpay/index.md +1 -1
  49. package/dist/agentic/guides/modules/generators/index.md +1 -1
  50. package/dist/agentic/guides/modules/inbox_ops/index.md +1 -1
  51. package/dist/agentic/guides/modules/integrations/index.md +1 -1
  52. package/dist/agentic/guides/modules/messages/index.md +1 -1
  53. package/dist/agentic/guides/modules/notifications/index.md +1 -1
  54. package/dist/agentic/guides/modules/onboarding/index.md +1 -1
  55. package/dist/agentic/guides/modules/payment_gateways/index.md +1 -1
  56. package/dist/agentic/guides/modules/perspectives/index.md +1 -1
  57. package/dist/agentic/guides/modules/phone_calls/index.md +1 -1
  58. package/dist/agentic/guides/modules/planner/index.md +1 -1
  59. package/dist/agentic/guides/modules/portal/index.md +1 -1
  60. package/dist/agentic/guides/modules/progress/index.md +1 -1
  61. package/dist/agentic/guides/modules/push_notifications/index.md +1 -1
  62. package/dist/agentic/guides/modules/query_index/index.md +1 -1
  63. package/dist/agentic/guides/modules/record_locks/index.md +1 -1
  64. package/dist/agentic/guides/modules/resources/index.md +1 -1
  65. package/dist/agentic/guides/modules/sales/index.md +1 -1
  66. package/dist/agentic/guides/modules/scheduler/index.md +1 -1
  67. package/dist/agentic/guides/modules/search/index.md +1 -1
  68. package/dist/agentic/guides/modules/security/index.md +1 -1
  69. package/dist/agentic/guides/modules/seeds/index.md +1 -1
  70. package/dist/agentic/guides/modules/shipping_carriers/index.md +1 -1
  71. package/dist/agentic/guides/modules/sso/index.md +1 -1
  72. package/dist/agentic/guides/modules/staff/index.md +1 -1
  73. package/dist/agentic/guides/modules/storage_s3/index.md +1 -1
  74. package/dist/agentic/guides/modules/sync_akeneo/index.md +1 -1
  75. package/dist/agentic/guides/modules/sync_excel/index.md +1 -1
  76. package/dist/agentic/guides/modules/system_status_overlays/index.md +1 -1
  77. package/dist/agentic/guides/modules/telemetry/index.md +1 -1
  78. package/dist/agentic/guides/modules/tillio/index.md +1 -1
  79. package/dist/agentic/guides/modules/translations/index.md +1 -1
  80. package/dist/agentic/guides/modules/warranty_claims/index.md +1 -1
  81. package/dist/agentic/guides/modules/webhooks/index.md +1 -1
  82. package/dist/agentic/guides/modules/wms/index.md +1 -1
  83. package/dist/agentic/guides/modules/workflows/index.md +1 -1
  84. package/dist/agentic/guides/reference-module-facts.json +269 -25
  85. package/dist/agentic/guides/reference-modules/example/active-extension-bindings.md +1 -0
  86. package/dist/agentic/guides/reference-modules/example/contribution-resolutions.md +7 -4
  87. package/dist/agentic/guides/reference-modules/example/di-registrations-rich.md +3 -2
  88. package/dist/agentic/guides/reference-modules/example/di-service-tokens.md +1 -1
  89. package/dist/agentic/guides/reference-modules/example/exact-override-targets.md +10 -6
  90. package/dist/agentic/guides/reference-modules/example/index.md +4 -4
  91. package/dist/agentic/guides/reference-modules/example/umes-contributions.md +8 -5
  92. package/dist/agentic/guides/upstream/BACKWARD_COMPATIBILITY.md +1 -0
  93. package/dist/agentic/guides/upstream/manifest.json +2 -2
  94. package/dist/agentic/shared/ai/harness/README.md +4 -2
  95. package/dist/agentic/shared/ai/harness/RELEASE.md +4 -4
  96. package/dist/agentic/shared/ai/harness/cases.json +292 -34
  97. package/dist/agentic/shared/ai/harness/cases.schema.json +4 -4
  98. package/dist/agentic/shared/ai/harness/design-system-inventory.json +63 -3
  99. package/dist/agentic/shared/ai/harness/source-link-inventory.json +316 -8
  100. package/dist/agentic/shared/ai/harness/validators.json +1 -1
  101. package/package.json +7 -7
@@ -23,8 +23,9 @@
23
23
  | cli | `overrides.cli["seed-todos"]` | disable-replace | cliCommands:seed-todos | [cli.ts](../../../../src/modules/example/cli.ts) |
24
24
  | commandInterceptors | `overrides.commandInterceptors["example.audit-logging"]` | disable-replace | extensionSurfaces.contributions:example.audit-logging | [commands/interceptors.ts](../../../../src/modules/example/commands/interceptors.ts) |
25
25
  | commandInterceptors | `overrides.commandInterceptors["example.todo-update-audit"]` | disable-replace | extensionSurfaces.contributions:example.todo-update-audit | [commands/interceptors.ts](../../../../src/modules/example/commands/interceptors.ts) |
26
- | di | `overrides.di["exampleCurrencyRateProvider"]` | disable-replace | ownedContracts.di-registration:exampleCurrencyRateProvider | [di.ts:38](../../../../src/modules/example/di.ts#L38) |
27
- | di | `overrides.di["exampleTodoSummaryService"]` | disable-replace | ownedContracts.di-registration:exampleTodoSummaryService | [di.ts:37](../../../../src/modules/example/di.ts#L37) |
26
+ | di | `overrides.di["commandBus"]` | disable-replace | ownedContracts.di-registration:commandBus | [di.ts:49](../../../../src/modules/example/di.ts#L49) |
27
+ | di | `overrides.di["exampleCurrencyRateProvider"]` | disable-replace | ownedContracts.di-registration:exampleCurrencyRateProvider | [di.ts:61](../../../../src/modules/example/di.ts#L61) |
28
+ | di | `overrides.di["exampleTodoSummaryService"]` | disable-replace | ownedContracts.di-registration:exampleTodoSummaryService | [di.ts:60](../../../../src/modules/example/di.ts#L60) |
28
29
  | encryption | `overrides.encryption.maps["example:todo"]` | disable-replace | ownedContracts.encryption:example:todo | [encryption.ts:21](../../../../src/modules/example/encryption.ts#L21) |
29
30
  | enrichers | `overrides.enrichers["example.customer-todo-count"]` | disable-replace | extensionSurfaces.contributions:example.customer-todo-count | [data/enrichers.ts](../../../../src/modules/example/data/enrichers.ts) |
30
31
  | events | `overrides.events.subscribers["example:announce-todo-to-portal"]` | disable-replace | extensionSurfaces.contributions:example:announce-todo-to-portal | [subscribers/announce-todo-to-portal.ts](../../../../src/modules/example/subscribers/announce-todo-to-portal.ts) |
@@ -66,13 +67,15 @@
66
67
  | setup | `overrides.setup.onTenantCreated` | replace | ownedContracts.setup:example:setup | [setup.ts:104](../../../../src/modules/example/setup.ts#L104) |
67
68
  | setup | `overrides.setup.seedDefaults` | replace | ownedContracts.setup:example:setup | [setup.ts:104](../../../../src/modules/example/setup.ts#L104) |
68
69
  | setup | `overrides.setup.seedExamples` | replace | ownedContracts.setup:example:setup | [setup.ts:104](../../../../src/modules/example/setup.ts#L104) |
69
- | widgets | `overrides.widgets.components["section:checkout.pay-page.help"]` | disable-replace | extensionSurfaces.contributions:example.component-override.2:section:checkout.pay-page.help | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
70
- | widgets | `overrides.widgets.components["section:checkout.pay-page.summary"]` | disable-replace | extensionSurfaces.contributions:example.component-override.1:section:checkout.pay-page.summary | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
71
- | widgets | `overrides.widgets.components["section:example.overrides.showcase"]` | disable-replace | extensionSurfaces.contributions:example.component-override.3:section:example.overrides.showcase | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
72
- | widgets | `overrides.widgets.components["section:ui.detail.NotesSection"]` | disable-replace | extensionSurfaces.contributions:example.component-override.0:section:ui.detail.NotesSection | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
70
+ | widgets | `overrides.widgets.components["section:checkout.pay-page.help"]` | disable-replace | extensionSurfaces.contributions:example.component-override.3:section:checkout.pay-page.help | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
71
+ | widgets | `overrides.widgets.components["section:checkout.pay-page.summary"]` | disable-replace | extensionSurfaces.contributions:example.component-override.2:section:checkout.pay-page.summary | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
72
+ | widgets | `overrides.widgets.components["section:customers.calendar-event-editor.type-panel"]` | disable-replace | extensionSurfaces.contributions:example.component-override.0:section:customers.calendar-event-editor.type-panel | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
73
+ | widgets | `overrides.widgets.components["section:example.overrides.showcase"]` | disable-replace | extensionSurfaces.contributions:example.component-override.4:section:example.overrides.showcase | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
74
+ | widgets | `overrides.widgets.components["section:ui.detail.NotesSection"]` | disable-replace | extensionSurfaces.contributions:example.component-override.1:section:ui.detail.NotesSection | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
73
75
  | widgets | `overrides.widgets.dashboard["example.dashboard.notes"]` | disable-replace | extensionSurfaces.contributions:dashboard:example.dashboard.notes | [widgets/dashboard/notes/widget.ts](../../../../src/modules/example/widgets/dashboard/notes/widget.ts) |
74
76
  | widgets | `overrides.widgets.dashboard["example.dashboard.todos"]` | disable-replace | extensionSurfaces.contributions:dashboard:example.dashboard.todos | [widgets/dashboard/todos/widget.ts](../../../../src/modules/example/widgets/dashboard/todos/widget.ts) |
75
77
  | widgets | `overrides.widgets.dashboard["example.dashboard.welcome"]` | disable-replace | extensionSurfaces.contributions:dashboard:example.dashboard.welcome | [widgets/dashboard/welcome/widget.ts](../../../../src/modules/example/widgets/dashboard/welcome/widget.ts) |
78
+ | widgets | `overrides.widgets.injection["example.injection.calendar-visit"]` | disable-replace | extensionSurfaces.contributions:example.injection.calendar-visit@calendar:customers.event-types | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
76
79
  | widgets | `overrides.widgets.injection["example.injection.catalog-seo-report"]` | disable-replace | extensionSurfaces.contributions:example.injection.catalog-seo-report@data-table:catalog.products:header | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
77
80
  | widgets | `overrides.widgets.injection["example.injection.crud-validation"]` | disable-replace | extensionSurfaces.contributions:example.injection.crud-validation@example:phase-c-handlers | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
78
81
  | widgets | `overrides.widgets.injection["example.injection.crud-validation-addon"]` | disable-replace | extensionSurfaces.contributions:example.injection.crud-validation-addon@widget:example.injection.crud-validation:addon | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
@@ -89,6 +92,7 @@
89
92
  | widgets | `overrides.widgets.injection["example.injection.portal-stats"]` | disable-replace | extensionSurfaces.contributions:example.injection.portal-stats@portal:dashboard:sections | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
90
93
  | widgets | `overrides.widgets.injection["example.injection.sales-todos"]` | disable-replace | extensionSurfaces.contributions:example.injection.sales-todos@sales.document.detail.order:tabs | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
91
94
  | widgets | `overrides.widgets.injection["example.injection.todo-bulk-complete"]` | disable-replace | extensionSurfaces.contributions:example.injection.todo-bulk-complete@data-table:example.todos.list:bulk-actions | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
95
+ | widgets | `overrides.widgets.injection["example.injection.visit-availability"]` | disable-replace | extensionSurfaces.contributions:example.injection.visit-availability@crud-form:customers.customer_interaction | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
92
96
  | workers | `overrides.workers["example:todos-bulk-complete"]` | disable-replace | ownedContracts.worker:example:todos-bulk-complete | [workers/todos-bulk-complete.ts:14](../../../../src/modules/example/workers/todos-bulk-complete.ts#L14) |
93
97
  | workers | `overrides.workers["example:todos-bulk-dispatch"]` | disable-replace | ownedContracts.worker:example:todos-bulk-dispatch | [workers/todos-bulk-dispatch.ts:26](../../../../src/modules/example/workers/todos-bulk-dispatch.ts#L26) |
94
98
 
@@ -1,5 +1,5 @@
1
1
  # example — module facts (generated reference projection, do not edit)
2
- <!-- generated from local reference src/modules/example; source-fingerprint b427382fc619e65d7abc42709d1eeecf92e90de468b432c0828f815f6fa9fd3e; taxonomy-fingerprint 17b3c114c05a958cad75bdf9ac986887687e45f510b10927290f8a3cf643ca67 — R1 staleness stamp -->
2
+ <!-- generated from local reference src/modules/example; source-fingerprint 981546cca73f17f65f130c00b775972d809720bf7ca04e5c86137690cf3b1204; taxonomy-fingerprint 4c7ca54d447ac10312e9641b4c0c2eb1e340259a81eb04486e2e494533e7dedd — R1 staleness stamp -->
3
3
  > Reference projection: `example` is not selected by the current runtime. Its activations and exact override targets describe behavior only after opt-in in `src/modules.ts`.
4
4
  Source root: src/modules/example
5
5
 
@@ -14,15 +14,15 @@ Source root: src/modules/example
14
14
  - [Search entities](search-entities.md) — ~1 KB — Generated search entities facts for example.
15
15
  - [Host extension points](host-extension-points.md) — ~1 KB — Generated host extension points facts for example.
16
16
  - [UMES hosts](umes-hosts.md) — ~5 KB — Generated umes hosts facts for example.
17
- - [UMES contributions](umes-contributions.md) — ~22 KB — Generated umes contributions facts for example.
17
+ - [UMES contributions](umes-contributions.md) — ~23 KB — Generated umes contributions facts for example.
18
18
  - [Active extension bindings](active-extension-bindings.md) — ~5 KB — Generated active extension bindings facts for example.
19
- - [Contribution resolutions](contribution-resolutions.md) — ~17 KB — Generated contribution resolutions facts for example.
19
+ - [Contribution resolutions](contribution-resolutions.md) — ~18 KB — Generated contribution resolutions facts for example.
20
20
  - [UMES diagnostics](umes-diagnostics.md) — ~1 KB — Generated umes diagnostics facts for example.
21
21
  - [Notifications](notifications.md) — ~1 KB — Generated notifications facts for example.
22
22
  - [CLI commands](cli-commands.md) — ~1 KB — Generated cli commands facts for example.
23
23
  - [AI tools / MCP capabilities](ai-tools-mcp-capabilities.md) — ~1 KB — Generated ai tools / mcp capabilities facts for example.
24
24
  - [AI agents](ai-agents.md) — ~1 KB — Generated ai agents facts for example.
25
- - [Exact override targets](exact-override-targets.md) — ~20 KB — Generated exact override targets facts for example.
25
+ - [Exact override targets](exact-override-targets.md) — ~21 KB — Generated exact override targets facts for example.
26
26
  - [Owned contract — module metadata](owned-contract-module-metadata.md) — ~1 KB — Generated owned contract — module metadata facts for example.
27
27
  - [Domain commands](domain-commands.md) — ~1 KB — Generated domain commands facts for example.
28
28
  - [Workers](workers.md) — ~1 KB — Generated workers facts for example.
@@ -20,11 +20,12 @@
20
20
  | example.umes.actionable-toast | browser-reaction | example.umes.actionable | — | audienceScopeContract=tenant-organization-user-role-and-customer; hooks=useNotificationEffect; overrideKey=example.umes.actionable-toast; transports=notification-effect | fact-ref | [notifications.handlers.ts](../../../../src/modules/example/notifications.handlers.ts) |
21
21
  | example.audit-logging | command-interceptor | customers.* | before-execute, after-execute | phases=before-execute,after-execute; targetCommand=customers.* | pattern | [commands/interceptors.ts](../../../../src/modules/example/commands/interceptors.ts) |
22
22
  | example.todo-update-audit | command-interceptor | example.todos.update | before-execute | phases=before-execute; targetCommand=example.todos.update | fact-ref | [commands/interceptors.ts](../../../../src/modules/example/commands/interceptors.ts) |
23
- | example.component-override.0:section:ui.detail.NotesSection | component-override | section:ui.detail.NotesSection | — | handle=section:ui.detail.NotesSection; mode=wrapper; propsContract=component-props-schema | optional-external | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
24
- | example.component-override.1:section:checkout.pay-page.summary | component-override | section:checkout.pay-page.summary | — | handle=section:checkout.pay-page.summary; mode=wrapper; propsContract=component-props-schema | exact | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
25
- | example.component-override.2:section:checkout.pay-page.help | component-override | section:checkout.pay-page.help | — | handle=section:checkout.pay-page.help; mode=wrapper; propsContract=component-props-schema | exact | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
26
- | example.component-override.3:section:example.overrides.showcase | component-override | section:example.overrides.showcase | — | handle=section:example.overrides.showcase; mode=replace; propsContract=component-props-schema | exact | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
27
- | example.component-override.4:section:example.overrides.showcase | component-override | section:example.overrides.showcase | — | handle=section:example.overrides.showcase; mode=props; propsContract=component-props-schema | exact | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
23
+ | example.component-override.0:section:customers.calendar-event-editor.type-panel | component-override | section:customers.calendar-event-editor.type-panel | — | handle=section:customers.calendar-event-editor.type-panel; mode=wrapper; propsContract=component-props-schema | exact | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
24
+ | example.component-override.1:section:ui.detail.NotesSection | component-override | section:ui.detail.NotesSection | — | handle=section:ui.detail.NotesSection; mode=wrapper; propsContract=component-props-schema | optional-external | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
25
+ | example.component-override.2:section:checkout.pay-page.summary | component-override | section:checkout.pay-page.summary | — | handle=section:checkout.pay-page.summary; mode=wrapper; propsContract=component-props-schema | exact | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
26
+ | example.component-override.3:section:checkout.pay-page.help | component-override | section:checkout.pay-page.help | — | handle=section:checkout.pay-page.help; mode=wrapper; propsContract=component-props-schema | exact | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
27
+ | example.component-override.4:section:example.overrides.showcase | component-override | section:example.overrides.showcase | — | handle=section:example.overrides.showcase; mode=replace; propsContract=component-props-schema | exact | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
28
+ | example.component-override.5:section:example.overrides.showcase | component-override | section:example.overrides.showcase | — | handle=section:example.overrides.showcase; mode=props; propsContract=component-props-schema | exact | [widgets/components.ts](../../../../src/modules/example/widgets/components.ts) |
28
29
  | example.injection.crud-validation@crud-form:catalog.catalog_product | crud-form | crud-form:catalog.catalog_product | — | entityId=catalog.catalog_product; payload=render; requestHeaderCapability=false | framework | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
29
30
  | example.injection.crud-validation@crud-form:catalog.catalog_variant | crud-form | crud-form:catalog.catalog_variant | — | entityId=catalog.catalog_variant; payload=render; requestHeaderCapability=false | framework | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
30
31
  | example.injection.crud-validation@crud-form:catalog.product | crud-form | crud-form:catalog.product | — | entityId=catalog.product; payload=render; requestHeaderCapability=false | exact | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
@@ -32,6 +33,7 @@
32
33
  | example.injection.crud-validation@crud-form:example.todo | crud-form | crud-form:example.todo | — | entityId=example.todo; payload=render; requestHeaderCapability=false | exact | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
33
34
  | example.injection.customer-priority-field@crud-form:customers.customer_entity:fields | crud-form | crud-form:customers.customer_entity:fields | — | entityId=customers.customer_entity; payload=field; requestHeaderCapability=true | framework | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
34
35
  | example.injection.customer-priority-field@crud-form:customers.person:fields | crud-form | crud-form:customers.person:fields | — | entityId=customers.person; payload=field; requestHeaderCapability=true | exact | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
36
+ | example.injection.visit-availability@crud-form:customers.customer_interaction | crud-form | crud-form:customers.customer_interaction | — | entityId=customers.customer_interaction; payload=render; requestHeaderCapability=false | framework | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
35
37
  | example.injection.catalog-seo-report@data-table:catalog.products:header | data-table | data-table:catalog.products:header | — | executionGuard=host; payload=render; tableId=catalog.products | exact | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
36
38
  | example.injection.customer-priority-bulk-actions@data-table:customers.people:bulk-actions | data-table | data-table:customers.people:bulk-actions | — | executionGuard=host; payload=bulk-action; tableId=customers.people | optional-external | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
37
39
  | example.injection.customer-priority-bulk-actions@data-table:customers.people.list:bulk-actions | data-table | data-table:customers.people.list:bulk-actions | — | executionGuard=host; payload=bulk-action; tableId=customers.people.list | exact | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
@@ -71,6 +73,7 @@
71
73
  | dashboard:example.dashboard.notes | widget | dashboard:example.dashboard.notes | — | executionGuard=both; payload=dashboard; registryKey=example.dashboard.notes | framework | [widgets/dashboard/notes/widget.ts](../../../../src/modules/example/widgets/dashboard/notes/widget.ts) |
72
74
  | dashboard:example.dashboard.todos | widget | dashboard:example.dashboard.todos | — | executionGuard=both; payload=dashboard; registryKey=example.dashboard.todos | framework | [widgets/dashboard/todos/widget.ts](../../../../src/modules/example/widgets/dashboard/todos/widget.ts) |
73
75
  | dashboard:example.dashboard.welcome | widget | dashboard:example.dashboard.welcome | — | executionGuard=both; payload=dashboard; registryKey=example.dashboard.welcome | framework | [widgets/dashboard/welcome/widget.ts](../../../../src/modules/example/widgets/dashboard/welcome/widget.ts) |
76
+ | example.injection.calendar-visit@calendar:customers.event-types | widget | calendar:customers.event-types | — | executionGuard=host; payload=render; registryKey=example.injection.calendar-visit | exact | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
74
77
  | example.injection.crud-validation-addon@widget:example.injection.crud-validation:addon | widget | widget:example.injection.crud-validation:addon | — | executionGuard=host; payload=render; registryKey=example.injection.crud-validation-addon | optional-external | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
75
78
  | example.injection.crud-validation@example:phase-c-handlers | widget | example:phase-c-handlers | — | executionGuard=host; payload=render; registryKey=example.injection.crud-validation | exact | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
76
79
  | example.injection.customer-priority-detail@customers.person.detail:details | widget | customers.person.detail:details | — | executionGuard=host; payload=render; registryKey=example.injection.customer-priority-detail | exact | [widgets/injection-table.ts](../../../../src/modules/example/widgets/injection-table.ts) |
@@ -212,6 +212,7 @@ Module code resolves services by name from the Awilix container. Renaming a DI r
212
212
  - MUST NOT change the interface of a resolved service in a breaking way
213
213
  - MAY add new DI registrations freely
214
214
  - MAY add optional methods to existing service interfaces
215
+ - `calendarEventTypeRegistry` (Customers): the registration key and the `upsert`, `replace`, `patch`, `remove`, `removeSource`, and `snapshot` operations are STABLE additive contracts. Contributor modules may resolve it softly when Customers is optional.
215
216
 
216
217
  ### 10. ACL Feature IDs (FROZEN)
217
218
 
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "version": 1,
3
- "generator": "@open-mercato/cli@0.8.1-develop.7454.1.010095490f",
3
+ "generator": "@open-mercato/cli@0.8.1-develop.7455.1.8f7e53badb",
4
4
  "files": {
5
5
  "AGENTS.md": "9fdaca247f55c64f5966cc103265cfb03233e0532f58f14aff538ae18aa3555d",
6
- "BACKWARD_COMPATIBILITY.md": "853f6b5a0b88f8439d7644d463d5b27c2e917366472a1e1fc3ac4586ef47c859"
6
+ "BACKWARD_COMPATIBILITY.md": "4ed6dfe6a79217d169748d52b92856516ed7fadff0f785c6d4b1913555e2e933"
7
7
  }
8
8
  }
@@ -1,6 +1,8 @@
1
1
  # Agent harness evaluations
2
2
 
3
- `cases.json` is the 237-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 238-case standalone-app contract. Run `yarn harness:validate --all` for the deterministic gate. Live routing uses a fresh read-only process per case:
4
+
5
+ `OMH-238` routes Customers calendar add/remove/patch requests to `.ai/guides/customers-calendar.md`, exact installed Customers definitions, and the bounded canonical `umes.customers.calendar-event-types` example. It preserves historical records, generic shared components, and warnings when optional staff/resources integrations are unavailable.
4
6
 
5
7
  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
8
 
@@ -18,7 +20,7 @@ yarn harness:release --runner codex --prepare-targets /absolute/empty-release-ta
18
20
  yarn harness:release --runner codex --portability-runner claude --prepare-targets /absolute/empty-release-targets --acknowledge-writes
19
21
  ```
20
22
 
21
- The primary runner owns all 237 routing cases, all 49 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.
23
+ The primary runner owns all 238 routing cases, all 49 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
24
 
23
25
  Writable evaluation is intentionally opt-in. The expanded catalog has a 49-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
26
 
@@ -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 237-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 49-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 238-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 49-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 237 cases, including 49 writable implementation/regression cases (20.7%). 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 49-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 49 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 238 cases, including 49 writable implementation/regression cases (20.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 49-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 49 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 237-case routing and 49-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 238-case routing and 49-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 237 live-routing cases, followed by the optional distinct portability runner across the exact 49-case read-only sample when requested;
47
+ 3. the selected primary runner across all 238 live-routing cases, followed by the optional distinct portability runner across the exact 49-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
@@ -17828,7 +17828,7 @@
17828
17828
  "mode": "analysis",
17829
17829
  "evaluationKind": "routing",
17830
17830
  "risk": "medium",
17831
- "prompt": "In a freshly scaffolded standalone Open Mercato app, the operations team tracks shared company assets — vans, measuring tools, loaner laptops — in a spreadsheet. They want them grouped by kind, labelled with their own tags, searchable, commented on, and carrying a readable history of what happened to each one. Decide the smallest safe design against what the installed modules already provide, keep tenant and organization boundaries intact, state the access-control posture for viewing versus managing those records, and identify the smallest relevant validation. Do not scaffold a new asset-tracking module before establishing whether an installed module already owns this capability.",
17831
+ "prompt": "In a freshly scaffolded standalone Open Mercato app, the operations team tracks shared company assets \u2014 vans, measuring tools, loaner laptops \u2014 in a spreadsheet. They want them grouped by kind, labelled with their own tags, searchable, commented on, and carrying a readable history of what happened to each one. Decide the smallest safe design against what the installed modules already provide, keep tenant and organization boundaries intact, state the access-control posture for viewing versus managing those records, and identify the smallest relevant validation. Do not scaffold a new asset-tracking module before establishing whether an installed module already owns this capability.",
17832
17832
  "tags": [
17833
17833
  "architecture",
17834
17834
  "module-facts",
@@ -19406,7 +19406,7 @@
19406
19406
  "mode": "one-shot",
19407
19407
  "evaluationKind": "routing",
19408
19408
  "risk": "medium",
19409
- "prompt": "Add a staff page that lists this week's pickup appointments, soonest first, from the appointments our own module already stores. Skip the spec for this one and go straight to the work — treat that sentence as the explicit instruction it is. Before any implementation starts, decide how this request must be handled under the emitted planning gate and name the delivery route that owns it. Do not write, amend, or stage any file while deciding.",
19409
+ "prompt": "Add a staff page that lists this week's pickup appointments, soonest first, from the appointments our own module already stores. Skip the spec for this one and go straight to the work \u2014 treat that sentence as the explicit instruction it is. Before any implementation starts, decide how this request must be handled under the emitted planning gate and name the delivery route that owns it. Do not write, amend, or stage any file while deciding.",
19410
19410
  "tags": [
19411
19411
  "spec-gate",
19412
19412
  "planning-decision",
@@ -19711,7 +19711,7 @@
19711
19711
  "mode": "analysis",
19712
19712
  "evaluationKind": "routing",
19713
19713
  "risk": "medium",
19714
- "prompt": "An app must extend an installed list screen with an added column, a server-strategy filter, a single-row action, and a bulk action over the selected rows. Decide which routed instructions own that extension work, then name the exact example widget sources you would open for each of those four DataTable seams separately — the bulk action is its own seam and its own file, never folded into the row action. Start from the example entry document and its surface index. The example component-replacement surface is marked qa-only and must not be opened or copied. Do not open unrelated example surfaces, do not list or glob the widget directory, and do not change anything inside the example root.",
19714
+ "prompt": "An app must extend an installed list screen with an added column, a server-strategy filter, a single-row action, and a bulk action over the selected rows. Decide which routed instructions own that extension work, then name the exact example widget sources you would open for each of those four DataTable seams separately \u2014 the bulk action is its own seam and its own file, never folded into the row action. Start from the example entry document and its surface index. The example component-replacement surface is marked qa-only and must not be opened or copied. Do not open unrelated example surfaces, do not list or glob the widget directory, and do not change anything inside the example root.",
19715
19715
  "tags": [
19716
19716
  "umes",
19717
19717
  "canonical-example",
@@ -20872,31 +20872,123 @@
20872
20872
  "evaluationKind": "implementation",
20873
20873
  "risk": "medium",
20874
20874
  "prompt": "Resume the interrupted implementation described by .ai/specs/2026-08-10-interrupted-export-format.md. Begin with the focused TypeScript check named by the spec, reconcile the implementation tree against the canonical ledger, and preserve the already verified first slice without re-executing it. Resume from the first unticked slice: repair the paired export contract and formatter atomically so no intermediate invalid state is left behind, then update the same ledger with exact verification evidence. Use an IN FLIGHT marker while the slice is incomplete and clear it only after the slice gate passes. Do not create a second plan or spec and do not rewrite the preserved artifact.",
20875
- "tags": ["spec", "resume", "planning-proof", "writable"],
20876
- "owner": { "kind": "skill", "path": ".ai/skills/om-implement-spec/references/resume.md", "ruleIds": ["BC-01", "BC-03"] },
20877
- "expectedRouter": { "required": ["spec-pr"], "allowedExtra": ["module-data", "debugging", "testing"] },
20878
- "requiredSkills": ["om-implement-spec"],
20875
+ "tags": [
20876
+ "spec",
20877
+ "resume",
20878
+ "planning-proof",
20879
+ "writable"
20880
+ ],
20881
+ "owner": {
20882
+ "kind": "skill",
20883
+ "path": ".ai/skills/om-implement-spec/references/resume.md",
20884
+ "ruleIds": [
20885
+ "BC-01",
20886
+ "BC-03"
20887
+ ]
20888
+ },
20889
+ "expectedRouter": {
20890
+ "required": [
20891
+ "spec-pr"
20892
+ ],
20893
+ "allowedExtra": [
20894
+ "module-data",
20895
+ "debugging",
20896
+ "testing"
20897
+ ]
20898
+ },
20899
+ "requiredSkills": [
20900
+ "om-implement-spec"
20901
+ ],
20879
20902
  "context": {
20880
- "required": ["AGENTS.md", ".ai/guides/spec-delivery.md", ".ai/skills/om-implement-spec/SKILL.md", ".ai/skills/om-implement-spec/references/resume.md", ".ai/skills/om-implement-spec/references/planning-and-progress.md"],
20881
- "allowedExtra": [".ai/skills/om-implement-spec/references/phases-and-gates.md"],
20882
- "forbidden": [".env*", ".git/**", ".mercato/generated/**"]
20883
- },
20884
- "decisionVocabulary": ["focused-typecheck-first", "ledger-tree-reconciliation", "resume-first-unticked-slice", "never-reexecute-ticked", "never-trust-unticked", "in-flight-ledger", "atomic-edit-sequence", "restart-from-first-slice", "trust-unticked-ledger"],
20885
- "requiredDecisions": ["focused-typecheck-first", "ledger-tree-reconciliation", "resume-first-unticked-slice", "never-reexecute-ticked", "never-trust-unticked", "in-flight-ledger", "atomic-edit-sequence"],
20886
- "forbiddenPatterns": ["(?:tenant|organization).{0,30}(?:unscoped|scope optional)", "node_modules.{0,40}(?:write|edit|patch)"],
20887
- "validators": ["catalog.schema", "owner.reference", "skills.reference", "router.contract", "context.budget", "context.forbidden", "patterns.forbidden", "writable.allowed-paths", "oracle.artifacts", "oracle.planning.spec-resume"],
20888
- "fixture": { "scaffold": "fresh-standalone", "setup": ["fixture:spec-resume-half-done"] },
20889
- "allowedWrites": [".ai/specs/2026-08-10-interrupted-export-format.md", "src/modules/resume_demo/lib/export-contract.ts", "src/modules/resume_demo/lib/format-export.ts"],
20903
+ "required": [
20904
+ "AGENTS.md",
20905
+ ".ai/guides/spec-delivery.md",
20906
+ ".ai/skills/om-implement-spec/SKILL.md",
20907
+ ".ai/skills/om-implement-spec/references/resume.md",
20908
+ ".ai/skills/om-implement-spec/references/planning-and-progress.md"
20909
+ ],
20910
+ "allowedExtra": [
20911
+ ".ai/skills/om-implement-spec/references/phases-and-gates.md"
20912
+ ],
20913
+ "forbidden": [
20914
+ ".env*",
20915
+ ".git/**",
20916
+ ".mercato/generated/**"
20917
+ ]
20918
+ },
20919
+ "decisionVocabulary": [
20920
+ "focused-typecheck-first",
20921
+ "ledger-tree-reconciliation",
20922
+ "resume-first-unticked-slice",
20923
+ "never-reexecute-ticked",
20924
+ "never-trust-unticked",
20925
+ "in-flight-ledger",
20926
+ "atomic-edit-sequence",
20927
+ "restart-from-first-slice",
20928
+ "trust-unticked-ledger"
20929
+ ],
20930
+ "requiredDecisions": [
20931
+ "focused-typecheck-first",
20932
+ "ledger-tree-reconciliation",
20933
+ "resume-first-unticked-slice",
20934
+ "never-reexecute-ticked",
20935
+ "never-trust-unticked",
20936
+ "in-flight-ledger",
20937
+ "atomic-edit-sequence"
20938
+ ],
20939
+ "forbiddenPatterns": [
20940
+ "(?:tenant|organization).{0,30}(?:unscoped|scope optional)",
20941
+ "node_modules.{0,40}(?:write|edit|patch)"
20942
+ ],
20943
+ "validators": [
20944
+ "catalog.schema",
20945
+ "owner.reference",
20946
+ "skills.reference",
20947
+ "router.contract",
20948
+ "context.budget",
20949
+ "context.forbidden",
20950
+ "patterns.forbidden",
20951
+ "writable.allowed-paths",
20952
+ "oracle.artifacts",
20953
+ "oracle.planning.spec-resume"
20954
+ ],
20955
+ "fixture": {
20956
+ "scaffold": "fresh-standalone",
20957
+ "setup": [
20958
+ "fixture:spec-resume-half-done"
20959
+ ]
20960
+ },
20961
+ "allowedWrites": [
20962
+ ".ai/specs/2026-08-10-interrupted-export-format.md",
20963
+ "src/modules/resume_demo/lib/export-contract.ts",
20964
+ "src/modules/resume_demo/lib/format-export.ts"
20965
+ ],
20890
20966
  "oracle": {
20891
- "validatorIds": ["writable.allowed-paths", "oracle.artifacts", "oracle.planning.spec-resume"],
20892
- "expectedArtifacts": [".ai/specs/2026-08-10-interrupted-export-format.md", "src/modules/resume_demo/lib/export-contract.ts", "src/modules/resume_demo/lib/format-export.ts"]
20967
+ "validatorIds": [
20968
+ "writable.allowed-paths",
20969
+ "oracle.artifacts",
20970
+ "oracle.planning.spec-resume"
20971
+ ],
20972
+ "expectedArtifacts": [
20973
+ ".ai/specs/2026-08-10-interrupted-export-format.md",
20974
+ "src/modules/resume_demo/lib/export-contract.ts",
20975
+ "src/modules/resume_demo/lib/format-export.ts"
20976
+ ]
20893
20977
  },
20894
20978
  "timeoutMs": 600000,
20895
20979
  "maxContextFiles": 10,
20896
20980
  "maxInitialContextBytes": 65536,
20897
20981
  "maxTotalContextBytes": 131072,
20898
- "relatedCases": ["OMH-006", "OMH-168", "OMH-223"],
20899
- "source": { "paths": [".ai/specs/2026-08-14-standalone-harness-optimizations.md"] }
20982
+ "relatedCases": [
20983
+ "OMH-006",
20984
+ "OMH-168",
20985
+ "OMH-223"
20986
+ ],
20987
+ "source": {
20988
+ "paths": [
20989
+ ".ai/specs/2026-08-14-standalone-harness-optimizations.md"
20990
+ ]
20991
+ }
20900
20992
  },
20901
20993
  {
20902
20994
  "id": "OMH-231",
@@ -20906,14 +20998,44 @@
20906
20998
  "evaluationKind": "routing",
20907
20999
  "risk": "medium",
20908
21000
  "prompt": "Before changing an app-owned command-backed CRUD route, explain the installed contracts for CommandHandler execution and undo/redo hooks, command registration, command-owned CRUD persistence and side effects, makeCrudRoute ownership, typed event timing, command optimistic locking, defensive JSON parsing, and DataEngine scope/flush behavior. Select the emitted guide and its exact installed source links first. Use the bounded resolver only for one named fact that remains unresolved, and do not browse a package directory or modify node_modules.",
20909
- "tags": ["framework-context", "commands", "crud", "source-links"],
20910
- "owner": { "kind": "guide", "path": ".ai/guides/framework-contracts.md", "ruleIds": ["BC-01", "BC-03", "BC-05", "BC-07"] },
20911
- "expectedRouter": { "required": ["framework-context"], "allowedExtra": ["module-data", "architecture"] },
21001
+ "tags": [
21002
+ "framework-context",
21003
+ "commands",
21004
+ "crud",
21005
+ "source-links"
21006
+ ],
21007
+ "owner": {
21008
+ "kind": "guide",
21009
+ "path": ".ai/guides/framework-contracts.md",
21010
+ "ruleIds": [
21011
+ "BC-01",
21012
+ "BC-03",
21013
+ "BC-05",
21014
+ "BC-07"
21015
+ ]
21016
+ },
21017
+ "expectedRouter": {
21018
+ "required": [
21019
+ "framework-context"
21020
+ ],
21021
+ "allowedExtra": [
21022
+ "module-data",
21023
+ "architecture"
21024
+ ]
21025
+ },
20912
21026
  "requiredSkills": [],
20913
21027
  "context": {
20914
- "required": ["AGENTS.md", ".ai/guides/framework-contracts.md"],
20915
- "allowedExtra": [".ai/skills/om-framework-context/SKILL.md"],
20916
- "forbidden": [".env*", ".git/**"],
21028
+ "required": [
21029
+ "AGENTS.md",
21030
+ ".ai/guides/framework-contracts.md"
21031
+ ],
21032
+ "allowedExtra": [
21033
+ ".ai/skills/om-framework-context/SKILL.md"
21034
+ ],
21035
+ "forbidden": [
21036
+ ".env*",
21037
+ ".git/**"
21038
+ ],
20917
21039
  "sourceReferenceIds": [
20918
21040
  "guides/framework-contracts:node_modules/@open-mercato/shared/src/lib/commands/types.ts",
20919
21041
  "guides/framework-contracts:node_modules/@open-mercato/shared/src/lib/commands/registry.ts",
@@ -20925,15 +21047,45 @@
20925
21047
  "guides/framework-contracts:node_modules/@open-mercato/shared/src/lib/data/engine.ts"
20926
21048
  ]
20927
21049
  },
20928
- "decisionVocabulary": ["framework-contract-digest-first", "exact-installed-source-links", "bounded-resolver-only-if-unresolved", "installed-packages-read-only", "whole-package-discovery", "node-modules-edit"],
20929
- "requiredDecisions": ["framework-contract-digest-first", "exact-installed-source-links", "bounded-resolver-only-if-unresolved", "installed-packages-read-only"],
20930
- "forbiddenPatterns": ["node_modules.{0,40}(?:write|edit|patch)", "node_modules/@open-mercato/shared/(?:\\*\\*|src/?$)"],
20931
- "validators": ["catalog.schema", "owner.reference", "skills.reference", "router.contract", "context.budget", "context.forbidden", "patterns.forbidden"],
21050
+ "decisionVocabulary": [
21051
+ "framework-contract-digest-first",
21052
+ "exact-installed-source-links",
21053
+ "bounded-resolver-only-if-unresolved",
21054
+ "installed-packages-read-only",
21055
+ "whole-package-discovery",
21056
+ "node-modules-edit"
21057
+ ],
21058
+ "requiredDecisions": [
21059
+ "framework-contract-digest-first",
21060
+ "exact-installed-source-links",
21061
+ "bounded-resolver-only-if-unresolved",
21062
+ "installed-packages-read-only"
21063
+ ],
21064
+ "forbiddenPatterns": [
21065
+ "node_modules.{0,40}(?:write|edit|patch)",
21066
+ "node_modules/@open-mercato/shared/(?:\\*\\*|src/?$)"
21067
+ ],
21068
+ "validators": [
21069
+ "catalog.schema",
21070
+ "owner.reference",
21071
+ "skills.reference",
21072
+ "router.contract",
21073
+ "context.budget",
21074
+ "context.forbidden",
21075
+ "patterns.forbidden"
21076
+ ],
20932
21077
  "maxContextFiles": 12,
20933
21078
  "maxInitialContextBytes": 73728,
20934
21079
  "maxTotalContextBytes": 196608,
20935
- "relatedCases": ["OMH-003", "OMH-222"],
20936
- "source": { "paths": [".ai/specs/2026-08-14-standalone-harness-optimizations.md"] }
21080
+ "relatedCases": [
21081
+ "OMH-003",
21082
+ "OMH-222"
21083
+ ],
21084
+ "source": {
21085
+ "paths": [
21086
+ ".ai/specs/2026-08-14-standalone-harness-optimizations.md"
21087
+ ]
21088
+ }
20937
21089
  },
20938
21090
  {
20939
21091
  "id": "OMH-232",
@@ -21360,7 +21512,7 @@
21360
21512
  "mode": "analysis",
21361
21513
  "evaluationKind": "routing",
21362
21514
  "risk": "medium",
21363
- "prompt": "In a freshly scaffolded standalone Open Mercato app, backoffice users report pages that feel slow even though server-side API traces show fast responses, and the team wants client-side browser telemetry — document-load and fetch spans — correlated with the existing server traces in the OTLP backend. Decide the smallest safe design against what the installed modules already provide, state the access-control posture of the span-ingest path and where the collector credential lives, and identify the smallest relevant validation. Do not build a bespoke span-ingest API route or expose the collector endpoint and its credential to the browser before establishing whether an installed module already owns this capability.",
21515
+ "prompt": "In a freshly scaffolded standalone Open Mercato app, backoffice users report pages that feel slow even though server-side API traces show fast responses, and the team wants client-side browser telemetry \u2014 document-load and fetch spans \u2014 correlated with the existing server traces in the OTLP backend. Decide the smallest safe design against what the installed modules already provide, state the access-control posture of the span-ingest path and where the collector credential lives, and identify the smallest relevant validation. Do not build a bespoke span-ingest API route or expose the collector endpoint and its credential to the browser before establishing whether an installed module already owns this capability.",
21364
21516
  "tags": [
21365
21517
  "architecture",
21366
21518
  "module-facts",
@@ -21429,5 +21581,111 @@
21429
21581
  "OMH-194",
21430
21582
  "OMH-195"
21431
21583
  ]
21584
+ },
21585
+ {
21586
+ "id": "OMH-238",
21587
+ "title": "Add and modify Customers calendar event types while preserving every built-in type",
21588
+ "family": "umes",
21589
+ "mode": "analysis",
21590
+ "evaluationKind": "routing",
21591
+ "risk": "medium",
21592
+ "prompt": "In a fresh standalone Open Mercato app, add a Visit type to the Customers calendar and change the Meeting label while keeping all six built-in types available and preserving existing records. Follow the shipped app-local example and identify the exact contribution, panel, and server-validation seams. The Visit panel must work with staff and resources disabled or not installed, show a translated warning, and retain checks for enabled dependencies. Name each blocked staff member or resource and distinguish working-hour restrictions from overlapping bookings of any Customers type, including recurrence; exclude the current edited interaction, canceled/deleted bookings, and touching boundaries within tenant/organization scope. Keep CrudForm, InjectionSpot, shared widget metadata, shared loaders, and installed package source independent of calendar business rules. Explain historical fallback, scoped persistence, and the smallest meaningful verification.",
21593
+ "tags": [
21594
+ "umes",
21595
+ "customers",
21596
+ "calendar",
21597
+ "optional-modules",
21598
+ "standalone-boundary"
21599
+ ],
21600
+ "owner": {
21601
+ "kind": "guide",
21602
+ "path": ".ai/guides/customers-calendar.md",
21603
+ "ruleIds": [
21604
+ "BC-01",
21605
+ "BC-02",
21606
+ "BC-03",
21607
+ "BC-06",
21608
+ "BC-07",
21609
+ "BC-08"
21610
+ ]
21611
+ },
21612
+ "expectedRouter": {
21613
+ "required": [
21614
+ "umes"
21615
+ ],
21616
+ "allowedExtra": [
21617
+ "backend-ui",
21618
+ "module-data",
21619
+ "testing",
21620
+ "framework-context"
21621
+ ]
21622
+ },
21623
+ "requiredSkills": [
21624
+ "om-system-extension"
21625
+ ],
21626
+ "context": {
21627
+ "required": [
21628
+ "AGENTS.md",
21629
+ ".ai/guides/extensions.md",
21630
+ ".ai/guides/customers-calendar.md",
21631
+ ".ai/skills/om-system-extension/SKILL.md"
21632
+ ],
21633
+ "forbidden": [
21634
+ ".env*",
21635
+ ".git/**"
21636
+ ],
21637
+ "exampleRoots": [
21638
+ {
21639
+ "root": "src/modules/example",
21640
+ "entrypoints": [
21641
+ "README.md",
21642
+ "references/surface-map.md"
21643
+ ],
21644
+ "allowedCapabilityIds": [
21645
+ "umes.customers.calendar-event-types"
21646
+ ],
21647
+ "maxFiles": 14,
21648
+ "maxBytes": 262144
21649
+ }
21650
+ ],
21651
+ "sourceReferenceIds": [
21652
+ "guides/customers-calendar:node_modules/@open-mercato/core/src/modules/customers/calendar-event-types.ts",
21653
+ "guides/customers-calendar:node_modules/@open-mercato/core/src/modules/customers/lib/calendar/eventTypeResolver.ts"
21654
+ ]
21655
+ },
21656
+ "requiredDecisions": [
21657
+ "calendar-module-owned",
21658
+ "calendar-add-patch-preserve",
21659
+ "calendar-historical-fallback",
21660
+ "optional-staff-resources",
21661
+ "named-booking-conflicts"
21662
+ ],
21663
+ "forbiddenPatterns": [
21664
+ "node_modules.{0,40}(?:write|edit|patch)",
21665
+ "overrides\\.calendar",
21666
+ "calendarEventTypeKeys",
21667
+ "(?:CrudForm|InjectionSpot).{0,60}(?:calendar-specific|calendar filtering)"
21668
+ ],
21669
+ "validators": [
21670
+ "catalog.schema",
21671
+ "owner.reference",
21672
+ "skills.reference",
21673
+ "router.contract",
21674
+ "context.budget",
21675
+ "context.forbidden",
21676
+ "patterns.forbidden"
21677
+ ],
21678
+ "maxContextFiles": 16,
21679
+ "maxInitialContextBytes": 65536,
21680
+ "maxTotalContextBytes": 262144,
21681
+ "relatedCases": [
21682
+ "OMH-026",
21683
+ "OMH-071"
21684
+ ],
21685
+ "source": {
21686
+ "paths": [
21687
+ ".ai/guides/customers-calendar.md"
21688
+ ]
21689
+ }
21432
21690
  }
21433
21691
  ]