Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

---

## [0.7.0] - 2026-02-07

### Added

- **Per-File Column Statistics**: New `StatisticalCodec` and `StatisticalStreamEncoder` interfaces allow any codec to report per-file column stats (min, max, null count, distinct count) persisted on `FileRef`
- **Parquet Statistics**: Parquet codec implements `StatisticalCodec`, reporting column-level min/max/null count for all orderable types (int32, int64, float32, float64, string, timestamp)
- **New Public Types**: `FileStats`, `ColumnStats` on the public API surface

### Changed

- **Nil Metadata Coalescing**: `Write`, `StreamWrite`, `StreamWriteRecords`, and `Volume.Commit` now coalesce nil metadata to `Metadata{}` instead of returning an error

### Upgrade Notes

- Callers that previously passed `Metadata{}` solely to avoid nil errors can now pass `nil` safely
- Callers that relied on nil metadata returning an error should remove that expectation
- Per-file stats are opt-in: only codecs implementing `StatisticalCodec` produce them; manifests without stats remain valid

### References

- [CONTRACT_PARQUET.md](docs/contracts/CONTRACT_PARQUET.md) β€” Updated with per-file statistics spec
- [CONTRACT_WRITE_API.md](docs/contracts/CONTRACT_WRITE_API.md) β€” Updated with stats collection and nil coalescing semantics
- [CONTRACT_CORE.md](docs/contracts/CONTRACT_CORE.md) β€” Updated metadata rules

---

## [0.6.0] - 2026-02-07

### Added

- **Volume Persistence Paradigm**: `NewVolume`, `StageWriteAt`, `Commit`, `ReadAt`, `Latest`, `Snapshots`, `Snapshot` β€” sparse, resumable byte-range persistence as a coequal paradigm alongside Dataset
Expand All @@ -17,6 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **Volume Example**: `examples/volume_sparse/` demonstrating stage β†’ commit β†’ read, ErrRangeMissing, incremental commits, resume pattern
- **Volume Test Suite**: Comprehensive contract-driven tests covering construction, staging, commit, read, validation, overlap detection, resume, cumulative manifests, and fault injection
- **Volume Contract**: `CONTRACT_VOLUME.md` β€” normative contract for Volume persistence model
- **Overflow-Safe Arithmetic**: Volume bounds checks use overflow-safe arithmetic to prevent silent wrapping on extreme int64 values

### Changed

Expand Down Expand Up @@ -47,6 +78,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `lode.ErrOptionNotValidForReader` β†’ `lode.ErrOptionNotValidForDatasetReader`
- **No behavior changes intended**: All existing functionality is preserved under the new names.

### References

- [CONTRACT_VOLUME.md](docs/contracts/CONTRACT_VOLUME.md) β€” Volume persistence contract

---

## [0.5.0] - 2026-02-06
Expand Down Expand Up @@ -277,7 +312,9 @@ Post-v0.3.0 improvements planned:

---

[Unreleased]: https://github.com/justapithecus/lode/compare/v0.5.0...HEAD
[Unreleased]: https://github.com/justapithecus/lode/compare/v0.7.0...HEAD
[0.7.0]: https://github.com/justapithecus/lode/compare/v0.6.0...v0.7.0
[0.6.0]: https://github.com/justapithecus/lode/compare/v0.5.0...v0.6.0
[0.5.0]: https://github.com/justapithecus/lode/compare/v0.4.1...v0.5.0
[0.4.1]: https://github.com/justapithecus/lode/compare/v0.4.0...v0.4.1
[0.4.0]: https://github.com/justapithecus/lode/compare/v0.3.0...v0.4.0
Expand Down