spec(memory): fully repo-contained store (single dir + DR-written .gitignore) — 0.10.2#26
Conversation
…) — devague /think Converged frame for the next architecture step: collapse the 0.10.x two-store (public→repo / private→$HOME) model to a SINGLE <repo>/.eidetic/memory holding both visibilities; private kept out of git by a fail-closed .gitignore that data-refinery writes on store-dir materialization (eidetic stays write-path-free — no S2083 sink). Deletes the cross-store union/dedup machinery. Private becomes local to the working copy; Claude↔colleague private sharing consciously dropped. Cutover ships ATOMICALLY with the DR dep bump that provides gitignore-on- materialize — blocked on that sibling release (file DR brief first). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WR1vQvraNdkhuYNpy68fzh
…ange) Spec-only PR: docs/specs/2026-06-24-...repo-contained.md. Implementation tracked in #25, blocked on data-refinery-cli#12 (gitignore-on-materialize). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WR1vQvraNdkhuYNpy68fzh
PR Summary by QodoSpec: fully repo-contained memory store + bump version to 0.10.2 Description
Diagram
High-Level Assessment
Files changed (5)
|
Code Review by Qodo
Context used✅ Tickets:
🎫 Define Eidetic role in the Culture research flow 🎫 First-class 'added_by' attribution field on records (distinguish agents in a shared scope) 🎫 CLI inconsistency: overview calls the neo4j backend '--backend graph' while every other verb calls it '--backend neo4j'✅ Compliance rules (platform):
32 rules✅ Skills:
version-bump 1.
|
The entry referenced a truncated ellipsis path (docs/specs/2026-06-24-...repo-contained.md) that did not resolve; replace with the full filename so greps/navigation work. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WR1vQvraNdkhuYNpy68fzh
|
Qodo finding 1 (Wrong spec path) — FIXED ( (Qodo's high-level note about sequencing is already the spec's central constraint: the behavioral cutover stays blocked until the data-refinery release that guarantees
|
|
Resolve the version-bump collision: - pyproject.toml / uv.lock: keep 0.11.0 (> main's 0.10.2). - CHANGELOG.md: union — [0.11.0] on top, splice main's [0.10.2] entry in before [0.10.1]. No content contradicts; purely ordering. Brings in #26's repo-contained-store spec doc + .devague state. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>



What
Ships the converged design spec for the next memory-store step —
docs/specs/2026-06-24-eidetic-s-memory-store-is-now-fully-repo-contained.md. No behavior change in this PR (spec + version bump only); the implementation is tracked in #25 and blocked on data-refinery-cli#12.Why
Direction from @OriNachum: "always put knowledge in repo, add gitignore — less complexity, more contained." The 0.10.x two-store model (public→
<repo>/.eidetic/memory, private→$HOME) splits a project's memory across two dirs and needs cross-store union/dedup on every read (the surface Qodo #1 was about).The model (spec'd)
<repo-root>/.eidetic/memoryholds both public and private records.$HOME/.eidetic/memoryis used only as the out-of-repo fallback;EIDETIC_DATA_DIR/--data-diroverride stays byte-identical.*__private.jsonl) kept out of git by a fail-closed.gitignore(*+!.gitignore+!*__public.jsonl).seen-dedup machinery insearch()/all()is deleted — reads hit one dir, and the no-leak invariant simplifies to a singlecan_serve-gated set.Two decisions (confirmed in the frame)
git worktreewon't carry gitignored shards; it sees committed public records only)..gitignore(it owns the on-disk layout) — eidetic stays write-path-free, so noS2083sink is reintroduced. Consistent with the First-class 'added_by' attribution field on records (distinguish agents in a shared scope) #8/Delegate store migration to data-refinery (no file-touching) + uniform --backend (#12) #15 boundary.Sequencing (why it's blocked)
The in-repo private model is only safe once the gitignore exists, so the cutover must ship atomically with the data-refinery dep-bump that provides it — never before, or private shards land committable (leak window). Critical path: data-refinery-cli#12 → DR releases → eidetic bumps the floor + cuts over (#25).
How it was built
/think(devague): announcement frame → captured + pressure-tested claims → honesty conditions confirmed by the operator → converged gate → exported spec. The frame state is committed alongside the spec as the evidence trail.Gates
Docs/spec + version bump only. markdownlint,
teken cli doctor --strict, and the test suite are unaffected and green.0.10.1 → 0.10.2.🤖 Generated with Claude Code
https://claude.ai/code/session_01WR1vQvraNdkhuYNpy68fzh