* 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>