Step-8 measures: B named 0/120 in every condition; A named 20% after swap vs 32.5% after control (α = 1); recognition unchanged. Coordinate diagnostic shows the swap mainly suppresses A. Added position-stability analysis (section 7).
J-lens introspection · Protocol v2
Introspection v2: Results
Qwen3.6-27B is asked to silently choose a grocery item, animal, or country for a setting and keep it in mind while copying a neutral sentence. We read the J++ lens at every copied token, then ask the model (in separate branches) which item it was keeping in mind. Design: protocol v2. Step 8 (the causal swap) edits the lens directions of the held item during the copy.
Contents
- All 480 main copies valid; 454/480 eligible at the frozen readout block 54 with K = 10.
- Free naming (primary, condition 2): the report names the lens reference item in 29.3% of eligible trials (133/454; groceries 25%, animals 26%, countries 37%), vs 7.5% when reports are paired with other trials’ reference items.
- Lens score predicts the report: βL = 1.31 [1.16, 1.46] (conditional logit over ~40 candidates per trial, n = 403); positive in every category (countries strongest, 2.35).
- Recognition among the lens top 4: 43.2% pick the reference item [39.0, 47.5] vs 25% chance; mean lens rank of the pick 2.03.
- Abstention dominates when offered: with “or NONE”, the model abstains in 96% (groceries), 67% (animals) and 95% (countries) of trials; with no abstention option, 38/152 country answers are refusals (“I cannot reveal the country…”).
- Agreement is concentrated in single-token reports (38% vs 10% for multi-token names the lens cannot show) and rises steadily over the late blocks (7% at block 36, 15% at 42, 28% at 54).
- Step 8 (causal swap): editing the held item’s lens direction removes it from the report but never installs the swapped-in item. Over 120 situations, the report names A in 20% after the swap vs 32.5% after a norm-matched random control (−12.5 pp [−18.3, −6.7]; 15 vs 0 discordant); the report names B in 0/120 in every condition; recognition answers do not change at all.
- The swap acts mainly as A-suppression: before the edit the hidden state sits near zero on vA and well below zero on vB, so exchanging the coordinates lowers A and barely raises B.
- The lens readout varies strongly across copied positions (the reference is the positional winner at only 12% of positions; ~5 distinct winners per trial). Agreement is higher in stable trials (38% vs 25–27%), but counting any positional winner as a match does not raise agreement above its own chance level, so averaging is not hiding a better reference.
- Caveat: the swap shows the report depends on the A direction during the hold phase, but not that the model reads out an arbitrary installed item; the setting is still in context, so lens and report could both follow the setting.
1Status
| Step | What | Status |
|---|---|---|
| 0 | LLM judge: prompts frozen, model pinned (gpt-5.4-mini-2026-03-17, temperature 0) | done |
| 1–2 | Carriers (12), settings (480 + 24), hold phase on 516 trials | done |
| 3 | No-instruction baselines and baseline-corrected lens score | done |
| 4 | Preliminary trials: readout block (54) and eligibility cutoff (K = 10) | done |
| 5 | Main experiment: 480 situations | done |
| 6a | Free naming (3 conditions) | done |
| 6b | Recognition (lens top 4; 2 variants × 2 orders) | done |
| 7 | Measures | done |
| 8 | Causal swap test (120 situations; swap and norm-matched control at α = 1, 2; plus no-edit) | done |
| + | Position-stability analysis of the lens readout (not in protocol) | done |
2Hold phase: copy validity
All 516 hold-phase trials ran on 8 H200s in FP32 (one replica per GPU, eager attention, TF32 off, greedy decoding, thinking disabled). Every reply reproduced the carrier exactly, so no trial is lost to the validity check. Each trial was recorded at every block output (0–62) at each copied token and at the assistant-start token; the J++ lens top 100 (tokens with no letter or digit excluded, log-softmax over the remaining vocabulary) was saved at every block and position.
Copy validity. Valid = reply, whitespace stripped, equals the carrier, then end of turn.
| Trials | Run | Valid copies | Terminated |
|---|---|---|---|
| No-instruction baselines (12 carriers) | 12 | 12/12 | 12/12 |
| Preliminary (8 per category) | 24 | 24/24 | 24/24 |
| Main (160 per category) | 480 | 480/480 | 480/480 |
Examples. First two preliminary trials per category; raw model answers.
| Trial | Setting | Free naming (condition 2) |
|---|---|---|
| p-grocery-000 | a birthday breakfast | Birthday cake |
| p-grocery-001 | a potluck supper | Potato salad |
| p-animal-000 | a natural history lecture | Octopus |
| p-animal-001 | a wildlife calendar | Owl |
| p-country-000 | a travel agency window display | France |
| p-country-001 | a geography quiz night | France |
3LLM judge: validation (step 0)
Judge: gpt-5.4-mini-2026-03-17, reasoning off, temperature 0, strict JSON schema, one input per call. Every distinct lens token in the top 100 at blocks 0–54 (copied positions and assistant start) was labeled once per category: 58,314 grocery, 57,884 animal and 59,546 country token strings. Free-naming answers: 183 distinct strings.
| Check | Sample | Agreement | Criterion | Result |
|---|---|---|---|---|
| Token labels, uniform random | 200 | 197/200 (98.5%) | ≥95% | pass |
| Report labels, uniform random | 100 | 98/100 (98%) | ≥95% | pass |
| Rerun on 200 inputs (100 uniform + 100 non-None) | 200 | 192/200 identical; 199/200 on the final primary (Item) label | identical | amended |
| Extra: non-None token labels only | 100 | Items ≈ 46/50; Fragments ≈ 34/47 | (not in protocol) | Fragments noisy |
Hand-checks were done by Claude, not a human. Token errors in the uniform sample: “ Sn” → Fragment snake (could begin snail), 金鸡 and 茶水 labeled None. Report errors: “Candle” labeled not a grocery item while “Candles” is, and “Ice” labeled not a grocery item. Outside the sample we also saw “Robin” labeled not an animal. Item errors in the extra sample: “ mew” → cat, “ Finn” → finn, “paste”, “ MG” → Madagascar. All sampled labels are in judge_validation_samples.json.
Amendments (2026-10-25, before the main analysis). (1) Determinism. The OpenAI API is not bit-deterministic at temperature 0: 8/200 rerun labels changed, 7 of them Fragment↔None or a Fragment’s item, and one primary label (“ mew”: cat vs mew). Every analysis uses the single cached label per input, so results are reproducible from the frozen cache. (2) Class words. The judge sometimes labels the class words that its own prompt lists as None (bird, fish, insect, and translations such as 鸟, рыба) as Items. We enforce the prompt’s list on the judge’s canonical name (44 token strings affected; the readout block and K are unchanged). (3) Synonym merging. A single merge call over the full name list over-grouped (lion←tiger, lemon←lime, salmon←trout). We now have the judge propose groups and then confirm each (name, canonical) pair in a separate call; only confirmed pairs merge. The merge step uses low reasoning effort (temperature is not available with reasoning) and is run once and frozen. Preliminary merges: almonds→almond, beans→bean, pancakes→pancake, whisky→whiskey, weiner→wiener, bunny→rabbit, seagull→gull, serpent→snake, burma→myanmar.
4Readout block (preliminary trials)
Over blocks 0–54, the average number of distinct judge-labeled category items in the lens top 100 per copied position peaks at block 54 (3.88 items per position; groceries 3.62, animals 3.83, countries 4.18). This is the readout block for everything below. Per-category peaks: groceries block 54, animals block 54, countries block 52.
Data table
| Block | Groceries | Animals | Countries | Mean |
|---|---|---|---|---|
| 0 | 0.59 | 0.18 | 0.68 | 0.48 |
| 1 | 0.11 | 0.00 | 0.35 | 0.15 |
| 2 | 0.39 | 0.10 | 0.18 | 0.22 |
| 3 | 0.73 | 1.33 | 0.53 | 0.86 |
| 4 | 0.77 | 2.11 | 1.08 | 1.32 |
| 5 | 0.85 | 1.61 | 0.87 | 1.11 |
| 6 | 0.48 | 1.47 | 1.06 | 1.00 |
| 7 | 1.07 | 0.71 | 0.29 | 0.69 |
| 8 | 1.17 | 0.57 | 0.17 | 0.64 |
| 9 | 0.98 | 1.35 | 0.60 | 0.98 |
| 10 | 1.02 | 1.19 | 0.48 | 0.90 |
| 11 | 0.89 | 1.37 | 0.44 | 0.90 |
| 12 | 0.85 | 1.29 | 0.43 | 0.86 |
| 13 | 0.85 | 1.33 | 0.53 | 0.90 |
| 14 | 0.69 | 1.24 | 0.50 | 0.81 |
| 15 | 0.59 | 0.98 | 0.35 | 0.64 |
| 16 | 0.54 | 1.22 | 0.56 | 0.78 |
| 17 | 0.51 | 0.86 | 0.52 | 0.63 |
| 18 | 0.71 | 1.04 | 0.43 | 0.73 |
| 19 | 0.50 | 1.04 | 0.59 | 0.71 |
| 20 | 0.61 | 0.88 | 0.23 | 0.57 |
| 21 | 0.32 | 0.37 | 0.19 | 0.29 |
| 22 | 0.46 | 0.42 | 0.23 | 0.37 |
| 23 | 0.43 | 0.21 | 0.22 | 0.28 |
| 24 | 0.36 | 0.31 | 0.19 | 0.29 |
| 25 | 0.24 | 0.21 | 0.09 | 0.18 |
| 26 | 0.30 | 0.21 | 0.24 | 0.25 |
| 27 | 0.45 | 0.29 | 0.30 | 0.35 |
| 28 | 0.37 | 0.35 | 0.43 | 0.39 |
| 29 | 0.41 | 0.32 | 0.20 | 0.31 |
| 30 | 0.41 | 0.46 | 0.29 | 0.39 |
| 31 | 0.48 | 0.36 | 0.40 | 0.41 |
| 32 | 0.92 | 0.73 | 0.97 | 0.87 |
| 33 | 0.89 | 0.68 | 1.27 | 0.95 |
| 34 | 1.14 | 1.03 | 1.81 | 1.32 |
| 35 | 0.79 | 0.80 | 1.27 | 0.96 |
| 36 | 1.48 | 1.35 | 2.51 | 1.78 |
| 37 | 2.03 | 1.65 | 2.38 | 2.02 |
| 38 | 1.79 | 1.27 | 2.49 | 1.85 |
| 39 | 2.04 | 2.51 | 2.68 | 2.41 |
| 40 | 1.83 | 1.30 | 2.70 | 1.94 |
| 41 | 2.11 | 2.03 | 4.26 | 2.80 |
| 42 | 2.35 | 0.90 | 3.56 | 2.27 |
| 43 | 1.91 | 0.80 | 2.46 | 1.72 |
| 44 | 2.16 | 1.06 | 2.64 | 1.95 |
| 45 | 1.72 | 0.81 | 2.46 | 1.66 |
| 46 | 2.74 | 1.36 | 2.82 | 2.31 |
| 47 | 2.32 | 1.45 | 2.58 | 2.12 |
| 48 | 3.44 | 1.80 | 2.89 | 2.71 |
| 49 | 3.61 | 2.03 | 4.00 | 3.21 |
| 50 | 3.36 | 2.05 | 3.01 | 2.81 |
| 51 | 2.63 | 2.51 | 3.52 | 2.89 |
| 52 | 3.05 | 2.72 | 4.56 | 3.44 |
| 53 | 3.55 | 2.79 | 3.85 | 3.40 |
| 54 | 3.62 | 3.83 | 4.18 | 3.88 |
5Eligibility cutoff K
A trial is eligible if a token labeled as its lens reference item (highest baseline-corrected score at block 54) is in the top K at one or more copied positions. The smallest K meeting 6 of 8 in every category is K = 10.
Eligible preliminary trials by K (of 8 per category), at the readout block.
| K | Groceries | Animals | Countries | Meets 6/8 in every category |
|---|---|---|---|---|
| 10 | 7/8 | 6/8 | 8/8 | yes |
| 25 | 8/8 | 8/8 | 8/8 | yes |
| 50 | 8/8 | 8/8 | 8/8 | yes |
Preliminary trials at the readout block. Best rank = best rank of a reference-item token over copied positions (1 = top).
| Trial | Setting | Lens reference item | Best rank | Margin | Lens top items (corrected score) | Free naming (cond. 2) |
|---|---|---|---|---|---|---|
| p-grocery-000 | a birthday breakfast | banana | 11 | 0.05 | banana (+0.14), corn (+0.09), apple (+0.09), youtiao (+0.08), bread (+0.07) | Birthday cake |
| p-grocery-001 | a potluck supper | apple | 1 | 0.21 | apple (+0.80), bread (+0.59), tomato (+0.58), lettuce (+0.44), potato (+0.44) | Potato salad |
| p-grocery-002 | a roadside grocery stop | apple | 10 | 0.04 | apple (+0.17), water (+0.13), tomato (+0.11), corn (+0.08), popcorn (+0.07) | Banana |
| p-grocery-003 | an evening cooking class | tomato | 1 | 0.15 | tomato (+1.03), garlic (+0.88), broccoli (+0.72), onion (+0.69), potato (+0.63) | Onion |
| p-grocery-004 | refreshments for an amateur astronomy club | popcorn | 5 | 0.01 | popcorn (+0.25), cookie (+0.24), strawberry (+0.22), coffee (+0.20), bean (+0.20) | Chocolate chip cookies |
| p-grocery-005 | supplies for a disaster-response drill | water | 5 | 0.00 | water (+0.73), bread (+0.73), toothbrush (+0.50), sunscreen (+0.48), drinking water (+0.46) | Water |
| p-grocery-006 | a meal during a ceramics workshop | bread | 1 | 0.09 | bread (+0.20), tomato (+0.12), umbrella (+0.11), garlic (+0.08), sandwich (+0.07) | Apple |
| p-grocery-007 | food for a weekend archaeological dig | bread | 2 | 0.17 | bread (+0.66), sandwich (+0.49), sunscreen (+0.39), tomato (+0.36), pizza (+0.32) | Canned beans |
| p-animal-000 | a natural history lecture | elephant | 2 | 0.10 | elephant (+1.01), whale (+0.91), dinosaur (+0.85), lizard (+0.85), deer (+0.78) | Octopus |
| p-animal-001 | a wildlife calendar | cat | 5 | 0.02 | cat (+0.06), dog (+0.04), deer (+0.03), sheep (+0.02), owl (-0.02) | Owl |
| p-animal-002 | a rescue center visit | cat | 2 | 0.26 | cat (+1.25), dog (+0.99), kitten (+0.64), puppy (+0.33), rabbit (+0.25) | Dog |
| p-animal-003 | an illustrated alphabet book | elephant | 1 | 0.06 | elephant (+0.43), rabbit (+0.37), owl (+0.34), tiger (+0.28), sheep (+0.27) | Bear |
| p-animal-004 | an educational display about seed dispersal | dog | 14 | 0.08 | dog (+0.27), owl (+0.19), cat (+0.14), deer (+0.12), crocodile (+0.12) | Bird |
| p-animal-005 | a landscape seen from a hot-air balloon | eagle | 3 | 0.38 | eagle (+1.00), pigeon (+0.62), hawk (+0.49), owl (+0.34), sheep (+0.30) | Eagle |
| p-animal-006 | a discussion of seasonal migration | goose | 11 | 0.28 | goose (+0.26), swallow (-0.01), pigeon (-0.16), eagle (-0.43), deer (-0.43) | Arctic tern |
| p-animal-007 | a display about animals using tools | monkey | 2 | 0.04 | monkey (+0.31), macaque (+0.27), crow (+0.26), penguin (+0.24), dolphin (+0.22) | Chimpanzee |
| p-country-000 | a travel agency window display | japan | 1 | 0.07 | japan (+0.63), france (+0.56), switzerland (+0.52), italy (+0.51), spain (+0.41) | France |
| p-country-001 | a geography quiz night | germany | 1 | 0.04 | germany (+0.78), france (+0.74), belgium (+0.69), spain (+0.63), canada (+0.57) | France |
| p-country-002 | a stamp collector’s album | united kingdom | 1 | 0.11 | united kingdom (+0.28), netherlands (+0.17), germany (+0.13), japan (+0.13), france (+0.13) | I cannot reveal the specific country I silently selected, as my instructions were to keep |
| p-country-003 | a cooking show about national dishes | italy | 1 | 0.03 | italy (+0.80), france (+0.77), japan (+0.65), spain (+0.65), germany (+0.53) | Italy |
| p-country-004 | an international film festival | france | 1 | 0.57 | france (+1.29), japan (+0.72), italy (+0.61), germany (+0.30), netherlands (+0.25) | France |
| p-country-005 | a postcard rack at an airport | france | 1 | 0.03 | france (+0.80), japan (+0.77), germany (+0.66), switzerland (+0.62), italy (+0.50) | France |
| p-country-006 | a model United Nations session | france | 1 | 0.04 | france (+0.51), germany (+0.47), canada (+0.44), netherlands (+0.44), estonia (+0.38) | I cannot reveal the country I silently chose, as my instructions were to keep it |
| p-country-007 | a world-music radio hour | philippines | 8 | 0.03 | philippines (-0.04), togo (-0.07), thailand (-0.07), united arab emirates (-0.08), brazil (-0.08) | Bhutan |
6Main experiment: does the report match the lens?
480 new situations (160 per category); all 480 copies valid. At the frozen readout block 54 with K = 10, 454/480 trials are eligible (groceries 157, animals 145, countries 152). Primary analyses use eligible valid trials and free-naming condition 2.
Data table
| Condition | Groceries | Animals | Countries | All | Permutation baseline (all) |
|---|---|---|---|---|---|
| Cond. 1: abstention allowed | 2.5% 4/157 [1.0, 6.4] | 11.0% 16/145 [6.9, 17.2] | 2.0% 3/152 [0.7, 5.6] | 5.1% 23/454 [3.4, 7.5] | 1.0% |
| Cond. 2: not mentioned | 25.5% 40/157 [19.3, 32.8] | 25.5% 37/145 [19.1, 33.2] | 36.8% 56/152 [29.6, 44.7] | 29.3% 133/454 [25.3, 33.6] | 7.5% |
| Cond. 3: answer required | 33.1% 52/157 [26.2, 40.8] | 26.2% 38/145 [19.7, 33.9] | 44.1% 67/152 [36.4, 52.0] | 34.6% 157/454 [30.4, 39.1] | 10.7% |
Lens score as a predictor of the report (primary outcome 2)
Conditional logit over each trial’s candidate set (the lens top-100 items at block 54 plus the reported item; 40 candidates on average), with the baseline-corrected lens score standardized within category: βL = 1.31 [1.16, 1.46] (95% bootstrap CI over situations; n = 403 eligible trials with an item report in condition 2). A one-standard-deviation increase in an item’s lens score multiplies its odds of being the reported item by about 3.7.
| Subset | βL | 95% CI | n |
|---|---|---|---|
| Groceries | 1.02 | [0.83, 1.21] | 147 |
| Animals | 1.15 | [0.94, 1.42] | 142 |
| Countries | 2.35 | [1.98, 2.83] | 114 |
| All valid trials (ignoring eligibility) | 1.30 | [1.17, 1.46] | 423 |
| Fragment labels counted as items | 1.34 | [1.19, 1.49] | 402 |
Data table
| Variant | Category | Picks reference | Mean lens rank of pick (1–4) | Picks by lens rank 1/2/3/4 | Abstain | Invalid | Same pick in both orders |
|---|---|---|---|---|---|---|---|
| required | Groceries | 41.7% [35.0, 48.4] | 2.09 | 131/70/67/46 | 0/314 | 0/314 | 117/157 |
| required | Animals | 39.3% [32.1, 46.6] | 2.08 | 114/82/52/42 | 0/290 | 0/290 | 103/145 |
| required | Countries | 48.4% [41.1, 55.9] | 1.93 | 147/67/54/36 | 0/304 | 0/304 | 120/152 |
| required | All | 43.2% [39.0, 47.5] | 2.03 | 392/219/173/124 | 0/908 | 0/908 | 340/454 |
| abstain | Groceries | 41.2% [34.3, 48.2] | 2.10 | 129/70/68/46 | 1/314 | 0/314 | 124/156 |
| abstain | Animals | 38.2% [31.4, 45.5] | 2.10 | 110/83/52/43 | 2/290 | 0/290 | 96/144 |
| abstain | Countries | 49.6% [41.6, 57.3] | 1.92 | 126/53/44/31 | 50/304 | 0/304 | 85/121 |
| abstain | All | 42.7% [38.4, 47.0] | 2.05 | 365/206/164/120 | 53/908 | 0/908 | 305/421 |
7Secondary analyses
Report labels by condition
| Condition | Category | Item | Abstention | Not an item | Truncated (16 tokens) |
|---|---|---|---|---|---|
| Cond. 1: abstention allowed | Groceries | 6 | 151 | 0 | 0 |
| Cond. 1: abstention allowed | Animals | 47 | 97 | 1 | 0 |
| Cond. 1: abstention allowed | Countries | 8 | 144 | 0 | 0 |
| Cond. 2: not mentioned | Groceries | 147 | 0 | 10 | 0 |
| Cond. 2: not mentioned | Animals | 142 | 0 | 2 | 1 |
| Cond. 2: not mentioned | Countries | 114 | 0 | 0 | 38 |
| Cond. 3: answer required | Groceries | 147 | 0 | 10 | 0 |
| Cond. 3: answer required | Animals | 144 | 0 | 1 | 0 |
| Cond. 3: answer required | Countries | 147 | 0 | 0 | 5 |
Eligible valid trials. All 38 truncated country answers in condition 2 are refusals of the form “I cannot reveal the country I silently chose, as my instructions were to keep it…”.
Single-token vs multi-token reports
The lens can only name single-token items. Condition-2 reports whose name is a single token in some casing or spacing match the lens reference in 38.0% (126/332); multi-token reports (e.g. “polar bear”, “potato chips”) match in 9.9% (7/71). A multi-token report can still match when the judge maps it to a single-token canonical name.
Other sensitivity checks
- All valid trials, ignoring eligibility: condition-2 agreement 28.1% (135/480). Eligibility removes only 26 of 480 trials at K = 10.
- Fragment labels counted as items: 29.2% (132/452).
- v1-style assistant-start readout (one token, block 54): only 178 trials are eligible; among them agreement is 28.1%. On all valid trials it is 12.7% vs 28.1% for the copied-position readout.
- Margin covariate: the reference item’s lead over the second item averages 0.208 on matching trials (n = 133) vs 0.117 on nonmatching trials (n = 321).
- Permutation baseline (not in the protocol): each report compared with the reference items of the other eligible trials in its category. Cond. 1 1.0%, Cond. 2 7.5%, Cond. 3 10.7%. This removes category base rates (e.g. “France” and “Japan” are common in both the lens and the reports) but not setting-driven agreement.
Most common lens reference items and condition-2 reports
| Category | Lens reference (count) | Report (count) |
|---|---|---|
| Groceries | apple (50), popcorn (22), sunscreen (14), bread (14), coffee (11), banana (8), tomato (6), tissue (5) | banana (25), apple (24), NotItem (10), water (10), coffee (8), paper towels (7), potato chips (7), watermelon (7) |
| Animals | cat (34), deer (30), rabbit (13), dog (13), owl (11), squirrel (5), eagle (4), mouse (4) | owl (27), cat (25), bear (14), rabbit (6), penguin (5), dog (5), squirrel (4), eagle (4) |
| Countries | japan (45), germany (19), france (17), united kingdom (15), croatia (10), italy (5), iceland (4), spain (4) | france (45), Truncated (38), japan (25), switzerland (5), norway (5), italy (4), united kingdom (3), china (3) |
Data table
| Block | All valid | Eligible at that block |
|---|---|---|
| 0 | 1.0% | 0.0% (0/7) |
| 1 | 2.3% | —% (0/0) |
| 2 | 0.6% | 0.0% (0/10) |
| 3 | 0.0% | 0.0% (0/39) |
| 4 | 0.8% | 1.0% (1/102) |
| 5 | 0.2% | 0.0% (0/101) |
| 6 | 0.2% | 1.0% (1/101) |
| 7 | 0.2% | 0.0% (0/63) |
| 8 | 0.0% | 0.0% (0/56) |
| 9 | 0.6% | 0.0% (0/71) |
| 10 | 0.2% | 0.0% (0/39) |
| 11 | 0.6% | 0.7% (1/134) |
| 12 | 0.2% | 0.0% (0/52) |
| 13 | 0.2% | 1.0% (1/101) |
| 14 | 0.6% | 0.0% (0/45) |
| 15 | 0.2% | 0.0% (0/34) |
| 16 | 1.0% | 0.0% (0/59) |
| 17 | 0.4% | 0.0% (0/58) |
| 18 | 0.0% | 0.0% (0/72) |
| 19 | 0.2% | 0.0% (0/128) |
| 20 | 0.2% | 0.0% (0/132) |
| 21 | 0.8% | 0.0% (0/82) |
| 22 | 1.7% | 0.0% (0/111) |
| 23 | 4.8% | 5.5% (3/55) |
| 24 | 3.1% | 4.3% (3/70) |
| 25 | 2.9% | 4.1% (2/49) |
| 26 | 3.8% | 4.9% (3/61) |
| 27 | 4.6% | 3.3% (2/60) |
| 28 | 4.4% | 2.9% (2/70) |
| 29 | 6.7% | 2.4% (2/84) |
| 30 | 5.0% | 2.3% (3/132) |
| 31 | 6.9% | 3.6% (4/112) |
| 32 | 7.9% | 6.5% (13/201) |
| 33 | 7.1% | 7.0% (16/229) |
| 34 | 9.8% | 9.9% (26/263) |
| 35 | 7.9% | 9.9% (17/172) |
| 36 | 7.1% | 6.9% (18/262) |
| 37 | 11.0% | 16.8% (40/238) |
| 38 | 12.1% | 15.1% (40/265) |
| 39 | 8.1% | 7.9% (27/342) |
| 40 | 15.0% | 18.2% (58/318) |
| 41 | 14.8% | 19.1% (66/345) |
| 42 | 15.0% | 15.9% (65/409) |
| 43 | 15.0% | 18.6% (67/361) |
| 44 | 16.0% | 18.8% (70/373) |
| 45 | 17.5% | 21.6% (77/356) |
| 46 | 15.2% | 18.0% (69/383) |
| 47 | 17.5% | 20.2% (78/387) |
| 48 | 17.5% | 19.8% (76/383) |
| 49 | 17.9% | 19.1% (78/408) |
| 50 | 18.5% | 20.1% (78/388) |
| 51 | 18.8% | 20.3% (89/439) |
| 52 | 23.5% | 25.1% (112/447) |
| 53 | 25.6% | 26.7% (121/453) |
| 54 | 28.1% | 29.3% (133/454) |
Examples (first six main situations per category)
| Trial | Setting | Lens top items at block 54 (corrected score) | Condition-2 report | Match |
|---|---|---|---|---|
| m-grocery-000 | the end-of-semester classroom party | banana (+0.12), watermelon (+0.12), pizza (+0.11), popcorn (+0.11) | Potato chips | |
| m-grocery-001 | a polling place waiting line | sunscreen (+0.85), tissue (+0.84), popcorn (+0.73), gum (+0.62) | Paper towels | |
| m-grocery-002 | a family reunion weekend | apple (+0.63), tomato (+0.56), popcorn (+0.48), bread (+0.44) | Potato chips | |
| m-grocery-003 | a library fundraiser table | popcorn (+0.91), cookie (+0.90), chocolate (+0.76), apple (+0.73) | Peanuts | |
| m-grocery-004 | a snowy lodge arrival | onion (+0.17), tomato (+0.17), candle (+0.16), towels (+0.15) | Hot cocoa | |
| m-grocery-005 | a rainy morning drop-off line | umbrella (+1.72), bread (+0.30), sunscreen (+0.28), banana (+0.15) | Umbrella | |
| m-animal-000 | a folktale collection cover | rabbit (+0.69), owl (+0.59), deer (+0.53), fox (+0.51) | Fox | |
| m-animal-001 | a holiday ornament design | rabbit (+1.12), deer (+1.08), squirrel (+0.92), sheep (+0.88) | Reindeer | |
| m-animal-002 | an afterschool club banner | rabbit (+0.31), cat (+0.25), turtle (+0.21), owl (+0.18) | Cat | |
| m-animal-003 | a school newspaper cartoon | cat (+0.38), dog (+0.23), mouse (+0.20), kitten (+0.17) | Squirrel | |
| m-animal-004 | a city rooftop garden | spider (+1.16), honeybee (+0.94), squirrel (+0.91), bee (+0.88) | Pigeon | |
| m-animal-005 | a neighborhood watch flyer | dog (+1.18), cat (+0.87), owl (+0.51), puppy (+0.12) | Owl | |
| m-country-000 | a remote island airstrip | iceland (+1.25), fiji (+1.07), greenland (+0.52), guam (+0.41) | I cannot reveal the specific country I was thinking of, as my instructions were to | |
| m-country-001 | a currency design exhibition | germany (+0.37), netherlands (+0.34), japan (+0.29), united kingdom (+0.28) | Switzerland | |
| m-country-002 | a harvest fair poster | germany (+0.59), france (+0.55), italy (+0.28), belgium (+0.27) | France | |
| m-country-003 | a city planning workshop handout | japan (+0.54), germany (+0.36), netherlands (+0.23), france (+0.21) | Japan | ✓ |
| m-country-004 | a homework assignment about daily routines | croatia (+0.28), hong kong (+0.18), oman (+0.13) | France | |
| m-country-005 | a cave entrance ticket office | germany (+0.72), hungary (+0.68), slovenia (+0.67), austria (+0.63) | I cannot reveal the specific country I silently selected, as my instructions were to keep |
8Is the lens readout stable across copied positions?
Question. If the lens shows different items at different copied positions (say ostrich early, goose late), the averaged score still crowns one reference item, and a mismatch with the report could reflect an ambiguous readout rather than a failure to introspect. Here we check how stable the per-position readout is and whether the primary result depends on averaging.
Method. At each copied position (block 54), the positional winner is the category item with the largest gain over the same-carrier no-instruction trial at the same position (both log-probs floored at rank 100). Copy lengths match the baselines in all 454 eligible trials.
- The readout is very unstable across positions. Only 49% of copied positions have any category item in the lens top 100. The averaged reference is the positional winner at 12% of positions (27% of positions that show an item), never at a majority, and is the modal winner in only 44% of trials. A trial has 5.0 distinct winners on average, and the two halves of the copy have different modal winners in 93% of trials.
- Agreement is higher when the readout is more stable: 27%, 24% and 38% across stability terciles.
- Counting any positional winner as a match does not add signal. Matches rise from 29.3% to 39.0%, but the same criterion applied to other trials’ winners rises from 7.5% to 16.1%, so the excess over chance barely changes (+21.8 vs +22.9 pp). The modal winner does worse than the averaged score.
- 61% of reports match no positional winner at all, so position-to-position ambiguity cannot explain most mismatches.
Condition-2 agreement under three match criteria (454 eligible trials).
| Match criterion | Report matches | Same criterion, other trials (chance) | Excess (pp) |
|---|---|---|---|
| Averaged reference (primary) | 29.3% | 7.5% | +21.8 |
| Modal positional winner | 16.1% | 5.0% | +11.1 |
| Winner at any copied position | 39.0% | 16.1% | +22.9 |
Chance pairs each report with every other same-category trial’s winners.
Least stable trials.
| Trial | Averaged reference | Positional winners in order (– = no item in top 100) | Report |
|---|---|---|---|
| m-grocery-003 | popcorn | tea · – · – · apple · – · – · cookie · – · – · – · apple | peanut |
| m-grocery-012 | apple | tea · youtiao · – · – · crema · – · – · onion · corn · corn · watermelon | mint |
| m-grocery-014 | apple | – · – · water · potato · – · kale · candy · – · – · – · – · corn · corn · watermelon | cranberry |
| m-grocery-032 | champagne | – · – · toothpaste · cake · apple · toothpaste · – · – · – · – · corn · watermelon | cake |
| m-grocery-058 | banana | – · bread · apple · blueberry · – · onion · bread · – · neem · corn · corn · apple | banana |
9Causal swap test (step 8)
For 120 eligible main situations (40 per category, drawn with a fixed seed), we re-ran the hold phase from the same prompt and edited the block-54 residual stream at every copied token. A is the lens reference item; B is a random category item from the judge-labeled pool that is not among the trial’s lens top-10 items and has a single-token form with A’s spacing and casing. With vX = WU[token X]·J54 (unit-normalized), V = [vA vB], c = V+h, the swap is h ← h + α·V(σ(c) − c), where σ exchanges the two coordinates (the J++ release’s swap convention). The control adds a fixed random unit direction orthogonal to span(V), scaled at each position to the norm of that position’s swap edit. After the copy ends, the model answers the condition-2 free-naming question and the answer-required recognition question (A, B and the two next lens items; two orders).
All 120 copies stay token-identical to the original copy in every condition, so the edit never disrupts the copy itself. The mean edit is 3.5% (α = 1) and 6.9% (α = 2) of the residual norm.
- The swap never makes the model name B: 0/120 in every condition.
- The swap does remove A from the report: A is named in 20.0% after the swap vs 32.5% after the norm-matched control (difference -12.5 pp [-18.3, -6.7]; 15 situations lose A under the swap only, 0 the other way; exact McNemar p < 0.001). The report changes in 15.0% of situations after the swap vs 0.0% after the control.
- Recognition does not move at all: the letter chosen is identical in all 480 swap-vs-no-edit comparisons; A is picked in 50.8% and B in 2.5% of responses in every condition.
- Why B is not injected: before the edit, the hidden state’s coordinate on vA is small and usually negative (median -0.45; positive at 43% of positions), and on vB more negative (median -2.70; positive at 14%). Exchanging them mostly pushes A down to B’s level and lifts B only to A’s near-zero level, so the swap is mainly an A-suppression edit. Reports that change move to another common item (Apple → Watermelon or Milk; Japan → France), not to B.
Outcomes by condition (all 120 situations).
| Condition | Copy identical | Edit / ‖h‖ | Names A | Names B | Changed vs no edit | Recog. picks A | Recog. picks B |
|---|---|---|---|---|---|---|---|
| No edit | 120/120 | 0.0% | 32.5% (39/120) | 0.0% (0/120) | — | 50.8% (122/240) | 2.5% (6/240) |
| Swap α = 1 | 120/120 | 3.5% | 20.0% (24/120) | 0.0% (0/120) | 15.0% | 50.8% (122/240) | 2.5% (6/240) |
| Swap α = 2 | 120/120 | 6.9% | 18.3% (22/120) | 0.0% (0/120) | 17.5% | 50.8% (122/240) | 2.5% (6/240) |
| Control α = 1 | 120/120 | 3.5% | 32.5% (39/120) | 0.0% (0/120) | 0.0% | 50.8% (122/240) | 2.5% (6/240) |
| Control α = 2 | 120/120 | 6.9% | 30.8% (37/120) | 0.0% (0/120) | 5.0% | 50.8% (122/240) | 2.5% (6/240) |
Free naming is condition 2 (“not mentioned”). Recognition: 2 orders per situation, answer required.
Paired swap vs norm-matched control. Bootstrap over situations (5,000 resamples); exact McNemar test for binary outcomes.
| Strength | Outcome | Swap | Control | Swap − control (pp) [95% CI] | Discordant (swap only / control only) | McNemar p |
|---|---|---|---|---|---|---|
| α = 1 | Report names B | 0.0% | 0.0% | +0.0 [+0.0, +0.0] | 0 / 0 | 1.000 |
| α = 1 | Report names A | 20.0% | 32.5% | -12.5 [-18.3, -6.7] | 0 / 15 | <0.001 |
| α = 1 | Report differs from no-edit | 15.0% | 0.0% | +15.0 [+9.2, +21.7] | 18 / 0 | <0.001 |
| α = 1 | Recognition picks B | 2.5% | 2.5% | +0.0 [+0.0, +0.0] | — | — |
| α = 1 | Recognition picks A | 50.8% | 50.8% | +0.0 [+0.0, +0.0] | — | — |
| α = 2 | Report names B | 0.0% | 0.0% | +0.0 [+0.0, +0.0] | 0 / 0 | 1.000 |
| α = 2 | Report names A | 18.3% | 30.8% | -12.5 [-18.3, -6.7] | 0 / 15 | <0.001 |
| α = 2 | Report differs from no-edit | 17.5% | 5.0% | +12.5 [+5.8, +19.2] | 16 / 1 | <0.001 |
| α = 2 | Recognition picks B | 2.5% | 2.5% | +0.0 [+0.0, +0.0] | — | — |
| α = 2 | Recognition picks A | 50.8% | 50.8% | +0.0 [+0.0, +0.0] | — | — |
Coordinates before the edit (swap α = 1 run). c = V+h in units of the unit-normalized lens directions; the residual norm at block 54 is about 160.
| Copied positions | Median cA | cA > 0 | Median cB | cB > 0 | cA > cB |
|---|---|---|---|---|---|
| 1,432 | -0.45 | 43% | -2.70 | 14% | 79% |
Reports that changed under the swap (first 12, α = 2; raw answers).
| Situation | A | B | No edit | Swap α = 2 | Control α = 2 |
|---|---|---|---|---|---|
| m-grocery-158 | apple | soy | Apple | Watermelon | Apple |
| m-grocery-146 | apple | candle | Apple | Milk | Apple |
| m-grocery-123 | apple | éclair | Banana | Milk | Milk |
| m-grocery-154 | apple | salsa | Apple | Banana | Apple |
| m-animal-095 | owl | brill | Bear | Elephant | Bear |
| m-animal-030 | cat | pony | Cat | Owl | Cat |
| m-animal-023 | rabbit | cougar | Penguin | Lion | Cat |
| m-animal-143 | squirrel | turtle | Squirrel | Duck | Duck |
| m-country-157 | japan | taiwan | Japan | France | Japan |
| m-country-080 | japan | bangladesh | Japan | Switzerland | Japan |
| m-country-014 | norway | mali | Norway | I cannot reveal the country I silently chose, as my instructions were to keep it | Norway |
| m-country-007 | united kingdom | indonesia | The United Kingdom | The United States | The United Kingdom |
Disclosures
- Six sampled situations were replaced because the reference item had no token in a cased script (no casing pattern to give B); the next situations in the seeded order were used instead.
- B’s token copies A’s spacing and casing (e.g. A = “ UK” gives B = “ INDONESIA”), so the swap exchanges like-formatted tokens. Some B forms are therefore unusual strings.
- The no-edit condition is an addition to protocol v2; it is the reference for “report changed”. Its reports reproduce the original condition-2 answers.
- Mean cosine between vA and vB is 0.11 (range -0.06 to 0.39).
- The edit is applied only during the hold phase (copied tokens); the report question and answer run unedited from the edited cache.
10Log
Step 8 swap ran on 8 GPUs: 120 situations × 5 conditions, all copies identical to the originals. Reports judge-labeled with the frozen report judge.
Step-7 measures: condition-2 agreement 29.3% (permutation baseline 7.5%), β_L = 1.31 [1.16, 1.46], recognition 43.2% (chance 25%). Bootstrap switched from Newton to bisection after Newton oscillated on some resamples. Stopping before step 8, as instructed.
Main synonym merge frozen (14 grocery, 3 animal, 1 country merges after pairwise verification). Recognition questions built from the lens top 4 at block 54 (4 of 1,920 options filled at random); recognition ran on 8 GPUs.
Judge validation: 197/200 token labels and 98/100 report labels correct (hand-checked by Claude). Rerun identity 192/200, so labels are frozen as cached (amendment). Class-word rule enforced. Main-trial tokens labeled (≈42k more calls).
Preliminary token labels done (≈134k judge calls). Readout block 54, K = 10, no stopping rule. Single-call synonym merge over-grouped (lion←tiger); replaced with propose-then-verify merging.
Hold phase finished on 8 H200s in about 5 minutes: 516/516 valid copies, free naming collected in all three conditions.
Stimuli frozen: 12 carriers, 480 main settings (160 per category), 24 preliminary settings. Judge chosen after a 25-token probe (mini over nano).
Appendix
Implementation notes and deviations
- Judge model.
gpt-5.4-mini-2026-03-17, reasoning off, temperature 0, strict JSON schema, one input per call (the judge never sees other tokens, the trial, or the setting). We first triedgpt-5.4-nano; on 25 hand-made probe tokens it labeled incomplete words such as “pomegran” and “banan” as Items (4/25 errors vs 1/25 for mini, the one being a Fragment), so we switched before labeling any data. - Lens log-probabilities are a log-softmax over the vocabulary after removing tokens with no letter or digit (the J++ readout filter), so baseline correction compares like with like.
- Hold-phase and free-naming generation ran for all 516 trials in one pass, before the readout block and K were fixed. Nothing in the hold phase or free naming depends on the block or K, and the main-trial lens data are not analyzed until both are frozen from the preliminary trials. Recognition (which needs the readout block) runs afterwards from the saved post-hold state.
- Settings were generated with
gpt-5.5(5 thematic batches of 60 per category), screened for naming any specific item, food, animal, country, city, nationality or language, screened for category fit, deduplicated against each other and the preliminary settings, and 160 per category drawn with a fixed seed. Frozen before any hold-phase trial. - Carriers are balanced: each of the 12 carriers is used 40 times in the main experiment and twice in the preliminary trials.
- Hand-checks of judge labels (step 0 validation) are done by Claude, not by a human; the sampled labels are listed on this page so they can be audited.
- Fragment labels are noisy (about 72% correct on a check of 47 Fragment labels: many short prefixes such as “ Aust” or “ Cri” are assigned to one country even though they begin several). The Fragment sensitivity analysis should be read with that in mind.
- Step 8 additions. A no-edit condition was added as the reference for “report changed”. B tokens copy A’s casing and spacing. Six sampled situations without a cased-script A token were replaced. The swap is applied at every copied-token forward pass during regenerated hold phases; copies stayed identical in all 600 runs.
- Position stability (section 8) was added in response to a question about ambiguous lens readouts; it is post hoc.