Skip to content

Verify Rust update context before and after worker replacement - #155

Merged
rmcdaniel merged 8 commits into
mainfrom
test/rust-update-context
Oct 8, 2026
Merged

rmcdaniel merged 8 commits into
mainfrom
test/rust-update-context

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Oct 8, 2026 •

Copy link
Copy Markdown
Member

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.sh after 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.

@rmcdaniel
rmcdaniel marked this pull request as ready for review October 8, 2026 02:38
@rmcdaniel
rmcdaniel merged commit baba620 into main Oct 8, 2026
13 checks passed
@rmcdaniel
rmcdaniel deleted the test/rust-update-context branch October 8, 2026 02:38
@rmcdaniel

Copy link
Copy Markdown
Member Author

Verified after merge at baba6201faa662394d067ccf933501401938f263, with the exact reviewed candidate tree.

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 sha-baba6201faa662394d067ccf933501401938f263-run-37718888386-1 and main, have digest sha256:7621a4d04c98840a7d2f6f5035c1a72a1b04cfe5c19f2b76f06060a739adaa15. Both architecture configurations identify this exact source revision.

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants