"""BLT-Reasoner: Bottlenecked Latent Thoughts with explicit info objective. Replaces Abstract-CoT's discrete-sampled z̃ with a continuous latent loop, adds an InfoNCE z↔y identifiability objective that makes the constant-z basin mechanically impossible, and enforces a strict y→only-z attention mask so the latent is the only information channel from prompt to answer. Modules: model.py — continuous latent loop + 4D bottleneck mask losses.py — InfoNCE, centroid (warmup), LM loss data.py — GSM8K + chat template + GSM8K-final-answer extraction train.py — Phase B training loop (LM + InfoNCE) eval.py — pre-registered z-ablation eval (normal/zero/random/shuffled) smoke_test.py — 30-min identifiability existence proof (decision gate) """