Skip to content

Preserve accepted update failure diagnostics in Python clients #100

Description

@rmcdaniel

Published failure

Python SDK 2.4.2 maps an accepted update's handler failure (HTTP 422, update_status=failed) to InvalidArgument with an empty message. The Server response supplies failure_message, failure_id, update_id and run identity, but the SDK discards that response. Callers cannot distinguish a failed handler from malformed arguments or inspect the durable failure.

Confirmed in Sample App's live published update run, using PHP 2.2.3, Python 2.4.2, Rust 3.3.0 and Server 2.5.9 at sha256:11c11e11498b63e644d906e43f49810a1bc0b5298f750734fe0edb279c622bca. The durable UpdateCompleted event records codec error: update-probe-failure, a failure identity and the original accepted update. The Python exception is InvalidArgument('').

Acceptance

  • Return a public typed UpdateFailed exception for a durably accepted handler failure, with a useful message, HTTP status, original response and workflow/run/update/failure identities.
  • Preserve existing catch compatibility and distinguish argument errors, validator rejection and validation infrastructure failures.
  • Cover both async and sync clients, message fallback and duplicate failed-update requests.
  • Publish a qualified patch and update Sample App's tuple. Its real published client must assert the diagnostic against the durable failure and original identities, with one failed completion and a live original workflow.

Part of durable-workflow/.github#122. Source CI and the complete live published update experiment are required before closing.

Activity

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