Memory decays. Files move, commands change, invariants shift, duplicates accumulate. This skill is the maintenance loop that keeps the corpus trustworthy — one procedure, entered from either direction.
Reactive entry. Something changed: a file was renamed, a command flag was removed, an ADR shifted a subsystem boundary, a code review found stale memories referencing old paths. Run the procedure scoped to the affected area.
Proactive entry. Idle time, end-of-slice wrap-up, or a scheduled maintenance window. Run the procedure corpus-wide.
Procedure
-
Validate. Run
doctrine memory validatecorpus-wide (reactive: scope with--path-scope/--globto the changed area). Triage each finding:- Fix immediately if trivial (update a path, refresh a scope)
- Capture as a backlog item if non-trivial (risk, chore, or improvement)
- Note and defer if low-impact and not time-sensitive
-
Prune. Identify stale memories:
- Past
review_bydate → flag for review or archive - Unverified threads past expiry → archive (
memory status <REF> archived) working-lifespan memories older than a few days → retract or promote to a durable type- Run
doctrine memory status <REF> archivedfor stale items; useretractedfor memories that were simply wrong.
- Past
-
Link. Strengthen the graph:
- Review suggested relations on recently-recorded or recently-edited
memories (check
memory show <REF>for relation rows) - Check for orphans — memories with no inbound and no outbound relations
memory list --orphans - If there are orphans, focus on these - linking 20-30 records this run
- If there aren't, explore the corpus and strengthen / prune connections
between existing memories
- use
memory search <keyword>to find candidate memories for linking; it returns one page, so sweep with--limit/--page
- use
- Run
doctrine linkfor high-confidence matches
- Review suggested relations on recently-recorded or recently-edited
memories (check
-
Backlog grooming. Findings that can't be fixed in this pass become backlog items:
- Risks for not-yet-surfaced issues (e.g., a memory pointing at a deprecated API)
- Chores for cleanup work (e.g., merging duplicate memories)
- Improvements for enhancements (e.g., promoting a pattern memory to a spec)
-
Fact-check. Spot-check the top-N memories by severity × staleness (days since
updated). For each:- Check the cited source (code path, doc, ADR) against the current tree
- If correct, no action
- If drifted, correct with
doctrine memory edit <REF> - If obsolete, supersede (
memory status <REF> superseded --by <SUCCESSOR>) or quarantine (memory status <REF> quarantined) - If unverifiable, lower trust (
memory edit <REF> --trust low)
-
Report. Produce a brief handoff summary:
- Actions taken (validated N, pruned M, linked L, fact-checked F)
- Findings deferred to backlog (with ids if filed)
- Items flagged for human attention (high-severity, ambiguous, needs decision)
- Write this to
notes.mdor the active handover so the next agent doesn't re-do the same checks.