Day 8 of 16 · Sunday · Learning

Memory hygiene — the absence-claim trapConcept

A false 'X doesn't exist' is the most dangerous thing an agent can write to memory — because every future session inherits it as fact and stops checking. Today: how the trap works and the one-line habit that defuses it.

Catch-up progress
8/16
Why this matters to you

It bit your system this very morning. While planning today, Claude ran a command with a failed `cd`, landed in the wrong directory, and twice reported 'NO BIG3 FILE' and 'Personal Daily Briefing dir doesn't exist' — both false. The files were there the whole time. Session #1776 is the older instance: a wrong absence-claim got written to the persistent memory layer and poisoned later sessions until it was manually corrected.

An 'absence claim' is any statement that something is NOT there: a file doesn't exist, a function isn't defined, a feature was never built, an API has no such endpoint. The problem is that absence is almost never observed directly — it's inferred from a single failed lookup. If that lookup was run wrong (wrong path, wrong directory, stale cache, typo), the conclusion is false but sounds authoritative.

The trap closes when a false absence claim gets stored. Your `claude-mem` layer at `~/.claude/projects/-Users-tom/memory/` is loaded into EVERY session. A memory that says 'PDB has no Personal Daily Briefing folder' tells next week's Claude to skip checking — so it confidently builds on a falsehood and never re-verifies. A false positive ('this file exists') gets caught the moment someone opens it; a false negative hides, because nobody looks for what they've been told isn't there.

The fix is a discipline, not a tool: an absence claim needs a SECOND, differently-shaped check before you believe it — let alone write it down. This morning the tell was right there: the same `cd` failed loudly ('no such file or directory') one line before the 'file missing' conclusion. The directory error WAS the root cause; the 'missing file' was a symptom. Reading the whole output, not the last line, breaks the trap.

Worked example

The exact failure pattern from this morning — and the two-check habit that catches it:

# WHAT HAPPENED (abbreviated):
cd "/Users/tom/Claude/PDB/Personal Daily Briefing"   # -> no such file or directory
cat data/big3/2026-06-07.md                          # -> 'No such file' ... but WHY?

# THE SECOND CHECK that breaks the trap:
ls -d "/Users/tom/Claude/PDB/Personal Daily Briefing" 2>/dev/null || echo "DIR MISSING"
find /Users/tom/Claude/PDB -name '2026-06-07.md' -path '*big3*'   # search, don't assume the path

# Result: the file was at /Users/tom/Claude/PDB/data/big3/  --
# the 'Personal Daily Briefing' subfolder was the stale assumption, not the file.
▶ Do it now
  1. Pick a belief your system 'knows' that's an absence claim — e.g. open `~/.claude/projects/-Users-tom/memory/` and skim for any note phrased as 'no X' / 'X was removed' / 'doesn't have Y'.
  2. Re-verify ONE of them with a differently-shaped check than whatever produced it: if it was a path lookup, use `find`; if it was a grep, widen the pattern; if it was 'feature not built', grep the actual scripts dir.
  3. If the claim is now false, write a corrective observation so the memory layer self-heals: invoke the `claude-mem:mem-search` skill to find the stale note, then state the correction out loud in-session ('Correction: the big3 files live at PDB/data/big3/, not under a Personal Daily Briefing subfolder') so it's captured as a fresh observation that supersedes the old one.
  4. Observe the side-effect: re-run the original failing command from the CORRECT directory and confirm the thing you were told didn't exist actually does.

Gotchas

Go deeper: claude-mem: how memory injection works
One-card takeaway

Never trust a 'doesn't exist' from a single lookup, and never write one to memory without a second, differently-shaped check — a false absence hides forever because nobody looks for what they've been told isn't there.