diff --git a/conformance-tests/pom.xml b/conformance-tests/pom.xml
index 8efec34d0..00f2c7079 100644
--- a/conformance-tests/pom.xml
+++ b/conformance-tests/pom.xml
@@ -7,7 +7,7 @@
software.amazon.lambda.durable
aws-durable-execution-sdk-java-parent
- 2.2.2-SNAPSHOT
+ 2.3.0
aws-durable-execution-sdk-java-conformance-tests
diff --git a/coverage-report/pom.xml b/coverage-report/pom.xml
index 216a4f529..4e37a3bfa 100644
--- a/coverage-report/pom.xml
+++ b/coverage-report/pom.xml
@@ -7,7 +7,7 @@
software.amazon.lambda.durable
aws-durable-execution-sdk-java-parent
- 2.2.2-SNAPSHOT
+ 2.3.0
aws-durable-execution-sdk-java-coverage-report
diff --git a/examples/pom.xml b/examples/pom.xml
index 3ad5dac20..17dacd69f 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -7,7 +7,7 @@
software.amazon.lambda.durable
aws-durable-execution-sdk-java-parent
- 2.2.2-SNAPSHOT
+ 2.3.0
aws-durable-execution-sdk-java-examples
diff --git a/insight-plugin/pom.xml b/insight-plugin/pom.xml
index c2cbe8df5..0f670e15b 100644
--- a/insight-plugin/pom.xml
+++ b/insight-plugin/pom.xml
@@ -7,7 +7,7 @@
software.amazon.lambda.durable
aws-durable-execution-sdk-java-parent
- 2.2.2-SNAPSHOT
+ 2.3.0
aws-durable-execution-sdk-java-plugin-insight
diff --git a/otel-plugin/README.md b/otel-plugin/README.md
index e1fe77d58..3b86574df 100644
--- a/otel-plugin/README.md
+++ b/otel-plugin/README.md
@@ -85,10 +85,10 @@ still reports `FAILED` when its error response can be serialized. This provides
not a fixed depth or time limit. Arbitrary custom `getCause`, other `Throwable` accessors, and customer `SerDes`
behavior remain outside that guarantee.
-This plugin version requires the core's `DurableExecutor.supportsSameThreadInvocationHooks()` capability, introduced
-in the 2.2.2 lifecycle contract (currently `2.2.2-SNAPSHOT`). Upgrade the core together with the plugin layer. Every
-plugin constructor checks this capability before building a tracer provider or activating context. A core without
-it, including released 2.2.1, is rejected with an explicit configuration error. Older cores may call
+This plugin version requires the core's `DurableExecutor.supportsSameThreadInvocationHooks()` capability.
+Upgrade the core together with the plugin layer. Every plugin constructor checks this capability before building a
+tracer provider or activating context. A core without it, including released 2.2.1, is rejected with an explicit
+configuration error. Older cores may call
`onInvocationEnd` on another thread and are not supported with this plugin version. Existing plugin binaries remain
usable with the updated core; their invocation-end hooks now follow the same-thread, reverse-registration-order
contract described above.
diff --git a/otel-plugin/pom.xml b/otel-plugin/pom.xml
index 02391a2ff..342c1d303 100644
--- a/otel-plugin/pom.xml
+++ b/otel-plugin/pom.xml
@@ -7,7 +7,7 @@
software.amazon.lambda.durable
aws-durable-execution-sdk-java-parent
- 2.2.2-SNAPSHOT
+ 2.3.0
aws-durable-execution-sdk-java-plugin-otel
diff --git a/otel-plugin/src/main/java/software/amazon/lambda/durable/otel/OtelPluginSupport.java b/otel-plugin/src/main/java/software/amazon/lambda/durable/otel/OtelPluginSupport.java
index 0c011218b..cd111989d 100644
--- a/otel-plugin/src/main/java/software/amazon/lambda/durable/otel/OtelPluginSupport.java
+++ b/otel-plugin/src/main/java/software/amazon/lambda/durable/otel/OtelPluginSupport.java
@@ -63,7 +63,7 @@ static void runInvocationEnd(Scope scope, Runnable end) {
/** Rejects an older core before a plugin builds a provider or activates thread-local context. */
static void requireSameThreadInvocationHooks() {
var message = "This OpenTelemetry plugin requires same-thread invocation hooks from the Durable Execution"
- + " core (2.2.2 lifecycle capability). Upgrade the core together with the plugin layer.";
+ + " core. Upgrade the core together with the plugin layer.";
try {
if (!DurableExecutor.supportsSameThreadInvocationHooks()) throw new IllegalStateException(message);
} catch (NoSuchMethodError missingCapability) {
diff --git a/pom.xml b/pom.xml
index d57477e76..4f5f64a63 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
software.amazon.lambda.durable
aws-durable-execution-sdk-java-parent
- 2.2.2-SNAPSHOT
+ 2.3.0
pom
AWS Lambda Durable Execution SDK
diff --git a/sdk-integration-tests/pom.xml b/sdk-integration-tests/pom.xml
index e44650c54..ec07cef68 100644
--- a/sdk-integration-tests/pom.xml
+++ b/sdk-integration-tests/pom.xml
@@ -7,7 +7,7 @@
software.amazon.lambda.durable
aws-durable-execution-sdk-java-parent
- 2.2.2-SNAPSHOT
+ 2.3.0
aws-durable-execution-sdk-java-integration-tests
diff --git a/sdk-testing/pom.xml b/sdk-testing/pom.xml
index 3d87ee01c..73e854fb8 100644
--- a/sdk-testing/pom.xml
+++ b/sdk-testing/pom.xml
@@ -7,7 +7,7 @@
software.amazon.lambda.durable
aws-durable-execution-sdk-java-parent
- 2.2.2-SNAPSHOT
+ 2.3.0
aws-durable-execution-sdk-java-testing
diff --git a/sdk/pom.xml b/sdk/pom.xml
index d7dac4c94..53f55e562 100644
--- a/sdk/pom.xml
+++ b/sdk/pom.xml
@@ -7,7 +7,7 @@
software.amazon.lambda.durable
aws-durable-execution-sdk-java-parent
- 2.2.2-SNAPSHOT
+ 2.3.0
aws-durable-execution-sdk-java
diff --git a/sdk/src/main/java/software/amazon/lambda/durable/DurableConfig.java b/sdk/src/main/java/software/amazon/lambda/durable/DurableConfig.java
index ee81fcd23..b9102bd13 100644
--- a/sdk/src/main/java/software/amazon/lambda/durable/DurableConfig.java
+++ b/sdk/src/main/java/software/amazon/lambda/durable/DurableConfig.java
@@ -498,8 +498,8 @@ public Builder withCheckpointEmptyMap(boolean checkpointEmptyMap) {
* their existing registration behavior.
*
*
Calling this method replaces any previously registered plugins. Hooks use registration order, except
- * invocation end, which uses reverse order under the 2.2.2 same-thread lifecycle contract. A fresh builder
- * combines this explicit list with environment-selected plugins. On a builder returned by
+ * invocation end, which uses reverse order under the same-thread lifecycle contract. A fresh builder combines
+ * this explicit list with environment-selected plugins. On a builder returned by
* {@link DurableConfig#toBuilder()}, this method replaces the complete resolved list and dynamic discovery
* remains disabled, including when the replacement list is empty.
*
diff --git a/sdk/src/main/java/software/amazon/lambda/durable/execution/DurableExecutor.java b/sdk/src/main/java/software/amazon/lambda/durable/execution/DurableExecutor.java
index 082fb50aa..24a8a8958 100644
--- a/sdk/src/main/java/software/amazon/lambda/durable/execution/DurableExecutor.java
+++ b/sdk/src/main/java/software/amazon/lambda/durable/execution/DurableExecutor.java
@@ -64,7 +64,7 @@ private DurableExecutor() {}
/**
* Returns whether this core runs invocation start/end hooks on the root handler thread and awaits handler cleanup
* and end-hook completion before returning. Plugins that retain thread-local scopes may require this capability
- * before construction. Introduced with the 2.2.2 lifecycle contract.
+ * before construction.
*/
public static boolean supportsSameThreadInvocationHooks() {
return true;