* 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 #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>
* 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>
* 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 0032-workflow-streams
* Apply suggestions from code review
Co-authored-by: Donald Pinckney <donald_pinckney@icloud.com>
* Remove the extended example. Can add later if needed.
---------
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: Donald Pinckney <donald_pinckney@icloud.com>
* Add integrations catalog and per-language integrations/ layout
Adds references/integrations.md as a single catalog table for third-party
plugins and integrations (one row per integration: language, what it does,
link to a reference file). Reference files live under
references/{language}/integrations/.
Pre-seeds the catalog by moving the existing Spring Boot reference into
the new layout (references/java/integrations/spring-boot.md) and updating
its inbound links.
SKILL.md gains a single 3-line "Third-Party Integrations" section pointing
at the catalog so SKILL.md no longer accrues a line per new integration.
Each language entry-point (java.md, python.md) gets a one-line pointer to
the catalog filtered to its language.
This lets open integration PRs (Spring AI, Google ADK, OpenAI Agents
sandbox) be rebased onto a consistent home: move their reference file
into references/{language}/integrations/ and add one row to
references/integrations.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Drop HTML contribution comment from integrations.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* 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