Governance & drift
rules.md — the logic layer
The engine reads its thresholds and weights from recall/rules.md frontmatter — nothing is hardcoded. Layering, each overriding the previous key-by-key:
- defaults (
recall/rules.md, shipped with the engine) ~/.recall/rules.md— your global preferences<repo>/.recall/rules.md— the project's rules
The core: block is a hard floor no layer can weaken (e.g. silence_floor_min), and tabu/edge sets only ever accumulate — a later layer can never weaken a safety rule. The human writes the constitution; the system executes it deterministically.
Key knobs: silence_floor (the anti-Clippy guard — below it recall stays silent), dedup_threshold (when a new stamp merges instead of duplicating), facet_weights (a security lesson outranks a styling note), context_boost (editing an auth file prefers security lessons), stay_silent_on, edge_kinds.
Drift does not heal itself
recall freshen (and the dashboard Drift tab) only detect drift; nothing is silently rewritten. Only claim-bearing knowledge can drift — lessons, decisions/ADRs, tasks. The auto-regenerated code map and immutable commit facts are never flagged. States: 🟢 fresh / 🟡 the file got new commits since the note was stamped / 🟠 the file has uncommitted edits.
When you see drift on a file you touch, open the diff since the stamp and decide — then offer the user the resolution; never change a pinned note without their OK:
- Reality moved on, the note is wrong → rewrite the note's core sentence to match
today's code and re-stamp → 🟢.
- The note was right, the CODE drifted from a deliberate decision → that's a
regression/bug → flag it, don't "heal" it away.
Drift must trend toward zero, not grow. A growing pile of 🟡/🟠 is a failure state, not normal.
The task law
The moment the user gives an instruction, decision, plan, or bug — write it as a task in .recall/tasks/ BEFORE doing anything else with it. A task is versioned in git, shows in the dashboard, and comes back automatically (the open-tasks track) the next time anyone touches the files it affects:. Memory you merely "hold" is lost on the next reset; a task is not.
English-only knowledge
ADRs, CHANGELOG entries, task files, commit messages and Recall-why trailers are written in English (the FTS stemmer is English; a German entry is second-class in retrieval). Conversation can be in any language — the corpus is English.