Customer outcome
WorkflowHandle.result() returns the real terminal result or failure for a completed workflow even when its run history spans several Server API pages.
Reproduction
During Server #237 long-history qualification, published Server 2.4.19 and published Python SDK 2.3.4 completed a workflow with 100 recorded side effects. Server reported completed and output 4950, but handle.result() returned None. The history endpoint's default first page had StartAccepted, WorkflowStarted, and 98 SideEffectRecorded events. Its WorkflowCompleted event was on the next page. Client.get_result() scans only the first page.
Acceptance
- Follow the Server's opaque history page token with bounded page size to find the terminal event without accumulating the full history in memory.
- Preserve terminal result decoding and typed failure behavior, including external payload references.
- Expose explicit history pagination to callers and document its page semantics.
- Test a terminal event on a later page and a malformed repeated token.
- Verify the fix against the published Server image with a candidate SDK, then release and verify the published Python package before closing.
Related qualification: durable-workflow/server#237.
Customer outcome
WorkflowHandle.result()returns the real terminal result or failure for a completed workflow even when its run history spans several Server API pages.Reproduction
During Server #237 long-history qualification, published Server 2.4.19 and published Python SDK 2.3.4 completed a workflow with 100 recorded side effects. Server reported
completedand output4950, buthandle.result()returnedNone. The history endpoint's default first page hadStartAccepted,WorkflowStarted, and 98SideEffectRecordedevents. ItsWorkflowCompletedevent was on the next page.Client.get_result()scans only the first page.Acceptance
Related qualification: durable-workflow/server#237.