You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Let Python workflow code read its own workflow id and run id #193
Python SDK 2.9.0 is published from 0411687. Normal installed acceptance passes eight default/named originals, activity suspension, cold replay and continue-as-new identity, exact typed results and retained history, plus the stopped-state audit with no repairs. Earlier failed fixture setup attempts stay failed.
Completed. The all-eight-locale guide PR and reusable consumer PR are merged after every applicable check. Website publication succeeds and all eight actual localized HTTPS guides are verified. The final delivery receipt links source, immutable package, genuine acceptance and live guides. All task runtime/data resources and completed worktrees are removed.
Preserved original report
Problem
Python workflow code can't read its own workflow id or run id, so it can't use them as a correlation key, put them in logs or pass them to activities and external systems. The other runtimes expose them.
WorkflowContext receives workflow_id and run_id but keeps them in private attributes. None of its public methods returns them.
The only workaround is passing the id in as an argument, which the caller must remember to do.
Source-verified, not reproduced.
Acceptance criteria
Python workflow code can read the current workflow id and run id from the context, with the same values during replay. After continue-as-new, the run id is the new run's and the workflow id is unchanged.
Tests cover the first execution, replay and continue-as-new.
The Python guide documents the accessor next to the client-side describe and query pattern for status polling.
Accepted as a Python SDK product capability, priority P3. Documentation alone would not resolve the missing API.
Expose read-only WorkflowContext.workflow_id and WorkflowContext.run_id properties backed by the canonical identity already supplied to the context. They must remain stable across replay, identify the current run after continue-as-new, and require no caller-supplied business argument. This adds no wire field or execution authority.
Acceptance includes first execution, replay, and a genuine continue-as-new successor, plus the Python API reference and guide in every supported language. Release and normal-install consumer verification are required before closure. General owns this work; the current entry-recovery and activity-lease releases remain ahead of it.
General is implementing the accepted workflow-context identity API on current main 81d8686. Scope: read-only ctx.workflow_id and ctx.run_id from the original task context, with suspension/cold-replay and continue-as-new successor tests plus reference documentation. No transport, protocol, package dependency, tracing carrier or Server change.
Unique source/tool phase general193-20261022t0542; source and tool/dependency state are separate. Any task-owned runtime/dependency scratch retires by 06:20 UTC. Existing Rust publisher and Server/docs original gates continue unchanged. Published package/website-guide follow-through will be recorded separately; accessors are not claimed available in the current published package.
Refs #193. Add read-only ctx.workflow_id and ctx.run_id from the original workflow task context. These preserve exact string IDs, remain stable through suspension/cold replay, and take the successor run ID after continue-as-new. No transport, history, protocol, dependency or tracing-carrier change.
Source 43971b0, whole 01c245b1e1d394b517357bf712e4777c83dd24d5, based on current main 81d8686. Test-first commit 1b6c32c has seven expected failures against unchanged runtime. The implementation makes those controls pass, including literal 0 / 17 / 017, resumed activity results, read-only access and a successor replay that receives its predecessor IDs as business input without confusing them with its own identity.
Local verification: 154 replay/identity tests PASS, Ruff PASS, mypy PASS for all 36 source files with an explicit writable task cache. The initial mypy invocation failed internally; that is not counted as a pass. Fresh hosted checks remain pending.
Reference documentation is included. The public website's Python guide and all seven translations will follow the qualified publication; no accessor availability is claimed for existing PyPI 2.8.0. This remains draft through normal checks and compatible minor-release planning. Actual installed first-run/replay/continue-as-new acceptance is still required before closing #193.
All task tool/dependency/cache state was removed 05:44:01 UTC, ahead of the 06:20 bound. Tests exited 0; the idle tools holder required termination 137, no OOM. Borrowed tooling image and all foreign resources are preserved. Only clean pushed source and narrow readable results remain.
Python SDK 2.9.0 is published; installed identity acceptance starts
Release source 0411687, whole 2dca975a72a3292f859dcf1fd683a922739a105c, is identical to the fully qualified #195 candidate. The protected publisher 39745437823 passes; the stable GitHub release and normal PyPI JSON exist. Wheel SHA-256 1e7547e895485dc8f670bd1b9cc34184b135f249db8da98b16b250bfc6002f73, sdist ed5bde451458804eb23db5d581c363865460783cfd05c59a80080a2e40db09f0. No old tag was moved; merged release head is deleted/absent.
The separate source fixture a30d06d normally installs PyPI 2.9.0 and verifies all hashed RECORD entries plus tagged runtime bytes. Fresh published Server 2.11.0 controls cover default/named namespace identity, literal numeric IDs, activity suspension, a fresh workflow Worker for replay, and continue-as-new's successor identity versus predecessor IDs supplied as business data. Each original has an unchanged thirty-second whole observer and thirty-second run/execution deadlines. A separate cold client must recover the exact retained result/history. This is not a claim that a handle pinned to an earlier run follows the chain automatically.
Local application, SDK/dependencies, databases, network and raw resources retire by 08:45 UTC. No Cloud, native runtime, paid host or frozen actor is used. Actual installed results and the eight-locale website guide remain pending; #193 stays open.
Python SDK 2.9.0 is published from 0411687, whole 2dca975a72a3292f859dcf1fd683a922739a105c. Protected publisher 39745437823 and the developer portal publication pass. PyPI advertises the wheel SHA-256 1e7547e895485dc8f670bd1b9cc34184b135f249db8da98b16b250bfc6002f73 and source archive ed5bde451458804eb23db5d581c363865460783cfd05c59a80080a2e40db09f0.
Actual normal-install acceptance now PASSES against immutable published PHP Server 2.11.0, index b29157eb2cf844916debbbb3c01b3257672e0dece778a9c6fa539043a3038f02, with consumer source bbabc64. The installed package verifies all 49 hashed RECORD entries / 36 tagged source files. No SDK source overlay is used.
Eight fresh originals cover default IDs 0, 17, 017 and a continue-as-new chain, plus four separately named IDs in namespace identity-named. Each crosses activity suspension and three distinct worker lifecycles, then a separate normally installed cold-reader process verifies the exact typed result and retained history. Workflow ID stays stable, run ID matches the current run after replay, and a continued successor receives its new run ID with the predecessor IDs retained only as explicit business input. Exact int64 9007199254740993, null and Unicode survive. All original 30-second whole-run and execution bounds are unchanged; elapsed times are 4.42–6.90 seconds.
The API is stopped before an independent read-only SQL audit: 10 completed run rows / 8 activities / 8 first activity attempts / 26 first-attempt completed tasks / 52 events / 0 repairs / 0 failed jobs, split five run rows per namespace. Stored IDs, namespace and original deadlines agree. The stopped database fingerprint is unchanged by audit. API SIGTERM exits 0, no OOM and zero restarts. All task containers, network, venv, database and raw state are actually absent at 08:36:07 UTC, ahead of 08:45; borrowed images remain.
Two earlier fixture setup observations remain failed: local callable shadowing, then the already-created namespace. Both occurred before workflow admission; stopped SQL proves zero runs/tasks/activities, so no package defect or rescued original is claimed. Draft #196 keeps the reusable recipe. Its line-length gate requires a formatting-only follow-up. The fixture explicitly reads continue-as-new by the actual successor run ID and does not qualify following a handle pinned to its predecessor.
The runtime feature and genuine installed acceptance are delivered. This issue stays open for the all-eight-locale Python guide update and final reusable-fixture gates.
Delivered in published Python SDK 2.9.0, source 0411687. The genuine normal-install receipt proves current workflow/run identity, cold replay and continue-as-new successor identity across eight default/named originals, exact typed values, separate cold reads and stopped-state audit under unchanged thirty-second budgets. The failed fixture setup attempts remain failed.
Reusable consumer #196 merged a570164, identical qualified whole 4b898796cf144c9099180afa697bb654ec659e38. Every normal check, including actual integration and Sonar review, passes. The completed head is deleted.
Guide #355 merged ca46d6c4b74b58be1870ec576ba6216f94b62ce3, identical qualified whole 560392510f7eb525ef5d909150597e31a57502a1. Website publication succeeds and GitHub Pages build 9cfce8700a3a280025b370aacbf86ea757db9756 is built. Actual HTTPS fetches of all eight English, German, Spanish, French, Japanese, Portuguese, Ukrainian and Simplified Chinese guides return 200 with the correct HTML language, translated identity heading, both context properties, the 2.9.0 minimum and describe/query status guidance. For example: English, German, Ukrainian.
This adds a compatible local context API and leaves the wire contract unchanged. Existing Server/SDK clients need no release merely to align version numbers. Sample's older qualified tuple remains its own tuple; the separately required coherent lease/UI update stays with Workflow #878. New identity examples explicitly require SDK 2.9.0 or later.
All runtime, dependencies, databases and raw consumer state are retired. Only compact acceptance results and reproducible source remain. This completes the issue's accessor, replay/successor and published-guide requirements.
Activity
rmcdaniel commentedon Oct 22, 2026
Accepted as a Python SDK product capability, priority P3. Documentation alone would not resolve the missing API.
Expose read-only
WorkflowContext.workflow_idandWorkflowContext.run_idproperties backed by the canonical identity already supplied to the context. They must remain stable across replay, identify the current run after continue-as-new, and require no caller-supplied business argument. This adds no wire field or execution authority.Acceptance includes first execution, replay, and a genuine continue-as-new successor, plus the Python API reference and guide in every supported language. Release and normal-install consumer verification are required before closure. General owns this work; the current entry-recovery and activity-lease releases remain ahead of it.
rmcdaniel commentedon Oct 22, 2026
General is implementing the accepted workflow-context identity API on current main 81d8686. Scope: read-only
ctx.workflow_idandctx.run_idfrom the original task context, with suspension/cold-replay and continue-as-new successor tests plus reference documentation. No transport, protocol, package dependency, tracing carrier or Server change.Unique source/tool phase
general193-20261022t0542; source and tool/dependency state are separate. Any task-owned runtime/dependency scratch retires by 06:20 UTC. Existing Rust publisher and Server/docs original gates continue unchanged. Published package/website-guide follow-through will be recorded separately; accessors are not claimed available in the current published package.rmcdaniel commentedon Oct 22, 2026
Workflow context identity
Refs #193. Add read-only
ctx.workflow_idandctx.run_idfrom the original workflow task context. These preserve exact string IDs, remain stable through suspension/cold replay, and take the successor run ID after continue-as-new. No transport, history, protocol, dependency or tracing-carrier change.Source 43971b0, whole 01c245b1e1d394b517357bf712e4777c83dd24d5, based on current main 81d8686. Test-first commit 1b6c32c has seven expected failures against unchanged runtime. The implementation makes those controls pass, including literal
0/17/017, resumed activity results, read-only access and a successor replay that receives its predecessor IDs as business input without confusing them with its own identity.Local verification: 154 replay/identity tests PASS, Ruff PASS, mypy PASS for all 36 source files with an explicit writable task cache. The initial mypy invocation failed internally; that is not counted as a pass. Fresh hosted checks remain pending.
Reference documentation is included. The public website's Python guide and all seven translations will follow the qualified publication; no accessor availability is claimed for existing PyPI 2.8.0. This remains draft through normal checks and compatible minor-release planning. Actual installed first-run/replay/continue-as-new acceptance is still required before closing #193.
All task tool/dependency/cache state was removed 05:44:01 UTC, ahead of the 06:20 bound. Tests exited 0; the idle tools holder required termination 137, no OOM. Borrowed tooling image and all foreign resources are preserved. Only clean pushed source and narrow readable results remain.
rmcdaniel commentedon Oct 22, 2026
Python SDK 2.9.0 is published; installed identity acceptance starts
Release source 0411687, whole 2dca975a72a3292f859dcf1fd683a922739a105c, is identical to the fully qualified #195 candidate. The protected publisher 39745437823 passes; the stable GitHub release and normal PyPI JSON exist. Wheel SHA-256 1e7547e895485dc8f670bd1b9cc34184b135f249db8da98b16b250bfc6002f73, sdist ed5bde451458804eb23db5d581c363865460783cfd05c59a80080a2e40db09f0. No old tag was moved; merged release head is deleted/absent.
The separate source fixture a30d06d normally installs PyPI 2.9.0 and verifies all hashed RECORD entries plus tagged runtime bytes. Fresh published Server 2.11.0 controls cover default/named namespace identity, literal numeric IDs, activity suspension, a fresh workflow Worker for replay, and continue-as-new's successor identity versus predecessor IDs supplied as business data. Each original has an unchanged thirty-second whole observer and thirty-second run/execution deadlines. A separate cold client must recover the exact retained result/history. This is not a claim that a handle pinned to an earlier run follows the chain automatically.
Local application, SDK/dependencies, databases, network and raw resources retire by 08:45 UTC. No Cloud, native runtime, paid host or frozen actor is used. Actual installed results and the eight-locale website guide remain pending; #193 stays open.
rmcdaniel commentedon Oct 22, 2026
Python SDK 2.9.0 is published from 0411687, whole 2dca975a72a3292f859dcf1fd683a922739a105c. Protected publisher 39745437823 and the developer portal publication pass. PyPI advertises the wheel SHA-256
1e7547e895485dc8f670bd1b9cc34184b135f249db8da98b16b250bfc6002f73and source archiveed5bde451458804eb23db5d581c363865460783cfd05c59a80080a2e40db09f0.Actual normal-install acceptance now PASSES against immutable published PHP Server 2.11.0, index
b29157eb2cf844916debbbb3c01b3257672e0dece778a9c6fa539043a3038f02, with consumer source bbabc64. The installed package verifies all 49 hashed RECORD entries / 36 tagged source files. No SDK source overlay is used.Eight fresh originals cover default IDs
0,17,017and a continue-as-new chain, plus four separately named IDs in namespaceidentity-named. Each crosses activity suspension and three distinct worker lifecycles, then a separate normally installed cold-reader process verifies the exact typed result and retained history. Workflow ID stays stable, run ID matches the current run after replay, and a continued successor receives its new run ID with the predecessor IDs retained only as explicit business input. Exact int649007199254740993, null and Unicode survive. All original 30-second whole-run and execution bounds are unchanged; elapsed times are 4.42–6.90 seconds.The API is stopped before an independent read-only SQL audit: 10 completed run rows / 8 activities / 8 first activity attempts / 26 first-attempt completed tasks / 52 events / 0 repairs / 0 failed jobs, split five run rows per namespace. Stored IDs, namespace and original deadlines agree. The stopped database fingerprint is unchanged by audit. API SIGTERM exits 0, no OOM and zero restarts. All task containers, network, venv, database and raw state are actually absent at 08:36:07 UTC, ahead of 08:45; borrowed images remain.
Two earlier fixture setup observations remain failed: local callable shadowing, then the already-created namespace. Both occurred before workflow admission; stopped SQL proves zero runs/tasks/activities, so no package defect or rescued original is claimed. Draft #196 keeps the reusable recipe. Its line-length gate requires a formatting-only follow-up. The fixture explicitly reads continue-as-new by the actual successor run ID and does not qualify following a handle pinned to its predecessor.
The runtime feature and genuine installed acceptance are delivered. This issue stays open for the all-eight-locale Python guide update and final reusable-fixture gates.
rmcdaniel commentedon Oct 22, 2026
Delivered in published Python SDK 2.9.0, source 0411687. The genuine normal-install receipt proves current workflow/run identity, cold replay and continue-as-new successor identity across eight default/named originals, exact typed values, separate cold reads and stopped-state audit under unchanged thirty-second budgets. The failed fixture setup attempts remain failed.
Reusable consumer #196 merged a570164, identical qualified whole 4b898796cf144c9099180afa697bb654ec659e38. Every normal check, including actual integration and Sonar review, passes. The completed head is deleted.
Guide #355 merged ca46d6c4b74b58be1870ec576ba6216f94b62ce3, identical qualified whole 560392510f7eb525ef5d909150597e31a57502a1. Website publication succeeds and GitHub Pages build 9cfce8700a3a280025b370aacbf86ea757db9756 is built. Actual HTTPS fetches of all eight English, German, Spanish, French, Japanese, Portuguese, Ukrainian and Simplified Chinese guides return 200 with the correct HTML language, translated identity heading, both context properties, the 2.9.0 minimum and describe/query status guidance. For example: English, German, Ukrainian.
This adds a compatible local context API and leaves the wire contract unchanged. Existing Server/SDK clients need no release merely to align version numbers. Sample's older qualified tuple remains its own tuple; the separately required coherent lease/UI update stays with Workflow #878. New identity examples explicitly require SDK 2.9.0 or later.
All runtime, dependencies, databases and raw consumer state are retired. Only compact acceptance results and reproducible source remain. This completes the issue's accessor, replay/successor and published-guide requirements.