Data provenance
ex-2.2.3 · 5680915 · run 2026-09-09
via reports/m2/ex-2.2.3/arrays, reports/m2/ex-2.2.3/metrics
ex-2.2.7 · d8f3ebf · run 2026-09-11
via reports/m2/ex-2.2.7/arrays, reports/m2/ex-2.2.7/metrics

Ex 2.2.7: a pilot of the syntax embeddings

A scouting run into why the embeddings of the op words and = hold part of the anchor axis, which is what a full-position projection pays for on the non-red lines.

The readout puts it there, to predict = after a red operand, and the tied table passes it to the embedding. Given a readout table of its own, the model keeps the component on that table and the syntax embeddings come mostly clean. Leaving the embeddings unanchored does not clean them.

Untying costs nothing on task or placement, and brings the non-red cost of the projection down toward the cost of the operand-only edit. The pilot proposes it for the handover, since it needs nothing from the grammar. Under the whole-line labeller a few seeds lose selectivity, so that labeller should go in with a check rather than by default.

Observations

Why, and what we ran

Ex-2.2.2's E8 found the anchor axis on the embeddings of the op words and =, at a few tenths in every anchored model, and ex-2.2.3 found more of it at the heavier adopted point. That component is what a full-position projection pays for on the non-red lines, and the operand-only edit routes around it only because this grammar tells us where the operands are. In M3 there is no operand position, so the M3-shaped operator is full-position and needs the syntax embeddings clean. The tied-readout item and the design's Prep C each name a mechanism; this pilot runs both, with a third beside them.

nGPT ties the readout to the embedding, so one vector does two jobs: it is the residual stream's starting state when its token is read, and it is the logit of its token at every position that predicts it. Three mechanisms could put the axis on it.

  1. The direct pull. The anchor term acts at every residual slice, the embedding included, and the labelled span covers the op word and =. Their slice-0 states are the embeddings themselves.
  2. The tied readout. After a red operand the stream sits near e₁; the cheapest way to raise the logit of the token that follows is to lean that token's embedding the same way.
  3. The blocks. A block that reads the component from the stream at a syntax position has a reason to keep it there, whichever table put it in.

Part A prices the component without training anything. On ex-2.2.3's stored checkpoints (recipe-short, 20 seeds, t00, 5 seeds, control-short, 5 seeds) we strip the axis component from the syntax embeddings on the input side only (the embedding, with the original table kept as the readout), the output side only, or both, and read the next-token accuracy at each position on the red and non-red probe lines, and the full-position projection's cost on the stripped model. A control turns the same embeddings by the same angle along a random direction off the axis, to read how much of an input-side cost is the turn itself. Whichever side loses the syntax predictions is where the component works.

Part B retrains ex-2.2.3's recipe-short (λ = 0.1, 50 epochs) three ways, each removing one mechanism, and reads Part A's table, E8's embedding-component table, and ex-2.2.3's placement and suppression statistics on every run. The first two also run under ex-2.2.6's whole-line labeller, which the handover proposes to adopt and which pulls the syntax positions by design.

arm seeds readout anchored slices syntax held off axis labeller
blocks-only 9 tied blocks only no operands both terms skip the embedding slice (Prep C)
untied 9 untied all no operands a readout table of its own, from a copy of the embedding
syntax-off-axis 9 tied all yes operands tied table; the syntax embeddings held off the axis every step
blocks-only-line 9 tied blocks only no whole line blocks-only, under the whole-line labeller
untied-line 9 untied all no whole line untied, under the whole-line labeller
recipe-short 20 tied all no operands production, ex-2.2.3's recipe

syntax-off-axis (stored as rows-clean) is the simplest fix that keeps the table shared: after every optimizer step, the same projection that keeps nGPT's embeddings at unit length also zeroes the axis component of every non-color embedding. untied gives the readout a table of its own, initialised as a copy of the embedding, so the anchor and anti-subspace terms keep acting on the embedding and the logits are free. blocks-only is Prep C: both anchoring terms skip slice 0.

Where the component works

Part A on the stored checkpoints. Each panel is one of the three informative next-token predictions on the mix probe lines: = from op2, the answer from =, and the newline from the answer. The x axis is the strip condition. A filled marker is the red lines (both operands' redness at least 0.8), a hollow one the non-red lines; the small dots are the seeds and the larger marker their mean.

A grid of small panels, three rows by three columns. Rows are the three next-token predictions: the equals sign, the answer, and the newline. Columns are the stored arms recipe-short, t00, and control-short. In each panel the five strip conditions run along the x axis (clean, input, output, both, and the input control) and next-token accuracy along the y axis, with filled markers for the red lines and hollow ones for the non-red lines; each seed is a small dot beside the mean. A grid of small panels, three rows by three columns. Rows are the three next-token predictions: the equals sign, the answer, and the newline. Columns are the stored arms recipe-short, t00, and control-short. In each panel the five strip conditions run along the x axis (clean, input, output, both, and the input control) and next-token accuracy along the y axis, with filled markers for the red lines and hollow ones for the non-red lines; each seed is a small dot beside the mean.

Next-token accuracy on the mix probe lines under each strip, on the stored checkpoints. Rows are the predictions of =, the answer, and the newline; columns are the stored arms. Filled markers are the seed means on the red lines, hollow on the non-red, with one small dot per seed. input strips the axis component from the syntax embeddings and keeps the original table as the readout; output the reverse; both strips it from the shared table; the control moves the embeddings the same distance along a random direction off the axis.

The same strips on the pilot arms. An arm whose syntax embeddings are already clean should show no difference across its strips; the untied arms split the two tables, so input and output strip different tables there.

A grid of small panels, three rows by five columns. Rows are the three next-token predictions: the equals sign, the answer, and the newline. Columns are the pilot arms blocks-only, untied, syntax-off-axis, blocks-only-line, and untied-line. In each panel the five strip conditions run along the x axis and next-token accuracy along the y axis, with filled markers for the red lines and hollow ones for the non-red lines; each seed is a small dot beside the mean. A grid of small panels, three rows by five columns. Rows are the three next-token predictions: the equals sign, the answer, and the newline. Columns are the pilot arms blocks-only, untied, syntax-off-axis, blocks-only-line, and untied-line. In each panel the five strip conditions run along the x axis and next-token accuracy along the y axis, with filled markers for the red lines and hollow ones for the non-red lines; each seed is a small dot beside the mean.

Next-token accuracy on the mix probe lines under each strip, on the pilot arms. Same layout as the stored figure: rows are the predictions of =, the answer, and the newline; filled markers are the seed means on the red lines, hollow on the non-red, with one small dot per seed.

armstripanswer acc, redanswer acc, non-redP(answer), redP(answer), non-redprojection: red accprojection: non-red acc
recipe-shortclean1.00 ±0.001.00 ±0.000.97 ±0.020.98 ±0.010.01 ±0.040.973 ±0.035
input0.55 ±0.290.82 ±0.170.52 ±0.260.76 ±0.160.01 ±0.040.973 ±0.035
output1.00 ±0.001.00 ±0.000.97 ±0.020.98 ±0.010.01 ±0.040.973 ±0.035
both0.55 ±0.290.81 ±0.170.51 ±0.260.75 ±0.160.01 ±0.040.973 ±0.035
input (control)0.41 ±0.330.61 ±0.270.37 ±0.300.53 ±0.300.03 ±0.090.716 ±0.352
t00clean0.89 ±0.051.00 ±0.000.74 ±0.040.97 ±0.000.00 ±0.000.396 ±0.365
input0.01 ±0.020.02 ±0.030.01 ±0.010.02 ±0.030.00 ±0.000.396 ±0.365
output0.90 ±0.051.00 ±0.000.76 ±0.040.97 ±0.000.00 ±0.000.199 ±0.245
both0.00 ±0.010.00 ±0.000.01 ±0.010.00 ±0.000.00 ±0.000.199 ±0.245
input (control)0.01 ±0.010.00 ±0.000.01 ±0.010.00 ±0.000.01 ±0.010.010 ±0.009
control-shortclean1.00 ±0.001.00 ±0.000.97 ±0.010.98 ±0.000.97 ±0.040.955 ±0.052
input0.88 ±0.120.94 ±0.110.83 ±0.120.89 ±0.150.97 ±0.040.955 ±0.052
output1.00 ±0.001.00 ±0.000.97 ±0.010.98 ±0.000.97 ±0.040.955 ±0.052
both0.88 ±0.120.94 ±0.110.83 ±0.120.89 ±0.150.97 ±0.040.955 ±0.052
input (control)0.61 ±0.420.69 ±0.450.58 ±0.380.65 ±0.430.66 ±0.420.645 ±0.436
blocks-onlyclean1.00 ±0.011.00 ±0.010.96 ±0.030.98 ±0.020.17 ±0.450.980 ±0.018
input0.69 ±0.250.85 ±0.180.66 ±0.230.80 ±0.170.17 ±0.450.980 ±0.018
output1.00 ±0.011.00 ±0.010.96 ±0.030.98 ±0.020.17 ±0.450.980 ±0.018
both0.69 ±0.250.85 ±0.180.66 ±0.230.80 ±0.170.17 ±0.450.980 ±0.018
input (control)0.60 ±0.300.68 ±0.330.54 ±0.280.62 ±0.310.12 ±0.190.784 ±0.327
untiedclean0.99 ±0.021.00 ±0.000.95 ±0.040.98 ±0.020.02 ±0.030.983 ±0.024
input0.95 ±0.030.96 ±0.120.89 ±0.040.92 ±0.130.02 ±0.030.983 ±0.024
output0.99 ±0.021.00 ±0.000.95 ±0.040.98 ±0.020.02 ±0.030.983 ±0.024
both0.95 ±0.030.96 ±0.120.89 ±0.040.92 ±0.130.02 ±0.030.983 ±0.024
input (control)0.82 ±0.180.86 ±0.170.77 ±0.180.82 ±0.180.02 ±0.030.909 ±0.114
syntax-off-axisclean1.00 ±0.011.00 ±0.000.97 ±0.010.98 ±0.020.02 ±0.020.987 ±0.022
input1.00 ±0.011.00 ±0.000.97 ±0.010.98 ±0.020.02 ±0.020.987 ±0.022
output1.00 ±0.011.00 ±0.000.97 ±0.010.98 ±0.020.02 ±0.020.987 ±0.022
both1.00 ±0.011.00 ±0.000.97 ±0.010.98 ±0.020.02 ±0.020.987 ±0.022
input (control)1.00 ±0.011.00 ±0.000.97 ±0.010.98 ±0.020.02 ±0.020.987 ±0.022
blocks-only-lineclean1.00 ±0.011.00 ±0.000.97 ±0.040.98 ±0.010.15 ±0.190.927 ±0.282
input0.69 ±0.270.84 ±0.200.64 ±0.260.78 ±0.210.15 ±0.190.927 ±0.282
output1.00 ±0.011.00 ±0.000.97 ±0.040.98 ±0.010.15 ±0.190.927 ±0.282
both0.69 ±0.270.84 ±0.200.64 ±0.260.78 ±0.210.15 ±0.190.927 ±0.282
input (control)0.54 ±0.420.66 ±0.320.49 ±0.400.59 ±0.320.11 ±0.160.780 ±0.225
untied-lineclean1.00 ±0.011.00 ±0.000.97 ±0.020.98 ±0.020.00 ±0.010.925 ±0.197
input0.99 ±0.011.00 ±0.000.95 ±0.020.98 ±0.020.00 ±0.010.925 ±0.197
output1.00 ±0.011.00 ±0.000.97 ±0.020.98 ±0.020.00 ±0.010.925 ±0.197
both0.99 ±0.011.00 ±0.000.95 ±0.020.98 ±0.020.00 ±0.010.925 ±0.197
input (control)0.99 ±0.030.99 ±0.020.94 ±0.040.97 ±0.020.00 ±0.010.904 ±0.198

The answer prediction on the mix probe lines under each strip, per arm, and the full-position projection read on the stripped model: exact-match accuracy on the red lines (the removal read) and on the non-red lines (the selectivity read, as an accuracy rather than a deficit, since a strip moves the clean baseline too). Seed means with half the seed range. The pilot arms follow the stored ones; a fix that has already cleaned its syntax embeddings shows no difference across its strips.

The embedding-component table

Ex-2.2.2's E8, read on every arm: the axis component of each syntax embedding, with the mean absolute component over the 216 color embeddings beside it, and the mean signed component of the red color embeddings (redness at least 0.8), which is how far the red operands themselves sit along the axis before any block runs. nGPT's embeddings are unit vectors, so a component is a cosine. The untied arms carry a second table; its readout vectors are drawn hollow.

A single panel. The arms run along the x axis, from the stored checkpoints on the left to the pilot arms on the right, and the axis component of an embedding along the y axis. At each arm there is a marker for the equals sign, one for the newline, a cluster for the six op words, a grey diamond for the mean absolute component of the color embeddings, and a grey triangle for the mean component of the red color embeddings; bars span the seeds. The untied arms show a second, hollow set for their readout table. A single panel. The arms run along the x axis, from the stored checkpoints on the left to the pilot arms on the right, and the axis component of an embedding along the y axis. At each arm there is a marker for the equals sign, one for the newline, a cluster for the six op words, a grey diamond for the mean absolute component of the color embeddings, and a grey triangle for the mean component of the red color embeddings; bars span the seeds. The untied arms show a second, hollow set for their readout table.

Axis component per syntax embedding, by arm. Each marker is the seed mean of one embedding's component on e₁ (a cosine, since the embeddings are unit vectors), with the seed range as a bar; the op words are drawn small, and in grey are the color embeddings' mean absolute component (diamond) and the red color embeddings' mean component (triangle). Hollow markers are the readout table of the untied arms. The stored arms are ex-2.2.3's; every pilot arm is Part B's.

armtable=⏎mixaddscreenmultiplylightendarkencolors, mean |·|red colors, mean
recipe-shortembedding0.26 ±0.110.05 ±0.020.12 ±0.060.14 ±0.050.13 ±0.060.14 ±0.050.13 ±0.060.13 ±0.060.090 ±0.0080.81 ±0.03
t00embedding0.93 ±0.030.06 ±0.030.34 ±0.060.33 ±0.060.36 ±0.070.32 ±0.020.34 ±0.060.34 ±0.060.111 ±0.0200.82 ±0.04
control-shortembedding-0.06 ±0.37-0.03 ±0.070.04 ±0.190.05 ±0.190.05 ±0.180.01 ±0.160.05 ±0.190.01 ±0.180.105 ±0.0120.03 ±0.21
blocks-onlyembedding0.25 ±0.070.06 ±0.040.10 ±0.090.11 ±0.070.11 ±0.080.11 ±0.090.11 ±0.080.10 ±0.080.122 ±0.0350.49 ±0.02
untiedembedding0.12 ±0.04-0.02 ±0.010.04 ±0.030.04 ±0.040.07 ±0.040.03 ±0.030.05 ±0.020.05 ±0.040.087 ±0.0050.94 ±0.02
readout0.31 ±0.050.11 ±0.060.18 ±0.070.18 ±0.070.18 ±0.070.18 ±0.080.18 ±0.080.18 ±0.070.106 ±0.024-0.13 ±0.11
syntax-off-axisembedding0.00 ±0.000.00 ±0.000.00 ±0.000.00 ±0.000.00 ±0.000.00 ±0.000.00 ±0.000.00 ±0.000.090 ±0.0060.79 ±0.02
blocks-only-lineembedding0.19 ±0.130.18 ±0.150.13 ±0.070.13 ±0.080.13 ±0.080.13 ±0.070.13 ±0.070.13 ±0.070.113 ±0.0590.47 ±0.26
untied-lineembedding0.04 ±0.030.12 ±0.050.02 ±0.040.02 ±0.020.04 ±0.030.03 ±0.040.05 ±0.040.04 ±0.040.094 ±0.0040.96 ±0.01
readout0.28 ±0.040.21 ±0.030.18 ±0.060.18 ±0.060.18 ±0.060.18 ±0.060.18 ±0.060.17 ±0.060.105 ±0.039-0.08 ±0.08

The embedding-component table as numbers: the signed axis component of each syntax embedding, per arm and table, seed mean with half the seed range; the last two columns are the mean absolute component over the color embeddings and the mean signed component over the red color embeddings.

Task cost

Exact match on the held-out pairs of each op. The reference is production's twenty seeds; the pilot arms have nine each.

A single panel. The arms run along the x axis, the production reference last, and held-out exact match along the y axis, from 0.98 to 1. At each arm there is one marker per op, drawn in the arm's colour, with the seeds as small dots beside each mean. A single panel. The arms run along the x axis, the production reference last, and held-out exact match along the y axis, from 0.98 to 1. At each arm there is one marker per op, drawn in the arm's colour, with the seeds as small dots beside each mean.

Held-out exact match per op, by arm. One marker shape per op, the seed mean, with one small dot per seed; the y axis starts at 0.98. The reference is ex-2.2.3's production recipe.

armseedsmixaddscreenmultiplylightendarkenΔ mix
blocks-only90.998 ±0.0061.000 ±0.0001.000 ±0.0000.999 ±0.0021.000 ±0.0021.000 ±0.000-0.001
untied90.998 ±0.0041.000 ±0.0000.998 ±0.0021.000 ±0.0021.000 ±0.0021.000 ±0.000-0.001
syntax-off-axis90.999 ±0.0020.999 ±0.0021.000 ±0.0000.999 ±0.0020.999 ±0.0020.999 ±0.004+0.000
blocks-only-line90.999 ±0.0020.999 ±0.0020.999 ±0.0020.998 ±0.0060.999 ±0.0040.999 ±0.002+0.000
untied-line90.999 ±0.0041.000 ±0.0020.999 ±0.0020.999 ±0.0021.000 ±0.0021.000 ±0.000+0.000
recipe-short200.999 ±0.0020.999 ±0.0021.000 ±0.0000.999 ±0.0040.999 ±0.0020.999 ±0.006+0.000

Held-out exact match per op, seed mean with half the seed range; the last column is the mix gap from the production reference. Ex-2.2.3's task gate was a mix gap within 0.02 of its own control.

Where the pull lands

Ex-2.2.3's placement statistics on the mix probe lines, per arm. The line arms' m_line is under their own labeller's weighting, as in ex-2.2.6.

A grid of small panels, two rows by four columns, one per placement statistic: m_line, alpha at op1, lead at the embedding, contrast, r squared of the similarity grading, latch pi, and retention; the last cell is empty. In each panel the arms run along the x axis with the production reference last, and the statistic along the y axis, with one small dot per seed and a larger marker at the seed mean, in the arm's colour; a seed beyond a panel's range is a hollow triangle at its edge. A grid of small panels, two rows by four columns, one per placement statistic: m_line, alpha at op1, lead at the embedding, contrast, r squared of the similarity grading, latch pi, and retention; the last cell is empty. In each panel the arms run along the x axis with the production reference last, and the statistic along the y axis, with one small dot per seed and a larger marker at the seed mean, in the arm's colour; a seed beyond a panel's range is a hollow triangle at its edge.

Placement on the mix probe lines, by arm. One panel per statistic of the table below; the larger marker is the seed mean and the small dots are the seeds. Each panel spans the bulk of the seeds, and a seed beyond it is drawn as a hollow triangle at the edge (one blocks-only-line seed did not place, and sits off most panels; the table has it). The reference is ex-2.2.3's production recipe.

armm_lineᾱ op1lead (emb)contrastr² simlatch πretention
blocks-only0.369 ±0.0190.054 ±0.0190.73 ±0.030.86 ±0.020.865 ±0.0380.02 ±0.001.00 ±0.00
untied0.400 ±0.0230.133 ±0.0420.85 ±0.020.87 ±0.010.859 ±0.0370.01 ±0.010.99 ±0.02
syntax-off-axis0.384 ±0.0160.079 ±0.0400.89 ±0.010.87 ±0.010.882 ±0.0250.02 ±0.011.00 ±0.00
blocks-only-line0.335 ±0.1290.100 ±0.1140.71 ±0.330.76 ±0.430.834 ±0.0990.12 ±0.490.98 ±0.03
untied-line0.397 ±0.0140.232 ±0.0720.89 ±0.010.85 ±0.020.867 ±0.0500.00 ±0.000.93 ±0.06
recipe-short0.392 ±0.0200.083 ±0.0560.83 ±0.040.87 ±0.020.886 ±0.0440.02 ±0.010.99 ±0.01

Placement on the mix probe lines, seed means with half the seed range. m_line is the per-line margin under the arm's own labeller; ᾱ op1 the mean alignment at op1 over every slice and color (ex-2.2.3's containment read); lead the G1 group's softmin weight on op1 at the embedding; contrast the deep-slice op2 weight of G2 minus G1; r² sim the grading of the op1 response against the similarity target; latch π the larger of the non-red group's deep-slice weights on the op word and on =; retention the final m_line over its running peak. On blocks-only the embedding slice is not pulled, so its lead is what the blocks' pull leaves there.

Suppression and selectivity

Ex-2.2.3's H4 statistics per arm: red-line accuracy under the full-position projection on each op (the removal read, lower is more complete), and the non-red mix deficit under projection and under the operand-only edit (the selectivity read). The question for each fix is whether the full-position deficit comes down to the operand-only one.

Two panels side by side. Left: red-line accuracy under the full-position projection, with the arms along the x axis, the production reference last, and one marker per op at each arm; lower is a more complete removal. Right: the non-red mix accuracy deficit, filled markers under the projection and hollow ones under the operand-only edit, with seeds above the panel drawn as hollow triangles at its top edge. In both, each seed is a small dot beside the mean, in the arm's colour. Two panels side by side. Left: red-line accuracy under the full-position projection, with the arms along the x axis, the production reference last, and one marker per op at each arm; lower is a more complete removal. Right: the non-red mix accuracy deficit, filled markers under the projection and hollow ones under the operand-only edit, with seeds above the panel drawn as hollow triangles at its top edge. In both, each seed is a small dot beside the mean, in the arm's colour.

Suppression and selectivity, by arm. Left, exact-match accuracy on the red lines under the full-position projection, one marker shape per op (the removal read; lower is more complete). Right, the non-red mix deficit under the projection (filled) and under the operand-only edit (hollow); the panel stops at 0.12, and a seed above it is a hollow triangle at the top edge (the table has the values). Larger markers are seed means, small dots the seeds.

armmixaddscreenmultiplylightendarkendeficit, projectiondeficit, operandsnon-red acc, projection
blocks-only0.17 ±0.450.36 ±0.370.34 ±0.320.22 ±0.260.37 ±0.310.30 ±0.280.017 ±0.0170.003 ±0.0040.980 ±0.018
untied0.02 ±0.030.13 ±0.070.07 ±0.060.06 ±0.030.13 ±0.090.20 ±0.100.015 ±0.0230.002 ±0.0020.983 ±0.024
syntax-off-axis0.02 ±0.020.15 ±0.090.13 ±0.070.07 ±0.040.16 ±0.100.15 ±0.080.011 ±0.0240.004 ±0.0120.987 ±0.022
blocks-only-line0.15 ±0.190.41 ±0.310.35 ±0.250.34 ±0.340.39 ±0.270.44 ±0.280.072 ±0.2820.003 ±0.0030.927 ±0.282
untied-line0.00 ±0.010.11 ±0.080.05 ±0.030.04 ±0.010.10 ±0.070.17 ±0.080.072 ±0.1960.019 ±0.0320.925 ±0.197
recipe-short0.01 ±0.040.14 ±0.180.12 ±0.140.08 ±0.110.14 ±0.100.18 ±0.180.026 ±0.0350.007 ±0.0210.973 ±0.035

Exact-match accuracy under the full-position projection on the red lines (dose ≥ 0.8) of each op, then on mix: the non-red (dose ≤ 0.2) accuracy deficit under the full-position projection and under the operand-only edit, and the non-red accuracy under the projection. Ex-2.2.3's gates were red accuracy at most 0.2 on every op and a deficit at most 0.05.

What we make of it

Which mechanism. Each of the three arms removed one candidate, and two of the three results point the same way. Leaving the embedding out of the anchor did not clean the syntax embeddings, so the direct pull at slice 0 was not the cause. Giving the readout a table of its own moved the component onto that table, at about the size it has on the reference, and left the syntax embeddings mostly clean.

So the logit path is what places it. Part A says the same from the stored checkpoints: after a red op2, the = prediction leans on the component on the readout side, and that is the only thing the readout side does. The untied arm shows it from the other side: stripping the readout table costs the same prediction, and stripping the embedding costs almost nothing. This is the mechanism as written in the tied-readout item.

The embedding-side strips show something else: the blocks learn to read the embeddings where the logit path leaves them. The random-direction control costs as much, and on t00, where the = embedding sits about 70° off a clean one, a stripped model is a different model. So the component is doing work, and a stronger anti-subspace term on those embeddings would pull against the logits.

Prep C. Of the three hypotheses in the design, (a) holds in the blocks: the contrast and the similarity grading are at the values of the reference, with m_line a little lower. (b) holds, since the color embeddings still lead the pull at slice 0 even though nothing pulls them there. (c) does not hold, because the syntax embeddings keep the axis.

The cost Prep C did not anticipate is completeness. On both blocks-only arms the full-position projection leaves more red lines with their answer, on every op, and on one seed it leaves most of them. The embedding-component table says why: the projection removes the e₁ component of the stream at every slice and nothing else, so anything that survives it sits off the axis.

In the reference, the anchor at slice 0 and the anti-subspace term together put the redness of a red operand onto the axis before any block runs, with the red color embeddings at about 0.8 on e₁. With nothing pulling the embedding they sit at about half that, so half of the redness enters the stream off the axis.

The blocks are as well aligned as the reference's, since the contrast and the similarity grading match. They read the redness from the stream and write it onto the axis, and the projection removes what they wrote. The off-axis half is still in the residual stream at the last slice, where the readout can use it. So "the states at the later slices are aligned" describes what the blocks add, and how well that part is aligned does not decide whether the projection is complete.

What transfers. syntax-off-axis chooses its embeddings by token class: the non-color embeddings are the ones held off the axis. That is a rule about which vocabulary entries may hold the axis, the same kind of built-in position knowledge that the mellowmax pooling was adopted to avoid, and natural language has no such class. So the constraint as run here is a fix for this grammar, and what it measures is the ceiling: what a fully clean shared table buys.

The other two arms need nothing from the grammar. Untying is available on any model, as a copy of the table, and many models already ship untied. blocks-only keeps the table shared but pays in completeness, above.

A tied-table variant we did not run would hold every embedding off the axis, so the embedding has no axis component at all. It would need no token class, but the redness would then enter off the axis by construction, the completeness cost again. That question belongs with the operator pass, where the reflection and the shaped forms are also up for decision.

The fix to carry. On nine seeds, untied and syntax-off-axis match each other and the reference on task, placement and removal. Both have a lower non-red cost under the projection on most seeds, with a two-seed tail at the level of the upper seeds of the reference. The pilot proposes the untied readout for the handover, with the full-position projection read beside the operand-only edit, and syntax-off-axis as the in-grammar ceiling it should match.

The concern from the discussion in ex-2.2.3 still stands, that a method needing an untied readout is a harder sell where the tables are tied; the all-embeddings-off-axis variant above is the tied option to test if that becomes the target. Two things to watch on the untied arms: ᾱ at op1, the containment read, is higher than on the reference, and the = embedding is lower rather than at zero.

The whole-line labeller. Under it the ⏎ embedding takes the axis the same way, since it follows the newly pulled answer, and on the untied arm it lands on the readout table like the rest.

The larger finding is the tail. On both line arms a few seeds lose a large share of the non-red lines under the projection, untied-line pays under the operand-only edit as well, and the margin on untied-line drifts down over training (the retention read). One blocks-only-line seed did not place at all.

There is no plain-recipe line arm at nine seeds here, and ex-2.2.6 has two or three, so the pilot cannot say whether the tail comes from the labeller alone or from pairing it with a fix. The handover should read the selectivity of the line labeller at more seeds before adopting it.

What it changes. The handover can adopt the untied readout, and use the full-position projection alongside the operand-only edit as its removal operator, which is what the M3-shaped operator needs. The operator pass in the D2.2 design chooses between plain projection and the shaped forms on that footing, and the whole-line labeller goes in with a selectivity check rather than by default.

Method notes