diff --git a/CHANGELOG.md b/CHANGELOG.md
index aeed56c..95b3879 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,39 @@
All notable changes to this project are documented in this file.
+## 1.1.0 - 2026-08-30
+
+Adds opt-in virtual-cost refunds for queued cancellation while preserving the
+original charged-cost behavior as the default.
+
+### Added
+
+- `CancellationAccounting.REFUND_CANCELLED_COST` for callers that need a
+ cancelled queued job's virtual cost returned to later queued work of the
+ same flow;
+- reference, differential, numeric-boundary, lifecycle, deterministic
+ concurrency, and jcstress coverage for refundable cancellation;
+- policy-aware JMH workloads for cancellation latency, cancel-and-replace
+ cycles, terminal idle reset, and first-busy-period cycles.
+
+### Changed
+
+- refund-mode admission now reserves exact-rational capacity for every future
+ queued cancellation and rejects an unsafe enqueue atomically with
+ `NUMERIC_LIMIT`;
+- refund-mode queued cancellation recomputes only the later queued suffix of
+ the same flow and never revises an earlier dispatch decision;
+- benchmark fixture verification covers both cancellation policies.
+
+### Compatibility
+
+- `CHARGE_RESERVED_COST` remains the default and retains its previous
+ admission and cancellation behavior;
+- existing public signatures are unchanged; the public enum gains one
+ constant, so exhaustive client switches without a default may need updating;
+- completed-work fairness guarantees remain intentionally unspecified for
+ traces containing cancellation under either policy.
+
## 1.0.0 - 2026-08-23
Initial public release of the generic, thread-safe SFQ(D) scheduler.
diff --git a/README.md b/README.md
index f20c743..97cd3cb 100644
--- a/README.md
+++ b/README.md
@@ -10,8 +10,8 @@ weights.
## Status
-Version 1.0.0 is the first stable release. The library is published to Maven
-Central as `io.github.pzhin:sfqd-core:1.0.0` and uses the Java package
+Version 1.1.0 is the current stable release. The library is published to Maven
+Central as `io.github.pzhin:sfqd-core:1.1.0` and uses the Java package
`io.github.pzhin.sfqd`.
The benchmark harness is an executable measurement protocol, not a benchmark
@@ -57,7 +57,7 @@ Then add it to a local consumer:
io.github.pzhin
sfqd-core
- 1.0.0
+ 1.1.0
```
diff --git a/docs/TOOLING.md b/docs/TOOLING.md
index a6bdcd0..6a68f8d 100644
--- a/docs/TOOLING.md
+++ b/docs/TOOLING.md
@@ -96,7 +96,7 @@ are not test failures; forbidden test outcomes are.
java -jar sfqd-benchmarks/target/sfqd-benchmarks.jar -l
```
-Verification compiles the generated JMH metadata, runs a bounded 60-case
+Verification compiles the generated JMH metadata, runs a bounded 90-case
idle-reset fixture smoke, and exercises three representative performance-scale
fixtures. The largest smoke fixture is `B=10_000`, `Q=100_000`, and
`depth=1_024`; completing one invariant-checked cycle proves wiring and state
@@ -153,7 +153,7 @@ Before running the profile, the release engineer must have:
- an unlocked GnuPG agent, or `MAVEN_GPG_PASSPHRASE` supplied through a secure
environment mechanism.
-Publish the immutable 1.0.0 coordinates from the commit tagged `v1.0.0`:
+Publish the immutable 1.1.0 coordinates from the commit tagged `v1.1.0`:
```shell
./mvnw --batch-mode --no-transfer-progress -Prelease clean deploy
diff --git a/pom.xml b/pom.xml
index ace4f7e..22b2cbe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
4.0.0
io.github.pzhin
sfqd-java-parent
- 1.0.0
+ 1.1.0
pom
SFQ(D) Java Parent
Build parent for the SFQ(D) Java library.
@@ -35,7 +35,7 @@
scm:git:https://github.com/pzhin/sfqd-java.git
scm:git:ssh://git@github.com/pzhin/sfqd-java.git
https://github.com/pzhin/sfqd-java
- v1.0.0
+ v1.1.0
@@ -289,7 +289,7 @@
true
published
- sfqd-java 1.0.0
+ sfqd-java 1.1.0
diff --git a/sfqd-benchmarks/pom.xml b/sfqd-benchmarks/pom.xml
index 5791655..36a783b 100644
--- a/sfqd-benchmarks/pom.xml
+++ b/sfqd-benchmarks/pom.xml
@@ -6,7 +6,7 @@
io.github.pzhin
sfqd-java-parent
- 1.0.0
+ 1.1.0
sfqd-benchmarks
SFQ(D) JMH Harness
diff --git a/sfqd-core/pom.xml b/sfqd-core/pom.xml
index 858ee45..a112a27 100644
--- a/sfqd-core/pom.xml
+++ b/sfqd-core/pom.xml
@@ -6,7 +6,7 @@
io.github.pzhin
sfqd-java-parent
- 1.0.0
+ 1.1.0
sfqd-core
SFQ(D) Core
diff --git a/sfqd-coverage/pom.xml b/sfqd-coverage/pom.xml
index 65a2c42..a2d09ff 100644
--- a/sfqd-coverage/pom.xml
+++ b/sfqd-coverage/pom.xml
@@ -6,7 +6,7 @@
io.github.pzhin
sfqd-java-parent
- 1.0.0
+ 1.1.0
sfqd-coverage
pom
diff --git a/sfqd-examples/pom.xml b/sfqd-examples/pom.xml
index 7f0f987..8d03342 100644
--- a/sfqd-examples/pom.xml
+++ b/sfqd-examples/pom.xml
@@ -6,7 +6,7 @@
io.github.pzhin
sfqd-java-parent
- 1.0.0
+ 1.1.0
sfqd-examples
SFQ(D) Examples
diff --git a/sfqd-jcstress/pom.xml b/sfqd-jcstress/pom.xml
index 39bed25..48c2b50 100644
--- a/sfqd-jcstress/pom.xml
+++ b/sfqd-jcstress/pom.xml
@@ -6,7 +6,7 @@
io.github.pzhin
sfqd-java-parent
- 1.0.0
+ 1.1.0
sfqd-jcstress
SFQ(D) jcstress Harness
diff --git a/tools/verify-publication-topology.sh b/tools/verify-publication-topology.sh
index cdfa54b..e761a5b 100755
--- a/tools/verify-publication-topology.sh
+++ b/tools/verify-publication-topology.sh
@@ -100,8 +100,8 @@ PY
)
readonly GROUP_DIRECTORY="${DEPLOY_REPOSITORY}/io/github/pzhin"
-readonly PARENT_DIRECTORY="${GROUP_DIRECTORY}/sfqd-java-parent/1.0.0"
-readonly CORE_DIRECTORY="${GROUP_DIRECTORY}/sfqd-core/1.0.0"
+readonly PARENT_DIRECTORY="${GROUP_DIRECTORY}/sfqd-java-parent/1.1.0"
+readonly CORE_DIRECTORY="${GROUP_DIRECTORY}/sfqd-core/1.1.0"
shopt -s nullglob
parent_poms=("${PARENT_DIRECTORY}"/*.pom)
@@ -143,7 +143,7 @@ import sys
import xml.etree.ElementTree as ET
namespace = {"m": "http://maven.apache.org/POM/4.0.0"}
-expected_parent = ("io.github.pzhin", "sfqd-java-parent", "1.0.0")
+expected_parent = ("io.github.pzhin", "sfqd-java-parent", "1.1.0")
parent = ET.parse(sys.argv[1]).getroot()
parent_coordinates = tuple(
@@ -209,7 +209,7 @@ expected_scm = (
"scm:git:https://github.com/pzhin/sfqd-java.git",
"scm:git:ssh://git@github.com/pzhin/sfqd-java.git",
"https://github.com/pzhin/sfqd-java",
- "v1.0.0",
+ "v1.1.0",
)
if scm_metadata != expected_scm:
raise SystemExit(
@@ -235,7 +235,7 @@ effective_core_coordinates = tuple(
effective_core.findtext(f"m:{name}", namespaces=namespace)
for name in ("groupId", "artifactId", "version")
)
-expected_core = ("io.github.pzhin", "sfqd-core", "1.0.0")
+expected_core = ("io.github.pzhin", "sfqd-core", "1.1.0")
if effective_core_coordinates != expected_core:
raise SystemExit(
"ERROR: effective core coordinates are "
@@ -313,7 +313,7 @@ cat >"${CONSUMER_ROOT}/pom.xml" <
io.github.pzhin
sfqd-core
- 1.0.0
+ 1.1.0
@@ -343,8 +343,8 @@ LC_ALL=C LANG=C TZ=UTC "${REPOSITORY_ROOT}/mvnw" \
-Dmaven.repo.local="${CONSUMER_LOCAL_REPOSITORY}" \
-f "${CONSUMER_ROOT}/pom.xml" clean compile
-readonly RESOLVED_PARENT="${CONSUMER_LOCAL_REPOSITORY}/io/github/pzhin/sfqd-java-parent/1.0.0"
-readonly RESOLVED_CORE="${CONSUMER_LOCAL_REPOSITORY}/io/github/pzhin/sfqd-core/1.0.0"
+readonly RESOLVED_PARENT="${CONSUMER_LOCAL_REPOSITORY}/io/github/pzhin/sfqd-java-parent/1.1.0"
+readonly RESOLVED_CORE="${CONSUMER_LOCAL_REPOSITORY}/io/github/pzhin/sfqd-core/1.1.0"
if [[ ! -f "${RESOLVED_PARENT}/_remote.repositories" ]]; then
fail "fresh consumer did not resolve the published parent"
fi