Skip to content

Changelog — page 7

New features, improvements, and fixes in the Fluxzero SDK.

GitHub

2.6.1 (2026-09-26)

Bug Fixes
  • test-server: release trackers without waiting for failed writes (#401) (GitHub)

    Release failed-session ownership without waiting on Jetty write callbacks. Refs #393; application qualification remains open.

  • test-server: release trackers without waiting for failed writes (GitHub)

    Jetty can report transport failure before completing outstanding frame callbacks. Abort the failed session and clean up its trackers directly to avoid a circular wait behind queued writes while preserving normal graceful shutdown.

    Refs #393. Application crash-recovery qualification remains open.

GitHub

2.6.0 (2026-09-26)

Rename awaitSendAndForgetFutures to awaitOutgoingWrites and rebuild applications and dependent libraries, including annotated handlers. There is no alias or fallback.

Code Refactoring
  • tracking: rename outgoing write completion option (GitHub)

    The consumer completion option is now named awaitOutgoingWrites throughout @Consumer, ConsumerConfiguration, its builder and its accessor. The new name reflects that the option covers all tracked outgoing writes. Its default remains true; completion behavior and delivery guarantees are unchanged.

    **2.x API migration:** replace awaitSendAndForgetFutures with awaitOutgoingWrites and rebuild applications and dependent libraries, including classes with @Consumer annotations. There is no alias or fallback. An old compiled annotation setting awaitSendAndForgetFutures = false does not configure the new member and would otherwise fall back to its default of true.

    The 1.x API and release line are unchanged.

GitHub

2.5.0 (2026-09-26)

This release changes the key-value API return types. Adapt callers and custom implementations, and rebuild dependent libraries and applications; see the delivery feature below.

Features
  • delivery: apply command defaults and await batch writes (GitHub)
    • Guarantee.DEFAULT now applies across outgoing SDK commands, including indexing, responses, WebSockets, scheduling, key-value writes and document maintenance. In 2.x its application-wide fallback is STORED, independent of fluxzero.defaults.version.
    • Set fluxzero.publishing.defaultGuarantee (FLUXZERO_PUBLISHING_DEFAULT_GUARANTEE) to NONE, SENT or STORED to override that default. The historical property name now covers all operations that use DEFAULT.
    • Outgoing asynchronous commands created during a tracked batch are awaited before its position is committed. Explicit guarantees remain effective; request/response reads and long polls are not treated as pending writes.
    • Public scheduling conveniences return without waiting for storage. Internal periodic-scheduling and data-protection operations retain the acknowledgement boundaries required for correctness, including safe cancellation and retry handling.

    This early 2.x release deliberately contains a source/binary-incompatible API change: KeyValueStore.store(...) and delete(...) return CompletableFuture<Void>, and storeIfAbsent(...) returns CompletableFuture<Boolean>. Adapt callers and custom implementations, compose or await the futures when completion is required, and rebuild dependent libraries and applications.

    Java/Kotlin guides, agent documentation, migration guidance and Javadocs have been updated together.

  • delivery: apply command defaults and await batch writes (GitHub)

    Resolve delivery defaults across outgoing SDK operations with STORED as the 2.x fallback. Make key-value writes and scheduling non-blocking while retaining explicit durability for internal dependencies and preserving nested side effects during owned completion.

Bug Fixes
  • scheduling: preserve internal acknowledgement boundaries (GitHub)

    Keep periodic initialization, rescheduling and cancellation dependent on their historical acknowledgements while public scheduling stays asynchronous. Own transport attempts through logical completion so handled failures do not poison batch completion.

  • activate lightweight documentation and patch policy [skip ci] (GitHub)

    Validate documentation without a full SDK release and keep public website refreshes active. Preserve full qualification for runtime and build inputs and queue pending releases.

Chores
  • delivery: integrate current main release baseline (GitHub)
GitHub

2.4.2 (2026-09-26)

Bug Fixes
  • test-server: release trackers registered during session closure (GitHub)

    Fence read and segment-claim registration with the endpoint session lifecycle so a concurrent close cannot leave departed clients owning segments. Preserve stored positions and release only trackers belonging to the closed transport session.

    Fixes #393

Documentation
  • agents: require explicit release authorization (GitHub)

    Default fixes and backports to local commits or pull requests. Require explicit authorization for merging and publication on each release line, and coordinate active-major and maintenance releases.

Chores
  • release: merge tracker handoff fix and release policy (GitHub)

    Integrate the tracker session-lifecycle fix and the explicit release authorization policy. Closed clients release late tracker registrations without resetting consumer positions; fixes and backports default to local commits or pull requests until publication is authorized.

    Fixes #393.

  • release: integrate main and release authorization policy (GitHub)
GitHub

2.4.1 (2026-09-26)

Bug Fixes
  • search: avoid inferring mixed results from the first collection (GitHub)

    Decouple the result type of class-first multi-collection searches from the first document class while preserving the binary method descriptor. Single-class and Graph searches retain their inferred types; homogeneous multi-collection callers can choose a common type explicitly.

GitHub

1.292.6 (2026-09-26)

Bug Fixes
  • test-server: backport failed-write tracker cleanup to 1.x (#402) (GitHub)

    Release failed-session ownership without waiting on Jetty write callbacks. Refs #393; application qualification remains open.

  • test-server: release trackers without waiting for failed writes (GitHub)

    Backport transport-failure cleanup to the maintenance line. Abort the failed session before tracker cleanup so Jetty's pending frame callbacks cannot delay handoff, preserving normal graceful shutdown.

    Refs #393. Application crash-recovery qualification remains open.

GitHub

Delivery defaults and batch completion

  • Extend Guarantee.DEFAULT resolution to responses, WebSocket operations, fire-and-forget indexing and bulk operations, retention, and scheduling client defaults/cancellation.
  • The general 1.x default is NONE, independent of fluxzero.defaults.version. The short-lived date-based publication opt-in is removed. Set fluxzero.publishing.defaultGuarantee (FLUXZERO_PUBLISHING_DEFAULT_GUARANTEE) explicitly to choose NONE, SENT or STORED for operations using DEFAULT.
  • Scheduling client defaults and cancellation preserve their previous SENT guarantee when the feature property is absent. An explicit NONE override remains effective.
  • Await outgoing asynchronous batch commands before committing a tracked position, while preserving failure/retry handling and internal periodic cancellation acknowledgements.
  • Existing 1.x key-value method signatures and blocking behavior, normal indexing guarantees, document maintenance defaults and blocking schedule creation remain unchanged. This patch does not introduce the 2.x key-value API migration.

Relevant Java/Kotlin documentation and Javadocs describe these contracts.

Full comparison: https://github.com/fluxzero-io/fluxzero-sdk-java/compare/1.292.4...1.292.5

GitHub

1.292.4 (2026-09-26)

Documentation
  • agents: merge explicit release authorization policy (GitHub)

    Default implementation and backport work to local commits or pull requests. Require explicit authorization for merging and publication on each release line, and coordinate active-major and maintenance releases.

  • agents: require explicit release authorization (GitHub)

    Default fixes and backports to local commits or pull requests. Require explicit authorization for merging and publication on each release line, and coordinate active-major and maintenance releases.

GitHub

1.292.3 (2026-09-26)

Bug Fixes
  • test-server: release trackers registered during session closure (GitHub)

    Backport the session-lifecycle fence for read and segment-claim registration. A concurrent close must not leave departed clients owning segments; stored positions and unrelated sessions remain unchanged.

    Backport of e739e90fb5f. Refs #393.

Continuous Integration
  • javadoc: serialize maintenance documentation publication (GitHub)

    Share the main publication lock so a maintenance update cannot be overwritten by a stale parent-directory publication.

GitHub

2.4.0 (2026-09-25)

Continuous Integration
  • javadoc: preserve maintenance documentation during main publication (GitHub)

    Retain the published maintenance tree when replacing the main site and serialize documentation publication across release branches.

GitHub

2.3.0 (2026-09-25)

Features
  • publishing: add versioned application delivery defaults (GitHub)

    Resolve Guarantee.DEFAULT to an application-local concrete guarantee before transport, with opt-in durable publication and an explicit rollback property. Keep convenience publication non-blocking and await worker publications at the consumer completion boundary.

    Preserve explicit guarantees, independent tracker progress and streaming continuation. Prevent a delivery failure from authorizing a partial consumer-position commit.

Bug Fixes
  • publishing: bind lazy gateway defaults to their application (GitHub)

    Capture the resolved delivery guarantee once per build so a later custom-topic gateway cannot inherit properties from a reused builder.

GitHub

2.2.0 (2026-09-25)

Documentation
  • modeling: link to the published Fluxzero 2 chapter (GitHub)
  • release: require qualified maintenance backports [skip ci] (GitHub)

    Make applicable 1.x backports and maintenance patch publication part of main bug-fix completion. Keep the lifecycle integration assertion synchronized with startup publication.

  • release: require qualified backports for supported 1.x fixes (GitHub)
Tests
  • lifecycle: await startup publication before shutdown (GitHub)

    The local dispatch monitor observes STARTED before its publication completes. Join the owning publisher before closing the instance so the lifecycle-pair assertion does not race the intentional pending-startup shutdown behavior.

GitHub

2.1.3 (2026-09-25)

Bug Fixes
  • serialization: replace Unsafe-backed MessagePack buffers (GitHub)

    Use bounded array readers and chunked writers for the existing storage and transport schemas. Preserve wire encodings and payload ownership while removing MessagePack from production dependencies.

    Applications that directly use org.msgpack classes must now declare org.msgpack:msgpack-core explicitly. Existing Fluxzero wire and storage formats require no migration.

Build System
  • unblock Lombok 1.18.48 on Java 25 and 26 (GitHub)

    Qualify Builder annotations whose generated type has the same simple name, preserving the existing builder API. Correct the associated Javadoc reference without relying on an annotation import.

Tests
  • serialization: qualify safe codecs against frozen legacy readers (GitHub)

    Preserve independent pre-replacement codecs and adapt relevant upstream MessagePack cases so shared round-trip mistakes cannot hide storage or wire incompatibilities.

Changes
  • Merge pull request #385 from fluxzero-io/fix/safe-codecs-release (GitHub)

    fix(serialization): remove Unsafe-backed MessagePack buffers and update Lombok

GitHub

2.1.2 (2026-09-25)

Bug Fixes
  • tracking: retain deadlines that fire during wait registration (GitHub)

    Recheck an elapsed deadline after publishing its waiting request so an early scheduler callback cannot leave a read or segment claim pending. Match request identity before removing a waiter to protect replacements from delayed callbacks.

  • tracking: release incomplete payloads before joining consumers (GitHub)

    Fail abandoned chunk streams before waiting for tracker termination. Preserve complete bodies and the ordinary async-result grace period, let concurrent external closers await cleanup, and avoid joining an active shutdown from internal failure callbacks.

  • serialization: retain type indexes across incremental javac builds (GitHub)

    Compiler file objects may report a zero timestamp for existing resources. Read prior indexes and class outputs directly so incremental compilation retains existing types while still pruning deleted classes.

  • testing: restore fast isolated IntelliJ test runs (GitHub)

    Avoid response grace periods during automatic fixture cleanup while preserving explicit shutdown behavior and complete resource closure. Run SDK modules concurrently in isolated IDE processes and make lifecycle probes, proxy body-limit checks, and migration tests independent of runner timing.

Performance Improvements
  • configuration: cache bounded environment variable name conversions (GitHub)

    Reuse immutable normalized names while resolving property values afresh on every lookup. Bound retained keys and preserve source precedence, Unicode conversion and application isolation.

  • testing: bound workers and remove timing-dependent waits (GitHub)

    Control JWT time and cache retention in contract tests. Reduce JIT startup work for short IntelliJ module runs while preserving full tiered compilation in Maven, and keep CI forks within a small runner budget.

Build System
  • java: require a patched JDK for reliable timers (GitHub)

    Pin the development toolchain with mise and reject early Java 25 builds that contain JDK-8370887. Keep the bytecode target at Java 25 and resolve current Temurin patches in CI.

  • testing: refresh shared IntelliJ configuration paths (GitHub)

    Re-register the module configurations after stale worktree copies have shadowed them. Document exclusion of nested checkouts so project reopening keeps the active checkout options.

Tests
  • sdk: run the complete suite in one IntelliJ session (GitHub)

    Isolate test service providers and generated resources so all modules can share one classpath. Preserve test contracts while reducing repeated compiler setup and RSA key generation, and keep a full-JIT run available.

Changes
  • Merge pull request #384 from fluxzero-io/fix/sdk-test-performance (GitHub)

    fix(testing): restore reliable javac builds and one fast IntelliJ run

GitHub

2.1.1 (2026-09-25)

Bug Fixes
  • release: compare stable notes against stable tags [skip ci] (GitHub)

    Git version sorting placed release candidates above their final release and repeated changes already shipped in GA. Select an earlier reachable stable baseline and use the same selection for first publication and reruns.

  • release: restore commit-based stable versions [skip ci] (GitHub)

    Derive patch and minor releases from commits since the latest reachable stable tag. Retain explicit major transitions, prerelease restrictions, immutable reruns and the historical fallback for unclassified changes.

Documentation
  • sdk: refresh developer and agent guides for Fluxzero 2 (GitHub)

    Separate the builder journey from developer reference material and teach the current Model and Graph programming model through a task-first tutorial with Java, Kotlin, and JSON examples.

    Explain temporal graphs in depth, keep migration guidance in the Fluxzero 2 chapter, and connect local development, monitoring, example apps, and publishing with illustrated cloud-focused guides.

GitHub

2.1.0 (2026-09-25)

Features
  • modeling: read negotiated packed membership substeps (GitHub)

    Add logical v8 decoding alongside the unchanged v7 metadata contract. Advertise decoder support automatically through the WebSocket handshake, while retaining older Runtime responses.

Bug Fixes
  • modeling: replay ancestors created in earlier commit substeps (GitHub)

    A first commit retains readStateIndex -1 even after earlier substeps create parent relationships. Resolve later ancestor reads at their existing commit boundary while retaining rejection of an invalid initial-substep read.

Documentation
  • readme: keep the SDK introduction timeless [skip ci] (GitHub)

    Restore the concise product-oriented README and document its scope in AGENTS.md. No code or published artifacts change.

  • readme: restore the concise SDK introduction (GitHub)

    Keep the README focused on getting started and link to the detailed upgrade guidance instead of repeating Model contracts and transport configuration.

Dependency updates
  • bump com.fasterxml.jackson:jackson-bom from 2.22.2 to 2.22.3 (GitHub)

    com.fasterxml.jackson:jackson-bom: 2.22.2 -> 2.22.3

Code Refactoring
  • websocket: negotiate model membership versions automatically (GitHub)

    Decoder capabilities belong to the protocol handshake. Remove the unreleased application property and defaults-version gate while retaining compatible responses for older peers.

Tests
  • modeling: preserve substeps in mixed membership responses (GitHub)

    Pin the existing v7 layout and full-membership replay contract so Runtime fallback remains compatible with current readers. Clarify ordered cold replay in the Java and Kotlin guidance.

Chores
  • worktrees: keep changes in ignored local worktrees (GitHub)
GitHub

1.292.2 (2026-09-25)

Features
  • publishing: backport application delivery defaults to 1.x (GitHub)

    Resolve DEFAULT using the owning application profile and retain compatibility delivery without opt-in. Batch completion includes ordinary asynchronous handler publications and rejects partial progress after delivery failure while preserving streaming continuation.

Tests
  • testing: isolate global observation recorder settings (GitHub)

    Prevent parallel fixtures from writing into the temporary observation directory while it is being removed. Keep the same isolation already used on main.

GitHub

1.292.1 (2026-09-25)

Bug Fixes
  • release: publish isolated 1.x maintenance fixes (GitHub)

    Backport cache snapshot safety and late proxy retry cancellation, and isolate maintenance publication from active-major channels.

  • proxy: cancel late retries during forced stop (GitHub)

    A forced requeue can finish before an in-flight request exposes its retry delay. Remember the cancellation request across that handoff so the delayed operation cannot survive shutdown or start another attempt.

  • release: isolate 1.x maintenance publication (GitHub)

    Validate reserved tags against the maintenance version policy and keep 1.x artifacts out of the active major latest, Javadoc and website channels. Make patch publication part of the maintenance workflow and document its verification boundary.

  • caching: snapshot LRU keys safely before bulk modification (GitHub)

    Concurrent access can change LRU iteration during bulk cache invalidation. Copy keys under the map monitor, then release it before entering per-key computations and application callbacks.

Documentation
  • release: require applicable main fixes on 1.x (GitHub)
Dependency updates
  • bump io.fluxzero.tools:fluxzero-maven-plugin from 1.18.9 to 1.19.0 (GitHub)

    io.fluxzero.tools:fluxzero-maven-plugin: 1.18.9 -> 1.19.0 changelog

Tests
  • lifecycle: await startup publication before shutdown (GitHub)

    The local dispatch monitor observes STARTED before its publication completes. Join the owning publisher before closing the instance so the lifecycle-pair assertion does not race the intentional pending-startup shutdown behavior.

GitHub

2.0.0 (2026-09-24)

Fluxzero 2.0 removes a fundamental constraint that has shaped every Fluxzero application until now. Aggregates tied four concerns to one tree: what belongs together, what changes together, what is stored together and what is loaded together. Small operations could require large roots, while rules crossing those roots lost atomic consistency. Once history accumulated, changing that structure became difficult.

Fluxzero 2.0 separates these concerns by shifting the consistency boundary from the Aggregate being changed to the change itself. Related Models can keep their own identity, history and storage, while an operation changes them together atomically. Commands, applies, assertions and tests remain familiar.

See the 2.0 overview for the motivation and headline features, or the deep dive for examples and contracts.

Features
  • modeling: introduce independent Models (GitHub)

    Introduce independent @​Model state with its own identity, history, persistence and lifecycle.

  • modeling: connect Models through durable parent relationships (GitHub)

    Connect Models through @​Parent, including recursive hierarchies and polymorphic parents.

  • modeling: navigate Graphs lazily and inject related Models (GitHub)

    Navigate related Models lazily through typed Graphs and inject Models, ancestors and Graph collections into handlers.

  • modeling: handle Model commands automatically (GitHub)

    Handle commands automatically through Model @​Apply methods, with consumer routing and explicit handling controls.

  • modeling: compose payload and Model behavior (GitHub)

    Compose payload and Model handlers with @​InterceptApply, @​AssertLegal and @​Apply.

  • modeling: validate and commit multi-Model operations atomically (GitHub)

    Validate and commit changes across independent Models atomically, including read dependencies and configurable conflict handling.

  • modeling: apply commands directly through the Model pipeline (GitHub)

    Apply commands directly with assertAndApply and explicitly flush staged Model changes.

  • modeling: commit Graphs and Model collections with revision checks (GitHub)

    Commit Graphs and Model collections directly with revision checks.

  • modeling: reconstruct historical Graphs and their before-state (GitHub)

    Load historical Graphs, inspect exact before-state with previous(), and explicitly request current views.

  • modeling: handle changes to a complete Graph (GitHub)

    Handle published changes to a complete Graph through one event handler.

  • modeling: configure persistence independently of search (GitHub)

    Choose event sourcing, document persistence or both independently from public document search.

  • modeling: provide stable Model names and flexible identifiers (GitHub)

    Keep logical Model names independent of Java packages and resolve Models through aliases and functional IDs.

  • modeling: maintain composed Graph documents automatically (GitHub)

    Compose current Graph views and maintain materialized Graph documents without a hand-written projection.

  • search: query Models by relationships and related content (GitHub)

    Search Models through relation identities and related content, and return typed live or materialized Graphs.

  • tracking: consume materialized Graph documents (GitHub)

    Consume materialized Graph documents with @​HandleDocument.

  • web: compose and filter Graph responses (GitHub)

    Return composed Graph responses with derived fields and content filtering, including Graph-backed JSON request contracts.

  • web: describe composed Graph responses in OpenAPI (GitHub)

    Describe Model Graph responses and selected paths in OpenAPI, with composable API documentation.

  • serialization: evolve schemas independently within stored Graphs (GitHub)

    Preserve per-node schema revisions and migrate materialized Graph documents.

  • scheduling: bind scheduled work to Model lifetimes (GitHub)

    Bind scheduled work to Model parent lifetimes.

  • modeling: cascade deletion through owned relationships (GitHub)

    Cascade logical deletion through owned relationships and expose deletion tombstones.

  • modeling: plan and execute physical Model erasure (GitHub)

    Preview physical erasure with a deletion plan and erase selected Models and their retained data.

  • modeling: migrate existing Aggregates into Models (GitHub)

    Migrate Aggregate data into Models using staged document adoption or published-event replay, with explicit cutover.

  • testing: test Model migrations and owned schedules (GitHub)

    Exercise Model migrations and owned schedules with TestFixture.

  • serialization: negotiate document encodings and retain LZ4 reads (GitHub)

    Use ZSTD for document serialization and negotiate readable encodings with Runtime while retaining safe LZ4 reads.

Performance Improvements
  • modeling: batch Model commits with a compact protocol (GitHub)

    Batch independent Model commits and use a compact commit protocol to reduce transport overhead.

  • modeling: specialize compiled applies and single-Model commits (GitHub)

    Execute compiled direct applies and specialize single-Model commits.

  • modeling: prefetch bounded pages during reconstruction (GitHub)

    Prefetch bounded event pages during Model reconstruction.

Breaking Changes
  • java: require Java 25; use JDK 25.0.3 or newer.
  • authentication: require custom User implementations to provide id() explicitly.
  • platform: require a compatible 2.x Runtime for Model/Graph operations and document encoding negotiation.

Existing Aggregate applications remain supported. Upgrading the SDK and migrating stored Aggregates are separate steps; see the upgrade guide and Aggregate migration.

GitHub

Highlights

  • Add Graph.compareAndSet(replacement) for a single revision-checked replacement or deletion.
  • Add Graph.updateAndGet and Graph.getAndUpdate with a Graph transformation and bounded maxRetries (default 0). Each attempt reads fresh committed state and validates consumed Model values and relationships. Results are returned only after durable commit.
  • Report unavailable pinned DOCUMENT state during mutation preparation as the public ModelCommitConflictException, without leaking an internal Graph-boundary exception or silently reexecuting the stale mutation.
  • Add Java/Kotlin examples for atomic updates, consume-once and external-effect recovery, with deterministic concurrency coverage.

API boundaries

Atomic Graph helpers operate on one existing independent Model outside another Model mutation. They directly replace state; domain payload handlers and their assertions are not automatically invoked. Validate required invariants inside the transformation, return immutable values, and keep external effects outside it.

compareAndSet retains the receiver's expected revision and never retries. Function variants retry only definitively rejected storage commits, within the explicit budget. Application failures, unavailable pinned document history and uncertain transport outcomes are not automatically repeated. An absent Model is never implicitly created.

This is a release candidate, not a GA release. The broader final capacity and downstream qualification remains separate.

All changes since rc.19


© 2026 Fluxzero