@whooshbang/contracts 3.2.0 → 3.3.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 (86) hide show
  1. package/CHANGELOG.md +5 -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/validators-standalone.js +1273 -978
  6. package/dist/generated/validators-standalone.js.map +1 -1
  7. package/dist/generated/whooshbang-v1.d.ts +28 -7
  8. package/fixtures/core-v1/fixture-index.json +1 -1
  9. package/fixtures/core-v1/scenarios/api-credential-invalid-indistinguishable.json +1 -1
  10. package/fixtures/core-v1/scenarios/api-credential-one-time-reveal.json +1 -1
  11. package/fixtures/core-v1/scenarios/api-credential-revocation-replay.json +1 -1
  12. package/fixtures/core-v1/scenarios/api-credential-rotation-overlap.json +1 -1
  13. package/fixtures/core-v1/scenarios/cancellation-too-late.json +1 -1
  14. package/fixtures/core-v1/scenarios/cross-organization-project.json +1 -1
  15. package/fixtures/core-v1/scenarios/cross-project-resource.json +1 -1
  16. package/fixtures/core-v1/scenarios/environment-mismatch.json +1 -1
  17. package/fixtures/core-v1/scenarios/idempotency-conflict.json +1 -1
  18. package/fixtures/core-v1/scenarios/idempotency-equivalent-replay.json +1 -1
  19. package/fixtures/core-v1/scenarios/malformed-bearer.json +1 -1
  20. package/fixtures/core-v1/scenarios/metadata-overrun.json +1 -1
  21. package/fixtures/core-v1/scenarios/missing-scope.json +1 -1
  22. package/fixtures/core-v1/scenarios/project-create-equivalent-replay.json +1 -1
  23. package/fixtures/core-v1/scenarios/project-slug-conflict.json +1 -1
  24. package/fixtures/core-v1/scenarios/provider-outcome-unknown.json +1 -1
  25. package/fixtures/core-v1/scenarios/subscription-activation-replay.json +1 -1
  26. package/fixtures/core-v1/scenarios/subscription-authorization-capability-opacity.json +1 -1
  27. package/fixtures/core-v1/scenarios/subscription-cross-connection-callback-rejected.json +1 -1
  28. package/fixtures/core-v1/scenarios/subscription-expired-replay.json +1 -1
  29. package/fixtures/core-v1/scenarios/subscription-selected-connection-replay.json +1 -1
  30. package/fixtures/interaction-machine-v1/scenarios/ack-conflict.json +1 -1
  31. package/fixtures/interaction-machine-v1/scenarios/ack-cross-machine.json +1 -1
  32. package/fixtures/interaction-machine-v1/scenarios/ack-out-of-order.json +1 -1
  33. package/fixtures/interaction-machine-v1/scenarios/ack-replay.json +1 -1
  34. package/fixtures/interaction-machine-v1/scenarios/ambiguous-free-text.json +1 -1
  35. package/fixtures/interaction-machine-v1/scenarios/callback-token-opacity.json +1 -1
  36. package/fixtures/interaction-machine-v1/scenarios/credential-registration-conflict.json +1 -1
  37. package/fixtures/interaction-machine-v1/scenarios/credential-registration-replay.json +1 -1
  38. package/fixtures/interaction-machine-v1/scenarios/credential-revocation-replay.json +1 -1
  39. package/fixtures/interaction-machine-v1/scenarios/credential-rotation.json +1 -1
  40. package/fixtures/interaction-machine-v1/scenarios/first-credential-activates.json +1 -1
  41. package/fixtures/interaction-machine-v1/scenarios/interaction-duplicate.json +1 -1
  42. package/fixtures/interaction-machine-v1/scenarios/interaction-expired.json +1 -1
  43. package/fixtures/interaction-machine-v1/scenarios/interaction-mismatch.json +1 -1
  44. package/fixtures/interaction-machine-v1/scenarios/interaction-retired.json +1 -1
  45. package/fixtures/interaction-machine-v1/scenarios/interaction-stale.json +1 -1
  46. package/fixtures/interaction-machine-v1/scenarios/machine-admin-denied.json +1 -1
  47. package/fixtures/interaction-machine-v1/scenarios/machine-bound-message-create.json +1 -1
  48. package/fixtures/interaction-machine-v1/scenarios/machine-cancel-denied.json +1 -1
  49. package/fixtures/interaction-machine-v1/scenarios/machine-crash-before-ack.json +1 -1
  50. package/fixtures/interaction-machine-v1/scenarios/machine-notifier-mismatch.json +1 -1
  51. package/fixtures/interaction-machine-v1/scenarios/machine-other-message-read.json +1 -1
  52. package/fixtures/interaction-machine-v1/scenarios/machine-owned-message-read.json +1 -1
  53. package/fixtures/interaction-machine-v1/scenarios/machine-subscriber-mismatch.json +1 -1
  54. package/fixtures/interaction-machine-v1/scenarios/poll-uncommitted-cursor-rejected.json +1 -1
  55. package/fixtures/interaction-machine-v1/scenarios/project-credential-machine-endpoint-denied.json +1 -1
  56. package/fixtures/interaction-machine-v1/scenarios/quarantine-integrity-rejected.json +1 -1
  57. package/fixtures/interaction-machine-v1/scenarios/quarantine-signature-rejected.json +1 -1
  58. package/fixtures/interaction-machine-v1/scenarios/quarantine-valid.json +1 -1
  59. package/fixtures/interaction-machine-v1/scenarios/revoked-machine-credential.json +1 -1
  60. package/fixtures/recipient-experience-v1/scenarios/membership-broadcast-snapshot.json +1 -1
  61. package/fixtures/recipient-experience-v1/scenarios/preferred-binding-resolution.json +1 -1
  62. package/fixtures/recipient-experience-v1/scenarios/recipient-session-security.json +1 -1
  63. package/fixtures/recipient-experience-v1/scenarios/subscriber-initial-groups-transaction.json +1 -1
  64. package/fixtures/recipient-experience-v1/success/project-recipient-experience.json +2 -0
  65. package/openapi/generated/whooshbang-v1.bundle.json +67 -9
  66. package/openapi/whooshbang-v1.yaml +32 -3
  67. package/package.json +1 -1
  68. package/schemas/core-scenario.schema.json +1 -1
  69. package/schemas/events/agent-binding-degraded-v1.schema.json +1 -1
  70. package/schemas/events/interaction-expired-v1.schema.json +1 -1
  71. package/schemas/events/interaction-received-v1.schema.json +1 -1
  72. package/schemas/events/message-delivered-v1.schema.json +1 -1
  73. package/schemas/events/message-expired-v1.schema.json +1 -1
  74. package/schemas/events/message-failed-v1.schema.json +1 -1
  75. package/schemas/events/message-provider-accepted-v1.schema.json +1 -1
  76. package/schemas/events/subscription-activated-v1.schema.json +1 -1
  77. package/schemas/events/subscription-revoked-v1.schema.json +1 -1
  78. package/schemas/events/whooshbang-event-v1.schema.json +1 -1
  79. package/schemas/fixture-index.schema.json +1 -1
  80. package/schemas/interaction-machine-scenario.schema.json +1 -1
  81. package/schemas/interaction-v1.schema.json +1 -1
  82. package/schemas/machine-v1.schema.json +1 -1
  83. package/schemas/provider-capabilities-v1.schema.json +1 -1
  84. package/schemas/webhooks/webhook-delivery-case-v1.schema.json +1 -1
  85. package/schemas/webhooks/webhook-signing-vector-v1.schema.json +1 -1
  86. package/schemas/whooshbang-v1.schema.json +32 -6
@@ -4163,11 +4163,16 @@ export interface MessageCategory {
4163
4163
  level: "low" | "normal" | "high" | "critical";
4164
4164
  can_turn_off: boolean;
4165
4165
  is_default: boolean;
4166
- }
4167
- export interface MessageCategoryCollection {
4168
4166
  /**
4169
- * @maxItems 100
4167
+ * Number of subscribers in this project who currently have this category switched off. Returned when listing a project's categories.
4170
4168
  */
4169
+ opted_out_subscriber_count?: number;
4170
+ /**
4171
+ * An RFC 3339 timestamp with a UTC offset. The server is authoritative.
4172
+ */
4173
+ archived_at?: string;
4174
+ }
4175
+ export interface MessageCategoryCollection {
4171
4176
  items: MessageCategory[];
4172
4177
  total: ListTotal;
4173
4178
  }
@@ -5808,7 +5813,7 @@ export interface CustomerApplicationManifest {
5808
5813
  diagnostic_id: DiagnosticId;
5809
5814
  }
5810
5815
  /**
5811
- * The project-owned recipient identity, fallback locale, and email answer behavior. Email answers use one click when no setting has been saved.
5816
+ * 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
5817
  */
5813
5818
  export interface ProjectRecipientExperience {
5814
5819
  project_id: OpaqueIdentifier;
@@ -5818,6 +5823,14 @@ export interface ProjectRecipientExperience {
5818
5823
  * 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
5824
  */
5820
5825
  email_answer_confirmation?: "one_click" | "confirm";
5826
+ /**
5827
+ * Whether subscriber settings show service category switches. A subscriber who already turned a category off still sees its switch. Defaults to true.
5828
+ */
5829
+ show_service_category_switches: boolean;
5830
+ /**
5831
+ * Whether subscriber settings show marketing category switches. A subscriber who already turned a category off still sees its switch. Defaults to true.
5832
+ */
5833
+ show_marketing_category_switches: boolean;
5821
5834
  row_version: number;
5822
5835
  updated_at: Timestamp;
5823
5836
  diagnostic_id: DiagnosticId;
@@ -5835,15 +5848,23 @@ export interface RecipientBrand {
5835
5848
  color_scheme: "light" | "dark" | "system";
5836
5849
  }
5837
5850
  /**
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.
5851
+ * Updates supplied project recipient settings under the last observed row version. Omitted fields keep their current values or project defaults.
5839
5852
  */
5840
5853
  export interface UpdateProjectRecipientExperienceRequest {
5841
- default_locale: RecipientLanguage;
5842
- brand: RecipientBrand;
5854
+ default_locale?: RecipientLanguage;
5855
+ brand?: RecipientBrand;
5843
5856
  /**
5844
5857
  * Optional project-wide email answer behavior. Omission preserves the current value.
5845
5858
  */
5846
5859
  email_answer_confirmation?: "one_click" | "confirm";
5860
+ /**
5861
+ * 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.
5862
+ */
5863
+ show_service_category_switches?: boolean;
5864
+ /**
5865
+ * 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.
5866
+ */
5867
+ show_marketing_category_switches?: boolean;
5847
5868
  row_version: number;
5848
5869
  }
5849
5870
  /**
@@ -1,5 +1,5 @@
1
1
  {
2
- "contract_version": "3.2.0",
2
+ "contract_version": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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": "3.3.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"