DB Path Switch
Both sides add CCFAMILY_HOME env var detection. By default each still uses its own SQLite; once enabled, reads/writes hit the unified DB.
SCOPE: ccRecall + ccRewind
EFFORT: 1-2 hr each
RISK: low (fallback default)
// 6 BASELINE (in both) + 7 ccRecall + 7 ccRewind = 20 unified target
The shared SQLite schema spec. Only 6 baseline tables actually exist on both sides and have to change together; the other 14 stay independent, because the two tools were never reading the same thing. The future merge into ~/.ccfamily/db.sqlite goes through reversible migration.
6
BASELINE · IN BOTH
7
ccRecall · DOMAIN
7
ccRewind · DOMAIN
Modifying a baseline table → cross-PR sync on both sides; modifying a domain table → just the owning repo. Source of truth lives in .claude/architecture/schema-spec.md.
// CROSS-PR ENFORCED
// These 6 are the only ones requiring cross-PR sync.
// Why the message tables aren't here: see the note below.
// MEMORY + METACOGNITION
// v0.5.0 dropped session_journal and session_checkpoints —
// neither had any callers. Reasoning on the ccRecall page.
// MESSAGE BODIES + GUI STATE
ccRecall was forked from ccRewind, storage layer included, so the message tables came along for the ride. v0.2.0 removed them — an internal audit found that memory recall, session summaries, FTS search, and distillation never query them. They were fork residue: occupying space, read by nothing.
So the split you see now tracks what each tool actually does: ccRewind is a history GUI and has to store every message so you can read it back; ccRecall is a memory layer and only needs session-level metadata plus the memories it distilled itself.
// This page said "10 tables aligned" for a while — the spec had fallen behind the code. Corrected 2026-07.
Three-stage migration design: env var switch → migrate tool → rollback path. The concrete implementation route for ASSERT #06 Reversible Migration.
Both sides add CCFAMILY_HOME env var detection. By default each still uses its own SQLite; once enabled, reads/writes hit the unified DB.
SCOPE: ccRecall + ccRewind
EFFORT: 1-2 hr each
RISK: low (fallback default)
ccfamily-migrate tool: detect both DBs → create unified → copy baseline + domain → VACUUM → keep originals.
CONFLICT: UNION + PK dedup
EFFORT: 2-3 days
LOG: ~/.ccfamily/migration.log
ccfamily-migrate rollback → mark unified DB as archived; both sides repoint to their old DBs. Never deleted — it's a pure baseline restore.
REVERSIBLE: ✓ always
EFFORT: 1-2 days
DATA LOSS: 0
// Integrators can always opt out — that's the family overview ASSERT #06 commitment. Migration tool not yet built, but the design is locked.