@whooshbang/contracts 3.2.0 → 4.0.0

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 (89) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/contract-manifest.json +32 -32
  3. package/dist/generated/artifact-index.d.ts +33 -33
  4. package/dist/generated/artifact-index.js +32 -32
  5. package/dist/generated/interaction-v1.d.ts +1 -1
  6. package/dist/generated/machine-v1.d.ts +1 -1
  7. package/dist/generated/validators-standalone.d.ts +377 -378
  8. package/dist/generated/validators-standalone.js +5070 -4019
  9. package/dist/generated/validators-standalone.js.map +1 -1
  10. package/dist/generated/whooshbang-v1.d.ts +47 -18
  11. package/fixtures/core-v1/fixture-index.json +1 -1
  12. package/fixtures/core-v1/scenarios/api-credential-invalid-indistinguishable.json +1 -1
  13. package/fixtures/core-v1/scenarios/api-credential-one-time-reveal.json +1 -1
  14. package/fixtures/core-v1/scenarios/api-credential-revocation-replay.json +1 -1
  15. package/fixtures/core-v1/scenarios/api-credential-rotation-overlap.json +1 -1
  16. package/fixtures/core-v1/scenarios/cancellation-too-late.json +1 -1
  17. package/fixtures/core-v1/scenarios/cross-organization-project.json +1 -1
  18. package/fixtures/core-v1/scenarios/cross-project-resource.json +1 -1
  19. package/fixtures/core-v1/scenarios/environment-mismatch.json +1 -1
  20. package/fixtures/core-v1/scenarios/idempotency-conflict.json +1 -1
  21. package/fixtures/core-v1/scenarios/idempotency-equivalent-replay.json +1 -1
  22. package/fixtures/core-v1/scenarios/malformed-bearer.json +1 -1
  23. package/fixtures/core-v1/scenarios/metadata-overrun.json +1 -1
  24. package/fixtures/core-v1/scenarios/missing-scope.json +1 -1
  25. package/fixtures/core-v1/scenarios/project-create-equivalent-replay.json +1 -1
  26. package/fixtures/core-v1/scenarios/project-slug-conflict.json +1 -1
  27. package/fixtures/core-v1/scenarios/provider-outcome-unknown.json +1 -1
  28. package/fixtures/core-v1/scenarios/subscription-activation-replay.json +1 -1
  29. package/fixtures/core-v1/scenarios/subscription-authorization-capability-opacity.json +1 -1
  30. package/fixtures/core-v1/scenarios/subscription-cross-connection-callback-rejected.json +1 -1
  31. package/fixtures/core-v1/scenarios/subscription-expired-replay.json +1 -1
  32. package/fixtures/core-v1/scenarios/subscription-selected-connection-replay.json +1 -1
  33. package/fixtures/interaction-machine-v1/scenarios/ack-conflict.json +1 -1
  34. package/fixtures/interaction-machine-v1/scenarios/ack-cross-machine.json +1 -1
  35. package/fixtures/interaction-machine-v1/scenarios/ack-out-of-order.json +1 -1
  36. package/fixtures/interaction-machine-v1/scenarios/ack-replay.json +1 -1
  37. package/fixtures/interaction-machine-v1/scenarios/ambiguous-free-text.json +1 -1
  38. package/fixtures/interaction-machine-v1/scenarios/callback-token-opacity.json +1 -1
  39. package/fixtures/interaction-machine-v1/scenarios/credential-registration-conflict.json +1 -1
  40. package/fixtures/interaction-machine-v1/scenarios/credential-registration-replay.json +1 -1
  41. package/fixtures/interaction-machine-v1/scenarios/credential-revocation-replay.json +1 -1
  42. package/fixtures/interaction-machine-v1/scenarios/credential-rotation.json +1 -1
  43. package/fixtures/interaction-machine-v1/scenarios/first-credential-activates.json +1 -1
  44. package/fixtures/interaction-machine-v1/scenarios/interaction-duplicate.json +1 -1
  45. package/fixtures/interaction-machine-v1/scenarios/interaction-expired.json +1 -1
  46. package/fixtures/interaction-machine-v1/scenarios/interaction-mismatch.json +1 -1
  47. package/fixtures/interaction-machine-v1/scenarios/interaction-retired.json +1 -1
  48. package/fixtures/interaction-machine-v1/scenarios/interaction-stale.json +1 -1
  49. package/fixtures/interaction-machine-v1/scenarios/machine-admin-denied.json +1 -1
  50. package/fixtures/interaction-machine-v1/scenarios/machine-bound-message-create.json +1 -1
  51. package/fixtures/interaction-machine-v1/scenarios/machine-cancel-denied.json +1 -1
  52. package/fixtures/interaction-machine-v1/scenarios/machine-crash-before-ack.json +1 -1
  53. package/fixtures/interaction-machine-v1/scenarios/machine-notifier-mismatch.json +1 -1
  54. package/fixtures/interaction-machine-v1/scenarios/machine-other-message-read.json +1 -1
  55. package/fixtures/interaction-machine-v1/scenarios/machine-owned-message-read.json +1 -1
  56. package/fixtures/interaction-machine-v1/scenarios/machine-subscriber-mismatch.json +1 -1
  57. package/fixtures/interaction-machine-v1/scenarios/poll-uncommitted-cursor-rejected.json +1 -1
  58. package/fixtures/interaction-machine-v1/scenarios/project-credential-machine-endpoint-denied.json +1 -1
  59. package/fixtures/interaction-machine-v1/scenarios/quarantine-integrity-rejected.json +1 -1
  60. package/fixtures/interaction-machine-v1/scenarios/quarantine-signature-rejected.json +1 -1
  61. package/fixtures/interaction-machine-v1/scenarios/quarantine-valid.json +1 -1
  62. package/fixtures/interaction-machine-v1/scenarios/revoked-machine-credential.json +1 -1
  63. package/fixtures/recipient-experience-v1/scenarios/membership-broadcast-snapshot.json +1 -1
  64. package/fixtures/recipient-experience-v1/scenarios/preferred-binding-resolution.json +1 -1
  65. package/fixtures/recipient-experience-v1/scenarios/recipient-session-security.json +1 -1
  66. package/fixtures/recipient-experience-v1/scenarios/subscriber-initial-groups-transaction.json +1 -1
  67. package/fixtures/recipient-experience-v1/success/project-recipient-experience.json +2 -0
  68. package/openapi/generated/whooshbang-v1.bundle.json +137 -24
  69. package/openapi/whooshbang-v1.yaml +32 -3
  70. package/package.json +1 -1
  71. package/schemas/core-scenario.schema.json +1 -1
  72. package/schemas/events/agent-binding-degraded-v1.schema.json +1 -1
  73. package/schemas/events/interaction-expired-v1.schema.json +1 -1
  74. package/schemas/events/interaction-received-v1.schema.json +1 -1
  75. package/schemas/events/message-delivered-v1.schema.json +1 -1
  76. package/schemas/events/message-expired-v1.schema.json +1 -1
  77. package/schemas/events/message-failed-v1.schema.json +1 -1
  78. package/schemas/events/message-provider-accepted-v1.schema.json +1 -1
  79. package/schemas/events/subscription-activated-v1.schema.json +1 -1
  80. package/schemas/events/subscription-revoked-v1.schema.json +1 -1
  81. package/schemas/events/whooshbang-event-v1.schema.json +1 -1
  82. package/schemas/fixture-index.schema.json +1 -1
  83. package/schemas/interaction-machine-scenario.schema.json +1 -1
  84. package/schemas/interaction-v1.schema.json +2 -2
  85. package/schemas/machine-v1.schema.json +1 -1
  86. package/schemas/provider-capabilities-v1.schema.json +1 -1
  87. package/schemas/webhooks/webhook-delivery-case-v1.schema.json +1 -1
  88. package/schemas/webhooks/webhook-signing-vector-v1.schema.json +1 -1
  89. package/schemas/whooshbang-v1.schema.json +109 -22
@@ -663,7 +663,7 @@ export type Message = {
663
663
  * The effective provider boundary selected for a message. Connection delivery uses the exact authorized environment connection; simulator delivery never calls a provider.
664
664
  */
665
665
  export type MessageDeliveryTarget = "connection" | "simulator";
666
- export type MessageState = "accepted" | "dispatch_pending" | "queued" | "sending" | "provider_accepted" | "retry_wait" | "terminal_failed" | "outcome_unknown" | "cancelled" | "expired";
666
+ export type MessageState = "accepted" | "dispatch_pending" | "queued" | "sending" | "intake_pending" | "provider_accepted" | "retry_wait" | "terminal_failed" | "outcome_unknown" | "cancelled" | "expired";
667
667
  /**
668
668
  * A safe aggregate of delivery attempts. Protected provider responses are excluded.
669
669
  */
@@ -1374,7 +1374,7 @@ export type EmailDomainName = string;
1374
1374
  export type EmailDomainLifecycle = "requested" | "creating" | "dns_required" | "verifying" | "testing" | "active" | "provider_action_required" | "dns_failed" | "oauth_required" | "held" | "deleting" | "deleted";
1375
1375
  export type EmailDomainCapabilityState = "pending" | "verified" | "failed" | "unsupported";
1376
1376
  /**
1377
- * One exact neutral DNS record. `name` is preserved exactly as the provider returns it and is relative to the registrable domain (for example `send.notify`, not `send.notify.example.com`).
1377
+ * One exact neutral DNS record. `name` and `value` are preserved exactly as supplied; a record name may be relative to the registrable domain or a full hostname. DNS consoles differ in whether they append the zone automatically.
1378
1378
  */
1379
1379
  export type EmailDnsRecord = {
1380
1380
  type: "MX";
@@ -1398,6 +1398,18 @@ export type EmailDomainGuide = {
1398
1398
  */
1399
1399
  instructions_url?: string;
1400
1400
  };
1401
+ /**
1402
+ * Creates or safely adopts an account-owned domain. Omit backend and installation_id for the default FlowXO Mail service. An existing legacy OAuth installation may still be selected by id.
1403
+ */
1404
+ export type CreateEmailDomainRequest = {
1405
+ installation_id: OpaqueIdentifier;
1406
+ domain: EmailDomainName;
1407
+ tls?: "opportunistic" | "enforced";
1408
+ } | {
1409
+ backend?: "flowxo_mail";
1410
+ domain: EmailDomainName;
1411
+ tls?: "opportunistic" | "enforced";
1412
+ };
1401
1413
  /**
1402
1414
  * How consent for this exact subscriber, notifier and connection was established. A customer assertion never becomes recipient-observed verification. Complaint, unsubscribe and suppression override either arm.
1403
1415
  */
@@ -4163,11 +4175,16 @@ export interface MessageCategory {
4163
4175
  level: "low" | "normal" | "high" | "critical";
4164
4176
  can_turn_off: boolean;
4165
4177
  is_default: boolean;
4166
- }
4167
- export interface MessageCategoryCollection {
4168
4178
  /**
4169
- * @maxItems 100
4179
+ * Number of subscribers in this project who currently have this category switched off. Returned when listing a project's categories.
4170
4180
  */
4181
+ opted_out_subscriber_count?: number;
4182
+ /**
4183
+ * An RFC 3339 timestamp with a UTC offset. The server is authoritative.
4184
+ */
4185
+ archived_at?: string;
4186
+ }
4187
+ export interface MessageCategoryCollection {
4171
4188
  items: MessageCategory[];
4172
4189
  total: ListTotal;
4173
4190
  }
@@ -4335,6 +4352,10 @@ export interface ProviderInstallation {
4335
4352
  updated_at: Timestamp;
4336
4353
  }
4337
4354
  export interface EmailDomainCollection {
4355
+ /**
4356
+ * Whether this deployment is configured to offer service-managed custom-domain setup. False is a deployment capability, not a domain readiness verdict.
4357
+ */
4358
+ managed_domain_available?: boolean;
4338
4359
  /**
4339
4360
  * @maxItems 100
4340
4361
  */
@@ -4614,14 +4635,6 @@ export interface EmailSubjectPolicy {
4614
4635
  maximum_code_points: 200;
4615
4636
  normalize_whitespace: true;
4616
4637
  }
4617
- /**
4618
- * Creates or safely adopts one dedicated domain inside an authorized account-owned installation. No provider team id, API key or OAuth credential can be supplied.
4619
- */
4620
- export interface CreateEmailDomainRequest {
4621
- installation_id: OpaqueIdentifier;
4622
- domain: EmailDomainName;
4623
- tls?: "opportunistic" | "enforced";
4624
- }
4625
4638
  /**
4626
4639
  * Creates one durable import scoped by the authenticated organization and the project/environment route. Every row delegates to the ordinary binding operation so imports cannot bypass consent, uniqueness, hold or tenant checks.
4627
4640
  */
@@ -5808,7 +5821,7 @@ export interface CustomerApplicationManifest {
5808
5821
  diagnostic_id: DiagnosticId;
5809
5822
  }
5810
5823
  /**
5811
- * The project-owned recipient identity, fallback locale, and email answer behavior. Email answers use one click when no setting has been saved.
5824
+ * The project-owned recipient identity, fallback locale, email answer behavior, and category switch visibility. Email answers use one click when no setting has been saved.
5812
5825
  */
5813
5826
  export interface ProjectRecipientExperience {
5814
5827
  project_id: OpaqueIdentifier;
@@ -5818,6 +5831,14 @@ export interface ProjectRecipientExperience {
5818
5831
  * How an email confirm or select button records its bound answer. Defaults to one_click for existing and new projects; free-text answers always use a form.
5819
5832
  */
5820
5833
  email_answer_confirmation?: "one_click" | "confirm";
5834
+ /**
5835
+ * Whether subscriber settings show service category switches. A subscriber who already turned a category off still sees its switch. Defaults to true.
5836
+ */
5837
+ show_service_category_switches: boolean;
5838
+ /**
5839
+ * Whether subscriber settings show marketing category switches. A subscriber who already turned a category off still sees its switch. Defaults to true.
5840
+ */
5841
+ show_marketing_category_switches: boolean;
5821
5842
  row_version: number;
5822
5843
  updated_at: Timestamp;
5823
5844
  diagnostic_id: DiagnosticId;
@@ -5835,15 +5856,23 @@ export interface RecipientBrand {
5835
5856
  color_scheme: "light" | "dark" | "system";
5836
5857
  }
5837
5858
  /**
5838
- * Replaces the project-owned recipient brand and fallback locale under the last observed row version. Omission of email_answer_confirmation preserves its current value, or one_click for an unwritten project.
5859
+ * Updates supplied project recipient settings under the last observed row version. Omitted fields keep their current values or project defaults.
5839
5860
  */
5840
5861
  export interface UpdateProjectRecipientExperienceRequest {
5841
- default_locale: RecipientLanguage;
5842
- brand: RecipientBrand;
5862
+ default_locale?: RecipientLanguage;
5863
+ brand?: RecipientBrand;
5843
5864
  /**
5844
5865
  * Optional project-wide email answer behavior. Omission preserves the current value.
5845
5866
  */
5846
5867
  email_answer_confirmation?: "one_click" | "confirm";
5868
+ /**
5869
+ * Show service category switches in subscriber settings. A subscriber who already turned a category off still sees its switch. Omit to keep the current value.
5870
+ */
5871
+ show_service_category_switches?: boolean;
5872
+ /**
5873
+ * Show marketing category switches in subscriber settings. A subscriber who already turned a category off still sees its switch. Omit to keep the current value.
5874
+ */
5875
+ show_marketing_category_switches?: boolean;
5847
5876
  row_version: number;
5848
5877
  }
5849
5878
  /**
@@ -7398,7 +7427,7 @@ export interface MessageDeliveryTimelineEntry {
7398
7427
  at: Timestamp;
7399
7428
  attempt?: number;
7400
7429
  classified_error_code?: ProblemCode;
7401
- kind: "accepted" | "queued" | "attempt_started" | "attempt_sent" | "attempt_retry_scheduled" | "attempt_could_not_send" | "attempt_outcome_unknown" | "could_not_send" | "outcome_unknown" | "cancelled" | "expired";
7430
+ kind: "accepted" | "queued" | "attempt_started" | "attempt_intake_pending" | "attempt_sent" | "attempt_retry_scheduled" | "attempt_could_not_send" | "attempt_outcome_unknown" | "could_not_send" | "outcome_unknown" | "cancelled" | "expired";
7402
7431
  retry_at?: Timestamp;
7403
7432
  }
7404
7433
  /**
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "fixtures": [
4
4
  {
5
5
  "id": "create-project.request",
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "api-credential-invalid-indistinguishable",
4
4
  "category": "credential_lifecycle",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "api-credential-one-time-reveal",
4
4
  "category": "credential_lifecycle",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "api-credential-revocation-replay",
4
4
  "category": "credential_lifecycle",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "api-credential-rotation-overlap",
4
4
  "category": "credential_lifecycle",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "cancellation-too-late",
4
4
  "category": "cancellation",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "cross-organization-project",
4
4
  "category": "isolation",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "cross-project-resource",
4
4
  "category": "isolation",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "environment-mismatch",
4
4
  "category": "isolation",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "idempotency-conflict",
4
4
  "category": "idempotency",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "idempotency-equivalent-replay",
4
4
  "category": "idempotency",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "malformed-bearer",
4
4
  "category": "isolation",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "metadata-overrun",
4
4
  "category": "message_outcome",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "missing-scope",
4
4
  "category": "isolation",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "project-create-equivalent-replay",
4
4
  "category": "idempotency",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "project-slug-conflict",
4
4
  "category": "idempotency",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "provider-outcome-unknown",
4
4
  "category": "message_outcome",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "subscription-activation-replay",
4
4
  "category": "subscription_replay",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "subscription-authorization-capability-opacity",
4
4
  "category": "isolation",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "subscription-cross-connection-callback-rejected",
4
4
  "category": "isolation",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "subscription-expired-replay",
4
4
  "category": "subscription_replay",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "subscription-selected-connection-replay",
4
4
  "category": "subscription_replay",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "ack-conflict",
4
4
  "category": "machine_ack",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "ack-cross-machine",
4
4
  "category": "machine_authorization",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "ack-out-of-order",
4
4
  "category": "machine_ack",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "ack-replay",
4
4
  "category": "machine_ack",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "ambiguous-free-text",
4
4
  "category": "interaction_resolution",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "callback-token-opacity",
4
4
  "category": "callback_token",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "credential-registration-conflict",
4
4
  "category": "machine_credential",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "credential-registration-replay",
4
4
  "category": "machine_credential",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "credential-revocation-replay",
4
4
  "category": "machine_credential",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "credential-rotation",
4
4
  "category": "machine_credential",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "first-credential-activates",
4
4
  "category": "machine_credential",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "interaction-duplicate",
4
4
  "category": "interaction_resolution",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "interaction-expired",
4
4
  "category": "interaction_resolution",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "interaction-mismatch",
4
4
  "category": "interaction_resolution",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "interaction-retired",
4
4
  "category": "interaction_resolution",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "interaction-stale",
4
4
  "category": "interaction_resolution",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "machine-admin-denied",
4
4
  "category": "machine_authorization",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "machine-bound-message-create",
4
4
  "category": "machine_authorization",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "machine-cancel-denied",
4
4
  "category": "machine_authorization",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "machine-crash-before-ack",
4
4
  "category": "machine_poll",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "machine-notifier-mismatch",
4
4
  "category": "machine_authorization",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "machine-other-message-read",
4
4
  "category": "machine_authorization",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "machine-owned-message-read",
4
4
  "category": "machine_authorization",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "machine-subscriber-mismatch",
4
4
  "category": "machine_authorization",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "poll-uncommitted-cursor-rejected",
4
4
  "category": "machine_poll",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "project-credential-machine-endpoint-denied",
4
4
  "category": "machine_authorization",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "quarantine-integrity-rejected",
4
4
  "category": "quarantine",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "quarantine-signature-rejected",
4
4
  "category": "quarantine",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "quarantine-valid",
4
4
  "category": "quarantine",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "revoked-machine-credential",
4
4
  "category": "machine_authorization",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "membership-broadcast-snapshot",
4
4
  "category": "membership_broadcast",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "preferred-binding-resolution",
4
4
  "category": "preference_resolution",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "recipient-session-security",
4
4
  "category": "recipient_security",
5
5
  "given": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "4.0.0",
3
3
  "id": "subscriber-initial-groups-transaction",
4
4
  "category": "subscriber_groups",
5
5
  "given": {
@@ -7,6 +7,8 @@
7
7
  "accent_color": "#4F46E5",
8
8
  "color_scheme": "system"
9
9
  },
10
+ "show_service_category_switches": true,
11
+ "show_marketing_category_switches": true,
10
12
  "row_version": 2,
11
13
  "updated_at": "2026-08-22T18:00:00Z",
12
14
  "diagnostic_id": "diag_n17_project_experience"