---
name: correct-fix-deletes-accidental-mitigation
description: A correct fix can silently delete an accidental mitigation that two aligned bugs were providing; pair the corrective with a deliberate replacement in the SAME change.
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 81453f7f-ab4b-4697-9826-4c56daf082cb
  modified: 2026-08-02T02:20:44.347Z
---

When two defects are wrong in the SAME direction they can accidentally compensate, and fixing
one alone removes the compensation while every test still reads green. DOORBELL W5d / releases#90:
the commune ingest anchored the drop dir to the endpoint's registered cwd while the CLI brief
composer (`resolve_filedrops`) anchored to the CALLER's cwd. A worktree session's misplaced commune
was therefore FOUND by the brief — not by design, but because the lookup was wrong in the same
direction the drop was. Correcting the anchor alone would have made that drop invisible and read as
a clean pass.

**Why:** the accidental recovery is invisible in the code — nothing names it, no test asserts it,
and the diff that removes it looks like a pure improvement. It only exists in the interaction of two
wrongs, so neither file shows it.

**How to apply:** before landing a corrective, ask what the OLD wrong behavior was accidentally
buying. If anything, the corrective and a deliberate replacement land in ONE commit, plus a row that
fails if the replacement is dropped. doyle made pair-not-sequence a condition of acceptance and it
was worth it: two separate mutations (arm deleted / anchor reverted) — the two ways the fix could
have landed alone — both go red on that row. Related: [[stacked-defects-mask-each-other]] (a control
that isolates a symptom does not locate the cause), [[every-return-arm-is-a-copy]] vacuity guards.

Third, doyle's ruling on the gap I declared: when a surface is proved by RENDERING because a unit
fixture is expensive, the resolution may be neither the bare render nor the fixture — an INT rig that
already exercises the area can READ that surface as part of its assertion, mechanizing the render into
a gated row for free. Declare the gap honestly and let the gate decide where it is cheapest to cover;
do not pre-build the fixture. It reads as declared-uncovered in the gate report until the int lands.

Second lesson, same leg: **the mechanism a REQ names and the evidence it cites can belong to
different roots.** As minted this REQ named the bounded-spawn death as its mechanism and then
asserted "the commune file survives on disk" — survival evidence from the wrong-cwd root, since the
spawn death writes no file at all. Check that a requirement's evidence is evidence OF its stated
mechanism before building under it. Correct by replacement, never a note beside it
([[correct-by-replacement-not-annotation]]).
