The full tests confirm the preliminary post's main finding on 18 times
as many checks: four models under 1B parameters know, halfway through the network, when two texts state different facts,
and still answer PASS. LFM2.5-230M and Qwen3-0.6B caught 0 of 440 wrong texts each. A judge that reads their internal
state instead is right 85% and 88% of the time. Two things came out differently: reworded texts are harder than the quick
run showed, and steering works for the Qwen models after all.
What ran
The same four tests as in the preliminary post, plus the judge that reads the direction, on
the same four models (LFM2.5-230M Q6_K, LFM2.5-350M Q5_K_M, Qwen3-0.6B and Qwen3.5-0.8B Q8_0), the same CPU server,
llama.cpp b11946, greedy decoding, thinking off. It ran for 2 hours 51 minutes, one model after another.
More checks, and harder ones. 1,904 checks per model from 24 kinds of change (the small code-test domain ran out of
distinct pairs for two of the 26 kinds). Each pair is asked four ways:
the wrong text in the reference's wording, and reworded,
the right text as an exact copy, and reworded ("Priya Chen paid Omar Rahman 4100 dollars on Thursday." against
"On Thursday, Omar Rahman received 4100 dollars from Priya Chen.").
In the quick run every right text was an exact copy, so "the texts differ" could have meant "not a copy". Here it can't.
Tune and report as before: anything fitted (a threshold, a direction, a layer) is fitted on 13 kinds of change
(1,024 checks), every number below is measured on the other 11 (880 checks: 440 wrong, 440 right; both kinds that ran out
of pairs were report kinds). I also made sure no
prompt appears in both halves: the small code-test domain repeats its base texts, and without that check 31 prompts would
have landed on both sides.
Test 1 from the dumps. The probability test used my probe tool's logits instead of a second pass through llama-server.
The two agree within about 0.1 log-prob (checked in the preliminary post), and this saved what I estimated at about two hours of server runs.
Results
880 checks per model
230M
350M
Qwen3 0.6B
Qwen3.5 0.8B
Own answer: right
50.0%
61.5%
50.0%
54.0%
Own answer: wrong caught (of 440)
0
104
0
36
P(FAIL) threshold: right
68.2%
76.7%
82.0%
92.5%
Direction AUC, best layer
0.92 (L8)
0.95 (L10)
0.95 (L16)
0.98 (L13)
Direction AUC, last layer
0.84
0.89
0.89
0.97
Direction judge: right
85.2% (L8)
83.9% (L8)
87.7% (L16)
93.0% (L13)
…accepts copies / reworded
96% / 80%
99.5% / 62%
99% / 79%
100% / 82%
The direction is the average internal state of the wrong-text checks minus that of the right-text ones, at one layer,
fitted on the tune kinds. The direction judge reads it with a threshold; its layer is picked on the tune kinds alone
(fit on half of them, score on the other half). AUC: the chance that a random wrong text scores higher than a random right
one (0.5 = no signal, 1.0 = perfect).
Per layer: how well the internal direction separates wrong from right texts on the 880 report checks (solid,
"knows"), and how well the PASS/FAIL readout of the same state does (dashed,
"says", all 1,904 checks). Dashed grey line: no signal. Hover a point for its values. Data:
2026-11-02-internals-full-layers.csv.
What held
The models still don't say it. 0 of 440 wrong texts caught by the 230M and by Qwen3-0.6B, 36 by Qwen3.5-0.8B.
They still know it, at the same layers. Picked from the tune kinds alone, the judge's layers are 8, 8, 16 and 13:
where the quick run pointed. It beat both the spoken answer and the P(FAIL) threshold in every model, by 0.5 points for
the 0.8B and by 17 points for the 230M.
The same attention heads. The head that looks more at the changed words when they really differ is the same one as
in the quick run: 230M layer 8 head 1 (AUC 0.87), 350M layer 8 head 11 (0.97), Qwen3-0.6B layer 15 head 15 (0.99),
Qwen3.5-0.8B layer 11 head 5 (0.97). They sit at or just before the layer where the direction appears.
The readout leans the wrong way in the middle. Read through the model's own output layer, the 350M's state at
layer 11 and the 0.6B's at layer 16 point toward PASS more for wrong texts than for right ones (AUC 0.32 and 0.29),
while the direction at the same layers separates them well.
What changed from the preliminary post
Rewording costs more than the quick run showed. The best direction AUC fell from 0.99–1.00 to 0.92–0.98, and the judge
from 88–100% to 84–93%. Most of the drop is in reworded right texts: the 350M's judge accepts 99.5% of copies but only
62% of rewordings. For these models "the texts differ" partly means "the wording differs". The preliminary post's check
on 20 reworded texts suggested this shortcut didn't matter; on 440 per model it does, most for the 350M.
Steering works for the Qwens, at the right strength. The preliminary post said that pushing on the direction only moves
the habit. On the full run, on 176 report checks per model (88 wrong, 88 right; "random push" = a random direction of the
same length and strength):
right of 176
no push
best push
caught / accepted
right
random push
230M, L8
88
2×
1 / 88
89
88
350M, L8
109
1×
25 / 87
112
109
0.6B, L16
88
2×
68 / 72
140
88
0.8B, L13
96
1×
87 / 73
160
88
The quick run tried 1× and 4× on the 0.6B and missed the 2× between them. Pushed by the right amount, the Qwens become
decent judges (80% and 91%) that a random push of the same length doesn't make (50% each). A random push at 2× did move
the 0.8B to 122 of 176, so it sits close to its tipping point. One step stronger than the best turns every answer into
FAIL (the 0.8B at 2×: 88 caught, 0 accepted), and the right strength differs per model. The two LFM models barely move
at any strength tried.
What I take from it
Knowing and saying are separate in these models. The comparison is there in the middle of the network for all four;
the answer word doesn't carry it. That's why fourteen prompts in the 230M post moved the habit and
never the judgement.
Reading is the steady way to use it. The direction judge needs a few labelled examples per model and a threshold,
and it was the best of the three verdicts in every model. Steering can come close for the Qwens, but only at a strength
that has to be found per model, one step away from breaking.
Rewording is the weak spot. A judge built this way would let fewer wrong texts through than the models' own answers,
but it would also turn away some correct rewordings, a fifth of them for three models and nearly two fifths for the 350M.
Next
Switch the comparing heads off and see whether the direction disappears. That would show they cause it rather than
just coincide with it.
Find out why rewording fools the 350M so much more than the other three.
Other quantisations of the same models.
The data
2026-11-02-internals-full-layers.csv: per model and layer, the direction's
AUC on the report checks and the logit lens's AUC on all checks (the chart).
How far to trust it: 880 held-out checks per model (176 for steering), one file per model, my own generated texts in
five everyday domains. The main effects (answers catching 0 of 440 wrong texts, judges right 85–93% of the time) are far
outside noise. The steering strengths are a
coarse grid of three, so the best strengths are approximate.