casella.dev AI Scientist in a Straitjacket
Contents
Reading level

Research · October 2026 · Stephen Casella

Putting an AI Scientist in a Cryptographic Straitjacket

A three-stage lookup pathway in Qwen3 gave the agents a concrete prediction to test in a larger model. An explanation of one model became useful enough to guide an experiment in another.

01SummaryQwen3-0.6B and Qwen3-1.7B · 28 layers × 16 heads

TL;DR

  • Ask Qwen3 “Rowan is red. Lumen is blue. What color is Rowan?” Twelve of its 448 answer in three : six question heads help identify which record the question asks about, three router heads carry that to the answer position, and three copier heads copy the color.
  • A sealed guess, that names get stamped onto their colors, failed. Bookkeeping then predicted that about 3.79 would flow through the last word's query (an exploratory estimate, not a conservation law), and a post-hoc measurement came back 3.797.
  • A in the larger Qwen3-1.7B found the same three copier heads and two of the three router heads. Pooled over both models, the router heads' signal moved the answer preference the predicted way on 960 of 960 prompts, a direction-only count pooled across five runs with mixed verdicts; it leaves out the failed structured-format run.
  • Six question-head locations from the small model were tested in the larger one with . The predicted direction held on 92.2% to 100% of held-out prompts, and that study passed every registered gate.
  • When the model answered wrong, one copier head still favored the right color, on all 13 errors in the first study. On held-out four-record prompts, a repair built on the findings fixed 6 errors and broke 1, but failed its preregistered test.
  • Not everything passed. The small model's own three-stage study moved the preference the predicted way on all 192 held-out prompts, yet failed its overall verdict: the unmodified model answered 101 of 128 test prompts against a required 103.

Rowan and Lumen are illustrative. The experiments used fresh single-token words, drawn new for every run. “Answer preference” is the model's preference between two given answer words, such as red and blue.

Stage 0: 13:6 12:6 13:14 14:12 11:9 13:15 work across the question span [p_query..T−1] and write which record matched. Stage 1: 15:4 16:4 17:1 in 0.6B, with 18:7 in place of 15:4 in 1.7B, read it at the final token through their values over the question span, and write a pointer into Stage 2's final-position query (Q_T). Stage 2: 19:5 21:13 22:9 attend to the bound value and copy it through OV into the two-token logit preference.

Status

Passed every registered gatev7 · six-head route, 0.6Bv10 · route search, 1.7Bv12 · six-head transfer, 1.7B

Failed overallv11 · three stages, 0.6Bv8 · repair

v7 passed after three of its thresholds were revised before the run, using earlier outcomes. Everything ran on one laptop, a 24 GB M4 Pro MacBook Pro. The source code is public under Apache-2.0 at scasella/qwen3-auto-interp; the frozen reports, prompts and arrays are private. No one outside the project has checked the results.

New to AI?
Read the large type and skip the drawers. The sixty-second primer below covers everything you need.
Work in interpretability?
, top right, or open any “Under the hood”.The Technical lens is on, and every “Under the hood” drawer opens with it.
v1 … v12?
Names of the study's runs. Each run's pass marks were sealed before it started. v7, v10 and v12 passed every registered gate; the others missed at least one.

Key results

12 heads

in three stages, out of 448 in each model: six question heads, three router heads and three copier heads.

stage 0 · v11 (0.6B), v12 (1.7B) · stages 1–2 · v7 (0.6B), v10 (1.7B) · 18:7 replaces 15:4 in 1.7B

Confirmed · v12, 1.7B

960/960

prompts where transplanting only the router heads' signal moved the answer preference the predicted way, both models pooled.

router heads only · names swapped or question swappedB_upstream_Q & C_upstream_Q · v4–v7 (0.6B) + v10 (1.7B) · direction only · mixed verdicts: only v7 and v10 passed

Descriptive · pooled

63/63no new search

criteria passed when six question-head locations from Qwen3-0.6B were tested in Qwen3-1.7B. Predicted direction on 92.2% to 100% of held-out prompts.

v12 · every registered gate passed · unmodified 1.7B answered 127/128

Confirmed · v12

13/13

model errors where one copier head still favored the right color. Readout right, model wrong.

head 19:5 · v1, inconclusive (115/128 against a required 116) · also 9/9 in the gold/silver follow-up

Descriptive · v1

Fig 1.1 The head grid: 448 heads, twelve lit in three stages

Confirmed · v7Measured · v11
Qwen3-0.6B's 448 attention heads as a 28 by 16 grid, with twelve heads lit in three stagesLayer 0 is at the bottom and layer 27 at the top; head 0 is at the left. Six question heads, 13:6, 12:6, 13:14, 14:12, 11:9 and 13:15, are triangles in layers 11 to 14. Their wires join a rail between layers 14 and 15, marked question, that feeds three router heads, 15:4, 16:4 and 17:1, drawn as diamonds in layers 15 to 17. The router wires join at a pointer node, which fans out to three copier heads, 19:5, 21:13 and 22:9, drawn as circles in layers 19 to 22. Wires from the copiers run to the output, Answer: red.
  • Question heads, layers 11–14: help identify the requested recordStage 0 · L11–14 · at [p_query..T−1]
  • Router heads: carry it to the answer positionStage 1 · read V over the question, write Q_T
  • Copier heads, layers 19–22: copy the valueStage 2 · L19–22 · copy V_value via OV

Twelve of 448 in Qwen3-0.6B · four screening sweeps · the six later heads passed in v7; the three-stage study (v11) missed its accuracy bar

Model
Model

Both sizes have 28 layers of 16 heads, so the two grids share coordinates: a location in one names the same location in the other.

Show a sweep
Read it: each dot is one attention head, 448 in all, with layer 0 at the bottom. Six question heads (triangles) work at the question and feed a rail that the router heads (diamonds) read. The router heads write a pointer that tells the three copier heads (circles) where to look, and the copiers copy the color to the answer. Switch the model to see which head changes in Qwen3-1.7B. Head positions are exact; the wires are schematic. In Qwen3-0.6B, the six later heads passed in v7, after three of its thresholds were revised before the run; the three-stage study (v11) met all 63 mechanism criteria but failed its accuracy prerequisite. In Qwen3-1.7B, the pathway that passed uses 18:7 in place of 15:4, so six locations were carried into a partly rediscovered pathway. Matching locations across the two sizes do not prove the heads are the same component.
Show the numbers
SweepModelLayersHeads screenedFound
v10.6B3, 11, 19, 276419:5
v20.6B15–2212821:13, 22:9
upstream0.6B0–18, at the last word30415:4, 16:4, 17:1
v110.6B0–14, at the question24013:6, 12:6, 13:14, 14:12, 11:9, 13:15
v101.7B15–25, blind17619:5, 21:13, 22:9
v101.7B10–18, blind14416:4, 17:1, 18:7
v121.7Bnone0the six question heads, fixed from v11

The sweeps overlap, so their head counts do not add up to a total. v1 also froze 27:15 and 27:13 as candidates. v7 screened nothing new: it tested the six later heads of Qwen3-0.6B on 64 new key words and passed 5/5 gates and 80/80 checks. v12 screened nothing either: it fixed v11's six locations in Qwen3-1.7B before any test there.

StageJobQwen3-0.6BQwen3-1.7B
0 · question headshelp identify the requested record13:6, 12:6, 13:14, 14:12, 11:9, 13:15the same six, fixed from 0.6B
1 · router headscarry it to the answer position15:4, 16:4, 17:116:4, 17:1, 18:7 (found by search)
2 · copier headsselect the source, copy its value19:5, 21:13, 22:919:5, 21:13, 22:9 (found by search)
Under the hoodpublished post · Report §1 · T2 §2.2, §7

The path: H0 {13:6, 12:6, 13:14, 14:12, 11:9, 13:15} at [p_query..T−1] → U's values over the question span → D's Q_T (Q_final) → V_value (OV) → two-token logit preference, with U = {15:4, 16:4, 17:1} in Qwen3-0.6B or {16:4, 17:1, 18:7} in Qwen3-1.7B, and D = {19:5, 21:13, 22:9} in both.

  • Models: Qwen/Qwen3-0.6B, revision c1899de289a04d12100db370d81485cdf75e47ca: 28 layers × 16 query heads = 448; 8 key/value heads per layer (GQA: query head h uses KV head ⌊h/2⌋); d_h = 128; SwiGLU MLP width 3,072. Qwen/Qwen3-1.7B, revision 70d244cc86ccca08cf5af4e1e306ecf908b1ad5e: 1.72B parameters; the same 28 × 16 query heads with 8 KV heads; d_h = 128; residual width 2,048; MLP width 6,144. BF16 weights. Logit scales are much larger in 1.7B, so compare directions and shares across the models, never raw sizes.
  • Screens: in 0.6B, v1 screened 64 heads at stride 8 (layers 3, 11, 19, 27) and froze 19:5, 27:15 and 27:13; v2 screened all 128 heads in layers 15–22; upstream screened all 304 heads in layers 0–18 at the final token with a two-pass mediation harness; v11 screened all 240 heads in layers 0–14 by patching only across the question span, keeping the final token clean through layer 17 (1,425 candidate coalitions, 8,553 microbatches). In 1.7B, v10 ran a blind screen with no coordinate prior, 176 heads in layers 15–25 and 144 in layers 10–18 (2,134 microbatches); v12 searched nothing.
  • Heads were selected on calibration prompts, so calibration results are selection evidence, not confirmation. The selected heads are not shown to be unique or exclusive.
  • v11 (0.6B, three stages): every route moved the preference the predicted way on all 192 held-out prompts, and on the 64 prompts used to select the heads; all 63 mechanism criteria passed. It failed its overall verdict at Gate 0: the unmodified model answered 101 of the 128 main held-out prompts against a required 103 (78.91% against 80%).
  • v12 (1.7B, transfer): Gates 0–4 passed with 63/63 criteria, and the unmodified model answered 127 of 128 main held-out prompts. The three-stage routes ran in the predicted direction on 92.2% to 100% of held-out prompts across routes and splits; the low end is C_hop0_qspan on Primary, 1.15 logits at 92.19%. The relay the six heads fed into came from v10's search and uses 18:7 in place of 15:4.
  • 960/960 is the pooled direction count (sign of Δm only) for B_upstream_Q and C_upstream_Q across v4–v7 (0.6B) and v10 (1.7B): five disjoint key pools, 192 held-out prompts each (128 Primary red/blue plus 64 Vocabulary green/yellow). B_q_final and C_q_final were 959/960. Verdicts were mixed: v4, v5 and v6 failed other sealed checks, and only v7 and v10 passed every gate.
  • v7 passed 5/5 gates and 80/80 checks after three of its thresholds were revised before the run, using earlier outcomes: accuracy from 85% to 80%, and two attention-shift bars. Earlier failed studies were not regraded.
  • ≈3.79 is 4.5601 − 0.7706: the query-swap total minus the key-stamp share, treating the 0.047-logit value term as zero. The 3.797235 measurement came from a read-only diagnostic on the frozen v4 data; v7 then tested the final-query path prospectively. Counting the value term, the prediction would be 3.7423, 0.055 from the measurement Arithmetic. Finding 2 walks through it.
  • 13/13 and 9/9: head 19:5's readout favored the correct value on all 13 model errors in v1 and on all 9 calibration errors in the gold/silver follow-up. v1 was inconclusive (115 of 128 against a required 116) and the gold/silver follow-up failed a calibration prerequisite, so these are descriptive findings from those runs.
  • The repair (v8) had its settings chosen on calibration prompts, then frozen. On held-out four-record prompts it fixed 6 errors and introduced 1 (+5 net of 192), against 10 fixed and 7 broken for naive amplification. It failed three of its four gates: on the main held-out set it did not improve the margins of the recency errors it targeted, and on fresh colors its net gain only tied naive amplification. A separate gold/silver repair fixed 2 and broke 2.
  • The two fresh runs per confirmation show the numbers repeat exactly; they are not extra samples. The separate audits reuse some of the same NumPy arithmetic as the production code. No one outside the project has reviewed the work.
  • Agents: Codex CLI calls running gpt-6-luna proposed and reviewed explanations; frozen, executable tests decided which ones survived. Hardware: one 24 GB Apple M4 Pro MacBook Pro (MPS).
  • Code: github.com/scasella/qwen3-auto-interp (Apache-2.0, source only), with a results ledger for every study. The frozen reports, prompt sets and saved arrays are private, so a public clone cannot rerun the audits.
  • Scope: short, controlled lookup prompts with two or four records, in two related Qwen3 models. Answer preference is the preference between two specified answer words at the next token; free-form generation was not tested.

02PrimerFor newcomers · about a minute

How a language model looks something up, in sixty seconds

Schematic

Four ideas are enough to follow everything on this page. Each one takes about fifteen seconds.

The drawings use the example “Rowan is red. Lumen is blue. What color is Rowan?” Rowan and Lumen are illustrative; the experiments used fresh single-token words.

Fig 2.1 Four ideas, one drawing each

Schematic
  1. Words become columns.

    The model reads your prompt as a row of , which are words or pieces of words. Each token gets its own , and that column rises through 28 . Every layer reads the column and adds to it. The column above the last word, Answer:, is where the reply takes shape.

    Each word of the prompt gets a column that rises through 28 layersSeven word tiles, Rowan, red, Lumen, blue, color of, Rowan and Answer:, each under a column that crosses 28 layer lines, layer 0 at the bottom. The Answer: column is outlined, and a small packet has risen to its top, where the reply takes shape.
  2. Each layer has 16 attention heads.

    An is a small unit that looks back at earlier words and copies something useful into the current column. Every layer has 16 of them, so each of the two Qwen3 models here has 28 × 16 = 448. A head is named by its layer and number, counting from 0: 19:5 is .

    The 448 heads as a grid, with layer 19 magnified28 rows of 16 dots, one dot per head, layer 0 at the bottom. Row 19 is highlighted and magnified into 16 heads numbered 0 to 15. Head 5 is lit and labelled 19:5. 28 layers times 16 heads is 448.
  3. A head decides where to look, then copies what it finds.

    At the last word, a head sends out a , a description of what it is looking for. Every earlier word carries a key, a label that says what the word is, and a value, its content. The head compares its query with each key and copies the value of the best match. The query and keys decide where to look. The values decide what gets copied. This query is a list of numbers inside the model, separate from the question in the prompt. Some heads work earlier, at the question itself, and prepare information there for later heads to read. On this page teal marks that work at the question, orange marks where-to-look and blue marks what gets copied.

    A query aims at one word and its value is copied backA diamond lamp stands on the Answer: column and casts an orange cone, the query, onto the word red, the best match. Small key marks sit under every word. A teal bracket under the question words marks where earlier heads prepare information. A blue bead, red's value, has travelled from red back to the lamp.
    • prepared at the question (earlier heads)
    • where to look (query)
    • labels on each word (keys)
    • what gets copied (value)
  4. Watch a tug-of-war, and transplant one part at a time.

    At the top, the model scores every possible next word. We watch two of them, say red and blue. Picture a tug-of-war rope between them, with a knot. The knot sits toward whichever word is ahead, and its distance from the middle is the , counted in . To test one part of the model, take a whose right answer is blue. into the model while it reads the red prompt, and change nothing else. If the knot slides toward blue, that part was carrying the answer.

    Schematic · toy numbers

    A tug-of-war rope between blue and red, in pointsToy numbers. The rope runs from blue ahead on the left to red ahead on the right, from minus 6 to plus 6 points. Before the transplant the knot sat at plus 4. After one part is copied in from the twin prompt, it sits at plus 1, closer to blue.
    Knot at +1.0 points: leaning red.
Read it: the reply takes shape above the last word. Heads look back and copy: teal marks work done earlier at the question, orange marks where a head looks, blue marks what it copies. A transplant that drags the knot toward the twin's answer shows which part carried that answer. The drawings are schematic, and the rope uses toy numbers.
Show the numbers
ItemValueNote
Layers28numbered 0 to 27, from the bottom
Attention heads per layer16numbered 0 to 15
Attention heads in all44828 × 16
Example head19:5layer 19, head 5
Knot before the transplant+4 pointstoy number
Knot after the transplant+1 pointtoy number
“A coin flip”lead under 0.5caption rule for the toy
“Clearly ahead”lead over 3caption rule for the toy
Under the hoodT2 §2.2, §3.1–3.2
  • Residual stream. The “column of numbers” is the residual stream at one token position. Each layer's attention heads and MLP read it and add their outputs back into it, and the last position's stream is read out into next-token logits.
  • QK and OV. A head's query–key (QK) circuit sets its attention pattern, where it looks; its output–value (OV) circuit sets what it writes back, what gets copied. The framing follows Elhage et al. 2021, A Mathematical Framework for Transformer Circuits, and Olsson et al. 2022, In-context Learning and Induction Heads.
  • GQA. Qwen3-0.6B's 16 query heads per layer share 8 key/value heads, so query head h uses KV head ⌊h/2⌋. d_h = 128, and the SwiGLU MLP width is 3,072. Qwen3-1.7B has the same head layout (16 query heads sharing 8 KV heads, d_h = 128), with residual width 2,048 and MLP width 6,144. Because two query heads share each K/V head, head-level interventions at the final position T are applied as anchored float32 deltas on that one query head's output, without editing the shared K/V projections (T2 §2.2). So a “K” or “V” patch recomputes this head's attention at the last word with the donor's keys or values and changes only this head's output. The other query head on the same K/V head is left as it was.
  • The question span. Six heads in layers 11–14 (13:6, 12:6, 13:14, 14:12, 11:9, 13:15) act at positions p_query..T−1, the question and the words after it, before the last token T. The router heads at T read what they write there through their values. Finding 3 traces it.
  • Margin. m(x) = ℓ(x)·(logit_y0 − logit_y1), signed so that m > 0 when the model prefers the correct (bound) color. The effect of a patch is Δm = m_clean − m_patched, and Δm > 0 means it pushed toward the twin's answer. Direction % is the share of prompts with Δm > 0. It is neither accuracy nor a flip rate. The preference is always between two specified answer words at the next token; free-form generation was not tested.
  • Points. One point (logit) of two-way lead multiplies the odds between the two words by e ≈ 2.7. This follows from softmax: the ratio of two words' probabilities is e raised to their logit difference; this page never turns a specific result into odds.

03SetupThe input · 2 × 2 × 2 = 8 versions

The test: two facts, one question and three switches

Schematic prompt

Every test is a short prompt: two facts that each pair a made-up name with a color, then a question that asks for one name's color. The team built prompts in families of eight by flipping three . Each flip changes the right answer, and each for a different reason. That is what lets you take the machine apart.

Switch A swaps the colors between the facts. Switch B asks about the other name. Switch C swaps the names between the facts, and leaves the question word for word the same. Keep an eye on switch C. It is how the study found that the pointer sits in the last word's query, and then traced that pointer back to work done at the question itself.

Fig 3.1 The three switches

Schematic

Rowan is red.

Lumen is blue.

What color is Rowan? Answer: → red

Rowan and Lumen are illustrative. The experiments used fresh single-token words, drawn new for every run and never reused.

The original prompt.

8 versions of one question

Now: the original

Right answer: red

(k_order, c_order, q_key) = (0, 0, 0)

Color words

Color words

The heads were found with red/blue. Green/yellow tests whether they transfer. Gold/silver appears in a follow-up that failed a calibration prerequisite, and again with fresh words in the v8 repair run.

Read it: each switch changes the right answer for a different reason. A moves the colors, B changes the question, and C moves the names while the colors and the question stay exactly where they were. The shaded line is the fact that holds the asked-for name, so the answer comes from it. Schematic: Rowan and Lumen are illustrative.
Show the numbers
Switches onFirst factSecond factAsks aboutAnswer
The current version is marked. Each family of eight contains all of these; “none” is the original prompt.

Fig 3.2 What stays the same

SwitchColor words in the factsWhich name sits in each factName in the questionWhere the right answer sitsDonor
Swap the colorsswappedsamesamesame place(k_order, 1−c_order, q_key)
Ask about Lumensamesamechangedmoves to the other fact(k_order, c_order, ¬q_key)
Swap the names between the factssameswappedsamemoves to the other fact(1−k_order, c_order, q_key)
Read it: Switch A leaves the answer in the same place, so it cannot reveal anything about where to look. Switch C keeps the question identical, so any effect it shows cannot come from the question's wording. A signal that only carried the name Rowan would be the same in both versions; a signal that changes under switch C has taken in which fact belongs to Rowan.
Under the hoodT2 §2.3, §3.1–3.2, §4.1–4.2, §7

What each switch keeps. Switches A and C keep the same multiset of tokens (the same tokens, rearranged), the length and the color positions (p1, p2); switch C also keeps the last 8 tokens. Under switch B every earlier context token is identical and only the asked-for name (the queried key) changes, so switch B makes no claim about keeping the same tokens.

Notation. A prompt is x = (k_order, c_order, q_key). Switch A is Axis A, the value-color swap (k_order, 1−c_order, q_key). Switch B is Axis B, the query swap (k_order, c_order, ¬q_key). Switch C is Axis C, the context-key swap under a fixed query (1−k_order, c_order, q_key). Each prompt has three matched opposite-answer donors inside its group of eight.

What each donor is used for. Axis A donors separate values from routing (A_ov_color, A_ov_other, A_qk). Axis B donors test the final query (B_q_final, and B_upstream_Q through the upstream heads). Axis C donors test keys against the query (C_k_color, C_q_final, C_ov_color, C_upstream_Q). Every effect is the drop in the signed margin, Δm = m_clean − m_patched, so Δm > 0 means the patch pushed toward the donor's answer. "Direction %" is the share of prompts with Δm > 0; it is not answer accuracy.

What each switch can rule out.

  • Switch A keeps the answer's position, so it isolates what the copiers carry (OV). A_qk should sit near 0 by design, as a signed median; single prompts can still move, and the effects cancel on average (v7 Primary / Vocabulary: +0.0050 / −0.0199 logits signed, 0.5150 / 0.2642 absolute). A tiny A_ov_other shows the copied value comes from the two color positions.
  • Switch B keeps every earlier context token, so B_k_context and B_ov_context must be exactly 0 by causality; that zero is a sanity check. It isolates the final query, but it cannot tell a copy of the question apart from a match already made against the facts.
  • Switch C keeps the question and the color tokens, so a context-free copy of the question (the planted literal_query_only_control) scores 0.0 through the router heads. A nonzero C_upstream_Q shows the final query depends on the facts, and C_q_final against C_k_color weighs the query against key stamps.

At the last word, none of the three shows where the question is first compared with the facts. Applied with patches across the question span [p_query..T−1] instead, switch C is how the later runs (v9, v11, v12) traced the match back to the question heads; Finding 3 has the numbers.

Datasets per run (v4–v7, v10–v12).

  • Calibration: 8 groups, n=64, red/blue.
  • Primary: 16 groups, n=128, red/blue, split across templates H1 and H2.
  • Vocabulary: 8 groups, n=64, green/yellow, split across H1 and H2.

. An exact one-sided binomial test over group means. Floors: 2−16 = 1.5259×10−5 (16 groups) and 2−8 = 0.00390625 (8 groups). A p at its floor means every group mean moved the predicted way; it is the smallest value this test can give. A floor p is a statement about group means and says nothing about size. A row can sit at the floor while some single prompts move the other way (v7 A_ov_color on green/yellow: 78.13% direction, which is 50 of 64 prompts Arithmetic, with p at the 8-group floor). With 8 groups, a p ≤ .01 bar can be met only at the floor, so it requires every group mean to move the predicted way Arithmetic.

Keys (the names). Fresh single-token words from a response-blind whitelist, with a new seed each run (v7: 64 keys, seed 20261023; v10: seed 20261026; v11: seed 20261027; v12: seed 20261028, from an expanded 4–9 letter whitelist). “Rowan” and “Lumen” on this page are illustrative: the write-up never lists a real key word.

04The harnessTightened run by run, v1 → v12

Five locks on an AI scientist

In place · self-reported

AI agents, Codex CLI calls running gpt-6-luna, proposed explanations and reviewed the results. Frozen, executable tests decided which ones survived; the agents could not turn a failed test into a pass. Left unsupervised, an agent can take classic shortcuts: testing on the prompts it tuned on, dropping the prompts the model got wrong, nudging a pass mark after seeing the results, or rounding a number to tell a cleaner story. The harness blocks each one with code.

Try the first lock: change one character of a sealed rule and watch its fingerprint change completely.

Fig 4.1 The five locks

In place · self-reported, v1 to v12
  1. 1

    Seal the plan.

    stopschanging the rules after seeing the data.

    Before the model runs, the plan is : every question, pass mark and line of code gets a . Change one byte afterwards and the audit fails.

    Demo: this hashes the text in the box, in your browser.

    Fingerprint sealed before the run

    Fingerprint of the box now

    Characters changed: 0 of 64

    Matches the seal
    v7

    The capstone's real fingerprint: a5956691…a899 · commit ff46c4b

    manifest.json · SHA-256 of source modules, tests, lockfiles, prompt strings, token-ID arrays, donor indices, frozen head coordinates and comparators, written before the first target forward pass · v7: a59566919a93607e7eff114aa4342807978294ce2b75577cd097fbb55ab9a899 · pre-inference commit ff46c4b

  2. 2

    Retire what you peeked at.

    stopstuning on the test.

    Any opened to diagnose an error is locked away for good. Every new idea gets fresh prompts and new key words.

    The lock at work · v9 preflightCaught before inference

    A bug in a file pattern would have reused 26 retired key words. The harness caught it in preflight, before any held-out prompt ran.

    Protected inventory checked before and after every run · keys from a response-blind whitelist, fresh seed per run: 20261023 (v7) to 20261028 (v12) · v9: a worktree glob bug caught and quarantined before the first held-out forward pass

  3. 3

    Test the grader on decoys first.

    stopsa grader that passes anything.

    • The right mechanism, built in by handplanted_pointer_modelmust passPASS
    • Copies the question word onlyliteral_query_only_controlmust fail Subgate 2CFAIL
    • Stamps keys on the answer words onlydirect_k_color_only_controlmust fail Gate 1C and Subgate 2CFAIL
    • Noise onlynuisance_controlmust failFAIL
    • Reversed outputreversed_controlmust failFAIL
    • Does the matching at the last word onlyfinal_token_hop0_onlymust failmust fail

    In the capstone (v7), the grader passed the built-in mechanism and rejected all four decoys (Gate 4). The three-stage work later added a planted model that does the matching at the last word only, which the grader must fail.

    Executable synthetic models in float64; the grader is tested on them before each confirmation run is frozen · T2 §2.3 · planted negative controls named in the Report: literal_query_only, direct_k_only, final_token_hop0_only · 202+ unit and planted-control tests

  4. 4

    Run it twice, audit it separately.

    stopsflukes and hidden bugs.

    Which confirmation runs to show

    1,212

    saved arrays identical, (v12, Qwen3-1.7B)

    84 pairs of saved files, one pair of zipper teeth each

    Separate numerical checks recompute the reported numbers from the saved arrays; they reuse some of the production code’s NumPy arithmetic. The two fresh runs show the numbers repeat exactly. They are not extra samples.

    Two fresh OS processes per confirmation · bfloat16 weights, float32 deltas · one FIFO MPSBatchWorker · batch ≤ 64 · 71 file pairs (v5–v7), 66 (v10), 84 (v12) · maximum delta audit error 0.00000000 in v10 and v12

  5. 5

    Let code write the numbers.

    stopsmisquoted results.

    55 of 56 matchedone review, v4-confirm

    Then code wrote every numbereach one bound by code and verified

    83/83v7

    109/109v10

    31/31v12

    In one review, 55 of 56 quoted numbers matched exactly. One was off in the 13th decimal place, a negligible amount, and the checker caught it. From then on the AI only names which number it means, and code writes the value: 83 of 83 in v7, 109 of 109 in v10 and 31 of 31 in v12.

    metric_refs: the reviewer selects metric keys and code binds the float64 values · drift 4.88×10−13 (v4-confirm) · reference-bound claims verified: 83/83 (v7), 109/109 (v10), 31/31 (v12)

Read it: each lock blocks one shortcut. The plan is sealed before the model runs, inspected test sets are retired, the grader has to catch decoys first, every confirmation runs twice and is audited separately, and code writes every number. Lock 1 is a live demo that hashes the text in your browser; the other four show reported numbers. Counts are exact; positions are illustrative. Every component is self-reported. The source code is public under Apache-2.0; the frozen reports, prompt sets and saved arrays are private, so a public clone cannot rerun the audits.
Show the numbers
LockWhat is reportedValueWhere
1 · SealManifest SHA-256a59566919a93607e7eff114aa4342807978294ce2b75577cd097fbb55ab9a899v7 · commit ff46c4b
1 · DemoFingerprint of the v1 "≥ 90.0% (116/128)" ruleb24c626810253cb7e0ffca314df044334d089346b5a7ec0b965bcad7127a60e1this page
1 · DemoFingerprint of the nudged "≥ 89.8% (115/128)" rule7ff57e8e13dba21d7f9f13955dac96d99561ea618aef4270d380fd7b28543e01 (60 of 64 characters differ)this page
2 · RetireProtected files1,053by the capstone (v7)
2 · RetireProtected files1,416after v8-repair
2 · RetireProtected file references verified21,073by v12
2 · RetireRetired keys a glob bug would have reused, caught in preflight26v9
3 · DecoysBuilt-in mechanism passed; decoys rejected1 of 1; 4 of 4v7 Gate 4
3 · DecoysPlanted negative control added for the three-stage workfinal_token_hop0_onlyReport
3 · TestsUnit and planted-control tests202+Report
4 · TwiceSaved arrays bit-identical across two processes655 of 655 (71 file pairs)v5–v7
4 · TwiceSaved arrays bit-identical across two processes612 (66 file pairs)v10
4 · TwiceSaved arrays bit-identical across two processes1,212 (84 file pairs)v12
4 · AuditLargest disagreement vs tolerance≤ 1.53×10−5 vs 3.0×10−5T2 §2.4 (manuscript)
4 · AuditMaximum delta audit error0.00000000v10, v12
5 · CodeQuoted numbers that matched55 of 56v4-confirm review
5 · CodeThe one that drifted0.03109455108691406 vs 0.03109455108642578 (4.88×10−13)v4-confirm review
5 · CodeNumbers bound by code and verified83 of 83; 109 of 109; 31 of 31v7; v10; v12

The locks held even when they cost the team a result. In the first run, the model itself had to score at least 90% before anything else counted. It scored 115 of 128, which is 89.84%, one prompt short. The harness refused to round up and marked the run inconclusive, even though the head under study passed every one of its own checks.

Fig 4.2 One prompt short

Measured · v1 (inconclusive)

115/128 = 89.84%

The base model's score in the first run (v1), one prompt short of the sealed bar.

Inconclusive · do not scale

The head under study, 19:5 (), passed every head-level check on these same 128 prompts (see Finding 6).

Read it: the model needed 116 right answers out of 128 and got 115, so the sealed rule marked the run inconclusive. Every bar was sealed before its run, and later runs set their own. The capstone (v7) passed after three of its thresholds were revised before the run, using earlier outcomes: accuracy from 85% to 80%, and two attention-shift bars. Earlier failed studies were not regraded. Counts are exact; positions are illustrative.
Show the numbers
ItemValueRun
Base model, unassisted115/128 (89.84375%)v1, 128 held-out prompts
Sealed bar≥ 90.0% (116/128)v1
Short by1 promptv1
VerdictINCONCLUSIVE, do not scalev1
Head 19:5 read-out on the same prompts126/128 (98.4375%)v1
Capstone base-accuracy bar≥ 80.0% on every split, revised from 85% before the runv7
Under the hoodT1 P1 · T2 §2.1–2.4, App A · doc §5.4–5.6 · Report · the published write-up

Why build this? In October 2026, an essay by Nick Cammarata, "Neural Networks Are Already Clean", argued that neural networks are more legible than many assumed and that automated AI scientists could speed up interpretability research. Other researchers pushed back, calling for rigorous evaluation and for explanations of whole circuits (MIT Technology Review, Oct 19, 2026). This project tried the automated approach under strict, sealed rules.

Who did what. The agents were Codex CLI calls running gpt-6-luna, which proposed and reviewed explanations. Frozen, executable tests decided which ones survived.

Lock 1 · sealed plan (H01). manifest.json records SHA-256 digests of source modules, tests, lockfiles, prompt strings, token-ID arrays, donor indices, frozen head coordinates and comparators before the first target forward pass. v7 manifest: data/bounded-poc-v7-capstone/manifest.json, SHA-256 a59566919a93607e7eff114aa4342807978294ce2b75577cd097fbb55ab9a899, pre-inference commit ff46c4b. This is hash-locked pre-registration (SHA-256 fingerprints committed before inference). It gives tamper-evidence; it keeps nothing secret, and the write-up describes no third-party timestamp.

The demo. The box is hashed as UTF-8 with the browser's built-in SHA-256. The demo rule is v1's base-accuracy prerequisite. Precomputed fallbacks: the 90.0% rule gives b24c6268…60e1 and the 89.8% rule gives 7ff57e8e…3e01; 60 of 64 characters differ.

Lock 2 · retired test sets (H02). Once a held-out split is evaluated or inspected, its files join a protected inventory checked before and after every later run: 1,053 protected files by the capstone (v7), 1,416 after v8-repair, and 21,073 protected file references verified by v12. New keys come from a response-blind whitelist with a fresh seed per run, from 20261023 (v7) through 20261028 (v12); v10’s 64 keys excluded 1,229 retired keys. During v9’s preflight, the harness caught and quarantined a worktree glob bug that would have reused 26 retired keys, before any held-out forward pass ran.

Lock 3 · planted models (H03). Executable synthetic models in float64:

  • planted_pointer_model (the right mechanism): must pass every gate.
  • literal_query_only_control (copies the literal question word into the final query, without resolving which row holds it): must fail Subgate 2C.
  • direct_k_color_only_control (stamps keys onto the answer words, with no pointer in the query): must fail Gate 1C and Subgate 2C.
  • nuisance_control and reversed_control: must fail.
  • final_token_hop0_only: a planted negative control added for the three-stage work. The Report lists it by name only; the plain description above is our reading of the name.

Tests: 202+ unit and planted-control tests (Report). The earlier manuscript appendix reported 103 unit tests and 66 Metal hardware regressions passed.

Lock 4 · two runs, separate audits (H04, H05).

  • Two fresh OS processes per confirmation; bfloat16 weights; float32 deltas; a single FIFO MPSBatchWorker; batch ≤ 64. Bit-identical saved arrays: 655 across 71 file pairs in v5–v7, 612 across 66 pairs in v10 (Qwen3-1.7B), and 1,212 across 84 pairs in v12 (Qwen3-1.7B), with a maximum delta audit error of 0.00000000 in v10 and v12.
  • Anchored delta: Hpatched = BF16(Hmeas,clean + [H̃rec,patched − Hrec,clean]FP32). Fused BF16 attention and explicit FP32 reconstruction differ by ≤ 0.045, and the self-patch identity error is 0.00000000.
  • The two fresh runs per confirmation show the numbers repeat exactly; they are not extra samples. Generalization comes from the disjoint key pools and template variations (T2 §7).
  • The audits recompute the attention probabilities (after position encoding), masked value deltas, group sign tests and gate booleans from the saved arrays. The manuscript reports agreement to ≤ 1.53×10−5 against a 3.0×10−5 tolerance. They reuse some of the same NumPy arithmetic as the production code.

Lock 5 · reference-bound review (M03, M04). In v4-confirm, 55 of 56 floating-point claims matched the saved arrays; one drifted by 4.88×10−13 (0.03109455108691406 vs 0.03109455108642578). From v5 on, the reviewer picks metric keys (metric_refs) and code binds the float64 values: 83/83 in v7, 109/109 in v10 and 31/31 in v12. Narrative interpretation stays advisory. In the gold/silver run the reviewer read a table showing that "zeroing 19:5 resulted in 0 errors rescued" as evidence that 19:5 was not helping; the inversion was caught during adjudication.

The first run's bar (M05). v1 sealed a global prerequisite of unassisted ≥ 90.0% (116/128). The model scored 115/128 (89.84375%), so the verdict was INCONCLUSIVE, even though 19:5 passed every head-level gate (read-out 126/128, 98.4375%). Bars differed between runs: v4 was rejected partly at 88.3% / 85.9% against 90%, and the capstone’s Gate 0 required ≥ 80.0% on every split after its accuracy threshold was revised from 85% before the run, using earlier outcomes. Earlier failed studies were not regraded.

Limits. Cheat-resistant: it blocks the shortcuts listed. Bars for a new run can still be chosen with knowledge of retired runs, as v7’s revised thresholds show. Everything here is self-reported, and no one outside the project has reviewed the work. The source code is public under Apache-2.0 in scasella/qwen3-auto-interp, with the harness and its mathematics documented. The frozen reports, prompt sets and saved arrays are private, so a public clone cannot rerun the audits.

05Finding 1Layers 11–22 · v2, upstream, v7, v10, v11

Three stages, twelve heads

Confirmed · v7 (stages 1 and 2)Measured · v11 (stage 0)

Ask the model “Rowan is red. Lumen is blue. What color is Rowan?” and it answers red. Inside, twelve pass that answer along in , from the question to the copied word.

Rowan and Lumen are illustrative. The experiments used fresh single-token words, drawn new for every run.

  1. 0Connect the question to the facts. Six earlier heads, in layers 11 to 14, work around the question and the words after it. They shape a signal that depends on which fact answers the question.
  2. 1Carry it to the answer position. Three heads in layers 15 to 17 read from the question and bring that information to the last word, where the model is about to answer.
  3. 2Select the source and copy its value. Three later heads, in layers 19 to 22, use that signal to aim their attention at a value in the facts and copy it into the answer.

Driving a change through all three stages moved the model's answer preference in the predicted direction on all 192 held-out prompts, and on the 64 prompts used to select the heads. That study (v11) met all 63 of its mechanism criteria but failed its overall verdict: the unmodified model answered 101 of 128 prompts correctly, against a required 103. Finding 3 tells how the first stage was found.

Fig 5.1 Three stages, one answer

Map · layers to scale, positions schematic
The three-stage pathway in Qwen3-0.6BColumns are positions in the prompt: the two facts, the question, and the answer position. Rows are layers 11 to 22. Six stage-0 heads in layers 11 to 14 sit at the question. Three stage-1 heads in layers 15 to 17 sit at the answer position and read the question through their values. Three stage-2 heads in layers 19 to 22 attend back to red in the first fact and copy it into the answer.
  1. Stage 0 · layers 11–14 · at the question

    Connect the question to the facts

    Six heads work around the question and the words after it. The signal they shape depends on which fact answers the question.

    13:612:613:1414:1211:913:15

    Found by screening at the question (v11) · Finding 3

  2. Stage 1 · layers 15–17 · at Answer:

    Carry it to the answer position

    Three heads read the question region through their values and write a pointer into the copiers' query.

    15:416:417:1

    upstream run · passed in v7 · Finding 2 · Qwen3-1.7B uses 16:4, 17:1, 18:7

  3. Stage 2 · layers 19–22 · at Answer:

    Select the source and copy its value

    Three heads use the pointer to aim at the matching color in the facts and copy it into the answer.

    19:521:1322:9

    v2 · passed in v7 · the same three in Qwen3-1.7B (v10)

Read it: the question goes in at the bottom. Stage 0 works at the question, stage 1 carries what it wrote to Answer:, and stage 2 uses it to fetch red from the first fact. The pulse follows that hand-off. Qwen3-0.6B. One row per layer, drawn to scale; positions in the prompt and within a layer are schematic. In Qwen3-1.7B, stage 1 uses 18:7 in place of 15:4.
Show the numbers
How each stage was found, and what it carried. Heads were selected on calibration prompts, so calibration results are selection evidence; the rows below quote held-out prompts unless marked.
StageQwen3-0.6BQwen3-1.7BHow it was foundWhat it carried
0 · question heads13:6, 12:6, 13:14, 14:12, 11:9, 13:15the same six, carried over with no new search (v12)screen of all 240 heads in layers 0–14, at the question only (v11)three-stage route: predicted direction on 192/192 held-out prompts and 64/64 selection prompts (v11, failed overall); 92.2%–100% of held-out prompts in 1.7B (v12, passed)
1 · router heads15:4, 16:4, 17:116:4, 17:1, 18:7 (blind search of 144 heads, layers 10–18, v10)screen of all 304 heads in layers 0–18 at the last word (upstream)5.1613 of the 5.5546-logit where-to-look effect (92.9%), 100% direction (upstream)
2 · copier heads19:5, 21:13, 22:9the same three (blind search of 176 heads, layers 15–25, v10)screen of all 128 heads in layers 15–22 (v2)61.62% of the gap, 128/128 (v2); 68.85% of the gap in 1.7B (v10)

Start at the end of the relay. When the model reaches Answer:, head 19:5 () puts about three-quarters of its attention on a single word: the color paired with the name you asked about. Then it copies that color forward. Two later heads, 21:13 and 22:9, do the same job.

The three copiers work as a . Swap just their outputs for the ones from a and the model's preference swings toward the twin's answer by 61.62% of the gap between the two answers, on every one of 128 prompts.

The copying is tied to the color words. In the capstone (v7), swapping only what the copiers take from the two color positions moved the preference by a median of 4.14 , against a median absolute 0.02 elsewhere. In the larger Qwen3-1.7B, a blind search picked the same three copier heads, and the same swap moved 68.85% of the gap between the answers, 265 times more than the swap at every other position (v10).

Fig 5.2 Stage 2: where the copier looks, and what it carries

Measured · v2 and upstream (both runs failed for unrelated reasons)

where to look: row 1Q_final → p1

Rowan is red.

Lumen is blue.

What color is Rowan? Answer:

→ red

Simplified example. Rowan and Lumen stand in for real single-token words, drawn fresh for every run and never reused.

The original prompt. The copiers read row 1.

coalition of 19:5, 21:13, 22:9 · upstream run · red/blue

Thread width: how much of head 19:5's attention, at Answer:, lands on each word (two-row prompts, v2)

  • 76.88%the color in the row being read
  • 13.59%the other color
  • 3.32%the two names
  • 0.41%punctuation
  • ≈6%other words, not drawn 1 − 0.942
Read it: at Answer:, head 19:5 looks mostly at one word, the color in the row the pointer picks, and copies it to the answer. Swap the colors and the copied word changes while the pointer stays. Ask about Lumen and the pointer, and the heavy thread, move to row 2. Thread widths are head 19:5's own attention (v2). The readout numbers are for all three copiers together (upstream run). Other words get about 6% of the attention and are not drawn.
Show the numbers
Head 19:5's attention at the last word, two-row prompts (v2). The last row is our arithmetic.
Where 19:5 looksShare of attention
The asked-for color (bound value)0.7688 (76.88%)
The other color (distractor value)0.1359 (13.59%)
Names (both)0.0332 (3.32%)
Punctuation (delimiters)0.0041 (0.41%)
Everything else, Σ 1 − 0.942about 6%
The three copiers together (19:5, 21:13, 22:9), upstream run. Median change, with the share of prompts that moved the predicted way.
SwitchPathRed/blueGreen/yellow
A · swap the colorsCopy path (OV-color)5.3156 (100.00%)6.1556 (100.00%)
A · swap the colorsWhere-to-look path (QK)−0.0178−0.0578
B · ask about the other nameWhere-to-look path (QK)5.5546 (100.00%)6.1784 (100.00%)
B · ask about the other nameThe facts' values (context OV)0.000000 (exact)0.000000 (exact)
Where head 19:5's own effect comes from under switch A (v2), in points.
Part transplantedEffect
Whole head (total)2.7601
Only the color positions (source_color)2.7489
Every other position (source_other)−0.0021 (46.88% direction)
What it copies from the colors (ov_color)2.6470 (96.09% direction)
Where it looks (qk)−0.0080

Every head does two jobs: it decides where to look, and it copies what it finds there. Its handle the first job, and its values the second. The pull those jobs apart. Flip switch A and only the copied value changes. Flip switch B and only the where-to-look path changes. That split is what lets the copiers' pointer be traced back to the router heads below them.

Fig 5.3 Each switch moves exactly one path

Measured · upstream run (failed a per-head gate) · pattern passed in v7

Copy path(OV)what gets copied

Where-to-look path(QK)which row gets read

Swap the colorsswitch A

Ask about the other nameswitch B

Word pair
Read it: each switch moves one path and leaves the other near zero. The exact zero is guaranteed by the design, because the facts did not change, so it is a sanity check. The evidence is the two large bars, each moving the same way on every prompt. All four cells share one 0 to 6.5 point scale.
Show the numbers
Three copiers together, upstream run. Median change in points, with the share of prompts that moved the predicted way.
CellRed/blueGreen/yellowNote
A · copy path (OV)5.3156 (100%)6.1556 (100%)
A · where-to-look (QK)−0.0178−0.0578near zero
B · copy path (OV)0.0000000.000000exactly 0 by construction
B · where-to-look (QK)5.5546 (100%)6.1784 (100%)
Under the hoodv2 · upstream · v7 · v10 · v11 · T1 P4, P6 · T2 §4.1, Table 2, §7 · §5.4, §5.6

The map (Fig 5.1). Stage 0, H0 = {13:6, 12:6, 13:14, 14:12, 11:9, 13:15}, works across the question span [p_query..T−1]. Stage 1, U = {17:1, 16:4, 15:4} in Qwen3-0.6B and {16:4, 17:1, 18:7} in Qwen3-1.7B, sits at the final token T and reads the question span through its values Vu. Stage 2, D = {19:5, 21:13, 22:9} in both models, takes the pointer in its final-token query QT, attends to the matching color and copies it (OV). In v11 the three-stage route (B_hop0_qspan 3.50–4.45 logits, C_hop0_qspan 2.91–3.50) moved the preference the predicted way on all 192 held-out prompts and on the 64 calibration prompts used for selection; v11 failed its overall verdict on Gate 0 (101 of 128 against a required 103, 78.91% against 80%). Full detail in Finding 3 and the run history for v11.

19:5 is a direct value mover (v2, F03). At the final token, 19:5 puts 0.7688 of its attention on the bound value token, 0.1359 on the distractor value, 0.0332 on keys and 0.0041 on delimiters. Under switch A (Axis A), patching only from the color positions (source_color) carried 2.7489 of 2.7601 logits; all other positions (source_other) carried −0.0021 logits (46.88% direction). ov_color = 2.6470 logits (96.09% direction); qk = −0.0080 logits. QK near zero is expected here, because the target stays at the same position.

The coalition (v2, v3, F04). A dense screen of all 128 heads in L15–22 found 21:13 (100.0% readout, 100.0% patch direction, 1.69 logits) and 22:9 (100.0%, 100.0%, 2.55 logits). Patching 19:5 + 21:13 + 22:9 from the opposite-assignment donor moved 5.56 logits, 61.62% of the clean-to-counterfactual gap, 128/128 (sign-test p = 2.33 × 10⁻¹⁰, the floor of that test: every group moved the predicted way), and transferred to green/yellow without refitting (64/64, 5.9788 logits). On four-row prompts (v3) the coalition still carried 73.48% of the median gap (2.17 logits). These are sizes of a controlled contrast, not shares of the model's whole decision (T2 §7). The single-head effects (2.7601, 1.69, 2.55) do not add up to the joint one.

Double dissociation (upstream, F05). Axis A: coalition OV-color 5.3156 logits (100.00%) on red/blue, 6.1556 (100.00%) on green/yellow; coalition QK −0.0178 / −0.0578. Axis B: coalition QK 5.5546 (100.00%) / 6.1784 (100.00%); context OV 0.000000 (exact).

The routers (upstream, F06). A two-pass, pure-QK mediation screen of all 304 heads in L0–18 at the final token found 17:1, 16:4 and 15:4. Through the copiers' final-position queries they mediated 5.1613 logits, 92.9% of the Axis B QK effect (100.00% direction); 5.30 logits (85.8%) on green/yellow (T1 P6).

The capstone (v7, T2 Table 2). It passed after three of its thresholds were revised before the run, using earlier outcomes: accuracy from 85% to 80%, and two attention-shift bars. Earlier failed studies were not regraded.

  • A_ov_color 4.1389 / 94.53% / p 1.53e-5 (Primary) and 4.7189 / 78.13% / 0.00391 (Vocabulary). Both p-values are the smallest their sign tests can give (16 and 8 groups): every group moved the predicted way. The Vocabulary direction is 78.13% against a ≥ 78% bar, i.e. 50 of 64, the minimum passing count Arithmetic.
  • A_ov_other median absolute 0.0209 logits (198.2×) and 0.0313 (150.7×): copying from any other position does almost nothing. The write-up rounds this pair to 4.14 against 0.02.
  • A_qk signed median +0.0050 logits (abs 0.5150) and −0.0199 (abs 0.2642). On average, swapping where the heads look had no net effect on the color-swap test; single prompts do move, in both directions.
  • B_k_context and B_ov_context 0.000000, which "must equal 0.000000 by autoregressive causality". That zero is a sanity check.
  • Swapping just the copied color values moves the answer margin by about 4.1–4.7 logits (median). These are patch effects; they are not the model's own preference.

The copiers in Qwen3-1.7B (v10, §5.4). A blind screen over all 176 heads in layers 15–25, with no coordinate prior, selected {22:9, 19:5, 21:13}. A_ov_color: Primary 18.33 logits, 68.85% of the clean-to-counterfactual median gap, 91.41% direction, 265.4× A_ov_other (0.0691 logits); Vocabulary 14.09 logits, 70.06% of the gap, 96.88%, 192.9×. Calibration, which is selection evidence: 17.78 logits, 67.8%, 382.5×. Logit scales in 1.7B are much larger than in 0.6B, so compare directions and shares across the models, never raw sizes. v10 passed every gate (108/108 criteria).

Selection. Heads were selected on calibration prompts, so calibration results are selection evidence, not confirmation. The selected heads are not shown to be unique or exclusive, and this is not a complete account of how the model does lookup.

Run verdicts. v2 failed its gate3_rescue for a ceiling reason: the model scored 128/128 on held-out prompts, leaving no errors to rescue. Upstream failed a uniform 30 pp per-head attention gate on the deeper heads. See the run history for v2, upstream and v10.

Scope. "A verified, high-leverage causal subgraph, not an exhaustive or exclusive circuit" (T2 §7). “Answer preference” is the preference between two specified answer words at the next token; free-form generation was not tested.

06Finding 2Switch C · v4 → v7, v10

The pointer is in the query

Measured · v4 diagnosticConfirmed · v7

So the team flipped switch C. The question stays word for word the same, and the colors stay where they were. Only the two names trade places, so Rowan now sits next to blue.

If the router heads only repeated the question, their signal would be identical in both versions, and transplanting it would change nothing. Transplanting only the routers' signal moved the model's preference the predicted way on 128 of 128 prompts. By the last word, three heads in layers 15 to 17 already carry most of the which-row-matched signal. This page calls that signal the .

Fig 6.1 Same question, names swapped

Confirmed · v7 (layout schematic)

where to look: row 1Q_final → p1

Rowan is red.

Lumen is blue.

What color is Rowan? Answer:

→ red

Simplified example. Rowan and Lumen stand in for real single-token words, drawn fresh for every run and never reused.

A and B: held fixed in this test

The transplant is available when C is off.

The original prompt. Rowan sits in row 1, so the copiers read row 1.

Control: a planted decoy that only copies the question scores 0.0 here and is rejected.

Read it: with the question unchanged, moving only the names moves the answer. Transplanting only the routers' signal pulls the copiers' attention toward row 2, so the routers already carry which row matched. Thread widths start from head 19:5's measured attention (v2). During the transplant they are schematic; the measured attention shift is printed on the card and in the readout.
Show the numbers

Roughly 14–21 percentage points of the copiers' attention leave the old answer and land on the new one. For 19:5 alone it is about 19–34 points.

T2 Table 3 (v7). Attention shift after replaying only the last word's query: gain on the new target and loss on the old one, in percentage points, with the share of prompts that moved each way.
SplitWhat was transplantedCoalition gain / lossGain / loss directionJoint direction19:5 gain / lossGate
Red/bluelast word's query, switch CC_q_final+19.12 / −20.2298.44% / 97.66%96.09%+22.81 / −26.52PASS
Red/bluerouters only, switch BB_upstream_Q+20.89 / −20.79100.00% / 100.00%100.00%+31.48 / −30.47PASS
Red/bluerouters only, switch CC_upstream_Q+17.10 / −17.72100.00% / 100.00%100.00%+20.58 / −28.91PASS
Green/yellowlast word's query, switch CC_q_final+15.24 / −15.0298.44% / 100.00%98.44%+18.57 / −22.30PASS
Green/yellowrouters only, switch BB_upstream_Q+19.50 / −17.48100.00% / 100.00%100.00%+31.79 / −33.59PASS
Green/yellowrouters only, switch CC_upstream_Q+14.32 / −14.47100.00% / 100.00%100.00%+19.65 / −30.13PASS

The team had sealed a guess in advance: each name gets stamped onto its answer word, and the copiers search those stamps. The guess failed. The stamps carried 0.77 . Take the full where-to-look effect measured with switch B, 4.56 points, as the total to account for. A copier's output at the last word depends on only three inputs: its query, the keys and the values. The values carried almost nothing, 0.05 points. So the rest, about 3.79 points, should be in the query, even though the question had not changed. A read-only check on the frozen data measured 3.797. This is a .

Fig 6.2 The receipt

Measured · v4 read-only diagnostic
The receipt: where the switch-B effect wentTotal to account for 4.56 points. The values carried 0.05. Name stamps, the sealed guess, carried 0.77 where the guess expected about 4.5, so the guess failed. Bookkeeping left about 3.79 for the query; measured with the query alone, 3.797. The three router heads alone carry 3.36 of it.
RECEIPTv4 · copiers 19:5 + 21:13 + 22:9 · median effect in pointslogits
  1. Total, switch B4.564.5601
  2. Sealed guess: stamps≈4.5
  3. Values, ≈0, left out0.050.0472
  4. Name stamps, measured− 0.770.7706
  5. Query, predicted≈3.793.7895
  6. Query alone, measured3.7973.797235
  7. of which routers alone3.363.3601

Measured on the frozen v4 prompts after the guess failed, with a read-only script. The capstone (v7) later tested the query pathway on fresh prompts and passed.

B_q_final 4.560079 · C_k_color 0.770555 (71.88% direction) · C_ov_color 0.0472 (58.59%) · predicted C_q_final 3.7895 · measured 3.797235 (128/128) · C_q + C_k = 4.567790 vs 4.560079. Counting the 0.0472 value term too, the prediction would be 3.7423, 0.055 from the measurement. Medians need not add through softmax and RMSNorm, so this is a conservation-based prediction.

Read it: the sealed guess carried a small share. The leftover, predicted by bookkeeping, showed up in the query. One 0 to 5 point scale for every row. Bars are drawn to scale, so the measured bar lands inside the predicted outline.
Show the numbers
Copiers 19:5 + 21:13 + 22:9, v4-confirm and its read-only diagnostic. Median change in points, with the share of prompts that moved the predicted way.
RowValueDirectionNotes
Total to account for: the switch-B effect (B_q_final)4.560079100.00%measured with switch B
The values (C_ov_color)0.047258.59%control, expected ≈0
Name stamps, the sealed guess (C_k_color)0.77055571.88%guess expected ≈4.5 · Gate 1C failed
Left over for the query, predicted3.78954.5601 − 0.7706
Query alone, measured (C_q_final)3.797235100.00% (128/128)read-only diagnostic
Router heads alone (C_upstream_Q)3.3601128/128 and 64/6488.5% of the query's share Arithmetic
Sum check: query + stamps4.567790against the 4.560079 total
Prediction counting the values too3.74230.055 from the measurement Arithmetic

Then the team sealed this pathway into new runs and tested it on fresh prompts. In the capstone, the query alone carried 6.82 times more than the name stamps, and beat them on 124 of 128 prompts.

Fig 6.3 Sealed and tested fresh

Confirmed · v7

aQuery vs name stamps

Red/blue · 128 prompts6.82×

query alone3.943.9396
name stamps0.580.5777

Green/yellow · 64 prompts5.91×

query alone2.842.8361
name stamps0.480.4797
pointslogits

Needed: at least 2.5× (the dashed tick on each query bar).

Qwen3-1.7B, same test (v10)

Red/blue · 128 prompts3.50×

Green/yellow · 64 prompts5.20×

The query again beat the name stamps, on 89.84% and 98.44% of prompts. Only the ratio is shown: raw sizes are not comparable across the two models.

bPrompt by prompt

Red/blue: the query beat the name stamps on 124 of 128 prompts

Green/yellow: 59 of 64

Needed: at least 75% of prompts (the dashed line). Filled = the query beat the stamps. Counts are exact; positions are illustrative.

cDecoy vs real

A decoy that only copies the question (planted control)

switch Bpasses
switch C0.0 · rejected

Qwen3-0.6B, the three router heads (v7)

switch B
switch C
pointslogits
Word pair

Read it: same question wording, and the routers' signal still moved the answer. A question-copier cannot do that.

Read it: on fresh prompts in the sealed capstone, the query carried several times more than the name stamps, on nearly every prompt, and passed bars set in advance. The larger model showed the same pattern. The capstone passed after three of its thresholds were revised before the run, using earlier outcomes: accuracy from 85% to 80%, and two attention-shift bars. Earlier failed studies were not regraded. The decoy's switch-B result is reported as a pass with no number. Unit positions are illustrative; counts are exact.
Show the numbers
Capstone (v7), T2 Table 2. Medians in points; every row passed its gate.
MeasureRed/blue (128)Green/yellow (64)Bar
Query alone, switch C (C_q_final)3.93962.8361≥ 1.50, ≥ 95% direction
Name stamps (C_k_color)0.57770.4797
Query ÷ name stamps6.82×5.91×≥ 2.5×
Prompts where the query beat the stamps124/128 (96.88%)59/64 (92.19%)≥ 75% of prompts
Routers only, switch B (B_upstream_Q)3.9876 (100%)3.2122 (100%)≥ 1.40, ≥ 95% direction
Routers only, switch C (C_upstream_Q)3.6125 (100%)2.4117 (100%)≥ 1.00, ≥ 95% direction
Planted question-copier decoypasses switch B; 0.0 on switch Crejected by Subgate 2C
Qwen3-1.7B (v10, passed every gate). Medians in points; 1.7B logit scales are much larger, so compare only ratios and directions with the table above.
MeasureRed/blue (128)Green/yellow (64)
Query alone, switch C (C_q_final)11.36 (100%)9.56 (100%)
Name stamps, signed (C_k_color)3.24291.8379
Query ÷ name stamps3.50×5.20×
Prompts where the query beat the stamps89.84%98.44%

So by the last word, the router heads already carry which fact matched, and they hand it to the copiers through the query. Where the routers pick that up is the next finding: it starts at the question.

Under the hoodv4-confirm · axis-c-q diagnostic · v5–v7 · T1 P6–P7 · T2 §2.3, §4.2, Tables 2–3, §7

The guess that failed (v4-confirm, F07). Gate 1C pre-registered the intuitive hypothesis that keys get stamped onto the answer words: under switch C (Axis C), patching K at the two color positions (C_k_color) should carry the ~4.5-logit routing effect. It reduced the margin by 0.7706 logits (71.88% direction; 0.3746 on green/yellow). The copiers' attention gained 1.5 points on the swapped target and lost 4.4 on the original (+1.47 / −4.39 pp). Name stamps are a minor route: about 17% in this test.

The bookkeeping (F08). A head's final-token output depends only on (QT, K1..T, V1..T). C_ov_color = 0.0472 logits (58.59% direction) and C_k_color = 0.770555, so the rest of the 4.560079-logit B_q_final effect should sit in QT: 4.560079 − 0.770555 = 3.789524, quoted as 3.7895. Pure-QT replay from the switch-C donor onto clean K and V measured C_q_final = 3.797235 logits (100.00% direction, 128/128). Sum check: 3.797235 + 0.770555 = 4.567790 against 4.560079.

B_q_final 4.560079 · C_k_color 0.770555 (71.88% direction) · C_ov_color 0.0472 (58.59%) · predicted C_q_final 3.7895 · measured 3.797235 (128/128) · C_q + C_k = 4.567790 vs 4.560079. Counting the 0.0472 value term too, the prediction would be 3.7423, 0.055 from the measurement. Medians need not add through softmax and RMSNorm, so this is a conservation-based prediction.

The prediction and the measurement are 0.0077 logits (0.2%) apart when the 0.047-logit value term is treated as zero; including it, the prediction is 3.7423, 0.055 away Arithmetic. It rests on four assumptions: (a) the switch-C total equals the switch-B query effect, because 4.5601 was measured with switch B; (b) keys and values at non-color positions contribute about 0; (c) the query and key effects add; (d) the value term at the color positions is 0.

Provenance. The measurement came from a read-only, post-hoc script (diagnose_bounded_poc_v4_axis_c_q.py) on the frozen v4 dataset. The prediction is narrated in the write-up; it was not hash-registered. The query pathway was then tested prospectively in v5, v6 and the capstone.

The routers carry most of it (F09). C_upstream_Q patches only 17:1, 16:4 and 15:4 at the last word from the switch-C donor, then replays only the copiers' QT onto clean K and V: 3.3601 logits, 88.5% of C_q_final Arithmetic, with 128/128 Primary and 64/64 Vocabulary in the predicted direction. In v5 and v6, all four query paths (B_q_final, C_q_final, B_upstream_Q, C_upstream_Q) were 192/192 in each run. In the capstone, C_upstream_Q was 3.6125 (Primary) and 2.4117 (Vocabulary), 91.7% and 85.0% of C_q_final Arithmetic.

Most of the routing (about 83% in the first test) travels in the final word's query, and patching just the three upstream heads reproduces most of that (88.5%). The 83% comes from v4 only.

The planted decoy. literal_query_only_control copies only the queried key token. It passes B_upstream_Q, scores 0.0 on C_upstream_Q, and Subgate 2C rejects it automatically.

Capstone rows (v7, T2 Table 2). C_q_final 3.9396 / 100.00% / 1.53e-5 and 2.8361 / 100.00% / 0.00391 (bar ≥ 1.50 logits; both p-values are the smallest their sign tests can give, 16 and 8 groups, so every group moved the predicted way); C_k_color 0.5777 (6.82×) and 0.4797 (5.91×) (bar: C_q_final ≥ 2.5× C_k_color); per-prompt dominance 96.88% (124/128) and 92.19% (59/64) (bar ≥ 75%); B_upstream_Q 3.9876 and 3.2122 (bar ≥ 1.40); C_upstream_Q 3.6125 and 2.4117 (bar ≥ 1.00). Every row PASS. The capstone passed after three of its thresholds were revised before the run, using earlier outcomes: accuracy from 85% to 80%, and two attention-shift bars. Earlier failed studies were not regraded.

The larger model (v10, Qwen3-1.7B, §5.4). With its own router heads (16:4, 17:1, 18:7, found by a blind search of 144 heads in layers 10–18) and the same three copiers: C_q_final 11.36 / 9.56 logits (Primary / Vocabulary, 100.00% direction) against signed C_k_color 3.2429 / 1.8379, so 3.50× and 5.20×, with the query dominating on 89.84% and 98.44% of prompts. B_q_final 18.17 / 11.89, B_upstream_Q 13.12 / 9.77 and C_upstream_Q 7.50 / 6.99 logits, all 100.00%. v10 passed every gate (108/108 criteria). Logit scales in 1.7B are much larger than in 0.6B, so only ratios and directions compare across the two models.

Scope (T2 §7). This supports pointer-like routing on two-record tasks. It does not show that the model stores discrete symbolic slot variables. Heads were selected on calibration prompts, so calibration results are selection evidence, not confirmation. Where the router heads pick up the match is traced in the next finding, It starts at the question.

07Finding 3Layers 0–17 · v9, v11

It starts at the question

Measured · v9 (failed both tracks)Measured · v11 (failed overall)

The router heads hand the copiers which fact matched. The agents then asked where the routers pick that up, and followed the signal backwards. It led to the question itself.

A head at the last word has three kinds of input: its own , and the keys and values of every earlier word. With switch C, where the question stays word for word the same and only the names trade places, the agents transplanted each kind of input to the three router heads on its own, and measured how much of the routers' effect it carried.

Fig 7.1 Where the router heads' signal comes in

Measured · v9, a run that failed both of its tracks

F the facts · Q the question span · A Answer:, filled where the input was transplanted. “Same way” is the share of prompts that moved the predicted way; about 50% is what no effect looks like.

Word pair

v9 · failed both tracksMeasured inside v9, which failed both of its sealed tracks. These numbers were not confirmed; they told the agents where to search next.

Read it: one bar per input, all on one scale. The routers' values carry most of their effect; the facts' own keys and values carry almost none. The values bar covers every position. Because the facts' part is near zero, the values' share arrives from the question and the words after it. Switch C, three router heads together (15:4, 16:4, 17:1), Qwen3-0.6B.
Show the numbers
v9, switch C, router heads 17:1, 16:4, 15:4. Median change in points, with the share of prompts that moved the predicted way.
Input transplantedRed/blue (Primary)Green/yellow (Vocabulary)
All inputs together (C_U_full)0.3018 (95.31%)0.2683 (95.31%)
Values, every position (C_U_v_all)0.2514 = 83.3% of all (95.31%, p = 1.53e-5)0.2193 = 81.7% of all (95.31%, p = 0.0039)
Keys, every position (C_U_k_all)0.0221 (61.72%)0.0182 (59.38%)
Own query at Answer: (C_U_q_final)0.0078 (58.59%)0.0034 (54.69%)
The facts' keys and values (C_U_kv_context)0.0021 (53.13%)0.0048 (51.56%)

83.3% of the router heads' effect arrived through their values at the question. The facts' own keys and values carried almost nothing (0.0021 ), and the routers' own query at the last word carried 0.0078. So the routers read the match from the question region, through their values. Something earlier had to write it there.

So the agents screened all 240 heads in layers 0 to 14. They transplanted each candidate's output only across the , the asked-for name and the words after it, and kept the answer position itself clean. A change could then reach the answer only by the proposed route: into the routers' values, then the copiers' query. Six heads in layers 11 to 14 came out of that search.

Fig 7.2 Screening the question span

Measured · v11, which failed its overall verdict
Rowan is red. Lumen is blue. What color is Rowan?question span · transplanted Answer:kept clean
The screen over layers 0 to 14The 28 by 16 head grid of Qwen3-0.6B, layer 0 at the bottom. Layers 0 to 14, 240 heads, were screened at the question span. Six stage-0 heads in layers 11 to 14 were found: 13:6, 12:6, 13:14, 14:12, 11:9 and 13:15. They connect to the router heads 15:4, 16:4 and 17:1 and the copier heads 19:5, 21:13 and 22:9.
  1. Transplant a candidate head's output only across the question span.
  2. Keep Answer: clean through layer 17, so the change can reach the answer only through the routers' values and the copiers' query.
  3. Sweep all 240 heads in layers 0 to 14, keeping the ones that move the answer.
  4. Six heads in layers 11 to 14 come out, and the three-stage route closes: 13:6 12:6 13:14 14:12 11:9 13:15

192/192

held-out prompts moved the predicted way through all three stages, on both switches. Also 64/64 of the prompts used to select the heads.

≈265×

the routers' values at the question over the facts' keys and values (switch C, red/blue)(C_U_v_qspan 2.3648 vs C_U_kv_context 0.0089, Primary)

101/128

answered correctly by the unmodified model. The registered bar was 103, so the study failed its overall verdict. 78.91% against 80%.

Failed overall
Read it: the screen transplanted candidate heads only at the question span, kept Answer: clean, and swept layers 0 to 14. Six heads in layers 11 to 14 completed the route through the routers and the copiers. Qwen3-0.6B, 28 layers × 16 heads, layer 0 at the bottom, drawn to scale. Rowan and Lumen are illustrative; the experiments used fresh single-token words. The 64 prompts used to select the heads count only as selection evidence.
Show the numbers
v11, Qwen3-0.6B. Ranges are medians across the calibration split and the two held-out splits. Every route moved the predicted way on all 192 held-out prompts, and on all 64 calibration prompts, which are selection evidence.
RouteWhat it testsMedian, points
Routers' values at the question, switch BB_U_v_qspanstage 1 → stage 22.91–3.91
Routers' values at the question, switch CC_U_v_qspanstage 1 → stage 22.07–2.71
All three stages, switch BB_hop0_qspanstage 0 → 1 → 23.50–4.45
All three stages, switch CC_hop0_qspanstage 0 → 1 → 22.91–3.50
Question span over the facts, switch C, red/blue2.3648 vs 0.0089≈265×
Unmodified model, main held-out promptsbar: at least 103 of 128101 of 128

Driving changes through all three stages then moved the model's preference in the predicted direction on all 192 held-out prompts, and on the 64 prompts used to select the heads. At the question, the routers' values carried about 265 times more than the facts' keys and values. The study met all 63 of its mechanism criteria but failed its overall verdict: its registered prerequisite was that the unmodified model answer at least 103 of the 128 main held-out prompts correctly, and it answered 101. The mechanism results stand as measured, but the small model's three-stage pathway did not receive a full confirmation.

Those six locations were then frozen and carried into Qwen3-1.7B with no new search. Finding 5 tells how that test went.

Under the hoodv9-json-hop0 · v11-question-hop0 · §5.5, §5.6 · Parts 7.6, 7.8

The decomposition (bounded-poc-v9-json-hop0, Qwen3-0.6B, seed 20261025). Under Axis C (fixed surface question, swapped context keys), v9 decomposed the attention inputs of U = {17:1, 16:4, 15:4} at the final token T, then replayed only the copiers' pure QT. Full reconstruction from the donor's (Qu(T), Ku(1..T), Vu(1..T)) gave B_U_full 0.3329 and C_U_full 0.3018 logits on Primary, matching direct U-output mediation within ≤ 0.0193 logits on both splits (conservation check passed).

  • C_U_v_all (values at every position, including the question span [p_query..T]): 0.2514 logits, 83.3% of C_U_full, 95.31% direction, p = 1.53e-5 (Primary); 0.2193, 81.7%, 95.31%, p = 0.0039 (Vocabulary). Both p-values are the smallest their sign tests can give (16 and 8 groups). Axis B: B_U_v_all 0.2827 / 0.2730.
  • C_U_q_final (the routers' own query at T): 0.0078 (58.59%) / 0.0034 (54.69%).
  • C_U_kv_context (keys and values of the record lines, j < p_query): 0.0021 (53.13%) / 0.0048 (51.56%).
  • C_U_k_all (keys at every position): 0.0221 (61.72%) / 0.0182 (59.38%).
  • §5.5 also reports that screening layers 0–14 only at the final token gave null effects (B_hop0 −0.0013, C_hop0 −0.0023 logits), which fits the match being written at the question span.

The rest of v9. v9 also tested quoted JSON and Markdown-table records. The query still beat the key stamps, 11.53× (Primary) and 7.77× (Vocabulary), but quote padding compressed logit margins about tenfold and quoted-JSON slot-2 accuracy dropped (64.8% overall), so the magnitude gates failed. JSON transfer is partly tested, not shown. v9 failed both of its tracks. During preflight, the harness caught a worktree glob bug that would have reused 26 retired keys, before any held-out forward pass ran. See v9 in the run history.

The screen (bounded-poc-v11-question-hop0, Qwen3-0.6B, seed 20261027). All 240 candidate heads in layers 0–14, patched strictly across the question span [p_query..T−1], with the residual input at T clamped clean through layer 17, in a three-stage pure-mediation pass: H0 at [p_query..T−1] → pure Vu([p_query..T]) of U at T → pure QT of D at T → logits. Six greedy calibration rounds, 1,425 candidate coalitions and 8,553 microbatches selected H0 = {13:6, 12:6, 13:14, 14:12, 11:9, 13:15}.

  • Ranges across calibration, Primary and Vocabulary: B_U_v_qspan 2.91–3.91, C_U_v_qspan 2.07–2.71, B_hop0_qspan 3.50–4.45, C_hop0_qspan 2.91–3.50 logits. All four routes moved the predicted way on all 192 held-out prompts, and on all 64 calibration prompts, which are selection evidence.
  • C_U_v_qspan 2.3648 against C_U_kv_context 0.0089 logits on Primary, about 265×, with 100% per-prompt dominance. This is a different ratio from the copiers' 265.4× in Qwen3-1.7B (Finding 1); the two happen to round alike.
  • 63/63 mechanism criteria (Gates 1 and 2) passed. Gate 0 failed: the unmodified model answered 101/128 (78.91%) of the main held-out prompts against a required 80.0% (103/128), on the last 168 unretired whitelist words. The overall verdict is a fail. See v11 in the run history.

Next. v12 froze these six coordinates and applied them to Qwen3-1.7B with zero new stage-0 search, paired with the 1.7B routers {16:4, 17:1, 18:7}; see Finding 5.

08Finding 4Fresh data, two model sizes · v2, v4–v7, v10

It held: new names, new colors, 960 of 960

Confirmed · v7, v10Pooled v4–v7, v10

The heads were found with red and blue. With every setting left untouched, they did the same job when the answers were green and yellow. They move whichever word is paired with the name you ask about, at least for the word pairs tested.

Then the team repeated the test on four separate batches of in Qwen3-0.6B, each with a fresh set of names, and on a fifth batch in the larger Qwen3-1.7B: 960 prompts in all. Each square below is one prompt. A filled square means that only the signal of the three router heads moved the model's preference between the two answer words . In the small model those are 17:1 (), 16:4 and 15:4; in the larger one, 16:4, 17:1 and 18:7. All 960 are filled, on both the question-swap and the name-swap tests. The capstone (v7) passed every gate, and so did v10 in the larger model.

Fig 8.1 960 prompts, one square each

Descriptive · pooled v4–v7, v10

960/960

prompts moved the predicted way when only the router heads' signal came from a twin prompt with the names swapped and the question unchanged.

C_upstream_Q · pooled v4–v7, v10 · 960/960 (100.000%)

Which transplant to count

Routers → pointer: only the three router heads' output comes from the twin, and it reaches the copiers through their pointer. Pointer alone: the copiers' pointer itself comes from the twin. B/C_upstream_Q is two-pass mediation: patch the final-position outputs of the router trio from the donor, record the copiers' resulting Q_T, then replay only those Q_T on a clean pass with clean K and V. B/C_q_final swaps the copiers' final-position Q_T for the donor's directly. A square is filled when Δm = m_clean − m_patched > 0, the patch pushing the signed margin toward the donor's answer.

Qwen3-0.6B · routers 15:4, 16:4, 17:1

v4192/192

Rejected run

Its switch-C pointer numbers come from a read-only diagnostic.

v5192/192

Rejected run

v6192/192

Rejected run

v7capstone192/192

Passed every gate

Three of its bars were revised before the run.

Qwen3-1.7B · routers 16:4, 17:1, 18:7

v10larger model192/192

Passed every gate

Its routers came from a blind search in this model (Finding 5).

Read it: Every square filled. The predicted direction held on every prompt for the routers' signal, in both model sizes. Direction only: the sign of the change in the preference between the two answer words, not its size, and not whether the answer flipped. Three of the five batches came from runs that failed other sealed checks; only v7 and v10 passed every gate. Counts are exact; positions are illustrative.
Show the numbers
Pathv4v5v6v7v10 (1.7B)Pooled
Routers → pointer · names swapped (C_upstream_Q)192/192192/192192/192192/192192/192960/960 (100.000%)
Routers → pointer · question swapped (B_upstream_Q)192/192192/192192/192192/192192/192960/960 (100.000%)
Pointer alone · names swapped (C_q_final)191/192192/192192/192192/192192/192959/960 (99.896%)
Pointer alone · question swapped (B_q_final)191/192192/192192/192192/192192/192959/960 (99.896%)
T2 Table 4 (v4–v7) and the v10 manuscript section (§5.4). Each run: 128 red/blue + 64 green/yellow held-out prompts, calibration excluded. Direction only. Verdicts: v4, v5 and v6 rejected; v7 and v10 passed every gate. v4's switch-C pointer numbers come from a read-only diagnostic on the frozen v4 data. v10 ran in Qwen3-1.7B with its own router trio.

Fig 8.2 The capstone scoreboard

Confirmed · v7
  1. Gate 0The model can do the task on its own95.31% calibration · 91.41% red/blue (117/128) · 81.25% green/yellow (52/64) · bar ≥ 80%, revised from 85% before the runPass
  2. Gate 1Copiers: each switch moves the predicted path21/21 red/blue · 21/21 green/yellowPass
  3. Gate 2Routers drive the pointer, with the question swapped and with it fixed19/19 red/blue · 19/19 green/yellowPass
  4. Gate 3Both word pairs at once40/40 red/blue · 40/40 green/yellow = 80/80Pass
  5. Gate 4Decoys, exact replay, sealed filesdecoys handled · identity error 0.00000000 · 655/655 arrays identical · 1,053 protected filesPass
  6. ReviewReference-bound AI review: support83/83 numbers bound by codeSupport

redblue

40/40

greenyellow

40/40

One square per detailed check, 40 per word pair. Reading the 40 as Gate 1's 21 plus Gate 2's 19 is our inference from the gate counts. Arithmetic

v75/5 · 80/80
Read it: In the capstone, all five sealed gates passed and all 80 detailed checks passed. The AI review's verdict was support, with all 83 of its numbers bound by code. Counts are exact; square positions are illustrative.

Each bar was sealed before its run. Three of the capstone's thresholds were revised before it ran, using earlier outcomes: base accuracy from 85% to 80%, and two attention-shift bars. Earlier failed runs were not regraded. On green/yellow, two checks cleared their bars by a single prompt: 52 of 64 on accuracy, and 50 of 64 (78.13%) on the value-copy path against a 78% bar. Arithmetic · 50/64

Show the numbers
GateWhat it checksCounts (v7)Verdict
Gate 0The model can do the task on its own95.31% calibration · 91.41% red/blue (117/128) · 81.25% green/yellow (52/64) · bar ≥ 80.0% all splits (revised from 85% before the run)PASS
Gate 1Copiers: each switch moves the predicted path21/21 red/blue · 21/21 green/yellowPASS
Gate 2Routers drive the pointer19/19 red/blue · 19/19 green/yellowPASS
Gate 3Both word pairs at once40/40 red/blue · 40/40 green/yellow (80/80)PASS
Gate 4Decoys, exact replay, sealed filesplanted decoys handled · identity error 0.00000000 · 655/655 bit-identical arrays · 1,053 protected filesPASS
ReviewAI review with numbers bound by codesupport · 83/83 metric references verifiedsupport
ΣMinimum passing counts (arithmetic)≥ 80% of 64 needs 52; ≥ 78% of 64 needs 50 (78.13%)at the bar
LaterQwen3-1.7B runs that passed every gatev10: 108/108 criteria, review 109/109 · v12: 63/63 criteria, review 31/31PASS
T1 P7 and T2 Table 2; v10 and v12 from the manuscript (§5.4, §5.6). The 80/80 split into 21 + 19 per word pair is inferred from the gate counts. The threshold revision is stated in the published write-up.

Fig 8.3 Found with red and blue, tested on others

  1. red/blue

    Where the heads were found

    6heads

    The six router and copier heads were found with red and blue prompts, then frozen.

  2. green/yellow

    Tested with no retuning

    64/64

    The same direction on 64 of 64 prompts with no retuning (v2, 5.98 5.9788 logits). In the capstone, every routing path held on 64 of 64, and the value-copy path on 78.13%.

    Qwen3-1.7B · every green/yellow criterion passed
    • v1036/36
    • v1221/21
    Confirmed · v7, v10, v12
  3. gold/silver

    One head checked

    9/9

    Head 19:5 pointed to the right answer on all 9 errors examined. The other five heads were not tested on gold/silver.

    Seen after the fact · gold/silver
Read it: The heads kept working on a word pair they had never seen, and the 1.7B runs held on it too. On a third pair, only head 19:5 was checked, and only on the model's errors. The gold/silver test ran before the other five heads were found.
Show the numbers
Word pairRunResultStatus
red/bluev1, v2, upstreamdiscovery: 19:5, then 21:13 and 22:9, then 17:1, 16:4, 15:4where found
green/yellowv2100.00% (64/64), 5.9788 logits, no refittingmeasured (run failed for a ceiling reason)
green/yellowv7every routing path 100.00% (64/64) (B_q_final, C_q_final, B_upstream_Q, C_upstream_Q); value copy (A_ov_color) 78.13%confirmed
green/yellowv10 (Qwen3-1.7B)36/36 criteria; every routing path 100% (64/64)passed every gate
green/yellowv12 (Qwen3-1.7B)21/21 criteria; all four three-stage routes 100% directionpassed every gate
gold/silvergold/silver diagnostic19:5 read-out, attention and push right on 9/9 errorsseen after the fact; 19:5 only
v10 and v12 per-split criteria from the manuscript (§5.4: 36/36 per split) and the Report's cross-scale table (v12: 21/21 on green/yellow).
Under the hoodv2 · v4–v7 · v10 · T1 P4, P7 · T2 §3.1, §5, Tables 2 and 4 · manuscript §5.4

Safe summary. Confirmed in pre-registered runs that passed every gate (the capstone, v7, in Qwen3-0.6B: 5/5 gates, 80/80 checks; v10 in Qwen3-1.7B: 108/108 criteria), and directionally consistent on 960/960 prompts pooled across five datasets in two model sizes. Three of those five runs (v4, v5, v6) failed other gates, so the 960 is pooled direction and is separate from the run verdicts.

The capstone (v7). The frozen six heads, the v4 template family, 64 fresh disjoint keys (seed 20261023), 256 prompts: 64 calibration (red/blue), 128 primary (red/blue, two held-out templates) and 64 vocabulary (green/yellow), in independent 8-prompt groups. Manifest SHA-256 a59566919a93607e7eff114aa4342807978294ce2b75577cd097fbb55ab9a899, committed before inference (ff46c4b). It passed after three of its thresholds were revised before the run, using earlier outcomes: accuracy from 85% to 80%, and two attention-shift bars. Earlier failed studies were not regraded.

Pooled v4–v7 and v10. Five disjoint key pools: four in Qwen3-0.6B (v4–v7, 256 keys, three template families; v7 reused the v4 family) and one in Qwen3-1.7B (v10, 64 fresh keys, seed 20261026). 960 = 5 × 192 (128 red/blue + 64 green/yellow per run; calibration excluded) Arithmetic. In v4, the switch-C pointer rows (C_q_final, C_upstream_Q) come from the read-only axis-c-q diagnostic on the frozen v4 data. In v10 the router trio is Qwen3-1.7B's own, {16:4, 17:1, 18:7}.

p-values at their floor. 1.53e-5 = 2⁻¹⁶: every one of 16 groups moved the predicted way, the smallest value this test can give. 0.00391 = 2⁻⁸ for 8 groups.

Where 80/80 comes from. 21 Gate 1 subcriteria + 19 Gate 2 subcriteria = 40 per word pair, ×2 pairs; Gate 3 is their conjunction. This split is our inference from the gate counts Arithmetic.

Green/yellow, pointer paths. v7: B_q_final 3.7078, C_q_final 2.8361, B_upstream_Q 3.2122, C_upstream_Q 2.4117 logits (medians), all 100.00% direction. v10: B_q_final 11.89, C_q_final 9.56, B_upstream_Q 9.77, C_upstream_Q 6.99 logits, all 100%; the larger model's logits run on a bigger scale, so these sizes do not compare across models. Earlier transfer (v2): 100.00% (64/64, 5.9788 logits) without refitting a single parameter.

Metric (v7)Red/blue (Primary)Green/yellow (Vocabulary)Sealed barVerdict
Unassisted task accuracy (Gate 0)91.41% (117/128) (Calib: 95.31%)81.25% (52/64)≥ 80.0% all splitsPASS
A_ov_color (median / dir / group p)4.1389 / 94.53% / 1.53e-54.7189 / 78.13% / 0.00391≥ 2.25 logits, ≥ 78%, p ≤ .01PASS
A_ov_other median abs / specificity ratio0.0209 logits (198.2×)0.0313 logits (150.7×)≤ 0.15 logits, ratio ≥ 10×PASS
A_qk signed median (descriptive abs)+0.0050 logits (0.5150 abs)−0.0199 logits (0.2642 abs)signed ∈ [−0.25, +0.25]PASS
B_q_final (median / dir / group p)4.4025 / 100.00% / 1.53e-53.7078 / 100.00% / 0.00391≥ 2.00 logits, ≥ 95%, p ≤ .01PASS
B_k_context & B_ov_context max error0.000000 / 0.0000000.000000 / 0.000000exact 0.0 on every promptPASS
C_q_final (median / dir / group p)3.9396 / 100.00% / 1.53e-52.8361 / 100.00% / 0.00391≥ 1.50 logits, ≥ 95%, p ≤ .01PASS
C_k_color median / C_q > C_k ratio0.5777 logits (6.82×)0.4797 logits (5.91×)C_q_final ≥ 2.5× C_k_colorPASS
Per-prompt C_q_final > C_k_color dominance96.88% (124/128)92.19% (59/64)≥ 75.0% of promptsPASS
C_ov_color signed median+0.0450 logits+0.0238 logitssigned ∈ [−0.25, +0.25]PASS
B_upstream_Q (median / dir / group p)3.9876 / 100.00% / 1.53e-53.2122 / 100.00% / 0.00391≥ 1.40 logits, ≥ 95%, p ≤ .01PASS
C_upstream_Q (median / dir / group p)3.6125 / 100.00% / 1.53e-52.4117 / 100.00% / 0.00391≥ 1.00 logits, ≥ 95%, p ≤ .01PASS
T2 Table 2, every row as reported. The zeros in the B_k_context row hold by construction (causal masking), so they are a sanity check.

09Finding 5Qwen3-0.6B → Qwen3-1.7B · v10, v12

One map, two models

Confirmed · v10, v12

An explanation of one model became useful enough to guide an experiment in another. Qwen3-0.6B and Qwen3-1.7B are related models with the same layout, 28 layers of 16 attention heads each, so a head's location in one names a location in the other.

The larger model got two tests. The first was a : the agents screened 176 candidate copier heads and 144 candidate router heads with no prior about which ones matter. The search picked the same three copier heads, 19:5, 21:13 and 22:9, and two of the three router heads, 16:4 and 17:1. Its third router was 18:7, where the small model uses 15:4. That run, v10, passed every sealed gate: 108 of 108 criteria.

The stronger test came next. The six found in the small model (Finding 3) were frozen at their small-model locations and with no new search. The prediction was specific: would these six locations connect into the larger model's pathway the expected way? They did. Changes driven through them moved the answer preference the predicted way on 92.2% to 100% of , across the tested routes and prompt sets. That run, v12, passed every sealed gate, 63 of 63 criteria, and the unmodified larger model answered 127 of the 128 main held-out prompts correctly.

3/3

copier heads found again by the blind search in the larger model

v10 · 176 heads screened

2/3

router heads matched. The third, 18:7, is new in the larger model.

v10 · 144 heads screened

92.2–100%

of held-out prompts moved the predicted way through the six carried-over heads

v12 · across routes and prompt sets

63/63

criteria passed after the carry-over, with no new search for those six heads

v12 · every gate passed

Fig 9.1 Same coordinates, two models

Head positions real · v10, v12
Which test to show
  • Stage 0 · question heads. Six found in Qwen3-0.6B, carried to Qwen3-1.7B with no new search (v12).
  • Stage 1 · router heads. 16:4 and 17:1 found again by the blind search (v10).
  • Stage 2 · copier heads. 19:5, 21:13 and 22:9, the same three found again by the blind search (v10).
  • Found in one model only: 15:4 in Qwen3-0.6B, 18:7 in Qwen3-1.7B.
  • A line joins the same layer and head number in both models.
  • The blind search screened 176 heads in layers 15–25 for copiers and 144 in layers 10–18 for routers.
Read it: Each grid is one model, layer 0 at the bottom and 16 heads across. Eleven of the twelve locations are shared: six because they were carried over, five because the blind search found them again. Head positions are real. The travelling pulse is schematic; it shows only the order of the hand-off.

Fig 9.2 The two runs in the larger model

Confirmed · v10, v12
What was measuredRed/blue · sizeRed/blue · directionGreen/yellow · sizeGreen/yellow · direction
v10Blind searchpassed every gate · 108/108 criteria · review 109/109
Model answered correctly, unchanged120/128 (93.75%)62/64 (96.88%)
Copy step: swap only the copiers' color valuesA_ov_color18.3368.85% of gap91.41%14.0970.06% of gap96.88%
Routers → pointer, names swappedC_upstream_Q7.50100%6.99100%
Routers → pointer, question swappedB_upstream_Q13.12100%9.77100%
v12Carry overpassed every gate · 63/63 criteria · review 31/31
Model answered correctly, unchanged127/128 (99.22%)62/64 (96.88%)
All three stages, names swappedC_hop0_qspan1.1592.19%1.39100%
All three stages, question swappedB_hop0_qspan4.3499.22%3.78100%
Routers read the question area, names swappedC_U_v_qspan4.12100%3.92100%
Sizes are medians in ; direction is the share of prompts where the change pushed the preference between the two answer words toward the twin prompt's answer.Sizes are median margin reductions in logits; direction is the share of prompts with a positive reduction (p = 1.53e-5 on 16 groups, 0.0039 on 8, the floor of the sign test). Main held-out red/blue: 128 prompts; green/yellow: 64.

The larger model's logits run on a much bigger scale than the small model's, so compare directions and shares across the two models, not raw sizes.

Under the hoodv10 · v11 · v12 · Report §2.4, §5.4, §5.6 · the published write-up

v10 · Passed every gatev11 · Failed its verdictv12 · Passed every gate

Safe summary. In Qwen3-1.7B, a blind search found the same three copier heads as in Qwen3-0.6B and two of its three router heads, in a run that passed every gate (v10, 108/108 criteria). The six question heads found in Qwen3-0.6B, carried over with no new search, connected into the larger model's pathway as predicted on 92.2% to 100% of held-out prompts, in a run that passed every gate (v12, 63/63 criteria).

The two models. Qwen/Qwen3-0.6B at revision c1899de. Qwen/Qwen3-1.7B at revision 70d244cc86ccca08cf5af4e1e306ecf908b1ad5e: 1.72B parameters, 28 layers, 16 query heads and 8 KV heads per layer, d_h 128, residual width 2,048, MLP width 6,144. Both models have 28 layers of 16 query heads, so layer:head coordinates line up.

v10 (blind search). Seed 20261026; 64 fresh keys, excluding 1,229 retired keys; 256 prompts (64 calibration, 128 Primary red/blue, 64 Vocabulary green/yellow). Before any held-out prompt ran, a 2,134-microbatch calibration screen scored all 176 heads in layers 15–25 as copier candidates and all 144 heads in layers 10–18 as router candidates. It selected {22:9, 19:5, 21:13} and {17:1, 18:7, 16:4}. Gate 0: 62/64 (96.88%) calibration, 120/128 (93.75%) Primary, 62/64 (96.88%) Vocabulary. A_ov_color 18.33 / 14.09 logits (68.85% / 70.06% of the clean-to-counterfactual median gap; 265.4× / 192.9× A_ov_other). B_q_final 18.17 / 11.89; C_q_final 11.36 / 9.56, 3.50× / 5.20× the signed C_k_color (3.2429 / 1.8379) and larger on 89.84% / 98.44% of prompts; B_upstream_Q 13.12 / 9.77; C_upstream_Q 7.50 / 6.99 logits; every pointer path 100% direction. Two fresh processes: 612 bit-identical arrays across 66 NPZ pairs, maximum delta audit error 0.00000000. Review: support, 109/109 numbers bound by code. Run history: v10.

v11 (where the six came from). On Qwen3-0.6B (seed 20261027), a screen of all 240 heads in layers 0–14, patching only across , ran six greedy calibration rounds over 1,425 candidate coalitions (8,553 microbatches) and selected {13:6, 12:6, 13:14, 14:12, 11:9, 13:15}. It passed all 63 of its mechanism criteria but failed its overall verdict: the unmodified model answered 101 of the 128 main held-out prompts, against a required 103 (78.91% vs 80.0%).

v12 (carry over). Seed 20261028; 64 fresh keys from an expanded 4–9 letter whitelist. The six Stage 0 coordinates were frozen from v11, with no Stage 0 search on Qwen3-1.7B, and paired with v10's routers {16:4, 17:1, 18:7} and the shared copiers. Gate 0: 64/64 calibration, 127/128 (99.22%) Primary, 62/64 (96.88%) Vocabulary. Three-stage routes: B_hop0_qspan 4.34 (99.22%, p 1.53e-5) / 3.78 (100%, p 0.0039); C_hop0_qspan 1.15 (92.19%) / 1.39 (100%) logits. Stage 1 through question-span values: B_U_v_qspan 12.77 / 8.53, 100%, with B_U_kv_context exactly 0.000000; C_U_v_qspan 4.12 / 3.92, 100%, larger than C_U_q_final (0.5865 / 0.5697) on 97.66% / 100% of prompts and than C_U_kv_context (0.2401 / 0.2261) on 98.44% / 100%, about 17.1× on Primary. Two fresh processes: 1,212 bit-identical arrays across 84 NPZ pairs; 21,073 protected file references verified. Review: support, 31/31. Run history: v12.

A side check. A non-gating diagnostic ran the small model's original routers (15:4, 16:4, 17:1) inside Qwen3-1.7B. The three-stage effects were still significant: B 3.03 / 2.70 and C 0.76 / 0.81 logits (Primary / Vocabulary).

Reading these numbers. Heads were selected on calibration prompts, so calibration results are selection evidence, not confirmation. The two fresh runs per confirmation show the numbers repeat exactly; they are not extra samples. A p-value at its floor (1.53e-5 for 16 groups, 0.0039 for 8) means every group moved the predicted way. Logits in the larger model run on a bigger scale, so sizes are not comparable across the two models.

10Finding 6Layer 19 → layer 24 · v1, gold/silver, v8

The model knew, then got outvoted

Descriptive · v1, gold/silver

A model can retrieve the right value and still answer incorrectly. On every wrong answer the team examined, 22 of 22, one of the copier heads, 19:5 (), was pointing at the right color and pushing toward it. In the first run, a simple read-out from that one head was right more often (126 of 128) than the model's own final answer (115 of 128).

Neither study passed its own overall test. The first run missed its accuracy prerequisite by one prompt, and the gold/silver follow-up failed a calibration prerequisite. So the read-outs are descriptive findings from those runs: what one head was doing when the model got it wrong.

In a gold-versus-silver test, the team found what overruled it. A later head, 24:7, leaned toward “gold” on all 192 prompts it was measured on, whatever was asked. On close calls, that lean won.

The two obvious fixes both backfire. Replacing 24:7's output with its average leaves the lean in place, because when a head always leans toward gold, its average is the lean: 1 error fixed, 3 right answers broken. fixed 4 errors on one set of prompts. On another set it fixed 3 and broke 4 close calls, because removing a constant push moves the line for every prompt.

Later, with a fresh and larger list of key words, the model got silver right 32 times out of 32, and its accuracy on the rose from 85.94% to 96.88%. The gold lean depends on which words are in the prompt.

Fig 10.1 22 wrong answers, one head pointing the right way

Descriptive · v1 and gold/silver

22 of 22

wrong answers examined. On every one, head 19:5 pointed to the right color.

First run (v1): head 19:5's read-out against the model's own answerOn 128 held-out prompts, the read-out from head 19:5 was right on 126 (98.44%). The model's own final answer was right on 115 (89.84%). Measured · v1 (run inconclusive)

In v1 the read-out was right on all 13 model errors, so its 2 misses fell on prompts the model got right Arithmetic. Its donor-patch direction was 128/128 over all held-out prompts, errors included.

Read it: On every wrong answer examined, one copier head was already pointing to the right color. In the first run, its read-out alone was right more often than the model's final answer. Each ticket is one error: 13 from v1 (red/blue, held-out prompts) and 9 from the gold/silver test (all on its 64 calibration prompts). Neither run passed its own overall test, so these are descriptive findings. Counts are exact; ticket order is illustrative.
Show the numbers
WhatRunCountRate
Model's own answer, held-out promptsv1115/12889.84375%
Read-out from head 19:5, held-out promptsv1126/12898.4375%
Model errors where 19:5's read-out was rightv113/13
Errors where 19:5's read-out, attention and push all favored silvergold/silver (calibration)9/9
All errors examined where 19:5 pointed to the right answerboth22/22

Fig 10.2 Outvoted, as a balance

Schematic · measured numbers labelled
What to do with head 24:7

19:5 pushes toward the right answer (silver)

h(x) = s_task(x) + b_prior, E[s_task] = 0 ⇒ μ_h = b_prior (T2 §6.1)

Read it: Head 19:5 pushes toward the right answer, but on close calls 24:7's steady lean toward gold outweighs it. Swapping in the average keeps the lean; switching the head off tips other prompts the wrong way. Schematic: pan sizes are not to scale; the labelled numbers are measured.
Show the numbers
SettingCalibration (64 prompts)Other format (128 prompts)Source
As measured55/64 (85.94%): gold 32/32, silver 23/32120/128 (implied, Σ)gold/silver diagnostic
24:7's lean toward gold192/192 prompts (64/64 + 128/128), +0.498 to +1.964 logits toward goldT2 §6.1
Replace 24:7 with its average1 fixed / 3 broken (53/64)1 fixed / 3 broken (118/128)T1 P3
Switch 24:7 off4 fixed / 0 broken (59/64)3 fixed / 4 broken (119/128)T1 P3
Fresh key words (v8-repair, Track A)62/64 (96.88%), silver 32/32held-out 122/128 (95.31%)T5 §6.3.3
24:7 itself was not re-measured with the fresh key words. The 120/128 baseline is our arithmetic from both rows (118 − 1 + 3; 119 − 3 + 4).

Fig 10.3 Two obvious fixes, counted

Measured · gold/silver diagnostic
Replace with averageMean-replace 24:7 · calibration (55 → 53 of 64) net −2
Replace with averageMean-replace 24:7 · other format (→ 118 of 128) net −2
Switch offZero-ablate 24:7 · calibration (55 → 59 of 64) net +4
Switch offZero-ablate 24:7 · other format (→ 119 of 128) net −1
Read it: Averaging the head out breaks more than it fixes on both prompt sets. Switching it off fixes 4 and breaks none on the calibration prompts, then breaks more than it fixes on another format. One square per prompt: ✓ an error fixed, ✕ a right answer broken. Counts are exact.
Show the numbers
FixPrompt setFixedBrokenNetRight after
Replace 24:7 with its averagecalibration13−253/64
Replace 24:7 with its averageother format13−2118/128
Switch 24:7 offcalibration40+459/64
Switch 24:7 offother format34−1119/128
T1 P3 table and T2 §6.1. Starting points: 55/64 on calibration; 120/128 on the other format (our arithmetic).
Under the hoodv1 · gold/silver · v8 Track A · T1 P2–P3 · T2 §6.1 · T5 §6.3.3

v1 · Inconclusivegold/silver · Failed a prerequisitev8 · Rejected

v1 (red/blue). The model scored 115/128 (89.84375%) on held-out prompts, against a required 116, so the run was inconclusive; head 19:5's read-out scored 126/128 (98.4375%) and was right on 13/13 of the model's errors. Its donor-patch direction was 128/128 over all held-out prompts, errors included. Because the read-out was right on all 13 errors, its 2 misses fell on prompts the model got right Arithmetic. No attention numbers are reported for the v1 errors.

Gold/silver follow-up. The run failed a calibration prerequisite, so its read-outs are descriptive. Calibration accuracy 55/64 (85.94%): gold 32/32, silver 23/32. All 9 calibration errors are among those 64 prompts. On 9/9, 19:5's leave-group-out read-out predicted silver, its attention favored silver over gold, and four ways of removing or swapping it each made the error worse (median changes: −0.5626 zeroing, −0.6498 mean replacement, −1.3487 opposite-donor patching, −1.3048 source-V swap, in logits). The logit lens after layer 19 already favored silver on 5/9 errors.

What overruled it. Later layers added about −1.2 logits against silver on the errors (−1.2074; layer 24 attention −0.9835), led by head 24:7, which leaned toward “gold” on all 192 prompts it was measured on (+0.498 to +1.964 logits) and averaged −1.2421 against silver on the 9 errors. That was with one set of key words; with a fresh set, the lean largely vanished. The −1.2 figure is not 24:7's own number.

Why both fixes backfire (T2 §6.1). If h(x) = s_task(x) + b_prior with E[s_task(x)] = 0, then μ_h = E[h(x)] = b_prior. Replacing h(x) with μ_h leaves the constant lean in place (1 fixed / 3 broken on both splits). Setting h(x) to 0 subtracts b_prior from every prompt, which moves the decision line: 4 fixed / 0 broken on calibration (59/64), 3 fixed / 4 broken on the 128 confirmation prompts. Both rows imply a 120/128 confirmation baseline (118 − 1 + 3; 119 − 3 + 4) Arithmetic.

Fresh key words (v8-repair, Track A). Keys from an expanded 471-word whitelist: calibration rose from 55/64 (85.94%) to 62/64 (96.88%) with silver 32/32, and the mean calibration margin reversed to favor silver by 0.4196 logits. Held-out: 122/128 (95.31%), silver 62/64, so gold 60/64 Arithmetic. 24:7 was not re-measured. The run also tried a “frozen repair (α=2.5, γ=1.0)” that gave 2 fixed / 2 broken; it is not the proposed error flag, so it counts neither for nor against that idea.

A reviewer slip, caught. During the gold/silver test, the project's AI reviewer read a table showing that zeroing 19:5 rescued 0 errors and briefly claimed 19:5 was not helping. The inversion was caught during adjudication: removing a helpful head makes errors worse, and it did on 9 of 9.

11Finding 7 and a lessonFour-row tables · v3, v8 · Qwen3-0.6B

With four rows, one copier grabs the last

Measured · v8 (run rejected)Tested

Give the model four rows instead of two and it slips. When the row you asked about happened to share its color with the last row, the model was right 32 times out of 32. When the colors differed, it was right only 15 times out of 32.

Measuring where each copier looks shows why. Head 19:5 () looks about 8 times more at the last row than at the first, a toward the last record. The two later copiers, 21:13 and 22:9, lean the other way, toward the early rows.

Fig 11.1 The last-row pull

Seen after the fact · v3

Asked-for color = last row’s color

32of 32 right

Different colors

15of 32 right

A four-row tableSchematic

the pull toward the last row

Record 1: Rowan is red.

Record 2: Lumen is blue.

Record 3: Mira is blue.

Record 4: Wren is red.

What color is Lumen? Answer:

Simplified example, and schematic: the write-up gives no literal four-row prompt. The names are illustrative; the experiments used fresh single-token words. Here the asked-for row says blue and the last row says red, so it belongs to the “different colors” group.

17/17 discovery errors (18/24 held-out) named row 4’s color. With two candidate colors that follows for any mismatched prompt, so the 32/32 vs 15/32 split is the informative evidence. Six opposite-assignment pairs failed both ways, which rules out a fixed color preference.

Read it: the model is reliable when the last row happens to agree with the answer, and right less than half the time when it does not. v3’s 64 discovery prompts. Counts are exact; positions are illustrative. The hatching on the card is schematic.
Show the numbers
v3, 64 discovery prompts (T2 §6.2).
PromptsRightOfShare
Asked-for color matches the last row’s3232100%
Asked-for color differs from the last row’s153246.88%
All four-row discovery prompts476473.44%

Fig 11.2 Where each copier looks across four rows

Measured · v8 calibration (run rejected)

Share of the head’s attention on each rowslot, in %its own average over the fourAverage · our arithmetic

19:5Leans toward the last row

row 4 ÷ row 1Slot 4 ÷ Slot 1
8.07× more on row 4
row 4 vs averageSlot-4 excess
+5.04 points abovepp

21:13Leans early

row 4 ÷ row 1Slot 4 ÷ Slot 1
0.69×
row 4 vs averageSlot-4 excess
−4.30 points belowpp

22:9Most even, slight early tilt

row 4 ÷ row 1Slot 4 ÷ Slot 1
0.66×
row 4 vs averageSlot-4 excess
−1.65 points belowpp
Read it: 19:5 looks more and more at later rows, while 21:13 and 22:9 put more of their attention on the early rows. Averages over the 64 calibration prompts, where every row is asked about equally often. Each head also looks at other words, so a panel does not add up to 100%. All three panels share one 0 to 25% scale; the gap to the average is in percentage points of attention.
Show the numbers
v8 calibration, 64 four-row prompts (T5 Table 5). Mean share of attention in %. The ratio is row 4 ÷ row 1 only. The gap is row 4 minus the four-row average; the average is our arithmetic.
HeadRowSlot 1234Average Σ4 vs avg4 ÷ 1
19:51.667.1911.1513.388.35+5.048.07×
21:1318.3320.9615.5912.5616.86−4.300.69×
22:914.0710.619.929.3310.98−1.650.66×

The first fix the team tried was to . The average score went up by about 1.5 .Centered amplification x + (α − 1)(x − μdisc) of the three copiers raised the median signed margin by +1.47 to +1.56 (α = 2.0, without or with mean-ablating 27:14). Yet of the 17 prompts the model already got wrong, 15 got worse, and 4 right answers broke. A do-no-harm rule sealed in advance rejected every setting. When a copier is reading the wrong row, turning it up repeats the wrong color more loudly.

Fig 11.3 Louder looked better on average

Measured · v3 selection prompts, every setting rejected

Beforethe unassisted model

47of 64right answers

47 right, 17 wrong

Aftercopiers turned up ×2

+1.56points+1.5565logits▲ median gain▲ median signed-margin gain

▼ 47 → 44 right of 64

Of the 47 that were right

  • 40more sure of the right answermargin up
  • 4broken: now wrong
  • 3other, still right

Of the 17 that were wrong

  • 15worse: even surer of the wrong colormargin down
  • 1fixed: now right
  • 1other, still wrong

Prompt view · our arithmeticOf 47 right: 40 up · 4 broken · 3 other. Of 17 wrong: 15 worse · 1 fixed · 1 other.

Follow a group of prompts
Pick a group to follow the same prompts from Before to After.
Read it: the average went up while the actual mistakes got worse. Counts as the write-up reports them for α = 2.0. The +1.56 median is the variant that also averages outmean-ablates head 27:14; α = 2.0 alone gave +1.47. Both scored 44 of 64 with 1 fixed and 4 broken. All of these figures are on the 64 prompts that were also used to choose settings. Counts are exact; positions are illustrative.
Show the numbers
v3 discovery steering table (T1 P5): copiers 19:5 + 21:13 + 22:9 turned up, 64 prompts, baseline 47/64. Median gain in pointslogits.
SettingRight of 64FixedBrokenMedian gain
×1.5 (α = 1.5)4513+0.64+0.6400
×1.5, and average out 27:14 (α = 1.5 + mean-ablate 27:14)4513+0.69+0.6878
×2 (α = 2.0)4414+1.47+1.4676
×2, and average out 27:14 (α = 2.0 + mean-ablate 27:14)4414+1.56+1.5565
Prompt view for ×2 (α = 2.0), from the write-up’s counts; the split into groups is our arithmetic.
BeforeMargin upBrokenWorseFixedOther
47 right4043
17 wrong1511

So the team aimed at the cause. They measured each copier’s habitual lean toward particular rows, subtracted half of that lean before the copier mixes in what it sees, and turned up the steadiest copier, 22:9. On 192 new four-row prompts this fixed 6 wrong answers and broke 1, a net gain of 5. Turning the copiers up on the same prompts fixed 10 and broke 7.

The gain is small, a net five prompts out of 192 (145 to 150 correct), and the run still failed its preregistered test, missing three of its four gates. On the main held-out set it did not improve the margins of the last-row errors it targeted, and on fresh colors its net gain only tied the naive method’s. It is labelled Tested: a small pilot that failed its own test and still caused fewer new errors than turning the copiers up, on both four-row prompt sets.

Chosen on calibration from a frozen 24-candidate grid: probability centering with β = 0.5, which re-centers attention weights before values are mixed, plus 22:9 amplified with α22:9 = 2.0.

Fig 11.4 Re-aiming beat turning up

TestedMeasured · v8 held-out · run rejected

6 fixed to 1 broken

fixed : broken

Re-aim attention + turn up 22:9

probability centering, β = 0.5; α22:9 = 2.0

145 → 150 of 192

vs

10 fixed to 7 broken

fixed : broken

Turn the copiers up ×2

output amplification, α = 2.0

145 → 148 of 192

Re-aim attention + turn up 22:9 (v8 repair) net +5
Turn the copiers up ×2 (naive, same 192 prompts) net +3
Re-aim, on the calibration prompts used to choose the settings not counted in the comparison
Held-out, by prompt set (T5 Table 6). Fixed / broken (net).
Prompt setRe-aim + 22:9Naive ×2
Red/blue (128)4 / 1 (+3)6 / 5 (+1)
Green/yellow (64)2 / 0 (+2)4 / 2 (+2)

It uses no answer labels at test time. Its two settings were chosen on a separate labelled calibration set, and it needs to know where the rows are.

RejectedFailed 3 of its 4 gatesTied on fresh colors (+2 vs +2)
Read it: re-aiming fixed fewer prompts than turning up, but it broke far fewer, so it came out ahead: net +5 against +3 on the same 192 prompts. One square per prompt. The naive method was run on the same held-out prompts; its v3 calibration result is left out because it came from a different prompt set.
Show the numbers
v8-repair, four-row tables (T5 P7.5 and Table 6). Right answers, then fixed / broken (net).
Prompt setUnassistedRe-aim + 22:9Naive ×2
Held-out red/blue (128)99/128102/128 · 4 / 1 (+3)100/128 · 6 / 5 (+1)
Held-out green/yellow (64)46/6448/64 · 2 / 0 (+2)48/64 · 4 / 2 (+2)
All held-out (192)145/192150/192 · 6 / 1 (+5)148/192 · 10 / 7 (+3)
Calibration, used to choose (64)47/6449/64 · 2 / 0not compared
Under the hoodv3 · v5 · v6 · v8-repair · T1 P5 · T2 §6.2 · T5 P7.5, §6.3, Tables 5–6

The four-row task (v3). Each prompt held 4 key-value bindings (4 queries × 6 balanced assignments) in a value-before-key held-out grammar. Unassisted baselines: 47/64 (73.44%) on discovery and 104/128 (81.25%) on primary held-out. All 17/17 discovery errors and 18/24 primary held-out errors named the last record’s color. With two candidate colors that follows for any mismatched prompt, so the 32/32 vs 15/32 (46.88%) split carries the evidence. Six opposite-assignment pairs failed in both color flips, which rules out a static color preference.

  • 19:5’s patch direction fell from about 97% in v2 to 61.72% (53.13% on green/yellow), while 22:9 kept pushing the right way on 83.59% (81.25%). These are patch-direction rates, not accuracy.
  • 19:5’s donor effect pointed the wrong way on 14/24 baseline errors, against 5/104 correct prompts.
  • In the value-before-key grammar, causal masking means a value token at position vi < ki cannot attend to its own key token ki.
  • Centering on the global dataset mean μdisc cannot remove prompt-specific attention to the last record, because μdisc averages opposite last-record colors to zero.

Layout and template (v5, v6). In v5 a blank-line layout pulled 19:5 toward line 2: its solo switch-A direction fell to 50.78% (65/128) while its routing direction stayed 128/128. In v6, 29-token inline examples left three 19:5-solo attention-shift cells short of the bar (7.7–10.2 pp).

Slot profiles (v8 calibration, T5 Table 5). Mean attention probability on each value slot over 64 calibration prompts in which every slot is queried equally often. The excess is Slot 4 minus the four-slot mean. The write-up’s blog table quotes 1.46× and 1.51× “toward Slot 1” for 21:13 and 22:9; those are the reciprocals of 0.69× and 0.66×. This page uses Slot 4 ÷ Slot 1 throughout.

HeadSlot 1Slot 2Slot 3Slot 4Excess4 ÷ 1
19:50.016590.071910.111520.13382+0.05037 (+5.04 pp)8.07×
21:130.183300.209620.155920.12560−0.04301 (−4.30 pp)0.69×
22:90.140670.106080.099220.09333−0.01649 (−1.65 pp)0.66×

The steering table (v3). Centered amplification x + (α − 1)(x − μdisc) of 19:5 + 21:13 + 22:9 on the 64 discovery prompts (baseline 47/64), which were also the selection data. The zero-regression gate rejected all four candidates, and the selector abstained (identity).

CandidateAccuracyFixedBrokenMedian signed margin gain
α = 1.545/6413+0.6400 logits
α = 1.5 + mean-ablate 27:1445/6413+0.6878 logits
α = 2.044/6414+1.4676 logits
α = 2.0 + mean-ablate 27:1444/6414+1.5565 logits

The repair (v8-repair, Track B). Stage 1 froze a 24-candidate grid: β ∈ {0.5, 0.75, 1.0, 1.25} × {pre-softmax score, post-softmax probability} × α22:9 ∈ {1.0, 1.5, 2.0}. Stage 2 selected probability centering, β = 0.5, α22:9 = 2.0 on calibration (73.44% → 76.56%, 2 fixed / 0 broken, +0.2133 logits) before held-out inference.

  • Held-out: red/blue 99/128 → 102/128 (4 fixed / 1 broken, +3) vs naive 100/128 (6 / 5, +1); green/yellow 46/64 → 48/64 (2 / 0, +2) vs naive 48/64 (4 / 2, +2); all 192: 145 → 150 (6 / 1, +5) vs 148 (10 / 7, +3). The naive column was run on the same held-out prompts.
  • It passed 9 of 12 held-out subcriteria, including a +0.2814-logit median gain on green/yellow last-record errors (p = 0.0078125; the p-value belongs to that gain). The red/blue baseline-error median shift was −0.0407 logits, slightly the wrong way.
  • Verdict: REJECTED, failing three of its four gates (A1, A2, B1). On the main held-out set it did not improve the margins of the recency errors it targeted, and on fresh colors its net gain only tied naive amplification. A separate gold/silver repair in the same run fixed 2 errors and broke 2.
  • Why output amplification fails here: a constant positional bias toward the last slot, multiplied by a value vector that is red on some prompts and blue on others, averages to zero in output space.

12Run historyv1 → v12 · two model sizes

Twelve versions. Three passed every gate. Each miss taught something.

Run verdicts

Here is the lab notebook. Before each run, its pass marks were . Run after run missed at least one of them, sometimes by a single prompt, and the system refused to round. Each miss pointed at something real.

Three runs passed every registered gate: the six-head route in Qwen3-0.6B (v7), a for the route in Qwen3-1.7B (v10), and six heads carried from the small model into the larger one with no new search (v12).

Fig 12.1 Every run, in order

Measured · formal verdicts
Read it: three of the twelve numbered versions passed every registered gate. v11 found the six question heads and met all 63 of its mechanism criteria, but the unmodified model answered 101 of 128 main held-out prompts against a required 103, so the run failed. v12 then carried those six heads into the larger model. v1 to v9 and v11 ran on Qwen3-0.6B; v10 and v12 on Qwen3-1.7B. Each chip links to its row below.

Our countThe whole notebook, in four numbers

12

numbered versions, v1 to v12

plus three follow-ups: gold/silver, upstream, axis-c-q

3

passed every registered gate

v7 (0.6B) · v10 (1.7B) · v12 (0.6B heads in 1.7B)

11

missed or failed a sealed bar

v1 (inconclusive), gold/silver, v2, v3, upstream, v4, v5, v6, v8, v9, v11

1

read-only diagnostic, which carries no verdict

axis-c-q

Fig 12.2 What the misses and passes taught

  • 01v1

    Don’t round a near miss.

    v1 scored 115 of 128 against a sealed 116.

    → 04 · Five locks
  • 02gold/silver

    Check for a constant lean before averaging a part out.

    In the gold/silver test, the average of head 24:7 () was its lean.

    → 10 · Finding 6
  • 03v2

    A rescue test needs mistakes to rescue.

    v2’s held-out prompts scored 128 of 128, leaving nothing to fix.

    → The v2 row below
  • 04v3

    Count the fixes and the breaks.

    v3: a +1.56 median gain while 15 of 17 errors got worse.

    → 11 · Finding 7
  • 05upstream

    Fit each check to each head’s job.

    One 30-point attention bar for every head missed two deeper heads (29.2 and 15.0).

    → The upstream row below
  • 06v4-confirm · axis-c-q

    A failed guess is information.

    Key stamps carried 0.77 points0.7706 logits; bookkeeping found the rest in the query.

    → 06 · Finding 2
  • 07v4-confirm

    Let code write the numbers.

    One reviewer number was off in the 13th decimal.

    → 04 · Five locks
  • 08v5 · v6 · v8

    Re-test on fresh words and layouts.

    A blank-line layout pulled one head to 50.78%; new key words largely removed the gold lean.

    our reading of v5, v6, v8

    → 08 · Finding 4
  • 09v9 → v11

    Follow the signal backwards.

    v9 found the router heads read the match from the question (83.3%). That pointed v11 to the question, where it found six heads.

    → 07 · Finding 3
  • 10v10

    Search blind, then compare.

    With no prior about where to look, the search in Qwen3-1.7B picked the same three copier heads as the small model.

    → 09 · Finding 5
  • 11v11

    A passing mechanism does not excuse a missed bar.

    63 of 63 mechanism criteria passed, and the run still failed: 101 of 128 right against a required 103.

    → The v11 row below
  • 12v12

    Name the locations first, then measure.

    Six heads from the small model, tested in the larger one with no new search, moved the answer the predicted way on 92.2% to 100% of held-out prompts.

    → 13 · Practical uses
Read it: each card is one lesson from one run, with a link to where this page shows it.

Fig 12.3 The run ledger, in order

Measured · formal verdicts
  1. v1pre-registered runQwen3-0.6Bbounded-poc-v1

    Tried
    Screened 64 heads (layers 3, 11, 19, 27); froze 19:5, 27:15, 27:13; 128 held-out prompts.
    Result
    19:5 passed every head check; the model scored 115/128 against a sealed 116.
    Taught
    Don’t round a near miss.
    Inconclusive
    Binding reason

    Base model scored 115/128 (89.84%), missing the frozen 90.0% (116/128) gate by 1 prompt.

  2. gold/silverfollow-up studyQwen3-0.6Bgold/silver post-mortem

    Tried
    Looked inside the 9 gold/silver errors (all on the 64-prompt calibration split).
    Result
    19:5 pointed to the right answer, silver, on 9/9; 24:7 leaned to gold on 192/192 with that set of key words (fresh key words in v8 largely removed the lean).
    Taught
    Check for a constant lean before averaging a part out.
    Fail
    Binding reason

    Failed a calibration prerequisite. The readouts above are descriptive findings from the run. As a diagnostic it showed that mean-replacing 24:7 gave 1 fixed / 3 broken because its mean is the constant offset; zeroing it shifted the global threshold (3 fixed / 4 broken on another format).

  3. v2pre-registered runQwen3-0.6Bbounded-poc-v2

    Tried
    Dense screen of 128 heads (layers 15–22); green/yellow transfer.
    Result
    Found 21:13 and 22:9; the model scored 128/128 on the held-out prompts.
    Taught
    A rescue test needs mistakes to rescue.
    Fail
    Binding reason

    gate3_rescue: the base model scored 56/64 (87.5%) on discovery and 128/128 (100%) on held-out, leaving 0 held-out errors to rescue.

  4. v3pre-registered runQwen3-0.6Bbounded-poc-v3

    Tried
    Four-row tables; turned the copiers up (×1.5 and ×2α 1.5, 2.0).
    Result
    Up to a +1.56 pointlogit median gain, while 15/17 errors got worse.
    Taught
    Count fixes and breaks.
    Rejected
    Binding reason

    The selector abstained (identity) because of the zero-regression gate.

  5. upstreampre-registered follow-upQwen3-0.6Bbounded-poc-upstream

    Tried
    Screened 304 heads (layers 0–18) with switch BAxis B.
    Result
    Found 17:1, 16:4, 15:4 (5.16 pointslogits, 92.9% of the where-to-look effectQK effect).
    Taught
    Fit each check to each head’s job.
    Fail
    Binding reason

    Inherited v2’s 56/64 discovery split; a uniform 30-point per-head attention gate missed on the deeper layer 21–22 heads (29.2 and 15.0 points).

  6. v4-confirmpre-registered runQwen3-0.6Bbounded-poc-v4-confirm

    Tried
    Added switch CAxis C; sealed guess: keys stamped on the answer wordsK_color stamping.
    Result
    Stamps carried 0.77 pointsC_k_color carried 0.7706 logits, where the guess needed about 4.5.
    Taught
    A failed guess is information.
    Rejected
    Binding reason

    Axis C was pre-registered on C_k_color instead of C_q_final; single-token word keys scored 88.3% / 85.9% against a 90% bar.

  7. axis-c-qread-only diagnosticQwen3-0.6Bv4-axis-c-q diagnostic

    Tried
    Read-only check on the frozen v4 data.
    Result
    Predicted ≈3.79 points in the querylogits in Q_final; measured 3.797.
    Taught
    Bookkeeping can point to where an effect lives.
    Diagnostic
    Binding reason

    Read-only, post-hoc diagnostic (diagnose_bounded_poc_v4_axis_c_q.py) on the frozen v4 data.

  8. v5-pointerpre-registered runQwen3-0.6Bbounded-poc-v5-pointer

    Tried
    Sealed the query pathway; added two decoysplanted controls; blank-line layout.
    Result
    All four query paths 192/192; the layout pulled 19:5 toward line 2 (50.78%).
    Taught
    Layout can bias one head while routing holds.
    Rejected
    Binding reason

    A multi-line layout with blank lines induced line-2 recency (19:5’s solo switch-A direction 50.8%).

  9. v6-finalpre-registered runQwen3-0.6Bbounded-poc-v6-final

    Tried
    29-token inline examples.
    Result
    Query paths 192/192 again; 3 of 19:5’s solo shift cells fell short (7.7–10.2 pointspp).
    Taught
    Template choice matters; v7 returned to the v4 template family.
    Rejected
    Binding reason

    Three 19:5-solo attention-shift cells on red/blue missed the bar (7.7–10.2 points). Gate 1 (27/27), Gate 4 and green/yellow (40/40) passed.

  10. v7-capstonethe capstone · six-head routeQwen3-0.6Bbounded-poc-v7-capstone

    Tried
    Froze the six heads, 17:1 16:4 15:4 → 19:5 21:13 22:9; 64 fresh keys; sealed bars.
    Result
    5/5 gates, 80/80 checks, 655/655 arrays identical, 83/83 numbers bound by code.
    Taught
    The first run to pass every sealed bar.

    NoteIt passed after three of its thresholds were revised before the run, using earlier outcomes: accuracy from 85% to 80%, and two attention-shift bars. Earlier failed studies were not regraded.

    Passevery gate · 0.6B
    Binding reason

    All gates (gate0–gate4) passed; 40/40 + 40/40 = 80/80 subcriteria; AI review support (83/83 adjudicated).

    Three thresholds had been revised before the run, using earlier outcomes: accuracy 85% → 80%, and two attention-shift bars.

  11. v8-repairpre-registered repairQwen3-0.6Bbounded-poc-v8-repair

    Tried
    Four-row repair; fresh gold/silver keys.
    Result
    On 192 held-out four-row prompts it fixed 6 errors and broke 1 (net +5), against 10 / 7 for turning the copiers up; fresh keys lifted gold/silver to 96.88% on calibration.
    Taught
    Aim fixes at the mechanism; re-test on fresh words.
    Rejected
    Binding reason

    Failed three of its four gates (A1, A2, B1). The gold/silver baseline hit a 95.31% ceiling, and that repair fixed 2 and broke 2. The four-row repair passed 9 of 12 held-out criteria, but on the main held-out set it did not improve the margins of the recency errors it targeted, and on fresh colors its +2 net only tied the naive method’s (4 fixed / 2 broken).

  12. v9-json-hop0pre-registered runQwen3-0.6Bbounded-poc-v9-json-hop0 · seed 20261025

    Tried
    Quoted JSON and Markdown tables. With the question fixed and the names swapped (switch CAxis C), split the router heads’ own inputs apart (Q_u, K_u, V_u of 17:1, 16:4, 15:4).
    Result
    83.3% of the router heads’ effect arrived through their values at the question; the facts’ own keys and values carried almost nothing (0.0021 pointsC_U_v_all 0.2514 of C_U_full 0.3018 logits, 95.31% direction; C_U_kv_context 0.0021).
    Taught
    Follow the signal backwards: it pointed v11 to the question.

    Lock heldIn preflight, the harness caught a bug in a file pattern (a worktree glob) that would have reused 26 retired key words, before any held-out prompt ran (Lock 2).

    Failboth tracks
    Binding reason

    Failed both of its tracks (T1, T2). Quoted-JSON slot-2 accuracy dropped (64.8% overall), and quote padding compressed logit margins about 10×. The final-token screen of layers 0–14 (B_hop0, C_hop0) found no effect, because the matching enters through the question-span values.

  13. v10-qwen17bpre-registered run · route searchQwen3-1.7Bbounded-poc-v10-qwen17b · seed 20261026

    Tried
    A in the larger model over 176 later heads and 144 middle heads, with no prior about where to look; 64 fresh keys.
    Result
    Picked the same three copier heads, 19:5 21:13 22:9, and two of three router heads, 16:4 17:1, with 18:7. 108/108 checks, 612 arrays identical, 109/109 numbers bound by code.
    Taught
    Search blind, then compare with the map.
    Passevery gate · 1.7B
    Binding reason

    All gates (gate0–gate4) passed; 108/108 criteria (36/36 per split); AI review support (109/109 reference-bound claims verified).

  14. v11-question-hop0pre-registered run · Stage 0 searchQwen3-0.6Bbounded-poc-v11-question-hop0 · seed 20261027

    Tried
    Searched all 240 heads in layers 0–14, changing them only at the question and the words after it while the last word stayed untouched ([p_query..T−1]; final token clean through layer 17; three-stage pure mediation).
    Result
    Found six question heads in layers 11–14: 13:6 12:6 13:14 14:12 11:9 13:15. Driving changes through all three stages moved the answer the predicted way on all 192 held-out prompts and on the 64 used to select the heads; 63/63 mechanism criteria.
    Taught
    A passing mechanism does not excuse a missed bar.
    Failaccuracy prerequisite
    Binding reason

    The unmodified model answered 101 of the 128 main held-out prompts against a required 103 (78.91% vs 80.0%, on the last 168 unretired whitelist words). The mechanism results stand as measured, but the smaller model’s three-stage pathway did not receive a full confirmation.

  15. v12-cross-scale-3hoppre-registered run · transferQwen3-1.7Bbounded-poc-v12-cross-scale-3hop · seed 20261028

    Tried
    Froze the six question heads found in Qwen3-0.6B and tested them in Qwen3-1.7B with no new search (), feeding v10’s router heads and the shared copiers; 64 fresh keys.
    Result
    The predicted direction held on 92.2% to 100% of held-out prompts across the tested routes and splits; the model answered 127 of 128 main held-out prompts. 63/63 criteria, 1,212 arrays identical, 31/31 numbers bound by code.
    Taught
    Name the locations first, then measure.

    CautionThe relay the six heads fed into had been found by searching the larger model, and one of its three heads (18:7) differs from the smaller model’s (15:4). So these are six locations carried into a partly rediscovered pathway.

    Passevery gate · 1.7B
    Binding reason

    All gates (gate0–gate4) passed; 63/63 mechanism criteria; AI review support (31/31 reference-bound claims verified).

Read it: read down the stamps. Three runs passed every registered gate, marked in green; axis-c-q is a read-only diagnostic, which carries no verdict. Filled dots on the left rule mark runs with a verdict, the hollow dot the diagnostic, and green dots the passes. The v1 ruler has one tick per held-out prompt. Logit sizes differ between the two models, so this ledger compares them by direction and pass counts only.
Under the hoodT1 P2–P7 · T2 Table 1, §2.1 · T5 P7.5, Row 9 · doc ledger rows 10–11 · §5.4–5.6 · the published write-up

Numbering. The repository numbers twelve versions, v1 to v12, plus follow-ups: the gold/silver study, the upstream screen and the read-only axis-c-q diagnostic. The doc’s own tables number rows differently. This page names runs instead of numbering them.

The bars changed between runs, each sealed in advance. v1 and v4-confirm needed 90% unassisted accuracy. v7 passed after three of its thresholds were revised before the run, using earlier outcomes: accuracy from 85% to 80%, and two attention-shift bars. Earlier failed studies were not regraded. Under the earlier 85% bar, v7’s green/yellow split (52 of 64, 81.25%) would have fallen short; at 80%, 52 of 64 is the smallest passing count (our arithmetic). v11 required the unmodified model to answer at least 103 of its 128 main held-out prompts.

What a pass covers. Heads were selected on calibration prompts, so calibration results are selection evidence, not confirmation. The selected heads are not shown to be unique or exclusive. Matching locations across the two sizes do not prove the heads are the same component.

The protected files grew run by run. Each retired run was locked into a hash-checked vault: 1,053 protected files by the capstone, 1,416 after v8-repair, and 21,073 protected file references verified by v12.

Sources. The source code is public under Apache-2.0, with a results ledger for every study in scasella/qwen3-auto-interp. The frozen reports, prompt sets and saved arrays are private, so a public clone cannot rerun the audits. Read the write-up.

13Practical usesA status label on every card

What this is good for, and what is still an idea

This work produced two things: a mapped lookup pathway in two sizes of a real model, and a way of working that keeps AI agents honest. Some of what follows you can use today. One idea has been shown once. One fix was tried and did not pass its test. The rest are ideas nobody has tested yet. Each card says which, and what evidence it rests on.

The source code is public under Apache-2.0 in scasella/qwen3-auto-interp, with a results ledger for every study. The frozen reports, prompt sets and saved arrays are private, so a public clone cannot rerun the audits.

Fig 13.1 Who this helps

  • Everyday AI users

    This small model was swayed by the order of rows and by harmless-looking word choices, and a wrong answer did not mean the right one was missing inside it.

    3 cards

  • People building apps

    Judge any fix by what it breaks as well as what it fixes, and watch for a in a list, which this model showed on four-row tables.

    9 cards

  • Interpretability researchers

    A test that separates “repeats the question” from “already found the matching fact”, a way to measure one pathway on its own, a map carried from a small model to a larger one, and two traps to avoid.

    20 cards

  • Teams running AI agents

    A working pattern for keeping an automated scientist honest: sealed plans, decoy tests, exact replays, numbers written by code, and a tested map to start the next search from.

    8 cards

Read it: four kinds of reader, one sentence each. Every card below is tagged with the readers it serves; a tile’s button shows only its cards.

Fig 13.2 All 23 cards at a glance, with filters

  • Ready now13
  • Shown once1
  • Tested1
  • Proposed · untested8
The 23 cards by status and by readerEach column is one card. 13 are ready now, 1 has been shown once, 1 was tested, and 8 are proposed and untested. Researchers appear on 20 cards, app builders on 9, agent teams on 8 and everyday users on 3.
Status
For which readers

Showing 23 of 23

Read it: each column is one card, in the order below. The square on top is its status: filled for ready now, outlined with a centre dot for the result shown once, double for the one tested fix, dashed for untested ideas. A dot marks each reader it is for: researchers appear on 20 of the 23 cards, everyday users on 3. Filtered-out cards turn hollow. Counts are exact. Select a column to jump to its card.
Show the numbers
StatusCardsEveryday usersApp buildersResearchersAgent teams
Ready now1314116
Shown once10011
Tested10110
Proposed · untested82471
All2339208
A card can serve more than one reader, so the reader columns add up to more than the card count.

Ready nowMethods and lessons you can use today, as the write-up describes them

Ready nowNo. 01

The fixed-question, swapped-names test

Keep the question and the colors fixed and swap only the names between the facts (): “Rowan is red. Lumen is blue.” becomes “Lumen is red. Rowan is blue.” A signal that only repeats the question stays the same; a signal that found the matching fact must change. It now has a Stage 1 version: compare the router heads’ values at the with the facts’ own keys and values.

Axis C: C_q_final against C_k_color, and C_upstream_Q replaying Q_T onto clean K and V; the planted literal_query_only_control scores 0.0. Stage 1: C_U_v_qspan 2.3648 against C_U_kv_context 0.0089 logits (v11, Primary, 100% per-prompt dominance); about 17.1× in Qwen3-1.7B (v12).

EvidencePooled across both models, the routers’ signal moved the preference on 960 of 960 prompts (direction only, pooled across runs with mixed verdicts); a question-copying decoy scores 0.0. In the Stage 1 version, the values at the question beat the facts’ keys and values about 265× (v11).

For: researchers

Limits

Two sizes of one model family, and it needs matched . v11 failed its accuracy prerequisite, so its numbers are measured, not confirmed. Rowan and Lumen are illustrative; the experiments used fresh single-token words.

See the finding06 · The pointer

Ready nowNo. 02

Measure one pathway on its own

Record the query while holding their outputs clean, then replay only that query, so nothing cascades from one head into the next. The three-stage version adds a pass that starts at the question heads and travels through the routers’ values.

Two-pass mediation: pass 1 patches the routers at the final token, records the copiers’ Q_T and clamps their outputs clean; pass 2 replays only Q_T onto clean K and V. Three-stage: H₀ over [p_query..T−1] → U’s values over the question span → D’s Q_T → logits, with token T kept clean through the router layers. Planted control final_token_hop0_only must fail.

Evidencev7: both router paths 100% direction. v11: all four three-stage routes moved the preference the predicted way on all 192 held-out prompts and on the 64 used to select the heads. v12: 92.2% to 100% in Qwen3-1.7B.

For: researchers

Limits

It isolates one route by design; other routes go unmeasured.

See the finding07 · It starts at the question

Ready nowNo. 03

Exact-zero patching on fused kernels

Apply each intervention as a small high-precision change on top of the measured output, so a do-nothing changes nothing.

H^patched = BF16(H^meas,clean + [H̃^rec,patched − H^rec,clean]_FP32): an FP32 delta anchored on the measured fused-BF16 head output.

EvidenceIdentity error 0.00000000, while fused and explicit computations differ by up to 0.045.

For: researchers

Limits

Shown on Apple’s MPS backend with Qwen3 models.

See the finding04 · Five locks

Ready nowNo. 04

Check for a constant lean before averaging a part out

If a part always pushes one way, its average is that push, so removes nothing.

h(x) = s_task(x) + b_prior with E[s_task] = 0 gives μ_h = b_prior. Zero-ablation instead subtracts b_prior everywhere, which shifts the decision threshold.

EvidenceReplacing 24:7 () with its average: 1 fixed, 3 broken. Switching it off: 4 fixed, 0 broken on one set; 3 fixed, 4 broken on another.

For: researchers

Limits

One head, one word pair, in the gold/silver follow-up, which failed a calibration prerequisite.

See the finding10 · Knew it, got outvoted

Ready nowNo. 05

Judge a fix by what it fixes and breaks

Count errors fixed and right answers broken against a naive baseline, with a do-no-harm rule. A median gain can hide harm.

Centered amplification x + (α − 1)(x − μ) at α = 2.0, with 27:14 mean-ablated, gave the +1.5565 median on v3’s 64 discovery prompts, which were also the selection data.

EvidenceA median gain of +1.56 came while 15 of 17 errors got worse. The v8 repair scored 6 fixed, 1 broken, against 10 fixed, 7 broken for .

For: researchers · app builders

Limits

One model, two tasks.

See the finding11 · Four rows

Ready nowNo. 06

Let the AI point to numbers, and let code write them

The reviewer names which metric it means; code inserts the exact value.

The reviewer returns metric_refs and code binds the float64 values. The one drift before the change: 0.03109455108691406 claimed, 0.03109455108642578 in the array (4.88 × 10⁻¹³).

Evidence55 of 56 quoted numbers matched before the change. After it: 83 of 83 (v7), 109 of 109 (v10) and 31 of 31 (v12).

For: agent teams · app builders

Limits

It fixes numbers only; the reviewer’s interpretation stays advisory.

See the finding04 · Five locks

Ready nowNo. 07

Seal the plan; retire any test set you looked at

prompts, pass marks and code before the run (), and give every new idea fresh prompts and key words.

manifest.json is hashed with SHA-256 and committed before the first target forward pass (commit ff46c4b in v7). 21,073 protected file references by v12.

Evidence1,053 protected files by the capstone and 21,073 protected file references by v12; the 89.84% near miss was not rounded. In v9 the harness caught a bug that would have reused 26 retired key words, before any held-out prompt ran.

For: agent teams · researchers

Limits

It blocks specific shortcuts. Bars for a new run can still be chosen knowing earlier runs: v7 passed after three of its thresholds were revised before the run, using earlier outcomes.

See the finding04 · Five locks

Ready nowNo. 08

Test the grader on decoys first

Before grading the real model, make the grader pass a built-in mechanism and reject look-alikes. Add a new decoy for each new kind of test.

planted_pointer_model must PASS; literal_query_only_control, direct_k_color_only_control, nuisance_control and reversed_control must FAIL. The three-stage runs add final_token_hop0_only.

EvidenceGate 4 passed in the capstone with five planted models; the three-stage tests added a decoy that acts only at the answer position.

For: agent teams · researchers

Limits

The decoys test the grader, not the model.

See the finding04 · Five locks

Ready nowNo. 09

Run twice; audit with a separate script

Repeat each confirmation in a fresh process, demand outputs, and recompute every gate from the saved arrays in a separate NumPy audit.

655 .npz arrays (71 file pairs) in v5–v7, 612 (66 pairs) in v10 and 1,212 (84 pairs) in v12. The audit reuses some of the same NumPy arithmetic as the production code.

Evidence655 of 655 arrays identical in v5–v7, and 1,212 of 1,212 in v12; audit agreement within 1.53 × 10⁻⁵, against a 3.0 × 10⁻⁵ tolerance.

For: agent teams · researchers

Limits

The repeats show the numbers come out the same; they are not extra samples. The saved arrays are private, so a public clone cannot rerun the audit.

See the finding04 · Five locks

Ready nowNo. 10

Careful interpretability on one laptop

Sealed, audited causal experiments on two model sizes ran on a single 24 GB M4 Pro MacBook Pro.

EvidenceEvery run in this study, on Qwen3-0.6B and Qwen3-1.7B.

For: researchers · agent teams

Limits

Shown with 0.6B- and 1.7B-parameter models. The write-up reports no timings.

See the finding04 · Five locks

Ready nowNo. 11

Design gates that can be passed honestly

Don’t round near misses; make sure a rescue test has errors to rescue; fit each check to each head’s job; include a naive comparator; watch for ties in all-or-nothing rules; and check that fresh words are left before a run needs them.

v1: 115/128 against a sealed 116. v2: 128/128 left nothing to rescue. upstream: a uniform 30 pp gate against 29.2 and 15.0 pp. v8: +2 tied the naive +2 on vocabulary. v11: 101/128 against a required 103, on the last 168 unretired whitelist words.

Evidencev1, v2, upstream, v8, v11.

For: agent teams · researchers

Limits

Lessons from one campaign.

See the finding12 · Run history

Ready nowDerivedNo. 12

Re-test on fresh key words and layouts

Before trusting a mechanism or a score, re-run it with different key words and prompt layouts.

EvidenceThe router paths held 960 of 960 across five disjoint key pools in two models (direction only); a layout change pulled 19:5’s direction score to 50.78%, about chance, on one test; new key words lifted gold/silver accuracy from 85.94% to 96.88%.

For: researchers · app builders

Limits

Our reading of the results; the write-up does not list this as a use.

See the finding08 · It held

Ready nowDerivedNo. 13

What we saw in this small model

  • Order swayed it: 32 of 32 right when the asked-for color matched the last row, 15 of 32 when it didn’t.
  • Harmless-looking key words changed accuracy, from 85.94% to 96.88%.
  • A wrong answer didn’t mean the right one was missing: one middle-layer head pointed to the right answer on 22 of 22 errors examined.
  • Better on average hid harm: a +1.56-point median gain, with 15 of 17 errors worse.

Evidencev3’s four-row tables; the gold/silver test and v8’s fresh key words; descriptive read-outs from v1 and the gold/silver follow-up, neither of which passed its own test; v3’s turn-it-up trials.

For: everyday users · app builders

Limits

Observed in Qwen3-0.6B on made-up prompts. These are observations, not general rules.

See the finding11 · Four rows

Shown onceWorked in one sealed study that passed its gates; not yet repeated

Shown onceNo. 14

Map a pathway in a small model, then test it in a larger relative

Find the heads in the smaller model of a family, freeze their locations, and name them before testing the larger one: name the locations first, then measure what happens there. The two Qwen3 sizes share a grid of 28 layers by 16 heads, so a location in one names a location in the other.

v10: downstream screen over 176 heads (L15–25) selected {22:9, 19:5, 21:13}; upstream over 144 heads (L10–18) selected {17:1, 18:7, 16:4}; 2,134 microbatches, no coordinate prior; 108/108 criteria. v12: frozen H₀ + v10’s U + shared D, zero new Stage 0 search; C_hop0_qspan 1.15 logits (92.19%) Primary, 1.39 (100%) Vocabulary; 63/63 criteria.

EvidenceA in Qwen3-1.7B (v10) found the same three copier heads and two of the three router heads. Then the six question-head locations from Qwen3-0.6B were tested in 1.7B with no new search (, v12): 63 of 63 criteria passed, and the predicted direction held on 92.2% to 100% of held-out prompts across routes and splits.

For: researchers · agent teams

Limits

One family, one transfer. The six heads were carried into a partly rediscovered pathway (18:7 in place of 15:4), not all twelve carried over unchanged. Matching locations do not prove the heads are the same component, and effect sizes differed. Whether a map saves work in general is unmeasured: that needs investigations that start with the map compared against ones that start without it.

See the finding09 · One map, two models

TestedTried in a preregistered run: a small gain, and it failed its test

TestedNo. 15

Re-center attention to cut last-row errors

Subtract each copier’s habitual lean toward particular rows before it mixes in values, and turn up the steadiest copier.

Probability-space slot centering (β = 0.5) plus 22:9 × 2.0, chosen on calibration from a frozen 24-candidate grid, then frozen. 145 → 150 of 192 held-out. Failed three of its four gates.

Evidence: 6 fixed, 1 broken, a net gain of 5 prompts out of 192, against 10 fixed, 7 broken for turning everything up. It still failed its preregistered test: on the main held-out set it did not improve the margins of the last-row errors it targeted, and on fresh colors its net gain only tied naive amplification. It caused fewer new errors than naive amplification on both four-row sets.

For: researchers · app builders

Limits

A small pilot that did not pass. It needs the row positions, and its settings were chosen on labelled . A separate repair on the gold/silver task fixed two errors and broke two. Synthetic four-row tables only.

See the finding11 · Four rows

Proposed · untestedIdeas not yet run, each with the test that would settle it

Proposed · untestedNo. 16

A second-opinion flag

Read the middle-layer copiers’ answer and flag replies that disagree with it.

Evidence so far19:5 pointed to the right answer on 22 of 22 errors examined, and its read-out scored 126/128 against the model’s 115/128 in v1. Both are descriptive findings from runs that did not pass their own tests.

For: app builders · researchers

Limits

Not built or tested. Reading it needs hooks, so it is cheap but not free. The gold lean it targets changed with new key words.

What would show it worksA sealed test on fresh prompts shows the flag catching errors without flagging many right answers.

See the finding10 · Knew it, got outvoted

Proposed · untestedNo. 17

Protect these heads when compressing or fine-tuning a model

When quantizing, pruning or fine-tuning a Qwen3 model, keep the twelve lookup heads at higher precision, leave them out of head pruning, and limit how far fine-tuning moves them.

The report’s version: keep the Q, K, V and O projections of the twelve heads at 16 or 8 bits while quantizing the rest lower; a do-not-prune mask; a drift penalty on these heads during LoRA fine-tuning. None of it was run.

Evidence so farNone on compression or fine-tuning. The heads matter for lookup in the patching tests on these prompts; whether compressing or fine-tuning the model damages them has not been measured.

For: app builders · researchers

Limits

The selected heads are not shown to be unique or exclusive, so protecting them alone may not protect lookup.

What would show it worksOn held-out lookup prompts, a model compressed or fine-tuned with these heads protected keeps more of its accuracy than one given the same budget without protection.

See the heads05 · Three stages

Proposed · untestedNo. 18

Debias only the head that leans late

Only 19:5 leans toward the last row (+5.04 points of attention above an even sharepp over the four-slot mean); 21:13 and 22:9 lean early (−4.30 and −1.65). Correct 19:5 alone.

Slot-4 excess over the four-slot mean, Table 5: +0.05037, −0.04301, −0.01649.

Evidence so farAttention slot profiles from v8 (Table 5).

For: researchers

Limits

That centering all three heads nudged the early-leaning two toward the last row is inferred from the formula, not measured.

What would show it worksIt beats the v8 repair’s 6:1 on fresh four- to eight-row tables.

See the finding11 · Four rows

Proposed · untestedNo. 19

A possible link to “Lost in the Middle”

One head leans late and two lean early, which resembles the position bias described in “Lost in the Middle” (Liu et al., TACL 2024).

Evidence so farSlot profiles on four-row tables.

For: everyday users · app builders · researchers

Limits

This study saw a last-row pull on four-row tables in a 0.6B model; Liu et al. describe a dip in the middle of long contexts in other models. Untested.

What would show it worksPer-position accuracy on longer tables and real long prompts shows the pattern.

See the finding11 · Four rows

Proposed · untestedPartly tested · v9No. 20

JSON, tables and retrieved text

Run the same heads, unchanged, on JSON objects, Markdown tables and short config or retrieval lookups. For example:

{"api_key": "...",
 "status": "red",
 "mode": "blue"}

Evidence so farv9 tried quoted JSON and Markdown tables and failed both of its tracks. The query still beat the name stamps, 11.53× and 7.77×, but accuracy on quoted JSON fell and the quote marks shrank the margins about tenfold, so the size checks failed.

For: app builders · everyday users

Open question

Does the last-row pull show up as errors on the last field?

What would show it worksThe same direction and size tests pass on structured formats with no re-selection of heads.

See the run12 · Run history, v9

Proposed · untestedNo. 21

Other model families

Repeat the swapped-names test and the transfer on another family, such as Llama-3.2-1B or gemma-2-2b.

Evidence so farWithin the Qwen3 family, Qwen3-1.7B was tested (v10 and v12, both passed). No other family has been tested.

For: researchers

Limits

Other families use other layouts, so head names would not carry over directly.

What would show it worksUnder , the query again carries more than the key stamps, and the same three stages appear.

See the finding09 · One map, two models

Proposed · untestedNo. 22

What does the routing signal represent?

The first hop is now found: six question heads in layers 11 to 14 feed the routers. The next question is what the routing signal carries. It may encode position, aspects of the requested record, or both.

Evidence so farThe signal’s role in choosing where to read is shown by the transplant tests; its contents are not decoded.

For: researchers

Limits

An address is a useful analogy; no literal address has been found stored in the network.

What would show it worksMove records around independently of their names and values, and see which change the signal tracks.

See the finding07 · It starts at the question

Proposed · untestedNo. 23

A reusable harness template

Package the five locks as a template a new project can install, with a one-command audit.

Evidence so farThe source is public under Apache-2.0 (source only): harness, experiment runners, auditors and tests. The historical runners have fixed paths and are not turnkey replays, and the master audit stops without the private evidence.

For: agent teams · researchers

Limits

It is the code of one campaign, not yet a template.

What would show it worksA fresh project installs it and runs its own sealed study and audit end to end.

See the codescasella/qwen3-auto-interp
Under the hoodSources for every card · W, R, T1–T11

Ready now means a method or lesson as the write-up describes it. The source code is public; the per-study reports, prompt sets and saved arrays are private. Cards 12 and 13 are this page’s reading of the results (Σ), and the write-up does not list them as uses. The report’s estimate of discovery compute saved by a small-model map has no measurement behind it, so this page leaves it out. Source keys are explained in the colophon; where the published write-up (W) differs from the earlier doc, W wins.

  • 01 · T1 P6–P8; T2 §3.2, §4.2; R §2.3; T11. Pooled 960/960 is B_upstream_Q and C_upstream_Q over v4–v7 (0.6B) and v10 (1.7B): direction only, and v4–v6 failed other sealed checks. Stage 1 version: C_U_v_qspan 2.3648 against C_U_kv_context 0.0089 logits (v11 Primary, 100% per-prompt dominance); about 17.1× in v12. v11 failed its accuracy prerequisite (W).
  • 02 · T2 §3.3; T5 Release §2.4; T10, T11; W. v7 B_upstream_Q and C_upstream_Q: 100.00% direction on both splits (T2 Table 2). v11: all four three-stage routes in the predicted direction on the 192 held-out prompts and the 64 selection prompts. v12: 92.2% to 100%.
  • 03 · T2 §2.2: H^patched = BF16(H^meas,clean + [H̃^rec,patched − H^rec,clean]_FP32); “0.00000000 logit error across all runs”; fused BF16 and explicit FP32 differ by ≤ 0.045.
  • 04 · T1 P3 table; T2 §6.1. For h(x) = s_task(x) + b_prior with E[s_task] = 0, μ_h = b_prior. Mean-replacing 24:7: 1 fixed / 3 broken on both splits. Zeroing it: 4 / 0 on calibration, 3 / 4 on the 128 confirmation prompts. The gold/silver follow-up failed a calibration prerequisite (W).
  • 05 · T1 P5 steering table, all on v3’s 64 discovery prompts, which also chose the settings: α = 2.0 gave +1.4676 alone and +1.5565 with 27:14 mean-ablated, with 15/17 errors worse and 4 broken. T5 P7.5 repair table: 6 / 1 against naive 10 / 7 on 192 held-out prompts.
  • 06 · T1 P7; T2 §2.4; R; T7, T10. 56 float claims, 55 matched; the drift was 0.03109455108691406 against 0.03109455108642578 (4.88 × 10⁻¹³, 13th decimal). From v5 the reviewer picks metric_refs and code binds the values: 83/83 in v7, 109/109 in v10, 31/31 in v12.
  • 07 · T2 §2.1, App A; T5 P7.5; R; T7; W Limits. manifest.json is frozen before the first target forward pass with a pre-inference commit (ff46c4b in v7). 1,053 protected files by v7, 1,416 by v8, 21,073 protected file references by v12. v1 scored 115/128 (89.84375%) against a sealed 116/128. v9’s harness caught a worktree glob bug that would have reused 26 retired keys. v7 passed after three thresholds were revised before the run, using earlier outcomes (accuracy 85% to 80%, and two attention-shift bars).
  • 08 · T2 §2.3; R §3: planted_pointer_model must PASS; literal_query_only_control, direct_k_color_only_control, nuisance_control and reversed_control must FAIL; the three-stage runs add final_token_hop0_only.
  • 09 · T2 §2.2, §2.4; T9; T10; W Limits. 71 file pairs / 655 arrays in v5–v7; 66 pairs / 612 arrays in v10; 84 pairs / 1,212 arrays in v12. Audit agreement ≤ 1.53 × 10⁻⁵ against a 3.0 × 10⁻⁵ tolerance. The two fresh runs are not extra samples, and the audits reuse some of the same NumPy arithmetic as the production code.
  • 10 · T1 P8; T2 Abstract; W Reproducibility: one 24 GB Apple M4 Pro MacBook Pro (MPS), BF16 weights. No wall-clock timings are reported.
  • 11 · T2 Table 1; T5 §6.3.2; T10; W. v1 89.84% against 90.0%; v2 128/128 on held-out; upstream’s uniform 30 pp per-head gate against 29.2 and 15.0 pp; v8 vocabulary net +2 (2 / 0) tied the naive +2 (4 / 2); v11 101/128 against a required 103, on the last 168 unretired whitelist words.
  • 12 · Σ our reading. Five disjoint key pools, v4–v7 and v10 (R §2.3); v5 solo_19:5_A = 50.78% (65/128) while its ΔQ_T routing stayed 128/128 (T2 §6.2); v8 Track A gold/silver baseline 85.94% → 96.88% (T5 §6.3.3).
  • 13 · Σ our reading. 32/32 against 15/32 on v3’s 64 discovery prompts (T2 §6.2); 85.94% → 96.88% (T5 §6.3.3); 22/22 = 13 errors in v1 and 9 in the gold/silver follow-up, one head, after the fact, descriptive (T3 #4; W); +1.56 with 15/17 errors worse (T1 P5).
  • 14 · W; T9 §5.4; T10; T11 §5.6. v10: blind screens over 176 heads (layers 15–25) and 144 heads (layers 10–18), 2,134 microbatches, PASS with 108/108 criteria. v12: the six Stage 0 coordinates frozen from 0.6B, zero new Stage 0 search, paired with v10’s Stage 1 and the shared Stage 2; PASS with 63/63 criteria; 127/128 Primary correct unmodified; C_hop0_qspan 1.15 logits (92.19%) is the lowest route. W: “six locations carried into a partly rediscovered pathway, not all twelve carried over unchanged.”
  • 15 · T5 P7.5, §6.3.2, Row 9; W. Probability-space centering β = 0.5 with α_22:9 = 2.0, selected on calibration from a frozen 24-candidate grid; 6 fixed / 1 broken held-out (145 → 150 of 192); failed three of its four gates; the vocabulary net gain tied the naive comparator; the gold/silver repair fixed 2 and broke 2.
  • 16 · T4 §2; R §3 Use Case 1 (its wording is not used here). v1 read-out 126/128 (98.4375%) against the model’s 115/128; 22/22 = 13 + 9 errors.
  • 17 · R §3 Use Case 4: quantization, pruning and fine-tuning guardrails, proposed with no experiment.
  • 18 · T5 Table 5, Horizon 3; T6 #2. Slot-4 excess over the four-slot mean: +0.05037 (19:5), −0.04301 (21:13), −0.01649 (22:9).
  • 19 · T6 #2. Liu et al. 2024 describe a U-shaped curve over long contexts; this study’s v3 errors were a last-row pull.
  • 20 · T6 #3; T7, T8 (v9-json-hop0); W. Query over key stamps 11.53× (Primary) and 7.77× (Vocabulary) on quoted JSON and Markdown tables; quote padding compressed logit margins about tenfold and quoted-JSON accuracy dropped, so magnitude gates failed; both tracks failed.
  • 21 · T4 §3; T5 Horizon 2; T6 #1; T9 (v10 on Qwen3-1.7B); W Limits.
  • 22 · T2 §7 (the first hop was unidentified at the time); T10, T11 (v11 found Stage 0 by screening all 240 heads in layers 0–14 over the question span); W “Next experiment”.
  • 23 · T4 §4; W Code: Apache-2.0, source only; the historical runners have fixed paths and are not turnkey replays; the master audit stops without the private evidence.

14Honest scopeWhat this does not show

The edge of the map

Schematic

This is a careful map of one lookup pathway in two sizes of one model family, doing one kind of task. Here is where the map ends.

Fig 14.1 The map, annotated

Schematic
The 448-head grid of Qwen3-0.6B with the three-stage pathway and its edges markedLayer 0 at the bottom, layer 27 at the top. Mark 1: six question heads in layers 11 to 14 (13:6, 12:6, 13:14, 14:12, 11:9, 13:15) feed a question node. Mark 2: router heads 15:4, 16:4 and 17:1 in layers 15 to 17 read it and send a where-to-look signal to a pointer node. Mark 3: copier heads 19:5, 21:13 and 22:9 in layers 19 to 22 fetch the word for the answer. Mark 4: head 24:7, a hatched square, leaned toward gold in one word set. Mark 5: a hatched crescent on 19:5 marks its pull toward the last row in four-row tables.
  1. Stage 0 · question headsH₀ · layers 11–14

    13:6 12:6 13:14 14:12 11:9 13:15

    Help identify the requested record, and leave the result at the .

    They write into positions p_query..T−1; Stage 1 reads it through its values.

    Measured · v11 (failed its accuracy prerequisite)Confirmed in 1.7B · v12
  2. Stage 1 · router headsU · layers 15–17

    15:4 (), 16:4, 17:1

    Carry that information to the answer position and write the into the copiers’ query. In Qwen3-1.7B they are 16:4, 17:1 and 18:7.

    They read V over the question span and write Q_final, the copiers’ final-position query.

    Confirmed · v7 (0.6B) · v10 (1.7B)
  3. Stage 2 · D · layers 19–22

    19:5, 21:13, 22:9

    Use the pointer to pick the matching fact and copy its color to the answer. The same three in both models.

    They move V_color through OV.

    Confirmed · v7 (0.6B) · v10 (1.7B)
  4. 24:7 leaned toward “gold” in one word set

    It favored gold on all 192 prompts in the gold/silver test, with that set of key words. With a fresh set, the lean largely vanished; 24:7 itself was not re-measured.

    Measured · gold/silver follow-up
  5. 19:5 pulled toward the last row

    In four-row tables it put 8.07 times as much attention on as on the first.

    Measured · v8 (failed its test)

Beyond this map. One more size of the same family has been tested. Other families and longer contexts have not, and structured formats only partly.

  • Qwen3-1.7B

    Tested · v10, v12
  • Llama-3.2-1B?

    Proposed · untested
  • longer contexts?

    Proposed · untested
  • {"status": …}

    JSON and tables?

    Partly tested · v9
Read it: the lit heads are the pathway this study mapped and checked, drawn on Qwen3-0.6B’s grid: teal triangles help identify the requested record, orange diamonds carry that to the answer, blue circles copy the value. Numbers 4 and 5 mark where the model leans; the dashed tiles mark what has not been mapped. Schematic: head positions are exact; the wires, the lean mark and the ghost tiles are drawings.
Show the numbers
#MarkWhat it showsNumbersStatus
113:6, 12:6, 13:14, 14:12, 11:9, 13:15 (layers 11–14)help identify the requested recordv11 (0.6B): predicted direction on all 192 held-out prompts and the 64 selection prompts, 63/63 mechanism criteria, but 101/128 correct against a required 103; v12 (1.7B, no new search): 92.2%–100% of held-out prompts, 63/63 criteriaMeasured · v11; confirmed in 1.7B · v12
215:4, 16:4, 17:1 (layers 15–17); 16:4, 17:1, 18:7 in 1.7Bcarry that to the answer, write the pointer960/960 pooled direction, v4–v7 and v10 (direction only; runs with mixed verdicts); capstone 5/5 gates, 80/80 checks; v10 108/108 criteriaConfirmed · v7, v10
319:5, 21:13, 22:9 (layers 19–22)fetch the wordcapstone 5/5 gates, 80/80 checks; v10’s blind search over 176 heads found the same threeConfirmed · v7, v10
424:7leaned toward gold192/192 prompts in the gold/silver test; fresh key words in v8 took accuracy from 85.94% to 96.88% (24:7 not re-measured)Measured · gold/silver follow-up
519:5pull toward the last row8.07× last row over first row (v8); 32/32 right when the asked-for color matched the last row, 15/32 when it didn’t (v3)Measured · v8 (failed its test); seen after the fact · v3
6Qwen3-1.7B; Llama-3.2-1B; longer contexts; JSON and tablesother sizes, families and formats1.7B tested in v10 and v12; JSON and tables partly tested in v9, which failed both of its tracks; the rest untestedTested · partly tested · proposed

Scope: what this does not show

  1. Pointer-like routing. The routing signal helps decide where to read before the value is copied, and an address is a useful analogy. What it represents is open: position, aspects of the requested record, or both. Moving records around independently of their names and values could tell these apart.
  2. A tested twelve-head subgraph, not an exhaustive circuit. The selected heads are not shown to be unique or exclusive, and this is not a complete account of how the model does lookup. Intervention ratios are sizes of controlled contrasts, not shares of the model’s whole decision.
  3. Selection evidence. Heads were selected on calibration prompts, so calibration results are selection evidence, not confirmation.
  4. Two sizes of one family, Qwen3-0.6B and Qwen3-1.7B. Other families are untested. Matching locations across the two sizes do not prove the heads are the same component, and the pathway that passed in the larger model uses 18:7 in place of 15:4. Effect sizes differ between the models, so only directions and shares are compared.
  5. Short, synthetic lookup prompts with 2 to 4 records. “Answer preference” means the model’s preference between two specified answer words, such as red and blue, at the next token. Free-form generation was not tested. JSON and tables were partly tested once (v9), and that run failed both of its tracks.
  6. Three studies passed every registered gate: the six-head route in Qwen3-0.6B (v7), the route search in Qwen3-1.7B (v10) and the transfer (v12). v7 passed after three of its thresholds were revised before the run, using earlier outcomes. The smaller model’s three-stage study (v11) failed its accuracy prerequisite, so that pathway did not receive a full confirmation in Qwen3-0.6B.
  7. The project’s own report. The source code is public (scasella/qwen3-auto-interp); the frozen reports, prompt sets and saved arrays are private, so a public clone cannot rerun the audits. The two fresh runs per confirmation show the numbers repeat exactly; they are not extra samples, and the audits reuse some of the same NumPy arithmetic as the production code. No one outside the project has reviewed the work, and nothing has been peer reviewed.

Ask Qwen3 “Rowan is red. Lumen is blue. What color is Rowan?” and you can now point to where the answer comes from: six heads in layers 11 to 14 help identify which record the question asks about, three heads carry that to the answer position, and three heads in layers 19 to 22 copy the color. Six head locations from the small model told the agents where to look in the larger one, and that prediction held. You can also point to where it goes wrong: a later head that leaned toward one word in one test, and a copier that drifts toward the last row. AI agents proposed the explanations, and frozen tests decided which ones survived.

Rowan and Lumen are illustrative names; the experiments used fresh single-token words.

If you are new to AI

  1. Inside this model, looking something up happens in three stages: one group helps identify the requested record, one carries that to the answer, and one copies the value.
  2. The right answer can be inside a model even when it is not what comes out.
  3. An explanation of one model can guide an experiment in another: six head locations from the small model told the agents where to look in the larger one.
  4. An AI can help do real science when code holds it to rules sealed in advance.

If you work in interpretability

  1. Run a fixed-question, swapped-names test () before claiming key matching.
  2. Name the locations first, then measure in the other model.
  3. Across models, compare directions and shares; raw logit sizes sit on different scales.
  4. Use over to locate a missing effect, and state its assumptions.
  5. Check for constant offsets before .
  6. Score and repairs by fixes and breaks against a naive baseline.
  7. Bind every reported number in code.
Under the hoodWhat we did not prove · W Limits · T2 §7 · T11
  • “Heads were selected on calibration prompts, so calibration results are selection evidence, not confirmation. The selected heads are not shown to be unique or exclusive, and this is not a complete account of how the model does lookup.” (W, Limits)
  • “Matching locations across the two sizes do not prove the heads are the same component. The pathway that passed in the larger model uses 18:7 in place of 15:4.” (W, Limits)
  • “‘Answer preference’ and accuracy here mean the model’s preference between two specified answer words, such as red and blue, at the next token. Free-form generation was not tested.” (W, Limits)
  • “The two fresh runs per confirmation show the numbers repeat exactly; they are not extra samples. The separate audits reuse some of the same NumPy arithmetic as the production code. No one outside the project has reviewed the work.” (W, Limits)
  • “The confirmation of the last two stages passed after three of its thresholds were revised before the run, using earlier outcomes: accuracy from 85% to 80%, and two attention-shift bars. Earlier failed studies were not regraded.” (W, Limits)
  • The six heads of the first manuscript are “a verified, high-leverage causal subgraph, not an exhaustive or exclusive circuit. Separate Q and K patch effects need not sum linearly through softmax and RMSNorm, and intervention ratios represent controlled contrast magnitudes rather than percentages of total causal mediation.” (T2 §7) The same limits apply to the twelve, which passed every gate only in Qwen3-1.7B, with 18:7 in place of 15:4.
  • The first manuscript said the heads before 17:1, 16:4 and 15:4 were not identified (T2 §7). v11 then screened all 240 heads in layers 0–14 across the question span and selected six in layers 11–14 (T10, T11). The map no longer marks that gap.
  • The report’s estimate that a small-model map cuts discovery compute has no measurement behind it, so this page leaves it out. The write-up says measuring that benefit needs investigations that start with the map compared against ones that start without it.
  • 24:7’s lean comes from the gold/silver follow-up only, which failed a calibration prerequisite. It is not shown to cause the v1 red/blue errors.

15ReferenceGlossary, sources, colophon

Glossary, sources and colophon

Every term this page uses, where its numbers come from, and the machine it all ran on.

The study is written up in plain language on casella.dev, with its limits and a verdict for every study.

Read the write-up →

Glossary

29 terms · plain sentence, then the technical line

Any dotted-underlined word on the page opens its entry from this list.

Token
A word or piece of a word. The model reads a prompt as a row of tokens. The keys in this study are single-token words.
Layer
One of the model’s 28 processing stages, stacked from layer 0 at the bottom to layer 27 at the top. Both models in this study have 28. Transformer blocks 0–27, each with attention and a SwiGLU MLP: width 3,072 in Qwen3-0.6B, 6,144 in Qwen3-1.7B.
Attention head
A small unit inside a layer that looks back at earlier words and copies information from them. Each layer has 16, so each model has 448. Qwen3-0.6B and Qwen3-1.7B share this 28 × 16 grid, so a head’s name points to the same place in both. 16 query heads per layer share 8 key/value heads (GQA: query head h uses KV head ⌊h/2⌋); head size 128, in both models.
Head name (19:5)
“19:5” means layer 19, head 5, counting from 0. The same name means the same place in both models. layer:head, 0-indexed.
Query, key, value
A head at the last word sends out a query, compares it with a key on every earlier word, and copies the values of the best matches. The query and keys decide where to look; the values decide what gets copied. Attn(Q_T, K_1..T, V_1..T). QK sets the attention pattern; OV writes the output (Elhage et al., 2021).
Stage (0, 1, 2)
One of the three groups of heads in the lookup pathway, in the order they act. Stage 0, six question heads in layers 11–14, helps identify the requested record. Stage 1, three router heads, carries that to the answer position. Stage 2, three copier heads in layers 19–22, copies the value. Stage 0 = H₀ {13:6, 12:6, 13:14, 14:12, 11:9, 13:15}; Stage 1 = U {15:4, 16:4, 17:1} in 0.6B, {16:4, 17:1, 18:7} in 1.7B; Stage 2 = D {19:5, 21:13, 22:9} in both.
Question span
The question and the words after it, up to the answer position. Stage 0 heads work there, and Stage 1 heads read from there. Positions p_query..T−1 for the Stage 0 patches; Stage 1 reads its values over p_query..T.
Pointer
This page’s word for the where-to-look signal the router heads write into the last word’s query. Stage 1 writes it from what Stage 0 left at the question. A context-resolved routing signal in Q_final, written by Stage 1 from values read over the question span. Pointer-like; what it represents (position, aspects of the requested record, or both) is open.
Points (logits)
The model’s raw score for a possible next word. On this page, “points” means logits. One logit of lead multiplies the two-way odds by about 2.7 (e¹). Logit sizes differ between the two models, so only directions and shares are compared across them.
Margin
How far the right color’s score leads the wrong color’s score, in points. It compares two specified answer words, such as red and blue; free-form answers were not tested. m(x) = ℓ(x)·(logit_y0 − logit_y1), positive when the model prefers the bound color.
Transplant test (patching)
Copy one internal signal from a twin prompt into the original run, change nothing else, and see whether the answer moves. Activation patching. Effect Δm = m_clean − m_patched; Δm > 0 is a push toward the twin’s answer.
Twin prompt
A version of the prompt that differs in one controlled way and has the opposite right answer. The counterfactual donor, from the same 8-prompt factorial group.
Direction
The share of prompts where a transplant pushed the preference the predicted way. It counts direction only. Size and flipped answers are separate questions. Share of prompts with Δm > 0.
Switches A, B, C
Three ways to change a prompt: A swaps the colors, B asks about the other name, C swaps the names between the facts while the question stays the same (“Lumen is red. Rowan is blue. What color is Rowan?”). Axes A, B and C of the 2×2×2 factorial: c_order, q_key, k_order.
Held-out prompts
Test prompts kept aside and never used to choose anything. Primary (n=128) and Vocabulary (n=64) splits.
Calibration prompts
A small set of prompts used to choose or check settings before the real test. Heads were selected on them, so results there are selection evidence, not confirmation. n=64 per run.
Transfer
Freezing head locations found in one model and testing them in another, with no new search. v12: the six Stage 0 coordinates from Qwen3-0.6B, applied to Qwen3-1.7B with zero new Stage 0 search; 63/63 criteria; predicted direction on 92.2%–100% of held-out prompts across routes and splits.
Pre-registration (sealing)
Writing down the plan, the test prompts and the pass marks before running the experiment, so they cannot change after the results are seen. SHA-256 manifest.json frozen before the first target forward pass, plus a pre-inference git commit.
SHA-256 fingerprint
A fingerprint of a file or text. Change one character and the fingerprint changes completely. A cryptographic hash. It shows a file is unchanged since it was recorded; it keeps nothing secret.
Bit-identical
Two separate runs saved exactly the same numbers, down to the last bit. That shows the numbers repeat; the repeats are not extra samples. 655 .npz arrays in v5–v7, 612 in v10 and 1,212 in v12 matched across two fresh OS processes.
Sign test and p-value floor
A check that counts how many independent groups of prompts moved the predicted way. With 16 groups the smallest possible p-value is about 0.000015, which means every group agreed. Exact one-sided binomial sign test over group means; floors 2⁻¹⁶ (16 groups) and 2⁻⁸ ≈ 0.0039 (8 groups).
Ablation
Switching a part off (zero ablation) or replacing its output with its average (mean ablation) to see what changes. Mean ablation leaves a constant offset in place.
Steering (amplification)
Turning a part’s output up or down to push the model’s behavior. Centered amplification x + (α − 1)(x − μ).
Recency pull
A pull toward the most recent item, here the last row of a table.
Residual stream
The running list of numbers for each word. Every layer reads it and adds to it. Width 2,048 in Qwen3-1.7B.
Logit lens
Reading the model’s running guess partway up the layers, before it has finished.
Coalition
Heads that do the same job together. Each stage is one; on this page the word most often means the three copiers 19:5, 21:13 and 22:9.
Bookkeeping (conservation)
If a head’s output depends only on its query, keys and values, an effect missing from two of them must sit in the third. Conservation over Attn(Q_T, K, V). It assumes the parts add, which softmax and normalization need not respect, so the page calls it a prediction.

Reading the labels

evidence chips and use statuses
Confirmed
Measured in a sealed study that passed every registered gate: v7 (Qwen3-0.6B), v10 or v12 (Qwen3-1.7B). v7 passed after three of its thresholds were revised before the run, using earlier outcomes.
Measured
A real number from a diagnostic or from a study whose verdict was not a pass; the study is named beside it.
Descriptive
Looked at after the fact, or pooled across runs.
Derived
This page’s arithmetic on reported numbers.
Schematic
A drawing that shows an idea; positions and sizes are not data.
In place · self-reported
A part of the harness the write-up reports using. The source is public; the evidence is private, and no one outside the project has checked it.
Ready now
A method or lesson you can use today, as described.
Shown once
Worked in one sealed study that passed its gates; not yet repeated.
Tested
An experiment was run; the card says how it went.
Proposed · untested
An idea that has not been run.

Sources and provenance

ModelsQwen/Qwen3-0.6B, revision c1899de289a04d12100db370d81485cdf75e47ca; Qwen/Qwen3-1.7B, revision 70d244cc86ccca08cf5af4e1e306ecf908b1ad5e. BF16 weights.
ArchitectureBoth: 28 layers × 16 query heads (448 heads), 8 key/value heads per layer, head size 128. Qwen3-0.6B: SwiGLU MLP 3,072. Qwen3-1.7B: 1.72B parameters, residual width 2,048, MLP 6,144.
HardwareOne 24 GB Apple M4 Pro MacBook Pro (MPS)
AgentsCodex CLI calls running gpt-6-luna proposed and reviewed explanations; frozen, executable tests decided which ones survived.
StudiesTwelve numbered studies plus follow-ups (v1 → v12, with upstream and the gold/silver follow-up). Three passed every registered gate: v7 (Qwen3-0.6B, the six-head route), v10 (Qwen3-1.7B, the route search) and v12 (Qwen3-1.7B, the six-head transfer). v7 passed after three of its thresholds were revised before the run, using earlier outcomes. The others were inconclusive or failed.
Capstone manifestdata/bounded-poc-v7-capstone/manifest.json · SHA-256 a59566919a93607e7eff114aa4342807978294ce2b75577cd097fbb55ab9a899 · pre-inference commit ff46c4b
Protected files21,073 protected file references by v12 (1,053 protected files by the capstone; 1,416 after v8)
Repeat runsBit-identical across two fresh processes: 655 arrays (71 file pairs) in v5–v7, 612 (66 pairs) in v10 and 1,212 (84 pairs) in v12. The repeats are not extra samples.
Review numbersEvery number in the AI review is bound by code: 83/83 in v7, 109/109 in v10, 31/31 in v12
Tests202+ unit and planted-control tests (report); the earlier manuscript appendix lists 103 unit tests and 66 Metal hardware regressions
Codescasella/qwen3-auto-interp, Apache-2.0, source only: harness, experiment runners, auditors and tests. At commit b193b4a: results ledger, manuscript, harness and mathematics, longer write-up and what is left out.
EvidenceThe per-study reports, prompt sets, saved arrays and audit evidence are private, so a public clone cannot rerun the audits. The historical runners have fixed paths and are not turnkey replays.
StatusPublished 2026-10-23 · source public, evidence private · three studies passed, the others were inconclusive or failed · no one outside the project has reviewed the work · not peer reviewed
Source keysW the published write-up (it wins where it differs from the doc) · R report · T1 narrative (parts P1–P8) · T2 manuscript · T3 the five findings in plain English · T4 practical uses and next steps · T5 the v8-repair addendum · T6 ranked next steps · T7 v9 and v10 narrative · T8 ledger rows for v9 and v10 · T9 manuscript §5.4–5.5 · T10 v11 and v12 narrative · T11 manuscript §5.6

Every number on this page comes from Stephen Casella’s write-up: the published post, “Agents traced a lookup pathway in Qwen3”, and the longer project doc behind it, “Putting an AI Scientist in a Cryptographic Straitjacket”. Where they differ, this page follows the published post. Arithmetic on reported numbers is tagged Derived (Σ); drawings that show an idea are tagged Schematic (✎).

24 GB M4 Pro · MPS
  • v7 pass · 0.6B · 80/80
  • v10 pass · 1.7B · 108/108
  • v12 pass · 1.7B · 63/63

The three studies that passed every registered gate, with their criteria. v7 passed after three of its thresholds were revised before the run, using earlier outcomes.

One HTML file, no libraries. Animations follow your reduced-motion setting and the Motion switch above.