docs/challenge.md
Adversaries for transformation stages
Every stage declared preservesClaimDistinctions about itself — the
authority that performs the transformation also wrote the explanation of it.
Executing the pipeline closed the gap between the pipeline and the computation.
It did nothing about the gap between the metadata and either.
src/lib/projection/challenge.ts, tests/challenge.test.ts.
What a single probe can establish
Asymmetric, and the vocabulary refuses to blur it:
| Declared | Probe finds | Verdict |
|---|---|---|
| discards | identical outputs | confirmed — one witness proves a discard |
| discards | differing outputs | inconclusive — this probe missed it |
| preserves | identical outputs | CONTRADICTED — one counterexample refutes it |
| preserves | differing outputs | survived — one probe passed; nothing proven |
A probe can falsify preservation and can witness a discard. It can never prove
preservation, and no verdict is allowed to read as if it had — a test asserts
that no preservation claim can return confirmed.
Results
symmetrise confirmed a→b=10, b→a=1 vs a→b=1, b→a=10
embed confirmed a regular tetrahedron — every pair equidistant
distance survived weights 0.9 and 0.1
weight survived counts [1,5,9] vs [9,5,1]
Two discards are now witnessed rather than declared:
both produce
d(a,b) = 1. Two opposite relationships are one number.
the tetrahedron's four equal distances (1) embed as 0.745, 0.972, 0.901 — equality destroyed.
The tetrahedron is the strongest probe available for the embedding: four points every pair of which is equidistant, a configuration no 2-D arrangement has. The loss is structural, not a matter of degree.
The probe caught a lie the executable pipeline could not
The symmetrise witness printed d(a,b) = 1. Averaging 10 and 1 gives 5.5.
layout.ts takes Math.min. The stage description said "average the two
directions." Ninth divergence, in the module built this session to prevent
exactly that — and executing the pipeline did not catch it, because execution
runs the function while operation is still authored prose.
It is not a cosmetic difference. min means the weaker relationship
disappears, not that it is compromised with the stronger one. The description
now says "take the shorter of the two directed distances", and a test pins the
semantics — d[0][1] === 1, and !== 5.5 — so the prose cannot drift back
without the arithmetic changing with it.
The guard bites
A stage returning a constant is refuted rather than accepted, and a test asserts
that CONTRADICTED is reachable — a probe set where no input pair ever
produces identical output would make the whole layer decorative.
Standing
| Measurable defect exposed? | yes — min documented as average |
| Measurable improvement? | yes — two discards witnessed, semantics pinned |
| Declarations contradicted? | none — the four probed claims held |
What is still not established
- Four stages of six are probed.
co-changeandshortest-pathhave no adversary, andshortest-pathis the one whose intervention is a selection, which this probe shape does not test at all. - A probe is one pair of inputs.
survivedis the weakest verdict in the vocabulary and is doing real work in two rows. claim,preservesanddiscardsremain authored. OnlypreservesClaimDistinctionsis now challenged; the prose describing what a stage is for is still the stage author's word.- The probes cover the position pipeline. The scalar rules — height, activity —
have
applyRuleas their authority and no adversary.
294 → 301 tests, 26 DOM, 40 mutations, tsc clean.