Notes — generation 4 on e64
What generation 4 changed, what the runs say, and what is still open.
The instrument is here, and every claim below that names a
cell links into it. This page carries no controls and computes nothing: it is the
commentary that used to sit between a reader and the instrument.
Nothing here is a pick. Four variants were run; the choices are
the programmer's (#variant_protocol),
and this page is evidence put in front of that judgement. Generation 4 is unusual in
that its goal block carried the picks
in, so unlike generations 1–3 the runs waited on nothing.
What generation 4 changed, and what to watch here
MJC's answer to generation 3's choice C is this generation: "it's worth gen4
even if the only thing it does is extirpate the argmax 256-table interpreted as 255
rules everywhere that it exists" — with the discipline named alongside it,
that whatever the reading is, it be consistent across the implementations and
viewers. Two things landed:
| what | what it is | what to watch |
| A7, the pair | the k=1 argmax pattern is
delivered at min(8, ws) in both directions, and the fall-off is
1 instead of A2's 2. One alternative, because the delivery and the fall-off
only make sense together (#f-p8-cap8).
Variants v024 (711111, the generation's baseline) and v025
(721111, B2 off it). |
step
v024 against
v002: same 14 recovered
positions at e64, convergence in half the time steps (18 against 35). |
| the extirpation | the 255 reading is gone from
every text that carried it — quietly, per the goal: no output document notes
what it used to say. The query layer now reports the k=1 family at the stated
strength 8; --latd no longer prints a literal under "stored LSA
weight". |
the pattern browser's strength column reads 8 on every k=1 rule.
It is a stated strength, not a stored one — see
gap 3. |
WHY 8, AND WHY THE FALL-OFF HAS TO MOVE WITH IT. 8 is the weight that makes the
argmax carry half the mass of an ES whose other 255 events sit at 0, and the
measured share of the argmax at its contexts expresses as
9 / 8 / 7 at
e64 / e1k / e10k — so 8 is the measured value at e1k and within one unit of it
at every sample size. The grid in
the goal block is the argument for the
pairing: at e1k, capping at 8 with the fall-off left at 2 recovers
fewer
positions than shipping (173 against 165) and leaves 208 of 833 vectors all-zero at
the readout; moving the fall-off to 1 with the cap recovers 223. Either constant moved
alone is worse than moving neither. The whole improvement is the pair.
255 IS PASS-THROUGH, AND THAT IS AN ABSOLUTE PATTERN, NOT A BUG. The first
draft of the generation-4 goal read the shipped rule as two readers disagreeing about
one quantity. MJC's correction stands over this page: "255 is pass-through and it
is an absolute pattern. It is literally an absolute rule applied to something that
represents partial knowledge. It is the highest strength a pattern can have
because of the UM max-min forward pass, and because 255 is the
identity of min." So under A1…A6 — which are untouched and still run
at their recorded behavior — the forward application passes the source through
unchanged, and the instrument names that as absoluteness rather than as a missing
attenuation. What generation 4 adds is the alternative in which the strength is
stated: A7 caps the delivery at 8, which is what the argmax's measured share
justifies.
THE GROUND TRUTH CUTS BOTH WAYS, AND THAT IS THE FINDING WORTH CARRYING. Under
B2 the model stores the full 65536-pair LPP, so the stored learned weights —
1s and 2s at this sample — are the delivery, and every B1 strategy has an exact
fact to be compared against. At e64, delivering that truth recovers
0 or 1 of
the 59 unrecorded positions and never converges
(
drive v025), while the
stated 8 recovers 14: a 1-unit delivery drowns in a window where the stochastic add is
the same size. At e10k the truth wins — v013 recovers 1392 of 5349, ahead of the
capped 8's 1288. So the constant 8 is what the argmax's real share justifies
at the
sizes where the share is about half, and by e10k (share 0.290) the stored matrix
already knows better than any constant. Measured in
the generation 4 report; this page
can only show the e64 end of it.
conv STILL MEASURES THE WRONG THING FOR B2 AT e64. v013 and v025 report
conv = 64, the never-converged sentinel: with five clamped positions and
1-unit weights everywhere else, the argmax sequence keeps oscillating around the
stochastic add. Generation 3's caveat on the conv column stands unchanged — a
window that keeps flickering and a window that settled instantly can both defeat the
measure, in opposite directions.
Where the support comes from
A4 and A5 — still drivable here as controls — need each pattern's
own support: c1[x × 256 + argmax], a value in the 65536-byte
learned count matrix that a B1 model does not carry. In generation 4 the matrix is on
the page legitimately, because v013 and v025 are in the run
set and both store it under B2. The builder compares the k=1 table and the token
section of all four variants byte for byte, checks the two stored matrices are
identical, and refuses to build otherwise — the same test the generation-2 page
uses to refuse a borrowed LPP.
The reference support smax at this sample is still 2 (2 at e64, 6 at e1k,
9 at e10k), so A4 and A5 have three rates here; and which reading of smax should win
remains open — generation 3's choice B, which the generation-4 goal marks as
downstream of the k=1 strength question. It stays a control on this page rather
than a constant.
THE k=1 GAP STILL BITES INSIDE A4 AND A5. Those alternatives are untouched by
generation 4, so under them the same k=1 pattern still
delivers at 255 and is
rated at 0, 1 or 2 in the same time step — it arrives as an absolute rule
and is charged a fall-off as though it had been seen once or not at all. 229 of the
256 entries of the support table are 0. A7 is the alternative in which the two
numbers stop being different kinds of thing: the delivery is capped near the support
scale, and the fall-off is a constant 1 rather than a support deficit. Open any
forward application under
A4
and the panel shows both numbers on the same line.
THE MODEL NAMES THE WRONG SUCCESSOR, AND LATD IS HOW YOU SEE IT. The k=1
pattern from
m names
e. Expand it:
m occurs at
positions 1, 12, 29, 44 and 61 of this sample, followed by
e twice and
l three times. The rule the model kept is the
less frequent of
the two, in the only data there is. The stored counts are
c1[m][e] = 2
and
c1[m][l] = 1: the log estimate inverted the order of a 3-count and a
2-count — the uncorrelated-error property LSA is designed around, seen from the
data side. Unchanged from generation 3, because learning is unchanged. Open it:
position 2, settled, or
the pattern itself,
with its concordance.
Standing facts, carried forward
THERE IS NO k=0 BACKGROUND. An unclamped position initialises to 256
zeros, and under B1 a byte with no predecessor sends no backward application at
all rather than falling back to a base rate. The model file carries no
byte-frequency section: the k=1 argmax table starts at offset 48, and a model built
before 2026-08-06 is 256 bytes longer and is rejected by the builder on the size
identity.
AXIS A CANNOT REACH THE RATE, AND THAT IS NOT A DEFECT OF THE AXIS. Under the
D1 baseline the trace is decided by the causal pass and the decoder reconstructs
causally, so settling never runs at decode time and nothing axis A does can move the
compression. The axis is read off settling instead, which is what this page draws.
settle_apps is within 1% between v002 and v024 either way: the pair's improvement is
not bought with energy.
C2 STILL NEVER BINDS. The AND gate is byte-identical to the baseline at
every sample that can be run, because the learned k=2 weights are 1 or 2 and the gate
has nothing to bite on. Pruned as of generation 3; kept as a control.
Where these go on