Pulp Engine v0.21.0 — Release Notes
Wire-level breaking change: 422 response field renamed errors → issues
Affected: Any integrator that parses the body of 422 Validation Failed responses
from POST /render or POST /render/html.
Before (v0.20.x):
{ "error": "Validation Failed", "errors": [...] }
After (v0.21.0):
{ "error": "Validation Failed", "issues": [...] }
Why: The OpenAPI/TypeBox schema (ValidationErrorResponseSchema) already used issues for
all validation error responses. The 422 runtime and documentation examples both used errors,
which was the outlier. This aligns the wire format and all documentation on issues, consistent
with what the schema always declared.
Migration: Update any code that reads response.errors on a 422 response to read
response.issues instead.
Other changes in this release
429 OpenAPI schema corrected
The OpenAPI spec now correctly documents the statusCode field on 429 responses. Previously,
all 429 response schemas were declared as ErrorResponseSchema ({ error, message }),
which was missing the statusCode field that @fastify/rate-limit has always included in the
actual wire response. A dedicated RateLimitErrorResponseSchema has been added and applied to
all rate-limited routes.
The runtime 429 shape is unchanged — only the documentation now matches it:
{ "statusCode": 429, "error": "Too Many Requests", "message": "Rate limit exceeded, retry in 1 minute" }
Template-route 400 schemas cleaned up
PUT /templates/:key and POST /templates/:key/versions/:version/restore previously used an
additionalProperties: true escape hatch on their 400 response schemas to avoid message
being stripped by fast-json-stringify when validation error bodies could return either
{ error, issues } or { error, message } (or both).
ValidationErrorResponseSchema has been updated to make both message and issues optional,
making it a legitimate cover for all three shapes. The escape hatch has been removed.
The serialised response bodies on these routes are identical to v0.20.x.
Error contract summary
| Status | Envelope | Schema |
|---|---|---|
| 401, 403, 404, 409, 412, 428, 500, 503 | { error, message } | ErrorResponseSchema |
| 400, 422 (validation) | { error, message?, issues? } | ValidationErrorResponseSchema |
| 429 | { statusCode, error, message } | RateLimitErrorResponseSchema |
See docs/api-guide.md § Error responses for the full contract description.