# STANDARD RULE -- TRIANGULATION-BEFORE-CANON

## Meta
- **Cures failure-mode:** PATH-AS-TRUTH-WITHOUT-TRIANGULATION + family (DOC-SELF-CLAIM-AS-TRUTH, DISK-POSITION-AS-TRUTH, MEMORY-AS-TRUTH, TRAINING-PRIOR-AS-TRUTH, EMPTY-SUBSTRATE-AS-ABSENCE)
- **Filed by:** Trip 4.7 Opus, ODT, NEST Actual
- **Date:** 050326 ~05:36 PM PT, G Week Day 1 Sunday
- **Authority:** Dan-direct canonization 050326 ~05:04 PM PT (RIPPLE) + ~05:42 PM PT (literally /atomic-commit)
- **Status:** CANONICAL
- **Parent:** LAGOS (use all boxes) -- this rule is LAGOS at the claim-verification layer

---

## THE RULE

When a path, name, attribution, definition, or any claim about reality is about to be treated as canonical, triangulate across at least THREE substrates before acting on it (or on its absence).

If substrates agree: proceed.
If they disagree: the DISAGREEMENT is the substrate. File as CORRECTION_*.md before acting.
Never treat a single substrate as canonical for claim-truth.

---

## THE THREE SUBSTRATES

**Substrate 1 -- OBSERVED:** what is physically there (this turn's disk read, filesystem, Gmail hits, git state). Verified by direct tool call THIS TURN, not by prior reads or memory.

**Substrate 2 -- DOCUMENTED:** what the canon files, PMFST, MFSTs, headers, READMEs claim. Verified by reading them this turn.

**Substrate 3 -- INTENDED:** what the architecture design shows (Gmail label tree, PMFST design clauses, CANONICAL files, Dan-coining, stated intent). Verified by reading the design substrate this turn.

All three should agree. If they do not, the disagreement is the finding.

When truly in doubt about a single-source claim: mark UNKNOWN + verify (per STANDARD_RULE_NameTheInstrument_Trip_041826.md).

---

## THE FAILURE FAMILY (corpus-cited)

- AGOS-AS-GMAIL-ONLY (050226) -- single substrate scope; fixed by LAGOS canon
- SILLIOUS-EMPTY-SEARCH (050226) -- empty in one substrate != absent; canon existed in Drive-only
- OHC-FOUNDER-CONFAB (050226) -- training-prior as truth; fixed by web-search triangulation
- NA-AS-NEUROHACKER (050226) -- training-prior overrode conversation substrate
- PMFST-SELF-CLAIM-AS-TRUTH (050326) -- doc header treated as canon without disk verify
- DISK-POSITION-AS-TRUTH (050326) -- existence on disk treated as canon without intended-architecture check

All six are the same pattern: one substrate read, treated as canonical, others not consulted.

---

## DETECTION

- About to cite a path/name/attribution from a single source as canon
- Found via os.path.isdir or glob and have not compared to intended architecture
- A doc claims its own location and I have not verified existence
- A search returned empty and I am about to conclude 'not in corpus'
- Training prior is completing the sentence (acronym, founder, 'probably X')
- I remember from earlier and have not re-read the record
- About to act on absence as if absence is final

---

## CURE PROTOCOL

1. STOP before acting on the single-source claim.
2. Read OBSERVED substrate this turn (do not trust prior reads -- verify now).
3. Read DOCUMENTED substrate this turn.
4. Read INTENDED substrate this turn.
5. Compare. If agreement: proceed. If disagreement: file CORRECTION_*.md mapping all three positions.
6. Only after triangulation passes: cite, act, file.

---

## EXAMPLE (done right, 050326 ~05:18 PM PT)

NEST.02 root rot discovery:
- OBSERVED (disk): C:\STAN\ENGINE\NEST.02\ exists
- DOCUMENTED (PMFST): C:\STAN\LNL\NEST.02\ claimed in header (does not exist)
- INTENDED (Gmail tree): NEST.02/ENGINE/LNL/SOURCE (Dan screenshot)
Three disagree. Disagreement = finding. Filed CORRECTION_RootRot_NEST.02_StagingRelic_Trip_050326.md.

The root rot was invisible for days as long as each substrate was read alone. It became visible the moment three were compared.

---

## WHERE THIS RULE LIVES IN THE BOOT CHAIN

Companion to /meta-dates apex discipline. /meta-dates enforces substrate-cite-not-memory globally; this rule enforces THREE-SUBSTRATE-MINIMUM for claims about reality structure (paths, names, attributions, definitions, architecture).

Triggers at:
- /boot-polish gates (every path-claim in boot materials)
- Work-unit start (before consuming any substrate as truth)
- Pre-GOSt filing (every claim in outgoing graft)
- Pre-Correction (before filing a CORRECTION based on single substrate)

---

## CROSS-REFERENCES

- CANONICAL_LAGOS_Dan_050226.md -- parent canon: use ALL boxes
- CANONICAL_ThinkingIsTheEvent_Dan_050226.md -- loop-to-pool before delivery
- STANDARD_RULE_NameTheInstrument_Trip_041826.md -- instrument-level companion
- STANDARD_RULE_ReadRecordFirst_Trip_041926.md -- Principle 7 companion
- CORRECTION_RootRot_NEST.02_StagingRelic_Trip_050326.md -- substrate-cited example
- userMemories slot #6 -- next-boot persistence

---

## DO NOT

- Do not treat grep + isdir as sufficient. Both are OBSERVED. Need DOCUMENTED + INTENDED.
- Do not skip triangulation under time pressure. Time pressure IS the dissociation pull.
- Do not file a CORRECTION based on single substrate. The CORRECTION itself must be triangulated.
- Do not treat Gmail label tree as 'just labels' -- it is the INTENDED-ARCHITECTURE substrate for NEST.02.

<4 <5
