v2.5.0b1 — beta: comprehensive audit fix bundle
Pre-releasePre-release (2.5 Experimental line — the 2.4 series remains the Stable line, latest v2.4.40).
Beta graduation of the 2.5.0 internal-stabilization line. A comprehensive pre-release audit (hybrid: 10 Gemini finders + 3 Anthropic deep finders, every finding adversarially verified; then a differential a2-vs-b1 demonstration and a cross-provider regression hunt over the fix delta itself) landed 28 fixes (bug-086..113) — full details in qa/issue-registry.json.
Highlights
- Read/write connection separation (bug-086/087): the read seam owns a dedicated connection, so WAL snapshot isolation actually applies — dirty reads on the shared connection could acknowledge a store as a duplicate of a row that was later rolled back (silent loss).
- Atomic merge
mode='move'(bug-088): the source wipe runs inside the merge transaction — a writer queued on the FIFO lock could previously lose an acknowledged row deterministically. - Durable export/import (bug-091/092/110): exports write via temp + rename (a mid-export fault no longer destroys the previous backup), imports validate the file body against its header across all three record types (truncated backups roll back), and
recall_count/last_recalled_at/created_atsurvive round-trips. - Locked-row contract (bug-098): all fixers carry the
locked = 0guard —check_health(fix=true)can no longer rewrite a locked memory's fields. - γ-visible write dedup + scope-local temporal scoring (bug-106/107): write dedup matches read semantics; a scoped recall's confidence curve is no longer scaled by unrelated buckets.
- Queue drain hardening (bug-089/090/093/109): single-transaction archive with a claim-token delete, failure dicts route into retry, agent wipes purge queue rows and cannot be resurrected.
- Packaging/CI:
skills/ships in the wheel (cpersona/skills/), ruff joins CI as a gate, 30 new regression tests (test_audit_2500b1.py).
Verification before this cut: 335 passed / 5 skipped, ruff clean, verify-issues.sh 113 issues / 0 stale / 0 error; a differential harness reproduced 5 representative bugs live on v2.5.0a2 and confirmed all 5 resolved here.
Graduation line: 2.5.0a2 → 2.5.0b1 → (rc) → 2.5.0 final — the line then enters Current; Stable requires a later production-soak certification event (see SUPPORT.md).
🤖 Generated with Claude Code