Published failure
Rust SDK 3.2.1 advertises named update handlers but emits update_contracts: []. The Server requires every declared query/update name to have a durable argument contract before treating that workflow definition as available for control-plane admission. A registered Rust update is therefore rejected with HTTP 409, reason=workflow_definition_unavailable, before the handler receives work.
Reproduced by PHP SDK 2.2.3 calling a Rust update in Sample App #153, published run. Server 2.5.9 at sha256:11c11e11498b63e644d906e43f49810a1bc0b5298f750734fe0edb279c622bca, Python SDK 2.4.2 and Rust SDK 3.2.1. PHP-targeted and Python-targeted calls complete before the Rust refusal. The remaining matrix cells have not passed.
Worker::register() also advertises query names without query argument contracts. A workflow containing queries and updates needs both lists complete for its durable declaration to be usable.
Acceptance
- Advertise query/update argument contracts matching the SDK's actual positional argument-vector handlers, including its lossless Avro handlers.
- Preserve explicit unsupported pre-accept validator refusal and the low-level registration API's caller-supplied metadata. Keep missing/incomplete Server declarations refused.
- Add focused registration regressions, run ordinary Rust checks and publish a qualified patch.
- Update the affected Sample App tuple and execute all nine live client/handler directions, Rust worker replacement and duplicate identity, failure and validator refusal against published artifacts.
- Provide an explicit signal-name declaration for Rust workflows that consume signals alongside their registered queries and updates. Preserve Server's rejection of undeclared names and qualify completion of the original workflow after replacement.
Current qualification
3.2.2 publishes complete query/update argument contracts through #71. The published follow-through passes all nine client/handler directions, absent-worker acceptance, replacement/duplicate identity, durable handler failure and validator refusal. Final Rust completion fails because updates-finish is not declared. Rust's high-level Worker currently has no API to declare its signal names. Add that declaration API, publish the supported SDK and rerun the complete experiment before closing this issue.
Finding from durable-workflow/.github#122. The Sample App and runbook PRs remain draft until the published experiment passes.
Published failure
Rust SDK 3.2.1 advertises named update handlers but emits
update_contracts: []. The Server requires every declared query/update name to have a durable argument contract before treating that workflow definition as available for control-plane admission. A registered Rust update is therefore rejected with HTTP 409,reason=workflow_definition_unavailable, before the handler receives work.Reproduced by PHP SDK 2.2.3 calling a Rust update in Sample App #153, published run. Server 2.5.9 at
sha256:11c11e11498b63e644d906e43f49810a1bc0b5298f750734fe0edb279c622bca, Python SDK 2.4.2 and Rust SDK 3.2.1. PHP-targeted and Python-targeted calls complete before the Rust refusal. The remaining matrix cells have not passed.Worker::register()also advertises query names without query argument contracts. A workflow containing queries and updates needs both lists complete for its durable declaration to be usable.Acceptance
Current qualification
3.2.2 publishes complete query/update argument contracts through #71. The published follow-through passes all nine client/handler directions, absent-worker acceptance, replacement/duplicate identity, durable handler failure and validator refusal. Final Rust completion fails because
updates-finishis not declared. Rust's high-level Worker currently has no API to declare its signal names. Add that declaration API, publish the supported SDK and rerun the complete experiment before closing this issue.Finding from durable-workflow/.github#122. The Sample App and runbook PRs remain draft until the published experiment passes.