Problem
The OpenAPI document is linted statically, but no independent black-box gate verifies it against the running server. A deterministic Schemathesis v4.24.3 discovery run selected all 46 operations and generated 403 cases. It found 19 unique contract failures:
- 18 responses used valid runtime error statuses such as 404 or 422 that the operation did not document;
DELETE /suppressions/{email} returned { object, email, deleted } while the shared deletion schema required { object, id, deleted };
- eight operations repeatedly rejected inputs that the OpenAPI schema described as valid because runtime string constraints were stricter.
No generated case caused a 5xx response, but generated clients and direct HTTP users cannot currently rely on the published error and validation contract.
Scope
Align the checked-in OpenAPI document with the existing runtime contract and add a deterministic, loopback-only property-based CI job. This is contract hardening, not a runtime behavior change.
Acceptance criteria
Non-goals
This issue does not replace scenario-based SDK tests, connect to AWS or SES, or require generated tests to create every stateful resource graph.
Problem
The OpenAPI document is linted statically, but no independent black-box gate verifies it against the running server. A deterministic Schemathesis v4.24.3 discovery run selected all 46 operations and generated 403 cases. It found 19 unique contract failures:
DELETE /suppressions/{email}returned{ object, email, deleted }while the shared deletion schema required{ object, id, deleted };No generated case caused a 5xx response, but generated clients and direct HTTP users cannot currently rely on the published error and validation contract.
Scope
Align the checked-in OpenAPI document with the existing runtime contract and add a deterministic, loopback-only property-based CI job. This is contract hardening, not a runtime behavior change.
Acceptance criteria
not_a_server_error, status-code, content-type, and response-schema conformance.Non-goals
This issue does not replace scenario-based SDK tests, connect to AWS or SES, or require generated tests to create every stateful resource graph.