From 5d05283df46ce9bc398180dab2a4a7499d014a18 Mon Sep 17 00:00:00 2001 From: DABH Date: Fri, 13 Nov 2026 18:39:29 -0600 Subject: [PATCH 1/3] Pin the Arize sample to temporalio 1.36.0 The reset case depends on 1.36.0 applying a Workflow Task's jobs as a single batch, so a reapplied update's span gets a fresh ID instead of reusing the original run's. temporalio/sdk-python#2121 turns that off by default again for 1.36.1 while the cancellation semantics are settled in temporalio/sdk-python#2124, so the next release would bring the duplicate IDs back. The pyproject comment and the README say why the pin exists and when to lift it. --- arize_tracing/README.md | 12 ++++++++---- arize_tracing/pyproject.toml | 9 ++++++--- arize_tracing/uv.lock | 4 ++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/arize_tracing/README.md b/arize_tracing/README.md index 7686e875..4363fcdc 100644 --- a/arize_tracing/README.md +++ b/arize_tracing/README.md @@ -168,10 +168,14 @@ temporal workflow reset --workflow-id --type FirstWorkflowTask --r uv run verify_trace.py --workflow-id --expect-runs 2 ``` -The reset case needs temporalio 1.36.0 or later. Earlier releases ran the -reapplied update before reseeding the new run, so its `HandleUpdate` span -reused the original `RunWorkflow` span's ID -([temporalio/sdk-python#2081](https://github.com/temporalio/sdk-python/pull/2081)). +The reset case needs temporalio 1.36.0 exactly, which is why `pyproject.toml` +pins it. Earlier releases ran the reapplied update before reseeding the new +run, so its `HandleUpdate` span reused the original `RunWorkflow` span's ID; +1.36.0 applies the whole Workflow Task as one batch +([temporalio/sdk-python#2081](https://github.com/temporalio/sdk-python/pull/2081)), +and 1.36.1 turns that off by default again +([temporalio/sdk-python#2121](https://github.com/temporalio/sdk-python/pull/2121)) +until its cancellation semantics are settled. ![Activity retry attempts in Phoenix](phoenix-retry-attempts.png) diff --git a/arize_tracing/pyproject.toml b/arize_tracing/pyproject.toml index 56fe3fef..0d0c5958 100644 --- a/arize_tracing/pyproject.toml +++ b/arize_tracing/pyproject.toml @@ -3,9 +3,12 @@ name = "temporalio-samples-arize-tracing" version = "0.1.0" requires-python = ">=3.11" dependencies = [ - # 1.36.0 applies workflow activation jobs as a single batch, which keeps a - # reset's reapplied update from reusing a span ID of the original run. - "temporalio[opentelemetry]>=1.36.0,<2", + # Pinned: 1.36.0 applies workflow activation jobs as a single batch, which + # keeps a reset's reapplied update from reusing a span ID of the original + # run. 1.36.1 turns that off by default again (temporalio/sdk-python#2121) + # while its cancellation semantics are settled (temporalio/sdk-python#2124). + # Lift the pin once single-batch processing is the default again. + "temporalio[opentelemetry]==1.36.0", # 1.1.0 fixes span parenting when one worker runs both workflows and # activities; its openinference extra brings the Agents SDK instrumentation. "temporalio-openai-agents[openinference]>=1.1.0", diff --git a/arize_tracing/uv.lock b/arize_tracing/uv.lock index 51666642..61f46e72 100644 --- a/arize_tracing/uv.lock +++ b/arize_tracing/uv.lock @@ -4,8 +4,8 @@ requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.15'", "python_full_version == '3.14.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", "python_full_version == '3.14.*' and sys_platform != 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", "(python_full_version < '3.14' and sys_platform != 'emscripten') or (python_full_version < '3.12' and sys_platform == 'emscripten')", ] @@ -1671,7 +1671,7 @@ requires-dist = [ { name = "openinference-instrumentation-openai", specifier = ">=0.1.52" }, { name = "openinference-semantic-conventions", specifier = ">=0.1.30" }, { name = "opentelemetry-exporter-otlp-proto-http", specifier = ">=1.30.0,<2" }, - { name = "temporalio", extras = ["opentelemetry"], specifier = ">=1.36.0,<2" }, + { name = "temporalio", extras = ["opentelemetry"], specifier = "==1.36.0" }, { name = "temporalio-openai-agents", extras = ["openinference"], specifier = ">=1.1.0" }, ] From 98621dd322b7151578d3540c3b601b95c3a753c6 Mon Sep 17 00:00:00 2001 From: David Hyde Date: Fri, 13 Nov 2026 18:45:49 -0600 Subject: [PATCH 2/3] clean up comments --- arize_tracing/pyproject.toml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/arize_tracing/pyproject.toml b/arize_tracing/pyproject.toml index 0d0c5958..8ac1453c 100644 --- a/arize_tracing/pyproject.toml +++ b/arize_tracing/pyproject.toml @@ -5,9 +5,8 @@ requires-python = ">=3.11" dependencies = [ # Pinned: 1.36.0 applies workflow activation jobs as a single batch, which # keeps a reset's reapplied update from reusing a span ID of the original - # run. 1.36.1 turns that off by default again (temporalio/sdk-python#2121) - # while its cancellation semantics are settled (temporalio/sdk-python#2124). - # Lift the pin once single-batch processing is the default again. + # run. 1.36.1 (temporarily?) undoes that, so we're pinning to 1.36.0 + # explicitly until a future release resolves this issue one way or another. "temporalio[opentelemetry]==1.36.0", # 1.1.0 fixes span parenting when one worker runs both workflows and # activities; its openinference extra brings the Agents SDK instrumentation. From 3ecf681a23e2a106ca3cd67359d5fb6ed810ce93 Mon Sep 17 00:00:00 2001 From: David Hyde Date: Fri, 13 Nov 2026 18:47:04 -0600 Subject: [PATCH 3/3] clean up comments --- arize_tracing/README.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/arize_tracing/README.md b/arize_tracing/README.md index 4363fcdc..97d96ba5 100644 --- a/arize_tracing/README.md +++ b/arize_tracing/README.md @@ -168,14 +168,7 @@ temporal workflow reset --workflow-id --type FirstWorkflowTask --r uv run verify_trace.py --workflow-id --expect-runs 2 ``` -The reset case needs temporalio 1.36.0 exactly, which is why `pyproject.toml` -pins it. Earlier releases ran the reapplied update before reseeding the new -run, so its `HandleUpdate` span reused the original `RunWorkflow` span's ID; -1.36.0 applies the whole Workflow Task as one batch -([temporalio/sdk-python#2081](https://github.com/temporalio/sdk-python/pull/2081)), -and 1.36.1 turns that off by default again -([temporalio/sdk-python#2121](https://github.com/temporalio/sdk-python/pull/2121)) -until its cancellation semantics are settled. +The reset case currently needs temporalio 1.36.0 exactly (see PR #420). ![Activity retry attempts in Phoenix](phoenix-retry-attempts.png)