v0.14.3
Automatic compaction now provably converges: a task filter built on a shrinkability guarantee replaces the fixed row floor that could rewrite wide-row tables forever.
🐛 Bug Fixes
- substrate: prevent byte-capped compaction loops (a115798) - pond's first community contribution, reported and fixed by @alexnayko (#123, #124). The fixed 50,000-row candidacy floor made the row target unreachable for tables averaging over ~2.7 KB/row, so every sync re-rewrote the same live fragments: on the reporting store, a 1.03 GB table accumulated 32 GB physical across 31 full rewrites with zero net progress. The floor is gone, and the compaction filter now requires every planned rewrite to strictly shrink the fragment count, applying the per-fragment width check only when the byte cap can actually split the output - so ordinary small-fragment merges keep running while unwinnable rewrites are skipped. Every veto names its reason in the perf trace (
missing_sizes,cannot_shrink,row_target_unattainable,absorb_veto,invalid_byte_budget), and the contract is now a named spec rule,lance-compaction-filter(section 3.4). Verified to reach a fixpoint: the reporter's live canary went 14 -> 6 fragments in one pass and the second pass changed zero files.
📚 Documentation
- maintenance: align compaction cap comments with shrinkability gate (8ae77e8)
🧹 Chores
- nix: add a canonical flake at the repo root (#126) (3fefa03) - the install line is now
nix profile add github:tenequm/pond#pond, no quoting and no?dir=ops/nixleaking the repo layout into the command.
Full Changelog: v0.14.2...v0.14.3