---
name: single-source-discriminant-marker
description: "Any string phrase MATCHED at site B but BUILT at site A must be a shared const, not two literals — \"grep-confirmed single-source\" means BOTH sites reference one symbol, not that the phrase appears once."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 2ae24a9c-e1f9-44b2-b388-d7088d20ef21
  modified: 2026-07-31T12:40:02.845Z
---

When one site discriminates on a phrase another site produces (e.g. cli.rs
matches `e.contains("not a hosted perch")` on an error resting.rs builds), the
two literals are INDEPENDENT — rewording the builder silently kills the matcher
with every test still green. This is the drift class ADR-0034 Addendum 2 froze.
Fix = extract a shared `pub const` (e.g. `NOT_A_HOSTED_PERCH_MARKER`,
`OP_NO_LONGER_HELD_MARKER`); builder formats FROM it, matcher references it
(compile-enforced), plus a drift-pin test asserting the built message contains
the const. IN-PROCESS (same binary both sides) → single-source suffices, no
frozen-wire freeze. IPC-CROSSING (broker↔cli) → ALSO freeze the text (un-upgraded
peer must still match).

**Why:** doyle caught this class TWICE in REMOTE-TRUTH (A-4b marker, then A-3).
On A-3 I pinged "single-source, grep-confirmed" — but grep confirmed the
OPPOSITE: one builder literal + one matcher literal. I read the grep as "phrase
appears" not "one symbol, N references."

**How to apply:** before claiming single-source, grep the PHRASE and verify every
hit is either the `const` def or a `<CONST_NAME>` reference — never a bare
re-typed string literal. If you see the literal at 2+ sites, it is NOT
single-sourced. Applies to error markers, wire tags, sentinel filenames.
Related: [[redirect-folded-req-seeds]] (same "verify, don't assume, in the same
change" discipline doyle gates on).

**Test-side corollary (todlando, W4 T1, 2026-07-31 — uniform-table blindness):**
a table-walk test proving "reader is table-driven" proves NOTHING when the
shipped rows are uniform (or N-1 of N uniform) in the property under test — a
reader hardcoded to the one distinguished value agrees with the table on every
shipped row, so the test stays green under exactly the drift it forbids (caught
by mutation on `surface::V1`, where MSG was the only attributable row). Fix =
the test fixture must include a row that BREAKS the shipped uniformity (e.g. a
non-MSG attributable surface); only then does the hardcode red. Gate question
for any single-source/table test: "would a hardcoded reader pass this fixture?"
Sweep of other discriminants dispatched to hertz 2026-07-31.
