You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Preserve terminal failure fallback messages when structured messages are blank #143
The normal registry4.10.0 crate rewrites an already-small valid terminal failure: {"type":"fail_workflow","message":"outer fallback","exception":{"type":"Original","message":""}} becomes the same command with an empty outer message. The new bounds normalizer unconditionally mirrors nested exception.message into the outer field.
Published Server2.11.0 only promotes a nested exception message when its PHP-trimmed value is nonblank. Otherwise Core preserves and requires the nonblank outer message. Thus the new SDK can turn a valid failure into422 instead of recording it. Whitespace/NUL-only nested messages have the same issue; small distinct outer/nested strings are also unnecessarily rewritten.
Confirmed by a new test using the normal =4.10.0 dependency, without source overrides: the captured actual body changes outer fallback to empty. Published Server source36d16273604755f3dd0743cab331cc7c62e51d8e WorkerController::promoteWorkflowFailureExceptionPayload and embeddedCore2.10.1 WorkflowCommandNormalizer::fail_workflow establish the nonblank promotion/fallback contract.4.10.0 source/tagdd58dd146f1337c3be24ad18fe65e3bb31d78b58/checksum848583837ffc16da9ed93c1877dba6226e7e3ee746fde647a3d1e54ebf06dc39 remain immutable; this correction requires an ordinary compatible patch.
Fix message selection to preserve the outer fallback when the nested value is absent or PHP-blank. Preserve every supplied small wire field. Only reduce an oversized redundant outer copy when needed for the current message/complete-body budget. Keep original type/nonretryable and task/attempt/lease identity, and retain the62/128/64KiB and1MiB/lower-known limits. Do not disable normalization to make the test pass.
Acceptance: retained4.10 failing installed control; source and normal installed corrected small/blank/distinct/omitted controls; actual publishedPHP terminal failure delivery with blank/whitespace nested fallback and nonblank nested authority; existing large-report/final-encoded-cap controls; Rust1.86/security/OIDC/tag rules; exactCI and normal patch installation before final SDK141/shared225 guide receipt. No Core/Server implementation changes. Website401 remains gated on final corrected receipt. Related SDK141/PR142/shared225.
Delivered in published Rust SDK 4.10.1, source/tag ebad5c1b729c4f4c728b03de4e7d7d3c915fd8e1, whole tree b42868e0189f6c7d631355f8a4fde061272e82b3 through #144. All applicable candidate and independent main checks pass; the protected maintained-main OIDC publisher completed successfully.
A fresh ordinary durable-workflow = "=4.10.1" consumer on Rust 1.86 resolves crates.io without patch/path/source overrides. Registry API, the downloaded crate archive and normal Cargo.lock agree on SHA-256 84f511bfad4bf0d76aa1723766bdcc911bc912fd95d6d4a3354fcb70949013e8. The package is not yanked; installed VCS is the exact clean tag source. All 59 source/original-manifest files match committed bytes.
Eleven normal installed recording-transport controls pass, including unchanged small blank/whitespace/NUL/omitted/distinct nested messages, lower known limits, structured fields, final encoded request limits, ordinary/cooperative/local failure observations and cold replay. Six additional unchanged controls pass against published PHP Server 2.11.0 and fresh MySQL 8.0.46, including actual terminal outer fallback versus nested authority. Stopped SQL records 8 runs, 20 tasks, 4 activity executions and 53 events. API and queue explicit SIGTERM exit 0 without OOM; the entire task stack, database, network, Cargo cache and target are removed.
The first General live fixture used an admin-only credential for worker polling and correctly received six HTTP403 refusals. Its six pending originals and failed output remain distinct. A separate fresh fixture used a documented synthetic multi-role principal; no product/test source, assertions or original budgets changed. Published 4.10.0's actual blank-fallback HTTP422 original remains failed and immutable; it was not retagged or called accepted.
This completes #143's corrective package and installed acceptance. #141 remains open only for the final all-eight-locale Website #401 / PR #403 delivery. The broader shared failure-report issue, receiver storage, other SDKs and image/native adoption remain separate.
Activity
rmcdaniel commentedon Oct 23, 2026
Delivered in published Rust SDK 4.10.1, source/tag
ebad5c1b729c4f4c728b03de4e7d7d3c915fd8e1, whole treeb42868e0189f6c7d631355f8a4fde061272e82b3through #144. All applicable candidate and independent main checks pass; the protected maintained-main OIDC publisher completed successfully.A fresh ordinary
durable-workflow = "=4.10.1"consumer on Rust 1.86 resolves crates.io without patch/path/source overrides. Registry API, the downloaded crate archive and normal Cargo.lock agree on SHA-25684f511bfad4bf0d76aa1723766bdcc911bc912fd95d6d4a3354fcb70949013e8. The package is not yanked; installed VCS is the exact clean tag source. All 59 source/original-manifest files match committed bytes.Eleven normal installed recording-transport controls pass, including unchanged small blank/whitespace/NUL/omitted/distinct nested messages, lower known limits, structured fields, final encoded request limits, ordinary/cooperative/local failure observations and cold replay. Six additional unchanged controls pass against published PHP Server 2.11.0 and fresh MySQL 8.0.46, including actual terminal outer fallback versus nested authority. Stopped SQL records 8 runs, 20 tasks, 4 activity executions and 53 events. API and queue explicit SIGTERM exit 0 without OOM; the entire task stack, database, network, Cargo cache and target are removed.
The first General live fixture used an admin-only credential for worker polling and correctly received six HTTP403 refusals. Its six pending originals and failed output remain distinct. A separate fresh fixture used a documented synthetic multi-role principal; no product/test source, assertions or original budgets changed. Published 4.10.0's actual blank-fallback HTTP422 original remains failed and immutable; it was not retagged or called accepted.
This completes #143's corrective package and installed acceptance. #141 remains open only for the final all-eight-locale Website #401 / PR #403 delivery. The broader shared failure-report issue, receiver storage, other SDKs and image/native adoption remain separate.