Download TECHNICAL.md from AbstractPhil/mini-beatrix-2s: direct link, hf CLI and curl.
- Browser
- Download file 65.9 kB
-
https://huggingface.co/AbstractPhil/mini-beatrix-2s/resolve/main/TECHNICAL.md
- Command line
-
hf download hf://AbstractPhil/mini-beatrix-2s/TECHNICAL.md
-
curl -L -o TECHNICAL.md https://huggingface.co/AbstractPhil/mini-beatrix-2s/resolve/main/TECHNICAL.md
alephllm-mini-beatrix-training β Technical Companion (the 2s era: the full-splat craft and its softmax twin)
Companion to Twinning Beatrix: A Full-Splat Byte Model, Its Softmax
Control, and What Reaches an Image Generator (AbstractPhil with Claude
Fable 5 and Claude Fable 5.1, September 2026). It covers two crafts and
one packaged model: mini-beatrix-2s/ and mini-beatrix-2s-control/
under AbstractPhil/alephllm-mini-beatrix-training, and the AutoModel at
AbstractPhil/mini-beatrix-2s; the dates run from the first launch
(run0, 2026-08-26) through the control's endpoint (2026-09-03) and the
claim audit that graded it (2026-09-04). It is written for a reader who
will load the checkpoints and read the reports. It is not the
mini-beatrix-1 life record (TECHNICAL.md, which stays as it is), not
the article's argument, and not a manual for the side campaigns that
share the repo root (reports/v2/{battery,wide_moe,aflow,bcd} appear
only as a catalogue line). Every number carries its pointer: file:line
means E:/mirel/AlephLLM/geolip/alephllm/ at HEAD 4f4b7d6 (package
0.8.7, the last commit of the 2s era); hub paths are relative to the
craft prefix; journal paths are relative to the claude-mind repo. Where
the journal and the code disagree, the code wins and the disagreement
is reported in place. Stack-side detail lives in the
AlephLLM companion, which
covers the 0.7.0 mechanisms only; the 0.8.x organs (specials, driver
contract, revival, gauge fallback, twin isolation) are carried here.
The two crafts at a glance
| mini-beatrix-2s | mini-beatrix-2s-control | mini-beatrix-1 | |
|---|---|---|---|
| d_model / layers / heads | 1024 / 20 / 16 | 1024 / 20 / 16 | 768 / 16 / 12 |
| attention | CausalSplatHUB in all 20 blocks | CausalSDPA (16 Γ 64) in all 20 | 13 sdpa + 3 hubs (layers 4, 9, 14) |
| hub books Γ anchors @ D | 4 Γ 64 @ 128 (supply 0.5Γ) | β | 1 Γ 512 @ 32 (supply 16Γ) |
| banks | 3 experts @ ff 1024 | 3 @ 1024 | 3 @ 768 (full width) |
| head (K @ D) | 256 @ 256, revived at 24,860, address frozen after | 256 @ 256, born null, never elected | 512 @ 32, never elected (W_s = 0.0 at ship) |
| context / vocab | 4096 / 256 byte-trigram | 4096 / 256 | 2048 / 256 |
| params | 237,125,949 | 257,442,109 (+20,316,160, all attention) | 112,524,593 |
| tokens per step | 16 Γ 4 Γ 4096 = 262,144 | 262,144 | 48 Γ 3 Γ 2048 = 294,912 |
| steps / tokens | 61,422 / 16,101,408,768 | 61,422 / 16,101,408,768 | 88,508 / 26,102,071,296 |
| wall-hours / hosts | 78.33 on one RTX PRO 6000 | 49.98 on three hosts | 70.45 |
| final val bpb (report ledger) | 1.1097 | 2.8846 | 1.121 |
| optimizer | Muon 2e-2 + pure Adam 3e-4, flat after 200 | same | same |
| governor | minsep 45Β°, every 8 steps, from birth | inherited (head book only) | off |
| package at birth β end | 0.8.1 β 0.8.6 (revival under 0.8.2) | 0.8.7 throughout | cc89a87 β 0.6.0 (pre-specials) |
Shape and knobs: presets.py:191-203 (2s), :214-235 (the -control
derivation and the head_addr_frozen override), :155-160 (mb1).
Parameter counts were computed by constructing each preset on the meta
device (alephlm.py:218-224 param_count): 2s = embed 4,982,784 +
20 blocks Γ 11,574,275 (hub attention 3,178,496 + bank 8,391,683 +
norms 4,096) + final norm 2,048 + head 655,617; the control's block
swaps the hub's 3,178,496 for sdpa's 4,194,304 (qkv 3072Γ1024 + o
1024Γ1024, no biases; attention.py:24-32). Tokens per step is
micro_batch Γ grad_accum Γ context (trainer.py:186); 61,422 Γ
262,144 lands on both manifests' tokens_seen exactly. The mother's
numbers are the exemplar's (TECHNICAL.md, mini-beatrix-1/manifest.json).
Layout
mini-beatrix-2s/
manifest.json # 14 phases, 142 checkpoint entries, notes
checkpoints/step_XXXXXXXX.safetensors # 46 bf16 (2000-cadence + every boundary and cap)
checkpoints/step_00024860_revived.safetensors # fp32, the post-BOUNDARY-WRITE head
checkpoints/fp8/ # 20 e4m3 ship-only copies
resume/latest.pt # fp32 model + Muon/Adam + stream + RNG + manifest
resume/boundary_<phase>_step<N>.pt # 13 immutable boundary archives
resume/pre_revival_step24860.pt # the state the revival overwrote
reports/v2/ # 13 boundary + 3 session_cap + revival + 4 cultivation
runs/ # 5 TensorBoard event files (one per session)
archive/run0-nospecials/ # the pre-specials first attempt, whole
beatrix_v2_colab.ipynb # the driver
mini-beatrix-2s-control/
manifest.json # identical phases and budgets; 136 entries
checkpoints/step_XXXXXXXX.safetensors # 44 bf16 (incl. the 22,854 cap)
checkpoints/fp8/ # 20 e4m3 ship-only copies
resume/latest.pt resume/boundary_*.pt # latest + 13 boundary archives
reports/v2/ # 13 boundary + 2 session_cap (22,854; 53,792)
runs/ # 6 event files (two are 88-byte aborted starts)
The control has no notebook file and no AutoModel packaging; these
checkpoints are its weights. Files: bf16 475,876,922 B (2s) and
515,164,234 B (control); fp8 238,219,518 / 257,813,142 B; resume
archives ~1.904 / ~2.064 GB each; the revived fp32 file 951,692,996 B
(hub headers read by ranged GET; checkpoint.py:102-128 for the two
export rules).
Architecture in detail
The block. Pre-norm, two residual branches: x = x + attn(n1(x)),
x = x + bank(n2(x)) (alephlm.py:37-70). attn is CausalSplatHUB
when the layer index is in hub_layers, else CausalSDPA
(alephlm.py:41-50); every block carries an AnchoredBank
(alephlm.py:51). hub_ckpt (0 on 2s: the retained scan fits the
96 GB card at 237M, presets.py:184-198) would wrap the branches in
activation checkpointing (alephlm.py:60-68). The model is embedding β
20 blocks β final LayerNorm β DualHead (alephlm.py:81-96); forward
takes pre-shifted targets (ours) or HF-style labels (shifted
internally) and ignores attention_mask deliberately
(alephlm.py:98-124).
Trigram embedding and positions. e_t = emb0[x_t] + emb1[x_{t-1}] + emb2[x_{t-2}] + pos[t]; the shift tables have a 257th PAD_ROW so the
two positions shifted in at the sequence start never read a legal byte
(embedding.py:19-34; the pad law β padding with a real byte starved
address consumption, measured +.05..+.11 on repair). pos is a learned
absolute table (1, 4096, 1024) (embedding.py:28); there is no RoPE.
CausalSplatHUB β the address. Each book is an AlephAddress: K unit
anchors in D dims (address.py:24-36, with a home buffer holding the
birth copy for drift). The read is a cosine at temperature,
u_k = cos(xΜ, Γ’_k)/Ο with Ο = 0.1 (address.py:38-40); the oriented
form is the 2K-softmax over the axes (+a_k, βa_k), and the signed read
is its half-difference w_k = sinh(u_k)/Ξ£_j cosh(u_j) β inhibition
(negative w) is first-class; there is no softmax over choices, no
argmax, no top-k (address.py:1-13,42-66). The hub's q and k frames are
Linear(d, D) per book, orthogonal-init; v and o are shared Linear(d, d) (attention.py:64-79,106-109). Construction warns when K > 2D β the
supply law from ROUND 5e and the mini-beatrix-1 hub census
(attention.py:85-92); 2s runs 64 @ 128, half of the lawful ceiling.
CausalSplatHUB β books and budget. With n_const = 4 the four books
each own a codebook and q/k frames (attention.py:64-79); their
numerators and agreement masses are summed across books before the one
divide β composition by budget, never softmax over books
(attention.py:245-254; B4 measured comparative composition at β.10).
n_const = 1 is the v1 layout with the same state-dict keys
(attention.py:93-101), which is how mini-beatrix-1 checkpoints still
load.
CausalSplatHUB β the exact chunked scan (prefix memory).
_code_cat_qk computes q and k for all books in one stacked GEMM,
folds the row-norm and Ο into one post-GEMM scale, and takes ONE fused
softmax over cat([u, βu]) β the module's docstring names this a
kernel substitution, not a mechanism change: the softmax that exists is
over the 2K oriented axes of a single query, never over positions
(attention.py:154-212). _scan_cat splits the sequence into chunks of
C = 256 (16 chunks at ctx 4096), forms per-chunk (2K Γ d) sums, takes
the exclusive prefix over chunks as a strictly-lower-triangular GEMM
with fp32 accumulation, adds the within-chunk causal affinity, and
divides the numerator by the scalar agreement mass den, floored at
dtype_floor (attention.py:139-151,229-281; address.py:16-22: fp16
flushes 1e-12 to zero, the measured landmine). Exactness is
chunk-independent (forward_naive is the oracle, attention.py:320;
fp reorder ~1.5e-06). Decode carries a constant-size state per book β
{Ξ£ kβΊβv, Ξ£ kβ»βv, Ξ£ kβΊ, Ξ£ kβ»} β regardless of length
(attention.py:284-318); the generate path falls back to a sliding
window once the position table is exhausted because "the hub's
constant-size state cannot evict" (alephlm.py:180-201).
The autocast trap. torch.einsum sits in autocast's PROMOTE
category and F.normalize/exp/softmax on its fp32 list, so one fp32
operand dragged the whole scan to fp32 (attention.py:167); 0.7.2
(@2be28dd) cast the operands explicitly. Every earlier "bf16" splat run
had silently run fp32 scans; sdpa was unaffected β so every pre-0.7.2
splat-vs-sdpa wall-clock comparison favoured sdpa, and accuracy
verdicts stand (autocast einsum-promote law).
The governor. minsep_project_ bounds |cos(a_i, a_j)| β€ cos(ΞΈ_min) for every anchor pair by an exact symmetric geodesic
push-apart, largest violation first, projected to ΞΈ_min + 0.5Β°
(governor.py:35-80); govern_model collects hub and head codebooks,
runs one batched bmm slack check with one device sync, and projects
only the violating books (governor.py:92-137). It is a
post-optimizer-step projection, never an auxiliary loss
(governor.py:11); the trainer calls it every 8 steps after opt.step
and accumulates pair-pushes into governor/hits_cum
(trainer.py:263-267,294-296; presets.py:99-105: ΞΈ = 45Β°). Banks are
excluded by default (a 3-anchor book never crowds). The docstring
records the small-rig verdict it shipped on (gov25m: fires only when
needed, census tail cut 5.4Γ, fragile-seed +.007, stable-seed +.002;
governor.py:19). Code-wins note: the journal's covariance program
describes a metric governor through the frame W_a; alephllm's is the
plain projective form on the D-space books, justified in place β
"Hub and head codebooks live natively in their own D-dim address space"
(governor.py:14), since the q/k frames project d β D before the cosine
read (address.py:38-40).
CausalSDPA in the twin. qkv = Linear(d, 3d), o = Linear(d, d),
both orthogonal-init and bias-free; F.scaled_dot_product_attention(q, k, v, is_causal=True) over 16 heads of 64 (attention.py:24-42);
the KV cache grows O(n) (attention.py:43-61). No QK-norm, no logit
softcap.
AnchoredBank. Bank(x) = trunk(x) + Ξ£_k w_k(x)Β·Ο(g_k)Β·expert_k(x)
(bank.py:3): a dense trunk t_out(GELU(t_in(x))), three experts
(3, 1024, 1024) with w_out zero-initialised (the null path), gates
at β3.0, and dispatch w = addr.signed(x) through a 3-anchor book in d
dims. disable_dispatch returns the trunk alone β bit-identical to the
dense control at birth (the C6 null); "No balance machinery of any
kind" (bank.py:10,41-50).
DualHead. logits = W_h h + Ξ³Β·W_s s(h), s(h) = addr.signed(proj(h))
with proj Linear(1024, 256), a 256 @ 256 book, W_s zero-initialised
("weight-zero: self-starting") and Ξ³ = 1 frozen as an ablation knob
(head.py:23-51). The docstring carries the law that set it: on
mini-beatrix-1 over 8.4B tokens a gamma-gated branch DEADLOCKS while a
weight-zero bank elected into +2 bpb (head.py:8-11; gate-zero deadlock
law). disable_aleph returns W_h h alone β the head toggle.
The special-token control plane. Thirteen ids that no UTF-8 encoder
can emit β {0xC0, 0xC1} βͺ [0xF5, 0xFF], the overlong leads and the
leads past U+10FFFF β carry structure inside vocab 256: DOC 0xFF, USER
0xFE, MODEL 0xFD, END 0xFC, SYS 0xFB, THINK 0xFA, DATA 0xF9, SEP 0xF8,
MODE 0xF7 (+1 ASCII payload), CUE 0xF6, ESC 0xF5 (+payload = 256
extended slots; 0x00 the null guard, 0x01 CANARY), RES0 0xC0, RES1
0xC1 (special_tokens.py:20-34,50-71; assert len(SPECIALS) == 13).
The proof is exhaustive β every codepoint 0..0x10FFFF encoded and
checked β and the Trainer runs it at every byte-craft launch
(trainer.py:72-73). Doctrine: DOC is appended by the packer after
every document in every phase from birth, identity-gated to the
byte-trigram tokenizer (streams.py:59-62,209,355-356); the chat frame [SYS] text [END] [USER] text [END] [MODEL] text [END] (special_tokens.py:112-136)
is unforgeable (content is UTF-8) and appears only in the anneal
(special_tokens.py:36-44; chat-in-anneal law). The canary frame moved
to CUE/SEP because the old QRY=255 collided with DOC
(canaries.py:20-29); recall_acc re-baselines at 0.8.0. The trigram
embedding feeds each special into the next two positions' input
representations by construction.
The recipe (pinned from source; unchanged cc89a87 β b472815)
- Split: every parameter with
ndim β {2, 3}that is not annn.Embeddingweight rides Muon; everything else β the three byte tables, LayerNorms, bank gates, Ξ³, the head bias β ridestorch.optim.Adam(weight_decay=0.0)(optim.py:54-79; "pure Adam, wd=0 β never AdamW",presets.py:82). Measured split for 2s: Muon 385 tensors / 236,253,184 numel, Adam 107 / 872,765; the control's Muon set is 145 / 256,569,344 with the same Adam set. Code-wins note: theoptim.py:4-5,55-58docstrings say positions ride Adam; the code sendsembed.pos(shape(1, 4096, 1024), ndim 3, not annn.Embedding) to Muon (optim.py:68), verified on the meta device. The journal already records the code's behaviour. - Muon: 5-step NewtonβSchulz (a, b, c = 3.4445, β4.7750, 2.0315) on
the momentum buffer after whole-matrix Frobenius normalisation
X/(βXβ_F + 1e-7); plain momentum 0.95, no Nesterov, no shape scaling; 3-D stacks orthogonalised per slice (optim.py:20-51). - Learning rates: Muon 2e-2, Adam 3e-4;
lr_scale = (step+1)/200for 200 steps, then 1.0 forever (optim.py:82-93,presets.py:80-83). The tfevents readtrain/lr_scale0.25/0.50/0.75 at steps 50/100/150 and 1.000 from step 200 to the last log on both crafts, through both anneal phases: the anneal is a diet change, not a decay. - Clip:
clip_grad_norm_(β¦, 1.0)over all parameters; the loggedtrain/grad_normis the PRE-clip norm it returns (trainer.py:244, 287). Because Muon normalises the momentum buffer before orthogonalising, its update magnitude is independent of gradient scale: clipping never changes the magnitude of a Muon step; it only reweights steps inside the momentum buffer. The Adam set (torch.optim.Adam, wd 0, default eps 1e-8;optim.py:79) is per-coordinate scale-normalised (m/sqrt(v)), so under a persistent clip its step magnitude is likewise unchanged and the clip only reweights the two moment averages (Muon is clip-blind; Adam is nearly so). - Precision and batch: fp32 masters, bf16 autocast on CUDA, TF32 on
(
trainer.py:14-15,65-66,239); micro-batch 16 Γ accum 4 Γ ctx 4096; seed 1337 (presets.py:97,199); each micro-batch row is 4097 ids scored at 4096 positions. - Guards: a non-finite loss or gradient raises before any optimizer
step, weights untouched and the resume state not overwritten
(
trainer.py:250); the spike flagloss > 2Β·EMA + 0.5is logged only (trainer.py:273-275,293). Neither fired on either craft. - Cadences: log 50, health census 500, eval and checkpoint 2000,
fp8 every 5th checkpoint, TB upload 1000, val 262,144 tokens, 128
canary episodes (
presets.py:88-96). - Absent by design: no QK-norm, no logit softcap, no z-loss, no weight decay, no dropout, no RoPE, no LR decay in any phase.
The diet (all on one gauge: fineweb-edu holdout bpb)
| phase | dataset | budget | β step | 2s bpb | control bpb | note |
|---|---|---|---|---|---|---|
| warmup_wikitext | wikitext-103 | 0.30B | 1,145 | 2.3626 | 2.1056 | sdpa led by 0.257; protocol pre-registered here |
| fineweb_main | fineweb-edu | 5.0B | 20,219 | 1.1172 | 1.1763 | the crossover; hubs +2.22 / banks +3.55 |
| fineweb_extended | fineweb-edu | 10B | β | β | β | DEFERRED, unspent on both |
| curriculum_s0 | curriculum-s0 | 0.7B | 22,890 | 1.2522 | 1.5047 | |
| REVIVAL | β | β | 24,860 | 1.2768 β 1.2339 (op gauge) | β | BOUNDARY-WRITE; pre_revival_step24860.pt archived |
| curriculum_s1 | curriculum-s1 | 0.7B | 25,561 | 1.2544 | 1.3917 | first live head toggle in the lineage, +0.0258 |
| curriculum_s2 | curriculum-s2 | 1.0B | 29,376 | 1.2177 | 1.3938 | 2s grad-norm curriculum+anneal max 0.619 @26,750 |
| curriculum_s3 | curriculum-s3 | 1.2B | 33,954 | 1.2318 | 1.5317 | |
| curriculum_s4 | curriculum-s4 | 1.2B | 38,532 | 1.2356 | 1.5689 | both 2s mechanisms above +3.0 |
| curriculum_s5 | curriculum-s5 | 1.0B | 42,347 | 1.2504 | 2.1762 | control grad-norm median 126 |
| curriculum_s6 | curriculum-s6 | 0.8B | 45,399 | 1.2683 | 3.1940 | control max 41,070 @44,600 |
| curriculum_s7 | curriculum-s7 | 1.4B | 50,740 | 1.1883 | 3.1201 | |
| curriculum_s8 | curriculum-s8 | 0.8B | 53,792 | 1.0737 (synthetic gauge) / 1.1911 (cap) | 3.0810 | 2s row STRUCK; true ledger = session_cap_step53792 |
| anneal_nochat | anneal-nochat | 1.0B | 57,607 | 1.1153 | 2.9270 | the pre-chat baseline; probe mean .389 |
| anneal_mix | anneal-mix | 1.0B | 61,422 | 1.1097 | 2.8846 | run best; probe mean .389 == pre-chat |
Phases and budgets: presets.py:132-146 (the preset plan carries
anneal_mix at 2B deferred; the notebook's C6 cell rewrote it to 1B and
inserted anneal_nochat before it β "two-phase anneal activated: nochat
1B then chat 1B (plan of record 2026-08-31)" in both manifests' notes; the
hub copy of beatrix_v2_colab.ipynb, uploaded 2026-08-28T23:00Z with cells
C1βC5 and pinned to geolip-alephllm @2a902b7 (0.8.1), predates the
amendment and carries no C6 cell),
curriculum.py:657-663 (STAGE_TOKENS), curriculum.py:666-689
(append at runtime). Manifest order is not chronology: the S0βS8 phases
are listed after the anneals but ran before them, because
current_phase() activates the first planned phase and deferred
phases are invisible until flipped (manifest.py:33-41); count back
from the totals (16,101,408,768 β anneal_mix's 1,000,079,360 lands on
step 57,607) rather than reading the list.
The mixes (curriculum.py:614-655; weights sum to 1): s0
tinystories .74, simple-wiki .20, aochildes .01, recall-synth .03,
counting-synth .02 Β· s1 perspective-synth .30, tinystories .28,
simple-wiki .20, cosmo-young .12, concept-synth .04, recall-synth .03,
siqa-narrative .02, aochildes .01 Β· s2 concept-synth .30, cosmo-young
.30, simple-wiki .12, tinystories .10, definitions .08, wikipedia-en
.07, recall-synth .03 Β· s3 rulechain-synth .32, proofwriter-prose .22,
simple-wiki .12, tinystories .10, wikipedia-en .08, cosmo-young .08,
concept-synth .04, recall-synth .03, babi-prose .01 Β· s4 arith-synth
.35, cosmo-young .32, simple-wiki .12, tinystories .08, rulechain-synth
.06, counting-synth .04, recall-synth .03 Β· s5 causal-synth .32,
atomic-flicker .25, tinystories .12, simple-wiki .10, gutenberg .08,
cosmo-young .07, recall-synth .05, siqa-narrative .01 Β· s6
tryfail-synth .32, tinystories .22, arith-synth .13, cosmo-young .10,
simple-wiki .10, causal-synth .08, recall-synth .05 Β· s7 tinystories
.10, cosmo-young .10, rulechain-synth .10, arith-synth .10, fineweb-good
.10, simple-wiki .08, atomic-flicker .08, causal-synth .08,
tryfail-synth .08, proofwriter-prose .08, recall-synth .05,
perspective-synth .04, babi-prose .01 Β· s8 definitions .25,
register-synth .25, simple-wiki .15, cosmo-young .12, wikipedia-en .10,
tinystories .09, recall-synth .03, siqa-narrative .01. Rails audited at
append time: MAX_EPOCHS 4.0, MAX_GENERATOR_SHARE 0.35, MIN_BALLAST 0.30
natural text (curriculum.py:548-551,565-596); holdouts enforced at
the generator β bAbI tasks 16/19, ProofWriter depth 5, rule-chain
depth 5, three-digit subtraction (curriculum.py:26-31). No chat
template in s0βs8.
The anneal recipes (streams.py:68-77): ANNEAL_MIX = fineweb-edu
.45, cosmopedia .20, tinystories .15, soda-dialogue .12,
beatrix-texture-sp .05 (the specials-native SYS/USER/MODEL/END
identity texture), recall-synth .03; ANNEAL_NOCHAT is the same list
minus beatrix-texture-sp, renormalised by MixStream β so the nochat
boundary is the exact pre-chat baseline on the same distribution.
MixStream draws one component per batch from a counter-seeded RNG
(streams.py:375-404): reproducible and resumable, but its state
carries no recipe fingerprint (fresh starts only across recipe
changes).
The DOC plane on the diet. The packer appends DOC after every
document (streams.py:192-372); the specials gauge reads doc_bpb
(bits at positions whose target is DOC) and reset_bpb (mean bits over
the 16 targets after each DOC) on the fixed val batches
(instruments.py:310-352). doc_bpb fell 12.83 β 3.29 by 0.52B and
sits at 3.862 at the endpoint (control 5.422); reset_bpb 4.287 β 2.130
(control 3.825). doc_count is 70 in every 2s and control report except the struck 2s
curriculum_s8_step53792.json, which reads doc_count 1612 (the synthetic
fallback stream) β the same 70 documents every time on the fineweb-edu gauge.
The val gauge. _val() builds 4 batches of (16, 4097) from
build_stream(dataset, β¦, seed = 1337 + 9999, role="val")
(trainer.py:384-411); for fineweb-edu the val region is the first
2,048 unshuffled rows, which the training stream skips
(streams.py:56,279-282), and build_stream routes every
curriculum-* and anneal-* val request to that same fineweb-edu head
holdout β "gauge continuity" in the source (streams.py:423-447). So
from fineweb_main onward every row of both crafts is one gauge; the
canon's CB2/CB3 "own slice" wording is struck by erratum
(canon/splat_aleph_battery.md:583). The s8 fallback caveat: at the
terminal curriculum boundary current_phase() is None (everything done
or deferred) and pre-0.8.5 _val fell to the synthetic stream, so the
2s curriculum_s8_step53792 ledger is an incomparable artifact; 0.8.5
(@7d48328) makes _val fall back to the last DONE phase's dataset
(trainer.py:397-401), and the true end-of-curriculum ledger is
session_cap_step53792, taken at the same step on the restored gauge
(1.1911; banks +3.214, hubs +3.341, head +0.0149). The control, born
under 0.8.7, measured its s8 row on the repaired gauge; the s8 pair is
therefore not same-gauge and is struck from the paired count.
The life (reports/v2/, resume/, runs/)
Sessions. The 2s craft ran five sessions on the one RTX PRO 6000
(Blackwell, 96 GB; 4.54 s/step, ~58k tok/s), each its own event file:
steps 50β8,300 (host 4d130c0e7351), 8,350β24,850 (91b9f3518593),
24,900β43,100 (e935248f0778), 43,150β53,750 (68304a2b8506),
53,800β61,400 (c2dc3d694638). The breaks are the session caps at 8,320
(fineweb, 2.181B), 43,130 (inside s6, 11.306B) and 53,792 (the s8 boundary
itself, the resumed session's first action) β session_cap_step*.json
is written when a session hits MAX_HOURS mid-phase β and the revival
halt at 24,860. Sessions are boundary-exact: the driver calls
train(max_hours, stop_at_boundary=True), which returns after each
boundary checkpoint with _last_boundary set, and never auto-resumes a
manual stop (_interrupted; trainer.py:170-184,328-335; the 0.8.1
driver contract, minted after run0 rolled through its boundaries and
swallowed a KeyboardInterrupt).
Resume. _restore loads resume/latest.pt β fp32 model, both
optimizer states, the stream position, torch and CUDA RNG, and the
manifest snapshot embedded in the payload, which wins over the hub's
manifest.json (trainer.py:110-153; checkpoint.py:131-175). A
missing payload over a manifest with steps > 0 refuses to start fresh
(trainer.py:110-120). Every phase boundary archives an immutable copy
resume/boundary_<phase>_step<N>.pt (trainer.py:469;
checkpoint.py:134-154). Resume is not row-exact: the datasets shuffle
buffer (10,000 rows, streams.py:292-293) is not part of the saved
state, so each resume refills it (streams.py:12, the honesty note).
The revival at 24,860. The born-null head buried itself inside the
first 2,000 steps (0.032Γ chance liveness at the first stored
checkpoint; βsβ ~6e-4; proj cosines ~60Γ below chance β learned
avoidance; repos/alephllm.md:1564-1643 β journal readings from
checkpoint analysis: the craft's TB carries no head/liveness_ratio
scalar before 0.8.4; the control's TB reads 0.052Γ @2,000, 0.014Γ
@12,000, 0.010Γ @24,000). The BOUNDARY-WRITE op
(revival.py:44-104) ran on the halted run: proj β uncentered
whitening-PCA of the final-norm outputs (sv floor 1e-3 relative);
codebook β fresh normalize(randn) with min-sep 45Β° (0 pushes needed);
W_s β fp64 ridge on the base head's CE residual, Ξ± swept on the held-out
half and folded in. revival_step24860.json: K 256, D 256, seed 13,
sv0 3676.66, svD 15.90, Ξ± 8.0, βW_sβ 481.53, fit_positions 65,536,
base_bpb 1.27682 β revived_bpb 1.23391 (Ξ β0.04290 held-out),
liveness 0.01027Γ β 0.99642Γ, version 0.8.2, commit d6e1854. The
pre-revival resume was archived, Muon momentum zeroed for the three head
tensors, and the revived payload promoted on Phil's explicit go
(repos/alephllm.md:1669); thereafter head_addr_frozen freezes proj
and the head codebook by requires_grad alone, so optimizer groups and
resume state are unchanged and Muon skips them (trainer.py:75-80;
optim.py:42-43). checkpoints/step_00024860.safetensors is the
pre-revival bf16 weight; step_00024860_revived.safetensors (fp32) is
the post-write weight; neither the revived file nor the resume archives
appear in manifest.json's checkpoint index.
The anneal. Activated 2026-08-31T09:54Z after s8; nochat done 14:42Z, chat done 19:31Z; the frame cost nothing in a bracketed phase (probe mean .389 β .389; val 1.1153 β 1.1097).
The 2s boundary ledgers (reports/v2/*.json; bpb on the fineweb-edu
holdout; toggles = mechanism-off minus full):
| report | step | tokens | bpb_full | banks | hubs | head | doc / reset |
|---|---|---|---|---|---|---|---|
| warmup_wikitext | 1,145 | 0.300B | 2.36257 | +0.0365 | +1.5042 | β2.3e-06 | 12.83 / 4.287 |
| session_cap | 8,320 | 2.181B | 1.20332 | +1.727 | +2.036 | β4.9e-07 | |
| fineweb_main | 20,219 | 5.300B | 1.11719 | +3.5527 | +2.2157 | β3.4e-07 | |
| curriculum_s0 | 22,890 | 6.000B | 1.2522 | ~0 (born null) | |||
| curriculum_s1 | 25,561 | 6.700B | 1.2544 | +0.0258 | |||
| curriculum_s2 | 29,376 | 7.700B | 1.2177 | +0.0140 | |||
| curriculum_s3 | 33,954 | 8.900B | 1.2318 | +0.0072 | |||
| curriculum_s4 | 38,532 | 10.100B | 1.2356 | >3.0 | >3.0 | +0.0130 | |
| curriculum_s5 | 42,347 | 11.100B | 1.2504 | +0.0278 | |||
| session_cap | 43,130 | 11.306B | 1.2614 | ||||
| curriculum_s6 | 45,399 | 11.900B | 1.2683 | +0.0126 | |||
| curriculum_s7 | 50,740 | 13.300B | 1.1883 | β0.0010 | |||
| curriculum_s8 (STRUCK) | 53,792 | 14.100B | 1.0737 | +3.396 | +5.164 | 0.843 / 1.889 | |
| session_cap (true s8) | 53,792 | 14.100B | 1.19112 | +3.2144 | +3.3410 | +0.0149 | 5.052 / 2.469 |
| anneal_nochat | 57,607 | 15.100B | 1.1153 | +0.0101 | |||
| anneal_mix | 61,422 | 16.101B | 1.10970 | +3.3115 | +3.3584 | +0.0123 | 3.862 / 2.130 |
Blank cells are not in the record consulted here; the head column is
complete. The warmup row is the first full-splat-under-AR ledger: with
all 20 hubs off the craft loses its entire attention (+1.50 at 0.3B),
which is what "load-bearing, not decorative" measures against the
mother's 3-hub form. hidden_erank_floor flags TRUE in every report from the 8,320 cap on (the
trainer's own TB census, on the first val batch, flags it from step 500)
(L19 pre-norm erank in single digits β the byte funnel; the post-norm
nf(h) erank reads 334/1024), head_buried FALSE from s1 on, den
floors 0.0 the entire run, zero loss spikes. Two "final val" readings
exist on the hub: the report ledger 1.10970 (the gauge of record) and
the manifest's checkpoint entry val_bpb 1.11403 at 61,422 β the
manifest column is the LAST PERIODIC EVAL's bpb_full (eval every
2,000; trainer.py:444-447), so it lags every boundary (fineweb 1.1156
vs 1.1172; s8 1.1833 vs 1.0737/1.1911); the manifest minimum is 1.1140
@60,000. Cite the report.
The paired record (mini-beatrix-2s-control/reports/v2/)
Derivation. Every preset auto-generates a -control twin: the same
AlephLMConfig with hub_layers = () (presets.py:216-229), so
hub_K/hub_D/hub_const/hub_chunk are carried but unused and every
block's attention is CausalSDPA. 0.8.7 (@b472815) gave twins their own
TrainConfig copy β the shared instance had let head_addr_frozen=True
leak into the control, a post-revival flag no birth recipe may carry β
and sets the 2s control to head_addr_frozen = False explicitly: the
birth recipe, born-null unfrozen head, which buries as the treatment's
did for its first 24,860 steps (presets.py:221-235). The control
inherits governor="minsep"; with no hub books it governs the head
codebook only (hits_cum 10 at warmup, fineweb and the 22,854 cap β the first
session β and 0 in every later session's report;
crowd_check_extra_hits 0). Same seed 1337: construction order embed β
blocks β norm β head after torch.manual_seed (trainer.py:63;
alephlm.py:85-96) makes the embedding draws identical between craft
and twin; the RNG streams diverge from block 0's attention onward
(a derivation from construction order, not a weight comparison).
Protocol. Declared at the control's warmup boundary, before the
outcome, while sdpa led (2.1056 vs 2.3626): the architecture verdict is
the paired boundary table across the full 16.1B matched budget; the
headline is endpoint val; secondaries are probe means at matched
boundaries and the doc/reset gauges; no verdict from any intermediate
lead in either direction (repos/alephllm.md:1961-2002; a control must
be able to fail). Completed unaltered through 13 paired rows. Budgets
are matched in tokens, not wall-clock: fused sdpa ran 71.9k tok/s on the
RTX PRO 6000 and 113k on the H100 against the eager scan's ~58k.
The paired rows (bpb_full, same step, same tokens, same gauge except where struck; deficit = control β craft):
| boundary | step | tokens | 2s | control | deficit | control bank toggle | control grad-norm median |
|---|---|---|---|---|---|---|---|
| warmup | 1,145 | 0.30B | 2.3626 | 2.1056 | β0.257 | β0.008 | |
| fineweb | 20,219 | 5.30B | 1.1172 | 1.1763 | +0.059 | 1.62 | 0.31 |
| s0 | 22,890 | 6.00B | 1.2522 | 1.5047 | +0.253 | 3.44 | 6.47 |
| s1 | 25,561 | 6.70B | 1.2544 | 1.3917 | +0.137 | 3.61 | 2.43 |
| s2 | 29,376 | 7.70B | 1.2177 | 1.3938 | +0.176 | 4.13 | 11.9 |
| s3 | 33,954 | 8.90B | 1.2318 | 1.5317 | +0.300 | 4.73 | 12.7 |
| s4 | 38,532 | 10.10B | 1.2356 | 1.5689 | +0.333 | 5.09 | 24.5 |
| s5 | 42,347 | 11.10B | 1.2504 | 2.1762 | +0.926 | 4.36 | 126.4 |
| s6 | 45,399 | 11.90B | 1.2683 | 3.1940 | +1.926 | 3.89 | 471 |
| s7 | 50,740 | 13.30B | 1.1883 | 3.1201 | +1.932 | 4.17 | 162 |
| s8 | 53,792 | 14.10B | 1.0737 | 3.0810 | STRUCK (gauges differ) | 5.48 | 145 |
| anneal_nochat | 57,607 | 15.10B | 1.1153 | 2.9270 | +1.812 | 5.64 | 167 |
| anneal_mix | 61,422 | 16.10B | 1.1097 | 2.8846 | +1.775 | 6.11 | 215 |
Eleven same-gauge rows after the crossover, all in the craft's favour;
the endpoint gap is +1.775 at 16,101,408,768 tokens on both. The
control's own trajectory is the finding: 1.1763 at 5.3B β 3.1940 at s6
β 2.8846 at the end β a destabilised model at its endpoint, not a
trailing one. Its endpoint ledger: bank_off 8.99015 (toggle +6.1056),
head toggle β1.06e-05, head_buried TRUE at every row from fineweb on,
doc_bpb 5.422, reset_bpb 3.825; probes p0 .200 p1 .333 p2 .267 p3 .333
p4 .300 p5 .433 p6 .233 p7 .433 p8 .333 against the craft's .367 .367
.600 .200 .333 .567 .333 .333 .400 β ties at n = 30 (SE of a difference
.126). The control's bank dispatch entropy fell through the curriculum
(collapse/dispatch_entropy_L5: .94 at the s0 census, .75 @30,000, .48
@35,000, .22 at the s5 census; L0 .75 β .47 @30,000; layer minimum .14
@42,500), ahead of the >30 grad-norm-median onset at 38,000.
The destabilisation facts (from the hub tfevents, train/grad_norm
= pre-clip): the control first crossed the clip at step 17,600 (4.61B,
inside fineweb, on the RTX PRO 6000, while still leading); 813 of 824
logged curriculum+anneal steps clipped (98.7%); 38 steps above 1,000;
max 41,070 @44,600; the > 30 onset at bin 38,000 (late s4) and > 100 at
40,500 (mid-s5) inside one event file. The 2s craft: 0 of 1,225
logged steps from step 200 on above the clip (the only reading above 1.0 is
step 50, 1.063, inside the 200-step LR warmup); max 0.760 @1,300 after the
warmup boundary, and 0.619 @26,750 (s2) over the 824 curriculum+anneal steps. The spike
detector and the non-finite guard never fired on either craft. Under
Muon the clip braked nothing in the Muon group (qkv/o, the position
table, the head); the escalating norm is a sharpness signal, not a
throttled step.
The grade and its caveats. The instance holds: the all-sdpa twin is
a destabilised control under the splat-tuned recipe, one craft per arm
(S-1802 INSTANCE). The general claim β softmax attention is inadequate
for this model's attention requirement β is a CANDIDATE (S-1803) behind
confounds stated as measurements: (a) the recipe was tuned on the splat
craft and carries none of the field's softmax stabilisers (QK-norm,
softcap, z-loss, weight decay, decay), and the signature β clip-engaged
smooth degradation, entropy and rank collapse, no NaN, onset on plain
prose while leading β is the documented softmax logit-growth mode;
(b) n = 1, no bar, +20.3M parameters in the losing arm; (c) shape: the
mother null β mini-beatrix-1 (13 sdpa + 3 hubs, d768) under the
identical TrainConfig (git cc89a87..b472815; the manifests record no
train_config) through the same nine stages at the same budgets ran a
post-warmup grad-norm max of 0.883, 0 of 1,750 logged steps clipped
(canon/splat_aleph_battery.md:955; canon-cited, not re-verified against
the mini-beatrix-1 event files for this companion β her 88,508 steps /
26,102,071,296 tokens / 70.45 h do verify against
mini-beatrix-1/manifest.json) β with the nuance that v1 entered
s0 at 17.3B tokens after 15B prose and a 2B anneal, the control at 5.3B;
(d) the aleph-addressed bank sits in both crafts, its dispatch collapse
precedes the escalation, and no sdpa + dense-FFN arm exists at any
scale; (e) the 4096Γ1024 position table on WD-free Muon at 2e-2 forever;
(f) house Muon is not reference Muon; (g) host and row-order
asymmetries. One gauge (val bpb; probes are ties); the s8 pair struck;
three hosts. dist-e002 (vision, two seeds) remains the only Law-E
splat-vs-sdpa endpoint, and it is a tie.
Provenance of the three hosts. RTX PRO 6000 from birth to the 23.5 h
cap at 22,854 (event file 50β22,850); a Colab H100 80 GB from 22,854
(~2.3β2.4 s/step) through s0βs8 (22,900β53,750), 36 steps before the s0
boundary, with the shuffle buffers refilled; a session 53,800β56,000
follows the 53,792 cap in the H100 session's own host and process (event
file β¦0a706d592fec.620.1, 20:01β21:35Z, ~2.3 s/step, 114k tok/s); a third
host (2b1783ef9e94) opened 2026-09-03T01:41Z from the step-56,000
checkpoint at ~3.6 s/step and ran both anneal rows (56,050β61,400; two
88-byte event files are aborted starts) β a replay of up to 999 steps at
that restart is a hedge on the 1,000-step TB-upload cadence, not a hub
reading (the H100 process's last event is 21:35:20Z, the step-56,000
checkpoint landed 21:35:33Z and its manifest 21:36:06Z, the third host
opened 01:41:15Z; the hub can neither confirm nor refute a replay), and
it left no cap report.
The canon's "on the H100" lines for boundaries 11β12 are wrong by
erratum (canon/splat_aleph_battery.md:1008). The escalation began
pre-resume on the RTX PRO 6000; a 36-step data-order change cannot make
a 0.25 bpb gap on a fixed eval.
The boundary report (reports/v2/) β schema
Written by the notebook's boundary_report(run, tag) cell to
reports/v2/{tag}_step{step}.json, tag = the phase that just finished
or session_cap:
tag,step,tokensβtokensismanifest.tokens_seen(new in the v2 record).probesβ{p0_grounding, p1_self_other, p2_difference, p3_logic, p4_arithmetic, p5_causal, p6_learning, p7_composite, p8_articulation}, each{acc, families{β¦}, n: 30}; byte-NLL argmin over the options, fp32, no sampling (probes.py:191-221); holdout families p3:d5 and p4:sub3 gauged from time zero (probes.py:171).census_flagsβhidden_erank_floor(any block-output effective rank < 0.05Β·d = 51.2),anchor_merge(any pair |cos| > 0.99 in a bank/hub/head book),dispatch_collapse(bank dispatch entropy fraction < 0.10),den_floor(hub den floor_frac > 1e-3),head_buried(liveness < 0.1; added at 0.8.2 β absent from the 2s warmup_step1145, session_cap_step8320, fineweb_main_step20219 and curriculum_s0_step22890 reports, present from s1; present in every control report),codebook_erank_floor(bank codebook erank < 1.5) (instruments.py:150-178). The census sample is(2, min(1024, ctx))random bytes in 0..254 (torch.randint(0, 255, β¦), so DOC never appears in the census sample) in the notebook writer; the trainer's own census uses the first val batch (trainer.py:371-374).ledgerβbpb_full,bpb_bank_off,bpb_head_aleph_off,bpb_hub_off(only if any block is a hub β the control's ledger has five keys), andtoggle_<x> = bpb_<x> β bpb_full; mean CE over the fixed val batches / ln 2 (instruments.py:187-212). Now_s_normfield (the mb1 schema had one).specialβ{doc_count, doc_bpb, reset_bpb}(instruments.py: 310-352); None on BPE crafts.governor_hits_cumβ the session's cumulative pair-pushes; the counter is a Trainer attribute defaulting to 0 (trainer.py:266), not persisted in the manifest or the resume payload, so it resets every session (103,951 @1,145; 1,304,497 @20,219; 70,747 at s1 after 1,604,488 at s0; 0 at session_cap_53792; 776,450 @61,422).crowd_check_extra_hitsβ pushes from an on-demandgovern_modelat report time (415 @20,219; 709 @61,422; 0 on the control).
Other report kinds in the same directory: revival_step24860.json (the
op record above, no probes/ledger β chart code must skip it) and
cultivation_{A_born_null,B_revival_birth,C_matured_transplant, D_live_address_only}.json β the C7 head-cultivation screen, 1,200
steps at seed 1337 with gauges at 300/600/900/1200 {toggle, w_s_norm, head_s_norm, head_s_chance, head_liveness_ratio, head_buried} and,
for B and D, a revival dict (Ξ± 16.0, fit 16,384, base 8.336 β 5.389).
Endpoint toggles: A β5.3e-06 (buried, liveness 0.045); B +3.496
(liveness 1.125); C +0.0922 (βW_sβ 520.5); D β7.1e-05 (liveness 1.037,
not buried, no function) β a live address alone does not carry
function; a revived head at birth does.
The manifest (manifest.py:16-110): preset, model_config (the
full AlephLMConfig), created_utc, updated_utc, steps,
tokens_seen, wall_hours, phases[{name, dataset, planned_tokens, tokens_done, status β planned|active|done|deferred}],
checkpoints[{step, tokens, kind β safetensors|resume|fp8, path, val_bpb, utc}], data_state{dataset, rows_consumed, epoch},
notes[{utc, msg}]. 2s: created 2026-08-27T00:35:31Z, updated
08-31T19:37:50Z, 142 entries (59 safetensors / 24 fp8 / 59 resume β 46
distinct bf16 paths). Control: created 08-31T21:26:32Z, updated
09-03T07:16:38Z, 136 entries β 44 bf16. Neither records a train_config.
Checkpoint kinds (checkpoint.py:102-155,187-195): bf16 safetensors
every 2,000 steps and at every boundary, every state-dict tensor
including the addr.home buffers (so the file's numel, 237,908,285,
exceeds the parameter count by 782,336); fp8-e4m3 every 5th checkpoint
or final, 2-D+ tensors with numel > 4,096 stored with a per-tensor fp32
scale amax/448 under <key>.scale, small params kept bf16, metadata
"inference/testing only" β never train from these; resume/latest.pt
fp32 with the manifest embedded, overwritten at every checkpoint and
archived at boundaries. Hub uploads retry three times and never crash
training; downloads distinguish genuine absence from network trouble
and raise on the latter (checkpoint.py:29-100).
TensorBoard tags (trainer.py:283-296; instruments.py:215-260;
314 tags on the craft, 212 on the control): from the loop
train/{loss,bpb,grad_norm,lr_scale,tokens,tokens_per_sec},
collapse/loss_spike, governor/hits_cum, sys/vram_gb; from the
census per layer i erank/hidden_L{i}, erank/hub_consumed_L{i},
erank/hub_codebook_L{i}, erank/bank_codebook_L{i},
cv/bank_load_L{i}, cv/hub_usage_L{i}, drift/bank_L{i},
drift/hub_L{i}, sign/bank_frac_neg_L{i},
collapse/dispatch_entropy_L{i}, collapse/den_floor_L{i},
gates/L{i}_e{k}; head head/{gamma,w_s_norm,s_norm,liveness_ratio, consumed_erank}, erank/head_codebook; collapse/flag_{β¦} for the six
flags; toggles/{bpb_full,bpb_bank_off,bpb_head_aleph_off,bpb_hub_off, toggle_bank_off,toggle_head_aleph_off,toggle_hub_off}; from the full
eval canary/{recall_acc,wrongpair_frac,noretrieval_frac} and
special/{doc_count,doc_bpb,reset_bpb}. The control lacks every hub
family; the archived run0 file lacks head/liveness_ratio,
head/s_norm, special/* and flag_head_buried (pre-0.8.0 specials;
the head_buried flag arrived at 0.8.2 @d6e1854 and the head/s_norm +
head/liveness_ratio TB scalars at 0.8.4 @a690ea4).
archive/run0-nospecials/. The pre-specials attempt, archived whole
2026-08-27T00:16Z: its manifest (created 08-26T20:50:18Z, steps 2,537,
tokens 665,059,328, wall 3.22 h, warmup done at 1,145, fineweb_main in
progress), bf16 checkpoints 1,145/2,000/2,253/2,537, fp8 2,253/2,537,
resume/{latest,boundary_warmup_wikitext_step1145}.pt, one event
file, and a report at the doubled path
archive/run0-nospecials/mini-beatrix-2s/reports/v2/warmup_wikitext_step2253.json
β a late-tagged fineweb report written on interrupt (stale tag, doubled
path: the 0.8.1 driver-contract bug) with probes, five census flags and
governor fields but no ledger/special block. Code-wins note: the
manual's RIDER 9 says run0 "halted at step 2000"; the archived manifest
says 2,537 (train() swallowed the interrupt and the driver auto-resumed
~19 minutes; repos/alephllm.md:1408). The hub wins: 2,537.
The AutoModel (AbstractPhil/mini-beatrix-2s)
Thirteen files: README.md, config.json, modeling_minibeatrix.py,
the vendored address.py, alephlm.py, attention.py, bank.py,
embedding.py, governor.py, head.py, presets.py,
model.safetensors (475,880,498 B; 593 bf16 tensors, numel
237,908,285, every key prefixed model., metadata {tokens: 16.101B, step: 61422, format: pt}), .gitattributes. No tokenizer files: input
ids are raw UTF-8 byte values. The vendored files are byte-identical to
geolip/alephllm/model/*.py and presets.py at 0.8.7 except one
import line (alephlm.py:30, ..presets β .presets). config.json
is the craft's model_config plus model_type "mini-beatrix",
auto_map to MiniBeatrixConfig/MiniBeatrixForCausalLM,
torch_dtype "float32" (the file is bf16; the loader upcasts on
request), use_cache false. The wrapper (modeling_minibeatrix.py: 21-99) holds self.model = AlephLM(cfg), forces hub_ckpt = 0, makes
_init_weights a no-op ("AlephLM initializes itself; loader must not
re-init"), truncates to the last context positions, returns
CausalLMOutputWithPast(loss, logits) with HF label semantics, and
carries no KV cache β HF generate() recomputes the prefix each step;
the inner AlephLM.generate(idx, max_new, temperature, top_p, use_cache=True) uses the constant-size hub state.
The parity gate. The ship gate β strict load, logits parity 0.0
against the geolip code path, generate() ok β is journal-recorded
(repos/alephllm.md:1840-1846; history/timeline.md 2026-08-31;
MIRROR.md step 2 in the AlephLLM repo), not hub-shipped: no parity
script exists on either hub repo or in the package. Re-verified on CPU
by the drafting workflow (torch 2.11.0, transformers 5.13.0, no geolip
installed; not re-run in the hub-side pass, which found the hub
consistent with these readings β TB head/w_s_norm 515.13 at step
61,000, 593 bf16 tensors, numel 237,908,285): 593 file keys == 593 model keys, parameter count
237,125,949, βW_sβ 515.918, Ξ³ 1.0; the inner cached decode equals the
parallel path (torch.equal True); logits parity against geolip was
not recomputed. Two notes for the reader: the model card's lineage line
says alephllm 0.8.6 while the vendored files are the 0.8.7 mirror
(commit 90a06b75, 2026-08-31 21:11 β the presets.py carries the 0.8.7
twin-isolation block); and the card's "17 reports" counts the 16
boundary/session reports plus the revival op β the prefix holds 21
JSONs with the four cultivation arms.
Load and evaluate (the steps below were executed by the drafting workflow; the numbers are from that run and were not re-run in the hub-side pass):
import math, torch
from transformers import AutoModelForCausalLM
m = AutoModelForCausalLM.from_pretrained("AbstractPhil/mini-beatrix-2s",
trust_remote_code=True).eval()
ids = torch.tensor([list(text.encode("utf-8"))]) # bytes in
bpb = m(input_ids=ids, labels=ids).loss.item() / math.log(2)
# toggle ledger on the inner model (positive delta = mechanism carries function)
core = m.model
full = core(ids, labels=ids).loss / math.log(2)
bank_off = core(ids, labels=ids, disable_bank=True).loss / math.log(2)
hub_off = core(ids, labels=ids, disable_hub=True).loss / math.log(2)
head_off = core(ids, labels=ids, disable_head_aleph=True).loss / math.log(2)
# generation: HF path (no cache) or the inner cached decode
out = core.generate(ids, max_new=40, temperature=0.0, use_cache=True)
print(bytes(out[0].tolist()).decode("utf-8", errors="replace"))
On a 227-byte English snippet this read 0.9446 bpb full, +3.872 bank
off, +3.925 hub off, +0.0156 head off; greedy from "The history of
astronomy begins with the" continued " study of the sun and the
planets. The s". Chat: wrap raw bytes in 0xFB SYS / 0xFE USER / 0xFD
MODEL / 0xFC END (special_tokens.py:112-136). Training checkpoints
load into the same wrapper after prefixing every key with model., or
into a bare AlephLM(cfg.to_aleph()); fp8 files must be rehydrated
first (checkpoint.py:187-195). What the AutoModel cannot reproduce is
the gauge of record: the fineweb-edu holdout needs
geolip.alephllm.data.streams.build_stream(dataset, tok, 4096, 16, seed = 1337 + 9999, role="val") and 262,144 tokens (4 batches of 16 Γ 4096),
then toggle_ledger and special_token_gauge over those fixed batches
(trainer.py:384-411; instruments.py:187-212,310-352).
The process that made 2s different (dated)
The mother, measured (2026-08-12 β 08-27). mini-beatrix-1 was built
with 13 sdpa blocks and three hubs at layers 4/9/14, each a single
512-anchor book in D = 32 (git show cc89a87:presets.py), full-width
banks holding 67% of the mass, and a 512 @ 32 head. Two post-mortems set
the 2s agenda: the 08-25 hub census β 16Γ the K β€ 2D supply, 333/646/181
duplicate anchor pairs at |cos| ~1.0, consumed erank 2.2/3.7/10.8 β and
the 08-27 autopsy of the shipped weights, W_s exactly 0.0 after 8.4B:
the "head election" lore retracted, the head never carried function
(repos/alephllm.md:1586; history/plans/2026-08-26_mini_beatrix_v2_shape.md).
A third: the v1 anneal (2B, chat template inside, before the school)
baked the chat frame into the core irreversibly β the chat-in-anneal
law (2026-08-15) that later dictated the bracketed two-phase anneal.
Why every block (08-23 β 08-26). Phil's directive: "the entire model to be splat attention". The record's support was dist-e002 β cured splat in all 12 ViT-Ti blocks ties sdpa at matched params and matched wall-clock on two seeds (R@1 .0545 vs .0562), late placement edging (R@5 +.0128, outside the bars); the untested bet, flagged in the plan, was that full-splat CAUSAL had never trained. The payoff row was the warmup ledger (+1.50 with the hubs off at 0.3B) and the endpoint (+3.36).
The shape (08-24/25 β 08-26). ROUND 5e's shape ladder: 8 Γ 256 lost
4 of 4 paired against 12 Γ 128, the wide model seed-fragile, its
crowding tail (79% of layer-1 heads over the 25Β° floor on one seed)
naming the chain width β crowding β positional ranking flips β deficit;
hence SUPPLY K β€ 2D (STATUTES_INDEX.md:53) and depth over width. B2's
product code (independent books compose, .859 β .955 monotone in
members) gave the multi-book form; the rotary Γ anchor flip analysis
gave governability D β₯ 128 (Ξ³* 32Β° at d512, 45Β° at 256, unreachable at
64). The arithmetic lands on 4 Γ 64 @ 128 (0.5Γ supply, 4Γ headroom
against v1's 16Γ), L20, d1024, ctx 4096 (splat's wall-clock crossover
~2k; below 4k a full-splat trunk pays attention's price without the
O(L) payoff), banks narrowed to ff 1024, head 256 @ 256. The 849M
sibling (L32, ctx 8192, 16 Γ 256 @ 256) was designed the same session
(presets.py:161-183).
The governor from birth (08-24 β 08-26). Phil's proposal β
"a middleman to control a min/max space that drift can occur to
guarantee there's always enough space between the anchor points" β was
confirmed in the math: for a crowded pair the static logit gap is
quadratic in separation while the positional oscillation is linear, so
small separation flips weight rankings along the sequence; separating
an already-crowded trained book leaves its flip pattern bit-identical,
so min-sep is preventive, not curative β run it from birth. Rung 1 ran
bit-identical to the ungoverned run (raw books never crowd; the
crowder was the frame W_a); gov25m fired on the fragile seed only,
harmlessly. Shipped as a post-step projection, 45Β°, every 8 steps
(governor.py, presets.py:99-105). In-mission it ran hot β ~120
pushes/step at step 1,000, ~84β105 sustained through fineweb, never
decaying β with every function gauge healthy; the ΞΈ ladder 35/40/45 for
K = 64 @ D128 is an open rung, and the preset comment's "45 at D=256"
does not itself justify 45Β° at D = 128.
The kernel campaign and the pivot (08-26, one day). 0.7.0 at 10:41
(multi-constellation hub, supply guard, governor wired in, the 849M
rescale, 2s as the screen craft). The Blackwell preflight OOMed
(hub_ckpt), then launched at 161.88 s/step; the per-op profiler
printed qc torch.float32 under autocast β 0.7.2 at 12:27 (the einsum
promote trap; 4090 hub fwd+bwd 229.7 β 178.8 ms). The dtype fix bought
~6%; the binding constraint was kernel shape β 0.7.3 at 13:14 (one
stacked GEMM, one fused softmax, prefix as a triangular GEMM; 65.3 ms,
3.5Γ; peak 7.4 β 1.9 GB; Blackwell 149 β 69.7 s/step). Compile refuted
by measurement (bf16-backward NaN, and the pre-NaN projection 67 vs
69.7 s eager) β eager-only on Blackwell. Economics: 17.3B at 8k tok/s
is 24β26 days on the one card. Phil: "we can't train the large one
currently. Not until we work out a series of logistics problems." 0.7.5
at 13:43 (@73218bd): 2s is the mission, hub_ckpt 2 β 0; launched at
4.54 s/step, 58k tok/s. "Not a bad start. We'll train this one." The
849M is shelved, not retired (its value-bottleneck relaunch lever
quantified at ~46 s/step).
The format restart (08-26 16:43). Phil: "We'll want a practical array of them for usage, nothing small. We'll halt this one and start over with the correct formatting." 0.8.0: the thirteen unreachable ids, the exhaustive proof at every launch, DOC from birth, the frame only in anneal, the canary collision caught; run0 archived whole, run1 fresh on the clean prefix (manifest 08-27T00:35Z). DOC cost nothing β run1 train bpb 1.49 @1,100 against run0's 1.494 @1,000 β and doc_bpb fell 12.83 β 3.29 by 0.52B. 0.8.1 the same day: the driver contract that made every later boundary row a real boundary.
The head saga (08-13 β 08-29 β 08-31). Born weight-zero by law
(gate-zero deadlock, head.py:8-11); buried inside 2,000 steps on run1
(0.032Γ chance at the first stored checkpoint, 0.014Γ @12k β journal
readings from checkpoint analysis, not TB scalars; learned
avoidance β proj rotated into codebook-orthogonality while W_s grew to
norm 31 multiplying ~0); LS-ignite alone refuted (0.0006 bpb); the
governor exonerated (the ungoverned v1 buried deeper; the 45Β° floor is
free at birth). Candidate law at 2/2 crafts, 3/3 with the control: a
born-null aleph head racing a strong same-target linear base
self-buries within ~2k steps; the bank's self-start does not transfer
across competitor types. Phil ruled activation; the BOUNDARY-WRITE law
was minted (revival.py:26; STATUTES_INDEX.md:67) β a third
intervention category outside both the governor statute and the
no-balance-machinery law, permitted only at run boundaries or halted
resume points, always logged β and the deterministic op executed at
24,860. The first nonzero head toggle in lineage history landed at s1
(+0.0258, after 6.5B tokens of exactly 0.000); the settled read is a
durable, small, diet-sensitive niche in the band β.001..+.028,
band-exits upward on the binding-adjacent diets (s5 causal +.0278),
touching zero at s7 as bpb_full fell 1.268 β 1.188.
The recipe that never changed (08-12 β 09-04). Muon on the trunk
because the 08-10 validity battery on the AR bed read muon .8081 >
sgd_mom .7995 > adam .7157 > lion .5638, with the address ~20Γ more
optimizer-fragile than sdpa (cross-optimizer spread .79 vs .037) and
schedules no-op-to-harmful (flat .714 > warmcos .596) β so the flat-LR
law; pure Adam on the rest by the 09-01 optimizer statute (Adam the
experimental baseline, Muon the trunk, AdamW never;
STATUTES_INDEX.md:76). presets.py:80-84 is the same text at
cc89a87 (where it sits at presets.py:65-69) and at HEAD. The same recipe is the audit's confound (a).
The diet (08-15 β 08-31). The nine stages and budgets are v1's
(0.6.0), placed before the anneal rather than after it (Phil,
2026-08-30: "Let her really build up that internal knowledge first";
history/plans/2026-08-26_mini_beatrix_2s_mission.md), fineweb_extended
deferred; the two-phase anneal (Phil, 08-31: "enable the anneal mix
without chat and the anneal mix with chat, we'll run without first,
then just train chat on after"; streams.py:63-77), 0.8.6 at 02:48.
The s8 terminal-gauge hole appeared at 04:57Z and 0.8.5 had already
closed it in code (08-30 22:03); the true ledger was re-measured at
09:53Z. Mission complete 19:31Z: 61,422 steps, 16.101B tokens, 78.33 h,
zero spikes; the HF outage at the final push was recovered by a Drive
rescue and retry.
The twin (08-31 β 09-04). 0.8.7 at 14:10 (twin isolation, birth
recipe); the control born 21:26Z; the protocol declared at its warmup
boundary while sdpa led; the crossover at fineweb 5.3B and every row
after; the rank story as the mechanism claim (at step 4,000 the control
collapses early hidden erank to 5β9 of 1024 at L2βL4 (5.5 / 5.4 / 9.3)
while the craft reads 234 / 225 / 250 there and 150β396 across L0βL15
(erank/hidden_L{i}, TB census); screen scale reproduces it; rank β function β the
control led val at 4k while running rank-5 layers); the H100 resume at
22,854; the grad-norm escalation rider at s5; Phil's claim held on
09-02 ("SDPA isn't an adequate representative of this model's
attention requirement. We can say that without question now."); the
third host from 56,000; the endpoint 09-03; the 12-agent audit on 09-04
(S-1802 INSTANCE, S-1803 CANDIDATE, the s8 strike, the mother null,
Muon clip-blind, the falsifier filed).
Gauges, defined once
- val bpb: mean cross-entropy in bits/byte over 262,144 tokens
(4 batches of 16 Γ 4096) of the fineweb-edu reserved head slice β
the first 2,048 rows, fixed, unshuffled, seed 1337 + 9999 β for every
phase from fineweb_main onward, both crafts (
trainer.py:384-411;streams.py:279-282,423-447; gauge continuity law). The warmup row vals on wikitext-103's validation split. Pre- and post-0.8.0 gauges differ for v1-era crafts (DOC rides the val stream). - toggle ledger: bpb with one mechanism disabled minus full bpb β
the causal contribution of banks / hubs / head aleph
(
instruments.py:187-212). Positive = the mechanism carries function. - specials gauge:
doc_bpbandreset_bpbin bits, read against the same val batches (instruments.py:310-352);doc_count70 on every 2s-era report on the fineweb-edu gauge (the struck 2s s8 file reads 1612). - head liveness: mean βsigned readβ of real hidden states over the
same book's mean on 512 random unit vectors β self-calibrating;
head_buried= ratio < 0.1 (instruments.py:144,176,356-382). Both buried crafts sat at 0.003Γβ0.03Γ chance. - probe accuracy: byte-NLL argmin over the item's options, nine
suites Γ 30 items, holdout families d5 and sub3 gauged from time zero
(
probes.py:171-235). At n = 30 a between-craft difference has SE .126: the paired probe calls are ties. - train/grad_norm: the pre-clip global norm returned by
clip_grad_norm_(trainer.py:244,287), logged every 50 steps; under Muon it measures sharpness, not the applied step. - governor hits: cumulative pair-pushes per session
(
trainer.py:266); a session-scoped counter, comparable within one event file only.
Known caveats and open items
- The autocast einsum-promote trap voids every pre-0.7.2 splat speed
verdict (fp32 scans under "bf16"); accuracy verdicts stand. Any
autocast performance reading over einsum code is invalid until the
dtypes are printed (
attention.py:167). - Muon is clip-blind (
optim.py:24), and Adam's per-coordinate normalisation makes it nearly so:grad_clip 1.0shrank the applied step of neither group on the control, only the weighting of steps inside each optimizer's buffers; the recipe carries no softmax stabiliser. - The 2s
curriculum_s8_step53792ledger is on the synthetic fallback and is struck; the same-gauge pair is owed by a zero-training re-evaluation ofresume/boundary_curriculum_s8_step53792.pton the 0.8.7 gauge (T0b inhistory/plans/2026-09-04_sdpa_falsifier_screen.md). Hub-vs-journal note: the file on the hub reads doc_count 1612, bpb_hub_off 6.2378 (toggle_hub_off 5.164), doc_bpb 0.843 β agreeing with the trainer comment and the manual (doc_count 1612, hub_off 5.16 = the toggle;trainer.py:397-399); the file carries no dataset field, so the strike rests on the same-step cap discrepancy (doc_count 70, bpb_full 1.1911 insession_cap_step53792.json) and on the 1612-document count itself. The hub file's numbers win for what the file says. - The control's third host from 56,000: a replay of up to 999 steps is a
TB-cadence hedge, not a hub reading; no cap report; the 53,800β56,000 segment ran in the H100
session's own process (event file
0a706d592fec.620.1); canon CB11/12 "on the H100" wrong by erratum. - Every resume refills the shuffle buffer (not row-exact); the control resumed three times, the craft four; MixStream state carries no recipe fingerprint.
- The 2s preset at HEAD carries
head_addr_frozen = True(presets.py:199-201), the post-revival state: a fresh birth of the treatment preset under 0.8.7 would freeze a random proj and codebook from step 0, which is not what the shipped run did (born-null unfrozen under 0.8.1 for 24,860 steps, revived, then frozen). The control's override (presets.py:235) is the birth recipe. - Stale text, code wins:
presets.py:18"233M" (built 237,125,949);873.7M" for mini-beatrix-2 (built 849,023,425); the training README's ladder row "mini-beatrix-2 | 1024/20/2048 | 249.1M" is the retired v1 shape; the hub driverpresets.py:14,166"beatrix_v2_colab.ipynbis headed "mini-beatrix-2 β the governed full-splat mission" and namesmini-beatrix-2-controlwhile its CRAFT ismini-beatrix-2s(no control notebook exists on the hub β only this file andmini-beatrix-1/beatrix_curriculum.ipynb);AlephLMConfig.hub_chunkdefaults to 128 while the module's own default is 256 (presets.py:52;attention.py:83) β the config governs, and 2s sets 256. governor_hits_cumresets per session; the manifests record no train_config or package version β the mother null's "identical TrainConfig" is a git fact, and the craft's birth version 0.8.1 is inferred from commit dates (run1 created 08-27T00:35Z between 0.8.1 on 08-26 and 0.8.2 on 08-29; the revival report records 0.8.2; the hub driverbeatrix_v2_colab.ipynbpinsgeolip-alephllm @2a902b7, the 0.8.1 commit).- Owed instruments: the per-layer hidden-erank census of both crafts at the full-scale boundaries; the falsifier S-1803-F (Tier 0 on the 4090; a 40M twin screen with sdpa + QK-norm / LR/3 / dense-FFN / positions on Adam arms; pivot = resume the control at 20,219 through s0 at LR/3 with QK-norm). Without it the general claim stays CANDIDATE.
article_assets_ft2/make_charts_ft2.pysources chart 01 from the hub but charts 02β05 from local scratch paths, and chart 01 pairs the struck s8 rows unless filtered.
Provenance discipline
Both crafts are resume-first: the manifest is embedded in the resume
payload (atomic consistency), a crash never overwrites
resume/latest.pt (trainer.py:334-368: any exception other than a
manual stop leaves the hub state untouched), an interrupted session
uploads before exit, and every phase boundary archives its own
immutable resume. The revival is auditable from the prefix alone: the
pre-write state (resume/pre_revival_step24860.pt), the op's
provenance (reports/v2/revival_step24860.json, with version and
commit), the pre- and post-write weights (step_00024860 and
step_00024860_revived), and the first live row after it
(curriculum_s1_step25561.json). The struck s8 ledger stays public
beside the cap that supersedes it, as run0 stays public under
archive/, for the same reason the mother's rewind checkpoints do. The
recipe is pinned from source, not from the manifests. The AutoModel
vendors the model files verbatim and ships the mission-final weights
re-prefixed; the training checkpoints, not the card, are the control's
weights. Every refuted arm of the head-cultivation screen ships.
Pointers
- Canon:
canon/splat_aleph_battery.mdβ CONTROL BOUNDARY 1β12 (522β889), ENDPOINT VERDICT (891), CLAIM AUDIT (901β1006: the s8 strike 930β937, MUON IS CLIP-BLIND 936, THE MOTHER NULL 955β968, PROVENANCE RIDER 1008), ROUND 5a/5d/5e, B2/B4/B5. - Statutes (
STATUTES_INDEX.md): S-701 a control must be able to fail; S-801 supply law K β€ 2D; S-1001 gate-zero deadlock; S-1002 born-null head self-burial 3/3; S-1003 BOUNDARY-WRITE; S-1201 optimizer family; S-1202 autocast einsum-promote; S-1801 the crossover; S-1802 the destabilised control (INSTANCE); S-1803 sdpa-inadequacy (CANDIDATE); S-1901 the specials plane. - Manual:
repos/alephllm.mdβ the 0.7.0 era (1180β1330) and RIDERS 7β21b (1333β2081): pivot, launch health, specials and the run0 archive, driver contract, the dead head, the revival trial, the boundary-write and promote, the head trend 14β14l, curriculum complete and the s8 artifact, the pre-chat baseline, mission complete, the ship-out, twin isolation, the pre-registered protocol. - Plans:
history/plans/2026-08-26_mini_beatrix_v2_shape.md(the shape arithmetic),2026-08-26_mini_beatrix_2s_mission.md(the pivot, the anneal-timing ruling, the two-phase amendment),2026-08-24_covariant_address_program.md(the governor),2026-09-02_sdpa_inadequacy_claim_held.md,2026-09-04_sdpa_falsifier_screen.md. - Dockets:
history/dockets/2026-09-04_sdpa_claim_audit/,2026-09-01_ft2_article/and2026-09-01_article/tools/(writeback_cb*.py,writeback_endpoint.py). - Article:
articles/article_beatrix_ft2.md; charts underarticle_assets_ft2/on the training repo. - Code: AlephLLM HEAD 4f4b7d6 (0.8.7); the era's commits a63a29b (0.7.0) Β· 2be28dd (0.7.2) Β· 60ee496 (0.7.3) Β· 73218bd (0.7.5, the pivot) Β· 3ea3103 (0.8.0) Β· 2a902b7 (0.8.1) Β· d6e1854 (0.8.2) Β· 7d48328 (0.8.5) Β· af9319c (0.8.6) Β· b472815 (0.8.7). No git tags exist; versions are commit subjects.
- The mother:
TECHNICAL.mdon the training repo (byte-identical local copyarticles/TECHNICAL_training_repo_beatrix.md).