Skip to content

Expose sticky replay metadata in workflow poll responses #312

Description

@rmcdaniel

Problem

Published Server 2.5.9 routes workflow tasks using durable sticky affinity, but
the workflow poll response omits sticky_worker_id, sticky_until and
sticky_replay_mode. The bridge and leased task contain those fields. External
SDK workers cannot observe sticky_hit_expected or forced cold replay.

Reproduced against the published image digest
sha256:11c11e11498b63e644d906e43f49810a1bc0b5298f750734fe0edb279c622bca
while implementing Python affinity parity in durable-workflow/.github#124 and
durable-workflow/sdk-python#102. A 1,200-side-effect workflow completes correctly
through three signal boundaries, but all four HTTP tasks omit the replay mode
while the durable task records show sticky_hit_expected. The worker therefore
downloads the complete history instead of reusing retained middle pages.

Acceptance

  • Project the authoritative sticky worker identity, expiry and replay mode into
    ordinary, retried and replacement workflow poll responses.
  • Prove cold, warm and forced cold response modes through actual HTTP feature
    tests, including pagination and the existing poll request identity path.
  • Preserve lease fencing, durable history and older workers' behavior.
  • Publish a qualified Server patch and verify that exact image with the Python
    warm history and recovery scenarios before claiming Python sticky support.

This fixes an existing response gap. It does not change cache or affinity
semantics, and makes no Cloud rollout or capacity claim.

Activity

  1. rmcdaniel commented on Oct 8, 2026

    @rmcdaniel
    MemberAuthor

    Server 2.5.10 and Helm 0.1.147 are published from reviewed merge
    fe09fe4. Both image architectures and registry
    publication are verified by the normal release gate.

    Exact Server index:
    durableworkflow/server@sha256:2043e097d6eb411632386b001385cb5d8145dac1e3b5b14df901ac333d81c5ec

    Published AMD64 consumer verification passes:

    • Fresh installed Python 2.5.0 passes all seven sticky scenarios, including
      paged warm reuse, bounds, actual expiry and SIGKILL/replacement cold replay.
    • Unchanged PHP 2.1.5 completes both direct standard workflows with intact
      histories and single completions. The corrected ordinary canary also passes
      24/24 workflows with zero errors.
    • PHP 2.2.4 / Python 2.5.0 / Rust 3.3.3 passes all 12 required published
      lifecycle cells, with Workflow 2.5.3, CLI 2.2.0 and Waterline 2.3.1.
    • The same tuple passes the original 30-second mixed cancellation cascade,
      including cleanup SIGKILL recovery, with 236 assertions.

    Release and chart verification
    · Lifecycle
    · Mixed cancellation
    · Python release

    The source and published test stacks are removed. PR #313's remote branch is
    deleted. Closing this metadata/compatibility defect. Rust sticky parity remains
    owned by durable-workflow/.github#124.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions