Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

7. The mirror — reading the conflict

Here is our finished document. This is pour-the-slab.thml exactly as it ships — the bodies are fuller than the ones we typed along the way, and nothing else has changed:

focus conditions-are-fine
  kind claim
  Conditions on site are fine to pour the foundation slab this afternoon.

focus truck-is-booked
  kind observation
  The ready-mix truck is booked for 14:00 and the full crew is on site.
  source site-diary
  observed-at 2026-03-11

focus overnight-freeze
  kind observation
  The site thermometer logged minus four degrees from 02:00 to 06:00, and tonight's
  forecast repeats it. Fresh concrete that freezes before it sets never recovers.
  source site-diary
  observed-at 2026-03-11

link truck-is-booked supports conditions-are-fine
link overnight-freeze opposes conditions-are-fine

site-engineer holds conditions-are-fine
  confidence 0.88 assumed
  note Pouring today. The truck is booked and the crew moves to another job Thursday.

It is clean

Run it normally:

thoughtml pour-the-slab.thml

No errors. No warnings. Every reference resolves, nothing contradicts at the form level, nothing is orphaned. By every structural check, this document is fine.

But the structure disagrees with the author

Now turn on the mirror — the opt-in second reading:

thoughtml --audit pour-the-slab.thml

The canonical JSON now carries an audit section:

"audit": {
  "conflicts": [
    {
      "kind": "confidence-vs-status",
      "severity": "error",
      "subjects": ["site-engineer-holds-conditions-are-fine", "conditions-are-fine"],
      "message": "`site-engineer` asserts confidence 0.88 in `conditions-are-fine`, but your own structure defeats it (argument status: out)"
    }
  ]
}

Read what happened. The engineer holds conditions-are-fine at 0.88. But the document also records overnight-freeze opposes conditions-are-fine. When the mirror computes the argument status, conditions-are-fine comes out out — defeated by its own recorded counter-evidence. The agent wrote down the objection, then shipped anyway.

That’s the conflict: high confidence in a claim the structure defeats. And the 0.88 declared itself assumed — so the mirror shows not just how sure the agent is, but on what footing.

The mirror reports; it does not decide

Notice what ThoughtML did not do. It didn’t lower the confidence. It didn’t veto the ship. It didn’t tell the team they were wrong — maybe the stale reads are acceptable, maybe the opposition is weak. It surfaced the disagreement between what was said (0.88) and what the structure implies (defeated), and left the call to a human.

This is the whole philosophy in one example: a mirror, not an oracle.

The rest of the second reading

--audit is one of several opt-in readings. The catch-all flag turns them all on:

thoughtml --compute conditions-are-fine.thml

That adds derived confidence (how strong each claim is, propagated through the evidence), argument status on every node, per-edge leverage, and — for documents with decisions — expected value. The playground turns these on by default, so you see them live.

Where to go next

  • The Language Reference documents every record, relation, posture, field, and diagnostic precisely.
  • The Mirror explains how each reading is computed.
  • The Use cases guide shows where this pays off: decision records, design reviews, agent reasoning a human can audit.