Skip to content

Changelog — page 10

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

GitHub

1.264.0 (2026-09-09)

Features
  • serialization: resolve registered wire type names (GitHub)

    Accept unique registered simple and partial type identifiers across message envelopes, nested JSON and fixtures while preserving alias and upcaster ordering and direct FQN resolution. Document shared ApplicationProperties resources and leave custom uber-JAR resource merging to applications.

GitHub

2.0.0-RC7 (2026-09-08)

Features
  • serialization: support untyped JSON sequences (GitHub)

    Load root arrays and newline-delimited resources element by element so fixture setup can preserve order, per-record type resolution, revision metadata, and user context.

Bug Fixes
  • 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.

  • modeling: serialize overlapping accept commits (GitHub)

    Order process-local ACCEPT commits by their complete model scope so separately batched stale writes cannot overtake. Preserve batching progress, cache publication, retry, cancellation, and shutdown boundaries while keeping independent scopes parallel.

  • modeling: release required batch predecessors safely (GitHub)

    Unblock synchronous and explicit Model commits whose producers still depend on the current message-batch boundary. Preserve durable completion and independent deferral while planning only the required dependency closure and completing releases outside batch bookkeeping locks.

  • concurrency: expose backlog consumer drain completion (GitHub)

    Allow resource owners to defer teardown until all admitted batches have finished consuming. Preserve the bounded synchronous shutdown wait and keep producer continuations outside the drain boundary.

  • modeling: retain identities for ordinary commit responses (GitHub)

    Keep request identities alongside compact runtime responses so negotiated JSON and CBOR transports can materialize complete results. The compact binary representation stays unchanged.

  • modeling: preserve cache values when tracking is unsupported (GitHub)

    Retire tracking proofs and release pending readers without invalidating the ordinary cache. Older runtimes can still validate and reuse those values as reconstruction bases.

  • modeling: bind cached values to publication generations (GitHub)

    Fence foreground and background cache publication against concurrent writes, invalidation, and repository retirement. Keep configured cache values intact and release refresh readers when publication loses its generation.

  • modeling: fence refresh publication and preserve replay context (GitHub)

    Retire invalidated cache entries and release waiting readers before destructive invalidation. Stage refresh writes so delayed reads cannot publish a stale value or proof after deletion or a newer commit.

    Restore cache health after validated update pages and keep historical replay fallback sequential while preserving application context across parallel replay.

  • publishing: preserve context and isolate response recovery (GitHub)

    Keep application context across parallel serialization and release independent responses even when caller callbacks or retry handlers block. Own recovery work and complete it when the gateway closes.

  • web: align OpenAPI object constraints (GitHub)

    Expose closed unions and explicit unknown-property policies in generated schemas, while mapping size validation to the matching schema shape.

  • proxy: preserve scheduled request correlation (GitHub)

    Capture each forward request's correlation metadata while the tracker context is active. Reuse that snapshot for delayed execution and response publication so completion threads cannot drop or substitute tracker identity.

  • websocket: separate task and client identity (GitHub)

    Treat platform task IDs as correlation context and only as a prefix for generated per-process client IDs. This prevents request-cache collisions after an in-pod process restart while preserving explicit client IDs and task-level observability.

Performance Improvements
  • persisting: preserve single-model cache reads (GitHub)
  • persisting: batch cache read admission (GitHub)
  • publishing: map successful gateway responses directly (GitHub)
  • publishing: reuse terminal response callbacks (GitHub)
  • context: reuse restored thread-local snapshots (GitHub)
  • serialization: size scratch buffers for small documents (GitHub)

    Avoid allocating a full string scratch buffer for each small decoded document. Preserve the existing decoder for larger inputs and retain the stored format, error handling, and per-call resource ownership.

Dependency updates
  • bump org.apache.maven.plugins:maven-surefire-plugin (GitHub)

    org.apache.maven.plugins:maven-surefire-plugin: 3.5.6 -> 3.6.0 changelog

  • bump io.fluxzero.tools:fluxzero-maven-plugin from 1.17.0 to 1.17.3 (GitHub)

    io.fluxzero.tools:fluxzero-maven-plugin: 1.17.0 -> 1.17.3 changelog

  • bump org.apache.maven.plugins:maven-compiler-plugin (GitHub)

    org.apache.maven.plugins:maven-compiler-plugin: 3.15.0 -> 3.16.0 changelog

Tests
  • modeling: isolate graph cache reuse from eviction timing (GitHub)

    Use a deterministic model cache and establish tracker readiness before asserting pinned Graph reuse. Cover delayed invalidation fencing and recovery without relying on scheduling or garbage collection.

Chores
  • release: merge main into next/2.0 (GitHub)
Changes
  • Merge pull request #330 from fluxzero-io/chore/merge-main-after-rc6 (GitHub)

    chore(release): merge main into next/2.0

GitHub

1.263.0 (2026-09-08)

Continuous Integration
  • release: use source commit timestamps for Maven archives (GitHub)

    Read the source commit timestamp through the POM for release builds and preserve it when setting the release version. Keep Packages publication before Central.

GitHub

1.262.0 (2026-09-08)

Features
  • serialization: support package type aliases (GitHub)

    Resolve multiple exact and package-prefix aliases deterministically after revision upcasting. Expose builder, property, and fixture configuration while keeping the unconfigured deserialization path allocation-free.

Bug Fixes
  • serialization: expose alias-aware JSON input (GitHub)
  • serialization: apply aliases across JSON type metadata (GitHub)

    Preserve historical type names through revision upcasting, then resolve aliases for nested polymorphic JSON, typed message metadata, and unrevisioned fixture roots. Keep raw metadata and unmatched deserialization on their existing representation.

Documentation
  • serialization: prioritize property-based alias setup (GitHub)

    Lead with application properties and conventional environment variables across human and agent guidance, while retaining builder methods as explicit programmatic overrides. Require all future configuration features to use the shared ApplicationProperties infrastructure instead of feature-specific property resolution.

  • serialization: cover type aliases for humans and agents (GitHub)

    Explain when aliases replace or complement upcasters, including builder and property configuration and JSON fixture type resolution. Keep the README, developer guides, and Java and Kotlin agent manuals aligned, and codify that documentation-surface expectation.

GitHub

1.261.0 (2026-09-08)

Continuous Integration
  • release: use the dedicated Packages upload endpoint (GitHub)

    Use /publish/maven for SDK uploads and the GitHub OIDC audience while keeping public Maven downloads at /maven. Preserve signing and publication to Packages before Maven Central.

GitHub

1.260.0 (2026-09-08)

Continuous Integration
  • release: publish SDK to Fluxzero Packages before Central (GitHub)

    Add GitHub OIDC publication to the existing build job and retain Central publication afterward. Share signing through the sign profile while keeping the Central extension optional, so Central can be retired independently.

GitHub

1.259.0 (2026-09-08)

Dependency updates
  • bump org.eclipse.jetty:jetty-bom from 12.1.12 to 12.1.13 (GitHub)

    org.eclipse.jetty:jetty-bom: 12.1.12 -> 12.1.13 changelog

GitHub

1.258.0 (2026-09-08)

Dependency updates
  • bump org.slf4j:slf4j-api from 2.0.18 to 2.0.19 (GitHub)

    org.slf4j:slf4j-api: 2.0.18 -> 2.0.19

GitHub

1.257.0 (2026-09-04)

Bug Fixes
  • web: align OpenAPI object constraints (GitHub)

    Expose closed unions and explicit unknown-property policies in generated schemas, while mapping size validation to the matching schema shape.

GitHub

1.256.0 (2026-09-04)

Features
  • serialization: support untyped JSON sequences (GitHub)

    Load root arrays and newline-delimited resources element by element so fixture setup can preserve order, per-record type resolution, revision metadata, and user context.

GitHub

1.255.0 (2026-09-04)

Dependency updates
  • bump org.apache.maven.plugins:maven-surefire-plugin (GitHub)

    org.apache.maven.plugins:maven-surefire-plugin: 3.5.6 -> 3.6.0 changelog

GitHub

1.254.0 (2026-09-04)

Dependency updates
  • bump io.fluxzero.tools:fluxzero-maven-plugin from 1.17.0 to 1.17.3 (GitHub)

    io.fluxzero.tools:fluxzero-maven-plugin: 1.17.0 -> 1.17.3 changelog

GitHub

Fluxzero SDK 2.0.0-RC6

RC6 makes Model identity durable and intentional, and completes the distinction between searchable current-state documents and private reference-only documents.

Durable Model identity

A Model now has a stable logical name that is independent of its Java package and payload class name:

@Model(name = "Task")
public record RenamedTask(@EntityId TaskId taskId) {
}

When name is omitted, the simple class name is used. Applications that share one Runtime namespace can prepend fluxzero.model.namePrefix; the prefix is concatenated literally. The resolved name owns persisted Model metadata, default document collections and Graph relationship types. Java FQNs remain serializer details instead of becoming storage identities.

Changing an established Model name or prefix is an application-managed data transition.

Reference-only document persistence

Document-backed Models can now remain directly addressable without becoming generally searchable:

@Model(
        persistence = ModelPersistence.DOCUMENT,
        document = @DocumentProjection(searchable = false))
public record UserPreferences(@EntityId UserId userId) {
}

These documents keep their normal resolved collection and remain available by Model ID, alias and exact parent or ancestor ID. Without an independent Graph role, Fluxzero omits text, facet and sortable indexes. Graph components retain only the internal indexes their Graph role requires.

This makes storage intent explicit: DOCUMENT controls the durable representation, while DocumentProjection.searchable controls external typed search visibility.

Runtime pairing

Use SDK RC6 with Runtime RC6 when logical Model names or materialized Graphs are involved. The complete SDK, downstream compatibility, test-server and Proxy suites passed in the release pipeline.

Full changelog: https://github.com/fluxzero-io/fluxzero-sdk-java/compare/2.0.0-RC5...2.0.0-RC6

GitHub

1.253.0 (2026-09-03)

Bug Fixes
  • proxy: preserve scheduled request correlation (GitHub)

    Capture each forward request's correlation metadata while the tracker context is active. Reuse that snapshot for delayed execution and response publication so completion threads cannot drop or substitute tracker identity.

GitHub

1.252.0 (2026-09-03)

Bug Fixes
  • websocket: separate task and client identity (GitHub)

    Treat platform task IDs as correlation context and only as a prefix for generated per-process client IDs. This prevents request-cache collisions after an in-pod process restart while preserving explicit client IDs and task-level observability.

GitHub

1.251.0 (2026-09-03)

Dependency updates
  • bump org.apache.maven.plugins:maven-compiler-plugin (GitHub)

    org.apache.maven.plugins:maven-compiler-plugin: 3.15.0 -> 3.16.0 changelog

GitHub

Fluxzero 2.0.0-RC5 is a focused stabilization and API-coherence release for the new Model platform. It makes Model storage intent explicit, adds direct relationship-ID search, and closes correctness gaps around document-only Models, recursive deletes, and cache invalidation.

Model persistence says what is stored

Persistence and public search are now separate choices:

@Model(
        persistence = {
                ModelPersistence.EVENT_SOURCED,
                ModelPersistence.DOCUMENT
        },
        document = @DocumentProjection(searchable = false))
public record Task(
        @EntityId TaskId taskId,
        @Parent(pathInParent = "tasks") ProjectId projectId,
        TaskDetails details) {
}

persistence selects the durable representations and authoritative load path. DocumentProjection.searchable only controls whether the current document is exposed through an unrestricted typed search. A reference-only document remains available for direct loads, relationships, and Graph composition.

Search by known parent or ancestor identity

A known typed ID can now start directly from Fluxzero's durable relationship index. The related parent or ancestor does not need a public document:

List<Task> projectTasks = Fluxzero.search(Task.class)
        .whereParent(projectId)
        .fetch(100);

List<Task> organisationTasks = Fluxzero.search(Task.class)
        .whereAncestor(organisationId)
        .fetch(100);

Content-based whereParent and whereAncestor searches remain available when the related identity is not known.

Correctness and runtime parity

RC5 also strengthens the less visible paths that matter in production:

  • Document-authoritative Models can be created, repeatedly updated, deleted, and recreated without reconstructing nonexistent event history.
  • Recursive owned-descendant deletes validate the complete closure before mutation in both TestFixture and the Runtime.
  • Deep cascade conflicts rebase from the actual missing descendant boundary.
  • Hard deletes release cache-refresh waiters independently of asynchronous eviction notification timing.
  • Self-tracking and automatic Model handlers reject unrelated payload types before deserialization.
  • README navigation and the Model persistence guidance have been refreshed.

Compatibility

Use SDK 2.0.0-RC5 together with Runtime 2.0.0-RC5. This remains a release candidate intended for validation before the final 2.0 release.

Compare RC4...RC5

GitHub

1.250.0 (2026-09-02)

Bug Fixes
  • tracking: filter self handlers before deserialization (GitHub)

    Self-tracking consumers receive unfiltered message batches and must reject unrelated payload types without materializing them. Resolve the declared payload class first so malformed messages only fail in consumers that can actually handle that type.

Changes
  • Merge pull request #322 from fluxzero-io/fix/track-self-selection-main (GitHub)

    fix(tracking): filter self handlers before deserialization

GitHub

1.249.0 (2026-09-02)

Dependency updates
  • bump com.github.luben:zstd-jni from 1.5.7-15 to 1.5.7-16 (GitHub)

    com.github.luben:zstd-jni: 1.5.7-15 -> 1.5.7-16

GitHub

Fluxzero 2.0 RC4

RC4 closes the public Model persistence design and hardens the concurrency, recovery, and historical-read paths discovered during final application qualification. It is the current SDK candidate to pair with Runtime 2.0.0-RC4.

One explicit persistence choice

The provisional eventSourced and searchable boolean matrix is replaced by one closed contract:

  • EVENT_SOURCED reconstructs state from the Model event stream.
  • EVENT_SOURCED_WITH_DOCUMENT reconstructs from events and maintains a searchable current document.
  • DOCUMENT makes the current document authoritative and reads it through the configured DocumentSerializer.
@Model(persistence = ModelPersistence.EVENT_SOURCED_WITH_DOCUMENT)
public record Project(
        @EntityId ProjectId projectId,
        ProjectDetails details) {
}

Event publication, internal Graph component documents, and optional whole-Graph materialization remain orthogonal. Invalid or non-reconstructable combinations now fail before commit.

Final hardening
  • Nested Model replay no longer inherits an unrelated outer Graph handler constraint, while the selected Graph remains available to its handler.
  • Direct document reads and ACCEPT rebases respect exact durable boundaries while materialization catches up.
  • Cascade rebases include newly attached descendants and retain atomic deletion semantics.
  • In-memory Model commits no longer have a lock inversion with concurrent event appends.
  • Model cache bulk updates are serialized per key so stale work cannot overwrite a newer revision.
  • Monitored in-memory document indexing replaces entries by message ID without quadratic collection scans.
  • WebSocket close acknowledgement is independent from application notification latency.
Compatibility and qualification

The persistence API change only replaces provisional 2.0 prerelease declarations; it does not change persisted Model data or wire formats. Existing 1.x Aggregate and document flows remain supported. Human guides, Javadoc, and the Java and Kotlin agent manuals now describe the same final API.

Use this SDK with Runtime 2.0.0-RC4. Stable and 1.x channels are unchanged.

Full changelog from RC3


© 2026 Fluxzero