# 019 decoder-mirror — RESULT (self-harvested 2026-08-02, tier T3-exploratory)

**Verdict: Inside the SONAR decoder, the order code stays STRICTLY FILLER-LOCAL and is near-
ceiling at EARLY decoder layers (L0-L8: 0.98-0.999), then DECAYS to ~0.70-0.74 by mid/late layers
— it never rises with depth. ROLE is CHANCE at every layer × span (powered nulls). The "copy each
filler's encoder-local states" pathway is architecturally IMPOSSIBLE (the decoder cross-attends to
z as a single length-1 source), and the self-attention alternative shows NO copy-back (the second
entity puts near-zero mass on the first entity's span; a BOS/prefix sink dominates). So the
decoder's near-verbatim role reconstruction (anchor 0.981) is not carried by any linear, filler-
local, transferable role code appearing at some decoder layer, nor by an inter-filler attention
copy — consistent with role living in nonlinear/attention computation (012/016), never the code.**

## What ran
Teacher-forced pass of `text_sonar_basic_decoder` on all 2000 agent_patient sentences, z from the
encoder mean-pool (behavioral anchor: greedy/beam decode from this z → role-preservation **0.981**,
= 013's 0.981 exactly). Forward hooks on all 24 decoder layers → filler-A/filler-B/allpool span
means at {L0,4,8,12,16,20,23}+pre-softmax final. Battery discipline EXACT (train F1&train/test
F2&test, 20 cross-family pairs, prop-cluster grid_bootstrap, focal-swap `_y_role`, block rule, 3
seeds). Alignment 1.0000 (decoder spans == bd_meta A/B_pieces+1, all 2000). Self-attn span-
attribution at {L4,12,20}. Power certs + within-family ceiling at 2 cells.

## Numbers (pooled cross-family AUC [95% CI], fillerA span; fillerB ~identical)
| layer | ORDER (surface) | ROLE |
|---|---|---|
| L0 | 0.992 [0.99,1.00] | 0.496 |
| L4 | **0.999** [1.00,1.00] | 0.495 |
| L8 | 0.976 [0.97,0.98] | 0.512 |
| L12 | 0.733 [0.72,0.75] | 0.489 |
| L16 | 0.696 [0.68,0.71] | 0.492 |
| L20 | 0.720 [0.70,0.73] | 0.485 |
| L23 | 0.735 [0.72,0.75] | 0.504 |
| final | 0.738 [0.72,0.76] | 0.503 |
- **allpool ~0.49-0.51 at every layer for BOTH targets** (order never pools/broadcasts — mirrors 017).
- ROLE ≤0.514 in all 48 cells, CIs at chance.

## Gates
- **Power certs PASS** (nulls are powered, not blind): fillerA@L12 additive certified @eps=0.5
  (recovery 0.985); fillerA@final rotation_LN certified @θ=0.6 (recovery 1.0).
- **Within-family ceiling**: surface 1.000 (order trivially in-dist learnable); **role 0.533 (L12) /
  0.501 (final)** — the canonicalized/focal role is NOT in the filler decoder state even IN-
  DISTRIBUTION (cf 018: focal-role is a lexical lookup).
- **Cross-attention degeneracy (confirmed)**: `cross_src_len = 1`. The decoder conditions on the
  single pooled z; there is no encoder-position attention to map. Manifest point-3 as written is
  architecturally void — logged in PREREG before the run.
- **Self-attn copy pathway (refuted)**: when emitting the second entity, mass on the FIRST entity's
  decoder span = 0.025 (L4) → 0.020 (L12) → 0.016 (L20), frac>0.5 = **0.000** at every layer,
  length-normalized enrichment 0.09-0.15 (**anti**-enriched). A BOS/prefix attention sink dominates
  (0.68 → 0.73 → 0.78 with depth); own-span self 0.11, predicate 0.03.

## Interpretation (scoped)
1. Under teacher forcing the reference tokens ARE the input, so order/position is trivially present
   at the input; the near-ceiling L0-L8 order cell reflects that. The novel finding is the DECAY
   with depth (0.999→0.74): the decoder progressively transforms the given surface order out of the
   linearly-readable filler subspace as it builds the generation state — order is consumed, not
   accumulated. allpool stays ~chance (no pooled/broadcast order, as 017 found on the encoder).
2. Role never becomes a linear, transferable, filler-local code anywhere in the decoder — and not
   even within-construction — despite the decoder reconstructing roles at 0.981. This localizes the
   arc's "decoder recovers role nonlinearly" to: NOT a residual-stream linear variable at any depth.
3. The intuitive "decoder copies each filler by attending to its encoder span" mechanism is doubly
   dead: cross-attention has a single source (z), and self-attention does not attend the later
   filler back to the earlier one. Role coordination is a distributed computation over z + the
   autoregressive prefix, riding the reproduced surface tokens (013/014), not an attention copy.

## Predictions & Brier (frozen in PREREG_LITE)
- (a) P(order cell >0.9 at some layer)=0.90 → **TRUE** (L0/L4/L8). Brier 0.010
- (b) P(role cell >0.6 transfer at some layer)=0.30 → **FALSE** (max 0.514, powered). Brier 0.090
- (c') P(filler-B self-attn majority(>0.5) on filler-A span @L12)=0.15 → **FALSE** (0.000). Brier 0.0225
- (d) P(order rises with depth, later−earlier>0.1)=0.20 → **FALSE** (it FALLS, Δ≈−0.26). Brier 0.040
- **Mean Brier 0.041** (well-calibrated; the depth-DECAY of order was the one qualitative surprise).

## Limitations / follow-up
- **Teacher-forced confound (headline, pre-registered):** order is trivially in the input, so this
  localizes where order/role are linearly+transferably decodable in the decoder residual stream, NOT
  order *recovery from z alone*. The genuine recovery question needs FREE-RUNNING generation with
  generated-token alignment — the clean follow-up (worth funding: Y — it would test whether the
  decay-with-depth reverses when order must be reconstructed rather than read).
- Self-attn attribution mean-pools over heads; a role-coordinating head pair could hide in the head
  dimension (012 found role heads in the ENCODER) — a per-head decoder self-attn scan is a cheap
  extension. Incidents: two capture bugs caught & fixed pre-full-run (fp16 overflow → fp32; NaiveSDPA
  +right-padding NaN → length-bucketed zero-pad batching; a bucket-length/layer-index name collision).
  All fixes validated (finite 2000/2000, alignment 1.0, power certs pass) before the scored run.
