Skip to content

v2.3.1: reconcile_fix Lossless Merge

Choose a tag to compare

@Michaol Michaol released this 06 Jun 02:58
· 54 commits to main since this release

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.5 REAL → '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 .md
  • test_reconcile_fix_restores_consistency: updated for lossless semantics
  • 178/178 tests pass

📦 Upgrade from v2.3.0

  1. Replace the binary
  2. No configuration changes required
  3. Run asuna-memory doctor — if any DIVERGED warnings appear, doctor --fix will now merge instead of overwrite

Full Changelog: v2.3.0...v2.3.1

Full Changelog: v2.3.0...v2.3.1