Observed
The published Server 2.3.1 image advertises a default 64 MiB runtime external-payload limit, but its PHP configuration retains post_max_size=8M and display_errors output. A direct authenticated POST /api/external-payloads/v1 with a valid 67,108,864-byte SDK-encoded Avro blob returns HTTP 200, not 201 or a structured rejection:
Warning: PHP Request Startup: POST Content-Length of 67108864 bytes exceeds the limit of 8388608 bytes ...
{"message":"The POST data is too large."}
Reproduced twice through the actual Apache/mod_php HTTP surface with the published image, not Laravel in-process tests. No upload reference was created; existing workflow and activity data remained intact. Server revision d9bed7072ae523978f16717f6b92bf669d5208f5, bundled Workflow 2.0.6. Image index sha256:9c52aa1252a4f19d7ec20adbf64e95d7b5bddf369412844f7b24e804c30eef2b.
Required Outcome
- Align the actual PHP/SAPI ingress limit with the explicitly configured runtime transport contract. Do not claim 64 MiB support merely by raising an INI value: verify the complete upload, fetch and retained-workflow consumption path with bounded memory.
- Prevent PHP startup/runtime warnings from corrupting API bodies or turning failures into apparent success.
- Oversized requests return the documented non-success status and structured response, including ordinary JSON requests and the external-upload endpoint.
- Add real published-image/Apache regression coverage. In-process Laravel tests alone do not exercise PHP startup limits.
- Exercise exact-limit, over-limit and concurrent requests, then verify ordinary requests and previously committed results still work. Preserve authentication, namespace isolation, admission and durable state.
Accepted follow-up from storage qualification. Investigate the complete size/memory boundary before publishing a fix so a single INI change does not conceal the next failure.
Observed
The published Server 2.3.1 image advertises a default 64 MiB runtime external-payload limit, but its PHP configuration retains
post_max_size=8Manddisplay_errorsoutput. A direct authenticatedPOST /api/external-payloads/v1with a valid 67,108,864-byte SDK-encoded Avro blob returns HTTP 200, not 201 or a structured rejection:Reproduced twice through the actual Apache/mod_php HTTP surface with the published image, not Laravel in-process tests. No upload reference was created; existing workflow and activity data remained intact. Server revision
d9bed7072ae523978f16717f6b92bf669d5208f5, bundled Workflow 2.0.6. Image indexsha256:9c52aa1252a4f19d7ec20adbf64e95d7b5bddf369412844f7b24e804c30eef2b.Required Outcome
Accepted follow-up from storage qualification. Investigate the complete size/memory boundary before publishing a fix so a single INI change does not conceal the next failure.