ADR 0001: native independent MLX implementation for v0

Context

The goal for v0 is a coarse-to-fine text generator that genuinely runs on MLX/Metal on an M5 Pro today, with honest measurements. Three routes were considered.

Option What it means For Against
A. Native independent implementation Implement the NCM concepts (multiscale residual VQ, level-parallel generator) from scratch in MLX, train small models locally Runs today; every line is understood and tested; free to pick MLX-friendly operators Not checkpoint compatible; results are toy scale
B. Faithful MLX checkpoint port Reimplement the exact released configuration and convert .pt weights Real pretrained quality; direct comparison with the paper Needs BPE tokenizer, learned resampling, tied heads, GroupNorm parity and tensor-by-tensor tests before any output; multi-day and blocks the demo
C. PyTorch MPS reference Run upstream code on mps Least work if it runs Not MLX; upstream assumes CUDA (flex attention, distributed); would not answer the question of a native runtime

Decision

Option A for v0. Option B becomes a separate reference-compatible variant in milestone M4, gated on M1–M3, never mixed with the experimental variant. Option C is not pursued.

Consequences

  • No upstream code is copied; attribution is by citation.
  • All quality numbers are for models trained here on a synthetic corpus and must be labelled as toy results.
  • The codec deliberately differs from upstream where small scale needs it (contextual encoder, dead-code restart); differences are listed in docs/research/upstream-map.md.