<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>PostTrainLLM — Devlog</title>
    <link>https://posttrainllm.com/devlog</link>
    <description>Notes from building PostTrainLLM — kernel measurements, honest negative results, decisions made while AI-pairing on a Mac-local LLM factory.</description>
    <language>en-us</language>
    <lastBuildDate>Fri, 31 Jul 2026 05:50:09 GMT</lastBuildDate>
    <atom:link href="https://posttrainllm.com/devlog/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The site you&apos;re reading — a dark research-lab redesign</title>
      <link>https://posttrainllm.com/devlog#devlog-redesign</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-redesign</guid>
      <description>Unified the site into one instrument: a single dark design system, the loss-curve logo as the universal mark, machine-transparent claims, and structured-data SEO.</description>
      <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The factory loop closed — and the first ship-decision was &apos;retry&apos;</title>
      <link>https://posttrainllm.com/devlog#devlog-factory-loop</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-factory-loop</guid>
      <description>The north star became one canonical run: target → data → post-train → eval → package → report, ending in a documented ship/reject/retry decision. It executed end-to-end for the first time on 2026-07-04.</description>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The DPO saga — a policy collapse, then a base-model prior</title>
      <link>https://posttrainllm.com/devlog#devlog-dpo-saga</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-dpo-saga</guid>
      <description>Three DPO runs to strip SQL wrapper prose: ref-free SimPO collapsed (exec 0.860 → 0.080), reference-anchored DPO cured the collapse (0.900), but clean-SQL rate stayed 0.000 — the wrapper is a base-model prior a rank-4 adapter can&apos;t override.</description>
      <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Frontier parity at 4B — the distillation that worked</title>
      <link>https://posttrainllm.com/devlog#devlog-frontier-parity-4b</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-frontier-parity-4b</guid>
      <description>A Qwen3-4B distilled on multi-turn file-ops trajectories reached 100% on the BFCL hard gate, up from 58%. The honest cost: out-of-domain breadth dropped 59.6% → 42.3% — real catastrophic forgetting. Ships as a routed specialist.</description>
      <pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The eval that was broken</title>
      <link>https://posttrainllm.com/devlog#devlog-broken-eval</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-broken-eval</guid>
      <description>A fine-tune looked like it beat its baseline — until the baseline turned out to be non-reproducible and the v1 fixture set was measuring the wrong thing. The whole factory&apos;s eval discipline came out of that miss.</description>
      <pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The Mac runtime — MLX-Swift, OpenAI-compatible, on one machine</title>
      <link>https://posttrainllm.com/devlog#devlog-mac-runtime</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-mac-runtime</guid>
      <description>The factory is a native Swift/MLX CLI — 100+ subcommands, one binary. It serves an OpenAI- and Ollama-compatible endpoint, runs an agent loop with FSM-constrained JSON, and packages to MLX, safetensors, and CoreML.</description>
      <pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Learning from y = mx + b up</title>
      <link>https://posttrainllm.com/devlog#devlog-curriculum</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-curriculum</guid>
      <description>A ground-up curriculum: ten modules from &apos;a model is a parameterized function&apos; to a self-improving factory, each with a toy exercise, a repo anchor, and a mastery gate. A coverage map ties every subsystem to a learning anchor.</description>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Memory64 — breaking the 4 GB tab ceiling</title>
      <link>https://posttrainllm.com/devlog#devlog-memory64</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-memory64</guid>
      <description>WebAssembly&apos;s -sMEMORY64=1 + -sWASM_BIGINT flags switch the module to 64-bit pointers, lifting the cap into the tens of GB. Allocated a 473M-parameter model end-to-end in a browser tab.</description>
      <pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Matmul kernel sweep — what worked, what didn&apos;t</title>
      <link>https://posttrainllm.com/devlog#devlog-matmul-sweep</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-matmul-sweep</guid>
      <description>Workgroup-shared tiling (16×16) + thread-level register blocking (4×4) gave up to 5.18× speedup. f16-packed storage was not additive with tiling. 8×8 register block lost at every size — register spill on Apple GPUs.</description>
      <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Speed evolution — the cumulative picture</title>
      <link>https://posttrainllm.com/devlog#devlog-speed-evolution</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-speed-evolution</guid>
      <description>From naive WASM to tiled+blocked WebGPU to Flash Attention 2: the cumulative speedup curve across presets, with loss-drift parity checks at every step.</description>
      <pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The lever that actually shipped — Flash Attention 2</title>
      <link>https://posttrainllm.com/devlog#devlog-fa2</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-fa2</guid>
      <description>FA2 on Apple GPUs: a hand-written Metal kernel with the tiled+blocked structure from the matmul sweep. Measured forward-pass speedup and the end-to-end training parity check.</description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>What&apos;s next — what genuinely remains</title>
      <link>https://posttrainllm.com/devlog#devlog-whats-next</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-whats-next</guid>
      <description>The honest roadmap: what&apos;s proven, what&apos;s parked, and what the next real milestone is — not aspiration, but the next gate that produces a ship/reject decision.</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The bug that wasn&apos;t in any kernel</title>
      <link>https://posttrainllm.com/devlog#devlog-integration-bug</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-integration-bug</guid>
      <description>An end-to-end training loss diverged 30× despite every standalone kernel benchmark passing. The bug was in the integration — the end-to-end parity test became the bar.</description>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Notes on pair-programming with AI</title>
      <link>https://posttrainllm.com/devlog#devlog-pair-programming</link>
      <guid isPermaLink="true">https://posttrainllm.com/devlog#devlog-pair-programming</guid>
      <description>Lessons from building the entire project AI-paired: where the AI helps, where it doesn&apos;t, and the workflow patterns that produced real results vs. wasted cycles.</description>
      <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>