Every warm fine-tune of my Japanese glyph table for Anima lost words, even when the rows moved a few degrees. Measuring the table explained it: each row is one shared vector per family, the stick, plus a near-orthogonal per-glyph spike that works as a hash. The stick decides whether the spikes are read at all, swapping sticks between tables moves the words with them, and a trained turn of the spikes costs the same as a random one because a single draw's gradient is 97% noise. What the geometry is, what it predicts, and the one thing it made easy.
Teaching a frozen diffusion model a new token means picking which noise levels to train at, and the default sampler picks badly. One forward pass per σ with the caption swapped tells you where the model still listens to text: single glyphs at 0.7–0.9, strings at 0.5–0.7, small text lower, nothing above 0.9. How the bands were measured for Japanese text in Anima, where the measurement was wrong, and the 1,573-row pack it produced.
Bun now ships an official Android build, and the claude binary is a Bun executable with its JS source still inside. Extract the JS, run it with Android Bun, and Claude Code runs on your phone in plain Termux: no adb, no root, no proot Ubuntu.
Anima's T5-side tokenizer turns every Japanese prompt into <unk>, so the model garbles Japanese text in speech bubbles. But the garbage is real kana in random order: two OCR readers agree on half of it. With the DiT, adapter and text encoder all frozen, training a few hundred embedding rows is enough to make it write the kana you ask for. Notes on how far that goes, and where it stops.
A YAAR post-mortem: how a 64 KB third-party library got vendored into an agent-built app through every guardrail I had — CSP, domain gate, compiler, lint — without any of them misfiring, and what that says about closed worlds.
Training a DiT LoRA on a downscaled latent at high noise should be free: the noise already ate the detail. Measured at the gradient level it is only sometimes free, and the map of when comes from two huge perturbations that nearly cancel each other. Here is the whole story without the appendix.
Sequel to the chaos-floor post. This time everything ran with --deterministic — and a validation gate still failed at 0.33 against committed reference measurements. Nothing changed: not the weights, not torch, not the driver. Just two reboots and an empty /tmp. Determinism pins a kernel path; it can't pin which path you're on.
A YAAR sequel: agents building apps inside the OS keep hitting bugs in the OS itself — so I gave them a GitHub app agent that verifies reports against real source and files the issue.
We seeded everything — init, data order, noise, even per-step σ draws — and still got checkpoint cosine 0.41 between two runs of the identical command. The culprit is the one RNG no seed reaches, and one flag makes training bit-exact.
While improving my turbo LoRA I diffed the official turbo checkpoint against base: the biggest movers in the whole delta were AdaLN layers my trainer never touches. I git-blamed that exclusion back through the ecosystem to a single line in a "simplification" refactor that nobody framed as a decision.
Introducing YAAR, a generative OS where the AI makes the system calls — and a proposal for 'model DX' as the design discipline behind it.
An empirical-ML research workflow where decisions come from measurement, not plausibility — gates kill expensive mistakes early, dead hypotheses still get a tombstone, and even a clean PASS has to answer one last question: "but is this a contribution?" And where Claude rides the loop with you.
Few-step distillation usually means holding a teacher and a student model in memory at once. We distilled a 28-step diffusion teacher into a 4-step LoRA on one 16 GB card by running three roles off a single frozen backbone.
How I got an MoE-style LoRA to actually specialize on a T2I model — through a cold-start deadlock, a failed jitter attempt, orthogonalized experts via SVD slicing, expert warmup, and σ-conditional routing borrowed from T-LoRA.
Sharing a persona prompt, memory layout, and the 'excuse tool' — patterns I kept refining from Opus 4.1 through 4.7.
DiT training has three sources of shape dynamism that cause torch.compile to recompile every step. We eliminated all three and got stable compiled training on a consumer GPU.
Flash Attention 4 doesn't support consumer Blackwell GPUs yet. We fixed three critical bugs and got it running on the RTX 5060 Ti.
A C++ critique video as a lens into vibe coding and the myth of total code comprehension.
Two precision-oriented features for the LoRA training pipeline: lora_fp32_accumulation and attn_softmax_scale.
Personal opinion on the paper 'Epiplexity'
How to build native Windows desktop applications that integrate with the Claude Code CLI using a pure Rust backend.
Personal opinion on AI slops
An exploration of the challenges in long context language model research.
A personal pick of recently published papers that show strong potential.
A personal take on the role of persona in the agentic LLM paradigm.
How to build native Windows desktop applications that integrate with the Claude Code CLI using a pure Rust backend.