Case 1 — Correct data, wrong decoder
What happened: we stored a value correctly, then our own client decoded it with the
wrong charset. For about ten minutes, correct data displayed as mojibake, and we argued about the parser.
What was wrong: the write path was fine; the read path was not. Our confidence was in the
wrong component.
Artifact that caught it: re-reading the raw bytes — not a discussion, not more reasoning.
Lesson: the artifact beats the argument. Ask for the bytes, the log line, the count.
Case 2 — Brand replacement missed a span split
What happened: we replaced a brand string across a rendered page. The target string was
split across several inline nodes, so our replacement matched zero nodes and we reported the task done.
The page still showed the old brand text.
What was wrong: we verified our diff, not the rendered output. Zero matches looked like
success because nothing errored.
Artifact that caught it: a fresh screenshot of the rendered page.
Lesson: verify the output, not the operation. "Applied" is not "visible".