v0.7.0
Added
Globally unique session recording IDs
- Every session recording now carries a stable
ses_<UUIDv7>identifier inmeta.json, independent of path or name. Renames, moves, and re-imports no longer change identity. - Legacy recordings without the field get a deterministic
ses_<UUIDv5>derived from(repo_id, session_name)via theEffectiveSessionID()accessor — client and server compute the same value byte-for-byte, so no backfill is required. ox doctor --fix-slug=session-idsopt-in backfill persists the deterministic value intometa.jsonfor cleaner ledgers.- Adapter coverage:
ses_IDs are stamped by ox core for sessions captured by every adapter (Claude Code, Aider, Amp, Codex, Droid, Gemini, OpenCode, Pi).
Session summary quality
- New evaluation harness scores summary richness against a curated 18-session golden corpus, catching distiller regressions before release.
- LLM judge wired into the daemon for live summary validation; richness checks block stub or empty summaries from reaching the ledger.
- Tokenstrip is now on by default, reducing recording sizes without losing detail.
- Streaming compressor and
ox session token-optimizeshrink recordings for long-running agents.
Ledger resilience epic
- Multi-writer safety: structural protections against concurrent CLI/daemon writes corrupting
meta.jsonor losing summary fields. - Daemon LLM tier and autofix scheduler proactively repair corrupted or missing artifacts.
meta.jsonmanifest now carries an explicitStoragetag (lfsvsgit) per file (ADR-016), preventing silent demotion of git-stored summaries to LFS pointers.
Session UX
ox session listshows session titles by default; agent-context invocations default to JSON output.
Fixed
Session recording
- Regenerate now hydrates LFS-stub
raw.jsonlfiles instead of producing stub summaries. - Regenerate writes to the canonical ledger path for team sessions instead of the local cache.
- Validator errors no longer leak into user-visible
meta.titleormeta.summary. meta.json.titleis populated alongsidesummaryso list views render correctly (previously 91/155 sessions on the ox team's ledger shipped with empty titles).- Session content readers unified behind
openSessionContentto enforce the cache-only invariant — hydrated bytes never overwrite the in-place LFS pointer. - Closed an autostash race where the LFS pointer rewrite could be lost during commit.
Daemon
- Whisper SQLite handles are properly closed and child watches recursively unwatched, eliminating a file-descriptor leak under long uptimes.
Init and doctor
ox doctor --fixnow restores missingox-*slash commands (theclaude-commandscheck was previously registered but never run).ox initno longer offers Claude Code twice when an external adapter is already installed.
Full changelog: v0.6.4...v0.7.0