Repository navigation
v2.3.1: reconcile_fix Lossless Merge
What's Changed
🔴 Critical Fix: reconcile_fix Lossless Merge
reconcile_fix (used by doctor --fix) has been rewritten from a lossy SQLite→.md overwrite to a lossless merge:
- .md-only entries → now INSERT into SQLite (previously discarded)
- SQLite-only entries → appended to .md (unchanged behavior)
- Both sources → preserved without duplication
Bug fixes:
- Corrected
datetime('now')TEXT →time::now_unix_ms()INTEGER type mismatch for created_at/updated_at columns - Corrected
confidence = 0.5REAL →'medium'TEXT to match schema type
sync_atoms_to_md() decoupled:
- No longer calls
reconcile_fix()after atom capacity eviction - Prevents evicted atoms from being re-inserted by merge logic (regression in old flow)
- Writes .md directly from DB state after eviction
doctor --fix output updated:
- Changed from
"rewrote .md from SQLite"to"merged .md and SQLite"
📜 Documentation Restructuring
Split changelog into dedicated history files to reduce README bloat:
- HISTORY.md (501 lines) — complete English changelog v1.0.x – v2.3.0
- HISTORY_ZH.md (537 lines) — complete Chinese changelog v1.0.x – v2.3.0
- README.md reduced from ~940 → 605 lines (latest version only)
- README_ZH.md reduced from ~975 → 618 lines (latest version only)
- Added navigation links:
[Changelog History](HISTORY.md)/[历史变更日志](HISTORY_ZH.md)
✅ Tests
test_reconcile_fix_preserves_md_only: verifies .md-only entries survive merge (2 .md + 1 DB → 3 in both)test_sync_atoms_no_regression: verifies evicted atoms don't reappear in .mdtest_reconcile_fix_restores_consistency: updated for lossless semantics- 178/178 tests pass
📦 Upgrade from v2.3.0
- Replace the binary
- No configuration changes required
- Run
asuna-memory doctor— if any DIVERGED warnings appear,doctor --fixwill now merge instead of overwrite
Full Changelog: v2.3.0...v2.3.1
Full Changelog: v2.3.0...v2.3.1