Repository navigation
Verify Rust update context before and after worker replacement - #155
Conversation
|
Verified after merge at Main's published update experiment passes both original-input/three-signal snapshots before and after SIGKILL replacement, all nine client/handler directions, absent-worker acceptance, duplicate identity, handler failure diagnostics, validator refusal and completion of all original runs. The 12 timer/recovery cases, application gates, sample workflows and polyglot smoke also pass. Both experiment stacks remove their task resources. Native image publication and qualification pass on amd64 and arm64. Independently verified anonymous GHCR and Docker Hub indexes, including immutable tag Rust SDK 3.3.3 is published and sdk-rust#73 is closed with its source, registry archive and live restart proof. The merged GitHub branches and local qualification worktrees are removed. The broader state mutation/query experiment remains the next action in durable-workflow/.github#122. |
Problem
A stateful update needs the original workflow input and committed signal deliveries. Rust queries and updates both receive
QueryContext, but the published update path currently constructs that context with null input and no signals.Change
Extend the existing published SDK experiment with a Rust snapshot query and update. Check original input, three committed signals, run identity and the persisted update completion before and after worker replacement. The signals carry a map argument, one nested array argument and no arguments. Keep all nine existing client/handler directions, duplicate requests, failure diagnostics and validator refusal.
The workflow consumes the three snapshot signals through authored waits before waiting for its finish signal. The observer requires one applied history record for each original signal identity.
Pin Rust 3.3.3 and align both the polyglot and prepared playground lockfiles. Other locked dependencies remain unchanged. durable-workflow/sdk-rust#74, durable-workflow/sdk-rust#75 and durable-workflow/sdk-rust#76 correct original input, logical signal identity and delivered value decoding, tracked in durable-workflow/sdk-rust#73.
Addresses durable-workflow/.github#122. This snapshot check is a prerequisite for the broader stateful update/query qualification.
Validation
Run
scripts/sdk-updates.shafter resolving the published artifact tuple. The 3.3.0 baseline completed all nine directions, then failed with null update input and an empty signal list while the same-run query returned both correctly. The 3.3.1 consumer run exposed duplicate receipt/application records for one logical signal. Both observations informed the SDK correction.Rust 3.3.3 publication verifies the exact registry archive against source and builds a fresh Rust 1.86 consumer. The live published update experiment passes on the final candidate, including both three-signal snapshots, SIGKILL replacement, all nine directions, duplicate identity, handler failure and completion of all original runs. Both prepared lockfiles select checksum
10f10a62d9691094f654557ae8c45a2abd0b608e389860b0683a559b9936912f.The 12 timer/recovery cases, candidate image, PHP 8.4/8.5 application gates, sample workflows and polyglot smoke all pass at
4249c30734759306ff9490799ad5668054f3b525.All 57 observer metadata unit checks pass locally in an isolated Python container. Snapshot checks reject empty input, missing signals, changed run identity, disagreement between SDK and durable results and repeated applied signal identity.
The normal timer experiment and candidate image qualification also run on the selected tuple. Merge follow-through verifies main's published execution and both native images.