Map.md, Shares.md — because they are regenerated state describing
the vault rather than knowledge in it. And Sessions/, the processed
archive.Sessions/ holds one summary per episode: what was decided, and what passed the
admission tests. That is a narrative restatement of what the same routing pass
already filed elsewhere — the facts went to Memory.md, the actions to the
tracker, the decisions to the shared space. Indexed, one episode's content is in
the index twice, and the two copies double-vote in rank fusion. That is the same
failure doctor's dup-near check exists to name; here it is structural rather
than accidental, so it is excluded by construction instead of reported.Sessions/ — a fact
line's [source:: [[the note]]], for instance — records as unresolved, exactly
as any other target the index does not hold. The citation still tells a reader
which episode established the claim; it just will not resolve to a hit.Acme finds the notes under Clients/Acme/
even when none of them says "Acme". The shared space's name is left out: it
is on every shared note, and is usually an everyday word like "company".--center,
or the center argument of the brain_search tool — typically the note
you're working from).graph source. Notes are chunked heading-aware (each chunk carries its
Heading > Subheading path), code fences are never split, and results are
deduped to at most two chunks per file. If no embedding provider is configured
— or sqlite-vec can't load — search degrades to keyword + graph with a
warning, never an empty result.sqlite-vec loads as a SQLite extension, so it needs a Python whose sqlite3
was compiled with loadable-extension support. Homebrew, pyenv, uv-managed, and
most Linux distro Pythons qualify; the python.org macOS installer ships it
disabled. Verify with
python -c "import sqlite3; print(hasattr(sqlite3.Connection, 'enable_load_extension'))"
— False means the vector leg is unavailable and search runs keyword-only.123456--- title: PPR Retrieval up: [[Retrieval]] same: [[HippoRAG notes]] next: [[Eval harness]] ---
up and down express hierarchy, same marks peers, prev and next chain
sequences. Declare one direction; the mirror is derived automatically (a note
you point up at knows you as down). Three more edge kinds are mined from
structure you already have: a note whose folder holds an index note (like
Clients/Acme/Acme.md) gets up to it, dated notes in the same folder chain
prev/next, and pages sharing an entity: type become same siblings.brain_graph MCP tool and brain graph
CLI command return a note's neighborhood with every edge labeled by relation
and by why it exists (explicit, inverse, folder, date, entity).brain doctor flags notes with no connections at
all (unlinked-notes): they're invisible to the graph leg until someone links
them.brain doctor flags identical and near-duplicate notes a common
reader sees (dup-exact, dup-near — near-duplicates are grouped within a
space and paired across spaces; the near check combines text-shingle
overlap with cosine over already-indexed embeddings, read from the cache
brain cycle writes, <master>/_meta/cache/embeddings.db, only), plus title-stem collisions (stem-collision), since a bare
[[wikilink]] resolves by stem and quietly picks whichever file sorts
first. The fix is the normal editorial path: fold one page into the other
with a mode: patch promotion. See the
CLI reference for severities and exemptions..brain/ contract<vault>/.brain/index.db. It is machine-local state, on
the same footing as .git:.gitignore (.brain/,
.obsidian/), so it never enters the vault's git history.brain index after they pull;
hosted agents get theirs from brain cycle --index server-side..brain/ across, exactly like .git.PRAGMA user_version. Upgrading
brainkit needs no migration step from you — but the two directions behave
differently, and the asymmetry is the point:brain index notices
the older version and forces a full rebuild rather than an incremental one.
It has to: a migration adds empty tables, and the incremental path skips
unchanged files, so those tables would stay empty for every file that hadn't
moved — a silently half-populated index that answers queries with less than
it should.12index at <path> was built by a newer brainkit (schema 6 > 5); rebuild with: brain index --full
brain index — or nothing at all, since brain cycle --index gets there on its
own schedule.(chunk_sha, model) and can be shared
across people, so a chunk two vaults have in common embeds exactly once.add/delete/knn), so the
backend swaps without touching chunking, FTS, or fusion. The unit of scale is
one person's vault, not the whole company.| Corpus (per vault) | Backend | Trade-off |
| ≤ 50K pages | sqlite-vec brute-force (default) | Exact KNN, zero infra, single file. Storage grows linearly. |
| 50K–500K pages | + int8 quantization | 4× smaller, near-exact, same file — still linear scan. |
| millions | LanceDB IVF-PQ or sqlite-vec DiskANN | Sublinear ANN; a heavier dependency or a pre-release. |
[from::] date and a [source::] back to the note that established
it, e.g.123- Acme is a client [from:: 2025-03] [source:: [[2025-03-12 Kickoff call]]] - Acme's plan is Enterprise [from:: 2025-03] [until:: 2026-01] [source:: [[2025-03-12 Kickoff call]]] - Acme's plan is Growth [from:: 2026-01] [source:: [[2026-01-08 Downgrade]]]
[until::] and a new line is added, so the full history stays on the record.[until::] is the failure mode this grammar makes
detectable: the superseded line and its successor are both "true now," and a
query returns a coin flip. brain doctor flags open facts that assign two
values to the same attribute of one entity (fact-conflict) and identical
open fact lines from a double-landed ingest (fact-dup) — close the
superseded line with [until::], or delete the duplicate via write-back.--as-of) — facts true on that date, using what the
vault knows now. Answers "what was true then," with the benefit of
hindsight.--believed-on) — what the vault would have told
you if asked on that date, replayed from the git history at that point in
time. Answers "what did we think then," including facts since corrected.[from::]/[until::] dates in the text, while
transaction time (when the vault learned it) is just which commit you read
the file at. No separate audit log is needed — git already keeps one.[source](URL), as of YYYY-MM citations
used elsewhere: citations back narrative prose ("Acme relaunched their
site"), while fact lines are for state a query can ask about later. Use a
citation for a one-off observation; use a fact line for anything future
questions will need to look up.brain facts, or the
brain_facts MCP tool. The dashboard shows them too: a Facts tab in the live dashboard, and a Facts section in the static snapshot — each with a date control for what was true on a given day.1claude mcp add brain -- brain mcp --vault ~/brain
brain_search (hybrid search with keyword,
vector, and graph legs; optional center note as a strong seed for graph-proximity
ranking), brain_read (a path-scoped
file read that refuses symlinks, vault escapes, and anything outside a
readable space), brain_links (a note's backlinks and outgoing wikilinks),
brain_graph (a note's typed relations — up, down, same, prev,
next — each edge labeled with why it exists), brain_recent (recently
changed notes, from the vault's git history), and brain_facts
(time-stamped fact lines — current, as-of, or believed-on a date). See the
CLI reference for brain index, brain search,
brain graph, brain facts, and brain mcp.