You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+23-21Lines changed: 23 additions & 21 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,10 @@
1
1
# Changelog
2
2
3
-
All notable, user-visible changes to runtime behavior and public APIs
4
-
are documented in this file.
3
+
All notable, user-visible changes to runtime behavior and public APIs are documented in this file.
5
4
6
-
Until version `1.0.0`, all releases are **pre-stable** and may introduce
7
-
breaking changes. Any such changes will be explicitly documented.
5
+
This changelog documents only **user-visible changes** to runtime behavior, public APIs, and operational guarantees; internal refactors and implementation details are omitted unless they affect those guarantees.
6
+
7
+
Until version `1.0.0`, all releases are **pre-stable** and may introduce breaking changes. Any such changes will be explicitly documented.
8
8
9
9
---
10
10
@@ -24,14 +24,24 @@ breaking changes. Any such changes will be explicitly documented.
24
24
25
25
## Publication note
26
26
27
-
Some early 0.1.x versions were affected by cancelled or incomplete Maven Central publication attempts.
28
-
Because Maven Central does not allow reuse of version numbers once a deployment is cancelled or rejected,
27
+
Some early 0.1.x versions were affected by cancelled or incomplete Maven Central publication attempts. Because Maven Central does not allow reuse of version numbers once a deployment is cancelled or rejected,
29
28
those versions should be considered **non-canonical**.
30
29
31
30
The first fully published and supported release series begins with 0.1.7.
32
31
33
32
---
34
33
34
+
## [0.2.3] - 2026-01-05
35
+
### Documentation
36
+
- Rewrote README.md to align strictly with DESIGN.md semantics.
37
+
- Clarified the core invariant: in-flight means admitted until terminal.
38
+
- Explicitly documented fail-fast, unordered admission and terminal-based capacity release.
39
+
- Added a concise comparison section explaining differences from framework-based and reactive bulkheads.
40
+
- Tightened wording around cancellation, rejection, and capacity lifetime.
41
+
- No runtime, API, or behavioral changes.
42
+
43
+
---
44
+
35
45
## [0.2.2] - 2026-01-05
36
46
37
47
### Fixed
@@ -54,12 +64,9 @@ The first fully published and supported release series begins with 0.1.7.
54
64
55
65
### Changed
56
66
- Defined **cancellation** of the returned `CompletionStage` as a **terminal outcome** that releases capacity.
57
-
- Defined **permit lifetime** strictly from successful admission until the returned `CompletionStage` reaches a
58
-
terminal state (success, exceptional completion, or cancellation).
59
-
- Guaranteed **exactly-once permit release** across all races between completion, exceptional completion, and
60
-
cancellation.
61
-
- Tightened admission semantics: capacity is acquired **only at the moment of submission**; there is no deferred,
62
-
waiting, or speculative admission.
67
+
- Defined **permit lifetime** strictly from successful admission until the returned `CompletionStage` reaches a terminal state (success, exceptional completion, or cancellation).
68
+
- Guaranteed **exactly-once permit release** across all races between completion, exceptional completion, and cancellation.
69
+
- Tightened admission semantics: capacity is acquired **only at the moment of submission**; there is no deferred, waiting, or speculative admission.
63
70
64
71
### Clarified
65
72
- Formalized the core invariant: *in-flight means admitted until terminal*.
@@ -68,8 +75,7 @@ The first fully published and supported release series begins with 0.1.7.
68
75
- Clarified that `BulkheadRejectedException` indicates **capacity exhausted and no work started**.
69
76
70
77
### Documentation
71
-
- Significantly expanded and refined **DESIGN.md** to explicitly define semantics, invariants, races, cancellation
72
-
behavior, and non-goals.
78
+
- Significantly expanded and refined **DESIGN.md** to explicitly define semantics, invariants, races, cancellation behavior, and non-goals.
73
79
- Pruned and refocused **README.md** to serve as a high-level entry point aligned with v0.2 semantics.
74
80
- Added explicit **production guidance and failure modes** documentation.
75
81
@@ -105,10 +111,8 @@ The first fully published and supported release series begins with 0.1.7.
105
111
-**Yanked / not published** (Maven Central deploy was cancelled; version cannot be reused).
106
112
107
113
### Fixed
108
-
- Release workflow: corrected `GPG_PRIVATE_KEY` environment scoping so the key imports correctly in CI and signatures
109
-
(`.asc`) are produced.
110
-
- Release signing: ensured `.asc` signature artifacts are generated as part of the release build (via the `release`
111
-
profile).
114
+
- Release workflow: corrected `GPG_PRIVATE_KEY` environment scoping so the key imports correctly in CI and signatures (`.asc`) are produced.
115
+
- Release signing: ensured `.asc` signature artifacts are generated as part of the release build (via the `release` profile).
112
116
113
117
### Build
114
118
- Minor CI/release reliability improvements around non-interactive GPG usage.
@@ -132,9 +136,7 @@ The first fully published and supported release series begins with 0.1.7.
132
136
## [0.1.3] – 2025-12-30
133
137
134
138
### Fixed
135
-
- Corrected Maven Central publishing configuration (release deployment no longer depends on
136
-
`distributionManagement`;
137
-
no API or semantic changes).
139
+
- Corrected Maven Central publishing configuration (release deployment no longer depends on `distributionManagement`; no API or semantic changes).
138
140
139
141
### Build
140
142
- Added a tag-gated release workflow suitable for CI publishing.
This repository provides a small, opinionated **async bulkhead** for Java with
6
-
explicit, test-backed semantics around overload behavior.
5
+
This repository provides a small, opinionated **async bulkhead** for Java with explicit, test-backed semantics around overload behavior.
7
6
8
7
The goal is to make overload **bounded, visible, and predictable**.
9
8
10
9
---
11
10
12
11
## Why another bulkhead?
13
12
14
-
Most Java bulkhead implementations are part of **larger resilience frameworks** and make
15
-
reasonable tradeoffs at that scale, but undesirable ones when you want a **single,
16
-
well-defined primitive**.
13
+
Most Java bulkhead implementations are part of **larger resilience frameworks** and make reasonable tradeoffs at that scale, but undesirable ones when you want a **single, well-defined primitive**.
17
14
18
15
This project exists because many existing bulkheads:
19
16
- mix **admission control** with execution concerns (thread pools, schedulers)
20
17
- introduce **queues**, **timeouts**, or **retries** that hide overload instead of surfacing it
21
18
- provide unclear semantics around when capacity is consumed and released
22
19
- couple behavior to specific frameworks or reactive abstractions
23
20
24
-
This bulkhead is intentionally different.
25
-
26
21
It focuses on **one thing only**:
27
22
- bounding the number of **in-flight async operations**
28
23
-**failing fast** when saturated
29
24
- never starting work it cannot admit
30
25
- making rejection an **explicit, composable signal**
31
26
32
27
There is no queue.
33
-
There is no waiting.
34
28
There is no internal execution model.
35
29
36
30
---
@@ -39,7 +33,7 @@ There is no internal execution model.
39
33
40
34
- Admission is **fail-fast** and **non-blocking**
41
35
- Admission is **unordered** (no FIFO, no fairness guarantees)
42
-
-A operation is considered *in-flight* from successful admission until its
36
+
-An operation is considered *in-flight* from successful admission until its
43
37
returned `CompletionStage` reaches a **terminal state**
44
38
(success, failure, or cancellation)
45
39
- Capacity is released **only** at terminal completion
@@ -68,6 +62,146 @@ Out of scope for v0.x:
68
62
69
63
---
70
64
65
+
## Comparison with other bulkheads
66
+
67
+
This bulkhead is intentionally **narrower and more explicit** than most existing Java bulkhead implementations.
68
+
69
+
Its behavior follows a single design invariant defined in **DESIGN.md**:
0 commit comments