@whooshbang/contracts 2.5.0 → 3.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 (102) hide show
  1. package/CHANGELOG.md +13 -2
  2. package/README.md +21 -21
  3. package/contract-manifest.json +32 -33
  4. package/dist/generated/artifact-index.d.ts +34 -34
  5. package/dist/generated/artifact-index.js +32 -33
  6. package/dist/generated/artifact-index.js.map +1 -1
  7. package/dist/generated/interaction-v1.d.ts +77 -4
  8. package/dist/generated/validators-standalone.d.ts +492 -492
  9. package/dist/generated/validators-standalone.js +6405 -4572
  10. package/dist/generated/validators-standalone.js.map +1 -1
  11. package/dist/generated/validators.d.ts +2 -2
  12. package/dist/generated/validators.js +1 -0
  13. package/dist/generated/validators.js.map +1 -1
  14. package/dist/generated/whooshbang-v1.d.ts +526 -116
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/input-defaults.d.ts +7 -0
  19. package/dist/input-defaults.js +59 -0
  20. package/dist/input-defaults.js.map +1 -0
  21. package/dist/interaction-expiry.js +2 -1
  22. package/dist/interaction-expiry.js.map +1 -1
  23. package/fixtures/core-v1/fixture-index.json +1 -9
  24. package/fixtures/core-v1/problems/idempotency-key-required.json +2 -2
  25. package/fixtures/core-v1/scenarios/api-credential-invalid-indistinguishable.json +1 -1
  26. package/fixtures/core-v1/scenarios/api-credential-one-time-reveal.json +1 -1
  27. package/fixtures/core-v1/scenarios/api-credential-revocation-replay.json +1 -1
  28. package/fixtures/core-v1/scenarios/api-credential-rotation-overlap.json +1 -1
  29. package/fixtures/core-v1/scenarios/cancellation-too-late.json +1 -1
  30. package/fixtures/core-v1/scenarios/cross-organization-project.json +1 -1
  31. package/fixtures/core-v1/scenarios/cross-project-resource.json +1 -1
  32. package/fixtures/core-v1/scenarios/environment-mismatch.json +1 -1
  33. package/fixtures/core-v1/scenarios/idempotency-conflict.json +1 -1
  34. package/fixtures/core-v1/scenarios/idempotency-equivalent-replay.json +1 -1
  35. package/fixtures/core-v1/scenarios/malformed-bearer.json +1 -1
  36. package/fixtures/core-v1/scenarios/metadata-overrun.json +1 -1
  37. package/fixtures/core-v1/scenarios/missing-scope.json +1 -1
  38. package/fixtures/core-v1/scenarios/project-create-equivalent-replay.json +1 -1
  39. package/fixtures/core-v1/scenarios/project-slug-conflict.json +1 -1
  40. package/fixtures/core-v1/scenarios/provider-outcome-unknown.json +1 -1
  41. package/fixtures/core-v1/scenarios/subscription-activation-replay.json +1 -1
  42. package/fixtures/core-v1/scenarios/subscription-authorization-capability-opacity.json +1 -1
  43. package/fixtures/core-v1/scenarios/subscription-cross-connection-callback-rejected.json +1 -1
  44. package/fixtures/core-v1/scenarios/subscription-expired-replay.json +1 -1
  45. package/fixtures/core-v1/scenarios/subscription-selected-connection-replay.json +1 -1
  46. package/fixtures/interaction-machine-v1/scenarios/ack-conflict.json +1 -1
  47. package/fixtures/interaction-machine-v1/scenarios/ack-cross-machine.json +1 -1
  48. package/fixtures/interaction-machine-v1/scenarios/ack-out-of-order.json +1 -1
  49. package/fixtures/interaction-machine-v1/scenarios/ack-replay.json +1 -1
  50. package/fixtures/interaction-machine-v1/scenarios/ambiguous-free-text.json +1 -1
  51. package/fixtures/interaction-machine-v1/scenarios/callback-token-opacity.json +1 -1
  52. package/fixtures/interaction-machine-v1/scenarios/credential-registration-conflict.json +1 -1
  53. package/fixtures/interaction-machine-v1/scenarios/credential-registration-replay.json +1 -1
  54. package/fixtures/interaction-machine-v1/scenarios/credential-revocation-replay.json +1 -1
  55. package/fixtures/interaction-machine-v1/scenarios/credential-rotation.json +1 -1
  56. package/fixtures/interaction-machine-v1/scenarios/first-credential-activates.json +1 -1
  57. package/fixtures/interaction-machine-v1/scenarios/interaction-duplicate.json +1 -1
  58. package/fixtures/interaction-machine-v1/scenarios/interaction-expired.json +1 -1
  59. package/fixtures/interaction-machine-v1/scenarios/interaction-mismatch.json +1 -1
  60. package/fixtures/interaction-machine-v1/scenarios/interaction-retired.json +1 -1
  61. package/fixtures/interaction-machine-v1/scenarios/interaction-stale.json +1 -1
  62. package/fixtures/interaction-machine-v1/scenarios/machine-admin-denied.json +1 -1
  63. package/fixtures/interaction-machine-v1/scenarios/machine-bound-message-create.json +1 -1
  64. package/fixtures/interaction-machine-v1/scenarios/machine-cancel-denied.json +1 -1
  65. package/fixtures/interaction-machine-v1/scenarios/machine-crash-before-ack.json +1 -1
  66. package/fixtures/interaction-machine-v1/scenarios/machine-notifier-mismatch.json +1 -1
  67. package/fixtures/interaction-machine-v1/scenarios/machine-other-message-read.json +1 -1
  68. package/fixtures/interaction-machine-v1/scenarios/machine-owned-message-read.json +1 -1
  69. package/fixtures/interaction-machine-v1/scenarios/machine-subscriber-mismatch.json +1 -1
  70. package/fixtures/interaction-machine-v1/scenarios/poll-uncommitted-cursor-rejected.json +1 -1
  71. package/fixtures/interaction-machine-v1/scenarios/project-credential-machine-endpoint-denied.json +1 -1
  72. package/fixtures/interaction-machine-v1/scenarios/quarantine-integrity-rejected.json +1 -1
  73. package/fixtures/interaction-machine-v1/scenarios/quarantine-signature-rejected.json +1 -1
  74. package/fixtures/interaction-machine-v1/scenarios/quarantine-valid.json +1 -1
  75. package/fixtures/interaction-machine-v1/scenarios/revoked-machine-credential.json +1 -1
  76. package/fixtures/recipient-experience-v1/scenarios/membership-broadcast-snapshot.json +1 -1
  77. package/fixtures/recipient-experience-v1/scenarios/preferred-binding-resolution.json +1 -1
  78. package/fixtures/recipient-experience-v1/scenarios/recipient-session-security.json +1 -1
  79. package/fixtures/recipient-experience-v1/scenarios/subscriber-initial-groups-transaction.json +1 -1
  80. package/openapi/generated/whooshbang-v1.bundle.json +1009 -302
  81. package/openapi/whooshbang-v1.yaml +455 -74
  82. package/package.json +1 -1
  83. package/schemas/core-scenario.schema.json +1 -1
  84. package/schemas/events/agent-binding-degraded-v1.schema.json +1 -1
  85. package/schemas/events/interaction-expired-v1.schema.json +1 -1
  86. package/schemas/events/interaction-received-v1.schema.json +1 -1
  87. package/schemas/events/message-delivered-v1.schema.json +1 -1
  88. package/schemas/events/message-expired-v1.schema.json +1 -1
  89. package/schemas/events/message-failed-v1.schema.json +1 -1
  90. package/schemas/events/message-provider-accepted-v1.schema.json +1 -1
  91. package/schemas/events/subscription-activated-v1.schema.json +1 -1
  92. package/schemas/events/subscription-revoked-v1.schema.json +1 -1
  93. package/schemas/events/whooshbang-event-v1.schema.json +1 -1
  94. package/schemas/fixture-index.schema.json +1 -1
  95. package/schemas/interaction-machine-scenario.schema.json +1 -1
  96. package/schemas/interaction-v1.schema.json +192 -5
  97. package/schemas/machine-v1.schema.json +1 -1
  98. package/schemas/provider-capabilities-v1.schema.json +1 -1
  99. package/schemas/webhooks/webhook-delivery-case-v1.schema.json +1 -1
  100. package/schemas/webhooks/webhook-signing-vector-v1.schema.json +1 -1
  101. package/schemas/whooshbang-v1.schema.json +410 -63
  102. package/fixtures/core-v1/problems/replay-unavailable-rollout.json +0 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whooshbang/contracts",
3
- "version": "2.5.0",
3
+ "version": "3.0.0",
4
4
  "description": "Versioned public contracts for WhooshBang",
5
5
  "private": false,
6
6
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/core-scenario.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "CoreContractScenario",
6
6
  "description": "A deterministic C0-02 semantic, state, idempotency, or isolation scenario.",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/agent-binding-degraded-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "AgentBindingDegradedEventV1",
6
6
  "description": "An agent binding entered a provider-neutral degraded state.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/AgentBindingDegradedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/interaction-expired-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "InteractionExpiredEventV1",
6
6
  "description": "An interaction reached its terminal expiry without a valid answer.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/InteractionExpiredEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/interaction-received-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "InteractionReceivedEventV1",
6
6
  "description": "One authenticated, provider-neutral interaction answer was received.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/InteractionReceivedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/message-delivered-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "MessageDeliveredEventV1",
6
6
  "description": "A provider supplied trustworthy evidence that a message was delivered.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/MessageDeliveredEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/message-expired-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "MessageExpiredEventV1",
6
6
  "description": "A message expired before reaching a later delivery state.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/MessageExpiredEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/message-failed-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "MessageFailedEventV1",
6
6
  "description": "A message reached a classified terminal failure.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/MessageFailedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/message-provider-accepted-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "MessageProviderAcceptedEventV1",
6
6
  "description": "The provider accepted a message without implying delivery.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/MessageProviderAcceptedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/subscription-activated-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "SubscriptionActivatedEventV1",
6
6
  "description": "A subscription became active with a safe public channel binding.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/SubscriptionActivatedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/subscription-revoked-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "SubscriptionRevokedEventV1",
6
6
  "description": "A subscription and its safe public channel binding were revoked.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/SubscriptionRevokedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/whooshbang-event-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "WhooshBangEventV1ContractDocument",
6
6
  "description": "Strict public customer-event envelope and initial WhooshBang event union.",
7
7
  "oneOf": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/fixture-index.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "CoreFixtureIndex",
6
6
  "description": "The machine-readable index of deterministic C0-02 through C0-04 golden fixtures.",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/interaction-machine-scenario.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "InteractionMachineScenario",
6
6
  "description": "A deterministic C0-03 interaction, credential, authorization, polling, acknowledgement, or quarantine scenario.",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/interaction-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "InteractionV1ContractDocument",
6
6
  "description": "Provider-neutral confirm, single-select, input, lifecycle, callback-token, and authenticated answer-event contracts.",
7
7
  "$defs": {
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "InteractionCorrelationId": {
21
21
  "type": "string",
22
- "minLength": 8,
22
+ "minLength": 1,
23
23
  "maxLength": 128,
24
24
  "pattern": "^[^\\u0000-\\u001F\\u007F]+$",
25
25
  "description": "Caller-owned opaque correlation returned as data, never treated as execution authority."
@@ -475,7 +475,7 @@
475
475
  },
476
476
  "ConfirmInteractionSendRequest": {
477
477
  "type": "object",
478
- "required": ["type", "prompt"],
478
+ "required": ["prompt"],
479
479
  "properties": {
480
480
  "type": {
481
481
  "const": "confirm"
@@ -516,7 +516,7 @@
516
516
  }
517
517
  },
518
518
  "InteractionSendRequest": {
519
- "description": "Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.",
519
+ "description": "Options infer select; otherwise confirm. Typed replies require type: input. Omit expiry for 24 hours.",
520
520
  "oneOf": [
521
521
  {
522
522
  "$ref": "#/$defs/ConfirmInteractionSendRequest"
@@ -530,6 +530,135 @@
530
530
  ]
531
531
  },
532
532
  "SelectInteractionSendRequest": {
533
+ "type": "object",
534
+ "required": ["prompt", "options"],
535
+ "properties": {
536
+ "type": {
537
+ "const": "select"
538
+ },
539
+ "prompt": {
540
+ "$ref": "#/$defs/InteractionPrompt"
541
+ },
542
+ "options": {
543
+ "type": "array",
544
+ "minItems": 2,
545
+ "maxItems": 6,
546
+ "items": {
547
+ "$ref": "#/$defs/InteractionOptionInput"
548
+ },
549
+ "x-unique-property": "value"
550
+ },
551
+ "expires_at": {
552
+ "$ref": "#/$defs/Timestamp",
553
+ "description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
554
+ },
555
+ "correlation_id": {
556
+ "$ref": "#/$defs/InteractionCorrelationId"
557
+ },
558
+ "expires_in_seconds": {
559
+ "type": "integer",
560
+ "minimum": 30,
561
+ "description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
562
+ }
563
+ },
564
+ "additionalProperties": false,
565
+ "not": {
566
+ "required": ["expires_at", "expires_in_seconds"],
567
+ "properties": {
568
+ "expires_at": {},
569
+ "expires_in_seconds": {}
570
+ }
571
+ }
572
+ },
573
+ "InputInteractionSendRequest": {
574
+ "type": "object",
575
+ "required": ["type", "prompt"],
576
+ "properties": {
577
+ "type": {
578
+ "const": "input"
579
+ },
580
+ "prompt": {
581
+ "$ref": "#/$defs/InteractionPrompt"
582
+ },
583
+ "expires_at": {
584
+ "$ref": "#/$defs/Timestamp",
585
+ "description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
586
+ },
587
+ "correlation_id": {
588
+ "$ref": "#/$defs/InteractionCorrelationId"
589
+ },
590
+ "expires_in_seconds": {
591
+ "type": "integer",
592
+ "minimum": 30,
593
+ "description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
594
+ }
595
+ },
596
+ "additionalProperties": false,
597
+ "not": {
598
+ "required": ["expires_at", "expires_in_seconds"],
599
+ "properties": {
600
+ "expires_at": {},
601
+ "expires_in_seconds": {}
602
+ }
603
+ }
604
+ },
605
+ "CanonicalInteractionSendRequest": {
606
+ "description": "Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.",
607
+ "oneOf": [
608
+ {
609
+ "$ref": "#/$defs/CanonicalConfirmInteractionSendRequest"
610
+ },
611
+ {
612
+ "$ref": "#/$defs/CanonicalSelectInteractionSendRequest"
613
+ },
614
+ {
615
+ "$ref": "#/$defs/CanonicalInputInteractionSendRequest"
616
+ }
617
+ ]
618
+ },
619
+ "CanonicalConfirmInteractionSendRequest": {
620
+ "type": "object",
621
+ "required": ["type", "prompt"],
622
+ "properties": {
623
+ "type": {
624
+ "const": "confirm"
625
+ },
626
+ "prompt": {
627
+ "$ref": "#/$defs/InteractionPrompt"
628
+ },
629
+ "confirm_label": {
630
+ "type": "string",
631
+ "minLength": 1,
632
+ "maxLength": 40
633
+ },
634
+ "deny_label": {
635
+ "type": "string",
636
+ "minLength": 1,
637
+ "maxLength": 40
638
+ },
639
+ "expires_at": {
640
+ "$ref": "#/$defs/Timestamp",
641
+ "description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
642
+ },
643
+ "correlation_id": {
644
+ "$ref": "#/$defs/InteractionCorrelationId"
645
+ },
646
+ "expires_in_seconds": {
647
+ "type": "integer",
648
+ "minimum": 30,
649
+ "description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
650
+ }
651
+ },
652
+ "additionalProperties": false,
653
+ "not": {
654
+ "required": ["expires_at", "expires_in_seconds"],
655
+ "properties": {
656
+ "expires_at": {},
657
+ "expires_in_seconds": {}
658
+ }
659
+ }
660
+ },
661
+ "CanonicalSelectInteractionSendRequest": {
533
662
  "type": "object",
534
663
  "required": ["type", "prompt", "options"],
535
664
  "properties": {
@@ -570,7 +699,7 @@
570
699
  }
571
700
  }
572
701
  },
573
- "InputInteractionSendRequest": {
702
+ "CanonicalInputInteractionSendRequest": {
574
703
  "type": "object",
575
704
  "required": ["type", "prompt"],
576
705
  "properties": {
@@ -601,6 +730,61 @@
601
730
  "expires_in_seconds": {}
602
731
  }
603
732
  }
733
+ },
734
+ "InteractionOptionInput": {
735
+ "oneOf": [
736
+ {
737
+ "type": "string",
738
+ "minLength": 1,
739
+ "maxLength": 120,
740
+ "pattern": "^[^\\u0000-\\u001F\\u007F]+$"
741
+ },
742
+ {
743
+ "type": "object",
744
+ "required": ["label"],
745
+ "properties": {
746
+ "value": {
747
+ "type": "string",
748
+ "minLength": 1,
749
+ "maxLength": 128,
750
+ "pattern": "^[^\\u0000-\\u001F\\u007F]+$",
751
+ "description": "Defaults to label. Opaque customer data, never a command."
752
+ },
753
+ "label": {
754
+ "type": "string",
755
+ "minLength": 1,
756
+ "maxLength": 120
757
+ },
758
+ "intent": {
759
+ "type": "string",
760
+ "enum": ["accept", "destructive", "informational", "neutral"],
761
+ "default": "neutral",
762
+ "description": "What choosing this option does, so a channel can present it accordingly. Describes consequence rather than appearance: a channel renders `accept` green where it can, `destructive` red, `informational` prominent, and `neutral` plainly. A channel that cannot colour a control ignores this and the option still renders. Omitted means `neutral`."
763
+ }
764
+ },
765
+ "additionalProperties": false,
766
+ "allOf": [
767
+ {
768
+ "if": {
769
+ "properties": {
770
+ "value": {}
771
+ },
772
+ "required": ["value"]
773
+ },
774
+ "else": {
775
+ "properties": {
776
+ "label": {
777
+ "pattern": "^[^\\u0000-\\u001F\\u007F]+$",
778
+ "type": "string"
779
+ }
780
+ }
781
+ }
782
+ }
783
+ ],
784
+ "$comment": "The conditional constraint applies only when the label is used as the value. Keep the TypeScript input shape explicit because the generator omits object properties for conditional schemas.",
785
+ "x-typescript-type": "{ label: string; value?: string; intent?: \"accept\" | \"destructive\" | \"informational\" | \"neutral\" }"
786
+ }
787
+ ]
604
788
  }
605
789
  },
606
790
  "anyOf": [
@@ -618,6 +802,9 @@
618
802
  },
619
803
  {
620
804
  "$ref": "#/$defs/InteractionSendRequest"
805
+ },
806
+ {
807
+ "$ref": "#/$defs/CanonicalInteractionSendRequest"
621
808
  }
622
809
  ]
623
810
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/machine-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "MachineV1ContractDocument",
6
6
  "description": "Machine-client administration, locally generated credential metadata, durable long-poll, and contiguous acknowledgement contracts.",
7
7
  "oneOf": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/provider-capabilities-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "ProviderCapabilitiesV1",
6
6
  "description": "Provider-neutral, renderer-facing delivery and interaction capabilities with explicit degradation.",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/webhooks/webhook-delivery-case-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "WebhookDeliveryCaseSetV1",
6
6
  "description": "Deterministic customer webhook response classification, Retry-After, and delivery-bound cases.",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/webhooks/webhook-signing-vector-v1.schema.json",
4
- "x-contract-version": "2.5.0",
4
+ "x-contract-version": "3.0.0",
5
5
  "title": "WebhookSigningVectorSetV1",
6
6
  "description": "Language-neutral deterministic Standard Webhooks V1 verification vectors. All key material is public synthetic test data and must never be used outside fixtures.",
7
7
  "type": "object",