What's Changed
Several read paths were silently broken once a database grew past one segment, and the new bulk-block format had a few sharp edges in stats, search, and cryo optimise. All fixed below — no schema change, your existing .cryo files keep working.
Fixes:
- Stats report real session counts again: After the v0.1.0 packing changes,
cryo statswas counting compressed blocks instead of sessions, so an archive imported viacryo add chatgpt-export.jsoncould showSessions: 5for 500 conversations. Counts now reflect actual sessions, including inside multi-session blocks. --after/--beforefilter inside packed blocks: Sessions whose timestamps fall outside the requested window are no longer returned just because they shared a block with sessions that did. Sessions with nocreated_atalso stay visible to time-filtered search instead of being excluded by a collapsed block range.- All segments are searchable again: Once an archive grew past 1 GB and rotated into
data_002.cryo, every read path (search,show,last,first,stats,reindex) was silently ignoring older segments. Now every segment on disk is read. cryo reindexis safe under concurrent writes:reindexnow flushes pending into the archive, which writes to data files. It now holds the sameCryoLockasadd/flush/optimise, so a parallelcryo addfrom another shell can't corrupt anything.- MCP server
add_logholds the lock: Previously the MCP server didn't take any lock, so a tool call racing a CLIcryo addcould corruptpending.binor the archive. The MCP path now acquires the sameCryoLock(5 s timeout, same as the CLI).
Performance:
cryo optimiseactually hits--chunk-kb: The size-check pass was using zstd level 1 while the real write used level 19, so emitted blocks were 2–3× smaller than the requested target. The trial now uses level 19 too —--chunk-kb 256produces blocks near 256 KB.cryo optimiseno longer re-compresses every step: A cheap raw-size pre-gate skips the trial compression until the accumulating chunk is plausibly large enough. The per-block cost drops from roughly O(N²) to O(N).cryo optimiseincludes recent activity: It now drainspending.binfirst, so freshly ingested sessions are part of the rewrite and the progress bar actually reaches 100%.
Quality:
- New tests cover multi-segment visibility, per-session time filtering inside blocks, session counts across multi-session blocks, and undated sessions in time-filtered search — the areas that had zero coverage in v0.1.0 and let these regressions through.
| Platform | cryo-vault (CLI) | cryo-vault-mcp (MCP server) |
|---|---|---|
| Linux x64 | download | download |
| Linux arm64 | download | download |
| macOS x64 | download | download |
| macOS arm64 | download | download |
| Windows x64 | download | download |
| Windows arm64 | download | download |
Or build from source — see the README. No schema change in this release: your existing
.cryofiles just work, but runcryo reindexifcryo statspreviously showed wrong counts.
Full Changelog: v0.1.0...v0.2.0