{
  "lesson_id": "COM-029",
  "fixtures": [
    {
      "id": "baseline",
      "contract_version": "2.4.0",
      "auth_scheme": "oauth2",
      "credential_scope": "orders.read orders.write",
      "request_schema_version": "req-v4",
      "response_schema_version": "res-v7",
      "mapping_version": "map-v9",
      "webhook_contract": "wh-v3",
      "callback_contract": "none",
      "event_identity": "provider+event_id",
      "idempotency_strategy": "key",
      "retry_policy": "transient-only",
      "backoff_policy": "exponential-jitter",
      "rate_limit_signal": "429+retry-after",
      "reconciliation_strategy": "read-after-uncertain-write",
      "provider_leak": false,
      "deprecation_state": "ACTIVE",
      "expected": "ACCEPT_CONTRACT"
    },
    {
      "id": "schema_drift",
      "contract_version": "2.4.0",
      "auth_scheme": "oauth2",
      "credential_scope": "orders.read orders.write",
      "request_schema_version": "req-v4",
      "response_schema_version": "res-v8",
      "mapping_version": "map-v9",
      "previous_response_schema_version": "res-v7",
      "previous_mapping_version": "map-v9",
      "webhook_contract": "wh-v3",
      "callback_contract": "none",
      "event_identity": "provider+event_id",
      "idempotency_strategy": "key",
      "retry_policy": "transient-only",
      "backoff_policy": "exponential-jitter",
      "rate_limit_signal": "429+retry-after",
      "reconciliation_strategy": "read-after-uncertain-write",
      "provider_leak": false,
      "deprecation_state": "ACTIVE",
      "expected": "HOLD_MAPPING_VERSION"
    },
    {
      "id": "unsafe_retry",
      "contract_version": "2.4.0",
      "auth_scheme": "oauth2",
      "credential_scope": "orders.write",
      "request_schema_version": "req-v4",
      "response_schema_version": "res-v7",
      "mapping_version": "map-v9",
      "webhook_contract": "wh-v3",
      "callback_contract": "none",
      "event_identity": "provider+event_id",
      "idempotency_strategy": "NONE",
      "retry_policy": "retry-timeout",
      "backoff_policy": "fixed",
      "rate_limit_signal": "429+retry-after",
      "reconciliation_strategy": "NONE",
      "provider_leak": false,
      "deprecation_state": "ACTIVE",
      "expected": "HOLD_IDEMPOTENCY_GAP"
    },
    {
      "id": "provider_leakage",
      "contract_version": "2.4.0",
      "auth_scheme": "oauth2",
      "credential_scope": "orders.read",
      "request_schema_version": "req-v4",
      "response_schema_version": "res-v7",
      "mapping_version": "map-v9",
      "webhook_contract": "wh-v3",
      "callback_contract": "none",
      "event_identity": "provider+event_id",
      "idempotency_strategy": "event-ledger",
      "retry_policy": "transient-only",
      "backoff_policy": "exponential-jitter",
      "rate_limit_signal": "429+retry-after",
      "reconciliation_strategy": "snapshot",
      "provider_leak": true,
      "deprecation_state": "ACTIVE",
      "expected": "HOLD_PROVIDER_LEAKAGE"
    },
    {
      "id": "webhook_no_identity",
      "contract_version": "2.4.0",
      "auth_scheme": "oauth2",
      "credential_scope": "webhooks.verify",
      "request_schema_version": "req-v4",
      "response_schema_version": "res-v7",
      "mapping_version": "map-v9",
      "webhook_contract": "wh-v3",
      "callback_contract": "none",
      "event_identity": "NONE",
      "idempotency_strategy": "NONE",
      "retry_policy": "provider-replay-possible",
      "backoff_policy": "n/a",
      "rate_limit_signal": "n/a",
      "reconciliation_strategy": "snapshot",
      "provider_leak": false,
      "deprecation_state": "ACTIVE",
      "expected": "HOLD_EVENT_IDENTITY"
    },
    {
      "id": "auth_scope_missing",
      "contract_version": "2.4.0",
      "auth_scheme": "oauth2",
      "credential_scope": "UNKNOWN",
      "request_schema_version": "req-v4",
      "response_schema_version": "res-v7",
      "mapping_version": "map-v9",
      "webhook_contract": "wh-v3",
      "callback_contract": "none",
      "event_identity": "provider+event_id",
      "idempotency_strategy": "key",
      "retry_policy": "transient-only",
      "backoff_policy": "exponential-jitter",
      "rate_limit_signal": "429+retry-after",
      "reconciliation_strategy": "snapshot",
      "provider_leak": false,
      "deprecation_state": "ACTIVE",
      "expected": "HOLD_AUTH_SCOPE"
    },
    {
      "id": "rate_limit_unknown",
      "contract_version": "2.4.0",
      "auth_scheme": "oauth2",
      "credential_scope": "orders.read",
      "request_schema_version": "req-v4",
      "response_schema_version": "res-v7",
      "mapping_version": "map-v9",
      "webhook_contract": "wh-v3",
      "callback_contract": "none",
      "event_identity": "provider+event_id",
      "idempotency_strategy": "event-ledger",
      "retry_policy": "retry-429",
      "backoff_policy": "NONE",
      "rate_limit_signal": "429+retry-after",
      "reconciliation_strategy": "snapshot",
      "provider_leak": false,
      "deprecation_state": "ACTIVE",
      "expected": "HOLD_RATE_LIMIT_UNKNOWN"
    },
    {
      "id": "transfer_callback_to_webhook",
      "contract_version": "3.0.0",
      "auth_scheme": "oauth2",
      "credential_scope": "orders.read orders.write webhooks.verify",
      "request_schema_version": "req-v4",
      "response_schema_version": "res-v8",
      "mapping_version": "map-v10",
      "previous_response_schema_version": "res-v7",
      "previous_mapping_version": "map-v9",
      "webhook_contract": "wh-v4-signed",
      "callback_contract": "DEPRECATED-cb-v2",
      "event_identity": "provider+event_id",
      "idempotency_strategy": "event-ledger+write-key",
      "retry_policy": "transient-only",
      "backoff_policy": "exponential-jitter",
      "rate_limit_signal": "429+retry-after",
      "reconciliation_strategy": "event-ledger+snapshot",
      "provider_leak": false,
      "deprecation_state": "CALLBACK_DEPRECATED",
      "transfer": true,
      "canonical_interface_changed": false,
      "expected": "ACCEPT_CONTRACT"
    }
  ]
}
