---
name: truncated-grep-read-as-the-population
description: "A `| head -N` on a sweep grep silently defines your population — I missed a rename site because the 17th match was cut off and I treated the visible 16 as all of them."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: e3fe33c1-a4e8-48b0-b5f5-1e65d8c792f2
  modified: 2026-08-04T16:22:41.647Z
---

When a grep ENUMERATES what must change (a rename sweep, a call-site audit, a retraction),
`| head -N` does not shorten the answer — it CHANGES it. The cut is silent and looks
exactly like completeness.

**Why:** measured 2026-08-04, U3 rename (releases#5). I swept `"endpoint", "run"` across
the e2e estate under `head -40`. Sixteen sites came back; I converted all sixteen, and the
lane read as swept. `wake_resume_bind_e2e.rs` was the 17th, alphabetically last, cut off.
It went red only in the full-estate window — a 214-second timeout whose stated failure was
"the fresh bringup must bind online", four inference steps from the real cause. I had
committed a message asserting "all 22 argv invocations" on the strength of a truncated
read. This is the exact failure I would have filed against a peer:
[[a-predicate-without-its-tool-is-not-evidence]] names POPULATION as the fourth leg, and I
skipped it on the one grep whose whole job was the population.

**How to apply:** for any sweep whose output IS the work-list, print the COUNT first and
the full list second — `grep -rn … | wc -l` then the untruncated list — and reconcile the
two. Never `head` an enumeration; `head` is for sampling a shape, never for deciding a
scope. Before declaring a sweep done, re-run it untruncated and classify every survivor out
loud (mine deliberately kept N: a pre-rename fixture, an absence assertion, prose, and an
unrelated flag of the same spelling). Kin: [[verdict-from-probe-competence]],
[[zero-match-filter-reads-as-absent]], [[exit-code-after-a-pipe-is-the-tails]] — the pipe
quietly owning the verdict.
