Skip to content

Changelog

Fluxzero SDK changes

Follow SDK changes that may affect application behavior, integrations, build setup, and operational defaults. Use this overview to plan upgrades, scan recent changes by version, and open GitHub when you need deeper implementation context.

GitHub

RC9 highlights

This candidate advances the Java SDK 2.0 release line; it is not a 2.0 GA release.

  • Transactional Graph reads track inspected relationship collections, including empty results. Concurrent add/remove/reparent operations trigger the selected conflict policy without making every parent read depend on every relationship change.
  • Select Graph children and descendants by path or logical Model name before unrelated value reconstruction. Explicit unknown-node inclusion supports metadata navigation and counting across application contracts. Known-only selections may omit stored children; value/history access still requires compatible local contracts.
  • Read verified current Model documents explicitly without silently falling back to historical event replay. Model discovery is independent of optional serialization-name registration.
  • Avoid unnecessary replay for Graph path selection, current/untyped root identity, exact-ID lookup and revision metadata. Preserve pinned snapshots and extension-point fallbacks.
  • Include Java 25 execution isolation for SDK-managed asynchronous work, explicit user identity, typed scheduling conveniences, fixture corrections and the combined Java/Kotlin agent documentation.
SDK upgrade notes

Java 25 is required. Custom User implementations must implement id() and be recompiled. Identity no longer falls back to Principal.getName(); a display or principal name remains separate.

Rebuild shared Model contract JARs with SDK annotation processing enabled for cold Model discovery.

Existing documents retain their ordinary read path. The new explicit verified current-state API rejects documents without a trusted, version-bound proof, rather than silently falling back to replay or accepting unchecked state. Unsupported capabilities fail explicitly rather than weakening consistency.

This prerelease does not promote stable 1.x, latest or stable-documentation channels.

2.0.0-RC9 (2026-09-12)

Features
  • modeling: navigate Graph relationships before replay (GitHub)

    Select children and descendants by path or logical Model name while retaining unknown nodes as explicit metadata-only views. Preserve pinned values, staged dependency provenance and relationship conflict checks through lazy selection and graph updates.

  • scheduling: add schedule ID factory (GitHub)

    Offer a concise construction route for generic typed schedule IDs while preserving the existing constructor and stable string representation. Use the factory in human and agent guidance.

  • scheduling: expose typed schedule ID overloads (GitHub)

    Make ScheduleId discoverable across scheduling, command, periodic, lookup, and cancellation APIs while retaining the existing Object-based implementation contract. Default delegates preserve custom scheduler implementations and the established string wire format.

  • modeling: support independent discovery and verified current state (GitHub)

    Separate Model discovery from optional serialization aliases and expose an explicit read-only document state API. Bind trusted materialized documents to their durable head and stored envelope while preserving ordinary replay and search behavior.

  • authentication: require explicit user identities in v2 (GitHub)

    Keep identity separate from principal and display names without changing the versioned user-metadata format.

    BREAKING CHANGE: User implementations must provide id() and be recompiled. Principal names default to that explicit ID; identity no longer falls back to getName().

  • authentication: add stable user identity (GitHub)

    Keep existing User implementations compatible by defaulting id() to Principal.getName(). Use the explicit identity for user metadata and authorization diagnostics without adding it to legacy serialized user objects.

  • publish the SDK 2.x agent graph (GitHub)

    Add canonical Java and Kotlin Model/Graph guidance and retain explicit Aggregate compatibility topics. Attach the graph archive to the root Maven artifact and include it in normal prerelease assets so the stdio MCP bridge can resolve documentation for future SDK 2.x releases.

Bug Fixes
  • modeling: keep Graph metadata reads replay-free (GitHub)

    Resolve scopes, identities and revisions before reconstructing values while retaining pinned boundaries and conflict evidence. Reuse exact cached revisions and preserve custom repository and Entity behavior.

  • modeling: resolve lazy Graph aliases before replay (GitHub)

    Pin canonical identity or absence together with the read boundary before deferred value reconstruction. Preserve pending overlays and custom repository fallback, and fail when a pinned revision has been erased.

  • modeling: preserve canonical IDs in alias wire replies (GitHub)

    Compact replies implicitly equate the requested stream ID with its canonical head ID. Use the existing general transport for alias replies so both identities survive without changing canonical frames or wire versions.

  • concurrency: isolate SDK-managed asynchronous work (GitHub)

    Give Model continuations named virtual workers and keep CPU batches on an explicitly owned pool. Preserve caller participation, context, ordered completion and transport cancellation while retaining the documented JDK-internal transport boundary.

  • serialization: preserve inherited JSON root containers (GitHub)

    Parse inheritance-bearing resources one root tree at a time so Jackson does not unwrap root arrays. Preserve singleton and typed arrays as well as independent NDJSON records while leaving resources without inheritance on their existing fast path.

  • proxy: isolate forwarding from common pool (GitHub)

    Run asynchronous HTTP completion and retry scheduling on the Proxy worker pool so a lazy response-session connect cannot starve its own handshake. Preserve direct completion behavior and propagate the active thread-local context across the handoff.

  • testing: isolate fixture property overrides (GitHub)

    Give every fixture copy its own property snapshot over the original builder source. Properties now remain visible across copy operations while sibling and separately created fixtures cannot inherit each other's overrides.

  • serialization: resolve fixture inheritance per array element (GitHub)

    Resolve @​extend and @​extends structurally for each JSON node so independent array entries inherit from their own relative bases before type resolution and upcasting. Preserve raw resources without inheritance and existing object-root and NDJSON behavior.

  • modeling: protect transactional graph read dependencies (GitHub)

    Retain inspected value and relationship scopes through lazy evaluation, cached views and rebases. Preserve ACCEPT apply-only reads and reject opaque transactional Graph implementations rather than dropping proof.

    Use a distinct relationship-aware wire request and detect stale reads of physically erased values while allowing fresh absence reads.

Documentation
  • javadoc: reject invalid API references (GitHub)

    Repair the known broken links and invalid inherited documentation. Enable reference doclint and fail release and site generation on future Javadoc warnings.

  • positioning: align documentation with product builders (GitHub)

    Make agent-led development the primary path while preserving direct development as a full option. Use broad software and cloud language in product-facing copy, and retain precise technical terminology where documentation addresses specific contracts.

  • agents: migrate the SDK documentation graph (GitHub)

    Make docs/agents the canonical graph and incorporate the later Java and Kotlin manual changes. Preserve existing article identities and ZIP consumers while preparing namespace-aware release documentation.

Dependency updates
  • bump kotlin.version from 2.4.10 to 2.4.20 (GitHub)
    • kotlin.version: 2.4.10 -> 2.4.20
    • org.jetbrains.kotlin:kotlin-stdlib-jdk8: 2.4.10 -> 2.4.20 changelog
    • org.jetbrains.kotlin:kotlin-reflect: 2.4.10 -> 2.4.20 changelog
    • org.jetbrains.kotlin:kotlin-maven-plugin: 2.4.10 -> 2.4.20
    • org.jetbrains.kotlin:kotlin-test: 2.4.10 -> 2.4.20 changelog
  • bump io.fluxzero.tools:fluxzero-maven-plugin from 1.17.3 to 1.18.0 (GitHub)

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

Continuous Integration
  • release: remove Node-based tag action (GitHub)

    The repository-owned release resolver already selects the exact version and reruns reuse a tag on the current commit. Expose those values directly instead of invoking a Node 20 action with an overriding custom tag.

  • release: use GitHub App client ID input (GitHub)

    Use the current create-github-app-token input while retaining the existing app credential, repository scope, permissions, and automatic token revocation.

  • maven: use explicit credential environment inputs (GitHub)

    Migrate setup-java to its non-deprecated environment-variable-name inputs while preserving the separate GitHub Packages, Fluxzero, and Maven Central credential mappings.

  • release: stop Central publishing on 1 October 2026 [skip ci] (GitHub)
  • release: stop waiting for Central publication (GitHub)

    Return after Maven Central accepts the automatically published bundle instead of polling through validation and publication. Remove the obsolete recovery polling while retaining safe release reruns.

Build System
  • publish agent graph archives with SDK releases (GitHub)

    Attach a version-bound documentation ZIP to the standard Maven publication and preserve the same archive and checksum in GitHub releases for recovery. Keep the existing Java and Kotlin project ZIPs available during migration.

Tests
  • modeling: preserve lightweight direct graph reads (GitHub)

    Keep unused and value-only directly resolved Graphs on the ordinary commit protocol. Clarify that indirect ancestor selection still protects its traversed relationships and document validation of inspected dependencies.

Chores
  • release: integrate SDK RC9 candidate (GitHub)

    Integrate transactional Graph dependencies, explicit cross-app reads and metadata-first navigation together with current main and v2 documentation. Retain Java 25, explicit user identity and prerelease-only publication.

  • integration: reconcile v2 agent documentation for RC9 (GitHub)

    Retain current Model, identity, privacy and fixture contracts while incorporating the v2 discovery pages and Model-specific guidance. Keep canonical Graph documentation and prerelease publication policy authoritative.

  • integration: merge latest main into RC9 candidate (GitHub)

    Bring the typed scheduling conveniences into the existing Java 25 and Model release line.

  • v2: merge main identity and release hardening (GitHub)

    Retain v2 consumer defaults and complete-message fetch limits while integrating the stable user identity API and stricter release documentation checks.

  • v2: merge latest main fixes into graph hardening (GitHub)

    Integrate isolated proxy forwarding and the updated Central publication policy while retaining the v2 Graph and prerelease contracts. Align release documentation with asynchronous Central publication and its cutoff.

  • merge: integrate main into v2 graph hardening (GitHub)

    Retain Model-first guidance and Java 25 while adopting the versioned agent documentation graph. Preserve JSON root arrays when resolving inherited fixture resources.

GitHub

1.274.0 (2026-09-12)

Features
  • scheduling: add schedule ID factory (GitHub)

    Offer a concise construction route for generic typed schedule IDs while preserving the existing constructor and stable string representation. Use the factory in human and agent guidance.

  • scheduling: expose typed schedule ID overloads (GitHub)

    Make ScheduleId discoverable across scheduling, command, periodic, lookup, and cancellation APIs while retaining the existing Object-based implementation contract. Default delegates preserve custom scheduler implementations and the established string wire format.

  • authentication: add stable user identity (GitHub)

    Keep existing User implementations compatible by defaulting id() to Principal.getName(). Use the explicit identity for user metadata and authorization diagnostics without adding it to legacy serialized user objects.

GitHub

1.273.0 (2026-09-11)

Documentation
  • javadoc: reject invalid API references (GitHub)

    Repair the known broken links and invalid inherited documentation. Enable reference doclint and fail release and site generation on future Javadoc warnings.

Continuous Integration
  • release: remove Node-based tag action (GitHub)

    The repository-owned release resolver already selects the exact version and reruns reuse a tag on the current commit. Expose those values directly instead of invoking a Node 20 action with an overriding custom tag.

  • release: use GitHub App client ID input (GitHub)

    Use the current create-github-app-token input while retaining the existing app credential, repository scope, permissions, and automatic token revocation.

  • maven: use explicit credential environment inputs (GitHub)

    Migrate setup-java to its non-deprecated environment-variable-name inputs while preserving the separate GitHub Packages, Fluxzero, and Maven Central credential mappings.

  • release: stop Central publishing on 1 October 2026 [skip ci] (GitHub)
GitHub

1.272.0 (2026-09-11)

Continuous Integration
  • release: stop waiting for Central publication (GitHub)

    Return after Maven Central accepts the automatically published bundle instead of polling through validation and publication. Remove the obsolete recovery polling while retaining safe release reruns.

GitHub

1.271.0 (2026-09-11)

Bug Fixes
  • serialization: preserve inherited JSON root containers (GitHub)

    Parse inheritance-bearing resources one root tree at a time so Jackson does not unwrap root arrays. Preserve singleton and typed arrays as well as independent NDJSON records while leaving resources without inheritance on their existing fast path.

  • proxy: isolate forwarding from common pool (GitHub)

    Run asynchronous HTTP completion and retry scheduling on the Proxy worker pool so a lazy response-session connect cannot starve its own handshake. Preserve direct completion behavior and propagate the active thread-local context across the handoff.

  • testing: isolate fixture property overrides (GitHub)

    Give every fixture copy its own property snapshot over the original builder source. Properties now remain visible across copy operations while sibling and separately created fixtures cannot inherit each other's overrides.

  • serialization: resolve fixture inheritance per array element (GitHub)

    Resolve @​extend and @​extends structurally for each JSON node so independent array entries inherit from their own relative bases before type resolution and upcasting. Preserve raw resources without inheritance and existing object-root and NDJSON behavior.

GitHub

1.270.0 (2026-09-11)

Dependency updates
  • bump kotlin.version from 2.4.10 to 2.4.20 (GitHub)
    • kotlin.version: 2.4.10 -> 2.4.20
    • org.jetbrains.kotlin:kotlin-stdlib-jdk8: 2.4.10 -> 2.4.20 changelog
    • org.jetbrains.kotlin:kotlin-reflect: 2.4.10 -> 2.4.20 changelog
    • org.jetbrains.kotlin:kotlin-maven-plugin: 2.4.10 -> 2.4.20
    • org.jetbrains.kotlin:kotlin-test: 2.4.10 -> 2.4.20 changelog
GitHub

2.0.0-RC8 (2026-09-10)

Features
  • publishing: add fail-closed local dispatch (GitHub)

    Introduce @​LocalOnly for commands and queries so absent or ambiguous local request handlers cannot fall through to the Runtime. Preserve ordinary location-transparent dispatch and require custom registries to explicitly support exact selection.

  • eventsourcing: bound aggregate history pages (GitHub)

    Add an optional mixed-version-safe payload-byte limit alongside the existing event-count bound. Preserve exact paging progress for short and oversized pages, resolve configuration per application, and align the TestServer contract.

  • eventsourcing: bound aggregate history pages (GitHub)

    Add an optional mixed-version-safe payload-byte limit alongside the existing event-count bound. Preserve exact paging progress for short and oversized pages, resolve configuration per application, and align the TestServer contract.

  • publishing: add fail-closed local dispatch (GitHub)

    Introduce @​LocalOnly for commands and queries so absent or ambiguous local request handlers cannot fall through to the Runtime. Preserve ordinary location-transparent dispatch and require custom registries to explicitly support exact selection.

  • modeling: add safe retry defaults and canonical model routing (GitHub)

    Separate apply dependencies from assertion-only reads for ACCEPT while retaining complete RETRY validation and strict implicit creation. Infer routing only for unambiguous Model targets, preserve explicit routing, and gate the new defaults per application.

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

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

  • 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
  • modeling: protect Model events while integrating main (GitHub)

    Preserve v2 dispatch paths while incorporating deferred local data protection and current main fixes. Redact restored and replaced Model updates at the durable boundary, retain erasure provenance, and restore available private values for replay without hiding vault failures.

    Keep serialized extensions intact and fail closed for unsupported private-data mappings or unstable representations. Unprotected updates retain their serialized-data fast path.

  • dataprotection: avoid KV round trips for local messages (GitHub)

    Protected values for locally handled messages no longer need a Runtime KV round trip. Defer externalization until external fallback or SDK-managed logMessage publication, while preserving incoming-reference and custom-registry behavior.

  • keyvalue: redact values from write failures (GitHub)

    Failed key-value writes should retain their diagnostic key and cause without rendering the value into exception text. This prevents protected or otherwise sensitive payloads from leaking through exception logs and avoids value rendering from masking the original failure.

  • modeling: validate recursive Model assertions (GitHub)

    Traverse returned validation objects and annotated fields without losing phase, invocation context or pinned Model dependencies. Preserve direct assertions and keep validation out of ACCEPT rebase and replay.

  • web: merge OpenAPI resources deterministically (GitHub)

    Applications may expose generated or maintained specifications from several modules. Discover every visible resource, combine compatible definitions, and reject ambiguous contracts before serving the endpoint.

  • websocket: cap reconnect backoff at sixteen seconds (GitHub)

    Keep equal-jitter reconnects responsive during medium outages by limiting the exponential ceiling to sixteen seconds. This retains fleet desynchronization while reducing the worst-case delay after Runtime recovery.

  • websocket: bound recovery work during outages (GitHub)

    Keep opt-in transport diagnostics single-flight and timeboxed on a dedicated lifecycle worker. Add a versioned, explicitly overridable capped equal-jitter reconnect policy so existing compatibility defaults remain stable.

  • web: close generated OpenAPI request contracts (GitHub)

    Mark required request bodies explicitly and retain supported map type-use constraints across runtime and compile-time generation. Keep OpenAPI 3.0 output valid while expressing map-key validation in 3.1 and preserving Jackson deduction semantics.

  • websocket: cap reconnect backoff at sixteen seconds (GitHub)

    Keep equal-jitter reconnects responsive during medium outages by limiting the exponential ceiling to sixteen seconds. This retains fleet desynchronization while reducing the worst-case delay after Runtime recovery.

  • web: merge OpenAPI resources deterministically (GitHub)

    Applications may expose generated or maintained specifications from several modules. Discover every visible resource, combine compatible definitions, and reject ambiguous contracts before serving the endpoint.

  • web: close generated OpenAPI request contracts (GitHub)

    Mark required request bodies explicitly and retain supported map type-use constraints across runtime and compile-time generation. Keep OpenAPI 3.0 output valid while expressing map-key validation in 3.1 and preserving Jackson deduction semantics.

  • websocket: bound recovery work during outages (GitHub)

    Keep opt-in transport diagnostics single-flight and timeboxed on a dedicated lifecycle worker. Add a versioned, explicitly overridable capped equal-jitter reconnect policy so existing compatibility defaults remain stable.

  • web: preserve compiled Model graph types during enrichment (GitHub)

    Combine generated Model type evidence with the application registry so partially initialized applications can serve selected graph schemas. Keep schema bindings, per-document isolation and invalid-path validation intact.

  • modeling: preserve context through commit retries (GitHub)

    Keep the captured application context active during rebase preparation and delayed admission submission, including custom serialization and dispatch interception. Restore the completion thread context after each continuation.

  • modeling: release completed admission dependencies (GitHub)

    Discard predecessor references once admission is granted so sustained overlap cannot retain an unbounded completed chain. Preserve visibility of progress and transport state across completion threads.

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

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

Performance Improvements
  • publishing: cache local-only scope decisions (GitHub)

    Keep immutable positive and negative annotation decisions in the central type metadata cache. Preserve dynamic handler selection and checks of both original and interceptor-replaced payloads.

  • publishing: cache local-only payload scope decisions (GitHub)

    Resolve immutable annotation scope once through central type metadata, including negative decisions. Keep handler selection and interceptor replacement dynamic across applications.

Documentation
  • modeling: define intercepted assertion semantics (GitHub)

    Document which AssertLegal methods apply when InterceptApply retains, suppresses, replaces, or splits an update. Lock the existing sequence with focused state-aware regression tests without adding a noisy runtime diagnostic.

  • packages: align setup, policies, and checksum publishing (#340) (GitHub)

    * docs(packages): align installation and policies with public repository

    * chore(packages): refine policies and checksum publishing

    Keep public-package disclosures concise while preserving processing, retention, transfer, and license information. Configure Maven publishing to include SHA-256 and SHA-512 alongside the existing checksum formats.

  • modeling: define intercepted assertion semantics (GitHub)

    Document which AssertLegal methods apply when InterceptApply retains, suppresses, replaces, or splits an update. Lock the existing sequence with focused state-aware regression tests without adding a noisy runtime diagnostic.

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

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

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

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

Code Refactoring
  • publishing: simplify local-only dispatch (GitHub)

    Make LocalOnly mean that only existing local handlers run for every message type. Requests without a local handler fail through their future, while non-requests complete without external publication; package scopes and explicit overrides define the boundary without a separate handler-selection model.

  • publishing: simplify local-only dispatch (GitHub)

    Apply the local-only boundary to every message type while retaining the v2 gateway's parallel serialization and model-handler paths. Requests without a local handler fail through their future; non-requests complete without external publication, and package scopes support explicit overrides.

Continuous Integration
  • remove automatic main repair workflow [skip ci] (GitHub)

    Failed main builds now remain ordinary CI failures and no longer start Codex, create repair branches, or open pull requests.

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

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

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

Build System
  • java: require Java 25 for SDK v2 (GitHub)

    Remove older-JDK worker fallbacks while preserving the existing Java 25 execution policy, admission limits and public utility signatures. Align Java and Kotlin consumer builds and documentation with the new baseline.

    BREAKING CHANGE: SDK v2 artifacts require Java 25 or newer to compile and run. The SDK 1.x release line is unchanged.

Tests
  • modeling: await initial cache publication before advancing tracker (GitHub)

    Establish the intended current-cache precondition before the asynchronous tracker advances. A load published after that advance correctly needs a fresh proof and must not race this unrelated-update assertion.

Chores
  • release: integrate SDK RC8 candidate (GitHub)

    Integrate current main and the qualified v2 fixes, including durable Model event protection and replay restoration, for the matching RC8 prerelease.

  • integration: merge main into SDK v2 (GitHub)

    Retain v2 compact metadata, byte-range serialization and release defaults while incorporating main's type aliases and publication changes.

    Reuse normalized inputs and bound alias detection work to preserve deserialization fast paths.

Changes
  • merge(v2): integrate latest main updates (GitHub)

    Keep the already ported SDK fixes and v2 Model behavior while incorporating the current packaging guidance and CI changes.

  • merge(v2): combine main ports with Model hardening (GitHub)

    Preserve the main compatibility ports alongside the later Model conflict, routing and graph corrections and Java 25 baseline.

GitHub

1.269.0 (2026-09-10)

Documentation
  • positioning: align documentation with product builders (GitHub)

    Make agent-led development the primary path while preserving direct development as a full option. Use broad software and cloud language in product-facing copy, and keep language- and Runtime-specific terminology where the documentation addresses those technical contracts directly.

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

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

GitHub

1.268.0 (2026-09-10)

Documentation
  • agents: migrate the SDK documentation graph (GitHub)

    Make docs/agents the canonical graph and incorporate the later Java and Kotlin manual changes. Preserve existing article identities and ZIP consumers while preparing namespace-aware release documentation.

Build System
  • publish agent graph archives with SDK releases (GitHub)

    Attach a version-bound documentation ZIP to the standard Maven publication and preserve the same archive and checksum in GitHub releases for recovery. Keep the existing Java and Kotlin project ZIPs available during migration.

GitHub

1.267.0 (2026-09-10)

Bug Fixes
  • dataprotection: avoid KV round trips for local messages (GitHub)

    Protected values for locally handled messages no longer need a Runtime KV round trip. Defer externalization until external fallback or SDK-managed logMessage publication, while preserving incoming-reference and custom-registry behavior.

  • keyvalue: redact values from write failures (GitHub)

    Failed key-value writes should retain their diagnostic key and cause without rendering the value into exception text. This prevents protected or otherwise sensitive payloads from leaking through exception logs and avoids value rendering from masking the original failure.

GitHub

1.266.0 (2026-09-10)

Performance Improvements
  • publishing: cache local-only scope decisions (GitHub)

    Keep immutable positive and negative annotation decisions in the central type metadata cache. Preserve dynamic handler selection and checks of both original and interceptor-replaced payloads.

GitHub

1.265.0 (2026-09-10)

Features
  • publishing: add fail-closed local dispatch (GitHub)

    Introduce @​LocalOnly for commands and queries so absent or ambiguous local request handlers cannot fall through to the Runtime. Preserve ordinary location-transparent dispatch and require custom registries to explicitly support exact selection.

  • eventsourcing: bound aggregate history pages (GitHub)

    Add an optional mixed-version-safe payload-byte limit alongside the existing event-count bound. Preserve exact paging progress for short and oversized pages, resolve configuration per application, and align the TestServer contract.

Bug Fixes
  • web: merge OpenAPI resources deterministically (GitHub)

    Applications may expose generated or maintained specifications from several modules. Discover every visible resource, combine compatible definitions, and reject ambiguous contracts before serving the endpoint.

  • websocket: cap reconnect backoff at sixteen seconds (GitHub)

    Keep equal-jitter reconnects responsive during medium outages by limiting the exponential ceiling to sixteen seconds. This retains fleet desynchronization while reducing the worst-case delay after Runtime recovery.

  • websocket: bound recovery work during outages (GitHub)

    Keep opt-in transport diagnostics single-flight and timeboxed on a dedicated lifecycle worker. Add a versioned, explicitly overridable capped equal-jitter reconnect policy so existing compatibility defaults remain stable.

  • web: close generated OpenAPI request contracts (GitHub)

    Mark required request bodies explicitly and retain supported map type-use constraints across runtime and compile-time generation. Keep OpenAPI 3.0 output valid while expressing map-key validation in 3.1 and preserving Jackson deduction semantics.

Documentation
  • modeling: define intercepted assertion semantics (GitHub)

    Document which AssertLegal methods apply when InterceptApply retains, suppresses, replaces, or splits an update. Lock the existing sequence with focused state-aware regression tests without adding a noisy runtime diagnostic.

  • packages: align setup, policies, and checksum publishing (#340) (GitHub)

    * docs(packages): align installation and policies with public repository

    * chore(packages): refine policies and checksum publishing

    Keep public-package disclosures concise while preserving processing, retention, transfer, and license information. Configure Maven publishing to include SHA-256 and SHA-512 alongside the existing checksum formats.

Code Refactoring
  • publishing: simplify local-only dispatch (GitHub)

    Make LocalOnly mean that only existing local handlers run for every message type. Requests without a local handler fail through their future, while non-requests complete without external publication; package scopes and explicit overrides define the boundary without a separate handler-selection model.

Continuous Integration
  • remove automatic main repair workflow [skip ci] (GitHub)

    Failed main builds now remain ordinary CI failures and no longer start Codex, create repair branches, or open pull requests.

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

GitHub

1.248.0 (2026-09-01)

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

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

GitHub

Symmetric document-based Models

RC3 is a focused correctness release on top of RC2. Document-authoritative Models now use the configured DocumentSerializer for both storage and reconstruction, so the Model repository obeys the same complete-document contract as ordinary Document Store reads.

What changed

For @Model(eventSourced = false), every repository read now passes the complete SerializedDocument to DocumentSerializer.fromDocument(...). This applies consistently to direct and current loads, batched loads, cache refresh after a miss or restart, Graph reconstruction, and namespaced repositories.

That makes document-level transformations truly round-trip capable:

  • encryption and decryption;
  • compression;
  • signing and integrity verification;
  • custom envelopes;
  • transformations that depend on document ID, collection, timestamps, or metadata.
Fluxzero.builder()
        .replaceDocumentSerializer(myDocumentSerializer)
        .build();
Compatibility

There is no persisted- or wire-format change. The default document serializer produces the same result as before, and event-sourced Model reconstruction is untouched. Existing custom serializers only gain the missing symmetric read callback.

Use SDK and Runtime 2.0.0-RC3 as a matching pair.

Full comparison: 2.0.0-RC2...2.0.0-RC3

GitHub

Fluxzero 2.0.0-RC2 — Sharper Models, Reliable Dev Startup

Fluxzero 2.0 is about modeling independent domain lifecycles directly: every independently living object is a @Model, durable @Parent relationships connect those Models, and Graph<T> restores coherent context only where an application needs it.

RC2 keeps that Model/Graph foundation intact and makes the release considerably easier to adopt. The embedded Dev Server can now retain a wider startup window for brand-new consumers, while the human guides, public Javadocs and Java/Kotlin agent manuals have been brought onto the same current API and design language.

Model the lifecycle, then choose storage

The central 2.0 rule is now expressed consistently throughout the documentation:

@Model(materializeGraph = true)
record Project(
        @EntityId ProjectId projectId,
        ProjectDetails details) {
}

@Model
record Task(
        @EntityId TaskId taskId,
        @Parent(pathInParent = "tasks") ProjectId projectId,
        TaskDetails details) {
}

Task is independent because it has its own identity and lifecycle—not because it is large, searchable or awkward to embed. It can have its own history, retention, deletion and concurrency while still appearing naturally below a Project:

Graph<Project> project = Fluxzero.loadGraph(projectId);
List<Task> tasks = project.childModels("tasks", Task.class);

List<Graph<Project>> activeProjects = Fluxzero.searchGraph(Project.class)
        .whereDescendant(Task.class, MatchConstraint.match(false, "completed"))
        .fetchAll();

The revised guides cover the complete current contract: typed Model and Graph search, lazy and historical Graph loading, pinned state boundaries, polymorphic and recursive relationships, Graph context and derived properties, direct Model search versus Graph materialization, event publication, event sourcing and the forward-only Aggregate-to-Model migration path.

The bundled Java and Kotlin project files now teach exactly the same capabilities and use the same public type catalogue as the human documentation.

Reliable startup commands in the Dev Server

An embedded Test Server previously started a new consumer one second before the current end of its log. That default is safe and remains unchanged, but it was too narrow for development tools that may publish startup commands before application handlers finish registering.

Embedded owners can now choose the initial look-back explicitly:

Server server = TestServer.startServer(0, Duration.ofSeconds(10));

The duration applies only when a consumer has no stored or client-controlled position. Existing durable positions are never moved backwards, and every existing startServer(port) and local-client entry point retains the one-second default. Embedded tooling can also observe typed consumer readiness instead of confusing an open connection with a registered message handler.

Compatibility and RC status

  • RC2 introduces no new Model persisted or wire format compared with RC1.
  • Existing Aggregate, messaging, search, scheduling and web applications remain supported.
  • Runtime 2.0 remains compatible with 1.x SDK clients.
  • SDK 2.0 can use a 1.x Runtime for existing non-Model capabilities; new Model persistence requires Runtime 2.0.
  • RC2 artefacts are immutable prereleases. Stable latest images, stable Javadocs and stable site signals remain untouched.
Component Release
Maven BOM io.fluxzero:fluxzero-bom:2.0.0-RC2
Test Server image ghcr.io/fluxzero-io/fluxzero-sdk-java/fluxzero-test:2.0.0-RC2
Proxy image ghcr.io/fluxzero-io/fluxzero-sdk-java/fluxzero-proxy:2.0.0-RC2
Javadocs 2.0.0-RC2

Explore the current 2.0 API

GitHub

1.247.0 (2026-08-31)

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

    io.fluxzero.tools:fluxzero-maven-plugin: 1.16.0 -> 1.16.1 changelog

GitHub

1.246.0 (2026-08-28)

Features
  • test-server: configure initial consumer look-back (#308) (GitHub)

    * feat(test-server): expose consumer readiness observation

    Allow embedded runtime owners to observe registered typed consumers so local tooling can distinguish connection from actual message consumption readiness. Observer failures remain isolated and existing start behavior keeps its no-op default.

    * feat(test-server): configure initial consumer look-back

    Keep the existing one-second default while allowing embedded runtimes to retain a wider startup window for consumers without stored positions. Preserve existing positions and local client constructor contracts.

GitHub

1.245.0 (2026-08-28)

Dependency updates
  • bump io.fluxzero:lychee-maven-plugin from 0.2.9 to 0.2.10 (GitHub)

    io.fluxzero:lychee-maven-plugin: 0.2.9 -> 0.2.10 changelog

Continuous Integration
  • release: establish major release trains [skip ci] (GitHub)

    Prepare protected 2.0 integration and maintenance lines without publishing a release for this infrastructure-only change.

  • release: establish major release trains (GitHub)

    Keep stable updates automatic on main while making 2.0 milestones explicit and isolated from stable package tags, documentation, and site notifications.

GitHub

Fluxzero 2.0.0-RC1 — Independent Models and Graphs

Fluxzero 2.0 introduces a new foundation for persisted domain state: independent Models connected by durable relationships and exposed as coherent Graphs.

In Fluxzero 1.x, an Aggregate root was often forced to own much more than the business domain required. Identity, persistence, history, caching, concurrency and deletion of independently living children all ended up behind one root and usually in one ever-growing stream.

Fluxzero 2.0 separates those concerns:

  • every domain object with its own lifecycle becomes an independent @Model;
  • @Parent records relationships without embedding or duplicating child state in the parent;
  • Graph<T> reconstructs the coherent domain view when code actually needs the surrounding context;
  • one command can assert and change multiple Models in one atomic commit;
  • event sourcing, document loading, caching, snapshots, direct search and Graph materialization become storage choices made after the domain boundary is correct.

The familiar Fluxzero programming model remains: immutable messages, annotated handlers, automatic dependency injection, event publication, upcasting and the TestFixture. The major change is that storage shape no longer has to dictate domain shape.

Model the lifecycle, not the container

If a Task can be created, changed, retained or deleted independently, it is a Model—even when users normally see it inside a Project:

@Model(materializeGraph = true)
public record Project(
        @EntityId ProjectId projectId,
        ProjectDetails details) {
}

@Model
public record Task(
        @EntityId TaskId taskId,
        @Parent(pathInParent = "tasks") ProjectId projectId,
        TaskDetails details,
        boolean completed) {
}

ProjectId and TaskId carry their Model type, so Fluxzero can resolve command targets, loads and relationships without class arguments or casts.

Project and Task now have separate streams, histories, caches and lifecycles. Moving a Task only changes its projectId; Fluxzero updates the durable relationship without loading or rewriting either Project. Because ProjectId is typed, @Parent infers Project.class. Parent-scoped IDs, recursive relationships such as Folder → Folder, polymorphic parents, aliases and configurable cascade deletion are supported.

Use @Member only when a nested value deliberately shares all creation, change, history, retention and deletion with its root.

Commands become atomic Model transitions

Commands can carry their assertions and state transition directly:

public record CompleteTask(TaskId taskId) {
    @AssertLegal
    void assertOpen(Task task) {
        if (task.completed()) {
            throw new IllegalStateException("Task is already complete");
        }
    }

    @Apply
    Task apply(Task task) {
        return new Task(
                task.taskId(), task.projectId(),
                task.details(), true);
    }
}

Publishing CompleteTask is enough. Fluxzero resolves the target, runs interceptors and assertions, applies the transition and durably commits the result. No boilerplate command handler or aggregate lookup is required.

One payload may read, create, update, move or delete several independent Models in the same atomic commit. Payload-side handlers run first; Model-side @InterceptApply, @AssertLegal and @Apply methods then add reusable domain-wide behavior against the intermediate state. Conflict retries, replay and live handling use that same deterministic reducer. Commands in one ordered batch also get read-your-writes without making unrelated Model chains wait for each other.

Graphs restore context without restoring coupling

Graph<T> is a typed, lazy view over one Model and its relationships:

ProjectId projectId = new ProjectId("1");
Graph<Project> project = Fluxzero.loadGraph(projectId);

List<Task> tasks = project.childModels("tasks", Task.class);
Graph<Project> before = project.previous();

The root Model is loaded only when its value is requested; parents, children, descendants and history are resolved lazily at one pinned state boundary. A Graph can:

  • navigate parents, children and descendants;
  • expose the complete state before a change;
  • load an exact historical boundary or play back to an event;
  • stage updates and deletions;
  • serialize as a nested response through explicit pathInParent relationships;
  • filter or select response branches without copying Model values;
  • add derived @GraphProperty values;
  • be injected directly into command, query, event, document and web handlers.

A sole Graph<Project> parameter on an event or notification handler subscribes to durable changes anywhere below that root. Fluxzero supplies the exact before and after Graph and also handles child moves and root deletion coherently.

Search live or materialized Graphs

Graph search uses the regular typed Search API:

List<Graph<Project>> projects = Fluxzero.searchGraph(Project.class)
        .whereDescendant(
                Task.class,
                MatchConstraint.match(false, "completed"))
        .fetchAll();

Fluxzero uses a configured materialized projection when available and otherwise composes the Graph live. A materialized Graph is a derived search document; the independent Models and their relationships remain authoritative. Direct Model search is configured separately.

Current point reads always use the committed Model state, even while asynchronous Graph materialization is catching up. Materialized Graphs retain the concrete type and revision of every node, so the ordinary serializer can upcast each Model independently. @HandleDocument(modelGraph = ...) can persist evolved node schemas back into the derived projection without rewriting authoritative Model history.

Event sourcing without giant root streams

Models are event-sourced by default. Because every independently living Model has its own stream, a short-lived Task no longer inflates the lifetime history of its Organisation or Project. Snapshotting and bounded reconstruction remain available for genuinely long streams.

Document-based loading is also supported for Models that should read their current state directly. This changes the load strategy—not whether their updates can be stored and published as events. Search documents, cache retention, snapshots, event publication and Graph materialization are independently configurable.

Model and Graph injection into event handlers is pinned to the exact durable Model commit that produced the event. Historical relations therefore cannot accidentally observe a newer cached parent or child.

A gradual path from Aggregates to Models

Changing @Aggregate to @Model is deliberately not treated as a persistence migration. Fluxzero 2.0 instead provides a controlled, forward-only migration path:

  1. replay published legacy events into shadow Models;
  2. catch up continuously while the legacy application remains the only write owner;
  3. validate and adopt the reconstructed state;
  4. move queries and read-only listeners to Models and Graphs incrementally;
  5. transfer command ownership per Model boundary only after every check reports GO.

The migration runner preserves the link between a legacy global event and the Model state created from it. Converted event handlers can therefore inject the exact new Model or Graph state for that old event. Multiple migration instances use one durable single-tracker consumer for safe failover, and document-backed state is staged outside normal reads until adoption. Legacy STORE_ONLY events are outside this global-log replay source.

This lets applications validate the new representation under real event traffic without committing to a big-bang cutover.

Built as a production path, not an adapter layer

Models use a dedicated high-throughput SDK/Runtime commit protocol with bounded batching, compact binary framing, durable receipts, conflict-aware retries, cache coherence and restart-safe projection processing. Direct Model changes, atomic multi-Model actions, Graph reads and asynchronous materialization all share the same authoritative commit boundary.

The complete command → result, command → Model and command → Model → Graph routes were characterized throughout development, alongside the existing non-Model routes. The design keeps unrelated Models parallel and avoids rebuilding or serializing a complete Graph when only one Model changes.

Compatibility and RC status

  • Existing messaging, handler, Aggregate, search, scheduling and web APIs remain available for 1.x applications.
  • New persisted state should use @Model; the legacy Aggregate API remains for existing applications and deliberate migrations.
  • Runtime 2.0 remains compatible with 1.x SDK clients.
  • SDK 2.0 can continue to use a 1.x Runtime for existing non-Model capabilities; new Model persistence requires Runtime 2.0.
  • This is the first release candidate. It is intended for realistic application migration, performance and deployment validation before 2.0 GA.

Use the matching immutable RC for SDK and Runtime:

Component Release
Maven BOM io.fluxzero:fluxzero-bom:2.0.0-RC1
Runtime image ghcr.io/fluxzero-io/fluxzero-runtime/fluxzero-runtime:2.0.0-RC1
Test Server image ghcr.io/fluxzero-io/fluxzero-sdk-java/fluxzero-test:2.0.0-RC1
Proxy image ghcr.io/fluxzero-io/fluxzero-sdk-java/fluxzero-proxy:2.0.0-RC1

Start exploring

Fluxzero 2.0 is the point where the code can finally say what the domain already knew: an entity is independent because it has its own life—not because it happens to fit inside somebody else's list.

GitHub

1.244.0 (2026-08-27)

Features
  • web: attach outbound query metric metadata (GitHub)

    Preserve the original raw query under a stable metadata key for both native and proxy metrics while keeping handler payload types unchanged. Keep userinfo and fragments excluded and retain the proxy formatType extension point.

  • web: include request targets in outbound metrics (GitHub)

    Expose the original normalized scheme, hostname, effective port, and raw path for native requests and proxy handler metrics. Keep userinfo, query, fragment, headers, bodies, and exception details outside the metric payload.

  • proxy: enforce outbound redirect policies (GitHub)

    Materialize the application redirect default into proxy-routed messages and enforce NEVER, SAME_ORIGIN, and ALLOW in the forward proxy with bounded same-origin hops. Preserve compatibility for old DEFAULT messages and remove destinations from proxy handler metric types.

  • web: harden native redirects and metrics (GitHub)

    Add versioned redirect policies for native outbound requests and emit privacy-safe transport outcomes through the metrics gateway.

    Bound same-origin redirect forwarding before sensitive headers or bodies are reused while preserving compatibility-mode JDK redirects.

Bug Fixes
  • proxy: keep handler metrics destination-free (GitHub)

    Keep the existing proxy HandleMessageEvent limited to the request method because proxied WebRequests are already observable in their own message log. Target fields and raw-query metadata remain exclusive to native outbound metrics.

Continuous Integration
  • repo: enforce canonical line endings (GitHub)

    Normalize the Maven Windows wrapper in Git while retaining CRLF checkouts through .gitattributes. Fail PR and main builds early when tracked blobs bypass repository normalization.

Tests
  • proxy: await retry delay cancellation (GitHub)

    Observe the cancellation callback instead of sampling the retry future immediately after shutdown handoff. This preserves the shutdown contract while removing the scheduler race from the assertion.

GitHub

1.243.0 (2026-08-27)

Features
  • proxy: schedule asynchronous forwards by segment (GitHub)

    Execute forwarded HTTP calls through one proxy-wide bounded asynchronous scheduler. Preserve exact-segment serial order and durable backpressure, and return unfinished HTTP work to the WebRequest log only when a hard shutdown deadline expires.

Dependency updates
  • bump actions/setup-java from 5 to 6 (GitHub)

    actions/setup-java: 5 -> 6 changelog

GitHub

1.242.0 (2026-08-26)

Tests
  • concurrency: remove async fixture races (GitHub)

    Move active timeout interruption coverage to the timebox owner with an explicit start barrier, and hold the cache-filler tracker out of the delegate-fallback scenario. This preserves cancellation and caching assertions without relying on scheduler order.

GitHub

1.241.0 (2026-08-26)

Features
  • web: support native requests and configurable retries (GitHub)

    Allow outbound web requests to use a lifecycle-managed native HTTP client and configure bounded retries while preserving proxy defaults. Keep fixture endpoint mocks effective and propagate asynchronous cancellation to active native operations.

GitHub

1.240.1 (2026-08-26)

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

    io.fluxzero.tools:fluxzero-maven-plugin: 1.15.2 -> 1.16.0 changelog

GitHub

1.240.0 (2026-08-25)

Features
  • correlation: add deployed application version metadata (GitHub)

    Resolve the optional application version once from the configured property source and attach it through the existing correlation provider. Preserve custom providers and the prepared local dispatch path while making the deployed value authoritative.

GitHub

1.239.12 (2026-08-24)

Dependency updates
  • bump org.springframework:spring-framework-bom from 7.0.8 to 7.0.9 (GitHub)

    org.springframework:spring-framework-bom: 7.0.8 -> 7.0.9 changelog

GitHub

1.239.11 (2026-08-22)

Bug Fixes
  • modeling: retain untyped aggregate type on delete (GitHub)

    Persist the inferred concrete type after untyped aggregate transitions and fall back to the previous type when committing deletions. This lets type-specific searchable repositories remove documents for cached and uncached aggregates.

Tests
  • websocket: await all dispatcher submissions (GitHub)

    Retain both independently admitted staged completions in the callback-failure interleaving before asserting global empty state. This removes a valid completion-order race without changing dispatcher behavior.

GitHub

1.239.10 (2026-08-22)

Bug Fixes
  • modeling: guard delayed aggregate index update (GitHub)

    Guard event-index assignment when a delayed own notification refers to a revision that is no longer retained. Preserve conservative eviction and codify empty cache-value behavior after functional deletes for event-sourced and non-event-sourced aggregates.

GitHub

1.239.9 (2026-08-20)

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

    io.fluxzero.tools:fluxzero-maven-plugin: 1.15.0 -> 1.15.2 changelog

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

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

GitHub

1.239.8 (2026-08-20)

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

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

GitHub

1.239.7 (2026-08-18)

Dependency updates
  • bump ch.qos.logback:logback-classic from 1.6.2 to 1.6.3 (GitHub)

    ch.qos.logback:logback-classic: 1.6.2 -> 1.6.3 changelog

GitHub

1.239.6 (2026-08-17)

Bug Fixes
  • websocket: isolate liveness with staged runtime dispatch (#286) (GitHub)

    fix(websocket): isolate liveness with bounded runtime ingress

    Replace overflow-triggered reconnects with receive-demand backpressure. Separate WebSocket protocol handling, runtime-message decoding, and functional result completion so slow customer callbacks cannot block pong handling or decode progress.

    Process result batches incrementally through a fair, bounded dispatcher. Preserve the existing worker policy: virtual threads on Java 25+ and a lazy platform-thread pool on Java 21–24.

    Introduce these defaults:

    - fluxzero.runtime.ingress.maxConcurrency=3 per session
    - fluxzero.runtime.ingress.maxRetainedMessages=128 per session
    - fluxzero.runtime.ingress.maxRetainedBytes=67108864 per session
    - fluxzero.runtime.ingress.maxCompletionConcurrency=8 per client
    - fluxzero.runtime.ingress.stallCloseTimeout=PT0S (disabled)

    Retain compressed-wire credit through functional completion while releasing compressed payloads after dispatcher admission. Allow a sole oversized message to progress. No activation property is required; applications with measured workloads can override the bounded defaults explicitly.

    Finalize opt-in WebsocketTransportMetric diagnostics, that when enabled with:

    - fluxzero.websocket.transportMetrics.enabled=true

    will report:

    - PING_TIMEOUT
    - RUNTIME_INGRESS_BACKPRESSURED
    - RUNTIME_INGRESS_STALLED
    - RUNTIME_INGRESS_RECOVERED
    - RUNTIME_INGRESS_OVERFLOW
    - RUNTIME_EXECUTOR_REJECTED

    Avoid per-message, ping, or pong metric publication on the healthy path. Suppress transport diagnostics for the metrics WebSocket itself to prevent recursive pressure.

    Document the configuration, liveness policy, diagnostics, and compatibility considerations. Add regression and load coverage for protocol liveness, backpressure, failure recovery, large tracking responses, result ordering, and bounded resource use.

    Co-authored-by: Michel Tiemens <michel@flux.host>

GitHub

1.239.5 (2026-08-17)

Dependency updates
  • bump ch.qos.logback:logback-classic from 1.6.1 to 1.6.2 (GitHub)

    ch.qos.logback:logback-classic: 1.6.1 -> 1.6.2 changelog

GitHub

1.239.4 (2026-08-17)

Dependency updates
  • bump io.fluxzero:lychee-maven-plugin from 0.2.7 to 0.2.9 (GitHub)

    io.fluxzero:lychee-maven-plugin: 0.2.7 -> 0.2.9 changelog

GitHub

1.239.3 (2026-08-16)

Bug Fixes
  • tracking: keep minimum index inclusive (GitHub)

    When a restarted consumer caught up from an older persisted position, a fully filtered batch advanced its exclusive cursor onto the inclusive lower bound and skipped that boundary message. Retain the predecessor cursor until the boundary has actually been scanned.

GitHub

1.239.2 (2026-08-14)

Bug Fixes
  • web: redact sensitive request diagnostics (GitHub)

    Keep request headers, query parameters and arbitrary web metadata out of durable error reports. Reuse a bounded path-only representation for logs, metrics and gateway failures so browser ceremony data is not exposed by diagnostic defaults.

Changes
  • Merge pull request #289 from fluxzero-io/fix/webrequest-error-redaction (GitHub)

    fix(web): redact sensitive request diagnostics

GitHub

1.239.1 (2026-08-14)

Dependency updates
  • bump org.apache.maven:apache-maven from 3.9.15 to 3.9.16 (GitHub)

    org.apache.maven:apache-maven: 3.9.15 -> 3.9.16

GitHub

1.239.0 (2026-08-12)

Features
  • websocket: make runtime ingress capacity configurable (GitHub)

    Expose per-session concurrency and retained message and byte limits while preserving bounded protocol-liveness isolation. Resolve operational properties before SDK defaults and reject invalid client configurations before connecting.

Bug Fixes
  • websocket: isolate liveness with bounded parallel dispatch (GitHub)

    Acknowledge pong deadlines on the protocol path and fence timeout callbacks by registration identity. Dispatch up to three complete SDK runtime messages per session concurrently while retaining fragmented, submitted, active, and pending data within the ingress bound.

    Enable isolation for every SDK runtime client, preserve explicit connector executor affinity, and keep sparse transport anomaly metrics opt-in.

Changes
  • Merge pull request #284 from fluxzero-io/fix/websocket-liveness (GitHub)

    fix(websocket): isolate liveness with bounded parallel dispatch

  • Merge branch 'main' into fix/websocket-liveness (GitHub)
GitHub

1.238.3 (2026-08-12)

Dependency updates
  • bump org.junit:junit-bom from 6.1.2 to 6.1.3 (GitHub)

    org.junit:junit-bom: 6.1.2 -> 6.1.3 changelog

GitHub

1.238.2 (2026-08-12)

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

    com.github.luben:zstd-jni: 1.5.7-12 -> 1.5.7-13

GitHub

1.238.1 (2026-08-11)

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

    io.fluxzero.tools:fluxzero-maven-plugin: 1.14.0 -> 1.15.0 changelog

GitHub

1.238.0 (2026-08-07)

Features
  • web: support multi-value request cookies (GitHub)

    Parse every Cookie header value in logical wire order so split HTTP/2 and HTTP/3 cookie crumbs remain visible. Preserve first-match lookups through the default allow policy while offering explicit conflict rejection with redacted failures.

Bug Fixes
  • web: preserve multi-value cookie consistency (GitHub)

    Use the shared all-header parser for cookie parameters and isolate builder header lists so copied requests cannot mutate their source.

  • correct request header case contract (GitHub)

    WebRequest has always exposed headers through a case-insensitive map; align the public Javadoc with that observable behavior.

Documentation
  • web: document request cookie conflict handling (GitHub)

    Explain HTTP/2 and HTTP/3 cookie-field splitting, case and ordering rules, backward-compatible first-match lookup, and fail-closed guidance for security-sensitive cookies.

Tests
  • web: cover existing request cookie contracts (GitHub)

    Lock down first-match selection, case behavior, header-map replacement, serialization, and the public mutable builder cookie list before extending multi-value parsing.

GitHub

1.237.2 (2026-08-07)

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

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

  • bump io.fluxzero.tools:fluxzero-maven-plugin from 1.13.1 to 1.14.0 (GitHub)

    io.fluxzero.tools:fluxzero-maven-plugin: 1.13.1 -> 1.14.0 changelog

GitHub

1.237.1 (2026-08-07)

Dependency updates
  • bump io.fluxzero:lychee-maven-plugin from 0.2.6 to 0.2.7 (GitHub)

    io.fluxzero:lychee-maven-plugin: 0.2.6 -> 0.2.7 changelog

GitHub

1.237.0 (2026-08-05)

Features
  • websocket: identify replaced sessions on reconnect (GitHub)

    Pass each closed session to its session-pool replacement and advertise the previous negotiated session id in the new websocket handshake. Legacy runtimes safely ignore the new header.

    This allows a supporting runtime to remove one matching stale session only after its replacement has connected.

Bug Fixes
  • websocket: close gracefully before aborting (GitHub)

    Mark unhealthy JDK sessions unavailable immediately, enqueue a close frame without blocking the caller, and allow one second for the peer close before aborting the transport. This lets runtime close callbacks arrive while retaining a bounded fallback for stuck transports.

Code Refactoring
  • websocket: keep replacement factory internal (GitHub)

    Keep the existing public supplier constructor as the only external SessionPool constructor. The replacement-aware function remains package-private to avoid an unnecessary public overload and null-call ambiguity.

GitHub

1.236.0 (2026-08-04)

Features
  • authentication: version user ID metadata (GitHub)

    Store regular users by User.getName() from defaults version 2026.08.04 and resolve those values through getUserById. Preserve compatibility reads and writes for older defaults, and encode the system identity explicitly as the reserved $system ID.

Documentation
  • agent: explain versioned defaults workflow (GitHub)

    Define compatibility behavior, threshold and override precedence, PropertySource selection, migration safety, documentation, and verification expectations for future SDK default changes.

Code Refactoring
  • authentication: centralize metadata value decoding (GitHub)

    Keep JSON encoding knowledge inside Metadata while allowing new defaults to resolve raw user IDs. Object-shaped candidates are validated before mapping, and invalid JSON falls back to the raw string path without penalizing ordinary IDs.

GitHub

1.235.0 (2026-08-04)

Code Refactoring
  • authentication: remove incomplete OIDC provider (GitHub)

    Standard OIDC userinfo resolves the current token identity but does not define arbitrary user lookup, system identity, or application role semantics. Remove the public provider and user type rather than presenting a partial implementation as a general SDK contract.

GitHub

1.234.3 (2026-08-04)

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

    io.fluxzero.tools:fluxzero-maven-plugin: 1.12.2 -> 1.13.1 changelog

GitHub

1.234.2 (2026-08-03)

Bug Fixes
  • logging: avoid stale handler context on console errors (GitHub)

    Console errors logged after a handler invocation completed inherited the publisher's handler and invocation metadata from the triggering message. Remove those two inherited fields before overlaying live correlation data, so active invocations remain attributable while post-invocation logs no longer point at the wrong handler.

GitHub

1.234.1 (2026-08-03)

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

    io.fluxzero.tools:fluxzero-maven-plugin: 1.11.2 -> 1.12.2 changelog

GitHub

1.234.0 (2026-07-31)

Documentation
  • project-files: delegate dev guidance to CLI (GitHub)

    Add version-aligned local-development guidance to the Java and Kotlin agent bundles. Keep SDK behavior in the synced manuals while treating fz help and fz dev config as authoritative for the independently evolving CLI and dev server.

GitHub

1.233.0 (2026-07-30)

Documentation
  • getting-started: recommend native CLI packages (#261) (GitHub)

    Document Homebrew for macOS and WinGet for Windows, including package-manager upgrades and native installer fallbacks. Clarify that Java is required by generated applications rather than the native CLI itself.

GitHub

1.232.6 (2026-07-30)

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

    io.fluxzero.tools:fluxzero-maven-plugin: 1.11.1 -> 1.11.2 changelog

GitHub

1.232.5 (2026-07-29)

Dependency updates
  • update Fluxzero Maven plugin to 1.11.1 (GitHub)
GitHub

1.232.2 (2026-07-27)

Dependency updates
  • bump org.apache.maven.plugins:maven-jar-plugin from 3.5.0 to 3.5.1 (GitHub)

    org.apache.maven.plugins:maven-jar-plugin: 3.5.0 -> 3.5.1 changelog

  • bump com.github.luben:zstd-jni from 1.5.7-11 to 1.5.7-12 (GitHub)

    com.github.luben:zstd-jni: 1.5.7-11 -> 1.5.7-12

GitHub

1.232.0 (2026-07-26)

Features
  • configuration: support environment-style property file names (GitHub)

    Allow SDK-backed property files to resolve conventional and compact environment-variable aliases while preserving exact-key and source precedence.

    Cover additional property locations, alias precedence, and custom source compatibility with focused regression tests.

GitHub

1.231.0 (2026-07-24)

Features
  • search: support batched document deletion (GitHub)

    Add an optional delete batch size to the search API and wire command. Zero selects the runtime default, positive values request bounded batches, and negative values request one unbounded statement. Preserve old-client wire compatibility by mapping missing and null values to zero.

GitHub

1.230.3 (2026-07-24)

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

    io.fluxzero.tools:fluxzero-maven-plugin: 1.8.1 -> 1.9.0 changelog

GitHub

1.230.0 (2026-07-22)

Build System
  • publish multi-platform images with Maven (GitHub)

    Replace the dedicated Docker/Buildx jobs with the Fluxzero Maven plugin for the proxy and test-server images. Reserve the release tag after the tested Maven build and before publishing images, and derive OCI metadata from Maven and Git.

GitHub

1.229.4 (2026-07-21)

Dependency updates
  • bump kotlin.version from 2.4.0 to 2.4.10 (GitHub)
    • kotlin.version: 2.4.0 -> 2.4.10
    • org.jetbrains.kotlin:kotlin-stdlib-jdk8: 2.4.0 -> 2.4.10 changelog
    • org.jetbrains.kotlin:kotlin-reflect: 2.4.0 -> 2.4.10 changelog
    • org.jetbrains.kotlin:kotlin-maven-plugin: 2.4.0 -> 2.4.10
GitHub

1.229.3 (2026-07-21)

Dependency updates
  • bump io.fluxzero:lychee-maven-plugin from 0.2.4 to 0.2.6 (GitHub)

    io.fluxzero:lychee-maven-plugin: 0.2.4 -> 0.2.6 changelog

GitHub

1.229.2 (2026-07-21)

Bug Fixes
  • make Central publication recovery idempotent (GitHub)

    Resume status polling for an already uploaded deployment after transient Central 5xx responses instead of re-uploading the immutable release.

    On GitHub reruns, exclude components that Central already published so a completed release can finish green without duplicate deployment errors.

GitHub

1.229.1 (2026-07-21)

Bug Fixes
  • serialization: preserve direct untyped deserialization (GitHub)

    Keep ordinary String and byte JSON on the existing Jackson reader path so parser extensions and allocation behavior remain intact.

    Only materialize revision metadata candidates, including Unicode-escaped property names, and verify registered nested type resolution.

Documentation
  • agents: strengthen regression review guidance (GitHub)

    Turn broad regression awareness into a concrete high-risk workflow covering behavioral, lifecycle, compatibility, and operational contracts.

    Clarify supported API boundaries and allow generated all-fields constructors to evolve without automatic compatibility overloads.

GitHub

1.229.0 (2026-07-20)

Documentation
  • testing: explain revisioned JSON payloads (GitHub)

    Document the @​class and @​revision shorthand for human readers and for the bundled Java and Kotlin agent guidance.

    Replace the old full Data wrapper examples and clarify that plain revision fields remain payload data.

GitHub

1.228.0 (2026-07-20)

Features
  • testing: support revisioned JSON payloads (GitHub)

    Recognize @​revision alongside @​class in untyped JsonUtils input and represent the payload as Data so normal upcasting can happen before deserialization.

    Keep plain revision properties as domain data and support inherited JSON resources in TestFixture scenarios.

GitHub

1.227.0 (2026-07-19)

Features
  • tracking: serialize async batch handling by segment (GitHub)

    Queue handler invocations for messages that share a non-null serialized segment within the same consumer batch. Messages with different or missing segments remain parallel, while nested asynchronous handler results preserve per-segment ordering.

Performance Improvements
  • tracking: optimize outstanding async request tracking (GitHub)

    Use a concurrent set instead of a copy-on-write list so completing each async handler no longer copies the entire outstanding-request collection. Preserve shutdown waiting behavior with focused regression coverage.

GitHub

1.226.0 (2026-07-19)

Features
  • namespaces: make SDK components namespace-aware (GitHub)

    Keep ordinary application work in the configured application namespace while carrying namespaces across direct messaging relationships. Add canonical namespaced component views, isolated persistence and cache behavior, context-safe asynchronous handling, and focused regression coverage.

Bug Fixes
  • test-server: isolate metrics monitor test events (#260) (GitHub)

    TestServerMetricsMonitorTest registered a global metrics listener and asserted the last observed event. Under class-level parallelism, another test could overwrite it with an unrelated lifecycle event.

    The test now uses a unique client id and filters callbacks to that id, so concurrent test-server metrics cannot overwrite the assertion.

GitHub

1.225.0 (2026-07-19)

Features
  • dev-server: expose local development integration hooks (GitHub)

    Add explicit embedded proxy configuration, test-server readiness observation, structured TestFixture impact data, and a Fluxzero-compatible OIDC user provider.

    Preserve current proxy and fixture lifecycle semantics while making the contracts independently testable by the standalone dev server.

GitHub

1.224.13 (2026-07-17)

Bug Fixes
  • tag SDK releases only after successful builds (GitHub)

    Calculate the final version up front so release artifacts are built and tested with their public coordinates, but defer creating the Git tag until that build succeeds. Gate Maven Central and the other publication jobs on the durable tag, and reuse an existing tag on reruns only when it points to the same commit.

GitHub

1.224.12 (2026-07-17)

Bug Fixes
  • eventsourcing: stop completed limited event fetches (GitHub)

    Treat a response to an explicit maxSize request as the complete result. This prevents an unnecessary follow-up request when the aggregate contains more than the default fetch batch but fewer events than the requested limit.

GitHub

1.224.11 (2026-07-15)

Dependency updates
  • bump distroless/java25-debian13 in /test-server (GitHub)

    distroless/java25-debian13: 4a19823 -> 9ccf2b8

GitHub

1.224.10 (2026-07-15)

Dependency updates
  • bump distroless/java25-debian13 in /proxy (GitHub)

    distroless/java25-debian13: 4a19823 -> 9ccf2b8

GitHub

1.224.9 (2026-07-14)

Bug Fixes
  • publishing: register request callbacks before timeouts (GitHub)

    Register response callbacks before scheduling request timeouts so timeout cleanup cannot leave stale callback entries.

GitHub

1.224.7 (2026-07-14)

Documentation
  • legal: follow counsel privacy notice [skip ci] (GitHub)

    Use the lawyer-provided notice as the substantive baseline while retaining the verified cookie and documentation-feedback corrections required by the live site.

Dependency updates
  • bump actions/setup-node from 6 to 7 (GitHub)

    actions/setup-node: 6 -> 7 changelog

GitHub

1.224.6 (2026-07-13)

Dependency updates
  • bump org.junit:junit-bom from 6.1.1 to 6.1.2 (GitHub)

    org.junit:junit-bom: 6.1.1 -> 6.1.2 changelog

GitHub

1.224.5 (2026-07-12)

Bug Fixes
  • tracking: preserve automatic self-tracking handlers (GitHub)

    Only suppress a registered base or interface handler when a more specific self-tracking handler is actually active. Automatically register concrete self-tracking payload types in both synchronous and asynchronous test fixtures regardless of explicit registrations.

Code Refactoring
  • search: promote collection type enum (GitHub)

    Replace the nested SearchCollection.Type enum with the top-level SearchCollectionType. This avoids generic nested enum names in generated client models while retaining the unknown-value fallback.

GitHub

1.224.4 (2026-07-12)

Bug Fixes
  • proxy: drain forwarded responses during shutdown (GitHub)

    Track forwarded response publications with a durable storage guarantee so graceful shutdown cannot close the client before the runtime has stored an active response.

    Keep normal response handling asynchronous, drain only outstanding publications during shutdown, and replace the lifecycle test sleep with the observable draining state.

GitHub

1.224.2 (2026-07-12)

Performance Improvements
  • handling: cache dynamic handler selection (GitHub)

    Cache resolver applicability and selected handler methods with bounded, opt-in keys while retaining dynamic behavior for filters, entities, Apply handling, and current message values.

    Prepare error reporting alongside other built-in interceptors and avoid rebuilding validation state for constraintless or structurally identical payload classes. Add cross-version allocation and latency benchmarks for resolver selection, the default command stack, and validation plans.

GitHub

1.224.1 (2026-07-12)

Bug Fixes
  • tracking: stabilize websocket shutdown races (GitHub)

    Treat fetch failures after tracker cancellation as normal shutdown while preserving active batch failures.

    Replace scheduler-dependent websocket test timing with deterministic read registration, bound proxy lifecycle completion, and serialize nested proxy tests that share process state.

GitHub

1.224.0 (2026-07-11)

No commits were found for this release.

GitHub

1.223.0 (2026-07-11)

Features
  • retry: add capped exponential backoff (GitHub)

    Provide a reusable exponential delay function with a configurable initial delay and upper bound. Use it by default for forever-retrying handlers while allowing those handlers to accept a complete RetryConfiguration.

GitHub

1.222.1 (2026-07-11)

Bug Fixes
  • spring: close Fluxzero after application beans (GitHub)

    Stop handler tracking when the Spring context begins closing while handlers and Fluxzero are still available. Defer closing the Spring-managed Fluxzero instance until regular application beans have been destroyed.

GitHub

1.222.0 (2026-07-11)

Features
  • dataprotection: configure missing protected data handling (GitHub)

    Add HANDLE, WARN, SKIP, and FAIL policies for protected values that have already been dropped, with handler, consumer, builder, and property overrides.

    Keep HANDLE backward compatible, publish ignore metrics for skipped invocations, suppress handler responses and handling metrics, and support both expanded and compact environment variable aliases.

GitHub

1.221.0 (2026-07-11)

Features
  • lifecycle: harden application and proxy shutdown (GitHub)

    Publish connected application lifecycle metrics without blocking startup, and keep test fixtures free from infrastructure metrics.

    Coordinate tracker cancellation before waiting, bound idle tracker thread shutdown, and add proxy readiness, load-balancer drain, and bounded outbound batch completion.

Documentation
  • legal: simplify schedule links [skip ci] (GitHub)

    Remove the embedded PDF reader, link earlier NLDigital references to Schedule 1, and keep the schedule itself to a single English PDF link.

Tests
  • harden parallel test execution (GitHub)

    Wait for SLF4J provider initialization before accessing Logback-specific test APIs. Keep the tested parallelism default while allowing explicit benchmark overrides, and bound forked JVM execution so future hangs terminate cleanly.

GitHub

1.220.1 (2026-07-11)

Bug Fixes
  • configuration: log encryption initialization once (GitHub)
Documentation
  • legal: align public policies [skip ci] (GitHub)

    Publish the lawyer-provided Platform Terms and update the privacy and cookie notices to match the current website behavior. Document the short-lived OAuth state cookie and attach the complete NLDigital Terms as Schedule 1 through the site-hosted PDF.

GitHub

1.220.0 (2026-07-11)

Features
  • search: expose existing search collections (GitHub)

    Add a typed search collection listing operation to the low-level client and document store, including websocket and in-memory support. Treat unknown collection types as an explicit fallback to preserve forward compatibility.

GitHub

1.219.5 (2026-07-11)

Bug Fixes
  • modeling: scope active aggregates by repository (GitHub)

    Keep aggregate identity unique within a repository while isolating nested or interleaved repository executions on the same worker thread. Preserve the legacy low-level thread scope and cover repository isolation and cleanup with a regression test.

Documentation
  • agent: clarify regression and compatibility guidance (GitHub)
GitHub

1.219.4 (2026-07-10)

Dependency updates
  • common: remove Apache Commons Lang runtime dependency (GitHub)

    Replace the remaining Commons Lang string, reflection, exception, type, and equality helpers with JDK and SDK-native implementations.

    Preserve Unicode and collection type behavior, and make generic override traversal deterministic and cycle-safe. Add regression coverage for diamond hierarchies, local collection types, supplementary Unicode, and self-referential bounds.

    Downstream projects no longer receive commons-lang3 transitively.

GitHub

1.219.1 (2026-07-10)

Bug Fixes
  • scheduling: handle missing schedule metrics (GitHub)
GitHub

1.219.0 (2026-07-10)

Documentation
  • web: document automatic response mapping (GitHub)

    Surface DefaultWebResponseMapper in the README and Java/Kotlin agent entrypoints. Tell endpoint authors to let standard validation and functional exceptions propagate instead of recreating built-in HTTP mappings.

GitHub

1.218.1 (2026-07-10)

Bug Fixes
  • serialization: flatten split upcasts in event fixtures (GitHub)

    Deserialize SerializedMessage event inputs through the streaming serializer path so multi-output upcasters contribute every result to givenEvents and givenAppliedEvents. Add regression coverage for publishing and aggregate application.

GitHub

1.218.0 (2026-07-10)

Features
  • serialization: support metadata-aware upcasters (GitHub)

    Allow upcasters to inject message metadata directly and return replacement metadata while preserving the payload and advancing the revision. Respect repository-wide Nullable semantics for non-message inputs and document the supported contracts.

GitHub

1.217.0 (2026-07-10)

Features
  • caching: add batched cache writes (GitHub)

    Add putAll to mutate a cache batch under one lock and perform a single memory-pressure check after the batch. Preserve the existing admission, weight, ordering, and eviction behavior for each entry.

GitHub

1.216.0 (2026-07-10)

Features
  • proxy: route web requests by configured header (GitHub)

    Add optional header-based segment selection for regular, chunked, and websocket lifecycle messages while preserving existing routing when the header is absent.

    Handle Integer.MIN_VALUE safely in ConsistentHashing without remapping other hash values.

GitHub

1.215.7 (2026-07-10)

Dependency updates
  • bump ch.qos.logback:logback-classic from 1.5.37 to 1.5.38 (GitHub)

    ch.qos.logback:logback-classic: 1.5.37 -> 1.5.38 changelog

GitHub

1.215.6 (2026-07-09)

Bug Fixes
  • proxy: keep websocket sessions alive with pings (GitHub)

    Send proxy-owned websocket keep-alive pings after a successful open and close sessions that do not answer with a pong before the timeout.

    Keep proxy keep-alive pongs internal so application @​HandleSocketPong methods only see application-level pings, and make websocket idle/keep-alive timings configurable.

GitHub

1.215.5 (2026-07-09)

Dependency updates
  • bump distroless/java25-debian13 in /proxy (GitHub)

    distroless/java25-debian13: dade01b -> 4a19823

GitHub

1.215.4 (2026-07-09)

Dependency updates
  • bump distroless/java25-debian13 in /test-server (GitHub)

    distroless/java25-debian13: dade01b -> 4a19823

GitHub

1.215.3 (2026-07-08)

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

    org.eclipse.jetty:jetty-bom: 12.1.10 -> 12.1.11 changelog

  • bump com.fasterxml.jackson:jackson-bom from 2.22.0 to 2.22.1 (GitHub)

    com.fasterxml.jackson:jackson-bom: 2.22.0 -> 2.22.1

GitHub

1.215.2 (2026-07-08)

Dependency updates
  • bump io.fluxzero:lychee-maven-plugin from 0.2.3 to 0.2.4 (GitHub)

    io.fluxzero:lychee-maven-plugin: 0.2.3 -> 0.2.4 changelog

GitHub

1.215.1 (2026-07-07)

Documentation
  • faq: link overview cards [skip ci] (GitHub)
  • changelog: improve release notes [skip ci] (GitHub)
  • changelog: make release note styles mdx safe [skip ci] (GitHub)

    Render the commit-message details styles through an MDX expression so the site build can parse the synced changelog page.

Dependency updates
  • bump at.yawk.lz4:lz4-java from 1.11.0 to 1.11.1 (GitHub)

    at.yawk.lz4:lz4-java: 1.11.0 -> 1.11.1 changelog

Build System
  • release: generate full release notes [skip ci] (GitHub)

    Use a small release notes generator so future GitHub releases and the site changelog can include wrapped full commit messages.

    Skip the SDK deploy workflow for this tooling/docs update so it does not publish a new SDK version.

GitHub

1.215.0 (2026-07-03)

Changes
  • Normalize proxy CORS headers (GitHub)
GitHub

1.214.2 (2026-07-03)

Bug Fixes
  • modeling: deserialize polymorphic id subtypes (GitHub)
GitHub

1.214.1 (2026-07-02)

Bug Fixes
  • tracking: wait for active batches before unregistering handlers (GitHub)
GitHub

1.214.0 (2026-06-30)

No commits were found for this release.

GitHub

1.213.0 (2026-06-30)

Continuous Integration
  • registry: publish SDK images with GitHub OIDC (GitHub)
GitHub

1.212.3 (2026-06-30)

Dependency updates
  • bump io.fluxzero:lychee-maven-plugin from 0.2.2 to 0.2.3 (GitHub)

    io.fluxzero:lychee-maven-plugin: 0.2.2 -> 0.2.3 changelog

GitHub

1.212.2 (2026-06-29)

Dependency updates
  • bump org.junit:junit-bom from 6.1.0 to 6.1.1 (GitHub)

    org.junit:junit-bom: 6.1.0 -> 6.1.1 changelog

GitHub

1.212.1 (2026-06-29)

Dependency updates
  • bump ch.qos.logback:logback-classic from 1.5.36 to 1.5.37 (GitHub)

    ch.qos.logback:logback-classic: 1.5.36 -> 1.5.37 changelog

GitHub

1.212.0 (2026-06-26)

Continuous Integration
  • repair: gate autorepair PRs by label (GitHub)
GitHub

1.211.6 (2026-06-26)

Dependency updates
  • bump ch.qos.logback:logback-classic from 1.5.34 to 1.5.36 (GitHub)

    ch.qos.logback:logback-classic: 1.5.34 -> 1.5.36 changelog

  • bump io.fluxzero:lychee-maven-plugin from 0.2.1 to 0.2.2 (GitHub)

    io.fluxzero:lychee-maven-plugin: 0.2.1 -> 0.2.2 changelog

GitHub

1.211.5 (2026-06-26)

Bug Fixes
  • web: serve static resources from jars (GitHub)

    StaticFileHandler cached regular JAR resources with the underlying file URI instead of a jar:file URI, so classpath static content from dependency jars failed at runtime. Add a focused regression test that serves an index.html from a temporary jar.

Tests
  • web: cover exploded static resource URIs (GitHub)
GitHub

1.211.4 (2026-06-25)

Dependency updates
  • bump actions/checkout from 6 to 7 (GitHub)

    actions/checkout: 6 -> 7 changelog

Continuous Integration
  • repair: use agent-generated repair titles [skip ci] (GitHub)

    Ask the repair agent for a repo-style Conventional Commit title and validate it before using it for the generated commit and PR title. Include the repair context and Codex report in the commit body so automated fixes are easier to review.

GitHub

1.211.3 (2026-06-25)

Bug Fixes
  • web: remove spring supplier from web response (GitHub)

    Add a Fluxzero ThrowingSupplier in common and use it for WebResponse stream responses. This keeps the web API free from a Spring utility type while preserving checked-exception handling through ObjectUtils.asSupplier.

GitHub

1.211.2 (2026-06-23)

Dependency updates
  • bump io.fluxzero:lychee-maven-plugin from 0.2.0 to 0.2.1 (GitHub)

    io.fluxzero:lychee-maven-plugin: 0.2.0 -> 0.2.1 changelog

GitHub

1.211.1 (2026-06-22)

Dependency updates
  • bump io.fluxzero:lychee-maven-plugin from 0.1.1 to 0.2.0 (GitHub)

    io.fluxzero:lychee-maven-plugin: 0.1.1 -> 0.2.0 changelog

GitHub

1.211.0 (2026-06-22)

Features
  • handling: add consumer handling modes (GitHub)

    Add SYNC/ASYNC/DEFAULT consumer handling mode configuration through @​Consumer, ConsumerConfiguration, builder defaults, and tracking properties.

    Resolve defaults before runtime handling, enable async WEBREQUEST defaults for fluxzero.defaults.version >= 2026.06.20, and propagate Fluxzero tracking context into async worker threads.

GitHub

1.210.6 (2026-06-21)

Bug Fixes
  • modeling: order assert legal methods deterministically (GitHub)
GitHub

1.210.5 (2026-06-19)

Bug Fixes
  • reflection: skip lambda metafactory without full lookup access (GitHub)
GitHub

1.210.4 (2026-06-19)

Bug Fixes
  • web: allow double dots in static filenames (GitHub)

    Only reject .. when it is a complete path segment so generated asset names such as font..woff2 are served normally while traversal attempts remain blocked.

GitHub

1.210.3 (2026-06-19)

Bug Fixes
  • web: allow tildes in static file names (GitHub)
GitHub

1.210.2 (2026-06-19)

Bug Fixes
  • reflection: ignore parameterized property methods (GitHub)
GitHub

1.210.1 (2026-06-19)

Bug Fixes
  • routing: resolve type routing keys via interfaces (GitHub)
GitHub

1.210.0 (2026-06-18)

Features
  • web: serve clean static URLs (GitHub)

    Resolve extensionless static requests through exact paths, .html files, directory indexes, and finally the configured fallback.

    Add cleanUrls as an opt-out on @​ServeStatic and document the new behavior.

Bug Fixes
  • modeling: prefer alias owners when resolving entities (GitHub)
GitHub

1.209.0 (2026-06-18)

Features
  • configuration: resolve property file placeholders (GitHub)

    Resolve placeholders returned from file-backed property sources so application property aliases can expose environment variables under stable application names.

    Keep environment variables and system properties raw to avoid interpreting values that previously passed through unchanged. Leave unresolved placeholders in property files raw during normal lookups, while preserving strict behavior for explicit substituteProperties calls.

Bug Fixes
  • modeling: deserialize id subtypes from scalar values (GitHub)

    Jackson can treat single-string Id subtype constructors as property creators when parameter names are available, and collection element deserializers only receive the container property context. Add a contextual Id deserializer that resolves concrete Id subtypes, including contained collection element types, and invokes their String constructor through ReflectionUtils.

  • authentication: align invocation user fallback (GitHub)

    Use the same user resolution during handler invocation as authorization so unsigned web requests see the active fallback consistently in User.getCurrent() and User parameter injection.

Documentation
  • handling: clarify document handler annotation styles (GitHub)
GitHub

1.208.3 (2026-06-17)

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

    com.github.luben:zstd-jni: 1.5.7-10 -> 1.5.7-11

GitHub

1.208.2 (2026-06-17)

Dependency updates
  • bump org.sonatype.central:central-publishing-maven-plugin (GitHub)

    org.sonatype.central:central-publishing-maven-plugin: 0.10.0 -> 0.11.0

GitHub

1.208.1 (2026-06-16)

Bug Fixes
  • proxy: gate namespace header handling (GitHub)

    Add FLUXZERO_PROXY_NAMESPACE_HEADER_MODE with raw, signed, and disabled modes. The default raw mode keeps existing behavior, while signed requires a valid JWT-backed namespace header and disabled rejects the namespace override header entirely.

  • proxy: avoid caching namespace headers (GitHub)

    Do not memoize decoded namespace values by client-supplied header content. JWKS keys remain cached in JwtVerifier while arbitrary namespace/JWT values no longer grow an unbounded proxy-side cache.

  • proxy: suppress implementation response headers (GitHub)

    Disable Jetty implementation headers and filter implementation-identifying headers from proxied runtime responses.

GitHub

1.208.0 (2026-06-16)

Code Refactoring
  • tests: replace system properties with `TestFixture` (GitHub)

    Replace direct system property manipulation in tests with `TestFixture` to improve test readability, isolation, and maintainability.

GitHub

1.207.0 (2026-06-16)

No commits were found for this release.

GitHub

1.206.0 (2026-06-16)

Code Refactoring
  • authentication: mark DEFAULT_USER_KEY as final (GitHub)
GitHub

1.205.0 (2026-06-11)

No commits were found for this release.

GitHub

1.204.1 (2026-06-11)

Dependency updates
  • bump actions/github-script from 8 to 9 (GitHub)

    actions/github-script: 8 -> 9 changelog

GitHub

1.204.0 (2026-06-10)

Continuous Integration
  • notify site after sdk build (GitHub)
GitHub

1.203.0 (2026-06-10)

Documentation
  • sdk: move developer docs into sdk repo (GitHub)
GitHub

1.202.0 (2026-06-10)

Features
  • tracking: await send-and-forget futures (GitHub)

    Register fire-and-forget gateway futures with the active async completion scope and await them at the tracking batch boundary before storing position. Add a per-consumer opt-out and cover the default, disabled, and error-handler paths.

Documentation
  • project-files: clarify command query consistency (GitHub)
GitHub

1.201.0 (2026-06-10)

Features
  • tracking: await aggregate commits before results (GitHub)

    Delay request result publication when post-handler aggregate commits are still pending, so command results only return after async searchable aggregate commits have completed.

GitHub

1.200.0 (2026-06-09)

Features
  • modeling: add batch-awaited async aggregate commits (GitHub)

    Introduce an aggregate commit policy that starts async commits after each handler while retaining active aggregates and awaiting completion at batch end.

    Use this policy for the latest defaults version so new applications get early commit dispatch without fire-and-forget batch completion.

GitHub

1.199.1 (2026-06-09)

Bug Fixes
  • tracking: complete tracker requests via futures (GitHub)

    DefaultTrackingStrategy now owns pending read and claim futures so disconnects can complete in-flight requests as well as waiting trackers. Segment claims return ClaimResult instead of an empty MessageBatch, and Tracker no longer carries websocket send callbacks.

Code Refactoring
  • tracking: simplify strategy read contract (GitHub)

    Let DefaultTrackingStrategy own the PositionStore instead of threading it through each read or segment claim. Return CompletableFuture results directly from test-server tracking handlers and treat cancelled async websocket results as no response.

Chores
  • remove unused changelog and simplify commit guidelines (GitHub)
GitHub

1.199.0 (2026-06-09)

No commits were found for this release.

GitHub

1.198.0 (2026-06-09)

No commits were found for this release.

GitHub

1.197.0 (2026-06-09)

Features
  • eventsourcing: add aggregate commit policies (GitHub)

    Adds explicit aggregate commit policies for sync/async after-handler and after-batch commits while preserving legacy sync-after-batch behavior for applications without a defaults version. New defaults can resolve DEFAULT to async-after-batch, and the property value default now falls through to defaults-version or legacy behavior.

  • tracking: allow async results without blocking batches (GitHub)

    Consumers can opt out of awaiting asynchronous handler results before completing the current batch. The default remains true, so existing consumers keep the previous completion semantics.

Bug Fixes
  • tracking: preserve handler failure stop signal (GitHub)

    Keep BatchProcessingException from stopTracker visible to the tracker after reporting handler failures, so failed messages are not marked as processed.

    Also update aggregate playback commit-failure coverage to assert the expected failure while still checking cache invalidation.

  • tracking: keep async results fire-and-forget by default (GitHub)

    Restore the historical behavior for CompletionStage handler results by making awaitAsyncResults default to false. When the option is explicitly enabled, the tracker now collects result publication stages and waits for them before completing the current batch.

  • sdk: avoid websocket client stalls (GitHub)
Performance Improvements
  • proxy: reduce lifecycle test overhead (GitHub)

    Lazy-initialize LZ4 helpers so websocket capability parsing does not eagerly load native compression.

    Add a proxy metrics switch and keep the lifecycle test focused on startup and forwarding by disabling metrics and compression there.

  • eventsourcing: run aggregate commits asynchronously (GitHub)

    Aggregate commits now return futures that are registered in a completion scope, so handler and batch callbacks can start all commit work before waiting for the combined completion. Searchable document publication remains ordered after event storage to preserve the previous correctness contract.

Code Refactoring
  • modeling: remove aggregate commitInBatch (GitHub)

    Use commitPolicy as the only aggregate-level commit timing API. The default fallback remains sync_after_batch unless a newer defaults version or explicit property selects another policy.

    Projects that used @​Aggregate(commitInBatch = ...) must switch to @​Aggregate(commitPolicy = ...).

  • configuration: centralize defaults version handling (GitHub)

    Move defaults version parsing to ApplicationProperties so cache, scheduling, tracking, TestFixture, and aggregate commit policy resolution share the same behavior.

    Also document websocket result diagnostics modes and metadata helpers.

  • websocket: gate result diagnostics by mode (GitHub)

    Websocket result diagnostics now use NONE, DEFAULT, and HEAVY modes. The default keeps runtime result timing metadata, the legacy timing boolean still enables HEAVY, and low-level receive timestamps are only captured when HEAVY is active.

GitHub

1.196.1 (2026-06-09)

Dependency updates
  • bump org.springframework:spring-framework-bom from 7.0.7 to 7.0.8 (GitHub)

    org.springframework:spring-framework-bom: 7.0.7 -> 7.0.8 changelog

GitHub

1.196.0 (2026-06-08)

Features
  • search: add async search operations (GitHub)

    Add asynchronous fetch, count, aggregate, grouped aggregate, histogram, and facet stats support for search.

    The WebSocket search client now uses native async request/response calls, while other SearchClient implementations get bounded fallback adapters. Document the new APIs in Javadocs and agent manuals.

Bug Fixes
  • proxy: gate benchmark trace headers (GitHub)

    Require proxy startup opt-in before returning benchmark tracing headers, even when a request includes the benchmark trace id header.

GitHub

1.195.6 (2026-06-08)

Dependency updates
  • bump docker/setup-qemu-action from 3 to 4 (GitHub)

    docker/setup-qemu-action: 3 -> 4 changelog

GitHub

1.195.5 (2026-06-08)

Dependency updates
  • bump docker/setup-buildx-action from 3 to 4 (GitHub)

    docker/setup-buildx-action: 3 -> 4 changelog

GitHub

1.195.4 (2026-06-07)

Bug Fixes
  • tracking: avoid blocking client-controlled position stores (GitHub)

    Store client-controlled tracker positions with SENT guarantee so tracking can keep reading without waiting for the runtime storage acknowledgement.

    Failures are logged with tracking context, but not retried from the tracker thread.

GitHub

1.195.3 (2026-06-06)

Bug Fixes
  • web: handle null and empty headers in WebResponse metadata (GitHub)

    Simplify `asMetadata` logic by returning metadata without headers if null or empty, and update `WebResponse` constructor to use `asMetadata` directly.

GitHub

1.195.2 (2026-06-06)

Bug Fixes
  • improve ProxyServerLifecycleTest reliability (GitHub)

    Increase test timeout, replace fixed ports with dynamic allocation, and add retries for forwarded health checks to reduce flakiness.

GitHub

1.195.1 (2026-06-06)

Bug Fixes
  • serialization: bound ZSTD compression contexts (GitHub)

    Replace SDK CompressionUtils thread-local ZSTD contexts with bounded CompressionAlgorithm resource pools to avoid native memory retention on long-lived websocket/proxy threads.

    Move compression call sites to CompressionAlgorithm, remove the obsolete utility facade, and add proxy compression algorithm configuration.

GitHub

1.195.0 (2026-06-06)

No commits were found for this release.

GitHub

1.194.0 (2026-06-06)

Chores
  • workflows: add multi-architecture support for Docker builds (GitHub)

    Set up QEMU and Buildx actions, and configure Docker builds to support `linux/amd64` and `linux/arm64` platforms for test-server and proxy.

GitHub

1.193.0 (2026-06-05)

Features
  • proxy: add benchmark trace response headers (GitHub)

    Add optional benchmark timing headers to proxied HTTP responses when the incoming request carries X-Fluxzero-Benchmark-Trace-Id. The proxy records the runtime webresponse index timestamp, proxy receive time, and send-start time without retaining request or response bodies.

GitHub

1.192.0 (2026-06-04)

Code Refactoring
  • replace deprecated API usage (GitHub)

    Replace deprecated Jackson, Zstd, Jetty, and Jakarta Validation API usage while preserving the existing behavior.

    Keep the deprecated LZ4 native insecure factory as an explicit performance exception because LZ4Factory.fastestInstance() does not select the JNI fast decompressor in the current LZ4 release.

GitHub

1.191.1 (2026-06-04)

Bug Fixes
  • publishing: complete pending requests on close (GitHub)

    Fail any request callbacks that remain after the graceful close wait so callers cannot hang once timeout tasks have been cancelled.

  • proxy: avoid retaining proxied request payloads (GitHub)

    Capture compact proxy response contexts instead of full WebRequest state in pending callbacks, and add an optional max-in-flight guardrail that defaults to off.

    Cancel request timeout tasks after completion and trim related retained allocations in backlog, websocket, and correlation helpers.

GitHub

1.191.0 (2026-06-04)

Features
  • websocket: configure max in-flight websocket bytes (GitHub)
GitHub

1.190.8 (2026-06-04)

Bug Fixes
  • entity: keep relationship cache in sync with aggregate evictions (GitHub)

    Introduce a RelationshipsCache wrapper so repositories can invalidate relationship lookups when cached aggregate state is evicted after commit or playback failures.

    Covers same-client index failures, foreign replay failures, stale no-event commits, commit failures, and stale child lookups that still point at an evicted aggregate.

GitHub

1.190.7 (2026-06-03)

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

    com.github.luben:zstd-jni: 1.5.7-9 -> 1.5.7-10

  • bump org.eclipse.jetty:jetty-bom from 12.1.9 to 12.1.10 (GitHub)

    org.eclipse.jetty:jetty-bom: 12.1.9 -> 12.1.10 changelog

  • bump com.fasterxml.jackson:jackson-bom from 2.21.4 to 2.22.0 (GitHub)

    com.fasterxml.jackson:jackson-bom: 2.21.4 -> 2.22.0

GitHub

1.190.6 (2026-06-03)

Dependency updates
  • bump kotlin.version from 2.3.21 to 2.4.0 (GitHub)
    • kotlin.version: 2.3.21 -> 2.4.0
    • org.jetbrains.kotlin:kotlin-stdlib-jdk8: 2.3.21 -> 2.4.0 changelog
    • org.jetbrains.kotlin:kotlin-reflect: 2.3.21 -> 2.4.0 changelog
    • org.jetbrains.kotlin:kotlin-maven-plugin: 2.3.21 -> 2.4.0
GitHub

1.190.5 (2026-06-03)

Bug Fixes
  • tracking: default read fetch byte limit (GitHub)

    Keep the raw consumer maxFetchBytes default at -1 so annotations and builders inherit the configured default without rewriting consumer configurations during Fluxzero build.

    Resolve fluxzero.tracking.maxFetchBytes through ApplicationProperties as a lazy effective value and warm it once when trackers start, so read requests still send a concrete non-negative byte limit. Explicit 0 remains unbounded and explicit positive values keep overriding the global default.

GitHub

1.190.4 (2026-06-03)

Bug Fixes
  • flag sync fixture consumer deadlocks (GitHub)

    Detect nested request dispatches in synchronous TestFixtures when the waiting handler and nested handler can run on the same single-threaded consumer.

    Track request dispatches through DispatchInterceptor, mirror production consumer assignment in the fixture, and skip local, self, passive, fire-and-forget, and multi-threaded consumer cases.

    Tested with ./mvnw -pl sdk -Dtest=TestFixtureDeadlockDetectionTest test.

GitHub

1.190.3 (2026-06-03)

Bug Fixes
  • handling: defer entity resolution for stateful matching (GitHub)

    Avoid resolving Entity parameters while probing stateful handler candidates, unless the parameter is needed as an association source for the repository lookup.

    Cache active-message entity resolutions so multiple matching stateful instances do not replay the same aggregate repeatedly.

GitHub

1.190.2 (2026-06-03)

Bug Fixes
  • metrics: keep metrics payloads out of JsonType (GitHub)

    JsonType is the websocket protocol boundary for runtime requests and results. Runtime lifecycle/connect events and SDK metrics are metrics payloads, so they should serialize through message payload type metadata instead of the JsonType discriminator list.

    Update the test-server metrics log to accept plain Object payloads and keep the existing lifecycle serialization coverage aligned with that boundary.

GitHub

1.190.1 (2026-06-03)

Bug Fixes
  • modeling: infer aggregate type for untyped loads (GitHub)

    Infer the aggregate type from the first known event when an untyped aggregate load cannot resolve it from relationship metadata. This lets the normal typed event-sourcing path honor aggregate annotations such as ignoreUnknownEvents while still failing fast if the first event type is unknown.

GitHub

1.190.0 (2026-06-02)

Features
  • tracking: limit read batches by payload bytes (GitHub)

    Add maxFetchBytes/maxBytes to tracking read configuration and wire protocol so clients can request batches bounded by serialized payload bytes as well as message count.

    Apply the limit in common tracking, local/cache/direct read paths, and the test server while preserving progress for a first oversized message and backward-compatible decoding when maxBytes is absent.

Bug Fixes
  • common: cap backlog batch allocation (GitHub)
  • websocket: reuse JDK client in connector (GitHub)

    Derive one internal HttpClient per JdkWebsocketConnector instead of creating one for every websocket connection. Keep successful handshake header capture via a shared CookieHandler wrapper and per-handshake Sec-WebSocket-Accept mapping so runtime session metadata remains isolated per connection.

  • tracking: scan reads with byte-aware filters (GitHub)

    Push tracking read filtering into MessageStore scans so maxBytes can be applied while scanning accepted messages instead of after materializing an unfiltered batch.

    Return scan metadata with accepted messages so DefaultTrackingStrategy can keep unfiltered source progress while avoiding cursor skips when a byte limit stops before the next matching message.

GitHub

1.189.0 (2026-06-02)

Features
  • websocket: add binary transport with partial sends (GitHub)

    Negotiate CBOR websocket transport with JSON fallback and keep byte arrays binary on the wire. Add ZSTD compression support for negotiated websocket clients while preserving legacy LZ4 compatibility, including runtimes that still select compression only through the URL query parameter.

    Move websocket batch sending to ordered async sends with bounded in-flight bytes, send timeouts, and native partial binary frames on the JDK client and Jetty test server. This avoids serial send bottlenecks and turns stuck/failed sends into session aborts instead of hung backlog workers.

    Extend the tracker benchmark knobs and fix cached tracking reads so cache-backed consumers wait for cache updates instead of timing out or falling through incorrectly under benchmark load.

Performance Improvements
  • websocket: apply backpressure during client result decoding (GitHub)

    Handle incoming websocket messages within the JDK receive callback so the client only requests the next frame after decode/result dispatch has made progress. This prevents the receive side from acknowledging more websocket traffic while large result batches are still queued behind the client-side
    executor.

    This keeps load-induced pressure at the transport boundary instead of letting callback queues grow independently from websocket flow control.

Code Refactoring
  • caching: move low-level cache types to common (GitHub)

    Move the shared cache contract, eviction model, no-op implementation, and adaptive object cache into the common module so SDK-level cache wrappers can stay focused on SDK concerns. Update SDK configuration, repositories, Spring integration, tests, and generated FQN guidance to consume the common cache API.

GitHub

1.188.1 (2026-06-01)

Dependency updates
  • bump ch.qos.logback:logback-classic from 1.5.33 to 1.5.34 (GitHub)

    ch.qos.logback:logback-classic: 1.5.33 -> 1.5.34 changelog

GitHub

1.188.0 (2026-05-29)

Features
  • caching: add memory-aware adaptive cache (GitHub)

    Introduce common memory-aware hard-reference cache support with explicit pressure trimming, global oldest-first eviction across registered caches, and targeted stress coverage.

    Replace the public DefaultCache type with SoftReferenceCache for the old behavior, add AdaptiveObjectCache for SDK object/aggregate caching, and gate the new default aggregate cache behind fluxzero.defaults.version >= 2026.05.25 or fluxzero.cache.mode=adaptive.

Continuous Integration
  • repair: reduce repair agent reasoning effort (GitHub)

    Keep GPT-5.5 for main CI repairs, but lower the default reasoning effort from xhigh to high so the repair agent has a saner cost/latency profile after adding tighter prompt and verification guardrails.

  • repair: bound agent verification work (GitHub)
  • repair: preload failure context for agent (GitHub)
GitHub

1.187.1 (2026-05-29)

Bug Fixes
  • repair failing main build (GitHub)
GitHub

1.187.0 (2026-05-29)

No commits were found for this release.

GitHub

1.186.2 (2026-05-29)

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

    org.apache.maven.plugins:maven-dependency-plugin: 3.10.0 -> 3.11.0 changelog

  • bump com.fasterxml.jackson:jackson-bom from 2.21.3 to 2.21.4 (GitHub)

    com.fasterxml.jackson:jackson-bom: 2.21.3 -> 2.21.4

  • bump ch.qos.logback:logback-classic from 1.5.32 to 1.5.33 (GitHub)

    ch.qos.logback:logback-classic: 1.5.32 -> 1.5.33 changelog

GitHub

1.186.1 (2026-05-29)

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

    org.apache.maven.plugins:maven-site-plugin: 3.21.0 -> 3.22.0 changelog

GitHub

1.186.0 (2026-05-28)

Continuous Integration
  • repair: authenticate Codex before repair run (GitHub)
GitHub

1.185.5 (2026-05-28)

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

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

GitHub

1.185.4 (2026-05-27)

Bug Fixes
  • tracking: expand split upcast messages (GitHub)

    DefaultTracking now preserves split-upcaster output by adding all DeserializingMessages produced for a serialized message instead of only the first result. Move the regression coverage out of chunked streaming tests into a dedicated tracking deserialization test.

GitHub

1.185.3 (2026-05-27)

Bug Fixes
  • modeling: limit message entity injection (#205) (GitHub)

    Prevent EntityParameterResolver from participating in non-event/notification tracking handlers while preserving internal HasEntity resolution paths.

    Require aggregate metadata to resolve to a compatible aggregate type before replaying an aggregate from metadata, avoiding accidental aggregate loads from copied error metadata or moved unknown types.

  • modeling: limit message entity injection (GitHub)

    Prevent EntityParameterResolver from participating in non-event/notification tracking handlers while preserving internal HasEntity resolution paths.

    Require aggregate metadata to resolve to a compatible aggregate type before replaying an aggregate from metadata, avoiding accidental aggregate loads from copied error metadata or moved unknown types.

GitHub

1.185.2 (2026-05-25)

Dependency updates
  • bump distroless/java25-debian13 in /proxy (GitHub)

    distroless/java25-debian13: 8fd23b8 -> dade01b

GitHub

1.185.1 (2026-05-25)

Dependency updates
  • bump distroless/java25-debian13 in /test-server (GitHub)

    distroless/java25-debian13: 8fd23b8 -> dade01b

GitHub

1.185.0 (2026-05-25)

Features
  • benchmark: add tracker preload mode (GitHub)

    Replace the old publishMode/concurrentPublish switch with an explicit benchmark mode: PRELOAD, BULK, or CONCURRENT. PRELOAD publishes the event set before registering consumers so profiling can focus on post-publish drain behavior.

  • benchmark: allow local tracker client mode (GitHub)

    Add a clientMode property to TrackerIntegrationBenchmark so it can run either against the default websocket/TestServer path or a shared LocalClient in-memory store.

    The local path intentionally reuses one root LocalClient across benchmark Fluxzero instances so default consumers and publishers observe the same message log.

Bug Fixes
  • handling: guard reusable handler fast path (GitHub)

    Do not let generic delegating handlers expose reusable handler methods. Decorators that only override invoker resolution can otherwise be bypassed by the optimized DefaultTracking path.

    Add regression coverage for expired request filtering, websocket lifecycle decorators, protected data restoration, lazy payload selection, and error-reporting policy on reusable handler methods.

  • handling: keep payload preparation lazy (GitHub)

    Avoid reading serialized payloads while preparing payload parameter resolvers. Handler selection can use the serialized payload class, while actual payload deserialization remains deferred until the selected invoker resolves its argument.

    If a payload is already in memory or already deserialized, the resolver still reuses it for nullability checks. Chunked typed payloads remain lazy so selection does not wait for the final chunk.

  • benchmark: isolate tracker clients per run (GitHub)

    Give TrackerIntegrationBenchmark clients a run-specific id suffix derived from the namespace so TestServer command-idempotency results from a prior JVM cannot satisfy new append commands.

    Also log the namespace to make rerun diagnostics easier.

Performance Improvements
  • tracking: trim batch handler overhead (GitHub)

    Reduce per-message tracking overhead by using an indexed list path for DeserializingMessage.forEachInBatch and by preparing payload parameters without repeating the payload cache lookup for regular non-chunked messages.

    Chunked typed payloads deliberately keep the old lazy resolver path so handler selection does not wait for the final chunk.

  • handling: specialize single dynamic parameters (GitHub)

    Avoid allocating a Function[] and using the general IntFunction path for unvalidated handler methods with one dynamic parameter. This keeps the existing resolver matching semantics, but lets the hot payload-handler case call the single-argument member invoker directly.

  • serialization: avoid payload memoizer maps (GitHub)

    Use a single-value cache for the default Object.class payload lookup in DeserializingObject and keep the typed map only for explicit getPayloadAs lookups. This avoids per-message ConcurrentHashMap allocation in the common payload handler path.

  • tracking: reduce batch filtering allocations (GitHub)

    Replace hot stream and Optional-heavy tracking paths with direct loops for position checks, tracker filtering, and batch message handling while preserving the existing stream-based deserialize API.

  • reflection: specialize direct member invocation (GitHub)

    Avoid creating per-call parameter-provider lambdas for the common no-arg and single-arg DefaultMemberInvoker paths while keeping the existing general IntFunction route for multi-arg and fallback invocation.

  • handling: reuse bound handler methods (GitHub)

    Split handler metadata into HandlerDescriptor and add a reusable HandlerMethod fast path for fixed-target single-method handlers. This keeps HandlerInvoker as the existing per-message compatibility adapter while allowing DefaultTracking and SDK-owned decorators to avoid per-message invoker and reporting wrapper allocation on eligible handlers.

    Also avoid an unused AtomicReference allocation in Invocation lazy id handling and cover the reusable method path in handler inspector and error reporting tests.

  • handling: reuse invokers as parameter providers (GitHub)

    Have unvalidated prepared and dynamic handler invokers implement IntFunction directly so invocation no longer creates an extra parameter-provider lambda. This preserves the same per-message invoker lifecycle while trimming one allocation layer from reflective handler dispatch.

  • handling: avoid handler policy cache hit allocations (GitHub)

    Avoid capturable loader lambdas on hot cache-hit paths in trigger filtering and error-reporting policy lookup. Trigger filters now also prepare to allowAll for methods without @​Trigger, removing that resolver from ordinary handler dispatch.

  • handling: reduce invocation threadlocal churn (GitHub)

    Preserve the existing Invocation.getCurrent() semantics while avoiding ThreadLocal map remove churn for each top-level handler invocation. The new test pins that callbacks still run after the current invocation is cleared.

  • handling: collapse no-op message filters (GitHub)

    Allow prepared message filters to identify always-true filters and collapse composed filter chains around them. Payload filters without allowed classes and segment filters without routing keys now disappear from the per-message hot path.

    JFR: /private/tmp/fluxzero-consumption-prepared-filter-noop.jfr no longer showed PayloadFilter/MessageFilter in the noop hot-method list; the run completed in 1320 ms.

  • handling: reduce per-message invocation allocations (GitHub)

    Skip building handler argument arrays when the method invocation validator is the default no-op validator. The validating path is preserved for web request parameter validation and custom validators.

    Reuse a completed report stage for handlers that do not need to send a response, avoiding a completed CompletableFuture allocation per event.

    JFR: /private/tmp/fluxzero-consumption-completed-report-noop.jfr no longer showed CompletableFuture.completedFuture in the allocation top; the noop handler run completed in 1594 ms.

  • serialization: avoid optional allocation for first messages (GitHub)

    Add a nullable first-message deserialization path and use it from DefaultTracking and the benchmark raw deserialize pipeline. The existing Optional-returning API remains available and delegates to the nullable method.

    JFR: /private/tmp/fluxzero-consumption-nullable-serializer-deserialize.jfr showed Optional allocation pressure dropping in the deserialize-only profile, with wall-clock remaining in the same ~1.3s band.

  • handling: avoid optional allocation in invoker resolution (GitHub)

    Add nullable invoker resolution methods alongside the existing Optional-based handler APIs and use them in the tracking hot path and core handler decorators. This keeps source compatibility while reducing per-message Optional churn through nested handlers and interceptors.

    JFR: /private/tmp/fluxzero-consumption-nullable-invoker-noop.jfr showed Optional.of allocation pressure dropping from roughly 6.6% to 3.8% in the noop handler profile; wall-clock remained noisy.

  • serialization: memoize deserialized payloads lazily (GitHub)

    Delay creation of the memoizing payload wrapper until a deserializing object actually materializes or checks its payload. This removes memoizer allocation from tracking paths that only need serialized message metadata.

    Keep metadata copies sharing the same memoized payload function and cover that behavior with a focused regression test.

  • common: allocate memoization storage lazily (GitHub)

    Avoid creating a ConcurrentHashMap for memoized functions that are never evaluated. This reduces allocation pressure in deserializing message paths where payload functions are often carried through without materializing the payload.

    The Lombok-generated all-args constructor shape is retained explicitly for compatibility.

  • handling: cache static handler resolution (GitHub)

    Prepare static parameter resolvers once per handler method so invocation no longer re-runs resolver matching for message, metadata, user, and timestamp parameters.

    Dynamic payload, trigger, and entity resolution remains message-dependent. Also cache error-reporting local-handler policy and skip request-expiry decoration for non-request handlers without changing public handler contracts.

  • handling: reduce tracking invocation overhead (GitHub)

    Prepare message filters once per handler method, add first-message serializer and caster fast paths, and remove several per-message wrapper/allocation paths in tracking handlers.

    The serializer fast path preserves findAny semantics for split/drop upcasters and the message apply path keeps batch completion behavior covered by focused tests.

  • tracking: reduce local in-memory tracking contention (GitHub)

    Reduce contention seen in local tracker profiling by replacing copy-on-write/synchronized hot-path structures, avoiding full-tail copies in the in-memory message store, and caching the local runtime client id.

    Keep DefaultTracking's non-chunked batch path eager and one-result-per-input so split upcasters cannot change tracking semantics while still avoiding chunk-specific bookkeeping for ordinary batches.

Tests
  • benchmark: add consumption jfr option (GitHub)

    Allow TrackerIntegrationBenchmark to start a programmatic JFR recording around the consumption phase only. This keeps publish/setup noise out of profiling runs while preserving the normal benchmark path when no jfrFile is configured.

  • benchmark: add tracker pipeline modes (GitHub)

    Add pipelineMode variants to TrackerIntegrationBenchmark so LocalClient preload runs can isolate raw tracking, deserialization, direct handler invocation, annotated no-op handling, payload handling, and the existing benchmark handler.

    This keeps the existing benchmark defaults unchanged while making JFR comparisons between store/client, serializer, and handler pipeline costs repeatable.

GitHub

1.184.1 (2026-05-23)

Bug Fixes
  • scheduling: reschedule changed periodic cron (GitHub)

    Mark cron-created periodic schedules with a compact cron schema metadata entry, and only replace an existing auto-started schedule when that schema changes. Explicit handler-driven delays clear the marker so intentionally delayed schedules remain untouched.

  • modeling: resolve aggregate metadata without relationships (GitHub)

    Load aggregate-root parameters directly from aggregate metadata instead of going through entity relationship lookup. This lets handlers receive historical aggregate state for legacy streams where newer events have aggregate metadata but older events predate relationship records.

    Adds a playback regression test for an event stream whose initial event has no aggregate metadata or relationships.

GitHub

1.184.0 (2026-05-23)

Features
  • web: add chunked request support (GitHub)

    Add Jetty-native proxy request chunking for large or unknown-length request bodies, gated behind FLUXZERO_PROXY_REQUEST_CHUNKING_ENABLED so existing deployments can keep the old non-chunked proxy path if desired.

    Restore SDK handling for chunked web requests across InputStream, typed payloads, byte[], String, WebRequest, @​BodyParam, @​FormParam, form-object binding, multipart WebFormPart payloads, and chunked InputStream response metadata.

    Keep continuation chunks on the normal tracker stream. If a tracker restarts and observes a continuation without an active first chunk, recovery pages readRange from the shared timestamp index up to the current continuation index, filters matching chunks while reading, and reconstructs only from the existing message log without reading ahead.

    Also reduce slow regression-test waits, make the proxy benchmark use async HttpClient calls for HTTP scenarios, and keep same-routing-key command ordering deterministic in the test server.

GitHub

1.183.0 (2026-05-22)

Features
  • entity: add predicate entity lookup (GitHub)
Build System
  • prevent missing secrets by only running auto-merge workflow for dependabot[bot] [skip ci] (GitHub)
Tests
  • config: update JUnit parallel execution configuration (GitHub)

    Add `executor-service=WORKER_THREAD_POOL` to JUnit parallel execution VM parameters to specify thread pool usage.

GitHub

1.182.1 (2026-05-22)

Dependency updates
  • bump distroless/java25-debian13 in /test-server (GitHub)

    distroless/java25-debian13: c0d379f -> 8fd23b8

GitHub

1.182.0 (2026-05-21)

Tests
  • test-fixture: support scheduled command expectations (GitHub)

    Add TestFixture expectations for commands scheduled via scheduleCommand, including only/negative variants and documentation for supported matcher forms.

    Also allow expectResultContaining to inspect Map results by value, entry, or expected entry subset.

GitHub

1.181.0 (2026-05-21)

Features
  • validation: inject context into payload constraints (GitHub)

    Allow constrained payload methods such as @​AssertTrue to resolve parameters from the active Fluxzero message context using configured ParameterResolvers. Delegate ValidationUtils to the active Fluxzero validator when available, keep test defaults in test resources, and keep SDK test artifacts free of local defaults and benchmark classes.

GitHub

1.180.0 (2026-05-21)

Features
  • scheduling: support local schedule handlers (GitHub)

    Use the task scheduler for local @​HandleSchedule and @​Periodic handlers so local schedules behave as an alternative to Spring @​Scheduled. Local scheduling now shares the Fluxzero clock, reacts to fixture clock changes through the task scheduler, and preserves Periodic return handling for durations, instants, payloads, and Schedule values.

    Also quiet downstream SLF4J test noise with logback-test configuration and pin Kotlin constructor-property annotations to the parameter target to avoid Kotlin migration warnings.

Bug Fixes
  • scheduling: honor versioned initial delay defaults (GitHub)

    Change @​Periodic initialDelay to use -1 as the implicit value, preserve legacy immediate autostart for older defaults versions, and enable the new delay/cron first-deadline behavior via fluxzero.defaults.version or the explicit scheduling flag.

    Also documents the versioned defaults and runs SDK tests against the new default profile without putting that property into test resources or the published test jar.

GitHub

1.179.4 (2026-05-21)

Bug Fixes
  • encryption: add logging for DefaultEncryption initialization in DecryptingPropertySource (GitHub)
GitHub

1.179.3 (2026-05-21)

Bug Fixes
  • modeling: tolerate duplicate member ids during load (GitHub)

    Do not reject duplicate non-null @​EntityId values while traversing existing member lists. Historical event-sourced state may contain duplicates and should still be loadable, especially for loadEntity and replay paths.

    When the SDK applies a list or collection member update for an entity id that already exists, replace the existing item instead of appending another duplicate. This preserves idempotent upsert behavior without breaking old state.

GitHub

1.179.2 (2026-05-21)

Bug Fixes
  • cap fixture trace collection (GitHub)

    Limit fixture trace bookkeeping per phase so large successful fixture runs do not pay unbounded diagnostic overhead. Keep later phases visible when an earlier phase is truncated.

    Verified with ./mvnw -pl sdk test and the Flowmaps AlertingTest resolveAlertsWhenEntityIsDeleted case against the local 0-SNAPSHOT SDK.

Documentation
  • encryption: clarify encryption key resolution (GitHub)
GitHub

1.179.1 (2026-05-21)

Bug Fixes
  • encryption: broaden encryption key resolution in DecryptingPropertySource (GitHub)

    Improve encryption key lookup by using DefaultPropertySource and removing redundant environment/system variable resolution logic.

GitHub

1.174.2 (2026-05-21)

Bug Fixes
  • encryption: add logging for DefaultEncryption initialization in DecryptingPropertySource (GitHub)
  • encryption: broaden encryption key resolution in DecryptingPropertySource (GitHub)

    Improve encryption key lookup by using DefaultPropertySource and removing redundant environment/system variable resolution logic.

    (cherry picked from commit 6825597cc162ab62ccd84b5a94cd2e4b20684816)

Documentation
  • encryption: clarify encryption key resolution (GitHub)

    (cherry picked from commit f18ce4b5d0ce0c405980791a99694fdc63b7c59c)

GitHub

1.179.0 (2026-05-20)

Features
  • tracking: add per-handler consumers for unconfigured handlers (GitHub)

    Change the handler-to-consumer assignment for unconfigured tracking handlers so current defaults can give each handler class its own generated consumer, using the message type's default consumer configuration as a template.

    Add fluxzero.tracking.unconfiguredHandlerConsumerMode to choose between perHandler and defaultAppConsumer. Use fluxzero.defaults.version=2026.05.20 as the defaults-profile marker so existing apps without the marker keep the shared default application consumer, while new starters can opt into per-handler isolation.

  • common: support property-style environment variables (GitHub)

    Resolve property keys through conventional uppercase environment variable names, while preserving exact environment variable lookup precedence.

Documentation
  • tracking: document unconfigured consumer defaults (GitHub)

    Update the README and generated agent guidance for the new unconfigured handler consumer modes.

    Clarify that fluxzero.defaults.version >= 2026.05.20 defaults to per-handler generated consumers, while older or missing defaults versions keep the shared application default consumer for compatibility.

GitHub

1.178.0 (2026-05-20)

Features
  • handling: support stateful members (GitHub)

    Allow @​Member objects inside @​Stateful handlers to create, update, delete, and fan out via child associations while persisting each mutated root at most once per message.

    Add record canonical-constructor and Kotlin data-class rebuild coverage, duplicate entity-id guards, member map-key documentation, downstream Kotlin tests, and performance benchmark paths.

Performance Improvements
  • handling: batch stateful member writeback (GitHub)

    Stage member mutations per stateful root and apply them per member holder, so list and map members clone and wither their owner once per message instead of once per child mutation. This keeps the one-storage-action-per-root behavior while removing most of the CPU overhead from multi-child updates.

    Benchmarks with memberCount=100/rootCount=10 improved list/map/fanout member handling from roughly 662/634/64 ops/s to 11876/13227/1207 ops/s.

GitHub

1.177.3 (2026-05-20)

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

    org.apache.maven.plugins:maven-enforcer-plugin: 3.6.2 -> 3.6.3 changelog

GitHub

1.177.2 (2026-05-20)

Dependency updates
  • bump org.junit:junit-bom from 6.0.3 to 6.1.0 (GitHub)

    org.junit:junit-bom: 6.0.3 -> 6.1.0 changelog

GitHub

1.177.1 (2026-05-19)

Dependency updates
  • bump actions/setup-node from 5 to 6 (GitHub)

    actions/setup-node: 5 -> 6 changelog

GitHub

1.177.0 (2026-05-19)

Features
  • add fixture trace diagnostics (GitHub)

    Render fixture traces for failing tests, including given/when/and then phases, elapsed time, message publications, handler invocations, async consumer names, and missing handlers. Keep payloads compact, suppress noisy metrics/result/error traffic, and record missed or unexpected expectations directly in the trace.

    Improve assertion output for local and Maven runs: keep IntelliJ comparison links visible by moving trace details to a suppressed assertion, render expected/actual only for detected Maven executions, and simplify mismatch JSON to the asserted payload/metadata shape. Also guard websocket proxy tests with bounded waits so local IDE runs fail clearly instead of hanging.

Bug Fixes
  • websocket: clarify auth and idle timeout logs (GitHub)

    Describe web request messages from the web layer so handler failures no longer show byte[] payloads, and map auto-handshake authorization failures to include the websocket handshake path and underlying handler reason.

    Log proxy idle websocket timeouts as warning messages without stack traces because clients without pings can naturally hit the idle timeout.

GitHub

1.176.0 (2026-05-18)

Continuous Integration
  • repair: invoke repair from failed deploy build (GitHub)
Chores
  • Manually register annotation processors and remove auto-service dependency (GitHub)
GitHub

1.175.1 (2026-05-18)

Bug Fixes
  • websocket: mark replayed response timing (GitHub)
Continuous Integration
  • repair: add automated main build repair workflow (GitHub)
GitHub

1.175.0 (2026-05-18)

Code Refactoring
  • proxy: migrate proxy server to Jetty (GitHub)

    Replace Undertow with Jetty for the proxy HTTP and websocket ingress path while preserving lifecycle, request routing, streaming, and websocket behavior through expanded tests.

    Add configurable request, websocket, and thread limits, websocket send backpressure metrics, and benchmark coverage for the proxy hot paths.

GitHub

1.174.1 (2026-05-18)

Bug Fixes
  • websocket: wait for open error callback in test (GitHub)
GitHub

1.174.0 (2026-05-18)

Tests
  • proxy: cover ingress transport contracts (GitHub)

    Add characterization coverage for proxy HTTP configuration, header propagation, body limits, websocket negotiation, binary frames, and rejected handshakes before replacing Undertow with Jetty.

    Document the intended multi-chunk InputStream webresponse contract as a disabled regression marker because the current Undertow path hangs while closing the final chunk.

GitHub

1.173.2 (2026-05-18)

Dependency updates
  • bump distroless/java25-debian13 in /proxy (GitHub)

    distroless/java25-debian13: c0d379f -> 8fd23b8

GitHub

1.173.1 (2026-05-18)

Dependency updates
  • bump jakarta.annotation:jakarta.annotation-api from 2.1.1 to 3.0.0 (GitHub)

    jakarta.annotation:jakarta.annotation-api: 2.1.1 -> 3.0.0

GitHub

1.173.0 (2026-05-17)

Features
  • websocket: include request receive timing in results (GitHub)
GitHub

1.172.0 (2026-05-17)

Features
  • tracking: skip expired requests before handling (GitHub)

    Propagate effective request timeouts through request metadata so tracking handlers can avoid invoking stale indexed requests. Commands stay opt-in, while queries and HTTP web handlers skip by default, and skipped messages emit IgnoreMessageEvent metrics instead of handler metrics.

    Also lets gateways apply @​Timeout to asynchronous request futures, adds proxy timeout configuration, and documents metrics/timeouts in the Java and Kotlin agent manuals.

Bug Fixes
  • publishing: apply timeout annotation to async sends (GitHub)

    Honor @​Timeout when creating request futures for non-blocking send calls while preserving the existing one-minute default for sendAndWait calls without an annotation. This lets async requests intentionally use shorter or longer deadlines than the request handler default.

  • publishing: clear timed-out request callbacks (GitHub)

    Route blocking gateway timeouts through the concrete request lifecycle so timed-out sendAndWait calls complete the futures that own callback cleanup. Web request sendAndWait keeps its existing settings timeout while passing that deadline into the generic gateway internally.

GitHub

1.171.4 (2026-05-17)

Bug Fixes
  • tracking: return immediately for zero max wait (GitHub)

    Treat a zero max wait duration as an immediate deadline for reads and segment claims, including cached trackers that should avoid falling back to a blocking delegate read when cache data is not available.

GitHub

1.171.3 (2026-05-17)

Bug Fixes
  • tracking: support self handler class registration (GitHub)

    Allow local self handlers to be registered by class without double handling self payloads, and let async test fixtures discover @​TrackSelf payload handlers incrementally.

    Cache default constructor lookups in ReflectionUtils so class handlers without a default constructor only apply to self payloads.

    Closes #29

GitHub

1.171.2 (2026-05-17)

Bug Fixes
  • proxy: start full embedded proxy lifecycle (GitHub)

    Make ProxyServer.start() the embedded full proxy startup path: it creates the configured client, starts the HTTP proxy and forward proxy consumer, and owns shutdown without a JVM hook, keepalive thread, or global application instance. Keep the HTTP-only startup package-private for tests and internal callers, and resolve proxy ports from FLUXZERO_PROXY_PORT before PROXY_PORT.

    Also quiet Jetty logging in the active proxy/sdk logback configs used by embedded test-server runs

Tests
  • fixture: harden async waits and speed slow tests (GitHub)

    Snapshot fixture results before validation, track remote document dispatches for async fixture tests, and remove fixed sleeps from several slow tests.

GitHub

1.171.1 (2026-05-16)

Bug Fixes
  • test-server: separate embedded shutdown lifecycle (GitHub)

    Keep TestServer.main as the standalone entry point with a JVM shutdown hook, and expose startServer variants for embedded usage without registering hooks.

    Disable Jetty stop-at-shutdown, shut down websocket endpoints when the returned server stops, and make test-server based tests own and stop their embedded server explicitly.

    Also set Jetty logging to warn and update the proxy OpenAPI demo to use the embedded server lifecycle.

GitHub

1.171.0 (2026-05-16)

Features
  • search: add fluent bulk document updates (GitHub)

    Expose Fluxzero.bulkUpdate(collection) and DocumentStore.bulkUpdate(collection) as fluent builders for mixed index and delete operations.

    The builder reuses existing index inference and applies updates through the existing document store bulk update path.

GitHub

1.170.0 (2026-05-16)

Features
  • test-server: publish runtime lifecycle metrics (GitHub)

    Add a RuntimeLifecycleEvent JSON type and register it for JsonType deserialization.

    Publish STARTED and STOPPING metrics around the test-server lifecycle, with MetricsLog.registerMetrics returning a CompletableFuture so callers can decide whether to wait. Lifecycle publishing waits on that future to ensure the metrics are stored before startup/shutdown completes.

GitHub

1.169.0 (2026-05-16)

Features
  • errors: add human-readable SDK error reports (GitHub)

    Introduce stable Fluxzero SDK error codes with formatted guidance, docs URLs, and compact repeated-message summaries. Wire the reports into timeout, dispatch, tracking, scheduling, user-provider, and missing-instance failures while preserving existing exception constructors.

    Document the codes in the README and downstream agent docs.

Tests
  • caching: stabilize memory eviction listener test (GitHub)

    Wait for asynchronous reference-queue eviction instead of relying on a fixed sleep. Use a thread-safe event list and close test caches so purger threads do not leak between tests.

  • validation: add test for deserialization of ValidationException without summaries (GitHub)
GitHub

1.168.0 (2026-05-16)

Features
  • validation: expose violation summaries (GitHub)

    Add string-only violation summaries to ValidationException so callers can inspect validation messages by property path even when legacy violation strings contain custom messages.

    Closes #67.

GitHub

1.167.0 (2026-05-16)

Features
  • tracking: support message log truncation (GitHub)

    Add a truncate command and expose it through GatewayClient and GenericGateway, with local stores and the test server clearing message logs and associated positions.

    Also tighten caching tracking invalidation around truncate support and document the public API/Javadoc expectation.

GitHub

1.166.0 (2026-05-15)

Features
  • configuration: support additional property locations (GitHub)

    Load extra Fluxzero configuration from FLUXZERO_CONFIG_LOCATIONS, with a lowercase JVM alias of fluxzero.config.locations. This lets deployments mount secrets or environment-specific config outside the application artifact without having to overload application.properties.

    The source supports comma-separated file:, plain path, and classpath: locations. optional: locations are ignored when missing, later configured locations override earlier ones, and the source sits below environment/JVM system properties but above application-<env>.properties and application.properties.

  • configuration: load fluxzero property resources (GitHub)

    Add a Fluxzero-specific default configuration source for classpath-root fluxzero.properties and fluxzero.json resources. This gives SDK settings an explicit home without forcing customers to mix Fluxzero defaults into application.properties.

    The new source is intentionally lower priority than application.properties and application-<env>.properties, so applications can override SDK defaults through their existing config files. JSON files are flattened to dot-separated property names, and fluxzero.properties overrides fluxzero.json within this source.

  • validation: validate request handler return values (GitHub)

    Validate constrained return values for non-passive request handler methods, covering command, query, custom, and web request handlers. This catches invalid handler responses before they are published as result or web response messages.

    The behavior is limited to annotated handler methods that declare return-value validation. Passive handlers and event handlers keep their previous behavior, and web request handlers are wired only for return-value validation so request payload handling is not broadened accidentally.

  • validation: allow bean getter compatibility mode (GitHub)

    Keep Fluxzero validation annotation-led by default while adding a compatibility switch for projects that relied on Hibernate Validator only treating JavaBean-style getters as constrained bean properties.

    Setting fluxzero.validation.beanPropertyMethodNamesOnly=true limits method-property validation to getX(), isX(), and hasX() methods. Fields, Kotlin constructor parameter support, groups, cascaded validation, and executable validation remain unchanged.

  • validation: add built-in Jakarta validator (GitHub)

    Replace the Hibernate Validator-backed JSR380 adapter with Fluxzero's own reflection-based validation implementation. The new default validator supports Jakarta constraints, custom validators, groups, group sequences and conversions, cascaded and type-use validation, executable validation, provider bootstrap, metadata lookup, value extractors, Fluxzero clocks, and SDK-owned constraint violations.

    Add Fluxzero convenience constraints, OpenAPI rendering for those constraints, Kotlin annotation coverage, provider/TCK-inspired tests, and a runnable validation benchmark. Document the supported Jakarta Validation profile and the intentionally unsupported XML/CDI/full-EL/TCK edge cases.

GitHub

1.165.1 (2026-05-14)

Bug Fixes
  • websocket: reuse session users after open (GitHub)

    Pin the user accepted during socket creation for established websocket frames, while keeping handshake and open authorization tied to the current request. Refresh-capable user providers can update the pinned identity before authorization without re-authenticating every socket frame.

    Also preserves web request invocation semantics so missing request users do not fall back to active users during handler execution.

  • websocket: authorize automatic handshakes (GitHub)

    Use handler metadata on synthetic automatic handshake invokers so the existing authentication interceptor can enforce requirements before a socket is established. Split websocket handling into handshake and lifecycle decorators so handshake authorization still flows through the normal handler chain while open failures continue to close the socket.

GitHub

1.165.0 (2026-05-14)

Build System
  • maven: add downstream project checks (GitHub)

    Add parentless Java and Kotlin downstream project modules that exercise the published BOM, SDK test-jar, annotation processors, test-server, and proxy without producing deployable artifacts.

    Enforce Maven 3.9+ and Java 21+ in the build, keep compilation at release 21, and ensure release version bumps include parentless modules.

  • testing: make surefire argLine merge-friendly (GitHub)
GitHub

1.164.1 (2026-05-13)

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

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

GitHub

1.164.0 (2026-05-12)

Features
  • publishing: limit recursive publication depth (GitHub)

    Add a publication-depth guard that tracks nested publications in metadata and blocks chains above the configured maximum. Expose maxPublicationDepth through configuration, support fluxzero.maxPublicationDepth through PropertySource, and allow negative values to disable the guard.

GitHub

1.163.1 (2026-05-12)

Bug Fixes
  • tracking: separate local notification tracking (GitHub)

    Keep local notification tracking on the shared event store while exposing it as MessageType.NOTIFICATION, so notification consumers keep their own tracking semantics even when a handler also has event methods and a custom consumer name.

    Add regression coverage for handlers that define both @​HandleEvent and @​HandleNotification methods, including a @​Consumer-annotated handler.

GitHub

1.163.0 (2026-05-12)

Features
  • modeling: support aggregate event routing (GitHub)

    Add aggregate and apply-level controls for event segment routing so aggregate events can opt into aggregate-id based segments while preserving message routing as the default. Set aggregate-id segments before serialized dispatch interceptors run, leaving the regular routing interceptor as a fallback for unset segments.

Chores
  • run: add ProxyServer configuration and simplify TestServer run config (GitHub)
GitHub

1.162.5 (2026-05-12)

Dependency updates
  • bump distroless/java25-debian13 in /test-server (GitHub)

    distroless/java25-debian13: b1eb8a1 -> c0d379f

  • bump distroless/java25-debian13 in /proxy (GitHub)

    distroless/java25-debian13: b1eb8a1 -> c0d379f

Continuous Integration
  • switch to app token for Dependabot auto-merge (GitHub)
GitHub

1.162.4 (2026-05-11)

Bug Fixes
  • web: dedupe automatic API docs endpoints (GitHub)

    Package-level ApiDocInfo created the same generated OpenAPI and API reference handlers once per web handler in the package. Deduplicate these automatic endpoints by their route path so a proxied docs request receives a single response per app, matching the static file handler behavior.

GitHub

1.162.3 (2026-05-11)

Bug Fixes
  • web: avoid Jackson discovery in OpenAPI processor (GitHub)

    Use a processor-local JsonMapper for generated OpenAPI JSON so annotation processing does not initialize JsonUtils and trigger Jackson ServiceLoader module discovery. This avoids Gradle and kapt classloader failures such as Jdk8Module or ParameterNamesModule not being assignable to the processor's Module type.

GitHub

1.162.2 (2026-05-11)

Bug Fixes
  • test-server: clean up websocket sessions reliably (GitHub)

    Align the test server websocket lifecycle with the runtime by tracking active sessions, sending server-side pings, removing sessions on close or ping timeout, and sharing command idempotency across endpoints. This prevents queued work from re-registering stale trackers after a websocket close.

GitHub

1.162.1 (2026-05-11)

Bug Fixes
  • web: serve generated OpenAPI document for instances (GitHub)
GitHub

1.162.0 (2026-05-11)

Continuous Integration
  • replace Renovate with Dependabot (GitHub)

    Configure Dependabot for Maven, GitHub Actions, and Docker updates, and add a pull_request_target workflow that enables rebase auto-merge for selected Dependabot PRs once required checks pass.

    Also serialize main deploy runs so a running release is allowed to finish while newer pending deploys replace older pending deploys in the concurrency group.

    Checks: go run github.com/rhysd/actionlint/cmd/actionlint@latest; ruby YAML parse for workflows and dependabot.yml; bash -n for workflow run steps;

GitHub

1.161.1 (2026-05-11)

Bug Fixes
  • web: guard OpenAPI processor meta annotation cycles (GitHub)
GitHub

1.161.0 (2026-05-10)

Features
  • web: serve generated API reference pages (GitHub)

    Add ApiDocInfo configuration for Redoc, Scalar, and Swagger UI reference pages, and register the generated HTML endpoints alongside the OpenAPI JSON endpoint.

    Fix OpenAPI JSON serving through the proxy by returning a JSON tree instead of serializing the document as a string, and prefer runtime extraction for handler instances so scoped docs stay correct.

    Add a proxy test-scope demo app that starts TestServer, ProxyServer, and documented SDK handlers for browser

  • web: use Javadoc fallback for OpenAPI schema docs (GitHub)

    Use source Javadoc as the last description fallback in the OpenAPI annotation processor, after Swagger @​Schema metadata and Fluxzero @​ApiDoc metadata. Document that this only works for source available in the same javac compilation, and add Lombok coverage so generated getters do not mask field documentation.

  • web: support shared OpenAPI refs (GitHub)

    Add SDK-native OpenAPI security requirements and reusable response references to both the runtime renderer and annotation processor. This keeps projects dependency-free while still allowing shared components such as error responses and bearer auth schemes.

  • web: serve generated OpenAPI docs (GitHub)

    Add opt-in ApiDocInfo settings for serving the generated OpenAPI document through an internal Fluxzero web handler. Relative openApiPath values resolve against the package or handler Path where ApiDocInfo is declared, and the generated endpoint is marked NoUserRequired.

  • web: generate OpenAPI docs from SDK annotations (GitHub)

    Add SDK-native API documentation metadata, an OpenAPI renderer, and an annotation processor that emits META-INF/fluxzero/openapi.json for opted-in web handlers. The generated schemas cover ApiDoc metadata, repeatable responses, ApiDocInfo components, validation hints, JsonValue types, Jackson polymorphism, multipart forms, and sorted component schemas.

    Tighten generated web parameter signatures so annotated parameters with type-use metadata compile cleanly, and index route matching candidates by method, origin, and literal path prefix before applying regex matching.

  • web: render api docs as openapi (GitHub)

    Render ApiDocCatalog as OpenAPI 3.1 JSON via OpenApiRenderer and OpenApiOptions.

    Cover parameters, request bodies, responses, inline schemas, servers, and docs metadata while skipping Fluxzero websocket pseudo methods.

  • web: add api doc metadata extractor (GitHub)

    Introduce generic ApiDoc annotations and a format-neutral API documentation catalog for web handlers. The extractor reuses runtime WebPattern resolution, expands optional route fragments, infers web parameters and request bodies, and supports docs-only exclusions at package, type, and method level.

    ApiDocResponse is repeatable and response metadata merges from package/class to endpoint with endpoint-specific values winning.

  • web: support optional route fragments (GitHub)

    Expand bracketed route fragments such as /users[/{id}] into concrete matcher variants while preserving the specificity ordering. Explicit routes beat equivalent optional variants, WebRequestContext.matches uses the same expansion, and adjacent optional parameters bind left-to-right.

    Document the syntax in README, agent rules, and web annotation javadocs.

  • web: ignore trailing slashes in routes (GitHub)

    Treat non-root web routes with and without a final slash as equivalent during route matching, while preserving root route behavior and existing wildcard semantics. Document the policy and cover both direct matcher and handler invocation paths.

  • web: add automatic HEAD and OPTIONS helpers (GitHub)

    Generate HEAD responses from matching GET handlers and OPTIONS Allow responses from matching web routes while keeping explicit HEAD, OPTIONS, and ANY handlers authoritative across handlers in the same factory. Add route-level autoHead and autoOptions opt-outs for multi-service deployments.

  • web: negotiate response content type (GitHub)

    Apply best-effort content negotiation for automatically mapped web handler results before web responses are serialized. Explicit WebResponse content types and explicit Content-Type metadata keep taking precedence, while unsupported Accept values fall back to existing defaults.

    Document the behavior in the README and project-files agent rules.

  • web: support multipart form parameters (GitHub)

    Parse multipart/form-data bodies inside DefaultWebRequestContext and expose each part through the new WebFormPart type. @​FormParam can now resolve text fields as String and file parts as WebFormPart, byte[], or InputStream while URL-encoded form behavior is preserved.

    Update README, javadocs, and project-files agent docs to describe the multipart support.

Bug Fixes
  • web: ignore non-web current context (GitHub)

    Content negotiation is best-effort and may run while a non-web handler sends websocket updates. Avoid constructing a DefaultWebRequestContext unless the current message is a WEBREQUEST, so notification/event handlers in mixed web classes can still send websocket messages.

Performance Improvements
  • web: reduce route matcher overhead (GitHub)

    Find the most specific matching route before materializing path parameters. This avoids stream, Optional, comparator-chain, and path-parameter map allocation for every candidate route, while keeping the same specificity ordering.

    JFR benchmark: 5k mixed routes, 3M matches improved from ~1977 ns/match to ~1126 ns/match; remaining hot methods are regex matching.

Tests
  • entity: stabilize snapshot previous replay test (GitHub)
  • proxy: serialize cors property tests (GitHub)

    The proxy CORS tests mutate FLUXZERO_CORS_DOMAINS, which is a JVM-wide system property. Add a JUnit resource lock so parallel test execution cannot clear or change the property while another CORS request is in flight.

  • proxy: cover cors preflight options boundary (GitHub)

    Verify that configured and allowed CORS preflight OPTIONS requests are answered by the proxy without invoking runtime @​HandleOptions handlers, while non-preflight OPTIONS requests still reach runtime routing and can use the SDK automatic OPTIONS helper. Document that proxy preflight handling sits before WebRequest forwarding.

GitHub

1.160.0 (2026-05-10)

Code Refactoring
  • web: replace Jooby route matching (GitHub)

    Remove the Jooby dependency from the SDK web dispatch path and introduce a small SDK-owned route matcher with specificity ordering for literals, parameters, constrained parameters, wildcards, and catch-all routes.

    Keep web parameter binding working without Jooby, document the route rules, clarify multipart/raw-payload behavior, and add an explicit slf4j-api dependency for common annotation processing now that Jooby no longer brings it transitively.

GitHub

1.159.5 (2026-05-10)

Bug Fixes
  • websocket: isolate JDK websocket callbacks (GitHub)

    Route the native JDK websocket client and listener callbacks through a Fluxzero-managed executor from ObjectUtils instead of relying on the common pool. Preserve custom HttpClient executors and add coverage for default and supplied callback executors.

Changes
  • Revert "deps(sdk): remove nullable annotation dependency" (GitHub)

    This reverts commit fde13f86

GitHub

1.159.4 (2026-05-09)

Dependency updates
  • Update dependency io.jooby:jooby to v4.5.0 (#190) (GitHub)

    io.jooby:jooby: to 4.5.0

GitHub

1.159.3 (2026-05-09)

Dependency updates
  • Update sigstore/cosign-installer action to v4.1.2 (#189) (GitHub)

    sigstore/cosign-installer: to 4.1.2

GitHub

1.159.2 (2026-05-08)

Bug Fixes
  • modeling: preserve publish-only document state (GitHub)

    Allow PUBLISH_ONLY applies to advance state for non-event-sourced document-backed aggregates while keeping event-sourced aggregates out of cache, snapshots, and search state.

    This keeps document-backed read models working without writing to the aggregate event store, but preserves replay invariants for event-sourced aggregates.

GitHub

1.159.1 (2026-05-08)

Bug Fixes
  • modeling: keep publish-only applies out of state (GitHub)

    PUBLISH_ONLY events should remain publication-only facts: they are still emitted, but no longer advance aggregate cache, snapshots, relationships, or search/document state. This prevents hidden pending aggregate versions from causing event-index backfill failures.

    IF_MODIFIED no-op applies now preserve the existing aggregate version instead of creating an unpublished cached version. eventPublication=NEVER remains the supported way to update aggregate/document state without storing or publishing an event.

GitHub

1.159.0 (2026-05-08)

Tests
  • test-fixture: show assertion diffs in maven (GitHub)

    Include formatted expected and actual values in GivenWhenThenAssertionError messages when fluxzero.maven.enabled is set, while preserving the structured OpenTest4J comparison payload for IDE diffs.

GitHub

1.158.4 (2026-05-08)

Bug Fixes
  • publish runtime server dependencies (GitHub)

    Disable dependency-reduced POM generation for shaded test-server and proxy builds so Maven Central keeps the real dependency metadata.

    Move Jetty dependency management into test-server via the Jetty BOM and expose proxy's SDK/Undertow dependencies as normal runtime dependencies.

GitHub

1.158.3 (2026-05-07)

Dependency updates
  • proxy: localize undertow dependency management (GitHub)

    Move Undertow and Jakarta WebSocket version management from the root POM into the proxy module, where the Undertow server stack is still used. Keep Jakarta WebSocket APIs pinned to 2.2.0 for proxy while removing the dependency-management noise from other modules.

GitHub

1.158.2 (2026-05-07)

Bug Fixes
  • reflection: detect type-use nullable parameters (GitHub)

    Extend nullable parameter detection to inspect top-level type-use annotations as well as direct parameter annotations. This lets runtime reflection honor JSpecify-style Nullable annotations without adding a compile dependency.

Dependency updates
  • sdk: remove nullable annotation dependency (GitHub)

    Drop the SDK's Jakarta nullable annotation dependency and its root dependency-management entry now that public nullable contracts are documented in Javadocs instead of exported annotations. Remove the remaining javax/Jakarta/JetBrains Nullable usage from main code and unnecessary test-fixture API signatures while keeping runtime nullable detection annotation-agnostic.

GitHub

1.158.1 (2026-05-07)

Dependency updates
  • Update jetty monorepo to v12.1.9 (#187) (GitHub)

    jetty monorepo: to 12.1.9

GitHub

1.158.0 (2026-05-07)

Code Refactoring
  • test-server: replace undertow websocket server (GitHub)

    Switch the in-memory test server from Undertow/Jakarta WebSocket to Jetty Core WebSocket behind a small server-side session abstraction.

    Preserve handshake headers, runtime session negotiation, compression negotiation, health checks, reconnect behavior, result delivery semantics, and large SDK request batches.

    Add full-server websocket contract coverage for compression, namespace and topic isolation, malformed payload handling, reconnect retries, and request coverage across tracking, event sourcing, key-value, scheduling, and search.

    Also allow TrackerIntegrationBenchmark to target the test server through FLUXZERO_PORT, FLUX_PORT, or port.

Tests
  • sdk: drop undertow forwarding server (GitHub)

    Replace the web request forwarding test server with the native JDK HttpServer so sdk tests no longer need Undertow or RESTEasy.

GitHub

1.157.1 (2026-05-07)

Dependency updates
  • Update jakarta.websocket.version to v2.2.0 (#185) (GitHub)

    jakarta.websocket.version: to 2.2.0

GitHub

1.157.0 (2026-05-07)

Documentation
  • agents: add AGENTS.md with coding guidelines and project structure (GitHub)

    Introduce a new `AGENTS.md` file outlining project structure, build instructions, coding practices, and commit message conventions to help contributors maintain consistency and high-quality standards.

Code Refactoring
  • websocket: use native jdk client transport (GitHub)

    Replace the SDK runtime websocket client with small low-level contracts backed directly by java.net.http.WebSocket. This removes the Jakarta client facade and Undertow client transport from the SDK runtime path while keeping server-side Jakarta dependency management for modules that still use Undertow.

    Preserve Fluxzero handshake response headers, session metadata, compression negotiation, binary message assembly, ping/pong handling, close and abort handling, reconnect behavior, and session pooling.

GitHub

1.156.7 (2026-05-07)

Bug Fixes
  • tracking: avoid negative pause sleeps (GitHub)

    DefaultTracker now skips sleeping when the requested pause has already elapsed while checking the FlowRegulator. Add a regression test for elapsed pause durations.

Code Refactoring
  • tracking: make FlowRegulator functional (GitHub)

    Make pauseDuration the single abstract FlowRegulator method and move the no-op behavior into NoOpFlowRegulator. This allows lambda implementations while preserving default configuration behavior.

GitHub

1.156.6 (2026-05-06)

Dependency updates
  • Update dependency org.msgpack:msgpack-core to v0.9.12 (#184) (GitHub)

    org.msgpack:msgpack-core: to 0.9.12

GitHub

1.156.5 (2026-05-01)

Dependency updates
  • Update gcr.io/distroless/java25-debian13:nonroot Docker digest to b1eb8a1 (#183) (GitHub)

    gcr.io/distroless/java25-debian13:nonroot: to b1eb8a1

GitHub

1.156.4 (2026-04-30)

Dependency updates
  • Update dependency com.fasterxml.jackson:jackson-bom to v2.21.3 (#182) (GitHub)

    com.fasterxml.jackson:jackson-bom: to 2.21.3

GitHub

1.156.3 (2026-04-30)

Dependency updates
  • Update gcr.io/distroless/java25-debian13:nonroot Docker digest to 9a9777e (#181) (GitHub)

    gcr.io/distroless/java25-debian13:nonroot: to 9a9777e

GitHub

1.156.2 (2026-04-29)

Bug Fixes
  • entity: route nested child creation via matching parent (GitHub)

    When replaying nested aggregate updates, a routed event could be applied
    to the wrong parent if the routing key matched a higher-level entity while
    the payload also contained ids for descendants. In that case empty child
    target resolution could treat the first matching child slot as valid and
    add the new entity under the first sibling instead of the intended parent.

    Prefer explicit parent ids from the payload when resolving empty child
    targets, and only fall back from a routing key to other route candidates
    when the routing key targets the current entity. This keeps normal child
    routing on the existing fast path while allowing aggregate-routed events to
    find the correct nested parent.

    Add regression coverage for nested creation and replay across parent,
    child, alias, typed-id, deep, and fourth-level routing scenarios.

GitHub

1.156.1 (2026-04-25)

Bug Fixes
  • modelling: intercept event dispatch before event-sourced apply (GitHub)

    Resolve dispatch interception before applying event-sourced aggregate events so @​Apply methods observe the same metadata during the initial apply and replay. Validate the original event before dispatch interception so payload-protection interceptors can still sanitize the stored/published event without hiding invalid outgoing payloads from validation.

    Keep non-event-sourced aggregates on the existing state-first path: dispatch interception only affects publication, and blocked dispatches do not roll back the in-memory/document state mutation. Add regression coverage for user/metadata injection, protected-data validation, blocked dispatch, publish-never, and searchable upsert aggregates.

GitHub

1.156.0 (2026-04-25)

Tests
  • logging: add synchronous logging option to FluxzeroLogbackAppender (GitHub)

    Introduce a new `async` parameter to control synchronous or asynchronous logging. Allow programmatic attachment with the synchronous option, including tests for synchronous behavior and its interaction with existing async mechanisms.

GitHub

1.155.1 (2026-04-25)

Dependency updates
  • Update gcr.io/distroless/java25-debian13:nonroot Docker digest to f25ab72 (#180) (GitHub)

    gcr.io/distroless/java25-debian13:nonroot: to f25ab72

GitHub

1.155.0 (2026-04-25)

Tests
  • run Mockito as a Java agent (GitHub)

    Configure Surefire to start Mockito through its javaagent instead of relying on Byte Buddy self-attachment at test runtime.

    This removes the Mockito inline mock maker warning and avoids the intermittent Java 25 self-attach failure during tests.

GitHub

1.154.3 (2026-04-25)

Bug Fixes
  • add latch to synchronize pong handling completion during test (GitHub)
GitHub

1.154.2 (2026-04-24)

Dependency updates
  • Update gcr.io/distroless/java25-debian13:nonroot Docker digest to e689f0e (#177) (GitHub)

    gcr.io/distroless/java25-debian13:nonroot: to e689f0e

GitHub

1.154.1 (2026-04-24)

Dependency updates
  • Update dependency org.projectlombok:lombok to v1.18.46 (#178) (GitHub)

    org.projectlombok:lombok: to 1.18.46

GitHub

1.154.0 (2026-04-24)

No commits were found for this release.

GitHub

1.153.1 (2026-04-24)

Bug Fixes
  • logging: publish logback errors asynchronously (GitHub)

    FluxzeroLogbackAppender could block while publishing a Logback error through the error gateway. During websocket connection setup this can deadlock the connect path because the appender still holds Logback's append lock while the websocket onOpen callback logs its successful connection.

    Move publication onto a worker pool so Logback appenders do not participate in the websocket connect call stack, preserve correlation metadata before the async boundary, and keep the websocket reproduction with the test-server module. Also remove duplicate downstream logback-test.xml files that made Logback report multiple test configs on the classpath.

GitHub

1.153.0 (2026-04-24)

No commits were found for this release.

GitHub

1.152.10 (2026-04-24)

Bug Fixes
  • utils: pass logFailure to timeboxedExecutor in runAndWaitSafely (GitHub)
GitHub

1.152.9 (2026-04-24)

Bug Fixes
  • tracking: avoid unnecessary position lookup (GitHub)

    Only fetch the stored tracker position on startup when maxIndexExclusive is configured and already lies in the past. This keeps normal trackers, and trackers with a future max index, from issuing GetPosition before their first read while preserving the suspend-after-max-index behavior.

  • handling: prefer payload specificity over entity injection (GitHub)

    When multiple handlers match the same message, resolve the final winner using the concrete resolver that matched the message. This lets direct payload parameters outrank broader entity/value injection without changing invoke-multiple semantics.

    Keep the normal handler hot path fast by returning immediately for single-method handlers and for first matches that cannot be beaten by a lower specificity priority.

    Add regression coverage for payload-vs-entity selection and harden MethodInvokerBenchmark so handler timings remain observable under JIT optimization.

GitHub

1.152.8 (2026-04-24)

Dependency updates
  • Update kotlin monorepo to v2.3.21 (#179) (GitHub)

    kotlin monorepo: to 2.3.21

GitHub

1.152.7 (2026-04-23)

Bug Fixes
  • test-server: negotiate runtime version in websocket handshake (GitHub)
GitHub

1.152.6 (2026-04-23)

Bug Fixes
  • websocket: suppress metrics after target close (GitHub)

    Treat metrics publishing as best-effort when the metrics websocket client has already closed during Fluxzero shutdown.

    Suppress the expected closed-client session lookup failure both at metrics publication and request send logging, while keeping other metrics failures visible.

  • websocket: avoid force close during shutdown (GitHub)

    Only force-close Undertow sessions from close callbacks while the websocket client is still active.

    This preserves the existing reconnect behavior for remotely closed sessions, because the session pool must not reuse a closing session that still reports isOpen=true.

    During SDK shutdown, skip forceClose so the websocket close handshake can complete cleanly and the runtime does not report abnormal 1006 closes.

  • websocket: ignore metrics after close (GitHub)

    Keep websocket request and result metrics best-effort so telemetry cannot break functional request handling during shutdown.

    Skip metrics publishing once the websocket client is closed and log non-shutdown publish failures at warn level. Add regression coverage for publishing metrics after close.

  • tracking: suppress shutdown interrupts (GitHub)

    Treat interrupted fetches and position stores as normal shutdown once a tracker has been cancelled. This keeps the stricter retry interruption behavior intact while preventing tracker threads from printing uncaught InterruptedExceptions during Fluxzero shutdown.

    Add regression coverage for interrupted fetch shutdown and interrupted position storage after cancellation.

  • websocket: keep reconnects off io threads (GitHub)

    SDK 1.133 migrated websocket clients from annotation-based endpoints to programmatic endpoints for capability negotiation. With Undertow, server-initiated abnormal closes can then invoke callbacks on XNIO I/O threads, so retrying outstanding requests inline may block reconnects until UT003035 timeouts. Route websocket message, pong, close, and error callbacks through the result executor, keep reconnect work on the reconnect executor, and make shutdown explicitly drain callback executors while logging late callbacks after close. Add a CI reconnect test with a test-only endpoint that force-closes an outstanding tracking request and verifies the replacement session is opened without close handling running on an XNIO thread.

Tests
  • benchmark: add tracker integration benchmark (GitHub)

    Add a standalone TrackerIntegrationBenchmark that can stress many consumers and websocket clients against a local runtime.

    The benchmark publishes configurable event traffic, waits for all consumers to observe the expected messages, and logs missing consumer progress when the run times out.

  • websocket: add ping latency benchmark (GitHub)

    Add a focused websocket benchmark for investigating ping and pong latency against a real runtime.

    The benchmark keeps tracking sessions open, optionally publishes event traffic, continuously reads message batches, and reports ping scheduling lag, pong callback latency, pong end-to-end latency, latency buckets, timeout counts, publish/read counters, and callback thread summaries.

    This gives us a lightweight way to compare SDK versions and spot pong tail latency moving toward ping timeouts under realistic websocket message traffic without turning timing-sensitive behavior into a flaky CI test.

GitHub

1.152.5 (2026-04-20)

Bug Fixes
  • tracking: handle removed trackers gracefully in schedule logic (GitHub)

    Ensure scheduler does not attempt to process trackers already removed from clusters, enhancing reliability and preventing unnecessary operations. Add updated test coverage for null and empty task cases.

  • ensure in-flight request does not re-add tracker to cluster after disconnect (GitHub)
  • use List.getLast() (GitHub)
GitHub

1.152.4 (2026-04-19)

Dependency updates
  • Update dependency org.springframework:spring-framework-bom to v7.0.7 (#175) (GitHub)

    org.springframework:spring-framework-bom: to 7.0.7

GitHub

1.152.3 (2026-04-17)

Dependency updates
  • Update dependency io.jooby:jooby to v4.4.0 (#172) (GitHub)

    io.jooby:jooby: to 4.4.0

GitHub

1.152.2 (2026-04-17)

Dependency updates
  • Update dependency maven to v3.9.15 (#173) (GitHub)

    maven: to 3.9.15

GitHub

1.152.1 (2026-04-17)

Dependency updates
  • Update dependency org.jboss.resteasy:resteasy-undertow to v7.0.2.Final (#174) (GitHub)

    org.jboss.resteasy:resteasy-undertow: to 7.0.2.Final

GitHub

1.152.0 (2026-04-17)

Tests
  • web: Prevent flakiness from shared forward-proxy consumers during test (GitHub)
GitHub

1.151.2 (2026-04-17)

Dependency updates
  • Update softprops/action-gh-release action to v3 (GitHub)
GitHub

1.151.1 (2026-04-14)

Bug Fixes
  • tracking: remove unused join in pause event publishing (GitHub)
  • tracking: preserve interrupts while storing position (GitHub)

    Handle InterruptedException explicitly when waiting for tracker position updates so storePosition does not lose the thread interrupt state or keep retrying it as a normal failure.

    This keeps tracker shutdown and cancellation responsive and adds focused test coverage for interrupted position storage.

  • websocket: shut down result handling on close (GitHub)

    Shut down the websocket result executor when the client closes so background result handling threads do not outlive the client lifecycle.

    This keeps websocket executor cleanup consistent with the ping and reconnect executors while preserving the existing websocket test coverage.

  • websocket: run ping timeouts on a worker pool (GitHub)

    Configure the websocket ping scheduler with a dedicated worker pool so expired ping tasks no longer execute inline on the scheduler thread.

    This keeps ping timeout handling from stalling on a single scheduler thread and adds focused tests for async task delegation and websocket ping scheduler configuration.

  • websocket: make reconnect retries easier to follow (GitHub)

    Log repeated websocket connection failures more frequently and include retry counts in both retry and success messages.

    This makes long-running reconnect loops easier to diagnose in production and adds focused tests around the retry logging cadence.

  • websocket: configure connection timeouts explicitly (GitHub)

    Add an explicit websocket connection timeout to the client config, propagate it to the underlying websocket container, and wrap connection attempts in a slightly longer outer failsafe.

    This makes connection setup behavior more predictable, keeps the public config independent from a specific container implementation, and adds focused tests for timeout propagation and outer timeout cancellation.

  • websocket: validate session pool size upfront (GitHub)

    Reject websocket session pools smaller than one and simplify round-robin index updates with floorMod for clearer, safer slot selection.

    This prevents invalid pool configurations from failing later at runtime and adds focused tests for zero, negative, and single-session pool behavior.

  • websocket: retry requests off the close thread (GitHub)

    Schedule outstanding websocket request retries on a dedicated reconnect executor instead of running them inline from onClose or abort-driven close handling.

    This keeps reconnect work away from timeboxed close threads, avoids interruption-driven reconnect failures, and adds focused test coverage for backlog-gated async retries without timing-sensitive assertions.

  • retries: stop retry loops on thread interruption (GitHub)

    Treat thread interruption as a cancellation signal inside retryOnFailure instead of retrying it as a normal failure.

    This prevents reconnect and other retry-driven flows from silently restarting after an interrupted task and makes the retry behavior easier to reason about.

GitHub

1.151.0 (2026-04-14)

Features
  • scheduling: trace schedule side effects with branch ids (GitHub)

    Add a schedule branch trace to published schedules so direct and indirect side effects can be grouped under a single schedule execution. Each reschedule creates a new branch id, keeping repeated runs of the same schedule distinct in observability and debugging flows.

GitHub

1.150.1 (2026-04-13)

Bug Fixes
  • spring: ignore direct handler bean definitions (GitHub)

    Remove direct bean definitions for Stateful, TrackSelf and SocketEndpoint types before registering Fluxzero prototypes.

    This prevents Spring from trying to instantiate handler classes as regular beans in setups that explicitly include these annotations in component scanning, and adds regression coverage for constructor-injected Stateful types.

GitHub

1.136.1 (2026-04-13)

Bug Fixes
  • threading: allow disabling virtual thread workers (GitHub)

    Guard virtual thread worker support behind a configurable property named `fluxzero.virtual-threads.allowed` (default true) in addition to the Java version (>= 25) check.

    Also resolve environment variables through normalized underscore aliases so settings like FLUXZERO_VIRTUAL_THREADS_ALLOWED work consistently, and add focused tests for both the property toggle and alias resolution.

GitHub

1.150.0 (2026-04-12)

Tests
  • web: add static and websocket handler coverage (GitHub)
Chores
  • repo: standardize license text and line endings (GitHub)
GitHub

1.149.9 (2026-04-12)

Bug Fixes
  • content-filtering: preserve JsonIgnore filtering in Java and Kotlin (GitHub)

    Keep a single internal mapper inside JacksonContentFilter so filtered values can be materialized without mutating the serializer mapper.

    Wrap the existing Jackson annotation introspectors when disabling JsonIgnore so Java fields stay available during content filtering while Kotlin constructor binding keeps working.

    Add Java and Kotlin regression tests for disableJsonIgnore and @​FilterContent round trips.

  • spring: decouple scanned handlers from bean stereotypes (GitHub)

    Register Stateful, TrackSelf and SocketEndpoint types through scan-scoped Fluxzero prototypes so handlers still follow component-scan and type-level conditional annotations without being exposed as regular Spring beans.

    This removes the need for IDE warning suppressions around prototype beans and adds regression coverage for conditional registration and non-bean visibility.

Tests
  • kotlin: isolate kotlin-specific tests in dedicated module (GitHub)

    Move Kotlin-specific tests and fixtures into a dedicated kotlin-tests module so the Java-focused modules can stay simpler.

    Keep the kapt-dependent type registry tests Maven-gated while leaving the other Kotlin tests IDE-friendly.

    Replace dependencies on internal sdk test fixtures with local Kotlin fixtures so the module behaves more like a standalone consumer project.

GitHub

1.149.8 (2026-04-12)

Bug Fixes
  • content-filtering: preserve Kotlin deserialization in JacksonContentFilter (GitHub)

    Use a dedicated mapper for filter serialization and keep a clean mapper for deserializing filtered JSON back into domain types. This avoids Kotlin data classes failing during @​FilterContent processing when JsonIgnore handling is customized.

    Add a Kotlin regression test that reproduces the issue and verifies filtered Kotlin objects are materialized correctly.

GitHub

1.149.7 (2026-04-11)

Dependency updates
  • Update dependency at.yawk.lz4:lz4-java to v1.11.0 (#170) (GitHub)

    at.yawk.lz4:lz4-java: to 1.11.0

GitHub

1.149.6 (2026-04-11)

Bug Fixes
  • proxy: avoid shutdown hangs and websocket close noise (GitHub)

    Use a best-effort websocket close path during embedded proxy shutdown so the proxy no longer waits on close acknowledgements while the test server is already stopping.

    Also suppress expected closed-channel send errors in the websocket client once shutdown has started, which removes noisy shutdown stack traces without changing normal request handling.

GitHub

1.149.5 (2026-04-11)

Bug Fixes
  • stabilize hidden schedule deadline test (GitHub)

    Make the regression test deterministic by fixing the schedule store clock and disabling retention for the scenario.

    This avoids CI flakes where the schedule could already be visible or the backing message could be purged before the assertion runs.

GitHub

1.149.4 (2026-04-11)

Bug Fixes
  • proxy: avoid competing websocket response handlers (GitHub)

    Reuse the proxy request handler for websocket close acknowledgements instead of creating a second WEBRESPONSE consumer.

    This keeps proxy shutdown stable without triggering unknown request warnings from multiple handlers consuming the same client response stream.

GitHub

1.149.3 (2026-04-11)

Bug Fixes
  • test-server: wake waiting trackers for hidden schedule deadlines (GitHub)

    Make the in-memory schedule store expose an explicit includeFuture batch path so the test server can detect the next hidden deadline while a tracker is long-polling.

    This avoids an extra max-wait cycle before scheduled messages become visible and adds a regression test for the immediate-next-index case.

GitHub

1.149.2 (2026-04-10)

Dependency updates
  • Update dependency io.jooby:jooby to v4.3.0 (#169) (GitHub)

    io.jooby:jooby: to 4.3.0

GitHub

1.149.1 (2026-04-09)

Bug Fixes
  • stabilize flaky websocket proxy shutdown test (GitHub)

    Wait for the websocket close flow to complete on the WEBRESPONSE ack instead of only waiting for the close request to be appended.

    This hardens the closeProxy path and helps keep the GitHub build pipeline stable under CI timing variability.

GitHub

1.149.0 (2026-04-09)

No commits were found for this release.

GitHub

1.148.1 (2026-04-09)

Bug Fixes
  • fall back to Void for payload class instead of null (GitHub)
GitHub

1.148.0 (2026-04-08)

Features
  • serialization: support Kotlin type registry processing (GitHub)

    Add an explicit RegisterType.root override so Kotlin projects can register package prefixes without package-info.java.

    Update the type registry processor to merge prefixes and types across processing rounds and preserve Kotlin kapt outputs.

    Add kapt-backed regression coverage, including a Given/When/Then fixture test that deserializes Kotlin simple type names from JSON.

Documentation
  • entities: add examples for multi-level `@​Apply` methods (GitHub)
GitHub

1.147.0 (2026-04-08)

Code Refactoring
  • reflection: cache reflection info onto one object per type (GitHub)
GitHub

1.146.0 (2026-04-08)

Features
  • web: Allow serializer to deserialize to generic type from an unknown serialized type (GitHub)
GitHub

1.145.0 (2026-04-07)

Features
  • correlation: include handler name in correlation metadata (GitHub)
GitHub

1.144.0 (2026-04-05)

Features
  • websocket: include versions in connect metrics (GitHub)

    Add sdkVersion and runtimeVersion to ConnectEvent so websocket connect metrics capture both the client SDK version and the runtime version that accepted the connection.

    Resolve the runtime version from packaged test-server build metadata, wire both values into the runtime-side ConnectEvent publication path, and cover the new fields with websocket endpoint tests.

GitHub

1.143.1 (2026-04-05)

Bug Fixes
  • common: avoid duplicate memoized delegate calls (GitHub)

    Use computeIfAbsent for non-expiring cache misses so concurrent callers share a single delegate invocation per key.

    Add a regression test that forces concurrent access and verifies the delegate is still executed only once.

GitHub

1.143.0 (2026-04-04)

Features
  • websocket: send SDK version during handshake (GitHub)

    Advertise the SDK artifact version in websocket handshake headers so the runtime can observe which SDK version a client application is using.

    Also prepare runtime-version negotiation on the client side, include the negotiated runtime version in connection logs, and expose the client SDK version in websocket session metadata for the test server.

    Add a warning when SDK build metadata cannot be resolved, which helps diagnose shaded or repackaged deployments that strip META-INF resources.

GitHub

1.142.4 (2026-04-04)

Bug Fixes
  • entity: stabilize mutable entity replay diagnostics (GitHub)
GitHub

1.142.3 (2026-04-04)

Bug Fixes
  • stabilize websocket proxy shutdown close handling (GitHub)

    Wait for asynchronous websocket close notifications during proxy shutdown so the WS_CLOSE handler is not lost while the proxy is shutting down.

    Add a regression test that simulates a delayed onClose callback to cover the original flake in ProxyServerTest.

  • entity: preserve routed root-child apply replay (GitHub)

    Only treat a routed update as ambiguous when its routing key overlaps the current aggregate id and the payload also carries a distinct descendant id.

    This restores payment-style root plus child @​Apply flows during replay while keeping root-only routed replay on the fast path.

    Add regression coverage for typed payment attempt apply and replay behaviour.

GitHub

1.142.2 (2026-04-04)

Dependency updates
  • Update gcr.io/distroless/java25-debian13:nonroot Docker digest to efb9a50 (#168) (GitHub)

    gcr.io/distroless/java25-debian13:nonroot: to efb9a50

GitHub

1.142.1 (2026-04-04)

Bug Fixes
  • entity: support multi-level apply without slowing routed replay (GitHub)

    Treat payloads that carry both the current aggregate id and a distinct descendant id as ambiguous instead of immediately routing them to the current entity.

    This preserves multi-level @​Apply flows such as CreatePaymentAttempt while keeping the routing-key replay fast path intact.

    Add a regression test for the payment/attempt aggregate-plus-child-id case.

Tests
  • entity: simplify self-referential entity tests (GitHub)
GitHub

1.142.0 (2026-04-03)

No commits were found for this release.

GitHub

1.141.1 (2026-04-03)

Bug Fixes
  • remove incorrect PositionStore overload with current position context (GitHub)
Tests
  • Add given and when methods for metrics to TestFixture (GitHub)
GitHub

1.141.0 (2026-04-03)

No commits were found for this release.

GitHub

1.140.0 (2026-04-03)

No commits were found for this release.

GitHub

1.139.0 (2026-04-03)

Features
  • entity: support self-referential nested entities (GitHub)

    Allow recursive member entities to target nested children with either routing keys or id properties.

    Support self-referential entities as aggregate roots while preserving child existence checks and simple add/delete apply handlers.

    Expand recursive folder coverage and trim the lookup/apply overhead introduced by recursive targeting.

  • entity: support multi-level apply with faster replay (GitHub)

    Allow a single update to apply across multiple entity levels while preserving sibling state during immutable rebuilds.

    This also adds replay-specific routing and wrapper reuse optimizations, lightweight resolver/memoization improvements, and load/apply benchmarks to verify the new behavior and performance.

Bug Fixes
  • entity: keep publish-only events out of aggregate playback (GitHub)

    Treat publish-only no-op applies as publications without creating a new aggregate state transition. Commit stateful side effects only when the aggregate instance actually changes, and let the caching repository ignore aggregate-context events that do not carry a sequence number. Add playback coverage for searchable aggregates so cache backfill and document indexing stay stable for this path.

Performance Improvements
  • benchmark: tune event load benchmark defaults (GitHub)
GitHub

1.138.3 (2026-04-02)

Dependency updates
  • Update dependency io.jooby:jooby to v4.2.0 (#167) (GitHub)

    io.jooby:jooby: to 4.2.0

GitHub

1.138.2 (2026-04-02)

Bug Fixes
  • web: allow Instant values to be bound from web request parameters (GitHub)
GitHub

1.138.1 (2026-03-30)

Bug Fixes
  • sdk: skip cache rebuild if possible while building a new Fluxzero instance (GitHub)
  • ignore duplicate caster registrations (GitHub)

    TestFixture can replay registerCasters modifiers when switching through spy() or async() while reusing the same serializer instance.
    Treat re-registering the exact same caster as a no-op, while still failing for conflicting casters, and cover both the chain-level and fixture-level regression paths in tests.

GitHub

1.138.0 (2026-03-30)

Features
  • Allow PositionStore implementations to perform optimistic concurrency checks (GitHub)
GitHub

1.137.1 (2026-03-30)

Bug Fixes
  • sdk: rebuild caches when creating a new Fluxzero instance (GitHub)

    Add Cache.rebuild() so builder cache configuration stays backward compatible while each Fluxzero build still gets fresh cache instances.

    This fixes an issue in tests where resetting or deriving a TestFixture reused mutable caches from the previous fixture, which could leave stale state behind and cause unexpected behavior.

GitHub

1.137.0 (2026-03-29)

Features
  • web: Allow generic type payload parameters in web handler methods (GitHub)
GitHub

1.136.0 (2026-03-29)

Tests
  • modeling: stabilize stale commit playback assertion (GitHub)

    Remove the timing-sensitive expectation that the newest cached aggregate version still has no event index after a stale commit path.

    The regression now checks the stable invariant instead: the latest cached head points to the newer event while the previous cached version retains the backfilled index of the earlier event.

GitHub

1.135.1 (2026-03-29)

Dependency updates
  • Update sigstore/cosign-installer action to v4.1.1 (#163) (GitHub)

    sigstore/cosign-installer: to 4.1.1

GitHub

1.135.0 (2026-03-29)

No commits were found for this release.

GitHub

1.134.1 (2026-03-29)

Bug Fixes
  • proxy: wait for websocket request ack on close (GitHub)

    Use the runtime append acknowledgement for websocket proxy requests and wait for it during websocket close handling.

    This makes proxy shutdown more robust by ensuring the WS_CLOSE request is accepted by the runtime before the websocket session fully tears down.
    It also gives slightly better observability for websocket proxy traffic, without waiting for the actual request handling result.

GitHub

1.134.0 (2026-03-29)

Features
  • support suppression of pending consumer warnings in test fixtures (GitHub)

    Add `suppressPendingConsumerWarning` to `TestFixture` for tests involving paused or stalled consumers. Update relevant tests to disable warnings when consumers remain pending intentionally.

Changes
  • Revert "fix(test): isolate shared fixture interceptor state" (GitHub)

    This reverts commit e774b24a0dd749625b0b0218abdbc7599919fbff.

GitHub

1.133.0 (2026-03-29)

Features
  • runtime-websocket: negotiate session capabilities (GitHub)

    Send websocket client capabilities and session metadata during the handshake and let the runtime respond with the negotiated settings.

    Use negotiated session ids consistently across websocket logging, metrics, events and tracker state, while keeping legacy runtimes compatible through the existing compression query parameter fallback.

    Also reject custom AbstractWebsocketClient subclasses annotated with @​ClientEndpoint so unsupported extension patterns fail fast with a clear error message.

Bug Fixes
  • isolate shared fixture interceptor state (GitHub)
  • ignore unreachable consumers in fixture waits (GitHub)
GitHub

1.132.0 (2026-03-28)

No commits were found for this release.

GitHub

1.131.1 (2026-03-28)

Bug Fixes
  • repository: skip stale no-op aggregate commits (GitHub)

    A handler can roll back to the same aggregate instance and end up with no unpublished events. Committing that state should not touch the aggregate cache, because there is nothing durable to store and it can interfere with later playback or reload behavior.

    Return early when after == before and there are no unpublished events. If a no-event commit races with a newer cached head, evict that cache entry instead of keeping a stale in-memory state around.

    This complements the earlier fix that evicts inconsistent same-client aggregate histories during event-index backfill. Together they protect playback from both out-of-order cached histories and stale no-op commits.

    Add regressions for preserving backfilled indices, clearing stale no-event commits after backfill, and clearing stale no-event commits against a different cached head.

GitHub

1.131.0 (2026-03-28)

Features
  • tracking: support conditional exclusivity around index bounds (GitHub)

    This adds exclusiveBeforeMinIndex and exclusiveAfterMaxIndex to consumer configuration so shared handlers can move between consumers during index-based splits and merges.

    Conditionally exclusive consumers no longer fully claim handlers during assignment. Instead, DefaultTracking applies a central handler decorator that decides per message index which consumer is allowed to invoke the shared handler. This makes it possible to hand over execution at minIndex or after maxIndexExclusive without duplicating handler invocation inside the overlap window.

    The feature is covered with split and merge tests, and the new configuration is documented in the consumer javadocs with guidance on when to use it.

GitHub

1.130.0 (2026-03-28)

Features
  • tracking: revive max-index trackers after reset (GitHub)

    Trackers that reached maxIndexExclusive previously disconnected permanently, which meant a resetPosition required restarting the client application before reads would resume.

    This change keeps those trackers alive in a suspended state after disconnecting them, polling the stored consumer position every 10 seconds. When the stored lowest index changes and drops below maxIndexExclusive, the tracker resumes reading automatically without an application restart.

    The tracking tests were updated to cover suspend and revive behavior, and the max-index consumer configuration test now uses a shorter consumer timeout to keep the suite fast.

Bug Fixes
  • tracking: stop expired trackers before first read (GitHub)

    Trackers with a maxIndexExclusive in the past could still perform an initial read after redeploy, even when their committed position had already reached that max index. This caused unnecessary reads and noisy lag/behind metrics for effectively inactive consumers.

    This change checks the stored position via GetPosition before the first batch fetch when the configured max index is already in the past. If the consumer has already reached maxIndexExclusive, the tracker disconnects immediately without issuing a read. Regular tracker startup behavior remains unchanged otherwise.

GitHub

1.129.0 (2026-03-27)

Tests
  • modeling: increase timeouts and improve assertions in AggregatePlaybackTest (GitHub)
GitHub

1.128.1 (2026-03-27)

Bug Fixes
  • proxy: wait for close handler in closeProxy test (GitHub)

    Synchronize the flaky websocket shutdown test on the server-side close handler as well as the open handler.
    This avoids asserting published events before the HandleSocketClose callback has finished emitting them.

GitHub

1.128.0 (2026-03-27)

No commits were found for this release.

GitHub

1.127.1 (2026-03-27)

Bug Fixes
  • entity: evict inconsistent aggregate histories (GitHub)

    Prevent cached aggregate histories from staying in an order that no longer matches global event index order when same-client event indices are filled in later.

    This keeps handler playback aligned with the handled event, so consumers do not observe a later no-op state instead of the intended historical version.

    Also keep local baseline versions without event metadata valid, avoiding unnecessary cache eviction and reload failures in aggregate entity flows.

GitHub

1.127.0 (2026-03-27)

Tests
  • javadoc: fix javadoc generation (GitHub)
GitHub

1.126.0 (2026-03-27)

Features
  • search: store document metadata as entries (GitHub)

    Move indexed document metadata from facets to internal document entries so high-cardinality metadata values no longer pollute facet statistics.

    Expose metadata lazily on Document, SerializedDocument, and SearchHit while keeping SerializedDocument metadata out of the wire format. Preserve metadata matching and add regressions for dotted, slashed, and numeric metadata keys.

GitHub

1.125.0 (2026-03-27)

Tests
  • proxy: stabilize closeProxy websocket shutdown test (GitHub)

    Replace fixed sleeps with an explicit websocket-open latch before closing the proxy request handler.
    Add a bounded timeout when waiting for websocket results so regressions fail fast instead of hanging.

GitHub

1.124.0 (2026-03-27)

Features
  • socket-endpoint: support association-based endpoint routing (GitHub)

    Add shared handler association resolution for stateful and socket endpoint handlers.
    Enable @​Association matching for non-socket handlers on @​SocketEndpoint instances while preserving existing behavior when no associations are present.
    Also update tests, javadocs, and agent manuals to document the new routing model.

GitHub

1.123.0 (2026-03-27)

Features
  • stateful: support parameter-based associations (GitHub)

    Allow @​Association on handler parameters and resolve association values from the injected parameter value instead of only the current payload. This also enables stateful matching for resolved parameters such as @​Trigger payloads.

    Add positive and negative stateful regression tests, document parameter-level association in the Javadocs, and update the agent manuals with short valid examples.

GitHub

1.122.0 (2026-03-27)

No commits were found for this release.

GitHub

1.121.0 (2026-03-27)

Features
  • search: add explicit null ordering support for sorting (GitHub)

    Extend sorting methods in the `Search` interface to support explicit null ordering.

    Update the `Document` comparator to handle these new sorting options and extend test coverage for null ordering scenarios.

GitHub

1.120.0 (2026-03-26)

Features
  • casting: support repeatable upcasts and downcasts (GitHub)

    Register repeated @​Upcast and @​Downcast annotations through CastInspector so a single method can participate in multiple revisions.

    Also make the repeatable container annotations public and add chain plus Spring configuration tests to cover discovery and sequential application.

GitHub

1.119.7 (2026-03-25)

Bug Fixes
  • tracking: coalesce tracking updates without missing empty wakeups (GitHub)

    DefaultTrackingStrategy now coalesces overlapping update notifications into a single
    follow-up pass while still preserving the latest signal.

    Wakeups are tracked with an update notification version instead of lastSeenIndex so
    empty updates from the schedule store still resume waiting trackers.

    Add compact regression tests for direct delivery, waiting wakeups, coalescing,
    timeouts, disconnects and empty-update handling.

GitHub

1.119.6 (2026-03-23)

Dependency updates
  • Update undertow.version to v2.3.24.Final (#162) (GitHub)

    undertow.version: to 2.3.24.Final

GitHub

1.119.5 (2026-03-22)

Dependency updates
  • Update dependency com.fasterxml.jackson:jackson-bom to v2.21.2 (#161) (GitHub)

    com.fasterxml.jackson:jackson-bom: to 2.21.2

GitHub

1.119.4 (2026-03-20)

Dependency updates
  • Update gcr.io/distroless/java25-debian13:nonroot Docker digest to 7c2ef3e (#160) (GitHub)

    gcr.io/distroless/java25-debian13:nonroot: to 7c2ef3e

GitHub

1.119.3 (2026-03-19)

Dependency updates
  • Update dependency org.jboss.logging:jboss-logging to v3.6.3.Final (#159) (GitHub)

    org.jboss.logging:jboss-logging: to 3.6.3.Final

GitHub

1.119.2 (2026-03-18)

Dependency updates
  • Update dependency io.jooby:jooby to v4.1.0 (#158) (GitHub)

    io.jooby:jooby: to 4.1.0

GitHub

1.119.1 (2026-03-18)

Dependency updates
  • Update kotlin monorepo to v2.3.20 (#157) (GitHub)

    kotlin monorepo: to 2.3.20

GitHub

1.119.0 (2026-03-16)

Code Refactoring
  • configuration: centralize parameter resolvers (GitHub)
GitHub

1.118.2 (2026-03-16)

Bug Fixes
  • tracking: centralize ordered interceptors (GitHub)
GitHub

1.118.1 (2026-03-16)

Dependency updates
  • Update gcr.io/distroless/java25-debian13:nonroot Docker digest to 66a2300 (#156) (GitHub)

    gcr.io/distroless/java25-debian13:nonroot: to 66a2300

GitHub

1.118.0 (2026-03-15)

Features
  • concurrency: prefer virtual worker pools on JDK 25+ (GitHub)

    Centralize worker pool creation in ObjectUtils so SDK and common components can use named virtual-thread pools on Java 25 and newer, while falling back to fixed-size platform pools on older JDKs.

    This updates request/response handling, tracking workers, websocket processing, shutdown paths and test-server websocket handling, and keeps schedulers and explicitly single-threaded executors unchanged.

GitHub

1.117.0 (2026-03-15)

Features
  • stateful: infer method association from routing key (GitHub)

    When @​Association is used on a handler method without an explicit value, method-level associations now fall back to the method's @​RoutingKey value when present, and otherwise to the message's computed routing key.

GitHub

1.116.0 (2026-03-15)

Features
  • stateful: make @​EntityId imply @​Association (GitHub)

    This removes the need to annotate the same property with both @​EntityId and @​Association in stateful handlers.

    The supporting reflection changes keep annotation discovery consistent for meta-annotations and interface-declared properties, avoid duplicate property handling when the same member is annotated in multiple places, and add regression coverage for routing, members, and stateful associations.

GitHub

1.115.0 (2026-03-15)

Features
  • entity: support multiple aggregate snapshots (GitHub)

    Store snapshots in the document store, keep multiple snapshots per aggregate, and load older snapshots for previous() when available.

    Also add dedicated snapshot store tests and strict aggregate-id matching to avoid collisions between similar ids.

GitHub

1.114.3 (2026-03-15)

Bug Fixes
  • modeling: document @​Member record withers (GitHub)

    Clarify that record owners need an explicit withXxx method or @​Member(wither=...) for automatic parent updates, improve runtime guidance when no update function is available, and add a regression test covering nested member updates in records.

  • dataprotection: support records and clarify protection rules (GitHub)

    Handle record payloads by rebuilding sanitized and restored instances instead of mutating final fields during protected-data interception.

    Document the exact whole-field versus nested traversal rules for @​ProtectData and add coverage for record and JsonNode payloads.

  • dataprotection: support annotated nested protected paths (GitHub)

    Follow only explicitly annotated @​ProtectData properties when traversing nested values, and protect the whole field when the value type is also annotated.

    Allow @​ProtectData on types, mark Id as protected by type, and add coverage for nested, type-level, Id, and Data payload cases.

Documentation
  • project-files: clarify @​ProtectData rules (GitHub)

    Update the Java and Kotlin validation manuals to describe whole-field protection rules, explicit nested-path requirements, and an example showing which nested fields are and are not protected.

Code Refactoring
  • common: introduce Leaf marker for scalar value objects (GitHub)

    Add a common Leaf marker and let Id implement it so reflection-based traversal treats identifier wrappers as terminal values without relying on type annotations.

    Update data protection to treat JsonNode as a whole protected value and add coverage for leaf-based Id handling, sorting, and protected JsonNode payloads.

  • serializer: split serialized-object normalization from serialize (GitHub)

    Move Data-based normalization out of serialize(Object) into normalize(SerializedObject<?>) so serialize keeps object-to-bytes semantics.

    Update TestFixture to normalize serialized inputs explicitly and adapt ProxySerializer to the new interface.

Tests
  • dataprotection: cover nested record protection (GitHub)

    Update the ProtectData JavaDoc examples to use records and add a regression test covering nested protected record components so the documented behavior is exercised explicitly.

GitHub

1.114.2 (2026-03-15)

Dependency updates
  • Update dependency org.springframework:spring-framework-bom to v7.0.6 (#155) (GitHub)

    org.springframework:spring-framework-bom: to 7.0.6

GitHub

1.114.1 (2026-03-14)

Bug Fixes
  • content-filtering: filter map values in @​FilterContent (GitHub)

    Apply content filtering to Jackson map serializers so values inside map fields are filtered consistently. Remove map entries when a filtered value becomes null and add regression tests for both removal and partial filtering.

GitHub

1.114.0 (2026-03-14)

Features
  • search: add streaming search input streams (GitHub)

    Add a reusable StreamInputStream helper and extend Search with typed input-stream output methods.

    Support UTF-8 and OutputStream-based mapping for typed search results, plus a convenience NDJSON stream backed by JsonNode serialization.

GitHub

1.113.2 (2026-03-14)

Bug Fixes
  • web: bind @​FormParam for form-urlencoded requests (GitHub)

    Parse application/x-www-form-urlencoded request bodies into form parameters in DefaultWebRequestContext so @​FormParam resolves for web request handlers.

  • remove some build warnings (GitHub)
GitHub

1.113.1 (2026-03-14)

Bug Fixes
  • retry: log success correctly in retrying error handler (GitHub)

    Ensure RetryingErrorHandler triggers the success logger when the first retry succeeds, while keeping the generic retry utility silent on direct success by default. Clarify the retry-count semantics by treating the first attempt in the handler's retry cycle as an already-started retry and cover the behavior with focused tests.

GitHub

1.113.0 (2026-03-14)

Tests
  • interceptors: move service loader checks downstream (GitHub)
GitHub

1.112.1 (2026-03-14)

Bug Fixes
  • metrics: clamp cpu usage values to valid range (GitHub)

    Normalize process and system CPU load values reported by the JMX operating system bean to the documented 0..1 range. This avoids flaky assertions when some JVM or platform combinations report values slightly above 1.0 due to rounding or sampling noise.

  • web: support low-level payload conversions in getPayloadAs (GitHub)

    Handle WebRequest and WebResponse payload conversion through shared WebUtils logic so tests can use object payloads while production responses still support raw JSON bytes. Add explicit String/byte[] conversion paths and recognize JSON content types with parameters or +json suffixes.

GitHub

1.112.0 (2026-03-14)

Features
  • web: add @​BodyParam injection for JSON request fields (GitHub)

    Support extracting typed values from JSON request bodies in web handlers via @​BodyParam.

    Also adds annotation-processor coverage for Java parameter-name fallback, body/query source fallback in the web request context, and examples in the project AI manuals.

GitHub

1.111.1 (2026-03-14)

Bug Fixes
  • interceptors: skip unknown service loaded interceptors (GitHub)
GitHub

1.111.0 (2026-03-14)

Features
  • interceptors: auto-load service interceptors (GitHub)

    Load dispatch, handler and batch interceptors via ServiceLoader in the interceptor interfaces themselves so they are applied consistently in runtime and TestFixture.

    Document that service-loaded interceptors participate in @​Order-based ordering and can affect tests automatically.

  • interceptors: enable consumer-scoped dispatch interceptors (GitHub)

    Allow @​Consumer and ConsumerConfiguration to register dispatch interceptors that are active for the lifetime of consumer batch processing via AdhocDispatchInterceptor.

    Also make DisableMetrics usable as a DispatchInterceptor so metrics can be suppressed through the new consumer-scoped dispatch path.

  • configuration: apply interceptor ordering within consumers (GitHub)
GitHub

1.110.0 (2026-03-14)

Features
  • configuration: support interceptor ordering via @​Order (GitHub)
GitHub

1.109.2 (2026-03-14)

Bug Fixes
  • modeling: throw not-found when child create has no parent (GitHub)
GitHub

1.109.1 (2026-03-14)

Bug Fixes
  • web: reset path composition for absolute URLs (GitHub)

    Treat protocol-based @​Path and @​HandleWeb values as absolute so they reset path composition instead of inheriting outer @​Path prefixes.

GitHub

1.109.0 (2026-03-14)

Features
  • sdk: add Fluxzero-scoped memoization (GitHub)

    Add instance-bound memoization support to Fluxzero with class-scoped helpers by default and global variants for shared values within the same Fluxzero instance.

    This introduces a Memoization abstraction with a default implementation, exposes it from Fluxzero instances, and adds focused SDK tests for scoping, expiry, and removal behavior.

GitHub

1.108.1 (2026-03-13)

Dependency updates
  • Update dependency org.mockito:mockito-core to v5.23.0 (#154) (GitHub)

    org.mockito:mockito-core: to 5.23.0

GitHub

1.108.0 (2026-03-13)

Documentation
  • web: document standard validation annotations for injected parameters (GitHub)
GitHub

1.107.2 (2026-03-13)

Dependency updates
  • Update dependency org.projectlombok:lombok to v1.18.44 (#153) (GitHub)

    org.projectlombok:lombok: to 1.18.44

GitHub

1.107.1 (2026-03-12)

Dependency updates
  • Update dependency io.jooby:jooby to v4.0.17 (#152) (GitHub)

    io.jooby:jooby: to 4.0.17

GitHub

1.107.0 (2026-03-12)

No commits were found for this release.

GitHub

1.106.2 (2026-03-12)

Bug Fixes
  • web: validate injected params with configurable invocation checks (GitHub)

    Move executable-parameter validation into the Validator abstraction and wire it through HandlerConfiguration invocation hooks. Add disableWebParameterValidation on the builder so this behavior is toggled from configuration, keeping DefaultHandlerFactory simple. Also fix WebParameterProcessor signature generation to use erased parameter types so @​NotNull/@​Positive on @​PathParam do not break parameter-name registry lookups.

GitHub

1.106.1 (2026-03-12)

Dependency updates
  • Update dependency maven to v3.9.14 (#151) (GitHub)

    maven: to 3.9.14

GitHub

1.106.0 (2026-03-12)

Documentation
  • remove outdated skill guides and references in both Java and Kotlin agents (GitHub)
GitHub

1.105.0 (2026-03-12)

Code Refactoring
  • websocket: add `runAndWaitSafely` to `TimingUtils` and update `WebsocketClient` to use it (GitHub)
GitHub

1.104.1 (2026-03-12)

Bug Fixes
  • websocket: handle failure to close session during abort with fallback logic (GitHub)
GitHub

1.104.0 (2026-03-12)

Code Refactoring
  • scheduler: replace `Guarantee.SENT` with `Guarantee.STORED` in `MessageScheduler` methods (GitHub)
GitHub

1.103.0 (2026-03-12)

Features
  • websocket: replace synchronous ping with asynchronous and improve session management (GitHub)

    When a session is aborted, it now gets a maximum of 5 seconds to close.

GitHub

1.102.0 (2026-03-11)

Documentation
  • agents: clarify value object modeling for business details vs. scalar fields (GitHub)
  • remove expired documentation (GitHub)
GitHub

1.101.6 (2026-03-11)

Dependency updates
  • Update sigstore/cosign-installer action to v4.1.0 (#150) (GitHub)

    sigstore/cosign-installer: to 4.1.0

GitHub

1.101.5 (2026-03-06)

Dependency updates
  • Update dependency maven to v3.9.13 (#149) (GitHub)

    maven: to 3.9.13

GitHub

1.101.4 (2026-03-06)

Dependency updates
  • Update docker/metadata-action action to v6 (GitHub)
  • Update docker/build-push-action action to v7 (GitHub)
  • Update GitHub Artifact Actions (GitHub)
  • Update docker/login-action action to v4 (GitHub)
Changes
  • Refactor Position to range-based model (GitHub)

    Replace Position's per-segment TreeMap representation with segment ranges while preserving JSON wire compatibility (array format + legacy object deserialization).

    Consolidates Position serialization tests into PositionTest, removes TreemapPosition and ApiSerializationTest, and keeps a focused Position benchmark suite.

    Benchmark (1,000,000 iterations; temporary compat harness):

    Operation New ns/op Old ns/op Speedup
    merge full overlap 28.12 2399.60 85.33x
    merge rebalance overlap 79.44 2383.61 30.01x
    lowestIndexForSegment [0,64] 8.62 1850.52 214.68x
    lowestIndexForSegment [32,96] 9.12 1979.93 217.10x
    isNewIndex random segments 11.63 37.38 3.21x
    getIndex random segments 21.73 45.91 2.11x
    serialize to JSON 137.36 2208.43 16.08x
    deserialize from JSON 205.41 7088.07 34.51x

GitHub

1.101.3 (2026-03-05)

Dependency updates
  • Update dependency org.apache.maven.plugins:maven-resources-plugin to v3.5.0 (#146) (GitHub)

    org.apache.maven.plugins:maven-resources-plugin: to 3.5.0

GitHub

1.101.2 (2026-03-04)

Dependency updates
  • Update dependency io.jooby:jooby to v4.0.16 (#145) (GitHub)

    io.jooby:jooby: to 4.0.16

GitHub

1.101.1 (2026-03-04)

Dependency updates
  • Update dependency at.yawk.lz4:lz4-java to v1.10.4 (#144) (GitHub)

    at.yawk.lz4:lz4-java: to 1.10.4

GitHub

1.101.0 (2026-03-04)

Code Refactoring
  • retry: resolve delay dynamically in exception logger within `RetryConfiguration` (GitHub)
GitHub

1.100.0 (2026-03-04)

Features
  • retry: enhance `RetryConfiguration` with custom delay strategy and update `TimingUtils` to use it (GitHub)
GitHub

1.99.1 (2026-03-03)

Bug Fixes
  • reflection: unwrap invocation exception when common reflection is used in DefaultMemberInvoker (GitHub)
GitHub

1.99.0 (2026-03-03)

Features
  • websocket: add ws sessionId to response metrics metadata (GitHub)
GitHub

1.98.3 (2026-03-03)

Bug Fixes
  • reflection: add safeguard for excessive lambda parameters in DefaultMemberInvoker (GitHub)
GitHub

1.98.2 (2026-03-03)

Dependency updates
  • Update gcr.io/distroless/java25-debian13:nonroot Docker digest to ace83a0 (#142) (GitHub)

    gcr.io/distroless/java25-debian13:nonroot: to ace83a0

GitHub

1.98.1 (2026-03-01)

Dependency updates
  • Update dependency org.mockito:mockito-core to v5.22.0 (#141) (GitHub)

    org.mockito:mockito-core: to 5.22.0

GitHub

1.98.0 (2026-02-28)

No commits were found for this release.

GitHub

1.97.0 (2026-02-28)

No commits were found for this release.

GitHub

1.96.0 (2026-02-28)

Documentation
  • agents: clarify handling of WebRequest, WebResponse, and Schedule as Message subtypes (GitHub)
  • agents: extend guidelines with WebRequest, WebResponse, and Schedule handling (GitHub)
  • agents: add guidelines for incremental identifiers in handling and tracking rules (GitHub)
  • agents: integrate guideline to prefer queries over static utilities (GitHub)
  • agents: update `@​ServeStatic` guidelines with routing safety notes (GitHub)
  • agents: expand entity modeling guidelines with boundary heuristics and examples (GitHub)
  • agents: specify async fixture requirement for `@​HandleError` testing (GitHub)
  • agents: enhance entities manual with better samples (GitHub)
GitHub

1.95.2 (2026-02-26)

Dependency updates
  • Update gcr.io/distroless/java25-debian13:nonroot Docker digest to 4eadd00 (#139) (GitHub)

    gcr.io/distroless/java25-debian13:nonroot: to 4eadd00

GitHub

1.95.1 (2026-02-26)

Bug Fixes
  • websocket: make sure aborting a websocket session retries open requests 'no matter what' (GitHub)
GitHub

1.95.0 (2026-02-26)

Features
  • web: add `ExternalUrlHandler` for handling external URLs in path testing when `@​Path("/")` (GitHub)
GitHub

1.94.4 (2026-02-26)

Bug Fixes
  • web: fix path cleaning in `WebUtils` for `@​Path("/")` (GitHub)
GitHub

1.94.3 (2026-02-25)

Dependency updates
  • Update dependency com.fasterxml.jackson:jackson-bom to v2.21.1 (#138) (GitHub)

    com.fasterxml.jackson:jackson-bom: to 2.21.1

GitHub

1.94.2 (2026-02-25)

Bug Fixes
  • fixed logging in AbstractWebsocketClient (GitHub)
GitHub

1.94.1 (2026-02-25)

Bug Fixes
  • websocket: enhance logging and error handling (GitHub)

    - Updated `WebsocketTrackingClient` to include `topic` in the `toString` method.
    - Improved logging in `AbstractWebsocketClient` to capture session details during connection and disconnection.
    - Refined error handling messages for channel closure scenarios.

GitHub

1.94.0 (2026-02-23)

Documentation
  • Add automatic check for broken links in Markdown docs (GitHub)
  • Fix broken links and small errors (GitHub)
GitHub

1.93.0 (2026-02-22)

Documentation
  • add and integrate skill shortcuts into Java and Kotlin guidelines (GitHub)

    - Added new SKILL.md files for various agent skills in both Java and Kotlin, detailing workflows and guardrails for each skill area.
    - Updated guidelines and index files to include references to new skill shortcuts for execution acceleration.
    - Skill areas include domain-core, messaging-scheduling, replay-correction, runtime-bootstrap, schema-evolution, search-readmodels, slice-delivery, stateful-orchestration, and web-surface.

GitHub

1.92.3 (2026-02-21)

Dependency updates
  • Update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.5.5 (#137) (GitHub)

    org.apache.maven.plugins:maven-surefire-plugin: to 3.5.5

GitHub

1.92.2 (2026-02-20)

Dependency updates
  • Update dependency org.springframework:spring-framework-bom to v7.0.5 (#136) (GitHub)

    org.springframework:spring-framework-bom: to 7.0.5

GitHub

1.92.1 (2026-02-20)

Dependency updates
  • Update gcr.io/distroless/java25-debian13:nonroot Docker digest to 2e3d8fc (#135) (GitHub)

    gcr.io/distroless/java25-debian13:nonroot: to 2e3d8fc

GitHub

1.92.0 (2026-02-19)

Documentation
  • clarify location of AGENTS.md in agent guidelines (GitHub)

    - Updated Java and Kotlin guidelines to specify that `AGENTS.md` is located in the root of the repository.

GitHub

1.91.0 (2026-02-19)

Documentation
  • simplify Java and Kotlin agent guidelines (GitHub)
  • update Java and Kotlin guidelines with detailed testing and behavior rules (GitHub)
GitHub

1.90.0 (2026-02-19)

Documentation
  • enhance Java and Kotlin guidelines (GitHub)

    - Expanded on development order, emphasizing small feature slices and checkpoints post-slice.
    - Introduced detailed backlog discipline, focusing on vertical feature slices and explicit backlog granularity.
    - Updated guidelines to reinforce domain-driven development and endpoint strategy in both Java and Kotlin documents.

GitHub

1.89.0 (2026-02-19)

Documentation
  • update and expand guidelines on development order and backlog discipline (GitHub)

    - Revised development order to emphasize domain model, state transitions, and endpoint strategy.
    - Added mandatory build strategy focusing on building from the domain outward.
    - Introduced guidelines for backlog discipline with vertical feature slices.

GitHub

1.88.0 (2026-02-18)

Documentation
  • clarify substitution behaviors and improve path composition rules (GitHub)

    - Elaborated on substitution behavior in testing guides for both Kotlin and Java.
    - Added guidelines for using explicit web parameter names to avoid ambiguity.
    - Revised `@​Path` composition rules to detail path reset and appending logic.
    - Enhanced response shaping guidance in search documents to prefer projections over app code operations.

GitHub

1.87.0 (2026-02-18)

Documentation
  • enhance testing and guideline documentation (GitHub)

    - Improved clarity on asynchronous flow testing in `TestFixture`.
    - Added details on manual JSON loading and internal endpoint tests.
    - Refined guidelines on payload purity and server-side search logic.
    - Introduced upcasting type coverage and revision discipline.
    - Add runtime interaction manual and link from agent guides

GitHub

1.86.3 (2026-02-18)

Bug Fixes
  • search: prevent empty index and bulk update operations (GitHub)
GitHub

1.86.2 (2026-02-18)

Dependency updates
  • Update dependency ch.qos.logback:logback-classic to v1.5.32 (#134) (GitHub)

    ch.qos.logback:logback-classic: to 1.5.32

GitHub

1.86.1 (2026-02-18)

Bug Fixes
  • handler-factory: refine condition for identifying static file handlers (GitHub)
  • update file extension in .gitignore (GitHub)

    - Changed `.output` to `.output.txt` to correctly ignore files with the `.txt` extension.

GitHub

1.86.0 (2026-02-16)

No commits were found for this release.

GitHub

1.85.2 (2026-02-16)

Dependency updates
  • Update dependency maven-wrapper to v3.3.4 (GitHub)
  • Update dependency maven to v3.9.12 (#130) (GitHub)

    maven: to 3.9.12

Build System
  • Switch from Dependabot to Renovate [skip ci] (GitHub)
  • Switch from Dependabot to Renovate [skip ci] (GitHub)
GitHub

1.85.1 (2026-02-16)

Bug Fixes
  • proxy: ignore requests that are past their deadline (GitHub)

    - Also increased the timeout duration in `DefaultWebRequestGateway` to avoid premature timeouts.

GitHub

1.85.0 (2026-02-16)

Features
  • Prevent proxy from continuing in broken state after OutOfMemoryError (GitHub)
  • Use more extensible mechanism for starting proxy (GitHub)

    Runtimes can now override JAVA_TOOL_OPTIONS or CMD to change behavior

Dependency updates
  • bump distroless/java25-debian13 in /proxy (GitHub)

    distroless/java25-debian13: 29a8dfd -> e1eeec1

  • bump distroless/java25-debian13 in /test-server (GitHub)

    distroless/java25-debian13: 29a8dfd -> e1eeec1

  • bump org.junit:junit-bom from 6.0.2 to 6.0.3 (GitHub)

    org.junit:junit-bom: 6.0.2 -> 6.0.3 changelog

  • bump ch.qos.logback:logback-classic from 1.5.29 to 1.5.31 (GitHub)

    ch.qos.logback:logback-classic: 1.5.29 -> 1.5.31 changelog

  • bump org.springframework:spring-framework-bom from 7.0.3 to 7.0.4 (GitHub)

    org.springframework:spring-framework-bom: 7.0.3 -> 7.0.4 changelog

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

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

  • bump ch.qos.logback:logback-classic from 1.5.26 to 1.5.29 (GitHub)

    ch.qos.logback:logback-classic: 1.5.26 -> 1.5.29 changelog

GitHub

1.84.0 (2026-02-16)

Documentation
  • update agent guidelines for Kotlin & Java (GitHub)
GitHub

1.83.0 (2026-02-16)

Documentation
  • add comprehensive guidelines for Fluxzero AI assistants (GitHub)

    - Added a comprehensive list of manuals, providing a detailed reference for easier navigation.
    - Emphasized the pivotal role of the Guidelines and the use of a Task Decision Tree for task-specific navigation.
    - Removed outdated "Fluxzero Code Samples," "Fluxzero Overview," and "Guidelines" documents.
    - Added a new glossary section defining key terms and concepts used within the Fluxzero SDK.

GitHub

1.82.2 (2026-02-14)

Bug Fixes
  • reflection: handle native image case in DefaultMemberInvoker to skip lambda creation (GitHub)
GitHub

1.82.1 (2026-02-14)

Bug Fixes
  • host-metrics: javadoc / lombok work-around (GitHub)
GitHub

1.82.0 (2026-02-14)

Features
  • metrics: added option to collect and publish host metrics (GitHub)
Code Refactoring
  • host-metrics: removed context fields from HostMetrics and simplified config and tests somewhat (GitHub)
GitHub

1.81.0 (2026-02-14)

Features
  • proxy: add HTTP/2 support and configurable max request body sizes (GitHub)
  • Increase proxy (multipart) max entity size to 16MB (GitHub)
GitHub

1.80.2 (2026-02-12)

Bug Fixes
  • reflection: exclude methods without return type from being marked as potential property (GitHub)
GitHub

1.80.1 (2026-02-12)

Dependency updates
  • bump org.springframework:spring-framework-bom from 6.2.12 to 7.0.3 (GitHub)

    org.springframework:spring-framework-bom: 6.2.12 -> 7.0.3 changelog

  • bump undertow.version from 2.3.22.Final to 2.3.23.Final (GitHub)
    • undertow.version: 2.3.22.Final -> 2.3.23.Final
    • io.undertow:undertow-websockets-jsr: 2.3.22.Final -> 2.3.23.Final changelog
    • io.undertow:undertow-core: 2.3.22.Final -> 2.3.23.Final changelog
    • io.undertow:undertow-servlet: 2.3.22.Final -> 2.3.23.Final changelog
  • bump ch.qos.logback:logback-classic from 1.5.26 to 1.5.29 (GitHub)

    ch.qos.logback:logback-classic: 1.5.26 -> 1.5.29 changelog

  • bump kotlin.version from 2.3.0 to 2.3.10 (GitHub)
    • kotlin.version: 2.3.0 -> 2.3.10
    • org.jetbrains.kotlin:kotlin-stdlib-jdk8: 2.3.0 -> 2.3.10 changelog
    • org.jetbrains.kotlin:kotlin-reflect: 2.3.0 -> 2.3.10 changelog
    • org.jetbrains.kotlin:kotlin-test: 2.3.0 -> 2.3.10 changelog
    • org.jetbrains.kotlin:kotlin-maven-plugin: 2.3.0 -> 2.3.10
  • bump org.apache.maven.plugins:maven-compiler-plugin (GitHub)

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

  • bump distroless/java25-debian13 in /test-server (GitHub)

    distroless/java25-debian13: 85df69e -> 29a8dfd

  • bump distroless/java25-debian13 in /proxy (GitHub)

    distroless/java25-debian13: 85df69e -> 29a8dfd

  • bump org.jboss.logging:jboss-logging (GitHub)

    org.jboss.logging:jboss-logging: 3.6.1.Final -> 3.6.2.Final changelog

  • bump at.yawk.lz4:lz4-java from 1.10.2 to 1.10.3 (GitHub)

    at.yawk.lz4:lz4-java: 1.10.2 -> 1.10.3 changelog

  • bump org.codehaus.mojo:versions-maven-plugin from 2.20.1 to 2.21.0 (GitHub)

    org.codehaus.mojo:versions-maven-plugin: 2.20.1 -> 2.21.0 changelog

  • bump com.fasterxml.jackson:jackson-bom from 2.20.1 to 2.21.0 (GitHub)

    com.fasterxml.jackson:jackson-bom: 2.20.1 -> 2.21.0

  • bump io.jooby:jooby from 4.0.14 to 4.0.15 (GitHub)

    io.jooby:jooby: 4.0.14 -> 4.0.15 changelog

  • bump org.sonatype.central:central-publishing-maven-plugin (GitHub)

    org.sonatype.central:central-publishing-maven-plugin: 0.9.0 -> 0.10.0

  • bump org.msgpack:msgpack-core from 0.9.10 to 0.9.11 (GitHub)

    org.msgpack:msgpack-core: 0.9.10 -> 0.9.11 changelog

  • bump org.junit:junit-bom from 6.0.1 to 6.0.2 (GitHub)

    org.junit:junit-bom: 6.0.1 -> 6.0.2 changelog

Build System
  • Automatically merge dependabot pull requests into dependabot-staging branch [skip ci] (GitHub)
GitHub

1.80.0 (2026-02-12)

Features
  • Search: add date range filtering with LocalDate (GitHub)
GitHub

1.79.0 (2026-02-11)

Code Refactoring
  • IdentityProvider: rename `idForName()` to `nextFunctionalId()` (GitHub)
GitHub

1.78.1 (2026-02-11)

Bug Fixes
  • LocalClient: correct namespace comparison and default to "public" namespace (GitHub)
GitHub

1.78.0 (2026-02-09)

Code Refactoring
  • project-files: rename agent-instructions to project-files (#113) (GitHub)

    * refactor(project-files): rename agent-instructions to project-files

    Changes:
    - Renamed agent-instructions/ directory to project-files/
    - Updated build workflow to create project-{lang}.zip instead of agents-{lang}.zip
    - Updated artifact names from 'agent-instructions' to 'project-files'
    - Updated readme to reflect new nomenclature
    - Updated CHANGELOG.md with these changes

    This change provides clearer naming that better reflects the purpose of
    these files as project configuration for AI coding assistants.

    * fix: rename agents.md to index.md

GitHub

1.77.0 (2026-02-05)

Features
  • Make code compatible with Spring 7 by not using getSource().toString() (GitHub)
GitHub

1.76.0 (2026-02-05)

Code Refactoring
  • Fluxzero: reposition generateId method for better organization (GitHub)
Chores
  • update filenames from `.txt` to `.md` for import guidelines (GitHub)
GitHub

1.75.2 (2026-02-04)

Bug Fixes
  • ResultValidator: prevent NPE when expectWebResponse for WebResponses without payload (GitHub)

    feat(TestFixture): add predicate-based assertions for events, commands, schedules, queries, and metrics in tests

GitHub

1.75.1 (2026-02-03)

Bug Fixes
  • missed creating target directory (GitHub)
GitHub

1.75.0 (2026-02-03)

Documentation
  • release: package agent instructions as GitHub release artifacts (#111) (GitHub)

    * docs(release): package agent instructions as GitHub release artifacts

    Add agents-java.zip and agents-kotlin.zip to GitHub releases. These zip
    files contain AI coding assistant instructions (guidelines, code samples,
    and FQN references) to help AI tools generate correct Fluxzero code.

    The workflow creates the zips during build, uploads them as artifacts,
    and attaches them to the GitHub release.

    * fix: guidelines should refer to .fluxzero/agents

    * Rename to agents

    * docs(agent-instructions): convert Kotlin examples to idiomatic Kotlin syntax

    Converted all code examples in agent-instructions/kotlin/ from Java syntax
    to proper Kotlin syntax and idioms:

    - Replaced Java records with Kotlin data classes
    - Changed method declarations to Kotlin function syntax
    - Updated builder patterns to use .copy() instead of .toBuilder().build()
    - Converted Java interfaces to Kotlin interfaces with property syntax
    - Changed static members to use companion object or object declarations
    - Replaced List.of() with listOf()
    - Updated lambda syntax to Kotlin style
    - Fixed nullability handling with Kotlin's ? syntax
    - Changed file references from .java to .kt in guidelines
    - Updated project structure references from src/main/java to src/main/kotlin

    This ensures AI assistants receive accurate Kotlin examples when working
    with Fluxzero projects, improving code generation quality and reducing
    the need for manual syntax corrections.

    Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

    * fix(agent-instructions): address Kotlin examples code review feedback

    Applied review feedback from PR #111:

    Guidelines fixes:
    - Use ::class instead of ::class.java for Fluxzero SDK methods (generateId, search, etc.)
    - Document that Instant or Message should be injected for time handling in @​Apply methods, not Clock
    - Require fully qualified names in JSON test files for Kotlin (not simple names)
    - Clarify that searchable aggregates are indexed when modified
    - Remove incorrect mvn clean suggestion

    Code samples fixes:
    - Replace all ::class.java with ::class for Fluxzero SDK method calls
    - Update JSON test file example to show FQN requirement for Kotlin
    - Keep ::class.java only for Java interop methods (getPayloadAs, TestFixture methods)

    These changes ensure Kotlin examples follow SDK best practices and avoid common
    pitfalls when working with Kotlin and the Fluxzero framework.

GitHub

1.74.0 (2026-02-02)

Features
  • IdentityProvider: add name-based ID generation (GitHub)
GitHub

1.73.0 (2026-01-28)

Features
  • TestFixture: add option for incremental schedule time advancement (GitHub)

    Introduce a fixture setting to control whether time advances stepwise through intermediate schedule deadlines or jumps directly to the target timestamp.

    Incremental advancement remains the default for realistic handling of recurring and rescheduled schedules. Add tests covering both modes.

GitHub

1.72.1 (2026-01-28)

Bug Fixes
  • CachingAggregateRepository: change error to info level for cache update failures (GitHub)

    There are legitimate situations where the cached aggregate does not contain the last received event, even when it originates from the current client, e.g., after a cache eviction followed by a load while the event is being appended.

Code Refactoring
  • split: optimize path splitting for search (GitHub)

    Also remove memoization.

GitHub

1.72.0 (2026-01-26)

Code Refactoring
  • handling: rename TimeParameterResolver to TimestampParameterResolver and improve behavior (GitHub)
GitHub

1.71.0 (2026-01-25)

Features
  • add TimeParameterResolver for Instant and Clock injection in handlers (GitHub)

    - Introduced `TimeParameterResolver` to resolve `Instant` and `Clock` parameters in message handlers.
    - Added tests for `Instant` and `Clock` parameter injection.

Tests
  • web: add test for `@​ServeStatic` without additional config (GitHub)
GitHub

1.70.0 (2026-01-23)

Code Refactoring
  • @​ServeStatic: ensure default web path `/` if no `@​Path` is present (GitHub)
GitHub

1.69.0 (2026-01-18)

Code Refactoring
  • reflection: remove isBridge check in method inclusion logic (GitHub)

    Doesn't work in combination with kotlin 2.3

GitHub

1.68.1 (2026-01-12)

Bug Fixes
  • websocket: extend ping timeout duration to 15 seconds (GitHub)
Changes
  • Revert "feat(aggregate): commit aggregates asynchronously, waiting for all commits to complete before processing next messages" (GitHub)

    This reverts commit ec330c5c06ccd82a0b3a98bd599f3f5b708d144e.

    Reverting this because this can lead to very high read counts in a very short timespan, which can cause client pings to time out, leading to a cascade of issues. Once the Fluxzero runtime reduces the number of message batches returned in parallel, the expectation is that pings will be timely answered again.

GitHub

1.68.0 (2026-01-10)

Code Refactoring
  • publish changelog again (GitHub)
GitHub

1.67.0 (2026-01-10)

No commits were found for this release.

GitHub

1.66.0 (2026-01-10)

Code Refactoring
  • publish changelog again (GitHub)
GitHub

1.65.0 (2026-01-10)

Code Refactoring
  • publish changelog again (GitHub)
GitHub

1.64.1 (2026-01-09)

Bug Fixes
  • websocket: abort with error code 1011 when going away after pinging the runtime failed (GitHub)

    1006 is not a valid code to send.

GitHub

1.64.0 (2026-01-05)

Features
  • stateful: support replacement of the current stateful instance (GitHub)

    Replacement will store the new instance and delete the old one. Returning a collection of handlers that does not contain the current one will also delete the current handler.

GitHub

1.63.0 (2026-01-04)

Features
  • proxy: add CORS handling with preflight support (GitHub)

    Implemented CORS handling including preflight requests. Added configuration for allowed domains via `FLUXZERO_CORS_DOMAINS` and dynamic header application based on origin validation.

  • search: clarify behavior of `@​SearchExclude` and `@​SearchInclude` (GitHub)

    Updated javadoc to specify that `@​SearchExclude` applies to nested types as well unless explicitly overridden by `@​SearchInclude`.

Code Refactoring
  • proxy: implement JWKS rate-limiting for key resolution (GitHub)

    Introduced rate-limiting to prevent frequent fetch requests. Enhanced logging for JWKS fetch operations and improved error handling with robust key-refresh mechanisms.

GitHub

1.62.0 (2026-01-02)

Features
  • test-fixture: allow resolving expired schedules by payload class (GitHub)

    Support passing a Class to whenScheduleExpires() and givenExpiredSchedules() to resolve the first matching future schedule by payload type and fast-forward time to its deadline. Throw IllegalStateException when no matching schedule is found, and ignore duplicate Class arguments in givenExpiredSchedules().

Bug Fixes
  • test-fixture: ensure JSON-file payloads are parsed correctly (GitHub)
  • test-fixture: update `andThen` method to return `Given<?>` (GitHub)

    This fixes tests in kotlin that use `andThen`.

GitHub

1.61.2 (2025-12-31)

Dependency updates
  • bump io.jooby:jooby from 4.0.12 to 4.0.13 (GitHub)

    io.jooby:jooby: 4.0.12 -> 4.0.13 changelog

  • bump ch.qos.logback:logback-classic from 1.5.22 to 1.5.23 (GitHub)

    ch.qos.logback:logback-classic: 1.5.22 -> 1.5.23 changelog

Changes
  • dep: Switch to at.yawk.lz4 community fork because org.lz4 is no longer maintained (GitHub)
GitHub

1.61.1 (2025-12-21)

Bug Fixes
  • entity: check `@​Apply` compatibility more robustly (GitHub)
GitHub

1.61.0 (2025-12-20)

Features
  • entity: validate `@​Apply` compatibility during legality checks (GitHub)

    Fluxzero now verifies that at least one `@​Apply` method is compatible with the current entity state.

    Compatibility is determined structurally from the `@​Apply` method signature,
    with explicit opt-outs via Entity<T>, nullable aggregate parameters, or
    `@​Apply(ignoreCompatibilityCheck = true)`.

    This behavior is enabled by default and can be disabled using the
    `fluxzero.assert.legal.apply-compatibility` property.

GitHub

1.60.0 (2025-12-20)

Features
  • testing: process due schedules before target time when advancing time (GitHub)

    When advancing time in tests, schedules that fire before the target timestamp are now handled recursively before completing the final time jump.

    Time is advanced in steps rather than a single jump, ensuring that intermediate schedules are processed in order. If handling those schedules triggers additional schedules that are due before the target timestamp, they are fired as well.

    This allows tests to simulate real-world scheduling behavior more accurately.

GitHub

1.59.0 (2025-12-20)

Features
  • entity: add additional entity transformation and filtering methods (GitHub)
GitHub

1.58.1 (2025-12-19)

Bug Fixes
  • reflection: improve property access on ObjectNodes (GitHub)
GitHub

1.58.0 (2025-12-18)

Features
  • sdk: enhance `Entity` with additional mapping utilities (GitHub)
GitHub

1.57.1 (2025-12-18)

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

    org.apache.maven.plugins:maven-assembly-plugin: 3.7.1 -> 3.8.0 changelog

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

    org.apache.maven.plugins:maven-resources-plugin: 3.3.1 -> 3.4.0 changelog

  • bump io.jooby:jooby from 4.0.11 to 4.0.12 (GitHub)

    io.jooby:jooby: 4.0.11 -> 4.0.12 changelog

  • bump org.codehaus.mojo:versions-maven-plugin from 2.19.1 to 2.20.1 (GitHub)

    org.codehaus.mojo:versions-maven-plugin: 2.19.1 -> 2.20.1 changelog

  • bump org.apache.maven.plugins:maven-jar-plugin from 3.4.2 to 3.5.0 (GitHub)

    org.apache.maven.plugins:maven-jar-plugin: 3.4.2 -> 3.5.0 changelog

  • bump org.apache.commons:commons-lang3 from 3.19.0 to 3.20.0 (GitHub)

    org.apache.commons:commons-lang3: 3.19.0 -> 3.20.0

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

    org.apache.maven.plugins:maven-source-plugin: 3.3.1 -> 3.4.0 changelog

  • bump kotlin.version from 2.2.21 to 2.3.0 (GitHub)
    • kotlin.version: 2.2.21 -> 2.3.0
    • org.jetbrains.kotlin:kotlin-stdlib-jdk8: 2.2.21 -> 2.3.0 changelog
    • org.jetbrains.kotlin:kotlin-reflect: 2.2.21 -> 2.3.0 changelog
    • org.jetbrains.kotlin:kotlin-test: 2.2.21 -> 2.3.0 changelog
    • org.jetbrains.kotlin:kotlin-maven-plugin: 2.2.21 -> 2.3.0
  • bump ch.qos.logback:logback-classic from 1.5.21 to 1.5.22 (GitHub)

    ch.qos.logback:logback-classic: 1.5.21 -> 1.5.22 changelog

  • bump org.jboss.resteasy:resteasy-undertow (GitHub)

    org.jboss.resteasy:resteasy-undertow: 7.0.0.Final -> 7.0.1.Final

  • bump org.mockito:mockito-core from 5.20.0 to 5.21.0 (GitHub)

    org.mockito:mockito-core: 5.20.0 -> 5.21.0 changelog

  • bump distroless/java25-debian13 in /test-server (GitHub)

    distroless/java25-debian13: 66c7152 -> b898108

  • bump distroless/java25-debian13 in /proxy (GitHub)

    distroless/java25-debian13: 66c7152 -> b898108

Continuous Integration
  • bump actions/checkout from 5 to 6 (GitHub)

    actions/checkout: 5 -> 6 changelog

  • bump actions/download-artifact from 4 to 7 (GitHub)

    actions/download-artifact: 4 -> 6 changelog

  • bump actions/upload-artifact from 5 to 6 (GitHub)

    actions/upload-artifact: 5 -> 6 changelog

Build System
  • Use token with permission to write workflows [skip ci] (GitHub)
GitHub

1.57.0 (2025-12-17)

Features
  • configuration: add property substitution support across SDK (GitHub)
GitHub

1.56.3 (2025-12-14)

Bug Fixes
  • publish the javadocs with the correct version (GitHub)
GitHub

1.56.2 (2025-12-13)

Bug Fixes
  • proxy: ensure all proxy metrics get application correlation data (GitHub)
GitHub

1.56.1 (2025-12-12)

Bug Fixes
  • sdk: prevent entity.id() on lazy aggregates (GitHub)
GitHub

1.56.0 (2025-12-11)

Features
  • proxy: add namespace selection for inbound web requests (GitHub)

    Introduce support for the `Fluxzero-Namespace` header.
    If the header is present, its value determines the target namespace.

    When `FLUXZERO_PROXY_JWKS_URL` is configured, the header value must be a
    valid JWT. The proxy verifies the token via the JWKS endpoint and extracts
    the namespace from its subject claim.

  • namespace: add support for namespace-scoped gateways (GitHub)
  • namespace: add support for namespace-scoped clients and tracking configurations (GitHub)
Code Refactoring
  • namespace: rename `projectId` to `namespace` across test server and SDK (GitHub)
GitHub

1.55.0 (2025-12-07)

Features
  • web: add support for origin-specific web requests and handlers (GitHub)

    WebRequests that have a specific origin should be ignored unless the handler specifies that exact origin.

GitHub

1.54.0 (2025-12-07)

Features
  • web: add support for ignored paths in `@​ServeStatic` handlers (GitHub)
Bug Fixes
  • proxy: handle chunked responses (GitHub)

    Remove `Content-Length` header for chunked responses in `ProxyRequestHandler`. Also fix `DefaultRequestHandler` for chunked/multiple responses.

GitHub

1.53.3 (2025-12-07)

Bug Fixes
  • web: ignore null headers in WebResponse (GitHub)
GitHub

1.53.2 (2025-12-06)

Bug Fixes
  • proxy: switch to shade plugin from assembly plugin (GitHub)

    The switch from 2.20.1 from 2.20.0 of jackson somehow prevented the proxy from correctly deserializing web request settings. Apparently the switch messed with the order of dependencies preventing the assembly plugin from including the correct ones in the right order. Using shade plugin to fix and prevent further mix-ups.

GitHub

1.53.1 (2025-12-06)

Bug Fixes
  • proxy: add Jackson dependencies to proxy module for WebRequest settings deserialization (GitHub)
GitHub

1.53.0 (2025-12-06)

Features
  • testing: add tests where the user is explicitly set to `null` (GitHub)
GitHub

1.52.1 (2025-12-03)

Bug Fixes
  • serialization: use correct method to fetch original revision in `SerializedMessage` (GitHub)
GitHub

1.52.0 (2025-11-26)

No commits were found for this release.

GitHub

1.51.1 (2025-11-26)

Bug Fixes
  • threading: completely revert the use of virtual threads (GitHub)

    Even when running in JRE 25, some users of the SDK experience app freezes when virtual threads are used. In those instances, responses sent by the runtime over websocket don't seem to be picked up by the new ThreadPerTask executor. This needs further investigation but for now, roll back the use of virtual threads.

GitHub

1.51.0 (2025-11-23)

Code Refactoring
  • proxy: ensure that requests in the proxy always have a non-null payload (GitHub)
GitHub

1.50.0 (2025-11-23)

No commits were found for this release.

GitHub

1.49.0 (2025-11-23)

Code Refactoring
  • threads: replace virtual threads with platform threads if Java version < 24 (GitHub)
GitHub

1.48.3 (2025-11-21)

Bug Fixes
  • include javadoc profile in build so also json-doclet gets run (GitHub)
GitHub

1.48.2 (2025-11-21)

Bug Fixes
  • set correct version during deploy (GitHub)
GitHub

1.48.1 (2025-11-19)

Bug Fixes
  • skip signing during build (only sign during deploy) and skip publishing as well. This is done because the profile deploy for now enables these two things but without the deploy tag, we do not have the artifact names (GitHub)
  • include poms in the github artifacts so we only once have to set the correct version. (GitHub)
Tests
  • cache: increase sleep duration in `DefaultCacheTest` to ensure accurate test behavior in GitHub builds (GitHub)
Changes
  • Always run json-doclet as its now published on maven central (#59) (GitHub)

    * patch: make json-doclet generation automatic, remove profile since it is now published on maven central

    * Changed jsondoclet package to io.fluxzero.tools

    * Use organization env variables instead of the repository ones

    * Set json-doclet version to 0.0.10

GitHub

1.48.0 (2025-11-18)

Changes
  • Feature/build improvements (#58) (GitHub)

    * fix: always use ./mvnw instead of mvn so we consistently use the same maven version

    * ci: refactor deployment pipeline for parallel execution

    Restructure the deployment workflow to run jobs in parallel after a
    successful build, reducing total pipeline time from ~10-15 minutes to
    ~5-7 minutes (50% improvement).

    Key changes:

    1. Split deploy.yml into 6 independent jobs:
    - build-and-test: Critical path that must succeed first, builds JARs
    once and uploads as artifacts
    - maven-central: Deploys to Maven Central (parallel after build)
    - javadoc: Generates and publishes documentation (parallel)
    - github-release: Creates GitHub release (parallel)
    - docker-test-server: Builds test-server image (parallel)
    - docker-proxy: Builds proxy image (parallel)

    2. Created reusable-javadoc.yml workflow:
    - Eliminates duplication between deploy.yml and publish-javadoc.yml
    - Handles module organization and cache-busting
    - Supports optional json-doclet profile
    - Used by deploy.yml for standard javadoc generation

    3. Optimizations:
    - Build JARs once, reuse via artifacts in all jobs
    - Base image verification moved to just before each Docker build
    - Fluxzero registry login only in proxy job (not test-server)
    - Fail fast: If build/test fails, no other jobs run

    4. Updated publish-javadoc.yml:
    - Kept inline due to GitHub Packages authentication requirement
    - Added safety check for module directories
    - Maintained json-doclet profile support

    Benefits:
    - 50% faster deployments
    - Better resource utilization
    - Clear job separation and failure isolation
    - Maintains all existing functionality

    * ci: make reusable javadoc workflow manually triggerable

    Enable reusable-javadoc.yml to be triggered manually via workflow_dispatch
    while maintaining its use as a reusable workflow. This eliminates the need
    for a separate publish-javadoc.yml workflow.

    Changes:

    1. Added workflow_dispatch trigger to reusable-javadoc.yml:
    - Can now be manually triggered from GitHub UI
    - Includes toggle for json-doclet generation
    - Configurable modules and destination directory

    2. Unified input handling:
    - workflow_call: uses include-json-doclet and maven-profiles inputs
    - workflow_dispatch: uses enable-json-doclet toggle
    - Dynamic configuration step normalizes inputs for both modes

    3. Conditional GitHub Packages authentication:
    - Only authenticates when json-doclet is enabled
    - Automatically configured based on trigger and inputs
    - Runs mvn install before site generation when json-doclet needed

    4. Removed publish-javadoc.yml:
    - No longer needed - functionality moved to reusable workflow
    - Reduces maintenance burden
    - Single source of truth for javadoc generation

    Usage:
    - Automatic: Called by deploy.yml for standard javadoc (no json-doclet)
    - Manual: Trigger from Actions tab, optionally enable json-doclet

    * ci: rename reusable-javadoc.yml to javadoc.yml

    Simplify workflow naming since it's now both reusable and manually
    triggerable. Updated reference in deploy.yml.

    * fix: run json-doclet as part of site instead of verify

    * ci: clarify Maven setup with separate steps for GitHub Packages auth

    Replace conditional server-id/username/password parameters with two
    separate, explicit Java setup steps for better clarity.

    Changes:
    - Separate 'Install Java and Maven (standard)' step for normal use
    - Separate step with GitHub Packages authentication for json-doclet
    - Clear step names explain when each is used
    - Removes confusing conditional empty string parameters
    - Makes it obvious that server-id 'github' is for Maven repository auth

    * ci: always enable json-doclet in javadoc workflow

    Simplify javadoc workflow by always generating JSON documentation
    instead of making it optional. This removes unnecessary conditional
    logic and ensures JSON docs are always up-to-date.

    Changes:
    - Removed enable-json-doclet toggle from workflow_dispatch
    - Removed include-json-doclet and maven-profiles inputs from workflow_call
    - Removed conditional configuration step
    - Always set up GitHub Packages authentication
    - Always run mvn install to fetch json-doclet dependency
    - Always use -Pjson-doclet profile
    - Always include json-doclet output in published docs

    Benefits:
    - Simpler workflow (124 lines → 82 lines)
    - No conditional logic to maintain
    - JSON docs always available
    - Consistent behavior for all triggers

GitHub

1.47.1 (2025-11-11)

Dependency updates
  • bump ch.qos.logback:logback-classic from 1.5.20 to 1.5.21 (GitHub)

    ch.qos.logback:logback-classic: 1.5.20 -> 1.5.21 changelog

  • bump org.hibernate.validator:hibernate-validator-bom (GitHub)

    org.hibernate.validator:hibernate-validator-bom: 9.0.1.Final -> 9.1.0.Final changelog

  • bump distroless/java25-debian13 in /proxy (GitHub)

    distroless/java25-debian13: 1bea634 -> 92ade27

  • bump distroless/java25-debian13 in /test-server (GitHub)

    distroless/java25-debian13: 1bea634 -> 92ade27

  • bump io.jooby:jooby from 4.0.10 to 4.0.11 (GitHub)

    io.jooby:jooby: 4.0.10 -> 4.0.11 changelog

GitHub

1.47.0 (2025-11-05)

No commits were found for this release.

GitHub

1.46.0 (2025-11-05)

No commits were found for this release.

GitHub

1.45.0 (2025-11-05)

No commits were found for this release.

GitHub

1.44.0 (2025-11-05)

No commits were found for this release.

GitHub

1.43.0 (2025-11-05)

No commits were found for this release.

GitHub

1.42.0 (2025-11-05)

No commits were found for this release.

GitHub

1.41.0 (2025-11-05)

Changes
  • Added generation of json variant of the javadocs which can be used by… (#42) (GitHub)

    * Added generation of json variant of the javadocs which can be used by the documentation website as source (so the javadoc can be embedded)

    * Removed references to jackson as these are no longer necessary from 0.0.4 on

    * Instead of downloading the jar, we use maven and github packages

    * Updated readme to explain about json-doclet

    * Upgrade to latest version

    * Moved docs to bottom

GitHub

1.40.0 (2025-11-04)

Changes
  • Fix publishing to Maven central (GitHub)
GitHub

1.39.2 (2025-11-04)

Dependency updates
  • bump org.junit:junit-bom from 6.0.0 to 6.0.1 (GitHub)

    org.junit:junit-bom: 6.0.0 -> 6.0.1 changelog

  • bump com.fasterxml.jackson:jackson-bom from 2.20.0 to 2.20.1 (GitHub)

    com.fasterxml.jackson:jackson-bom: 2.20.0 -> 2.20.1

  • bump io.jooby:jooby from 4.0.9 to 4.0.10 (GitHub)

    io.jooby:jooby: 4.0.9 -> 4.0.10 changelog

  • bump kotlin.version from 2.2.20 to 2.2.21 (GitHub)
    • kotlin.version: 2.2.20 -> 2.2.21
    • org.jetbrains.kotlin:kotlin-stdlib-jdk8: 2.2.20 -> 2.2.21 changelog
    • org.jetbrains.kotlin:kotlin-reflect: 2.2.20 -> 2.2.21 changelog
    • org.jetbrains.kotlin:kotlin-test: 2.2.20 -> 2.2.21 changelog
    • org.jetbrains.kotlin:kotlin-maven-plugin: 2.2.20 -> 2.2.21
  • use and verify distroless base images for proxy and test-server (GitHub)
Build System
  • Build the project using JDK 25 but stay compatible with JDK 21 (GitHub)
GitHub

1.39.1 (2025-11-02)

Bug Fixes
  • search: support sorting on properties without `@​Sortable` (GitHub)
GitHub

1.39.0 (2025-11-01)

Features
  • resolvers: add `JsonPayloadParameterResolver` and optimize resolver selection (GitHub)

    Introduce `JsonPayloadParameterResolver` to enable injecting message payloads as JsonNode instances when the payload format is JSON.

    Also optimize parameter resolver initialization by pre-filtering resolvers based on handler method compatibility.

Code Refactoring
  • entity: when playing back an entity when the requested index is `null` return the latest entity version (GitHub)
Changes
  • Merge remote-tracking branch 'origin/main' (GitHub)
GitHub

1.38.0 (2025-10-29)

No commits were found for this release.

GitHub

1.37.0 (2025-10-29)

Features
  • Add total byte size of all updates in BulkUpdateDocuments to metrics (GitHub)
GitHub

1.36.1 (2025-10-29)

Bug Fixes
  • dependencies: exclude `spotbugs-annotations` from `jooby` to resolve dependency conflict (GitHub)

    Thanks @​lukasilverio94 !

GitHub

1.36.0 (2025-10-29)

Features
  • aggregate: commit aggregates asynchronously, waiting for all commits to complete before processing next messages (GitHub)
GitHub

1.35.0 (2025-10-28)

Code Refactoring
  • aggregate: play back aggregate to handled message even if event is of another aggregate (GitHub)
GitHub

1.34.0 (2025-10-28)

Features
  • metrics: include request details in websocket response metrics (GitHub)
GitHub

1.33.0 (2025-10-28)

Features
  • configuration: prevent non-Spring Fluxzero instances from exiting after main by default (GitHub)

    Introduce a built-in keepalive mechanism to ensure standalone (non-Spring) Fluxzero applications remain active after the main method completes. This behavior can be disabled via FluxzeroBuilder#disableKeepalive().

GitHub

1.32.1 (2025-10-27)

Bug Fixes
  • cache: update cache logic to handle event consistency for aggregates (GitHub)

    Actual fix for the issue commit fluxzero-io/fluxzero-sdk-java@eca71899 attempted to solve.

  • handling: use `isAssignableFrom` for payload class matching in `DefaultHandlerFactory` (GitHub)
GitHub

1.32.0 (2025-10-26)

No commits were found for this release.

GitHub

1.31.0 (2025-10-26)

Features
  • search: add `toBulkUpdate` to `IndexOperation` (GitHub)

    This e.g. allows creating an `IndexDocument` bulk operation simply using `Fluxzero.prepareIndex(Object).toBulkUpdate()`.

GitHub

1.30.0 (2025-10-26)

Features
  • reflection: extend `readProperty` to support nested `Collection` and `Map` fields (GitHub)

    Enables `@​Association` on properties of objects in a collection, e.g.: `/items/itemId`.

GitHub

1.29.0 (2025-10-26)

Features
  • testing: add `TestFixture` methods to handle user-context-specific web requests (GitHub)
GitHub

1.28.0 (2025-10-26)

Code Refactoring
  • search: acknowledge `@​SearchExclude` annotations when filtering locally (GitHub)
GitHub

1.27.0 (2025-10-25)

Features
  • search: support getting a document using just a typed Id (GitHub)
GitHub

1.26.0 (2025-10-25)

Features
  • handling: support returning Optional<R> from a (local) request handler method (GitHub)

    Also support this when content filtering.

  • serialization: enable automatic filtering of request results if the handler has `@​FilterContent` (GitHub)

    Additionally, `@​FilterContent` can now be placed on types and packages as well. In that case the results of all contained handlers will be filtered automatically.

GitHub

1.25.0 (2025-10-22)

No commits were found for this release.

GitHub

1.24.0 (2025-10-22)

Features
  • serialization: enhance `filterContent` to support `Collection` and `Map` types (GitHub)
GitHub

1.23.1 (2025-10-22)

Dependency updates
  • bump io.jooby:jooby from 4.0.7 to 4.0.9 (GitHub)

    io.jooby:jooby: 4.0.7 -> 4.0.9 changelog

  • bump ch.qos.logback:logback-classic from 1.5.19 to 1.5.20 (GitHub)

    ch.qos.logback:logback-classic: 1.5.19 -> 1.5.20 changelog

  • bump org.springframework:spring-framework-bom from 6.2.11 to 6.2.12 (GitHub)

    org.springframework:spring-framework-bom: 6.2.11 -> 6.2.12 changelog

Continuous Integration
  • Avoid path clashes in dependabot branch names [skip ci] (GitHub)
GitHub

1.23.0 (2025-10-21)

Features
  • metrics: include `messageType` and `topic` in `CompleteMessageEvent` (GitHub)
GitHub

1.22.0 (2025-10-21)

Features
  • metrics: enhance `formatType` method to resolve URI patterns for web requests (GitHub)
GitHub

1.21.0 (2025-10-21)

Code Refactoring
  • tracking: unify `MessageParameterResolver` and `DeserializingMessageParameterResolver` (GitHub)
GitHub

1.20.0 (2025-10-20)

No commits were found for this release.

GitHub

1.19.0 (2025-10-20)

No commits were found for this release.

GitHub

1.18.2 (2025-10-20)

Bug Fixes
  • search: prevent duplicate message entries in `InMemorySearchStore` (GitHub)
GitHub

1.18.1 (2025-10-14)

Dependency updates
  • bump undertow.version from 2.3.19.Final to 2.3.20.Final (GitHub)
    • undertow.version: 2.3.19.Final -> 2.3.20.Final
    • io.undertow:undertow-websockets-jsr: 2.3.19.Final -> 2.3.20.Final changelog
    • io.undertow:undertow-core: 2.3.19.Final -> 2.3.20.Final changelog
    • io.undertow:undertow-servlet: 2.3.19.Final -> 2.3.20.Final changelog
Continuous Integration
  • bump actions/checkout from 4 to 5 (GitHub)

    actions/checkout: 4 -> 5 changelog

Build System
  • Allow dependabot sync to be run manually [skip ci] (GitHub)
  • Automatically sync dependabot branch to main [skip ci] (GitHub)
GitHub

1.18.0 (2025-10-13)

Features
  • properties: add support for substituting placeholders in `Properties` objects (GitHub)
GitHub

1.17.0 (2025-10-12)

Features
  • search: add support for moving documents between collections (GitHub)
GitHub

1.16.0 (2025-10-12)

Code Refactoring
  • search: improve deserialization logic of SerializedDocument (GitHub)

    Don't use `collection`, `timestamp`, and `end` from the serialized document payload in `Document`. Instead, get those values from `SerializedDocument`.

GitHub

1.15.2 (2025-10-12)

Bug Fixes
  • entities: revert commit #ed5a30ed (GitHub)

    When an aggregate gets updated without issues (no exception raised), the aggregate should be committed even if no events are published.

    Also add tests for aggregates without events

Code Refactoring
  • threads: replace `ForkJoinPool` with virtual thread executor in `DefaultFluxzero` shutdown logic (GitHub)
  • tracking: lazy-initialize `trackingStrategy` in `LocalTrackingClient` to improve resource management (GitHub)
GitHub

1.15.1 (2025-10-08)

Bug Fixes
  • metrics: correct parameter used in `append` method for fallback serialization (GitHub)
GitHub

1.15.0 (2025-10-08)

Code Refactoring
  • threads: use virtual threads and platform thread factories across modules for improved performance and clarity (GitHub)
GitHub

1.14.2 (2025-10-06)

Dependency updates
  • bump org.junit:junit-bom from 5.13.4 to 6.0.0 (GitHub)

    org.junit:junit-bom: 5.13.4 -> 6.0.0 changelog

  • bump org.jboss.resteasy:resteasy-undertow (GitHub)

    org.jboss.resteasy:resteasy-undertow: 6.2.12.Final -> 7.0.0.Final

  • bump ch.qos.logback:logback-classic from 1.5.18 to 1.5.19 (GitHub)

    ch.qos.logback:logback-classic: 1.5.18 -> 1.5.19 changelog

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

    org.apache.maven.plugins:maven-enforcer-plugin: 3.6.1 -> 3.6.2 changelog

Changes
  • Run PR workflow for dependabot PRs [skip ci] (GitHub)
  • Use different target branch so dependabot updates can be grouped [skip-ci] (GitHub)
GitHub

1.14.1 (2025-10-03)

Bug Fixes
  • Allow null for timestamp and end in @​Searchable objects (GitHub)

    Always use the value of the properties at the given timestamp and end paths, if those properties are defined. Even if their value is `null`

GitHub

1.14.0 (2025-10-01)

Features
  • web: Allow override of application name in Fluxzero proxy (GitHub)
GitHub

1.13.0 (2025-09-30)

Features
  • test-server: support `FLUXZERO_LOG_RETENTION` property to configure log retention (GitHub)
Changes
  • Merge remote-tracking branch 'origin/main' (GitHub)
GitHub

1.12.0 (2025-09-30)

Build System
  • Use metadata action for docker tags and labels (GitHub)
GitHub

1.11.0 (2025-09-30)

Changes
  • Use metadata action for docker tags and labels (GitHub)
GitHub

1.10.0 (2025-09-29)

Code Refactoring
  • properties: replace redundant property resolution logic with `getFirstAvailableProperty` (GitHub)
GitHub

1.9.0 (2025-09-28)

No commits were found for this release.

GitHub

1.8.0 (2025-09-28)

Features
  • search: support `LocalDate` and `LocalDateTime` properties in timestamp paths (GitHub)
Changes
  • Merge remote-tracking branch 'origin/main' (GitHub)
GitHub

1.7.5 (2025-09-27)

Bug Fixes
  • readme: cheatsheet link (GitHub)
GitHub

1.7.4 (2025-09-27)

Dependency updates
  • bump the dependency-updates group across 1 directory with 6 updates (GitHub)
    • org.mockito:mockito-core: 5.19.0 -> 5.20.0 changelog
    • org.apache.maven.plugins:maven-compiler-plugin: 3.14.0 -> 3.14.1 changelog
    • org.apache.maven.plugins:maven-javadoc-plugin: 3.11.3 -> 3.12.0 changelog
    • org.codehaus.mojo:versions-maven-plugin: 2.19.0 -> 2.19.1 changelog
    • org.sonatype.central:central-publishing-maven-plugin: 0.8.0 -> 0.9.0
    • org.apache.commons:commons-lang3: 3.18.0 -> 3.19.0
Changes
  • Merge pull request #15 from fluxzero-io/dependabot/maven/dependency-updates-0363ec5984 (GitHub)

    deps: bump the dependency-updates group across 1 directory with 6 updates

GitHub

1.7.3 (2025-09-27)

Bug Fixes
  • readme: javadocs link (GitHub)
GitHub

1.7.2 (2025-09-27)

Bug Fixes
  • dispatch: ensure `logMessage` is checked only when `handled` is true in `LocalHandlerRegistry` (GitHub)
GitHub

1.7.1 (2025-09-27)

Bug Fixes
  • dispatch: apply dispatch interceptor to serialized messages in `LocalHandlerRegistry` (GitHub)
Changes
  • Group all dependency updates into a single PR [skip ci] (GitHub)
GitHub

1.7.0 (2025-09-18)

Features
  • metrics: Add total size and byte size to AppendEvents metric (GitHub)
GitHub

1.6.2 (2025-09-18)

Dependency updates
  • bump org.projectlombok:lombok from 1.18.40 to 1.18.42 (GitHub)

    org.projectlombok:lombok: 1.18.40 -> 1.18.42 changelog

GitHub

1.6.1 (2025-09-18)

Dependency updates
  • bump io.jooby:jooby from 3.9.1 to 4.0.7 (GitHub)

    io.jooby:jooby: 3.9.1 -> 4.0.7 changelog

GitHub

1.6.0 (2025-09-17)

Chores
  • publish to registry.fluxzero.io (GitHub)
GitHub

1.5.0 (2025-09-15)

Build System
  • bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.3 to 3.5.4. (GitHub)

    org.apache.maven.plugins:maven-surefire-plugin: 3.5.3 -> 3.5.4 changelog

GitHub

1.4.2 (2025-09-15)

Bug Fixes
  • scheduling: update `scheduleId` parameter in Fluxzero functions to support `Object` type (GitHub)
  • properties: correct optional property key for `runtimeBaseUrl` (GitHub)
Continuous Integration
  • Use correct commit prefixes in dependabot commits (GitHub)
  • Add commit type for dependency updates (GitHub)
Tests
  • Re-enable disabled unit test (GitHub)
GitHub

1.4.1 (2025-09-15)

Bug Fixes
  • scheduling: update `scheduleId` parameter in Fluxzero functions to support `Object` type (GitHub)
  • properties: correct optional property key for `runtimeBaseUrl` (GitHub)
Dependency updates
  • bump org.springframework:spring-framework-bom from 6.2.10 to 6.2.11. (GitHub)

    org.springframework:spring-framework-bom: 6.2.10 -> 6.2.11 changelog

Continuous Integration
  • Use correct commit prefixes in dependabot commits (GitHub)
  • Add commit type for dependency updates (GitHub)
Chores
  • Re-enable disabled unit test (GitHub)
GitHub

1.4.0 (2025-09-15)

Continuous Integration
  • Use correct commit prefixes in dependabot commits (GitHub)
  • Add commit type for dependency updates (GitHub)
GitHub

1.3.2 (2025-09-13)

Bug Fixes
  • scheduling: update `scheduleId` parameter in Fluxzero functions to support `Object` type (GitHub)
GitHub

1.3.1 (2025-09-12)

Bug Fixes
  • properties: correct optional property key for `runtimeBaseUrl` (GitHub)
GitHub

1.3.0 (2025-09-12)

No commits were found for this release.

GitHub

1.2.0 (2025-09-12)

Chores
  • Re-enable disabled unit test (GitHub)
  • deps: bump org.springframework:spring-framework-bom (GitHub)

    org.springframework:spring-framework-bom: 6.2.10 -> 6.2.11 changelog

Changes
  • Merge pull request #6 from fluxzero-io/dependabot/maven/org.springframework-spring-framework-bom-6.2.11 (GitHub)

    chore: deps(deps): bump org.springframework:spring-framework-bom from 6.2.10 to 6.2.11

GitHub

1.1.0 (2025-09-12)

Chores
  • Rename Flux to Fluxzero (GitHub)
  • Fix Fluxzero logo url [skip ci] (GitHub)
  • Update README title [skip ci] (GitHub)
  • Update cheatsheet with Fluxzero rename [skip ci] (GitHub)
GitHub

1.0.1 (2025-09-11)

Bug Fixes
  • modeling: return old aggregate when an apply should be blocked (GitHub)
GitHub

1.0.0 (2025-09-10)

No commits were found for this release.


© 2026 Fluxzero