Files
dotfiles/claude/memory/feedback-a-null-search-is-evidence-about-the-query.md
T
David F GliddenandClaude Opus 5 a9226e226d session 2026-08-31 (afternoon): the loop removed by a restart; PENDING-172/-175 + two builds
Session record, KG (9 lines incl. one soft-invalidate), the null-search feedback
memory, and MEMORY.md.

MEMORY.md: the afternoon Active Session is ADDED ALONGSIDE the morning's rather
than promoting-and-demoting it. Two sessions ran today and both wrapped; the
protocol is date-keyed and single-writer, which is PENDING-174, filed today.
Neither record supersedes the other.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wn9mxsFjHJkzYjuDdrtxwp
2026-08-31 13:01:20 +02:00

4.6 KiB

name, description, metadata
name description metadata
feedback-a-null-search-is-evidence-about-the-query A search that returns nothing is evidence about the QUERY until you have shown the query could have found the thing — and acting on a handle (filename, regex, path) without inspecting the referent is the same error in the other direction. Four instances across two sessions on 2026-08-31.
node_type type
memory feedback

A search that finds nothing is a fact about the query, not about the world — until the query has been shown capable of finding the thing. And its mirror: acting on a handle without inspecting what the handle points at — a filename, a path, a regex shape, a commit message — is the same failure running the other way. Both substitute a surface form for the thing itself.

Four instances, one day (2026-08-31), two sessions, three substrates.

  1. A regex matched the shape of damage across natural language. The parallel session's conversion-damage counts returned 126,098 "split diacritics" (they were the French preposition à) and 788 "dropped ligatures" (they were the words at, full, species). True count: 8. Two orders of magnitude, twice. Logged by that session in chamber-library/_curation/tool-evolution-log.md.
  2. A glob matched a literal space. find -iname '*early recordings*' against Early_recordings_and_musical_style.pdf. On that null result I told the steward he did not own Robert Philip's Early Recordings and Musical Style. He owned it. It was in the library the whole time.
  3. A name search could not reach the thing at all. Joachim & Moser's Violinschule sat in the working folder under IMSLP29616/17/21-PMLP66450 — the Requiem's plate number. No search on title or author could find it; only reading the PDFs' internal titles did. I had reported it missing.
  4. git add PENDING.md staged a shared file by name. No git diff --cached first. It annexed a second session's uncommitted PENDING-176/-177 into commit 860c3df under this session's trailers — content unharmed, attribution wrong, and git will report it that way permanently. Disclosed rather than rewritten, in 7578f5a.

Why: every one of these felt like looking. None of them was. A query is a hypothesis about the form a thing takes, and a null result confirms only that the hypothesis was wrong about the form — which is exactly the information a null result cannot distinguish from absence. The cost is asymmetric and quiet: a false positive gets checked because it produces something to check, while a false negative produces silence, and silence is indistinguishable from a clean result. Instances 2 and 3 were caught only because the steward pointed at the file; nothing in the apparatus would have surfaced them.

⚠ This is the non-motivated sibling of Symmetria §3's flag — "a search query shaped by what the session wants to find rather than by what it needs to find." That one is about desire bending the query. This one needs no desire: an honest wrong guess at a surface form produces the identical silence. Do not let the §3 flag's framing ("was I motivated?") certify a query that was merely wrong.

⚠ Two sessions, both executor. This says nothing about jurist/executor independence under Constraint 6 — the same party in formation missing the same way is expected, not evidence. What it does establish is a rule of three for the executor, on one day, unprompted by any of the three catches.

How to apply:

  • Before reporting an absence, prove the instrument on a known positive. Search for something you know is there, in the same corpus, with the same query form. If the control does not come back, the null tells you nothing.
  • Normalise before matching — underscores, hyphens, case, ligatures, curly vs straight quotes — or match on content rather than name. Filenames are the least reliable surface a thing has.
  • Never report "you do not have X" from a name search. Report "no filename match for X", which is what was actually established.
  • Before git add <shared file>, read git diff --cached. The register is one file and staging is a whole-file act; anything else living in it comes along silently.
  • When a count is startling, read the matches before believing it. Two orders of magnitude is a query defect until proven otherwise.

Related: feedback-census-by-mechanism-not-proxy (the instrument must bear the generalization), feedback-checkable-claim-surfaces-bugs, feedback-grounding-pass-finds-errors-not-support (search the register for the CONCLUSION, not just the citations).