@open-mercato/cli 0.7.1-develop.7182.1.789943f937 → 0.7.1-develop.7185.1.0f280ef1f1

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 (75) hide show
  1. package/dist/agentic/guides/module-facts.json +136 -136
  2. package/dist/agentic/guides/module-facts.v2.json +136 -136
  3. package/dist/agentic/guides/modules/ai_assistant/index.md +1 -1
  4. package/dist/agentic/guides/modules/api_docs/index.md +1 -1
  5. package/dist/agentic/guides/modules/api_keys/index.md +1 -1
  6. package/dist/agentic/guides/modules/attachments/index.md +1 -1
  7. package/dist/agentic/guides/modules/audit_logs/index.md +1 -1
  8. package/dist/agentic/guides/modules/auth/index.md +1 -1
  9. package/dist/agentic/guides/modules/business_rules/index.md +1 -1
  10. package/dist/agentic/guides/modules/catalog/index.md +1 -1
  11. package/dist/agentic/guides/modules/channel_apns/index.md +1 -1
  12. package/dist/agentic/guides/modules/channel_discord/index.md +1 -1
  13. package/dist/agentic/guides/modules/channel_expo/index.md +1 -1
  14. package/dist/agentic/guides/modules/channel_fcm/index.md +1 -1
  15. package/dist/agentic/guides/modules/channel_gmail/index.md +1 -1
  16. package/dist/agentic/guides/modules/channel_imap/index.md +1 -1
  17. package/dist/agentic/guides/modules/channel_resend/index.md +1 -1
  18. package/dist/agentic/guides/modules/channel_ses/index.md +1 -1
  19. package/dist/agentic/guides/modules/checkout/index.md +1 -1
  20. package/dist/agentic/guides/modules/communication_channels/index.md +1 -1
  21. package/dist/agentic/guides/modules/configs/index.md +1 -1
  22. package/dist/agentic/guides/modules/content/index.md +1 -1
  23. package/dist/agentic/guides/modules/currencies/index.md +1 -1
  24. package/dist/agentic/guides/modules/customer_accounts/index.md +1 -1
  25. package/dist/agentic/guides/modules/customers/index.md +1 -1
  26. package/dist/agentic/guides/modules/dashboards/index.md +1 -1
  27. package/dist/agentic/guides/modules/data_sync/index.md +1 -1
  28. package/dist/agentic/guides/modules/design_system/index.md +1 -1
  29. package/dist/agentic/guides/modules/devices/index.md +1 -1
  30. package/dist/agentic/guides/modules/dictionaries/index.md +1 -1
  31. package/dist/agentic/guides/modules/directory/index.md +1 -1
  32. package/dist/agentic/guides/modules/documents/index.md +1 -1
  33. package/dist/agentic/guides/modules/entities/index.md +1 -1
  34. package/dist/agentic/guides/modules/eudr/index.md +1 -1
  35. package/dist/agentic/guides/modules/events/index.md +1 -1
  36. package/dist/agentic/guides/modules/feature_toggles/index.md +1 -1
  37. package/dist/agentic/guides/modules/gateway_stripe/index.md +1 -1
  38. package/dist/agentic/guides/modules/generators/index.md +1 -1
  39. package/dist/agentic/guides/modules/inbox_ops/index.md +1 -1
  40. package/dist/agentic/guides/modules/integrations/index.md +1 -1
  41. package/dist/agentic/guides/modules/messages/index.md +1 -1
  42. package/dist/agentic/guides/modules/notifications/index.md +1 -1
  43. package/dist/agentic/guides/modules/onboarding/index.md +1 -1
  44. package/dist/agentic/guides/modules/payment_gateways/index.md +1 -1
  45. package/dist/agentic/guides/modules/perspectives/index.md +1 -1
  46. package/dist/agentic/guides/modules/phone_calls/index.md +1 -1
  47. package/dist/agentic/guides/modules/planner/index.md +1 -1
  48. package/dist/agentic/guides/modules/portal/index.md +1 -1
  49. package/dist/agentic/guides/modules/progress/index.md +1 -1
  50. package/dist/agentic/guides/modules/push_notifications/index.md +1 -1
  51. package/dist/agentic/guides/modules/query_index/index.md +1 -1
  52. package/dist/agentic/guides/modules/record_locks/index.md +1 -1
  53. package/dist/agentic/guides/modules/resources/index.md +1 -1
  54. package/dist/agentic/guides/modules/sales/index.md +1 -1
  55. package/dist/agentic/guides/modules/scheduler/index.md +1 -1
  56. package/dist/agentic/guides/modules/search/index.md +1 -1
  57. package/dist/agentic/guides/modules/security/index.md +1 -1
  58. package/dist/agentic/guides/modules/shipping_carriers/index.md +1 -1
  59. package/dist/agentic/guides/modules/sso/index.md +1 -1
  60. package/dist/agentic/guides/modules/staff/index.md +1 -1
  61. package/dist/agentic/guides/modules/storage_s3/index.md +1 -1
  62. package/dist/agentic/guides/modules/sync_akeneo/index.md +1 -1
  63. package/dist/agentic/guides/modules/sync_excel/index.md +1 -1
  64. package/dist/agentic/guides/modules/system_status_overlays/index.md +1 -1
  65. package/dist/agentic/guides/modules/tillio/index.md +1 -1
  66. package/dist/agentic/guides/modules/translations/index.md +1 -1
  67. package/dist/agentic/guides/modules/warranty_claims/index.md +1 -1
  68. package/dist/agentic/guides/modules/webhooks/index.md +1 -1
  69. package/dist/agentic/guides/modules/wms/index.md +1 -1
  70. package/dist/agentic/guides/modules/workflows/index.md +1 -1
  71. package/dist/agentic/guides/reference-module-facts.json +1 -1
  72. package/dist/agentic/guides/upstream/AGENTS.md +1 -1
  73. package/dist/agentic/guides/upstream/BACKWARD_COMPATIBILITY.md +23 -0
  74. package/dist/agentic/guides/upstream/manifest.json +3 -3
  75. package/package.json +6 -6
@@ -97,7 +97,7 @@ Guide shorthand: `<pkg>` = `packages/<pkg>/AGENTS.md` (so `core` = `packages/cor
97
97
  | New integration provider (adapter, health check, credentials, bundle wiring) | `.ai/skills/om-integration-builder/SKILL.md` + `core:integrations` + `core:data_sync` + `channel-*` |
98
98
  | **Packages** | |
99
99
  | Reusable utilities, encryption helpers, i18n (`useT`/`resolveTranslations`), boolean parsing, data engine types, request scoping | `shared` |
100
- | Structured logging / replacing raw `console.*` with the facade (`createLogger`, `child()`, `OM_LOG_LEVEL`), advisory `yarn logger:check-console` | `apps/docs/docs/framework/runtime/logging.mdx` + `.ai/specs/2026-07-02-structured-logging-facade.md` + `shared` |
100
+ | Structured logging (`createLogger`, `child()`, `OM_LOG_LEVEL`, `yarn logger:check-console`); error reporting — a catch that records an error MUST also `reportError` | `apps/docs/docs/framework/runtime/{logging,error-reporting}.mdx` + `telemetry` + `shared` |
101
101
  | Forms (`CrudForm`), data tables (`DataTable`), loading/error states, flash messages, `FormHeader`/`FormFooter`, dialog UX | `ui` + `om-backend-ui-design` skill (+ `om-ds-guardian` for DS-token compliance) |
102
102
  | Reusing backend component families (charts/KPIs, filters, detail sections, schedule, messages, notifications, page scaffolding, banners) — check BEFORE building any from scratch | [`.ai/ui-backend-components.md`](.ai/ui-backend-components.md) + `ui` |
103
103
  | Backend page components, `apiCall` usage, `RowActions` ids, `LoadingMessage`/`ErrorMessage` | `ui:backend` + `om-backend-ui-design` skill |
@@ -99,6 +99,8 @@ These exported types are consumed by module developers. Required fields MUST NOT
99
99
  - `ModuleOverrides`: `overrides.ai.agents`, `overrides.ai.tools`, and `overrides.ai.extensions` shapes are STABLE; other domain keys are reserved by the unified override contract and may be wired additively. `nav` was wired 2026-07-30 under that clause (see [spec](.ai/specs/2026-07-30-nav-group-order-override-domain.md)): `overrides.nav.groupOrder` **prepends** sidebar nav group ids ahead of the built-in `defaultGroupOrder`, and ids it does not name keep their existing position. It is a default applied *beneath* role and per-user sidebar preferences, so an operator's own arrangement still wins. With no override configured, group ordering is byte-identical to before — that guarantee MUST hold for any future change to this domain.
100
100
  - `ModulesRegisteredListener` (`@open-mercato/shared/lib/modules/registry`): added 2026-08-12 as `(modules: Module[]) => void | PromiseLike<void>` (see [spec](.ai/specs/2026-08-12-module-registry-registration-listeners.md)). The listener MUST keep receiving the reconciled module list, and the return type MUST NOT be narrowed back to `void` — a subscriber returning a promise is supported and its rejection is observed and logged rather than escaping into bootstrap.
101
101
  - `WorkerMeta`: `queue` — MUST NOT remove
102
+ - `TelemetryProvider` (`@open-mercato/telemetry`): `name`, `supports`, `start`, `shutdown`, `runInSpan`, `activeSpan`, `activeTraceContext`, `inject`, `runInRemoteSpan`, `emitLog`, `recordMetric` — MUST NOT remove. `reportError?()` was added 2026-09-08 as an additive OPTIONAL method (see [spec](.ai/specs/2026-09-08-error-reporting-policy.md)); it **MUST stay optional** — third parties implement this interface and a required method would break every existing provider. The facade calls it as `provider.reportError?.(…)` *in addition to* the span/log/metric path, so a provider that omits it loses nothing.
103
+ - `ReportErrorContext` (`@open-mercato/telemetry`) and the `reportError` context of `TelemetryRuntime` (`@open-mercato/shared/lib/telemetry/runtime`): `module?` and `attributes?` — MUST NOT remove. `code?: string` was added 2026-09-08 as an additive optional field carrying the enumerated `module.reason` fingerprint the backend groups on; it MUST stay optional so existing callers (the API dispatcher, the CRUD factory) keep compiling and keep emitting exactly what they emit today. `om.errors` gains an `error.code` label only when a caller supplies one — the same attribute name the span and the log record use, so one query works against all three.
102
104
  - `RefreshCredentialsInput` (communication_channels hub): `channelId`, `credentials`, `scope` — MUST NOT remove. `oauthClient?` was added 2026-05-27 as an additive optional field (see [Spec A](.ai/specs/implemented/2026-05-27-email-integration-inbound-reliability-and-threading.md)). The legacy `credentials._client` read path in the Gmail adapter is **deprecated and slated for removal in the next minor release** — pass OAuth client config via `RefreshCredentialsInput.oauthClient` instead.
103
105
  - `OAuthClientConfig` (communication_channels hub): added 2026-05-27 with `clientId` required; optional `clientSecret`, `tenantId`, `scopes`. New optional fields may be added; required `clientId` MUST NOT be removed.
104
106
  - `BackendChromePayload`: `groups`, `settingsSections`, `settingsPathPrefixes`, `profileSections`, `profilePathPrefixes`, `grantedFeatures`, `roles` — MUST NOT remove. `currentOrganization?` (`BackendChromeCurrentOrganization | null`) was added 2026-07-30 as an additive optional field (see [spec](.ai/specs/2026-07-30-backend-chrome-current-organization.md)); it is `null` under an all-organizations selection, when no organization is in scope, and when the lookup fails, so consumers MUST treat `null` as "unknown" rather than "no organization". `brand?` is **unchanged** and remains the branding channel — it populates only when the organization has a `logoUrl`, and `currentOrganization` does not supersede it.
@@ -430,3 +432,24 @@ Issue #3852 removed the non-cryptographic passkey verification shape from `Passk
430
432
  **Contract commitments**: only an explicit `false` removes a control, so an adapter that declares nothing — or whose predicate returns anything else — renders the same form and sends the same request body as before. A predicate that throws is treated as *applies*, because `api/options.ts` resolves every registered adapter in one response and one broken predicate must not take the dashboard down for the rest. The `startControls` map is sparse and keyed only by the adapter's own `supportedEntities`; a missing entry means every control applies, so a client that ignores the field behaves exactly as today. The declaration governs what the dashboard **offers**, never what the run API **accepts** — that separation MUST hold for any future change here, or an API client posting `fullSync: true` would silently stop getting a full run.
431
433
 
432
434
  **Migration path for existing adapters**: none. The method is optional and defaults to prior behaviour.
435
+
436
+ ## Error Reporting Policy (2026-09-08)
437
+
438
+ Spec: [`.ai/specs/2026-09-08-error-reporting-policy.md`](.ai/specs/2026-09-08-error-reporting-policy.md). Every change is additive; no existing path emits less than it did before.
439
+
440
+ | Surface | Change | Classification |
441
+ |---------|--------|----------------|
442
+ | `TelemetryProvider` | Optional `reportError?()` added, called in addition to the span/log/metric path. MUST stay optional — third parties implement this interface | ✓ ADDITIVE |
443
+ | `ReportErrorContext` / `TelemetryRuntime['reportError']` context | Optional `code?: string` fingerprint added | ✓ ADDITIVE |
444
+ | `data_sync.run.completed` payload | Optional `createdCount`, `updatedCount`, `skippedCount`, `failedCount` added; no existing field changed (§5 permits additive payload fields) | ✓ ADDITIVE |
445
+ | `integration_logs` rows at `level: 'error'` | Also reported to the active telemetry backend (message, `code`, ids — never `payload`). With telemetry off, one global lookup and no behaviour change | ✓ ADDITIVE |
446
+ | `queue` failure paths, `data_sync` engine | Existing `logger.error` lines keep their text and gain a `reportError` call with a `code` | ✓ ADDITIVE |
447
+ | `reportError`'s `code` | A value that is not shaped `module.reason` is dropped rather than published, so it cannot become an unbounded, unredacted metric label. No in-repo caller passes one; a caller that did reported exactly as one passing no `code`, which is the pre-PR behaviour | ✓ ADDITIVE |
448
+ | `integration_logs` message text for the payment status poller and the Stripe webhook processor | The failure cause moves from `payload` **into** the message (`Payment status polling failed: {cause}`), because the payload is deliberately never reported. `payload` keeps the same fields | ✓ ADDITIVE (row content, no schema or field change) |
449
+ | `integration_logs.code` for the payment status poller | Previously `null`, now `payment_gateways.status_poll_failed`, so it groups apart from the `integrations.log_error` catch-all. The column and its API field already existed | ✓ ADDITIVE (a value where there was none) |
450
+ | `IntegrationLogError` (`core:integrations`), `SyncRunPartialFailureError` (`core:data_sync`) | New exported error classes | ✓ ADDITIVE |
451
+ | API route URLs, response schemas, database schema, event IDs, ACL features, DI names, CLI commands, env vars | No change — the policy adds no configuration | ✓ n/a |
452
+
453
+ **Operator note — terminal queue failures.** Not a contract break, but visible in an alert rule: on the **local** strategy a job's final attempt previously emitted both `queue.job_failed` and `queue.job_exhausted`; it now emits only `queue.job_exhausted`, matching the `async` strategy. An alert thresholding on `queue.job_failed` alone stops seeing terminal failures — page on `queue.job_exhausted`.
454
+
455
+ **Volume note for operators.** Reported error *volume* rises where errors were previously only recorded: an integration that writes 115 error rows now also reports 115 errors, grouped by `error.code` at the backend. This is deliberate — see the spec's §S3 — and the controls are the collector's filtering/sampling and the backend's own quotas, not a framework switch.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "version": 1,
3
- "generator": "@open-mercato/cli@0.7.1-develop.7182.1.789943f937",
3
+ "generator": "@open-mercato/cli@0.7.1-develop.7185.1.0f280ef1f1",
4
4
  "files": {
5
- "AGENTS.md": "1f54610cebc4fd7e42b56d1c18859edc7ed7d3165c9af72c4530b6feaf76e457",
6
- "BACKWARD_COMPATIBILITY.md": "cf387f5407340082f2915119c35fda86420eb9687ee0269d21a374d4bd1ec8de"
5
+ "AGENTS.md": "daa3d6b384da85bf926c4a1dd6448f8776fca4956203769bc6f590f0338495b6",
6
+ "BACKWARD_COMPATIBILITY.md": "25a4f2a9e63b4da9f142067b75205159e2b46ddc5d0c5372a9f214cb4e29c34e"
7
7
  }
8
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-mercato/cli",
3
- "version": "0.7.1-develop.7182.1.789943f937",
3
+ "version": "0.7.1-develop.7185.1.0f280ef1f1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -60,9 +60,9 @@
60
60
  "@mikro-orm/decorators": "^7.1.14",
61
61
  "@mikro-orm/migrations": "^7.1.14",
62
62
  "@mikro-orm/postgresql": "^7.1.14",
63
- "@open-mercato/queue": "0.7.1-develop.7182.1.789943f937",
64
- "@open-mercato/shared": "0.7.1-develop.7182.1.789943f937",
65
- "@open-mercato/telemetry": "0.7.1-develop.7182.1.789943f937",
63
+ "@open-mercato/queue": "0.7.1-develop.7185.1.0f280ef1f1",
64
+ "@open-mercato/shared": "0.7.1-develop.7185.1.0f280ef1f1",
65
+ "@open-mercato/telemetry": "0.7.1-develop.7185.1.0f280ef1f1",
66
66
  "cross-spawn": "^7.0.6",
67
67
  "pg": "8.23.0",
68
68
  "semver": "^7.8.5",
@@ -73,10 +73,10 @@
73
73
  "typescript-js": "npm:typescript@6.0.3"
74
74
  },
75
75
  "peerDependencies": {
76
- "@open-mercato/shared": "0.7.1-develop.7182.1.789943f937"
76
+ "@open-mercato/shared": "0.7.1-develop.7185.1.0f280ef1f1"
77
77
  },
78
78
  "devDependencies": {
79
- "@open-mercato/shared": "0.7.1-develop.7182.1.789943f937",
79
+ "@open-mercato/shared": "0.7.1-develop.7185.1.0f280ef1f1",
80
80
  "@types/jest": "^30.0.0",
81
81
  "jest": "^30.4.2",
82
82
  "ts-jest": "^29.4.12"