Changes to add .NET SDK support - #12
Conversation
Documents the .NET SDK alongside Go, Python, TypeScript, and Java, verified against Temporalio.Extensions.Aws.Lambda 1.18.0 (public API read from the package's own XML documentation) and samples-dotnet@main src/LambdaWorker, which is maintained code with a test project. .NET specifics documented: - Separate NuGet package in lockstep with Temporalio 1.18.0, with OpenTelemetry in a second package rather than an extra on the first. - TemporalLambdaWorker.CreateHandler as the entry point, with sync and async configure overloads; registrations go through WorkerOptions. - Publish must be RID-specific (--runtime linux-x64 / linux-arm64): the SDK wraps a native Rust core, libtemporalio_sdk_core_c_bridge.so, which a portable publish omits. This is .NET's equivalent of Python's manylinux wheels and Go's GOARCH, with the same first-invocation failure mode. Includes the sample's presence check. - The handler string has three colon-separated parts, ASSEMBLY::NAMESPACE.TYPE::METHOD -- the only SDK with that shape. - Worker-level default versioning behavior is AutoUpgrade, where TypeScript's is PINNED. Defaults are not uniform; set them explicitly. - The SSL_CERT_FILE / root CA issue on some Lambda .NET images, which presents as a TLS failure that is not a configuration problem. - Telemetry IAM permissions and --tracing-config Mode=Active, from the sample's enable-telemetry.sh. Also corrects the sample location: the docs link to a branch (blob/ea/aws-lambda) that no longer exists; the sample is on main at src/LambdaWorker. Note that .NET uses --timeout 600 and --memory-size 256, the same as Go, Python and TypeScript, which supports reading Java's 90/1024 as a Java-specific choice rather than a documentation inconsistency. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Deployed a .NET hello-world Worker end to end on Lambda. Three findings, none of which came from reading documentation. SSL_CERT_FILE is required, not optional. An otherwise-correct .NET deployment fails its first invocation with: Connection failed: Server connection error: tonic::transport::Error(Transport, NativeCertsNotFound) because AWS's .NET 8 Lambda images force-override SSL_CERT_FILE and the SDK's Rust core cannot load system root CAs. The variable now appears in the .NET create-function block and the environment-variable table rather than only in troubleshooting, since without it the deployment does not work at all. The error is also actively misleading: "certs not found" refers to the OS root CA store, not to any credential, and the connection fails before authentication is attempted. Diagnostics now says so explicitly and gives two discriminators, because the natural response -- checking the API key, Namespace, invocation role and External ID -- is wasted effort. Only .NET is affected: Python shares the Rust core but its runtime image does not override the variable, and Java uses the JVM truststore. Workflow.Logger is silent by default in .NET, because TemporalWorkerOptions.LoggerFactory defaults to the client's, which is also unset. Activity Console.WriteLine still reaches CloudWatch, so the gap looks selective rather than total. That completes a set of three SDKs with three unrelated causes for the same symptom. Also adds a caution to iam.md: read the invocation role's policy back after any update-stack that changes LambdaFunctionARNs. UPDATE_COMPLETE does not mean the ARNs are well-formed, the list is replaced rather than merged, and malformed entries silently revoke access for every function they omit. Includes the zsh $VAR:l expansion trap that produced exactly that outcome during this run. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…temporal-serverless into dotnet-sdk-support
…verless into dotnet-sdk-support
# Conflicts: # README.md # references/aws-lambda/diagnostics.md # references/aws-lambda/observability.md # references/aws-lambda/setup.md # references/sdk-configuration.md
The merged branch corrected four unverified doc citations in setup.md's Java create-function section. The SDK-reference refactor had moved that text to sdk-java.md, so resolving the merge in favour of the new structure dropped them. Apply them where the text now lives. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ule or technical claim changes. - SKILL.md: remove trailing rationale from four rules; correct the pre-question note to point at steps 2 and 3, not step 2 alone. - sdk-*.md: drop "useful" from the "Ordering when sources disagree" heading, which the refactor had copied into all five files.
|
Thanks for restacking this PR on top of #11. The branch relationship now looks correct. I still have several requested changes, organized by priority: 1. Ownership blockersThe shared files should remain provider-level orchestration references, while SDK-specific configuration belongs in the language reference.
2. Prose and research-diary contentPlease remove the research diary and authorial narration. Provenance should be expressed through stable source references, not descriptions of how a conclusion was reached during one deployment or documentation-reading session. Examples include:
Several remain in Please retain the actionable, corroborated facts and remove the narrative around discovering or interpreting them. 3. .NET SDK correctnessThe central APIs—
4. Namespace scope creep in
|
|
The above comment was written (ofc) by an agent. 1 and 2 are blockers in my view. 3 I'll you and the team decide if valid. 4- unless you and the team feels strongly we should suggest creating a new namespace, I suggest we remove this change. |
|
Thanks for the detailed review. I’ve addressed all four sections:
The Java SDK that were present earlier have been removed and will be handled later Please take another look when you have a chance |
What was changed
.NET specifics documented
the SDK wraps a native Rust core, libtemporalio_sdk_core_c_bridge.so,
which a portable publish omits.
presents as a TLS failure that is not a configuration problem.
sample's enable-telemetry.sh.
Testing
Verified using an end to end creation/deployment/run of a sample application via Claude Code prompts