---
name: structural-exclusion-cannot-be-mutation-proved
description: "A negative pin whose subject is excluded STRUCTURALLY can never be reddened by mutating the code — its green is about a future refactor, not about today's guard, and reporting it as mutation-proved is a false claim."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 94b5d55b-90d1-4473-8623-929bda19d570
  modified: 2026-08-21T11:00:58.062Z
---

#196 shipped a write-time notice with a declared firing population. I pinned the
exclusions two ways: a unit decision table over the population predicate, and an
int arm proving the invite-code redemption path prints no notice. Then I ran
doyle's standard per-arm mutation — two arms broken in one build, predictions
registered first — and got exactly the predicted 2 red / 1 green, int PASS.

**The int's green there proves nothing about the redemption exclusion.**
`redeem_local` writes through `apply_mutation`, one level BELOW the body the
notice lives in — it never reaches `tuple_mutation` at all. So no in-place
mutation of the notice, its predicate, or its probe can make that arm print.
The arm would have stayed green if the predicate had no exclusions whatsoever.

**Why this is easy to report wrongly:** the mutation run produces a clean
"exactly these pins reddened, the others held" table, and every green in it
reads as a verified guard. But greens in that table come in two kinds — one
that COULD have reddened and did not (evidence), and one that could not have
reddened by construction (no evidence at all). Nothing in the output tells them
apart, and the flattering read is that they are the same kind.

**What the structural arm IS worth:** it guards a future MOVE — the day someone
relocates the notice down to the shared seam "so every write gets it", that arm
reddens and names the knock/redeem paths as the reason. That is a real and
valuable pin. It is just not a pin on the predicate.

**How to apply:**
1. When you build a negative/population pin, ask which mechanism excludes the
   subject: a PREDICATE the code evaluates, or the call graph never arriving.
2. Predicate exclusions are mutation-provable — mutate the predicate.
3. Structural exclusions are not. Say so beside their green, name what they DO
   guard (a future refactor), and never let the mutation table's shape imply
   they were exercised.
4. Report both kinds separately to the gater. A single "all other pins held"
   sentence launders the second kind into the first.

Kin: [[mutate-the-defect-not-the-trigger]] (a mutation must remove the DEFENSE,
not the trigger — this is the sibling case where no mutation can reach the
defense at all), [[negative-control-must-mutate-every-encoding]],
[[condition-reproduced-race-did-not]] (a green whose path never ran is evidence
about the ladder, not the fix), [[dont-take-a-diagnosis-as-measured]].
