# RESULT — Campaign100 027 roundtrip-attractors

**Tier: T3-exploratory.** Verdict: **★ CLEAN NEGATIVE on the "attractor consolidation"
hypothesis (certified, all gates pass)** — the SONAR autoencoder round-trip is a
per-sentence near-identity map with ~2000 DISTINCT fixed points, not a dynamical system that
funnels real sentences toward a small set of generic "attractor" sentences.

*(Numbering: this is the TRUE MANIFEST row 027. The earlier `027-local-id-field` folder
implemented row 031 and is separately DONE. Folder here = `027-roundtrip-attractors`,
tmux `c100_027b`.)*

## What ran
- **Seeds:** 2000 real sentences — 021's frozen 1500-sentence corpus (cpool = nickypro/sonar-sae
  = C4 real_parascope family, clean-filtered, SPM-length bins {8-15,16-25,26-40}) as ids 0–1499,
  topped up to 2000 (ids 1500–1999) with the next clean cpool candidates under the same
  permutation (PER_BIN 667/667/666), seed 20210802.
- **Iteration:** `text_0=seed`, `z_0=encode(text_0)`; `text_n=decode_greedy(z_{n-1})`
  (beam_size=1, 021 canonical path), `z_n=encode(text_n)`, up to N=30 with EXACT early-stop
  on first text repetition (deterministic map ⇒ first exact repeat fixes the whole future;
  period 1=fixed point, 2–5=short cycle, >5=long, none=wandering). GPU0/CVD=0, night8 venv.
  Full run 84 s (all trajectories settled by step 6).
- **Analysis (local, CPU):** convergence distribution, attractor characterization
  (length / gpt2-perplexity / type-token ratio), basin consolidation (exact-text dedup +
  cosine union-find thr .9/.95), 15 seed→attractor examples, cos(z_30,z_0).
- **Semantic drift:** 200-seed stratified subsample, LOCAL codex NEUTRAL 3-way judge
  (faithful / meaning-changed / garbled — no attack vocabulary), 0 parse failures.

## Headline numbers
| quantity | value |
|---|---|
| fixed points | **1997 / 2000 (99.85%)** |
| short cycles (period 2) | 3 |
| long cycles / wandering | **0 / 0** |
| reach fixed-point-or-cycle by N=30 | 100% |
| steps-to-fixed-point | **median 0**, mean 0.50, max 5 (hist: 0→1146, 1→725, 2→100, 3→22, 4→3, 5→1) |
| mean cos(z_30, z_0) | 0.9913 (median **1.0** — half the seeds never move) |
| **distinct attractor texts** | **2000 / 2000 (unique_ratio = 1.0)** |
| cosine clusters (union-find thr 0.9 / 0.95) | 1997 / 1999 |
| seed vs attractor word-length | 14.45 → 14.56 (attractors NOT shorter; 6.7% shorter, 9.9% longer) |
| seed vs attractor gpt2 ppl (median) | 28.4 → 30.1 (attractors slightly HIGHER perplexity) |
| seed vs attractor TTR | 0.9497 → 0.9472 (equal) |
| neutral judge on 200-sub (seed vs attractor) | **faithful 95% / meaning-changed 5% / garbled 0%** |

## Interpretation
The round-trip does **not** behave like a contracting dynamical system with shared basins.
Instead: 57.3% of seeds are ALREADY fixed points (`decode(encode(seed))==seed` exactly, the
021 exact-reconstruction rate), and another 36.3% stabilize after exactly ONE more step — at
their own greedy reconstruction — and then stay there. The map is a **per-sentence
near-identity with a fixed point at (or one hop from) each seed**. Every one of the 2000
attractors is a distinct sentence, and cosine clustering barely merges any (1997 clusters at
cos≥0.9). There is **no generic sentence the AE rounds toward** and no basin consolidation.
Attractors are not shorter, not lower-perplexity, and not more lexically generic than seeds —
if anything marginally longer / higher-perplexity. Meaning is almost entirely preserved
across iteration (95% faithful); the 5% meaning-changed cases are the same 021-style
single-content-word substitutions (e.g. "crinkling"→"grinding", "personnel file"→"personal
file", "boundaries"→"limits", "cheeky grin"→"proud smile"), which appear at step 1 and then
persist as the fixed point.

The **3 period-2 cycles** are the only non-trivial dynamics, and even they are cosmetic
oscillations between two near-synonymous paraphrases (e.g. "…were not merely recognized." ↔
"…were not just recognized."; "naturalist habitats" ↔ "naturalistic habitats"). No cycle
changes propositional content beyond a paraphrase-level wobble.

This complements the fabrication line (021/023/025): iterating the round-trip does NOT
amplify fabrication or collapse sentences into a hallucinated prior — it is stable and
meaning-preserving. It also complements the local-ID result (row 031): the manifold is
inhomogeneous in dimension, but the encode∘decode map is nonetheless near-identity everywhere
we sampled real sentences.

## Predictions (frozen in PREREG_LITE) → outcomes
| pred | statement | P | outcome | sq err |
|---|---|---|---|---|
| a | >50% of trajectories reach a fixed point by N=30 | 0.70 | **TRUE** (99.85%) | 0.090 |
| b | median steps-to-fixed-point ≤ 5 | 0.75 | **TRUE** (0) | 0.0625 |
| c | #distinct attractors < 25% of #seeds (strong consolidation) | 0.45 | **FALSE** (100% distinct — opposite) | 0.2025 |
| d | fixed points on average SHORTER than seeds | 0.60 | **FALSE** (+0.11 words, only 6.7% shorter) | 0.360 |
| e | >40% of fixed points meaning-changed vs seed | 0.35 | **FALSE** (5%) | 0.1225 |

**Brier = 0.1675.** The convergence predictions (a,b) were right; the "interesting dynamics"
predictions (c,d,e) were all wrong in the same direction — we over-anticipated a consolidating
attractor structure that does not exist. (d) was the biggest miss.

## Gates / sanity checks
- **G1 determinism — PASS:** step-1 greedy round-trip matches 021's stored greedy
  reconstruction on **1499/1500 = 0.9993** shared seeds (1 mismatch = a long-bin edge case).
- **Cosine well-defined — PASS:** all 8028 recorded cosines finite, ∈ [0.086, 1.0].
- **G2 fixed-point sanity — PASS:** independently re-ran `decode(encode(fixed_text))` for 3
  fixed points (incl. a step-2 stabilizer `…the simple things".`); all 3 reproduced themselves
  exactly.
- **G3 judge — PASS:** 0 parse failures on 200 pairs; obvious-faithful smoke controls 6/6
  correct; label distribution (95/5/0) sane.

## Limitations
- **Greedy decoding only** (beam_size=1). Stochastic decoders (nucleus/temperature) would make
  the map non-deterministic and could induce wandering/larger cycles — the "no wandering"
  result is specific to the deterministic greedy round-trip. (026 showed temperature is the
  fidelity cliff; a sampled-decoder attractor rerun is the natural follow-up.)
- One corpus (clean C4-family English), single judge (codex, lenient on fragments), English/SONAR only.
- Perplexity via gpt2 (indicative small-LM proxy, not calibrated).
- steps-to-fixed-point is dominated by the 021 exact-reconstruction rate, so it partly re-measures 021.

## Deliverables / artifacts
- `PREREG_LITE.md` (frozen predictions + neutral rubric), `src/{iterate.py,analyze.py,judge_neutral.py,run_027.sh}`
- `out/{trajectories.json, attractors.json, attractor_z.npy, z0.npy, ppl.json, meta.json, results.json, labels_neutral.json, run.log}`
- **`out/attractors.json` + `out/attractor_z.npy` + `out/z0.npy` saved for MANIFEST row 028
  (attractors-vs-atoms):** per-seed attractor text + representative z (z_index → row in
  attractor_z.npy), cycle members listed for the 3 cyclic seeds. Since attractors ≈ seeds,
  028 can equally use z0.npy.

## Follow-up worth funding? 
**Weak-Y.** The deterministic-greedy result is clean and mostly closes the question (no
attractor consolidation). The one open thread: **sampled-decoder round-trip** — does temperature
>0 break the near-identity into genuine wandering / drift toward a prior? That is the only way
this map would produce interesting attractors, and it connects directly to 026's temperature
cliff and 024's LM-prior findings.
