memorylisted
Install: claude install-skill stevehansen/eidet
# Memory core — priming
**Canonical spec:** `docs/domains/memory.md` — read it for the full entity shape, all invariants, key
files, and gotchas. Terms of record: `UBIQUITOUS_LANGUAGE.md` § Memory core / Lifecycle. Design
rationale: `docs/specs/CoreSpec.md`.
A Memory is a typed, repo-namespaced, append-only document with a deterministic id and a validity
interval. This domain owns its shape and its lifecycle verbs. Whether a write is *allowed* belongs to
**writepath**; how a memory *comes back* belongs to **recall**.
## Core invariants (get these right)
- **The id is a frozen persisted format and doubles as the content commitment.** Never hand-roll one,
never regex its shape — ask `MemoryIdGenerator.Matches`. Changing a preimage silently de-boosts the
entire corpus at recall instead of failing a build.
- **A git worktree is not its own repo.** `RepoPathResolver.Resolve` maps a working directory to the
repository it belongs to (a worktree's `.git` pointer file names the main checkout), and it runs
where a path *first* becomes a repo — the CLI's and MCP's working directory. Never put filesystem
access in `RepoIdNormalizer`: that is a pure string map called on already-normalized ids at ~40
sites. Never resolve a *scan root* — intake reads the files in front of it and stores them under the
resolved repo. Memories banked before this are moved with `eidet repo rehome`.
- **Every mutation goes through `MemoryService`'s `RunWriteAsync`/`RunMutationAsync`.** The stor