The factory, end to end

Build the ruler.
Then build the model.

A small specialist earns its place one artifact at a time. This is the shortest path through the system—from choosing a capability to deciding whether the result should ship, redirect, retry, or stop.

  1. 01target
  2. 02data
  3. 03post-train
  4. 04evaluate
  5. 05package
  6. 06report

00 / admission rule

Frontier is the calibration anchor, not the opponent.

If a strong frontier model cannot nearly ace a benchmark, that benchmark cannot grade the Mac model. Fix or drop the ruler first. The objective is frontier capability retained per unit of model size, RAM, latency, and cost.

01–06 / the active loop

Six questions. Six durable artifacts.

The narrative is the index. The linked docs and code remain the source of truth.

Which decisions are missing, and where did each training row come from?

Build data for the failure, not the benchmark name.

Trace review turns misses into slices. Synthetic teachers are useful only when provenance, deduplication, contamination checks, and a held-out gate stay attached to the rows.

Does SFT, preference training, or rejection sampling improve the frozen target?

Change the smallest model that can plausibly close the gap.

The readable Swift + MLX path remains the local reference. Every intervention is a recipe with exact data, adapter, optimizer, steps, and composition—not just a technique name.

Did capability rise on the frozen target without unacceptable regressions?

Make the candidate earn the claim.

The same evaluator scores baseline and candidate. Slice metrics, legality, raw outputs, latency, RAM, throughput, and uncertainty stay visible; a benchmark whose frontier ceiling fails is rejected.

case files / decisions, not demos

What the loop has actually taught us.

An improvement, a regression, and a failed ruler are all useful when they force a clear next decision.

improved

Tool calling: training helps a weak base

The 1.7B arc moved from stock to SFT to GRPO. SFT did most of the work; GRPO added two points, then the approach plateaued below the stronger 4B.

Read the full arc →

56 → 76 → 78

routed

File ops: depth won, breadth regressed

The distilled 4B aced the narrow hard gate while losing out-of-domain breadth. That is a routed specialist result, not a general model upgrade.

Inspect the package →

58 → 100 / 59.6 → 42.3

rejected ruler

Character 2048: no intelligence gradient

The strongest completed frontier attempt did not clear the frozen 1.10× bar over paired random legal play. Training was stopped and the replay was retained.

Watch the failed attempt →

1.058× best frontier ratio

candidate

Character Chess: promising, not frozen

The first suite showed a real gradient, but the frontier did not approach the required ceiling. The expanded candidate pool remains for human review—not small-model grading.

Inspect candidate evidence →

65% frontier development score

annotated source / where to begin

Read the system in the same order it runs.

Qwen Chess made its implementation approachable by naming the modules behind each lesson. These are the equivalent entrypoints here; the repository contains the complete implementation and history.

  1. 01
    FactoryRunCommand.swift ↗

    CLI composition and the top-level run boundary.

  2. 02
    FactoryRunLifecycle.swift ↗

    State transitions, locks, manifests, and durable run identity.

  3. 03
    SFT.swift ↗

    The readable Mac-local supervised fine-tuning path.

  4. 04
    EvalCompare.swift ↗

    Baseline-versus-candidate comparison under one contract.

  5. 05
    build_fine_tune_report_card.py ↗

    Offline compiler from validated evidence to the public before/after report.

  6. 06
    attempt-ledger.md →

    The durable memory of shipped, retried, rejected, and incomplete attempts.