0.4
===

Upgrading
---------
    - Absolute time values (TTL expiry timestamps, deletion times) changed from `int` to `long`
      (CASSANALYTICS-122). Three areas require attention on upgrade:

      * CDC Avro schema (breaking): `deletedAt` in the TTL record of `cdc_bytes.avsc` and
        `cdc_generic_record.avsc` changed from `int` to `long`. Consumers reading `deletedAt`
        as an integer must update to `long` before upgrading or deserialization will fail.

      * `TimeProvider` API: `referenceEpochInSeconds()` now returns `long`. Custom
        implementations must update their return type.

      * Cassandra 4.0: expiry timestamps beyond Y2038 (January 19, 2038) will throw
        `IllegalArgumentException` at runtime due to Cassandra 4.0's internal `int` limit.
        Cassandra 5.0 handles these correctly via its native `long` support.


New features
------------
    - Add support for Tuples, Tuples with collections and UDTs in the Bulk writer (CASSANALYTICS-51).
    - CDC support for Cassandra 5.0 commit logs (CASSANALYTICS-60).
    - Add flag to allow bulk write to indexed tables (CASSANALYTICS-128).
    - Support per-instance sidecar port resolution in CDC client (CASSANALYTICS-130).
    - Make KafkaPublisher class generic to publish GenericRecords for different value serializers (CASSANALYTICS-154).


Bug fixes
---------
    - Fix quote identifiers option must be set to true if TTL column name has mixed case (CASSANALYTICS-120).
    - Assign data file start offset based on BTI index (CASSANALYTICS-121).
    - Fix commitlog reading not progressing in CDC due to incorrect CommitLogReader.isFullyRead (CASSANALYTICS-124).
    - Fix incorrect hash code calculation in PartitionUpdateWrapper.Digest (CASSANALYTICS-125).
    - Flush event consumer before persisting CDC state to prevent data loss on failure (CASSANALYTICS-126).
    - Fix ReadStatusTracker to distinguish clean completion from error termination in BufferingCommitLogReader (CASSANALYTICS-129).
    - Fix SidecarCdcClient thread/resource leaks by passing it as a constructor parameter (CASSANALYTICS-142).
    - Fix various leaks in CDC caching and bridge implementation (CASSANALYTICS-143).
    - Fix BufferingInputStream failing to read last unaligned chunk (CASSANALYTICS-147).
    - Fix cannot read start offset from BTI index with big partitions (CASSANALYTICS-151).
    - Fix reading BTI may require partitions and rows indexes (CASSANALYTICS-156).


0.3
===

Upgrading
---------
    - Updated Guice dependency to 7.0.0 (CASSANALYTICS-103).
    - Addressed LZ4 vulnerability (CVE-2025-12183) in CASSANALYTICS-109.


New features
------------
    - Add TimeRangeFilter to filter out SSTables outside given time window (CASSANALYTICS-102).
    - Add EACH_QUORUM consistency level support in bulk reader (CASSANALYTICS-101).


Bug fixes
---------
    - Fix ByteBuffer flip() in StreamBuffer.copyBytes() causing data corruption (CASSANALYTICS-116).
    - Fix race condition in DirectStreamSession#onSSTablesProduced and SortedSStableWriter#close (CASSANALYTICS-107).


0.2
===

Upgrading
---------
    - In CASSANALYTICS-69, we set KeyStore to be optional.


New features
------------
    - Expose SidecarCdc builders and interfaces.
    - Refactor BulkWriterContext broadcasting to use immutable config class.
    - Support for Trie-Indexed SSTables (BTI format).
    - New bridge modules for Cassandra 5.0.
    - Support writing to local datacenter only for coordinated write.
