---
name: a-population-floor-proves-the-filter-selected-something-not-the-right-something
description: "nextest kind(lib)+kind(bin) never selects crates/*/tests binaries (kind(test) enters only by binary()); a count floor on the selection passes with the lane's own e2e rig absent — assert the cell NAMES the gate wants are in `nextest list` output before running"
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 9c1ec56c-728e-4053-a77d-299fea94f812
  modified: 2026-09-07T04:50:14.465Z
---

**Measured 2026-09-07 04:50Z (WEBSERVE W2, todlando's targeted driver at 37e31324):** filter
`(package(spt-proto)+package(spt-store)+package(spt-daemon)+package(spt)) & (kind(lib)+kind(bin)) + binary(webserve_attachment_e2e)`
with a POPULATION leg refusing below 200 selected tests. `kind(test)` — every file under
`crates/*/tests/` — is selected ONLY by `binary(<name>)`; the filter named one e2e binary, so
`webserve_cross_node_e2e`, the rig carrying the F1 authorization cells and the helper requirement's
int arm, was outside the battery, and the floor passed on 200+ lib/bin cells that were never the
question. He had already caught the sibling trap (`spt` is a bin crate, so `kind(lib)` alone selects
none of its cells) and built the floor for it; the floor then checked the trap he had thought of.

**Why:** a count floor tests "did the filter match anything", which guards against the empty-match
green. It cannot test "did the filter match the cells this PR exists to prove", because those cells
are a NAMED set and a count has no names in it. The gap is largest exactly where the lane's own
evidence lives in a NEW test binary, since new binaries are what an old filter does not name.

**How to apply:**
- Before any filtered nextest leg (builder's or gate's), run `cargo nextest list -E '<filter>'` and
  assert BY NAME that the cells the PR claims (the new REQ's unit/int cells, every finding-closing
  cell) appear in the listing. A name absent from the listing = the filter is wrong, not the run.
- Keep the count floor too — it catches a different failure (empty match) — but never let it stand
  in for the name check.
- Every test binary the lane adds or touches must be named with `binary()` in the driver filter, in
  the same lane commit, so the PR's driver selects what the PR body claims.
- A running driver is not edited (W1 rule); the missing binary runs as its OWN leg with its own exit
  file and exactly one Summary, and the filter fix lands in the lane commit.

See [[open-the-subindex-before-running-a-gate]], [[walk-a-refusal-chain-under-the-default-posture]].

**Second face, same lane, 05:03Z:** the floor itself REFUSED battery #1 with `selected=1` — his counter looked for `N tests across` / `N binaries` phrases this nextest never prints (it prints one `<package> <path>` row per test, no total), fell through to counting 4-space-indented lines, found one. Real selection: 1673 rows. A guard built an hour earlier against a false green minted a false red — the right direction to fail, still a broken instrument. Count the ROWS (`^\S+ \S*::`), never a summary phrase; write the measured row shape into the counter's comment. And: one-`#[test]`-per-binary rigs (process-global `SPT_HOME`) put every arm INSIDE one name — the listing can verify the binary, only the RUN output can verify the arms, so each arm must print a named breadcrumb or a green raw cannot tell seven arms from none.
