# Phase 167.1: Contradiction Runtime Surface And Proof Lane - Research

**Researched:** 2026-04-13
**Domain:** runtime/read-path contradiction rendering parity and bounded proof closure
**Confidence:** HIGH

<research_summary>
## Summary

Phase `167` already produced the richer contradiction-row truth surface. The
remaining gap is almost entirely presentation and proof orchestration:

- runtime/read-path helpers still summarize contradiction rows too thinly
- the `L1` vault source-intake page still omits contradiction rows entirely
- the milestone still lacks a dedicated contradiction-aware proof lane

The repo already has the exact ingredients needed:

- one shared contradiction-row payload in `l1_source_intake`
- existing runtime/read-path appenders
- one bounded acceptance lane that already seeds a contradiction case

**Primary recommendation:** keep the richer row payload untouched, enrich
runtime/read-path rendering to surface comparison basis and row summaries, add
contradiction coverage to the `L1` vault wiki page, and close the milestone
with one dedicated contradiction-surface acceptance script that reuses the
existing isolated two-source fixture.
</research_summary>

<architecture_patterns>
## Architecture Patterns

### Pattern 1: Render from the row contract, not ad hoc recomputation
Use the richer contradiction row fields already shipped in Phase `167`.

### Pattern 2: Dedicated proof lanes for milestone closure
Follow the repo pattern of one focused acceptance script plus a runtime-script
invocation test.

### Pattern 3: Keep old acceptance lanes as compatibility baselines
The new proof should augment `run_l1_assumption_depth_acceptance.py`, not
replace it.

</architecture_patterns>

<common_pitfalls>
## Common Pitfalls

- re-deriving contradiction logic inside renderers instead of reading the
  contradiction row payload
- adding too much wording divergence across runtime, dashboard, and vault
- claiming milestone proof closure without a dedicated acceptance lane

</common_pitfalls>
