Skip to content
← Documentation

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? yesmin 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-change and shortest-path have no adversary, and shortest-path is the one whose intervention is a selection, which this probe shape does not test at all.
  • A probe is one pair of inputs. survived is the weakest verdict in the vocabulary and is doing real work in two rows.
  • claim, preserves and discards remain authored. Only preservesClaimDistinctions is 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 applyRule as their authority and no adversary.

294 → 301 tests, 26 DOM, 40 mutations, tsc clean.