Confirmed behavior
During the isolated native-storage experiment for #131/#132, a test worker submitted a workflow completion result as a plain string instead of an official Avro value. The completion committed successfully, but reading the completed run failed with a codec decode exception (HTTP 500). Repeating the experiment with Serializer::serializeWithCodec("avro", value) produced a readable result.
The affected caller is an authenticated worker submitting malformed data for a task it owns. This was observed in a disposable test runtime, not customer data. Normal SDK-generated Avro completions worked.
Cause to address
WorkerController::resolveWorkflowTaskCommandPayloadReferences currently only resolves array-valued command payloads. Serialized strings bypass that envelope validation, and the downstream normalizer can persist them without proving they are valid Avro. Valid serialized Avro strings are supported and must keep working.
This is separate from closed #61, which hardened direct conformance helper inputs rather than the runtime HTTP ingress.
Acceptance
- Reject malformed serialized worker command payloads with a useful validation response before any task completion or history mutation.
- Use the existing official Avro codec/validator; do not add JSON fallback or a custom decoder.
- Cover unframed text, JSON strings/scalars, corrupt/truncated frames, and valid serialized/enveloped Avro, including a large result.
- Prove a rejected completion leaves the task retryable and a subsequent valid completion readable after a fresh reload.
- Audit related worker acknowledgement ingress for the same validation gap without changing application values nested inside valid Avro.
Priority
Accepted follow-up after publishing the already-merged storage recovery fixes. This does not invalidate the corrected Avro native-capacity experiment and does not authorize production admission enablement.
Confirmed behavior
During the isolated native-storage experiment for #131/#132, a test worker submitted a workflow completion result as a plain string instead of an official Avro value. The completion committed successfully, but reading the completed run failed with a codec decode exception (HTTP 500). Repeating the experiment with Serializer::serializeWithCodec("avro", value) produced a readable result.
The affected caller is an authenticated worker submitting malformed data for a task it owns. This was observed in a disposable test runtime, not customer data. Normal SDK-generated Avro completions worked.
Cause to address
WorkerController::resolveWorkflowTaskCommandPayloadReferences currently only resolves array-valued command payloads. Serialized strings bypass that envelope validation, and the downstream normalizer can persist them without proving they are valid Avro. Valid serialized Avro strings are supported and must keep working.
This is separate from closed #61, which hardened direct conformance helper inputs rather than the runtime HTTP ingress.
Acceptance
Priority
Accepted follow-up after publishing the already-merged storage recovery fixes. This does not invalidate the corrected Avro native-capacity experiment and does not authorize production admission enablement.