Track A of docs/assessment/50-execution-plan.md §6, executed under its own protocol. Criterion pre-registered at dfc394d2 (that commit carries the thresholds as importable constants and NO results); this commit carries the run. VERDICT: NO-GO. Full credit by ADR-0252 §5.4's own terms. docs/research/sme-experiment-verdict-797ebad5.md evals/structure_mapping/adr0252_s5/results/report-797ebad5.json deterministic_digest b3d9d27592e213104c51bcace7415fd819d722a1b06f7d0a5ca65bd5a234e4ec 53 cases, 1378 pairs, 0.0% non-convergence — no exception contributed to any number. RS-A (structure-only) separates perfectly, AUC 1.0000, margin +0.0867, and fails structure-sensitivity. RS-B (attribute-bearing) fails all three. The mechanism, measured rather than argued: the similarity quotient that would deliver attribute-invariance is the same quotient that annihilates structural contrast. An add-vs-subtract minimal pair — one entity, identical numbers, one relation kind changed — aligns at residual exactly 0.0, its two configurations being related by a PROPER rotation about e1. Sweeping the attribute weight (committed as diagnostic_sweep), structure-sensitivity fails at every setting, and every regime where the SME property survives is a regime where attributes contribute nothing: AUC 1.00 -> 0.97 -> 0.83 -> 0.69 as they begin to matter. Scope stated narrowly: this refutes H1 for embeddings that encode role-structure as point positions aligned by conformal Procrustes under similarity. The argument is about the quotient, so it generalises across that class; it does not refute every Cl(4,1) representation, and it does not touch the symbolic structure-mapping lane already in evals/structure_mapping/. Two findings that were on nobody's list: N-8 — the experiment was NOT unrun. rnd/sme-experiment-v2 @96e5f468is titled "Verdict: GO" and rnd/structure-mapping-experiment @fc9d0c14carries an earlier one. Neither survives inspection: attempt 1 leaked the S1-S4 label into the embedding; attempt 2 was blind and then took its separability from `except ValueError: res = 1000.0` — a solver exception counted as a distance — on a corpus 46/51 of which is outside holdout_dev/v1 with nothing marked, with duplicate graphs, colliding ids, and an extractor that was never committed. The register, the plan and the ADR all read the same absence and inherited the same error for nine days. A branch tip is not a record. G-21 — the math reader returns a selected graph for 5 of 500 holdout_dev/v1 cases (1.0%), all one skeleton; 24/150 on the public lane. That is why §5.1's four-structure corpus is not extractable, and it is a sharper measurement of the comprehension frontier than G-3's construction count. Registers updated: G-1 carries the verdict, H-10 confirmed and discharged, G-21 added, plan §0 gains N-8, Track A closed, synthesis frontier 2 rewritten. Pins: tests/test_adr_0252_s5_blindness.py, each observed red before green (label leak and duplicate-graph sabotage both caught). Off-serving — evals/structure_mapping/adr0252_s5/ is imported by no serving path, emits no answers, and changes no flag. [Verification]:797ebad5+ this branch — `uv run core test --suite smoke -q` 641 passed in 199.76s; `uv run ruff check` clean; report regenerated after lint with an unchanged digest.
210 lines
11 KiB
Markdown
210 lines
11 KiB
Markdown
# ADR-0252 §5 — the structure-mapping experiment, run to a verdict
|
||
|
||
**Date:** 2026-07-28 · **Runner:** Opus 5 (Track A, `docs/assessment/50-execution-plan.md` §6)
|
||
**Base:** `forgejo/main` @ `797ebad5` · **Criterion:** pre-registered at `dfc394d2`, before the run
|
||
**Artifact:** `evals/structure_mapping/adr0252_s5/results/report-797ebad5.json`
|
||
**`deterministic_digest`:** `b3d9d27592e213104c51bcace7415fd819d722a1b06f7d0a5ca65bd5a234e4ec`
|
||
**Reproduce:** `uv run python -m evals.structure_mapping.adr0252_s5.experiment`
|
||
|
||
---
|
||
|
||
## VERDICT: **NO-GO**
|
||
|
||
Both embedding variants fail. Structure-sensitivity (§5.3c) fails at **every**
|
||
attribute weight tested — it is not a knife-edge on one constant. Per ADR-0252
|
||
§5.4, *"a well-controlled NO-GO is a full-credit result"*: it refutes geometric
|
||
SME for comprehension **in the embedding class tested** and redirects stage 2 to
|
||
a different representation.
|
||
|
||
For ratification. This document authorizes nothing on its own.
|
||
|
||
---
|
||
|
||
## 1. What was already there, and why it could not stand
|
||
|
||
The plan recorded §5 as *"authorized, scaffolded, and unrun."* It is scaffolded
|
||
and authorized. It is **not unrun** — it has been run twice, and both runs
|
||
returned GO on unmerged branches:
|
||
|
||
| Attempt | Branch @ SHA | Claimed | Why the claim does not hold |
|
||
|---|---|---|---|
|
||
| 1 | `rnd/structure-mapping-experiment` @ `fc9d0c14` | GO | Disowned by its own successor: the S1–S4 label entered the embedding via hand-typed "canonical" matrices, so all cases of a structure were the same byte-array. Procrustes on identical matrices is trivially zero. |
|
||
| 2 | `rnd/sme-experiment-v2` @ `96e5f468` | GO | Genuinely blind — and then `except ValueError: res = 1000.0`. Its rule `cross_mean > same_mean*2 and same_mean < 1.0` is satisfied by that sentinel alone. **A solver exception is not a distance.** |
|
||
|
||
Attempt 2 carries four further defects, each of which independently voids it:
|
||
|
||
1. **Wrong branch of the instrument.** It passed mixed versor/point *sequences*
|
||
to `conformal_procrustes`, which dispatches those to field conjugacy
|
||
`W F W⁻¹` — the branch that raises `field conjugacy versor not closed`. Its
|
||
entire separability signal is that raise.
|
||
2. **Corpus provenance.** Its doc says "51 actual problem graphs from the
|
||
`holdout_dev/v1` corpus." **5 of 51** carry holdout ids; 46 carry bare
|
||
integers (`1`, `2`, `9`, … `2087`) matching nothing in that corpus, or
|
||
`gma-*` ids belonging to the **public** lane. §5.6's discipline is
|
||
*"`holdout_dev/v1` only"*, and §5.1 permits synthetic variants only *"marked
|
||
as such."* Nothing is marked.
|
||
3. **Duplicate data.** At least three exact-duplicate graphs under different ids
|
||
(`1`≡`51`, `2`≡`60`, `17`≡`46`) and three colliding ids (`gma-115`,
|
||
`gma-121`, `gma-135` each appear twice with *different* graphs, so its
|
||
`id → label` dict silently drops one of each pair). Duplicate graphs align at
|
||
residual 0 by construction — attempt 1's tautology re-imported through the
|
||
data instead of through the embedding.
|
||
4. **Unreproducible.** Its `scripts/extract_sme_corpus.py` is cited as an
|
||
artifact and was never committed. It also scored only the first 20 rows.
|
||
|
||
None of this was caught by re-reading the documents. It was caught by reading
|
||
the script, the corpus file, and the ids.
|
||
|
||
## 2. The coverage fact that shaped this run
|
||
|
||
**Measured at `797ebad5`: the serving reader returns a selected graph for 5 of
|
||
the 500 `holdout_dev/v1` cases — 1.0% — and all five carry the same relational
|
||
skeleton** (`compare_multiplicative`; they are exactly the organ cohort in
|
||
`evals/structure_mapping/scoring/labels.py`). On the public lane the same
|
||
pipeline yields 24/150.
|
||
|
||
So §5.1's corpus — "minimum four structures with clean labels … drawn from
|
||
`holdout_dev/v1`" — **is not extractable today**. That is almost certainly why
|
||
attempt 2 reached for other lanes; the mistake was doing it silently.
|
||
|
||
This run uses §5.1's own escape hatch, visibly: 5 real cases extracted through
|
||
`parse_and_solve`, 48 synthetic from four declared templates, every one carrying
|
||
`provenance="synthetic"` and pinned by `tests/test_adr_0252_s5_blindness.py`.
|
||
|
||
**Consequence, stated rather than buried:** this verdict speaks about **the
|
||
geometry**, not about coverage. §5.5's compression estimate ("how many holdout
|
||
families collapse to how few canonical structures") is **not answerable** at
|
||
1.0% reader coverage and was not attempted.
|
||
|
||
## 3. The instrument, characterised before use
|
||
|
||
`conformal_procrustes` has two branches and they are not interchangeable:
|
||
|
||
| Input | Branch | Behaviour |
|
||
|---|---|---|
|
||
| `(5,K)` grade-1 point cloud | Kabsch + Umeyama | never raises; invariant to rotation, translation **and uniform scale** |
|
||
| mixed versor/point sequence | field conjugacy | **raises** on unlike inputs |
|
||
|
||
Measured on dummy clouds before any corpus was embedded — identical `1.8e-16`,
|
||
rotated `7.8e-16`, translated `3.9e-15`, uniformly scaled ×2.5 `1.4e-14`,
|
||
non-similar z-stretch `5.9e-1`, unrelated `1.1e0`. This run uses the first
|
||
branch. **Non-convergence rate: 0.0%** across 1378 pairs in both variants — no
|
||
pair was excluded, and no exception contributed to any number below.
|
||
|
||
## 4. Results
|
||
|
||
53 cases, 1378 pairs, 334 same-structure / 1044 cross-structure.
|
||
|
||
| | RS-A (`ATTR_SCALE=0`) | RS-B (`ATTR_SCALE=0.02`) |
|
||
|---|---|---|
|
||
| **(a) Separability** | **PASS** — AUC **1.0000**, τ=0.0935, 100% / 100%, margin **+0.0867** | **FAIL** — AUC 0.8297, 75.1% / 75.7%, margin **−0.4757** |
|
||
| **(b) Attribute-invariance** | PASS, but **analytic** — all 12 variants at exactly `0.000000` because attributes are not in the geometry | **FAIL** — median 0.0331 (ratio 0.107); the ×3 `rescale` pairs land at 0.093–0.227 |
|
||
| **(c) Structure-sensitivity** | **FAIL** — `add-vs-subtract` = **0.000000** | **FAIL** — `S1-vs-S2` = 0.1764 < τ=0.2225 |
|
||
| (d) Systematicity *(reported, not gating)* | chain↔chain **0.0000**, chain↔flat **0.8703** | chain↔chain 0.0448, chain↔flat 0.8661 |
|
||
| **Verdict** | **NO-GO** | **NO-GO** |
|
||
|
||
### 4.1 Why RS-A's decisive control fails, exactly
|
||
|
||
The two graphs in the `add-vs-subtract` minimal pair differ in exactly one
|
||
field — one entity, identical numbers, `add` against `subtract`. Their
|
||
configurations are:
|
||
|
||
```
|
||
subtract : (1,0,0) (2,0,-1) (3,0,0)
|
||
add : (1,0,0) (2,0,+1) (3,0,0)
|
||
```
|
||
|
||
These are related by a **180° rotation about e1** — a *proper* rotation, det = +1.
|
||
Kabsch aligns them exactly, so the residual is not merely small, it is `0.0`.
|
||
|
||
**The similarity quotient that would give attribute-invariance is the same
|
||
quotient that annihilates the structural contrast.** A geometry blind to
|
||
rotation cannot distinguish "gain" from "loss" when their only encoded
|
||
difference is a signed offset on one axis.
|
||
|
||
This much *is* repairable by constants: with asymmetric kind heights
|
||
(`subtract → 7.0`) the three minimal pairs measure 0.162 / 1.940 / 0.217, all
|
||
above τ. **That repair is a diagnostic and does not change this verdict** — the
|
||
criterion was fixed in advance and a re-run under a repaired scheme requires its
|
||
own pre-registration. It is recorded here because concealing it would make the
|
||
NO-GO look deeper than it is.
|
||
|
||
### 4.2 What is *not* repairable by constants — the deeper result
|
||
|
||
Sweeping `ATTR_SCALE` under the same thresholds (committed as
|
||
`diagnostic_sweep` in the report):
|
||
|
||
| `ATTR_SCALE` | AUC | (a) | (b) | (c) | `rescale` median |
|
||
|---|---|---|---|---|---|
|
||
| 0.0 | 1.0000 | PASS | PASS | FAIL | 0.00000 |
|
||
| 0.001 | 1.0000 | PASS | PASS | FAIL | 0.00615 |
|
||
| 0.002 | 1.0000 | PASS | PASS | FAIL | 0.01245 |
|
||
| 0.005 | 1.0000 | PASS | PASS | FAIL | 0.03259 |
|
||
| 0.01 | 0.9742 | FAIL | PASS | FAIL | 0.06682 |
|
||
| 0.02 | 0.8297 | FAIL | FAIL | FAIL | 0.13505 |
|
||
| 0.05 | 0.6888 | FAIL | FAIL | FAIL | 0.40610 |
|
||
| 0.1 | 0.6694 | FAIL | FAIL | FAIL | 1.16296 |
|
||
|
||
Read down the table: **every regime in which the SME property survives is a
|
||
regime in which attributes contribute essentially nothing.** Where attributes
|
||
are geometrically negligible (≤0.005, `rescale` residual ≤0.033), separability
|
||
is perfect — but "invariance" there is a restatement of blindness. The moment
|
||
attributes carry real weight, separability collapses monotonically
|
||
(1.00 → 0.97 → 0.83 → 0.69) and invariance degrades with it.
|
||
|
||
There is no setting at which the geometry both *sees* surface attributes and
|
||
*factors them out*. That is the SME signature §5.3b was written to detect, and
|
||
it is absent — not narrowly missed.
|
||
|
||
The mechanism is structural rather than incidental: Procrustes measures a metric
|
||
distance between point configurations modulo similarity. Any attribute that
|
||
moves a point either moves it **within** the similarity orbit — in which case it
|
||
was never carrying information the aligner could use — or **outside** it, in
|
||
which case invariance fails by construction. There is no third option in this
|
||
class of embedding.
|
||
|
||
## 5. Scope of the refutation — stated narrowly on purpose
|
||
|
||
**What this refutes.** H1 for the class of embeddings that encode role-structure
|
||
as point positions in Cl(4,1) and align them with conformal Procrustes under
|
||
similarity. The §4.2 argument is about the similarity quotient itself, so it
|
||
generalises across position-encoding schemes in this class, not just the
|
||
particular constants used here.
|
||
|
||
**What this does not refute.** That *some* Cl(4,1) representation could carry
|
||
relational structure — e.g. one where relations are versors composed rather than
|
||
points positioned, or where alignment is a non-metric admissibility check rather
|
||
than a Procrustes residual. Those are different experiments and would need their
|
||
own pre-registrations.
|
||
|
||
**What it does not touch at all.** Whether the *symbolic* structure-mapping
|
||
already in `evals/structure_mapping/` works. That lane is untouched here.
|
||
|
||
## 6. What follows
|
||
|
||
Under ADR-0252 §5.4 a NO-GO "cleanly refutes geometric SME for comprehension and
|
||
redirects stage 2 to a different representation," and §5.4 pre-declares this
|
||
full credit. Three consequences for the registers, offered for ruling and not
|
||
taken:
|
||
|
||
1. **G-1 can close** with a recorded verdict, and the §6 build authorization
|
||
question is settled in the direction of "not on this representation."
|
||
2. **Track B's widening is unblocked in shape** (`50-execution-plan.md` §7's hard
|
||
gate: *"Track B widening ⟸ Track A verdict"*). The verdict says widening
|
||
proceeds by **more constructions**, not by geometric structure-mapping.
|
||
3. **H-10's mispricing is confirmed and discharged.** The experiment cost hours,
|
||
not an arc, and it governs the comprehension paradigm — exactly as H-10 said.
|
||
|
||
A fourth item is new and is the one worth your attention most: **the 1.0% reader
|
||
coverage of `holdout_dev/v1`** (§2) is a sharper measurement of the comprehension
|
||
frontier than G-3's construction count, on a corpus the project already treats as
|
||
its held-out standard. It belongs in the gap register on its own.
|
||
|
||
---
|
||
|
||
*Every number above is produced by `uv run python -m
|
||
evals.structure_mapping.adr0252_s5.experiment` at `797ebad5` and is reproduced by
|
||
the committed report artifact and its digest. The criterion constants in
|
||
`experiment.py` are unchanged since `dfc394d2`, which carried them before the run
|
||
and carried no results; the only post-run edit to that file is the additive
|
||
`diagnostic_sweep` block, and `git log -p` shows it.*
|