Skip to content

Sync PHP support branch with upstream v0.6.2 - #99

Open
mesilov wants to merge 90 commits into
temporalio:feature/add-php-supportfrom
mesilov:main
Open

Sync PHP support branch with upstream v0.6.2#99
mesilov wants to merge 90 commits into
temporalio:feature/add-php-supportfrom
mesilov:main

Conversation

@mesilov

@mesilov mesilov commented Apr 30, 2026

Copy link
Copy Markdown

Summary and motivation

The PHP SDK contribution in #40 was prepared against an earlier version of the skill. Since then, upstream has added more SDK references, expanded CLI and integration guidance, and introduced a new packaging and release workflow.

This PR brings feature/add-php-support up to upstream main at 2d7fda3 (v0.6.2), with the PHP contribution preserved. This lets maintainers review and integrate PHP support against the current repository structure, while keeping the newer language coverage, shared guidance, and distribution setup available to users.

What this adds to the PHP branch

  • More SDK reference material: Go, Java, .NET, and Ruby guides covering setup, workflow patterns, testing, determinism, errors, versioning, data handling, and observability, plus the Rust SDK public-preview reference. Python and TypeScript guides also receive the accumulated upstream fixes and updates.
  • CLI and local development guidance: dedicated CLI installation and workflow-command references, expanded development-server instructions, and examples for starting, executing, signalling, querying, and updating workflows. The skill description includes these CLI use cases so agents can select the skill for operational tasks as well as SDK development.
  • Additional Temporal topics: Task Queue Priority and Fairness, Standalone Activities with language-specific references, versioned Continue-As-New, external storage guidance for Go/Python/TypeScript, and Python Workflow Streams.
  • An integrations catalog and dedicated guides: Spring Boot, Spring AI, OpenAI Agents SDK, Google ADK, LangGraph, LangSmith, Pydantic AI, OpenTelemetry, Braintrust, Mastra, and Vercel AI SDK. These references give agents a path from the framework used in an application to the relevant Temporal setup and examples.
  • Updated skill entry point and installation docs: navigation across all eight SDK languages, links to the new shared topics and integrations, and installation paths for Claude Code, Cursor, Codex, and standalone use. Skill metadata follows the upstream v0.6.2 release.
  • Repository and release infrastructure: the MIT license, CODEOWNERS, and the shared temporalio/skill-ci workflow for packaging the skill and syncing releases to the plugin repositories.

How PHP support is preserved

All 11 files under references/php/ are unchanged from the target branch. They retain the PHP-specific entry point and guidance for patterns, testing, error handling, determinism and its protection mechanisms, versioning, data handling, observability, advanced features, and common pitfalls.

The merged SKILL.md keeps PHP in its description, overview, and language-guide navigation alongside the upstream languages. The README marks PHP as supported, and the shared determinism reference retains PHP's SDK protection guidance alongside the new Ruby and Rust sections.

Relationship to #40

This PR targets feature/add-php-support; merging it updates the branch behind #40. The 107-file diff reflects the upstream changes accumulated since that branch diverged. The PHP reference files themselves are already part of #40 and are preserved here.

Validation

  • git diff --check passes; no unresolved merge entries or conflict markers remain.
  • Compared the merged tree with upstream: upstream files are preserved except for PHP integration in README.md, SKILL.md, and references/core/determinism.md.
  • Confirmed all 11 PHP reference files are byte-for-byte identical to the target branch.
  • Checked skill version 0.6.2, all eight language entry points, and all 22 explicit local reference paths in SKILL.md.
  • Built the skill ZIP from SKILL.md and references/; unzip -tq reported no errors.

Validation covers documentation structure and merge integrity. SDK runtime examples were not executed.

donald-pinckney and others added 30 commits March 12, 2026 13:11
…io#43)

When a workflow is cancelled mid-saga, compensations must run in a
cancellation-protected scope, otherwise they are immediately cancelled
before they can execute.

- Python: wrap compensation loop in asyncio.shield() so it runs even
  when the workflow receives a CancelledError
- TypeScript: wrap compensation loop in CancellationScope.nonCancellable()
  so it runs even when the root scope is cancelled (per official docs:
  "Cleanup logic must be in a nonCancellable scope")
- TypeScript: also fix compensation registration order — register BEFORE
  calling the activity (was already correct in Python)

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* progress on go

* Go translation workflow completed.

* missed a few spots

* Manual edits

* Address feedback

* Add gotcha about anonymous local activities

* Sample code for payload converter

* clarify sdk protection mechanisms
* Add initial skill for testing, which is simply Steve's skill (#1)

* Add initial skill for testing, which is simply Steve's skill

* Rename skill to 'temporal-dev' and update version

Updated skill name and version for Temporal Python.

* Use claude to merge Steve's, Max's, and Mason's skills.  (#2)

* Use claude to merge Steve's, Max's, and Mason's skills. Did a review pass using claude's skill devlopment skills

* Add missing things from Steve

* trigger tweaks

* Add in common gotchas from Johann

* add simple feedback mechanism (temporalio#3)

* Change skill name to kebab-case, for compatibility with Amp and Cline (temporalio#7)

* Clean up references/core/ai-integration.md

* Clean up references/core/common-gotchas.md

* Clean up references/core/common-gotchas.md

* Clean up references/core/determinism.md

* Clean up references/core/determinism.md

* Update error-reference.md

* Update interactive-workflows.md

* Clean up patterns.md

* Cut shell scripts

* Edit troubleshooting.md

* remove interceptors for now

* remove dynamic workflows

* clarify on heartbeating of async activity completions, and prompt it a bit in relation to signals

* Improve references/python/advanced-features.md

* Use explicit namespace in connect

* remove duplicated content from determinism.md, clean up

* Improve references/python/data-handling.md

* Prefer start_to_close_timeout

* don't explicitely provide defaults for retry policies

* error-handling.md cleanup

* move idempotency patterns to patterns.md

* remove multi-param activities

* small edits

* Unify sandbox stuff into one file

* local activities aren't experimental

* Clean up references/python/sync-vs-async.md

* Cleanup observability.md, remove duplicated search attributes

* Cut otel for now

* cut a lot of duplicate stuff from python gotchas, address comments

* de-duplicate content

* Lots of improvements to testing

* cleanup to top level of skill (like CLI install instructions), and to top-level of python

* Improve patterns.md

* clean up ai-patterns.md

* Update readme with installation instructions

* remove ts directory

* De-couple core from python and TypeScript as much as possible

* Remove TypeScript hints

* add prompting for feedback at startup - wait for ethan on slack channel

* shorten url

* Update slack channel

* Automated pass over on python cleanup & deduplication

* Remove multi-patching from Python, since its obvious, dont waste tokens on it. (temporalio#34)

* Add TypeScript (temporalio#31)

Adds initial support for TypeScript to the skill

---------

Co-authored-by: James Watkins-Harvey <mjameswh@users.noreply.github.com>
Co-authored-by: Chris Olszewski <chrisdolszewski@gmail.com>

* Fix typos and reference links (temporalio#36)

* Fix typos and reference links

* 2 more typo fixes

* quick edit to readme (temporalio#37)

* Fix saga compensations to run under cancellation protection (temporalio#43)

When a workflow is cancelled mid-saga, compensations must run in a
cancellation-protected scope, otherwise they are immediately cancelled
before they can execute.

- Python: wrap compensation loop in asyncio.shield() so it runs even
  when the workflow receives a CancelledError
- TypeScript: wrap compensation loop in CancellationScope.nonCancellable()
  so it runs even when the root scope is cancelled (per official docs:
  "Cleanup logic must be in a nonCancellable scope")
- TypeScript: also fix compensation registration order — register BEFORE
  calling the activity (was already correct in Python)

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* Update readme for public preview (temporalio#45)

* a few more readme tweaks (temporalio#46)

* Add MIT License to the project (temporalio#47)

* Add Go (supersedes other PR) (temporalio#38)

* progress on go

* Go translation workflow completed.

* missed a few spots

* Manual edits

* Address feedback

* Add gotcha about anonymous local activities

* Sample code for payload converter

* clarify sdk protection mechanisms

* Setup CODEOWNERS to AI SDK team (temporalio#48)

* Align version number in SKILL.md and plugin.json. (temporalio#49)

---------

Co-authored-by: James Watkins-Harvey <mjameswh@users.noreply.github.com>
Co-authored-by: Chris Olszewski <chrisdolszewski@gmail.com>
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
….ai uploads�

The skill works great as a Claude Code plugin where SKILL.md and references are auto-discovered, butusers may want to upload it to Claude.ai projects instead.
You currently do this by uploaded a .zip file to your Claude.ai UI.

This adds a GitHub Actions workflow that packages the skill and references into a ZIP on every push to main, and creates a GitHub Release when the version in SKILL.md increases.
Users can grab the ZIP from the release and upload it directly to a Claude.ai project without needing to clone the repo.
- Fix missing trailing pipe in error-reference.md table header
- Fix wrong reference path in go.md (python -> go determinism-protection)
- Add missing .md extension to testing reference in go/determinism-protection.md
- Fix typos: "Activty" -> "Activity", "accomplised" -> "accomplished", "discourged" -> "discouraged"
* docs: add @workflow.init decorator to python.md Key Concepts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Apply suggestion from @brianstrauch

* Update references/python/python.md

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Add packaging workflow to release a public version and support Claude.ai Uploads
* Add Java SDK reference files (11 files)

Create complete Java reference documentation covering:
- java.md: Entry point with quick start tutorial, key concepts
- patterns.md: 17 patterns (signals, queries, updates, child workflows,
  saga, cancellation scopes, heartbeating, etc.)
- determinism.md: Safe alternatives table, forbidden operations
- determinism-protection.md: Convention-based enforcement (no sandbox)
- error-handling.md: ApplicationFailure, retry/timeout config
- gotchas.md: Non-deterministic operations, cancellation, heartbeating
- testing.md: TestWorkflowEnvironment, Mockito mocking, replay testing
- versioning.md: Workflow.getVersion(), worker versioning
- data-handling.md: Jackson, PayloadConverter, encryption, search attributes
- observability.md: SLF4J logging, Micrometer metrics
- advanced-features.md: Schedules, async completion, worker tuning

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Fix Java alignment issues from self-review

- Reduce gotchas.md Non-Deterministic Operations from ~94 lines to ~12
  (reference determinism.md instead of duplicating)
- Remove Workflow Failure Exception Types duplication from error-handling.md
  (keep only in advanced-features.md)
- Expand versioning.md Worker Versioning with Key Concepts, PINNED vs
  AUTO_UPGRADE, Deployment Strategies subsections
- Fix section names to match Python reference style:
  Activity Heartbeat Details, Handling Activity Errors,
  Retry Policy Configuration, Workflow Test Environment,
  Mocking Activities, Workflow Replay Testing
- Reduce data-handling.md Payload Encryption verbosity
- Reduce observability.md Logger Customization verbosity
- Reduce testing.md to single approach per section
- Rename determinism.md "Convention-Based Enforcement" to "SDK Protection"
- Fix handler guidance in patterns.md to match Python

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Fix correctness issues in Java reference files

- patterns.md: Fix Queries section — ActivityStub → typed interface
  (Workflow.newActivityStub returns the typed interface, not ActivityStub)
- data-handling.md: Add missing ProtobufPayloadConverter to default
  converter chain (4th of 5 converters)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Add Java to SKILL.md and core/determinism.md

- SKILL.md: Add "Temporal Java" trigger phrase, update Overview to
  list Java, add Java entry to Getting Started references
- core/determinism.md: Add Java entry to SDK Protection Mechanisms
  (no sandbox, convention-based, NonDeterministicException at replay)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Apply manual editorial fixes to Java references

- java.md: Remove "Understanding Replay" section (covered by Overview),
  simplify File Organization note (no sandbox rationale)
- gotchas.md: Move Heartbeating before Cancellation, make Wrong Retry
  Classification brief with reference (not inline examples)
- error-handling.md: Remove editorializing from Workflow Failure note
- determinism-protection.md: Remove cross-language comparison paragraph
  (state Java's approach on its own terms)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Add temporal-workflowcheck static analysis to Java determinism docs

- determinism-protection.md: Add "Static Analysis with temporal-workflowcheck"
  section with Gradle/Maven setup, manual run, and suppression instructions.
  Beta warning included.
- determinism.md: Update overview and SDK Protection to reference workflowcheck
- core/determinism.md: Update Java entry in SDK Protection Mechanisms

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Integrate feedback from Go PR into Java patterns

- Updates: Add validator note — validators must not mutate state or
  block (matches note added to Python, TypeScript, Go, and core)
- Saga Pattern: Use Workflow.newDetachedCancellationScope() for
  compensations so they execute even if the workflow is cancelled
  (mirrors Go's workflow.NewDisconnectedContext pattern)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* docs: add @WorkflowInit description to java.md Key Concepts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* mark java as supported

* Apply suggestions from code review

Co-authored-by: Brian Strauch <brian@brianstrauch.com>

* strongly recommend java 21+

* Softened stance on static checker and replay testing.

* address python/typescript sandboxing comment

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Brian Strauch <brian.strauch@temporal.io>
Co-authored-by: Brian Strauch <brian@brianstrauch.com>
* Reduce repetition in determinism sans sandboxing.

* fix merge
…emporalio#81)

* Auto-formatting: ran `mdformat --extensions frontmatter --number .`

* manual tweaks

* manual tweaks
* Add skill to plugin syncing workflow

* Fix Semgrep report
* Add changelog to syncing PRs.

* Add step summary to syncing job

* Also *edit* PR bodies with changelogs
* Add .NET reference files for temporal-developer skill

Created 11 .NET reference files covering: dotnet.md (overview/quick start),
patterns.md, determinism.md, determinism-protection.md, error-handling.md,
testing.md, versioning.md, observability.md, data-handling.md, gotchas.md,
and advanced-features.md. Follows Python/TypeScript patterns with .NET-specific
content for Task determinism, CancellationToken, dependency injection, etc.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Fix .NET alignment issues from self-review

- dotnet.md: Reduce Determinism Rules section to brief cross-reference
  (was duplicating determinism.md content)
- patterns.md: Add ParentClosePolicy to Child Workflows example
- gotchas.md: Add missing "Heartbeat Timeout Too Short" subsection
- versioning.md: Add missing Key Concepts, Deployment Strategies,
  Query Filters, PINNED/AUTO_UPGRADE guidance, CLI examples
- advanced-features.md: Add worker-level heading for exception types

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Fix .NET correctness issues from verification pass

- patterns.md: Fix cancellation pattern to use official
  TemporalException.IsCanceledException(e) with detached CancellationTokenSource
- advanced-features.md: Fix DI hosting example to use official
  AddHostedTemporalWorker(clientTargetHost:, clientNamespace:, taskQueue:) pattern

Verified against official SDK README, API docs, and temporal-docs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Update supported language references to include .NET

- SKILL.md: Add "Temporal .NET" and "Temporal C#" trigger phrases,
  update overview to mention .NET, add .NET entry in getting started
- core/determinism.md: Add .NET entry in SDK Protection Mechanisms

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Edits to advanced features

* edits to determinism protection, and move the .editorconfig section

* missed one

* edit determinism.md

* edit error-handling.md

* edit gotchas.md

* edit patterns.md

* edit versioning.md

* edit observability.md

* fix metrics

* self-review round 1

* minor correctness fixed

* Update references/dotnet/patterns.md

Co-authored-by: Justin Anderson <44687433+jmaeagle99@users.noreply.github.com>

* address comments, clarify reference to earlier code snippet

* clarify that operations are forbidden IN WORKFLOWS

* cleanup workflow cancellation handling example

* add task token retrieval comment

* update .net requirements

* Fix propagation of workflow cancellation

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Justin Anderson <44687433+jmaeagle99@users.noreply.github.com>
* Edits to python versioning fixes

* add missing workflow imports
donald-pinckney and others added 8 commits May 29, 2026 17:46
* Add Python standalone activities reference

* Add TypeScript standalone activities reference

* Add .NET standalone activities reference

* Add Java standalone activities reference

* Finalize draft for 0001-standalone-activities

* remove incomplete sections

* Add core page which abstracts out all shared stuff

* Standardize connection logic

* Unify worker setup section across SDK standalone-activity refs

Rename the worker section to "Worker setup & activity registration" in
all four SDK files and lead with a single sentence noting the Activity
is defined and registered exactly as normal. Drop the .NET "Define the
Activity" section so no file repeats how to define an activity, matching
the Python structure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* re-organize to a LOGICAL structure, not just a flat list of H2 headings.

* finish cleaning up parts other than calling activities

* Get client connection in order

* cleanup of operations content

* Add links

---------

Co-authored-by: skill-sync[bot] <skill-sync[bot]@users.noreply.github.com>
Co-authored-by: Donald Pinckney <donald.pinckney@temporal.io>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Finalize draft for 0037-standalone-activities-go

* Update Standalone Activities documentation for Go SDK

Edits throughout Go standalone activities

---------

Co-authored-by: skill-sync[bot] <skill-sync[bot]@users.noreply.github.com>
Co-authored-by: Donald Pinckney <donald.pinckney@temporal.io>
* Finalize draft for 0009-versioned-continue-as-new

* Fix non-Go languages

* Simplify examples, don't give an antipattern!

---------

Co-authored-by: skill-sync[bot] <skill-sync[bot]@users.noreply.github.com>
Co-authored-by: Donald Pinckney <donald.pinckney@temporal.io>
* feat(rust): add Temporal Rust SDK references

* remove cruft

* official references link

* deslop

* deslop v2

* docs(rust): mark Rust as Public Preview in SKILL.md reference list

Addresses review comment on SKILL.md:62 (donald-pinckney).

* docs(rust): label Rust as Public Preview in README support list

Addresses review comment on README.md:43 (donald-pinckney).

* docs(rust): add Public Preview NOTE callout to rust.md

Uses the reviewer's exact wording. Addresses review comment on
references/rust/rust.md:1 (donald-pinckney).

* docs(rust): point dependency guidance to official Rust SDK Quickstart

Drops the pinned-version caveat now that there are no crate versions in
the file. Addresses review comment on references/rust/rust.md:22
(chris-olszewski).

* docs(rust): drop Skipping Activity timeouts pitfall

The Rust SDK always applies a to_close Activity timeout, so the pitfall
does not apply. Addresses review comment on references/rust/rust.md:171
(chris-olszewski).

* docs(rust): link directly to sdk-rust examples directory

The examples are not at the repo top, so link the explicit path.
Addresses review comment on references/rust/rust.md:177
(chris-olszewski).
* Finalize draft for 0022-opentelemetry-plugins

* Remove legacy TracingInterceptor content from OpenTelemetry docs

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Remove Nexus content from OpenTelemetry docs

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Tie OpenTelemetry tracing into the observability references

Both observability.md files advertised "tracing" but had no tracing
section and never linked to the OTel integration docs. Add a concise
Distributed Tracing (OpenTelemetry) section to each, surface the
trace/log/metric correlation, and cross-link so the OTel <-> observability
relationship is bidirectional. Deep API stays canonical in
integrations/opentelemetry.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Trim TypeScript OpenTelemetry doc to lean style

Mirror the lean, example-driven style now used in the Python OTel doc:
fold the Public API / Constructor options / Span names tables into inline
comments and prose, compress propagator customization to a one-liner, and
keep the log/metric correlation tie-in. Update the observability.md pointer
so it no longer promises tables that were removed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Finalize Python file

* Simplify OpenTelemetry rows in integrations catalog

Reduce both OTel rows to a purpose-only description, dropping mechanism
detail (plugin names, interceptors, sinks, propagation specifics).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Finalize observability files other than code snippets

* finalize python observaibility file

* Finalize TS observability file

* cut correlation

* Move TypeScript OpenTelemetry docs to a separate PR

The TypeScript material needs more work, so split it out (now on branch
feat/ts-otel). This leaves PR temporalio#243 scoped to the Python OpenTelemetry
integration only: removes the TS integration reference, reverts the TS
observability tracing section, and drops the TS row from the catalog.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Apply suggestions from code review

Co-authored-by: Donald Pinckney <donald_pinckney@icloud.com>

* Apply suggestion from @donald-pinckney

* Apply suggestion from @donald-pinckney

* Consolidate Python OpenTelemetry docs into observability

Remove the standalone references/python/integrations/opentelemetry.md file
and fold its unique content (Common mistakes, workflow custom-span example)
into the Distributed Tracing section of observability.md. Repoint the
integrations catalog row at the observability section.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: skill-sync[bot] <skill-sync[bot]@users.noreply.github.com>
Co-authored-by: Donald Pinckney <donald.pinckney@temporal.io>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Donald Pinckney <donald_pinckney@icloud.com>
Co-authored-by: picatz <14850816+picatz@users.noreply.github.com>
@mesilov
mesilov marked this pull request as draft June 23, 2026 06:47
@mesilov
mesilov marked this pull request as ready for review June 23, 2026 06:47

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 72e67c0a7f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread references/dotnet/dotnet.md Outdated
.AddWorkflow<GreetingWorkflow>()
.AddAllActivities(new MyActivities()));

await worker.ExecuteAsync();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Pass a cancellation token to ExecuteAsync

The .NET quick start as written won't compile for users who copy it into a worker project because TemporalWorker.ExecuteAsync requires a CancellationToken stopping token. In the worker setup shown here, add a token source (for example wired to Ctrl+C) and call await worker.ExecuteAsync(tokenSource.Token) so the starter remains runnable.

Useful? React with 👍 / 👎.

Comment thread references/go/go.md

"yourmodule/workflows"

"github.com/google/uuid"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Document the extra Go UUID dependency

The Go quick start only tells users to run go get go.temporal.io/sdk, but the starter imports github.com/google/uuid. In a fresh module, the advertised go run starter/main.go path fails with no required module provides package github.com/google/uuid, so either include that go get in the dependency step or avoid the external UUID package in the sample.

Useful? React with 👍 / 👎.


When you start using fairness keys, it switches your active Task Queues to fairness mode. Existing queued Tasks are processed before any new fairness-mode ones.

**Temporal Cloud**: automatically enabled when you start using fairness keys.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Do not say Cloud fairness auto-enables

Temporal Cloud does not automatically enable Task Queue Fairness just because code starts sending fairness keys; the namespace must have Fairness enabled first. With this guidance, Cloud users can deploy the SDK/CLI examples and still see FIFO behavior, which is especially misleading for the multi-tenant starvation scenario this section recommends Fairness for.

Useful? React with 👍 / 👎.

starfleeth and others added 16 commits June 24, 2026 14:41
* Use shared package-and-sync reusable workflow

Replace the inline package/sync workflow with a thin caller of the shared
temporalio/skill-ci reusable workflow (pinned to v1). This also corrects the
codex plugin target path, which was stale (plugins/temporal-developer/... →
plugins/temporal/... as used by the shared workflow and present in the repo).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Pin shared workflow to @v1 tag instead of SHA

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Add one-click bump dispatch input to release workflow

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Finalize draft for 0038-vercel-ai-sdk

* Update references/typescript/integrations/vercel-ai-sdk.md

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Address Vercel AI SDK review feedback

* Document Vercel AI SDK v7 integration

* Fix AI SDK workflow helper imports

---------

Co-authored-by: skill-sync[bot] <skill-sync[bot]@users.noreply.github.com>
Co-authored-by: Brian Strauch <brian@brianstrauch.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Finalize draft for 0041-pydantic-ai

* Re-author Pydantic AI integration guidance

* Adopt TemporalDurability for Pydantic AI

* Remove TemporalAgent migration guidance

* Apply suggestion from @brianstrauch

* Apply suggestion from @brianstrauch

* Apply suggestion from @brianstrauch

* Apply suggestion from @brianstrauch

* Apply suggestion from @brianstrauch

---------

Co-authored-by: skill-sync[bot] <skill-sync[bot]@users.noreply.github.com>
Co-authored-by: Brian Strauch <brian@brianstrauch.com>
* Finalize draft for 0040-mastra

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Consolidate duplicate preview/experimental status into single admonition

Co-authored-by: brianstrauch <7474900+brianstrauch@users.noreply.github.com>

---------

Co-authored-by: skill-sync[bot] <skill-sync[bot]@users.noreply.github.com>
Co-authored-by: Brian Strauch <brian@brianstrauch.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: brianstrauch <7474900+brianstrauch@users.noreply.github.com>
* Add Python Braintrust integration reference

Authoring topic 0039-braintrust. Adds references/python/integrations/braintrust.md
grounded in docs/develop/python/integrations/braintrust.mdx covering install,
BraintrustPlugin registration on Client + Worker, wrap_openai, start_span, and
load_prompt with fallback.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Add TypeScript Braintrust integration reference

Authoring topic 0039-braintrust. Adds references/typescript/integrations/braintrust.md
grounded in the Temporal TS integrations index and the canonical Braintrust-hosted
guide. Covers @braintrust/temporal install, initLogger, and BraintrustTemporalPlugin
registration on Client + Worker. Marks wrapTraced/startSpan/loadPrompt details as
VERIFY since the Temporal docs link out for the TS API surface.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Add Braintrust rows to integrations catalog

Append Python and TypeScript rows linking to the new Braintrust integration
reference files. Python row notes Public Preview status.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Finalize draft for 0039-braintrust

* Remove Braintrust familiarity prerequisite

* Use uv add for Braintrust dependency

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: skill-sync[bot] <skill-sync[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Brian Strauch <brian@brianstrauch.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Add TypeScript OpenTelemetry integration docs

Split out from the OpenTelemetry plugins topic (PR temporalio#243) so the TypeScript
material can be finalized separately. Adds the TS OTel integration
reference, the Distributed Tracing section in TS observability, and the
TS row in the integrations catalog.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: align python with ts skill

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Patrik Beqo <patbeqo@gmail.com>
Co-authored-by: Patrik Beqo <patrik.beqo@temporal.io>
* Fix Python reference guidance from issue 256

* Correct Worker Versioning parameter and Build ID references

Split the Python Worker Versioning parameter list into one list per
class. build_id is a field of WorkerDeploymentVersion, not a parameter
of WorkerDeploymentConfig, so listing it alongside version and
use_worker_versioning invited WorkerDeploymentConfig(build_id=...),
which raises TypeError. Also adds the previously missing
default_versioning_behavior parameter.

Drop the claim that a Build ID is "not the legacy compatibility-set
API". A Build ID is an identifier rather than an API, and Build IDs are
used by both the legacy compatibility-set model and the current Worker
Deployment model, so the clause implied the opposite of the intended
disambiguation.

Verified against the temporalio 1.31.0 wheel: WorkerDeploymentConfig
(temporalio/worker/_worker.py) declares version, use_worker_versioning,
and default_versioning_behavior; WorkerDeploymentVersion
(temporalio/common.py) declares deployment_name and build_id.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Apply suggestions from code review

Co-authored-by: Brian Strauch <brian@brianstrauch.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Fix .NET worker cancellation example

* Simplify .NET worker execution example

* Revert "Simplify .NET worker execution example"

This reverts commit 83b8836.
* Use env-config for quick-start connections

* Pass namespace from env-config to TypeScript Workers

NativeConnection carries no namespace, and WorkerOptions defaults to
'default' when it is omitted. With TEMPORAL_NAMESPACE (or a temporal.toml
profile) set, the Worker polled 'default' while the Client used the
configured namespace, so the workflow was never picked up.

Verified against a dev server with a non-default namespace: the previous
snippets left the workflow Running with pollers on 'default'; with
namespace: config.namespace both quick starts complete.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Finalize draft for 0011-external-storage

* Fix Python external storage examples

* Add TypeScript external storage guidance

* Address review findings on external storage references

Python:
- Import ClientConfig from temporalio.envconfig, not temporalio.client.
  load_client_connect_config() is a staticmethod on the envconfig class;
  the temporalio.client.ClientConfig TypedDict has no such member, so the
  snippet raised AttributeError. Follow main's env-config convention
  (setdefault target_host) from temporalio#261.
- Register real Workflow/Activity placeholders. Worker() with empty
  workflows and activities raises "At least one activity, Nexus service,
  or workflow must be specified", and wrap the setup in async main().

Go:
- Cover the GCS driver (contrib/gcp/gcsdriver + gcssdk), which the SDK
  ships and the docs install alongside S3.
- Load client options with envconfig.MustLoadDefaultClientOptions() and
  note that Workers inherit External Storage from their Client.

Align coverage across all three languages, each of which was missing
something the others had:
- 50 MiB MaxPayloadSize/max_payload_size ceiling and the matching
  anti-pattern (Go, Python).
- Store/Retrieve are not retried within a Task attempt; the Task retries
  as a whole, so storage must be idempotent (Go, Python).
- Multi-region durability with CRR + an MRAP ARN (Go, Python).
- Distinct driver names when registering two drivers of the same kind
  (Go, Python).
- Codec Server guidance (TypeScript), including that neither the
  TypeScript nor Python SDK ships a storage-aware handler.
- Built-in driver behavior sections (concurrency, content-addressed
  keys, integrity checks, diagnostics) in Go and Python.
- ctx.Context on the Go driver contexts, mirroring TypeScript's
  abortSignal guidance; optional type() override in Python.

Also: standardize the TypeScript Public Preview admonition on the repo's
wording, drop the transplanted `payloadSizeThreshold: 1` anti-pattern
(TypeScript compares >=, so 1 behaves like 0), replace site-relative
plugins-guide links with absolute URLs, refresh the index pointers, and
revert an unrelated whitespace change in the Spring AI reference.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Harden external storage driver examples

* Fix correctness bugs in external storage references

Address code-review findings on the new external storage docs:

- Go: add missing "context" and "log" imports to the S3 driver, GCS
  driver, and client/worker setup snippets, which presented complete
  import lists but failed to compile.
- Go: add go.temporal.io/sdk/contrib/envconfig to both go get lines; it
  is a separate module and is imported by the setup snippet.
- Go: give the local-disk worked example an import block, and introduce
  the commonpb alias at its first use in the selector example.
- Go and Python: validate claim data in Retrieve/retrieve so a
  hand-crafted reference payload cannot read files outside the store
  directory, matching the hardening already applied to Store/store.
- Python: the Worker inherits the Data Converter from its Client and
  takes no data_converter argument; the prose said to pass it to both.

Verified by compiling every Go snippet against sdk-go and exercising
both path guards.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Route large-payload triage to the external storage references

The new external storage docs were only reachable from the language
index files, so the paths an agent actually takes when a user hits a
payload limit still sent it to hand-roll the claim-check pattern.

- core/error-reference.md: TMPRL1103 recovery now points at built-in
  External Storage before manual reference passing.
- core/gotchas.md: the payload-limit fix notes the SDK does this for you
  in Go, Python, and TypeScript.
- core/patterns.md: Large Data Handling leads with the SDK-native
  option and scopes the manual pattern to the cases that need it.

Also link the Go external storage sample from the Codec Server section,
matching what the Python reference already does.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: skill-sync[bot] <skill-sync[bot]@users.noreply.github.com>
Co-authored-by: Brian Strauch <brian@brianstrauch.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: patbeqo <46697474+patbeqo@users.noreply.github.com>
Co-authored-by: patbeqo <46697474+patbeqo@users.noreply.github.com>
@mesilov mesilov changed the title Resolve conflicts in PHP branch Sync PHP support branch with upstream v0.6.2 Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.