# Experiment 006 — methods

## Held constant (identical to Experiments 000–005)

| | |
|---|---|
| base model | `Qwen/Qwen3-0.6B` @ `c1899de289a04d12100db370d81485cdf75e47ca` |
| device | jetson-server, CUDA, bfloat16, `attn_implementation=eager` |
| tokenizer | the model's own, unmodified |
| generation | greedy, 64 new tokens thinking-off, 1024 thinking-on |
| world | `world_seed1337.json` — 12 chains, `body → element → radiation`, 6 radiations |
| training data | `train_facts.jsonl`, **exactly** the existing 144 individual-fact examples |
| recall / composition / control | 48 / 24 / 12, unchanged |
| parser | `split_thinking` + strict `grade_entity` |
| seed | 1337 |
| optimiser | AdamW, lr 2e-4, batch 1, grad-accum 2, seq 256, gradient checkpointing |
| architecture | 128 slots, q/k 128, v 512, layer 18, single insertion point |

**Nothing was added to training**: no two-hop answers, no control examples, no
slot labels, no address supervision, no new world, no negative retrieval
examples. Recorded in the training log as
`composed_examples_in_training: 0`, `control_examples_in_training: 0`.

## Changed — the anti-collapse recipe only

Fixed and written down in `anti_collapse_recipe.md` **before** the run, and not
touched afterwards:

1. **Readout init** `N(0, 1e-3)` instead of zeros.
2. **Temperature** annealed linearly `3.0 → 1.0` over epochs 1–15, then 1.0.
3. **Slot-utilisation hinge** `λ · relu(H_target − H(usage_ema))²`,
   `λ = 0.1`, `H_target = ln 32 = 3.4657`, EMA momentum 0.9.

No component was swept. No component was retuned after seeing a result.

## Order of operations

1. **Gradient diagnostic** — confirm analytically and by measurement whether a
   zero readout starves the address path. Decides component 1.
2. **Isolation validation** — 9 checks. Training does not start unless all pass.
3. **Base gate** — frozen model must score 0/48, 0/24, 9/12. Hard stop on drift.
4. **State 2** — memory installed, untrained, gate 0.
5. **Train** — up to 30 epochs, addressing probed in-loop, early-collapse gate armed.
6. **Decision point** — the positive addressing gate decides what runs next.
7. Evaluation, then analysis.

## The two gates, both fixed in advance

**Early-collapse gate** (stops training). From epoch 6 onward, stop if
*distinct dominant slots ≤ 2 or one slot holds > 80 % of dominant selections*,
for three consecutive probes, **and** the statistic has not improved. The second
clause exists so a differentiating run is not killed on a transient reading.

**Positive addressing gate** (allows recall/composition to be interpreted as an
explicit-memory test): > 2 distinct dominant slots, no slot above 80 %,
within-fact consistency above chance, **and** meaningful between-fact
differentiation. One fact per slot is not required; no symbolic meaning is
assigned to any slot.

Within-fact consistency is deliberately never read alone. Under total collapse
it is trivially 1.0 — every paraphrase agrees because everything agrees. It is
only informative alongside between-fact differentiation.

## Metrics

Unchanged from the historical program: recall (48), composition (24, reported
thinking-off and thinking-on, significance by exact one-tailed binomial against
1/6), **interference = 0.7500 − control accuracy**, behavioural churn
(textual / substantive / regression / repair / unchanged), leakage, reasoning-token
statistics.

Leakage is reported **both** ways: the historical ASCII regex, for comparability
with 000–005, and the Unicode-aware count introduced after Experiment 005. The
shared analyser is not modified.

Addressing metrics added by GOAL_6: distinct dominant slots, dominant-slot share,
paraphrase agreement rate (against a 1/128 chance baseline), between-fact
dominant-slot entropy, address entropy, and pre-softmax score margin.

## What was deliberately not run, and why

The **gate sweep**. GOAL_6: *"Run the gate sweep only if the memory actually
learns useful information … do not waste interpretation on another all-zero
recall sweep."* Recall is 0/48. Gates 0 and 1 are still covered by States 5 and
4, which is what detachability requires.

Training stopped at **epoch 6 of 30** when the early gate tripped. This is the
specified behaviour — *"do not spend 30 epochs proving slot 63 has a
successor"* — but it has a consequence that must be carried into every
comparison: **Experiment 006's memory is less trained than any other in the
program.** Its loss (4.1771), interference and churn are therefore *not*
directly comparable with the 30-epoch runs. The addressing statistics, which are
what GOAL_6 set out to measure, are comparable, because they were measured on a
trajectory rather than at a single endpoint.

The thinking-mode composition run *was* executed despite the failed gate, because
`memory_access_trace.json`, `trace_analysis.json` and
`composition_failure_taxonomy.json` are required deliverables and four report
questions (10, 11, 12, 16) cannot otherwise be answered. It cost 1557 s.
