feat(evals,tests,docs): FA-1 — the semantic ground collapses; "alignment" is implemented as overwrite

`packs.compiler._blend_feature_versors` ignores its strength argument and
returns the target verbatim. All three "nudge" sites — cross-language alignment
(0.10), morphology clustering (0.40), mount-time domain resonance (0.40) — are
therefore total overwrites, and ADR-0015's two explicit requirements ("a
weighted graph, not a translation table"; "without flattening their
distinctions") are violated bit-exactly.

Measured: mounting the depth packs onto English REMOVES 37 distinct coordinates
(239 surfaces -> 202 points). English alone is collision-free (220/220), Greek
alone is collision-free (11/11), so the loss is created by the mount. Nine
English question words -- ask, question, what, who, where, how, why, when,
which -- share one coordinate, dragged there by a single Greek verb in their
primary domain. `word`, `דבר`, `דברים` and `λόγος` are one point. English is the
mount-time prototype, so the design's depth-anchor roles run backwards: the
depth languages are deleted into the articulation surface.

Four more findings in the same layer:

  * 63 of 83 authored alignment edges resolve to nothing -- including every edge
    of the two packs serving actually grounds HE/GRC against -- because
    `_infer_foreign_pack_ids` maps id prefixes through a table hardcoded to the
    original three packs, and a miss is a silent `continue`. The corpus was
    grown 7.5x; the growth was never connected.
  * `algebra.holonomy.holonomy_encode` never closes. The reverse walk was
    deleted at fca6216e and the docstring describing it left in place; `alpha`
    is validated and never read (alpha=0.0 and alpha=1.0 return bit-identical
    arrays) while core/physics/biography.py:94 passes it.
  * Four token-level "resonance proofs" are green because the compared arrays
    are the same array -- the open follow-up the 2026-06-14 clause-level finding
    explicitly deferred, now closed as decoration.
  * The cure was already one layer down and never called: algebra/rotor.py has
    shipped `rotor_power` + `word_transition_rotor` (the group geodesic) since
    the algebra layer's first commit. A naive lerp leaves the versor group and
    VocabManifold.update() correctly refuses it -- the overwrite is what a lerp
    degrades into once the guard bites. The guard was right; the escape was not.

This is the missing half of every "geometry adds nothing" verdict: no operator
can distinguish what its ground does not distinguish.

Lands as instrument, not repair -- ../core is the quarry, and L2 is rebuilt in
the keel with these measurements as its provenance. The four decoration tests
are deliberately left standing and named in the analysis doc: green-for-the-
wrong-reason and red are different signals, and replacing them belongs to the
rebuild.

  * evals/logos/manifold_collapse.py -- deterministic, bit-exact census
  * tests/test_manifold_collapse_floor.py -- both directions plus the
    English-alone control that attributes the loss to the mount. Two sabotages
    observed red: a real interpolation (ValueError from the versor guard, which
    is how the cure was found) and disabling the mount site (37 -> 3, which is
    how the 34/2/1 site attribution was measured).

Also lands the FA-1 gate PRE-REGISTRATION -- criterion, corpus, negative
classes and anti-gaming rules committed here so they demonstrably predate any
discrimination number, per the ADR-0252 §5 precedent. The repairs it tests are
mechanism (the geodesic, the closed loop, fail-closed edge resolution), not
tuning; the declared strengths are used as written and are not free parameters.

Charter and gap register corrected where this contradicts them: the corpus is
83 edges not 11, the holonomy machinery is not core/physics/digest.py, and
FA-1's "the gate has never been measured" was false -- the 2026-06-14 negative
exists and is pinned. That error, made in the document that records the
three-negatives correction, is the fourth instance of the pattern this arc
keeps finding, and is recorded as such rather than quietly fixed.

[Verification]: uv run core test --suite smoke -q -> 782 passed in 224.37s, EXIT=0
This commit is contained in:
Shay 2026-07-28 14:18:44 -07:00
parent 472fc0a83f
commit 94f05ba84f
8 changed files with 680 additions and 7 deletions

View file

@ -163,6 +163,16 @@ TEST_SUITES: dict[str, tuple[str, ...]] = {
# regression fails; an improvement must move the recorded constants in
# the same reviewed commit. Deterministic, ~0.8s.
"tests/test_read_rate_floor.py",
# FA-1 / G-25 — the semantic ground's discrimination. Mounting the depth
# packs onto English REMOVES 37 distinct coordinates (239 surfaces → 202
# points): nine question words share one coordinate, and `דבר`/`λόγος`/`word`
# are bit-identical, because every "nudge" in packs/compiler.py returns its
# target verbatim instead of blending. Pinned in both directions with the
# English-alone control that attributes the loss to the mount, so the
# repair — and any further flattening — is a reviewed diff. Two sabotages
# observed red. See docs/analysis/logos-substrate-collapse-2026-07-28.md.
# Bit-exact comparison, no tolerances, ~2.1s.
"tests/test_manifold_collapse_floor.py",
# PR-11 / G-5 / R-9 — the soak's evidence is committed, pinned, and CURRENT.
# Two failure modes, deliberately separated: the digest catches a regression,
# and the attested-source hashes catch STALENESS — evidence that no longer

View file

@ -0,0 +1,170 @@
# Pre-registration: does a repaired semantic ground carry meaning across languages?
**FA-1 experiment · registered 2026-07-28 · criterion committed BEFORE any discrimination
measurement is taken.** Follows the ADR-0252 §5 precedent: the verdict is whatever the
criterion says, a well-controlled NO-GO is full credit, and the criterion is not touched
after the numbers exist.
---
## 1. Why this experiment is not a fourth re-run of a settled question
Three geometric-operator experiments have returned negative (field-reasoner wedge 2026-06-04;
relational-operator ablation 2026-07-19; ADR-0252 §5 structure-mapping 2026-07-28), and the
cross-language holonomy resonance itself returned negative on 2026-06-14 — under the engine's
own metric it **anti-correlated**. The reopening rule this repo set for itself is that a
geometric hypothesis may not be re-proposed blind.
It is not being re-proposed blind. Two preconditions of the June measurement were false, and
both are now measured facts rather than suspicions
(`docs/analysis/logos-substrate-collapse-2026-07-28.md`):
1. **The ground was flattened.** In the mounted trilingual configuration the June experiment
used, 48 surfaces share 11 coordinates and 37 distinct coordinates are gone. Aligned
cross-language tokens are *bit-identical*, so "is the aligned pair closer than the
misaligned one" was not a question about meaning — it was a question about which tokens
had been overwritten with which.
2. **The holonomy never closed.** `holonomy_encode` returns the forward walk only; the reverse
walk was deleted at `fca6216e`. ADR-0015's gate is closure. An open path product has no
reason to be invariant across representations, so the June negative is what the
implementation predicts, not evidence about the design.
A negative result measured with a broken instrument on a corrupted sample constrains the
instrument and the sample, not the hypothesis. **This is the first measurement of the designed
gate.** If it too returns negative, the hypothesis is genuinely damaged — and *that* is the
outcome this registration exists to make binding.
## 2. The two repairs under test (both are mechanism, not tuning)
Neither repair invents anything; both call primitives the repo already ships.
**R1 — blend on the group instead of overwriting.**
```python
def _blend_feature_versors(source, target, strength):
if strength <= 0.0:
return source
return geometric_product(rotor_power(word_transition_rotor(source, target), strength), source)
```
`algebra/rotor.py` has shipped `rotor_power` (exact closed form for simple rotors, invariant
bivector decomposition otherwise) and `word_transition_rotor` since the algebra layer's first
commit. Verified: unit residual stays `~1e-7` across `t ∈ [0,1]` — three orders of magnitude
inside `VocabManifold`'s `1e-5` tolerance — with `t=0` returning the source exactly and `t=1`
the target exactly. **The declared strengths are used as written** (`0.10`, `0.40`, `0.40`);
they are not free parameters in this experiment and will not be tuned.
**R2 — close the loop, and close it around the *pair*.** The June measurement compared two
open path-products with an external distance. Restoring `H = F · reverse(F)` for a single
clause would be worse — that is a scalar by construction and carries no information at all.
The object ADR-0015 actually describes is the loop formed by **two representations of the
same content**: transport out along clause `A`, return along clause `B`.
```
F(X) = v₁ · v₂ · … · vₙ ordered geometric product of X's word versors
H(A,B) = unitize( F(A) · reverse(F(B)) )
d(A,B) = ‖H(A,B) 1‖ deviation from the identity multivector
```
If `A` and `B` carry the same content, `F(A) ≈ F(B)` and the loop closes: `d → 0`. If they do
not, the loop has curvature. This needs **no metric calibration and no threshold on a
similarity score** — the null hypothesis is the identity, which is why the June failure mode
(Euclidean norm passing where the owned similarity metric inverted) cannot recur here.
Two deliberate choices, stated before the run:
* **The per-token `_position_rotor` is excluded.** It was introduced so that "path order
survives even for scalar/vector fixtures" — degenerate test inputs — and it conjugates each
token by its *absolute index*, so clauses of different lengths are transported through
different schedules. Across languages, differing length is the norm, so the rotor injects a
length artefact into every cross-language comparison. This is exactly RQ2 of the June
finding (*"is the position rotor drowning the semantic signal in path-order geometry?"*),
answered by removing it rather than by measuring around it.
* **Order sensitivity is not lost by removing it.** The geometric product is non-commutative,
so `F(w₁w₂) ≠ F(w₂w₁)` intrinsically. G3 below tests this as a requirement rather than
assuming it — if word-order sensitivity turns out to depend on the positional hack, the
claim was never geometric and G3 fails, which is a result worth having.
**R3 — resolve alignment edges by pack membership, not by an id-prefix table**, so the 63
currently-dropped edges participate. This is a load-time correction with no free parameters:
an edge whose target id belongs to no loaded pack becomes an error instead of a `continue`.
All three are applied in a scratch harness against a **copy** of the compiler. `../core`'s
committed compiler is not modified by this experiment — the repaired contract is admitted to
the keel (K1 `algebra/`, K3 `logos/`), and the experiment exists to tell the keel whether the
repaired design earns its place there.
## 3. The corpus, fixed now
* **Aligned triples** — every alignment edge that resolves after R3, grouped into
he/grc/en clause triples. Expected order 2040 usable triples from the 83 authored edges;
the exact set is whatever R3 resolves, chosen by the resolver and not by hand.
* **Meaning-breaking negatives, three kinds, generated mechanically** so no negative is
cherry-picked (the specific failure of the June measurement, which used one hand-chosen
substitution):
1. **Lexical substitution** — replace one content token with a token from a *different*
primary semantic domain, every valid substitution enumerated, not sampled.
2. **Word-order permutation** — ADR-0015's own stated test (*"word-order changes should
change holonomy"*). Every non-identity permutation of clauses with ≤ 4 tokens.
3. **Cross-triple pairing** — the English clause of triple *i* against the Hebrew/Greek
clause of triple *j ≠ i*. This is the strongest negative class: same corpus, same
lengths, same construction, different meaning.
## 4. The criterion — committed, and deliberately unforgiving
Let `d(A,B)` be the loop-closure deviation of the cross-language loop (transport along clause
A, return along clause B): `d = ‖H identity‖` after R2. Single declared metric; no
alternative is consulted after the fact.
**GO requires all four:**
| # | Condition | Threshold |
|---|---|---|
| G1 | **Separation** — aligned pairs close tighter than negatives | `median(d_aligned) < median(d_negative)` with **AUC ≥ 0.80** over all aligned vs all negatives |
| G2 | **Holds on the hardest class** — cross-triple negatives alone | **AUC ≥ 0.75** on class 3 |
| G3 | **Word-order sensitivity** — the ADR's own requirement | ≥ **90%** of non-identity permutations score `d` above their own unpermuted clause |
| G4 | **No collapse re-entry** — the repair must not buy separation by flattening | mounted `coordinates_lost` = **0** under R1 |
**NO-GO** if any of G1G4 fails. **Any** of these outcomes is a full-credit result:
* GO → cross-language holonomy closure becomes the keel's L3 validation gate (ADR-0015 as
designed), and the K3 contract carries it with these numbers as provenance.
* NO-GO with G4 held → the geometry does not carry meaning across representations *even on a
clean, closed ground*. The pillar is then formally re-scoped: the depth packs stay as
lexical and morphological resources, the "holonomy resonance is the validation gate" claim is
struck from ADR-0005/0015 by amendment, and every document repeating it is corrected. This
is the outcome that would retire the largest piece of unearned design in the system, and it
is worth as much as a GO.
* NO-GO with G4 failed → the repair itself is wrong; report and stop. No third attempt at the
same encoding without a new mechanism.
## 5. Anti-gaming rules, binding
1. **No threshold moves after numbers exist.** If a threshold is wrong, that is a finding to
record, not an edit to make; the experiment re-registers under a new date and says why.
2. **No metric shopping.** `d` as defined in §4 is the only quantity consulted. The June
failure mode — Euclidean norm "passing" where the owned similarity metric inverted — is
forbidden by construction: one metric, declared here.
3. **No negative curation.** All three negative classes are generated mechanically and all
generated negatives count. Dropping any requires a stated rule applied to all.
4. **The controls run first and are reported regardless of outcome:** aligned-vs-aligned (the
floor), and identity-vs-identity (`d ≈ 0`, proving the instrument can report closure).
5. **The result is published whichever way it lands** — as an analysis doc with the raw
numbers, next to this registration, in the commit that produces them.
## 6. What the answer changes
The keel's L3 design branches here, which is why FA-1 precedes K3:
* **GO**`logos/` carries a real validation gate: a clause is admitted as understood when
its cross-language loop closes. Perception (K4) gains a meaning criterion that is not
template match — which is precisely the constraint the 1.28% read rate measures.
* **NO-GO**`logos/` is admitted as lexicon + morphology only, the gate claim is retired,
and K4's meaning criterion must come from somewhere else. That is a smaller keel, honestly
scoped, and the Growth Law's *"coverage is data, not failure"* covers it.
Either way the keel gets a ruled foundation instead of an assumed one, which is the entire
purpose of running FA-1 before building on L2.
**Related:** `docs/analysis/logos-substrate-collapse-2026-07-28.md` (the defects this repairs)
· `docs/analysis/holonomy-resonance-proof-not-robust-2026-06-14.md` (the prior negative and its
open questions RQ1RQ3) · `docs/plans/2026-07-28-foundations-audit.md` §FA-1 ·
`docs/research/sme-experiment-verdict-797ebad5.md` (the pre-registration precedent).

View file

@ -0,0 +1,259 @@
# Finding: the semantic ground collapses — "alignment" is implemented as overwrite
**Date:** 2026-07-28 · measured at `472fc0a8` · **FA-1** of the Foundations Audit · **G-25**
**Status:** substrate finding, L2. Load-bearing for every layer above it, for the keel's
`logos/` and `algebra/` contracts (K1/K3), and for the standing question of why capability
has not moved.
---
## 0. The one-sentence finding
`packs.compiler._blend_feature_versors` — the function every cross-language and
morphological "nudge" in the system calls, at three sites, with three different declared
strengths — **ignores its strength argument and returns the target verbatim**. Nothing in
CORE is blended toward anything. Aligned words are *overwritten* by their partners, so the
three-language manifold ADR-0005/0015 designs as three charts on one semantic space is, in
the mounted configuration the runtime actually uses, **one chart with aliases**.
```python
def _blend_feature_versors(source, target, strength):
strength = max(0.0, min(1.0, float(strength)))
if strength <= 0.0:
return np.asarray(source, dtype=np.float32).copy()
return np.asarray(target, dtype=np.float32).copy() # ← any strength > 0
```
ADR-0015 states the requirement this violates twice over: aligned clauses must resonate
*"without flattening their distinctions"*, and *"cross-language alignment is a weighted
graph, **not** a translation table."* It is a translation table, applied destructively.
## 1. What it costs, measured
Instrument: `evals/logos/manifold_collapse.py`. Coordinates are compared **bit-exactly**
(`ndarray.tobytes()`) — there is no tolerance to tune, and no metric to argue about. Pinned
by `tests/test_manifold_collapse_floor.py` (registered in `smoke`).
| Configuration | surfaces | distinct coordinates | **lost** | groups |
|---|---|---|---|---|
| `en_minimal_v1` alone | 220 | 220 | **0** | 0 |
| `grc_logos_micro_v1` alone | 11 | 11 | **0** | 0 |
| `he_logos_micro_v1` alone | 9 | 8 | 1 | `אור`/`אוֹר` |
| **trilingual mounted** | **239** | **202** | **37** | **11** |
**Mounting the depth packs — the operation designed to *add* depth — removes 37 distinct
coordinates.** English alone is collision-free; English mounted with Hebrew and Greek is not.
The eleven collapsed groups, verbatim:
```
ask · how · question · what · when · where · which · who · why · ἐρωτάω
begin · beginning · origin · source · ראשית · ἀρχή
breath · spirit · πνεῦμα · רוח
create · image · κτίζω · ברא
light · φῶς · אוֹר · אור
read · receive · silence · λαμβάνω
say · speak · voice · λέγω
word · λόγος · דבר · דברים
answer · respond · ἀποκρίνομαι
truth · אמת · ἀλήθεια
life · חיים
```
Read the first line again. **Nine English question words occupy one coordinate.** In the
semantic ground the reader stands on, *who*, *why*, *when*, *where*, *how* and *which* are
the same point — and they are collapsed not by any English-side decision but because one
Greek verb, `ἐρωτάω`, shares their primary semantic domain and drags the whole group into
the multi-language branch. `read`, `receive` and `silence` are likewise one point.
**Attribution** (measured by disabling each site in turn):
| Site | lost coordinates | what it does |
|---|---|---|
| `_apply_mounted_primary_domain_resonance` (mount time, strength `0.40`) | **34** | overwrites *every member* of a multi-language primary-domain group with the English prototype |
| `_apply_alignment_corrections` (pack load, strength `weight × 0.10`) | 2 | overwrites the home token with the foreign token, last foreign pack wins |
| `_apply_morphology_cluster_corrections` (compile, strength `0.40`) | 1 | overwrites every same-root form with the cluster prototype |
The mount-time site is the dominant cause and carries a comment that named the open question
precisely — *"it does not yet isolate structural derivation (Hebrew/Greek morphology
operators) from this function's nudge"* — and pointed at `docs/handoff/ADR-0167-FOLLOWUPS.md`
§6, **a file that does not exist**. The isolation question is now answered: there is no
structural derivation left to isolate, because the 0.40 "blend factor" is a 1.00 replacement.
## 2. The inversion this produces
ADR-0005 assigns the roles: Hebrew as **depth anchor**, Greek as **relational depth**,
English as **articulation surface**. The mount-time prototype rule is
`next((surface for language, surface in surfaces if language == "en"), surfaces[0][1])`
**English is preferred as the prototype**, and every other language is replaced by it.
The design's dependency runs exactly backwards. The depth languages do not anchor English;
they are deleted into it. `דבר` is not *near* `word` in the mounted manifold — it **is**
`word`, bit for bit, and so is `λόγος`, and so is `דברים`.
At pack-load time the same function runs with the foreign packs in `sorted()` order, so
`he[דבר]` is first overwritten by `en[word]` and then by `grc[λόγος]`: **which language a
Hebrew token becomes is decided by the alphabetical order of pack ids.**
## 3. Four "resonance proofs" that pass because the compared quantities are identical
`docs/analysis/holonomy-resonance-proof-not-robust-2026-06-14.md` audited the *clause*-level
resonance and found it decoration. It explicitly deferred the token-level tests: *"whether
each is robust or another cherry-picked configuration is an open follow-up, not covered by
this finding."* That follow-up is now closed, and the answer is worse than cherry-picking:
| Test | Why it passes |
|---|---|
| `test_light_alignment_clusters_across_mounted_trilingual_field` | `cga_inner(light, אוֹר)` = `3.0220894813537598` = `cga_inner(light, light)`. The versors are the same array. |
| `test_triple_alignment_closer_than_other_triples` | same — aligned pairs are self-comparisons |
| `test_same_root_hebrew_forms_land_closer_than_unrelated_noun` | `דבר` and `דברים` are bit-identical after clustering |
| `test_structured_morphology_improves_same_root_hebrew_resonance` | asserts structured > unstructured for the same-root pair; structured makes them **identical**, so the "improvement" is total collapse |
The last one is the sharpest: a test named for an *improvement in resonance* is green
precisely because the distinction it should preserve was destroyed.
This is the repo's own disease definition met exactly — *"a test that passes under conditions
that bypass the obligation it nominally proves is decoration, not proof"* — and it is the
fourth independent instance this arc (CLAIMS.md staleness G-22, `DOMAIN_PACKS` G-23, the
hollow distinct-evidence guard in PR-12, and now the semantic ground itself).
## 4. The second defect: 63 of the 83 alignment edges are silently discarded
The audit charter recorded the alignment corpus as *"seed-scale: 11 edges… the ADR's
prescribed first cases, never grown beyond them."* **That is wrong, and the way it is wrong
is the finding.** Four packs carry `alignment.jsonl`:
| Pack | edges authored | edges that resolve | in serving? |
|---|---|---|---|
| `he_logos_micro_v1` | 11 | 11 (as overwrites) | secondary |
| `grc_logos_micro_v1` | 9 | 9 (as overwrites) | secondary |
| `he_core_cognition_v1` | **22** | **0** | **primary** (`chat/pack_grounding.py:57`) |
| `grc_logos_cognition_v1` | **41** | **0** | **primary** (`chat/pack_grounding.py:56`) |
| **total** | **83** | **20** | |
The corpus *was* grown — 7.5× beyond the seed, to 83 edges — and **76% of it is inert**.
The mechanism is four lines. `_infer_foreign_pack_ids` decides which foreign pack an edge
points into by splitting `target_id` on `"-"` and looking the first field up in a hardcoded
three-entry table:
```python
_PREFIX_TO_PACK = {"he": "he_logos_micro_v1", "grc": "grc_logos_micro_v1", "en": "en_minimal_v1"}
prefix = edge.target_id.split("-")[0]
```
`en-core-cog-001` has prefix `"en"`, so it resolves to `en_minimal_v1` — a pack with no such
entry id. The lookup misses, `_apply_alignment_corrections` hits `continue`, and the edge
vanishes without a warning, a counter, or a test. Entry ids are pack-local; the resolver is
global and frozen at three pack names, so **any pack beyond the original three is unreachable
by construction** — including the two that serving actually grounds Hebrew and Greek against.
Both branches of the pillar therefore fail, in opposite directions: the packs whose alignment
*works* destroy distinctions, and the packs serving actually uses have alignment that does
nothing at all. FA-1's work-order item 4 — *"grow-or-declare the alignment corpus"* — is
answered before it begins: it was grown, and the growth was never connected.
## 5. The third defect: `holonomy` does not close
Independent of the collapse, the object named `holonomy` is not one.
`algebra/holonomy.py` documents, in the module docstring and in the function docstring:
> *A prompt is encoded as the geometric holonomy of its forward+reverse versor walk.
> **The walk closes**… Forward walk: F = w1·…·wn · Reverse walk: R = (1alpha)·reverse(wn)·…·reverse(w1) · Holonomy: H = F · R*
The implementation computes `F` and returns it. There is no `R`. Commit `fca6216e`
("Stabilize holonomy accumulation", 2026-05-13) **deleted the reverse accumulation and kept
the docstring that describes it** — the original at `b80dd57a` did compute
`H = geometric_product(F, R)`. Consequences, measured:
* `alpha` is validated (`0.0 <= alpha <= 1.0`) and then **never read**. `holonomy_encode(v, alpha=0.0)`
and `holonomy_encode(v, alpha=1.0)` return bit-identical arrays. `core/physics/biography.py:94`
passes `alpha=alpha` into it — a caller steering a parameter that does nothing.
* A walk followed by its own reverse does not return to identity (scalar `164.6`, non-scalar
norm `4044.2`). A closed-loop transport must; an open path product need not, and this is one.
ADR-0015's validation gate is **closure**`holonomy(he) ≈ holonomy(grc) ≈ holonomy(en)`.
A quantity that never closes has no reason to be invariant across representations, so the
2026-06-14 negative result was not a surprising failure of the geometry: it is what this
implementation predicts. That doc's open question RQ2 — *"is the per-token `_position_rotor`
injection drowning the semantic signal in path-order geometry?"* — was aimed correctly and
could not see the deletion, because the docstring said the closure was there.
## 6. The cure was already in the algebra layer, one import away
A linear blend of two versors is not a versor — the Cl(4,1) versor group is not closed under
addition — and `VocabManifold.update()` correctly refuses non-versors (`residual > 1e-5`).
Substituting a naive lerp for the overwrite raises `ValueError: Word 'דברים': replacement
versor residual 3.68e-02 exceeds 1.0e-05` immediately. **The overwrite is what a lerp
degrades into once the guard rejects it.** The guard was right; the escape was wrong.
The correct operation is interpolation *on the group* — the geodesic from source to target in
Spin(4,1) — and `algebra/rotor.py` has implemented it since the algebra layer's first commit:
```python
blended = geometric_product(rotor_power(word_transition_rotor(source, target), strength), source)
```
Measured on `en[word] → en[light]`: unit residual stays at `~1e-7` for every `t` (three
orders of magnitude inside the manifold's tolerance), `t=0` returns the source exactly,
`t=1` the target exactly, and intermediate `t` genuinely interpolates.
So the deepest layer built the exact tool the layer above it needed, and the layer above
never called it. That is the Foundations Audit's thesis — *layers assuming connections that
were never made* — at the foundation, with both halves of the connection present and unjoined.
## 7. Why this is the answer to "why hasn't capability moved"
Every geometric experiment this project has run was run on this ground:
* the field-reasoner wedge (2026-06-04) — **decoration**,
* the relational-operator ablation (2026-07-19) — **identical to the symbolic baseline**,
* ADR-0252 §5 structure-mapping (2026-07-28) — **NO-GO at every attribute weight**,
* cross-language holonomy resonance (2026-06-14) — **anti-correlated**.
The convergent explanation recorded in the Perception Arc was *"wherever the geometric
operation is isomorphic to the arithmetic it replaces, it reproduces it exactly."* That is
true and insufficient. The measurement here adds the missing half: **the geometry had been
erased before the experiments started.** A fifth of the mounted vocabulary shares coordinates
with something else; the tokens that carry question type are one point; the depth languages
are aliases of English. No operator defined over that ground can distinguish what the ground
does not distinguish, so "geometry adds nothing" was the only available result.
This does **not** retroactively make those experiments positive — they were well-controlled
and their verdicts stand for the encodings they tested. It changes what they are evidence
*of*: they measured operators over a collapsed ground, not the value of geometric operators.
The reopening criterion in the foundations audit §4 — *"a domain where the geometric encoding
is not isomorphic to a trivial symbolic computation"* — is now joined by a second, stronger
one: **re-run on a ground that has not been flattened.**
## 8. Disposition
Not repaired here. `../core` is the quarry and the evidence source; L2 is rebuilt in the keel
(`coreai`, K3), where the corrected contract is admitted with these measurements as its
provenance. Repairing the compiler in place would move every versor in the system, and the
blast radius includes four tests whose current green depends on the collapse — those are
**decoration to be replaced with real proofs**, not regressions to be preserved, and doing
that properly is the keel's K3 work, not a patch here.
What lands here instead:
1. **The instrument**`evals/logos/manifold_collapse.py`, deterministic, bit-exact.
2. **The pin**`tests/test_manifold_collapse_floor.py` in `smoke`, both directions: the
collapse may not widen silently, and it may not shrink silently either. Two sabotages
observed red (a real interpolation → `ValueError` from the versor guard; disabling the
mount-time site → `37 → 3`, which is also how the 34/2/1 attribution above was measured).
3. **The four decoration tests are left standing and named here.** They are not weakened in
this commit: a test that is green for the wrong reason and a test that is red are different
signals, and the honest move is the one the 2026-06-14 doc made — record exactly why each
is green, so replacing it is a decision someone makes with the evidence in hand.
## 9. What FA-1 asks next — pre-registered separately
Whether a *repaired* ground discriminates meaning is a question with a criterion, and the
criterion is committed before the run (`docs/analysis/fa1-holonomy-gate-preregistration.md`),
the way ADR-0252 §5 was decided. The mechanism is proven; the capability is not claimed.
**Related:** `docs/analysis/holonomy-resonance-proof-not-robust-2026-06-14.md` (the clause-level
negative this extends) · `docs/plans/2026-07-28-foundations-audit.md` (FA-1) ·
`docs/assessment/30-gap-register.md` (G-25) · `coreai/docs/atlas/00-atlas-overview.md` (K1/K3).

View file

@ -201,7 +201,9 @@ Own `use_salience`, the two underived constants, the self-narrowing budget feedb
**The mechanism, and why it is G-7's story again:** one commit updated the lane, its verifier and its test, and missed one downstream artifact. The pin that guards that artifact — `tests/test_claims_md_is_current.py`**exists and is an orphan in no curated suite**, so nothing surfaced it until this arc ran the full tree once. Registered on the gate as part of the fix.
- **G-21 · The math reader decides 1.0% of `holdout_dev/v1`** *(new, 2026-07-28)* — measured while building the §5 corpus: `parse_and_solve` returns a selected graph for **5 of 500** held-out cases, all carrying the same relational skeleton (`compare_multiplicative`); on the public lane, 24/150. This is a sharper measurement of the comprehension frontier than G-3's construction count, on the corpus the project already treats as its held-out standard, and it is why ADR-0252 §5.1's four-structure corpus is not extractable today. Distinct from G-3 (which counts *constructions* the general reader admits); this counts *cases decided* on a standing eval corpus. **Authority:** the widening program (G-3) + a ruling on whether holdout decision-rate becomes a tracked lane metric.
- **G-20 · The `refusal_reason` materialisation** — typed refusal evidence exists and is discarded at the public `str` boundary; the plumbing for materialisation already landed. Cross-listed as H-3. **Authority:** small ADR (anticipated by the ADR-0024 chain).
- **G-25 · CORE-Logos — the designed foundation pillar is seeded, not built** *(new, 2026-07-28 — Tier A; FA-1 of the Foundations Audit)* — ADR-0005/0015 make cross-language holonomy resonance **the validation gate of meaning** (*"holonomy(hebrew) ≈ holonomy(greek) ≈ holonomy(english)… This is the CORE-Logos proof"*), with HE roots as depth anchors and alignment-as-resonance. Measured at `339bfd37`: the alignment corpus is **11 edges / 9 HE morphology rows** (the ADR's own John1:1/Gen1:1 *first cases*, never grown); the serving-path role is an HE-morphology **veto that no-ops on English** (`pipeline.py:544`); the recall bridge is `allow_cross_language_recall`**mystery ON-flag #1 from the flag register, now identified as the pillar's own switch**, gating `recall_top_k=3 vs 0` with no recorded rationale; the `hebrew_greek_textual_reasoning` domain is registered and produced **zero** curriculum bands; and **no path consults cross-language holonomy as a gate** — template match became the de-facto criterion of meaning instead. Root folding into vectors (`triliteral:` tokens) and live holonomy machinery (`core/physics/digest.py`) are real, so the verdict is **architected, seeded exactly as designed, wired at three mutually-unaware points, load-bearing nowhere**. Everything above L2 inherits this: comprehension, articulation, and learning currently operate over an ungrounded semantic space. **Authority:** FA-1 work order — the designed-contract map, the pre-registered holonomy-gate experiment, the flag ruling, and grow-or-declare on the alignment corpus.
- **G-25 · CORE-Logos — the designed foundation pillar is seeded, not built** *(new, 2026-07-28 — Tier A; FA-1 of the Foundations Audit)* — ADR-0005/0015 make cross-language holonomy resonance **the validation gate of meaning** (*"holonomy(hebrew) ≈ holonomy(greek) ≈ holonomy(english)… This is the CORE-Logos proof"*), with HE roots as depth anchors and alignment-as-resonance. Measured at `339bfd37`: the alignment corpus is **11 edges / 9 HE morphology rows** (the ADR's own John1:1/Gen1:1 *first cases*, never grown); the serving-path role is an HE-morphology **veto that no-ops on English** (`pipeline.py:544`); the recall bridge is `allow_cross_language_recall`**mystery ON-flag #1 from the flag register, now identified as the pillar's own switch**, gating `recall_top_k=3 vs 0` with no recorded rationale; the `hebrew_greek_textual_reasoning` domain is registered and produced **zero** curriculum bands; and **no path consults cross-language holonomy as a gate** — template match became the de-facto criterion of meaning instead. Root folding into vectors (`triliteral:` tokens) is real, so the first read was **architected, seeded exactly as designed, wired at three mutually-unaware points, load-bearing nowhere**.
**UPGRADED 2026-07-28 by measurement at `472fc0a8` — the pillar is not under-built, it is destroyed at compile time.** Two claims in the paragraph above are struck: the corpus is **83 edges, not 11** (63 of them resolve to nothing, including all edges of the two packs serving actually grounds HE/GRC against), and the "live holonomy machinery" is not in `core/physics/digest.py` (a field digest cycle that passes the value through) — it is `algebra/holonomy.py`, whose reverse walk was **deleted at `fca6216e` with the docstring describing it left in place**, so the object never closes and `alpha` is inert while a caller passes it. The dominant defect: **`packs.compiler._blend_feature_versors` ignores its strength argument and returns the target verbatim**, so all three "nudges" are total overwrites — mounting the depth packs **removes 37 distinct coordinates** (239 surfaces → 202), collapsing nine English question words (`ask/question/what/who/where/how/why/when/which`) onto one point and making `דבר`, `λόγος`, `דברים` and `word` bit-identical. English alone is collision-free, so the loss is *created by the mount*. Four token-level "resonance proofs" are green because the compared arrays are the same array. **The cure was already one layer down and never called:** `algebra/rotor.py` has shipped `rotor_power` + `word_transition_rotor` — the group geodesic — since the algebra layer's first commit; a naive lerp leaves the versor group and `VocabManifold.update()` correctly refuses it, which is what the overwrite was an escape from. **Instrumented:** `evals/logos/manifold_collapse.py` + `tests/test_manifold_collapse_floor.py` (smoke, both directions, bit-exact). **Evidence:** `docs/analysis/logos-substrate-collapse-2026-07-28.md`. This is the missing half of every "geometry adds nothing" verdict: no operator can distinguish what its ground does not distinguish. **Authority:** repair is admitted to the keel (K1/K3), not patched here; the pre-registered gate experiment is `docs/analysis/fa1-holonomy-gate-preregistration.md`.
- **G-24 · The perception layer inverts its own ratified design, and no served byte is geometric** *(new, 2026-07-28 — Tier A; the arc-closing diagnosis)* — Measured at `0e1be8be`: the entire serving path (`meaning_graph/reader.py` 490 lines, `proof_chain/` 3,916, both surface composers) contains **zero** geometric references — comprehension is a template parser feeding an ROBDD engine. **ADR-0252 §2 stage 1 prescribes** *"containment / transfer / accumulation / comparison … **Not surface-slot regexes**"* — the implementation is surface-slot regexes over categorical/member/ordering/propositional. The corpus confirms the inversion independently: on `holdout_dev/v1`, **read rate 1.28%** (93.16% `no_template_match`), with possession (18.4% of sentences), transfer verbs (14.6%) and quantity comparison (10.0%) unrepresented while `if/then` (0.1% of sentences) holds 21% of the inventory. Geometry participates in exactly two cognitive mechanisms — salience→attention (bypassed by every licensed lane) and `relation_compiler`'s Hamiltonian ground-state solver (off-serving, fed by a 1.0% math reader) — both stranded behind enumerative front ends that cannot generalize by construction, which is why capability lifts have arrived only as overfit slivers. **Not packs** (0.67%), **not wiring** (failures precede every flag). Full findings F-A…F-E and the remediation plan: `docs/plans/2026-07-28-perception-arc.md`. **AMENDED same day:** F-E's "never tested" was wrong — the operator branch has **three negative results** (field wedge 2026-06-04 → C3 decoration; relational operator ablation 2026-07-19 → identical to baseline; §5 → NO-GO), all found only by import-graph census (373 of 666 modules unreachable from serving). Convergent mechanism: geometry isomorphic to the arithmetic reproduces it exactly and adds nothing; the binding constraint in all three was the reader. **Authority:** the Foundations Audit (`docs/plans/2026-07-28-foundations-audit.md`), which now precedes; reopening criterion recorded in its §4.

View file

@ -26,21 +26,33 @@ The suspicion that CORE-Logos is not integrated as designed was tested against t
| Layer | State | Evidence |
|---|---|---|
| Substrate grounding | **Real** | `packs/compiler.py` folds HE roots into vectors as `triliteral:` tokens — logos shapes the geometry at compile time |
| Holonomy machinery | **Live** | `core/physics/digest.py`, referenced from `core/cognition/pipeline.py` |
| Alignment data | **Seed-scale: 11 edges, 9 HE morphology rows** | `he_logos_micro_v1/alignment.jsonl` — evidence_ids `John1:1, Gen1:1`, exactly ADR-0015's prescribed *first* cases, never grown beyond them |
| Holonomy machinery | ~~**Live**~~**present but not a holonomy** | ~~`core/physics/digest.py`~~ — that module is a field *digest cycle* that passes `holonomy` through untouched. The encoder is `algebra/holonomy.py`, and its reverse walk was deleted at `fca6216e` with the docstring describing it left in place. See the FA-1 verdict below. |
| Alignment data | ~~**Seed-scale: 11 edges**~~**83 edges authored, 20 resolve** | Four packs carry `alignment.jsonl`. The two the serving path actually grounds HE/GRC against (`he_core_cognition_v1` 22, `grc_logos_cognition_v1` 41) contribute **zero** — a hardcoded three-entry prefix map drops every one of their edges. The corpus was grown 7.5×; the growth was never connected. |
| EN lexicon tagging | Present | 91 entries carrying `logos.core` semantic domains |
| Serving-path role | **Veto only, no-ops on English** | `pipeline.py:544-583``evaluate_logos_on_text` can force a refusal against observed HE plural morphology; *"English-only turns with no HE surface → no-op"* |
| Recall bridge | **ON, undocumented** | `allow_cross_language_recall` — one of the two default-ON flags with no recorded rationale (flag register §1) — gates `recall_top_k=3 vs 0`. **The pillar's own switch was mystery flag #1** |
| Curriculum | Registered, bandless | `hebrew_greek_textual_reasoning` in `DOMAIN_PACKS` with corpora; produced **zero** curriculum bands at the PR-14 measurement |
| Validation-gate role | **Never assumed** | ADR-0015 §"Establishes holonomy-level resonance as the validation gate" — no serving or licensing path consults cross-language holonomy; template match became the de-facto gate instead |
**FA-1 verdict: the pillar is architected and seeded exactly as designed, then left at seed scale, wired at three mutually-unaware points (vector folding · HE veto · recall top-k), and load-bearing nowhere.** The same disease named in the Perception Arc §2b — *transition windows that never close* — but at the foundation, which is why everything above (comprehension, articulation, contemplation, learning) could at best be correct *about an ungrounded semantic space*. Registered as **G-25**.
**FA-1 verdict (superseded by measurement, 2026-07-28 — the original read is struck below).** ~~The pillar is architected and seeded exactly as designed, then left at seed scale, wired at three mutually-unaware points, and load-bearing nowhere.~~
**FA-1 verdict, measured:** the pillar is architected as designed, **grown further than this charter believed**, and then *destroyed at compile time*. Full evidence: **`docs/analysis/logos-substrate-collapse-2026-07-28.md`**. Five defects, all exact:
1. **`packs.compiler._blend_feature_versors` ignores its strength argument and returns the target verbatim.** Every "nudge" in the system — cross-language alignment (`0.10`), morphology clustering (`0.40`), mount-time domain resonance (`0.40`) — is a **total overwrite**. ADR-0015's *"a weighted graph, not a translation table"* and *"without flattening their distinctions"* are both violated bit-exactly.
2. **Mounting the depth packs removes 37 distinct coordinates** (239 surfaces → 202 points). English alone: 220/220, collision-free. Nine English question words — `ask, question, what, who, where, how, why, when, which` — land on **one** coordinate, dragged there by a single Greek verb sharing their primary domain. `דבר`, `λόγος`, `דברים` and `word` are one point.
3. **The roles invert.** English is chosen as the mount-time prototype, so the depth languages are not anchors — they are deleted into the articulation surface. At pack-load time, *which* language a Hebrew token becomes is decided by `sorted()` order of pack ids.
4. **63 of 83 alignment edges resolve to nothing** — the two packs serving actually uses contribute zero, because `_infer_foreign_pack_ids` maps entry-id prefixes through a table hardcoded to the original three packs.
5. **`algebra.holonomy.holonomy_encode` never closes.** The reverse walk was deleted at `fca6216e`; the docstring that describes it stayed. `alpha` is validated and never read (`alpha=0.0` and `alpha=1.0` return bit-identical arrays) while `core/physics/biography.py:94` passes it. A walk followed by its reverse does not return to identity.
**And the cure was already built one layer down.** A linear blend leaves the versor group and `VocabManifold.update()` correctly refuses it — the overwrite is what a lerp degrades into once the guard bites. The correct operation is the group geodesic, and `algebra/rotor.py` has shipped `rotor_power` + `word_transition_rotor` since the algebra layer's first commit. It was never called. That is this audit's thesis — *layers assuming connections that were never made* — with **both halves present and unjoined**.
This is why everything above L2 could at best be correct about an ungrounded semantic space, and it is the missing half of the "geometry adds nothing" verdicts: no operator can distinguish what its ground does not distinguish. Registered as **G-25**.
**FA-1's work order (first in the audit):**
1. **Map the designed logos contract completely** — every ADR-0005/0015 obligation as a row: obligation → implementing site → live/dark → seam partner. No prose without a site.
2. **Decide the holonomy-gate question the way §5 was decided** — pre-registered: on the existing 11 aligned cases plus a small grown set, does cross-language holonomy closure discriminate meaning-preserving from meaning-breaking articulation (word-order sensitivity included, per the ADR's own test)? This is the *designed* validation gate; it has never been measured. Unlike the three failed operator-arithmetic experiments (see Perception Arc Phase 1 correction), this tests the geometry on the job the design actually assigned it — **resonance across representations**, not re-deriving arithmetic.
3. **Rule `allow_cross_language_recall`** — the pillar's switch gets its recorded rationale or gets turned off; measured either way.
4. **Grow-or-declare the alignment corpus** — 11 edges is a proof of concept; either the growth program is scheduled with an owner, or the pillar is formally re-scoped and every design document claiming it is amended. No third state.
2. **Decide the holonomy-gate question the way §5 was decided** — pre-registered, criterion committed before the run. ~~This is the designed validation gate; it has never been measured.~~ **CORRECTION (2026-07-28): it has been measured, and it came back negative.** `docs/analysis/holonomy-resonance-proof-not-robust-2026-06-14.md` measured the clause-level resonance and found it does not separate aligned from misaligned — under the engine's own `holonomy_similarity` it **anti-correlates** (aligned mean 87.2, misaligned +122.6). Two tests already pin that failure as honest tripwires. Writing "never measured" was the same error the Perception Arc §4 correction exists to prevent, made in the document that records that correction — the fourth instance of this pattern in the arc, and the reason the census-before-claim rule now applies to *plans*, not only to code. What FA-1 adds is not a first measurement but the **first measurement on a ground that has not been flattened, with a closed loop** — both preconditions were absent in June, and the negative is uninterpretable without them.
3. **Rule `allow_cross_language_recall`** — the pillar's switch gets its recorded rationale or gets turned off; measured either way. *(Note the flag now gates recall across a manifold in which the cross-language distinctions it retrieves over do not exist — measure it on the repaired ground or the number means nothing.)*
4. ~~**Grow-or-declare the alignment corpus**~~**ANSWERED by measurement, not owed as work.** The corpus was grown to **83 edges** across four packs. **63 of them resolve to nothing**, including all 63 belonging to the two packs the serving path actually grounds Hebrew and Greek against. The item was never "grow it"; it was "connect what was already grown." Carried to the keel as a K3 contract obligation: an alignment edge that resolves to no pack is a **load error**, not a silent `continue`.
## 2. The layer stack and the articulation requirement

1
evals/logos/__init__.py Normal file
View file

@ -0,0 +1 @@
"""Logos-layer measurement lane — the semantic-ground instruments (FA-1, G-25)."""

View file

@ -0,0 +1,112 @@
"""The manifold-collapse instrument — how many distinct meanings the ground still holds.
Foundations Audit FA-1 (L2, the logos layer / G-25).
ADR-0015 states the requirement the three-language design must satisfy: aligned
clauses resonate *"without flattening their distinctions"*, and cross-language
alignment is *"a weighted graph, **not** a translation table"*. This module
measures whether the compiled manifold honours that by the bluntest possible
test, which is also the exact one: **do two surfaces occupy the same coordinate?**
Coordinates are compared bit-exactly (``ndarray.tobytes()``). There is no
tolerance to tune and no metric to argue about: either two words are the same
point in the semantic ground or they are not. A tolerance would have hidden this
finding the collisions measured here are exact equality, not near-equality.
The instrument reports both the **mounted** configuration (what the runtime
actually grounds against) and the **per-pack controls**. The controls are what
make it a diagnosis instead of a number: if English alone is collision-free and
English *mounted with the depth packs* is not, then mounting Hebrew and Greek
the operation designed to add depth is what removes distinctions.
Deliberately narrow: this measures the compiled ground only. Whether a *corrected*
compiler restores discrimination is a separate, pre-registered experiment
(``docs/analysis/logos-substrate-collapse-2026-07-28.md`` §"What FA-1 asks next").
"""
from __future__ import annotations
import json
from collections import defaultdict
from dataclasses import dataclass
from packs import load_pack
from packs.compiler import load_mounted_packs
#: The trilingual mount is the CORE-Logos configuration of ADR-0005/0015:
#: English as articulation surface, Hebrew as depth anchor, Greek as relational depth.
TRILINGUAL: tuple[str, ...] = ("en_minimal_v1", "he_logos_micro_v1", "grc_logos_micro_v1")
@dataclass(frozen=True)
class CollapseReport:
"""Exact, deterministic census of coordinate collisions in a compiled ground."""
config: tuple[str, ...]
surfaces: int
distinct_coordinates: int
#: Each group is the sorted tuple of surfaces sharing one bit-identical coordinate.
groups: tuple[tuple[str, ...], ...]
@property
def surfaces_in_collision(self) -> int:
return sum(len(group) for group in self.groups)
@property
def coordinates_lost(self) -> int:
"""Distinctions the ground can no longer make: surfaces distinct coordinates."""
return self.surfaces - self.distinct_coordinates
def as_dict(self) -> dict:
return {
"config": list(self.config),
"surfaces": self.surfaces,
"distinct_coordinates": self.distinct_coordinates,
"coordinates_lost": self.coordinates_lost,
"collision_groups": len(self.groups),
"surfaces_in_collision": self.surfaces_in_collision,
"groups": [list(group) for group in self.groups],
}
def _census(manifold) -> tuple[int, int, tuple[tuple[str, ...], ...]]:
by_coordinate: dict[bytes, list[str]] = defaultdict(list)
for index in range(len(manifold)):
by_coordinate[manifold.get_versor_at(index).tobytes()].append(manifold.get_word_at(index))
groups = tuple(
sorted(
(tuple(sorted(surfaces)) for surfaces in by_coordinate.values() if len(surfaces) > 1),
key=lambda group: (-len(group), group),
)
)
return len(manifold), len(by_coordinate), groups
def measure_mounted(pack_ids: tuple[str, ...] = TRILINGUAL) -> CollapseReport:
"""Census the mounted union — the ground the runtime grounds turns against."""
surfaces, distinct, groups = _census(load_mounted_packs(pack_ids))
return CollapseReport(config=pack_ids, surfaces=surfaces, distinct_coordinates=distinct, groups=groups)
def measure_pack(pack_id: str) -> CollapseReport:
"""Census one pack compiled alone — the control that isolates the mount-time site."""
_, manifold = load_pack(pack_id)
surfaces, distinct, groups = _census(manifold)
return CollapseReport(config=(pack_id,), surfaces=surfaces, distinct_coordinates=distinct, groups=groups)
def measure_all(pack_ids: tuple[str, ...] = TRILINGUAL) -> dict[str, CollapseReport]:
"""The mounted census plus every per-pack control, keyed for direct comparison."""
reports = {"mounted": measure_mounted(pack_ids)}
for pack_id in pack_ids:
reports[pack_id] = measure_pack(pack_id)
return reports
def main() -> int:
print(json.dumps({key: report.as_dict() for key, report in measure_all().items()}, indent=2, ensure_ascii=False))
return 0
if __name__ == "__main__":
raise SystemExit(main())

View file

@ -0,0 +1,107 @@
"""FA-1 — the semantic ground's discrimination, pinned as an instrument (G-25, L2).
Measured 2026-07-28 at `472fc0a8`: mounting the depth packs onto English the
operation ADR-0005/0015 designs to *add* depth **removes 37 distinct coordinates
from the manifold**, collapsing 48 surfaces into 11 shared points. English alone
is collision-free (220/220); Greek alone is collision-free (11/11). The damage is
created by the mount, and it is not confined to the depth languages: nine English
surfaces `ask, question, what, who, where, how, why, when, which` land on one
coordinate because a single Greek verb shares their primary semantic domain.
ADR-0015 requires resonance *"without flattening their distinctions"* and states
that cross-language alignment is *"a weighted graph, **not** a translation table"*.
Both are violated, exactly and bit-identically. Root cause and the four decoration
proofs it silently green-lit: `docs/analysis/logos-substrate-collapse-2026-07-28.md`.
This pin does the same job the read-rate floor does for perception it turns a
finding into an instrument, in both directions:
* the collapse may not silently **widen** a compiler change that flattens more
of the ground fails the gate;
* the recorded numbers may not silently **shrink** either. Repair is the goal, and
repair is a reviewed decision with a diff: when the ground stops collapsing,
these constants move in the same commit that fixed it.
The English control is the load-bearing half. It is what makes this a *diagnosis*
(mounting causes the loss) rather than an observation (the ground has collisions),
and it is the reason the numbers above can be attributed to one site.
"""
from __future__ import annotations
from evals.logos.manifold_collapse import TRILINGUAL, measure_all
#: Trilingual mount, measured 2026-07-28 at `472fc0a8`.
RECORDED_SURFACES = 239
RECORDED_DISTINCT = 202
RECORDED_LOST = 37
RECORDED_GROUPS = 11
RECORDED_IN_COLLISION = 48
#: The single most damaging group: the entire WH-word set, one coordinate.
#: Pinned verbatim because the *shape* of the loss is the finding — a reader over
#: this ground cannot geometrically distinguish "who" from "why" from "when".
WH_COLLAPSE = ("ask", "how", "question", "what", "when", "where", "which", "who", "why", "ἐρωτάω")
def test_english_alone_is_collision_free() -> None:
"""The control. If this fails, the diagnosis below is misattributed."""
reports = measure_all()
english = reports["en_minimal_v1"]
assert english.surfaces == english.distinct_coordinates, (
f"en_minimal_v1 compiled ALONE now has {english.coordinates_lost} lost coordinates "
f"({english.groups}) — the collapse is no longer created purely by the mount, so "
"the attribution in docs/analysis/logos-substrate-collapse-2026-07-28.md must be redone"
)
greek = reports["grc_logos_micro_v1"]
assert greek.surfaces == greek.distinct_coordinates, (
"grc_logos_micro_v1 compiled alone now collides — re-attribute before trusting the mount numbers"
)
def test_the_mount_destroys_distinctions_it_was_designed_to_add() -> None:
"""The finding, pinned in both directions. Good news still needs a diff."""
mounted = measure_all()["mounted"]
assert mounted.config == TRILINGUAL
assert mounted.surfaces == RECORDED_SURFACES, (
f"mounted surface count moved: {mounted.surfaces} vs {RECORDED_SURFACES} — the packs "
"changed shape; this pin measures the compiler, not the corpus. Re-baseline deliberately."
)
assert mounted.coordinates_lost == RECORDED_LOST, (
f"MANIFOLD COLLAPSE MOVED: {mounted.coordinates_lost} coordinates lost vs "
f"{RECORDED_LOST} recorded. If it grew, a compiler change flattened more of the "
"semantic ground. If it shrank, the repair landed — update these constants in the "
"same commit as the fix, and record the new numbers in the analysis doc."
)
assert mounted.distinct_coordinates == RECORDED_DISTINCT
assert len(mounted.groups) == RECORDED_GROUPS
assert mounted.surfaces_in_collision == RECORDED_IN_COLLISION
def test_the_wh_words_share_one_coordinate() -> None:
"""The damage is not confined to the depth languages — English loses too.
Nine English question words occupy one point because `ἐρωτάω` shares their
primary semantic domain and the mount-time nudge overwrites every member of a
multi-language domain group with the English prototype. This is the concrete
reason a reader over this ground cannot tell a *who* question from a *why* one.
"""
mounted = measure_all()["mounted"]
assert WH_COLLAPSE in mounted.groups, (
"the WH-word collapse changed shape. If it is gone, the ground gained back the "
"single most load-bearing distinction it had lost — say so in the analysis doc and "
f"update this pin. Current groups: {mounted.groups}"
)
def test_the_instrument_can_report_absence() -> None:
"""A collision detector that cannot report zero would make every number above meaningless."""
reports = measure_all()
assert reports["en_minimal_v1"].groups == (), "the control must be able to come back empty"
assert reports["mounted"].groups, "…and the instrument must still be able to come back non-empty"
mounted = reports["mounted"]
assert all(len(group) > 1 for group in mounted.groups), "a 'collision' of one is a counting bug"
assert mounted.coordinates_lost == sum(len(group) - 1 for group in mounted.groups), (
"lost coordinates must equal the sum of (group size 1) — otherwise the census "
"is double-counting or dropping surfaces"
)