NOCAP // AGENT ARCHITECTURE
DOC 05 · FULL SYSTEM MAP 2026-07-11 github.com/rainbowpuffpuff/nocap
Autonomous experiment agent · BottleCapAI NoCap-Test

An agent that finds a faster path to val loss ≤ 3.3821

Not a chatbot. A closed-loop research agent: a flag-instrumented GPT-2 trainer, a two-stage data-curation pipeline, a Modal serverless DAG orchestrator, and a methodology of pre-registered kill gates. The job is to beat the official FineWeb baseline on one GPU — measured against our own re-benchmark — then ship the evidence.

GPT-2 124M · d12 F1 historical · 3.82 h F1_seal DONE · 3.866 h F2 miss · final 3.405 F2b hit · final 3.377 −2.9% · retracted indeea board DONE muon_par 4.218 claim next on rpp
≤3.3821
Target val loss
3.866h
F1_seal \(T\) @4736
3.380
F1_seal final val
3.377
F2b final val (hit)
4.218
best proxy @800
claim
Muon+par next on rpp
00

Map of this document

01

Mission & environment constraints

The environment is the BottleCapAI NoCap-Test hiring challenge: train GPT-2 124M on FineWeb to the baseline’s final validation loss, faster.

OBJECTIVE
Beat baseline wall-clock

Reach val loss ≤ 3.3821 on the official disjoint val set, in less training wall-clock than the stock recipe on the same GPU class. Clock pauses during validation. One GPU only.

DENOMINATOR
F1 re-benchmark, not the 4090 board

Rules: re-benchmark baseline on your hardware. F1_seal (rpp, torch 2.13) crossed 3.3821 at step 4736 = 232.0 min (3.866 h), final 3.3798, step_avg ~2939 ms. That is the only speedup denominator. Historical F1 was 229.1 min (provisional).

AxisAllowed / required by rulesForbidden / trap
DataAny filter/reorder of the given FineWeb tokensNew datasets outside the kit’s FineWeb stream
Model / lossArchitecture, loss, schedule changes (with valid prob. model at eval)Copying Modded-NanoGPT / leaderboard primary ideas
EvalAny seq length that scores the full val set; sliding reported alongside officialChanging val_tokens on real runs (it IS the metric)
HardwareAny GPU; report relative speedup vs self-baselineTreating absolute hours as comparable to the 4090 board
Clock (rules)Training wall-clock only; harness pauses timer during validation; one GPUScoring validation time, multi-GPU, or absolute 4090 hours as our claim
Fairness (rules)Any generic tuning we take, baseline gets too; re-benchmark stock recipe on our hardwareUnfair comparisons / stack advantages only on the challenger
Software (rules)Official pin was PyTorch 2.8.0-dev (cu128); compile may be off if unstable — both runsSilent env drift between baseline and challenger
HyperparamsSchedule changes justified by underfit regime / matched stepsPure hyperparameter search as the “idea”
Three “baselines” — never conflate them

(1) Official repo baseline — 5.401 h on RTX 4090, defines target loss 3.3821.

(2) F1 / F1_seal — stock recipe on our A100-40; only a sealed F1 (same torch pin + GPU class as challengers) is a valid speedup denominator. Historical F1 (notebook-era) is provisional.

(3) m0_anchor / proxy control — 800-step reference for cheap A/B only; never appears in the official % claim.

01b

Fair-clock forensic protocol

Competition rules require a honest relative speedup on our hardware. That is necessary but not sufficient for forensic-grade claims: unpinned images, compile warmup, and GPU-class noise can move wall-clock by several percent — enough to fake a “win” or hide a real one. This section states both the official rules and the extra methodology we enforce.

A. What the competition already requires

Rule (NoCap-Test / BottleCapAI)How we implement it
Reach val ≤ 3.3821 on official disjoint val, faster than baselinePrimary DV: first step where disjoint val ≤ 3.3821
Re-benchmark stock baseline on your GPU; report relative %F1_seal on A100-40 · torch 2.13 · \(T\)=3.866 h @4736 · DONE
Training clock only — timer pauses during validationUse harness train_time_ms, not wall calendar time that includes val
One GPUModal A100-40GB only; never bare A100 (80GB trap)
Fairness: if you tune X for your run, baseline gets X tooSame compile flag, same precision, same pin on denominator and challenger
Official software pin (repo era): PyTorch 2.8.0-dev cu128; compile optional if brokenWe diverged on Modal CLI (see below) — so we re-seal, we do not hide it
Negative results welcome; no copying Modded-NanoGPT primary speedups as the “idea”Archive miss configs; kill gates pre-registered

B. What we add for forensic accuracy (beyond the README)

STACK SEAL
Pinned torch + fingerprint every run

CLI images used unpinned pip install torch. F2b / Wave-4 / indeea resolved 2.13.0+cu130; notebook F2/W3 were 2.8.0+cu129; historical F1 torch was never logged. Code now pins TORCH_PIN = "torch==2.13.0". Smoke writes /vol/env_fingerprint.txt (profile, torch, CUDA, GPU name, pin).

WARM / COMPILE
Compile + early steps are on the clock

torch.compile first-iteration overhead and early step instability are included in \(T\) (train_time to first cross). We never start the official clock after a secret warmup that baseline did not get. Steady-state step_avg is reported separately with \(N_{warm}=200\).

ENDPOINTS
Pre-registered dependent variables

\(T\) = train_time_ms at first disjoint val ≤ 3.3821.
\(N^*\) = that step index (sample efficiency).
step_avg = mean over \([200, N^*]\).
Speedup = \((T_{F1\_seal} - T_M) / T_{F1\_seal}\). Never claim from sliding/EMA alone.

NOISE FLOOR
How big is “real”?

Measured stack drift ~6% step-time (802 vs 753 ms) is the empirical floor until sealed CV is known. Single-seed \|X\| < ~6% → do not publish as win. 6–10%: sealed + 2 seeds preferred. >10% or ≥200 steps earlier: 1 seed OK for narrative + fingerprint. Old “<3%” rule was too tight (would call infra a win).

C. Torch audit (why indeea shows 2.13)

RunPathtorch recordedForensic note
F1 baseline (historical)notebooknot in configProvisional only — superseded by F1_seal
F1_seal (rpp)CLI stock 47682.13.0+cu130SEALED \(T\)=3.866 h · val@4736=3.3815 · final 3.3798
F2 / Wave-3notebook2.8.0+cu129Within-family comparisons only
F2b / Wave-4CLI modal_nocap2.13.0+cu130Same unpinned resolve day/family
indeea smoke / proxiesCLI same app2.13.0+cu130Not a cheat kit — same stack as F1_seal / F2b/W4; ordinal only
Going forwardall CLI profilestorch==2.13.0 pinAny pin change = new seal required

D. Claim classes (what is allowed to publish)

ClaimNeeds sealed env?Status after audit
Val ≤ 3.3821 hit/miss (quality)No (log fingerprint anyway)F2 miss · F2b hit SOUND
Wall-clock % vs historical F1YesF2b −2.9% RETRACTED (speed) — below ~6% infra floor
Within-app A/B (Wave-4 wd120 vs wd720)Same pin familySOUND within CLI 2.13
Wave-3 parallel ~1.6%Same notebook 2.8 familyWITHIN-FAMILY ONLY
indeea proxy rankingSame pin on indeeaORDINAL ONLY — not a board %
Published official speedupF1_seal DONE + claim still both on rainbowpuffpuffCLAIM NEXT

E. Seal procedure (mandatory before any speed claim)

  1. Code pin: TORCH_PIN = "torch==2.13.0" in modal_nocap.py + indeea_proxy.py (done; log full 2.13.0+cu130 string).
  2. Smoke on clock account rainbowpuffpuff → fingerprint torch + A100-40.
  3. F1_seal on rainbowpuffpuff: full 4768 stock F1 — DONE · cross @4736 · \(T\)=3.866 h · final 3.3798 · torch 2.13.0+cu130.
  4. Research proxies on indeea = ordinal ranking only.
  5. Claim final also on rainbowpuffpuff vs that F1_seal — no published cross-account cardinal %.
  6. If claim is 6–10%, prefer 2nd seed; if <~6% single-seed, do not publish as win.

F. Meta AI forensic review (2026-07-11)

External skeptical methods review (Meta AI browser skill). Thread e5e853d3-e8e8-4afa-91f3-e8f525078f98. We adopt the fixes; we do not adopt factual errors.

StandardVerdict
Competition-legal planAPPROVE — F1_seal, relative %, train_time, one GPU
Forensic / publish-grade after fixesAPPROVE-WITH-FIXES
Meta raw tone“REJECT as written” on pure forensic grounds — accepted as pressure; path is fixes, not stop
ADOPTED
What we changed

• Published % only on rainbowpuffpuff (F1_seal + claim)
• Noise floor ~6% single-seed (not 3%)
• Proxies = ordinal only; winner’s-curse awareness
• F2b −2.9% retracted for speed (quality hit stands)
• Same-team disclosure; publish failed proxies
• Muon needs attribution if shipped (Modded-NanoGPT adjacency)
• First-passage \(T\) is high-variance; single seed = case study

NOT ADOPTED
Meta errors / overreach

• “torch 2.13 does not exist” — false; we run 2.13.0+cu130 on Modal
• “~$2 / full run, 20 runs on $60” — false; F1 ≈ 3.8 h × ~$2.10 ≈ $8–10
• Mandatory 3× F1_seal before claim — budget-killing; one seal + optional method seed is plan
• Dual accounts are still good ops; they are not a free statistical lunch

Rules of conduct — forensic, not marketing

No silent torch upgrades between denominator and challenger.

No published cross-account cardinal % — claim final on clock; indeea is ordinal only.

No single-seed win claim if \|X\| < ~6% until sealed CV says otherwise.

No “indeea won because 2.13” narrative — same CLI stack as F2b/W4.

No claiming from sliding/EMA; official metric is disjoint val only.

Include compile warmup in \(T\); report steady step_avg separately.

Writeup: one team, two workspaces; archive negatives; attribute Muon if used.

Source of truth: private docs/ops/FAIR_CLOCK.md + smoke env_fingerprint.txt.

02

What the agent is (and is not)

We call it an “agent” because it is a goal-directed, multi-phase system with memory, tools, and a control loop — not because it chatters. Humans set kill gates and recipes; Modal executes the DAG; the volume is durable memory; the kit is the tool surface.

PERCEPTION
Metrics & artifacts

log.csv (train/val/sliding/EMA), config.json, triage_stats.json, billing probes, volume listings. Every keep/kill is trajectory-based, not a single snapshot.

MEMORY
Modal Volume nocap v2

Data shards, features, scores, triage bins, priors, run dirs, LAUNCH markers, runs_logs.zip. Survives container death. Concurrent-writer safe (v2).

ACTUATION
Kit + GPU/CPU functions

Train, score, triage, prior-build, summarize — each a Modal function with hard timeouts, scaledown windows, and idempotent skip rules.

CONTROL
orchestrate()

Remote driver: phase DAG, spawn/fan-out, join. modal run --detach decouples local client; panic stop is one CLI command.

POLICY
Pre-registered gates

Playbook ideas behind flags (defaults = stock). Negative results are first-class outputs. Time-scale hparams re-derived at proxy length.

NOT THIS
Not an LLM agent

No tool-calling LLM in the loop. Humans write gates and interpret curves. The “agent” is the experiment runtime + method, not a conversational planner.

03

Layered architecture

L5 · CLAIM
Submission surface
IDEA.md (method + negatives) · RESULTS.md (timing, configs, repro) · git bundle · email subject = measured speedup. Docs 01–04 + this architecture map are the narrative spine.
L4 · CONTROL
Modal app nocap-wave2
Phases: smoke → data → prep ∥ anchors → score → wave2 → report; plus wave25 / wave3 / scale / f1 / f2. Peak 5 GPUs (Starter plan). Orchestrator spawns arms; local entrypoint only fires-and-forgets.
L3 · TOOLS
kit/ — instrumented trainer + pipeline
train_gpt2_t4.py (all ideas as flags) · get_data · triage_features / score_docs / triage_select · build_unigram_prior · eval_sliding · summarize_runs · modal_nocap.py · RUNBOOK.md
L2 · MEMORY
Volume layout under /vol
data/ · features/ · scores/ · triage_{a,b,c,bord,full}/ · unigram_prior.pt / prior_full.pt · runs/<name>/{config,log,main,final,LAUNCH} · runs_logs.zip
L1 · COMPUTE
Serverless containers
Debian slim + PyTorch 3.12 image · A100-40GB (explicit; avoid silent 80GB upgrade) · bf16 + compile on finals · Colab T4 fp16 for Wave-1 proxies · CPU workers for triage/prior
L0 · VENUES
Three Modal accounts + free Colab
Acct1 acalincarol: scale + F2 curated stack · Acct2 stufflaters: F1 + Wave-4 · Acct3 deeferentleeg: Wave-3 + F2b · Colab A/B: Wave-1 at $0. Volumes do not share across profiles.
04

GitHub layout — rainbowpuffpuff/nocap

Private working repo until email submission (synced 2026-07-11, commit family 17b9e95+). Mirrors brain (docs + literature), body (kit), hands (notebooks + indeea scripts), and memory (results logs — no multi‑GB weights in git).

nocap/ # github.com/rainbowpuffpuff/nocap · PRIVATE ├── docs/ │ ├── 01-preflight-briefing.html │ ├── 02-idea-playbook.html │ ├── 03-wave1-retrospective.html │ ├── 04-campaign-report.html │ ├── 05-agent-architecture.html # this site map (Doc 05) │ ├── 06-sparse-delta-memory-for-nocap.md │ ├── 07-research-plan-indeea.md │ ├── academic_lit/ # 72 lit objects · BIB + tangential + CARDS │ │ ├── BIB.md · BIB_TANGENTIAL.md · SYNTHESIS.md │ │ ├── RELATED_WORK.md │ │ └── CARDS/ # B-Muon, B-Anytime, B-PriorFilter, … │ ├── ops/ # LESSONS, smoke writeup, scale-verify, modal ref │ └── papers/ # optional PDFs (e.g. SDM) ├── kit/ # trainer + pipeline + Modal orchestrator │ ├── train_gpt2_t4.py · get_data.py · triage_*.py · score_docs.py │ ├── build_unigram_prior.py · eval_sliding.py · summarize_runs.py │ ├── modal_nocap.py # DAG + preemption-safe guard │ └── RUNBOOK.md ├── notebooks/ │ ├── colab/ · modal/ · wave3/ · wave4/ │ ├── finals/ # F1 / F2 / F2b │ └── executed/ # F1 + F2 executed evidence ├── results/ # logs only (no *.pt / *.bin in git) │ ├── colab-accountA/ │ ├── modal-wave2/ · modal-wave3/ │ ├── f1_baseline/ # speedup denominator │ ├── finals/f2_record/ · f2b_record/ │ ├── wave4/ # w4_wd120 + w4_wd720 + SUMMARY │ └── volume_backup/ # MANIFEST + smoke markers · indeea ENV ├── tools/indeea_scripts/ # dry-run proxies · MODAL_PROFILE=indeea │ ├── RUN_ORDER.md · indeea_proxy.py · 00–20_*.sh ├── refs/ ├── README.md # live status board └── FUTURE.md # ranked leads post F2b + Wave-4

Not in git (local / Modal only): multi‑GB *.pt, FineWeb bins, score npz, Modal tokens. Restore via volume_backup / CLI get-put.

Companion machine workspace: software_i_built/modal/ — full archives, Cloudflare deploy source (cf-pages-nocap-agent/), live pulls (pull_wave4_*, nocap_archive/).

05

Kit modules — tool surface

Design contract of the trainer: with all new flags at defaults, semantics match the stock baseline (model, loss, schedule, timing protocol). Every experiment is opt-in.

ModuleRoleKey I/O
train_gpt2_t4.pyInstrumented GPT-2 trainer (d12 / d2 smoke). RoPE, RMSNorm, optional SwiGLU, Canon, parallel block, MTP, loss shaping, prior, EMA, z-loss, sliding val.bins → runs/<name>/
get_data.pyFetch FineWeb pre-tokenized chunks from HF into volume/local.data/*.bin
triage_features.pyStage-A doc features (len, unique, top, rep8, digit, punct).features/*.npz
score_docs.pyStage-B: per-doc mean CE under a trained ckpt; per-shard skip = resumable.ckpt + bins → scores/*.npz
triage_select.pyJunk rules + optional score band + 10% random rescue + optional curriculum order.triage_*/fineweb_triage_*.bin
build_unigram_prior.pyCorpus unigram log-prior for fixed logit bias.unigram_prior.pt / prior_full.pt
eval_sliding.pyBoundary-aware sliding-window val (report alongside official disjoint).ckpt → Δ vs disjoint
summarize_runs.pyTable over all run dirs; report zips logs without final.pt.→ console + zip
modal_nocap.pyFull experiment DAG as Modal App; phases idempotent; detach-safe orchestrator.volume as bus

Trainer flag groups (opt-in ideas)

SHIPPED IN STACK
Prior · EMA · warmdown · data path

--logit_prior · --ema_beta · --ema_start_frac · --warmdown_iters · --input_bin (triage_*) · --val_stride · --precision bf16 · --compile 1

INSTRUMENTED / KILLED OR PARKED
Architecture & loss experiments

--mtp_* · --loss_shape / --ls_* · --mlp swiglu · --canon · --parallel_block · --zloss

06

Data pipeline architecture

FineWeb10B pre-tokenized GPT-2 BPE: up to 50×100M tokens. Competition budget cap 5B; baseline consumes 2.5B. Our F2 path uses a curated subset scored and banded from 28 chunks.

Two-stage triage (idea #4) + prior (idea #3)
Stage-A is cheap heuristics · Stage-B is model-scored perplexity band · Prior is zero-cost logit bias
FETCH
FineWeb bins
get_data · HF chunks
STAGE A
Features
triage_features
SCORER
m0_anchor ckpt
800-step reference
STAGE B
score_docs
per-doc mean CE
↓ band pct 10–80 · junk rules · 10% random rescue
SELECT
triage_full
~1.92B kept tokens · 20 shards
PRIOR
prior_full.pt
CE 7.67 nats vs ln V 10.82
TRAIN
F2 record
stack recipe · 4768 steps
Artifact (scale verify, 2026-07-09)Value
docs_total / docs_kept4,045,481 → 2,927,881
tokens_total / tokens_kept2.796B → 1.922B (kept_frac ≈ 0.687)
Score band (mean-loss)[4.1887, 5.1831] = pct 10–80 of 4,045,472 docs
scores/*.npz28 shards (expect 28)
triage_full bins20 shards · ≈3.58 GiB
prior_full.pt~198 KiB · unigram CE 7.6690 nats
Dominant rule_hitscore_band 1,213,639 · unique 33,465 · len 9,532
Why curation is on-clock-legal prep

Scoring is offline like the baseline’s own pre-tokenization cost narrative: GPU prep is honest and disclosed in IDEA.md. Training then sees a higher-signal stream (~1.22 epochs of 1.92B curated tokens cycled toward ~2.5B consumed). Proxy isolation: w2_databand alone was −0.051 nats @400 vs raw stream.

07

Modal orchestrator — control loop

App name: nocap-wave2. Image: debian slim + torch==2.13.0 (pinned) + numpy/huggingface_hub/tiktoken. Volume: nocap version=2. GPU string: A100-40GB (never bare A100). Fingerprint on every smoke.

Phase DAG — --phase all
data → [prep CPU ∥ 4 anchor GPUs] → score → [2 wave2 GPUs] → report · peak ≤ 5 GPUs
DATA
fetch_data
chunks=3 (proxy) / 28 (scale)
↓ parallel fan-out
PREP
prior + features + triage_a
CPU 8 / 16GB
m0
m0_anchor
stock · scorer ckpt
m1
m1_ema
β=0.99 · short WD
A
w2_mtp
killed
B
w2_shape
killed
↓ uses m0 final.pt
SCORE
score_stage_b
scores + triage_b band 10–80
↓ parallel
DATA ARM
w2_databand
400 steps · triage_b
STACK
w2_stack
prior+EMA+curated · 800
REPORT
summarize + zip logs
runs_logs.zip on volume

Phase catalog

smoke
Lifecycle proof
One A100 ~60–90s: bf16, synthetic shards, 10 trainer steps, volume marker, auto-shutdown. Validates billing lifecycle before real spend (~$0.01–0.04).
data
Fetch FineWeb
CPU function; commits bins to volume.
prep
Prior + stage-A
Idempotent if prior/features/triage_a already exist.
anchors
4-way GPU race
m0 / m1 / mtp / shape in parallel via spawn().
score
Stage-B band
score_docs + triage_select → triage_b.
wave2
Data isolation + stack
w2_databand ∥ w2_stack.
wave25
Data variants
Harder band / curriculum / stack seed 2029 (optional; skipped in rev 2 plan).
wave3
Architecture race
swiglu ∥ canon ∥ parallel_block vs m0 curve.
scale
Full corpus prep for F2
fetch N · score_all · finalize_data(band, order) → prior_full + triage_full.
f1 / f2
Finals via train_long
4768 steps, timeout 8h. F1 stock (zloss 0). F2 stack on triage_full + prior_full + EMA 0.999 + warmdown 256.

Invocation shape

# local entrypoint only spawns the remote orchestrator — safe to close the terminal
modal run --detach kit/modal_nocap.py --phase all
modal run --detach kit/modal_nocap.py --phase scale --chunks 28 --band 0.10,0.80
modal run --detach kit/modal_nocap.py --phase f2

# panic / observe
modal app stop nocap-wave2
modal app list
modal volume get nocap runs_logs.zip ./runs_logs_modal.zip
08

Confirmed recipe brain

Every component proxy-validated at matched steps / hardware. Stack additivity ~70–100% at proxy scale.

LeverMechanismProxy effectStatus
Perplexity-band curationKeep docs in mean-loss pct 10–80 + junk rules + 10% anti-drift rescue−0.051 @400SHIP
Unigram logit priorFixed corpus log-bias on logits; start ~7.7 not 10.8−0.047 @400SHIP
Shortened warmdownEarly LR decay wasteful while still underfit−0.013 @800SHIP
Sliding-window evalBoundary-aware val; reported with official disjointΔ 0.019@800 → 0.060 full (F1)SHIP (dual-report)
EMA weightsβ scaled to horizon; dual-eval at endlag artifact at proxyMAINTAIN free
Stack (data+prior+WD)Composition for F2−0.056 raw / −0.074 w/ eval @800F2 RECIPE

Killed with evidence (submission material)

KILL
MTP module

+11% step time and worse loss @800. Consistent with small-model NLL cautions. Configs + curves archived.

KILL
Token-loss shaping

~0 cost, never ahead (+0.007 @800). Val includes every token — down-weighting is a mid-run tax.

KILL (FINALS)
SwiGLU

Big early lead evaporates by step 800; ends ≈ baseline (4.78).

PARK
Canon layers

−0.078 nats (largest training-side effect) but +30% step time naive → net loss. #1 FUTURE lead if fused ≤2% tax.

BANK
Parallel block

~1.6% faster, loss-neutral-or-better (−0.005). Out of F2 for composition risk only.

TRAP
Model resizing

Baseline sits at exactly 20 tok/param (Chinchilla isoline). Resizing unstable sign, ≤2%.

09

Method — how the agent decides

  • Pre-registered kill gates before each arm (RUNBOOK + playbook).
  • Matched steps on identical GPU type when step times equal; matched wall-clock when they don’t.
  • Paired within-run measurements where possible (immune to run noise).
  • Re-derive every time-scale hyperparameter at proxy length (EMA-β lesson: 0.999 full-run ≠ 0.99 proxy).
  • Gates on trajectories, not snapshots (sliding Δ grows through training).
  • Negatives as first-class outputs — README invites them; we archive configs + CSVs.
  • Effects < 0.01 CE need two seeds before keep/kill.
  • Pin environmenttorch==2.13.0 seal; historical drift 802 vs 753 ms/step (~6%). See fair-clock protocol.
  • Compile + GPU warm on clock — \(T\) includes compile first-iter; no secret warmup; steady step_avg after \(N_{warm}=200\).
  • Fingerprint every run — torch, CUDA, GPU name, pin, compile, seed, batch×accum×seq → env_fingerprint.txt.
  • Noise floor ~6% — measured stack drift; single-seed \|X\| < ~6% is not a published win (Meta review 2026-07-11).
  • Proxies ordinal only — 800-step ranks methods; published % = full-horizon \(T\) on clock account.
  • Claim on clock — F1_seal + final both on rainbowpuffpuff; no cross-account cardinal %.
PROXY SCALE
Standard A100 proxy config

model d12 · batch 8 · grad_accum 16 · seq 1024 → 131,072 tok/step (¼ of full 524,288) · LR 4.5e-4 · warmup 128 · warmdown 160 (or 40 with EMA) · val every 100 · bf16 · compile 1 · zloss 1e-4 (F1 drops zloss).

Full finals: 4768 steps · batch 16 · accum 32 · LR 0.0018 · warmup 256 · warmdown 1024 stock / 256 stack · val every 128.

10

Cost safety, idempotency, serverless semantics

AUTO-SHUTOFF
Containers die with the call

Serverless: no long-lived GPU. timeouts 1h (train) / 8h (finals). scaledown_window=10s. Worst hung arm ~$2.10; absolute multi-hang cap ~$15.

IDEMPOTENT SKIP
final.pt / scores exist → skip

Safe re-run of any phase. score_docs skips per-shard .npz. prep skips prior/features/triage if present.

DUPLICATE GUARD
At-least-once spawn

LAUNCH + log.csv freshness <15 min → fail loud instead of racing twin trainers (learned after a silent double score ~$2 tax).

Operational lessons paid for in blood

Volume v1 vs v2: scripts request version=2; creating with default v1 breaks concurrent writers — recreate with --version=2 (or omit version pin when profiles already differ).

Cloudflare 403 on kit download: default Python-urllib UA blocked inside Modal; send curl UA from ensure_kit().

Image build free, cold start billed: smoke in-container 14s ≈ $0.008 GPU; actual bill ~$0.009 with pull.

Preemption + duplicate guard (Wave-4, 2026-07-10): Modal preempted w4_wd120 ~step 1589; restart saw fresh log.csv (<15 min) and raised RuntimeError: another instance appears live — orchestrator died, w4_wd720 never started. Guard is correct for true doubles; needs a preemption-aware path (resume / ignore LAUNCH after worker preemption).

Cross-account data: volumes never share. F2b on acct3 required CLI volume get/put of triage_full/ + prior_full.pt (+ scores/features insurance) from acct1 — pure transfer, no GPU.

11

Live state — 2026-07-11

MilestoneResultStatus
Wave-1 (Colab T4)fp16 parity, prior, sliding Δ growth, warmdown waste foundDONE
Smoke (Modal)A100 lifecycle on profiles incl. indeea · ~$0.01 each; rainbowpuffpuff profile ready (not smoked yet)DONE / READY
Wave-2 (Modal)m0 4.7788 · stack 4.7232 · databand −0.051 · MTP/shape killDONE
Wave-3 (Modal, acct 3)Canon −0.078 but +30% time · parallel banked · SwiGLU killDONE
Scale (acct 1)28 scores · prior_full · triage_full 1.92B tokens · band [4.19, 5.18]DONE
F1 (acct 2)Crosses 3.3821 @ step 4736 = 229.1 min · final 3.3795 · step_avg 2903 msDONE
F2 record (acct 1)Final 3.4050 (never crossed 3.3821) · 235.0 min · step_avg 2957 ms · WD 256 too shortMISS
F2b recovery (acct 3)Stack + WD 1024 · final 3.377309 · first cross @4736 = 235.6 min · step0 val 7.88 · ~3.95 hHIT TARGET
Official speedup (retracted)(13746s − 14139s) / 13746s = −2.9% · same step · torch confound + \|X\| < ~6% infra floor — retracted as speed evidence; quality hit still stands. Meta review 2026-07-11.RETRACTED (SPEED)
Meta forensic reviewDual-account idea OK; cross-account cardinal % weak; noise floor → ~6%; proxies ordinal; APPROVE-WITH-FIXES · see §01b·FADOPTED FIXES
Wave-4 diagnostic (acct 2)COMPLETE · app stopped · w4_wd120 final val 3.982 · w4_wd720 final val 3.993 · both ~34 min · step_avg ~845–850 ms · pull_wave4_20260711/DONE
rainbowpuffpuff (clock)Role = F1_seal + published claim only · A100-40 + torch==2.13.0 · volume nocap · seal complete · claim nextREADY FOR CLAIM
indeea / indeeaindi (R&D)Full board + ablations ALL DONE · best muon_par800 4.218 · muon 4.236 · seed42 4.235 · par1600@1600 3.941 · claim: Muon+parallelDONE
rainbowpuffpuff F1_sealCOMPLETE · 4768/4768 · final.pt · first cross @step 4736 val 3.381538 · \(T\)=13,918,668 ms = 232.0 min = 3.866 h · final val 3.379813 · step_avg ~2939 ms · torch 2.13.0+cu130 · app ap-bWq1… stoppedSEALED
Literature program72 objects (36 core + 36 tangential) · experiment cards · gap analysis G1–G15ARCHIVED
F1_seal result — sealed denominator (2026-07-11)

Stock AdamW · raw FineWeb · zloss 0 · no prior/EMA · WD 1024 · A100-40 · torch 2.13.0+cu130 · seed 1337 · app ap-bWq1… stopped · final.pt on volume.

First cross ≤ 3.3821: step 4736 · val 3.381538 · \(T_{F1\_seal}\)=13,918,667.5 ms = 231.978 min = 3.866 h · step_avg 2938.91 ms.

Final: val 3.379813 @4768 · train_time 14,011,911 ms (3.892 h) · step_avg 2938.74 ms.

Same cross step as historical F1 (4736); seal wall is ~1.3% slower (232 vs 229 min) under pinned torch — use seal \(T\) only for published %. Logs: results/f1_seal/.

F2b result (honest)

Recipe: triage_full + prior_full + EMA β=0.999 + warmdown 1024. Hit val target (3.377 ≤ 3.3821). Wall −2.9% vs historical F1 is retracted as speed evidence (stack confound + below ~6% infra noise floor). Quality hit stands. Official speed number only vs F1_seal \(T\)=3.866 h on rainbowpuffpuff.

Wave-4 result (anneal diagnostic @ 2400 steps, raw FineWeb)

wd120 final 3.982 beats wd720 final 3.993 by ~0.01 CE. Curves nearly identical early; wd720 was briefly better at steps 1800–2100 (−0.04 at 2100), then short anneal wins the endpoint. Effect size is small — anneal length is not a free +5% lever at this proxy. Does not overturn F2 (WD256 @ full 4768 miss): full-horizon short anneal still failed; proxy 2400 ≠ finals.

App ap-LuwPnb6EpePg92rZ6zEMk4 stopped. Logs: pull_wave4_20260711/.

What we run next (and why)

1. Stay on A100-40 through end of campaign (no GPU-class switch; VRAM underuse accepted).

2. Win plan approved — executing. Full roadmap: §13b.

3. Phase A (rpp): F1_seal SEALED — \(T_{F1\_seal}\)=3.866 h @4736. Phase B: indeea all finished — best muon+par 4.218. Next: full claim Muon+parallel on rpp.

4. No official speedup claim until \(T_{cross} < T_{F1\_seal}\) (= 3.866 h) on rpp with |X| ≥ ~6% (or 2 seeds).

12

Literature & hypotheses (why these races)

Closed-loop agent + 72 literature objects in academic_lit/ (core BIB.md + tangential BIB_TANGENTIAL.md). Time-to-target decomposes as:

T_cross ≈ N_steps(data, opt, schedule, arch) × t_step(arch, systems) + T_fixed(compile, val)

What the 2026-focused literature implies

ClusterKey papersHypothesis we test
O · OptimizersMuon scalable (2502.16982) · Newton–Muon (2604.01472) −6% steps / −4% wall on GPT-2 speedrun class · SOAP (2409.11321)B-Muon: matrix-aware updates cut N_stepspromoted on indeea (−0.50 CE @800). Full dossier: §13c
S · SchedulesAnytime pretraining (2602.03702) · ScheduleFree+ (2605.19095) · EMA weights (2411.18704) · Wave-4: wd120 3.982 vs wd720 3.993 @2400B-Anytime: F2 short-WD miss = full-horizon issue; at proxy 2400, short vs long anneal Δ≈0.01 — prefer mild WD + averaging, not extreme short-only bets
D · DataPrior-filter (2509.18577) · ADAPT online reweight (2605.05227) · proxy reliability (2512.24503) · FineWeb-EduB-PriorFilter / B-Mix / B-Curriculum: static PPL band hit quality not steps; try prior-only filter, mixes, order
A · Arch / auxTOP (2508.19228) · Future summaries (2510.14751) · Parallel tracks (2602.07306)MTP killed; parallel banked (~1.6%); aux2.0 only with strict step-tax gate
T · Tangential gapsµP transfer · packing · mixing laws · FP8 · critical batch · softcapG1–G15 fills: free t_step / better proxies / 5B budget use
Core empirical prior (ours)

Keep: band curation, unigram prior, dual val, parallel, kill-gate discipline.
Kill: MTP, loss shaping, SwiGLU-at-finals, naive Canon, short-WD-only final, EMA-as-early-cross claim.
Park: fused Canon until step tax ≤3%.

Ranked experiments (indeea) — literature-backed

#BetWhy nowScriptEst. $
0Val data seedNeed fineweb_val for official metric01_seed_val_data.sh~0
1AdamW control @800 curatedDenominator for all proxies on torch 2.1310_proxy_control.sh~1–1.5
2Parallel on/offW3 bank; free t_step (A4 lit)15_proxy_parallel.sh~2–3
3Schedule WD sweepAnytime lit + Wave-4 anneal data12_proxy_schedule.sh~2–4
4Muon (after kit port)Newton-Muon on GPT-2 class11_proxy_muon.sh~1–2
5Prior-filter / curriculum / mixD3 / D7 / mixing laws13, 14 + cards~2–5

Full cards: academic_lit/CARDS/ · synthesis: academic_lit/SYNTHESIS.md · related work draft: RELATED_WORK.md

13

Dual accounts — clock vs research

Two active ~$30 Modal workspaces split by forensic role, not by GPU class. Both stay on A100-40GB + pin torch==2.13.0 until campaign end (VRAM ~10/40 GiB underused; we accept that for a stable clock).

CLOCK · CLAIM
rainbowpuffpuff

Workspace rainbowpuffpuff. Clean denominator and official finals only. No proxy clutter on this volume.

Run here: volume create → smoke + fingerprint → raw FineWeb + val → F1_seal (stock 4768) → claim final on this same account when indeea nominates → 2nd seed if claim is 6–10%; never publish single-seed <~6% as win.

Do not run here: Muon/schedule A/B spam, half-finished proxies, Wave-4-style anneal sweeps.

Budget sketch (~$30): F1_seal ~$9–10 · claim final ~$9–10 · buffer/seed ~$10.

RESEARCH · PROXIES
indeea → workspace indeeaindi

Isolated from Wave-4 / F2b. Curated seed already on volume. All risky method search lands here.

Run here: val seed → AdamW control @800 → parallel on/off → mild WD only → Muon when kit ready → at most one data-order bet. Rank vs control, not vs historical F1.

Do not run here: published % vs F1; second full F1_seal (that’s rainbowpuffpuff’s job).

Budget sketch (~$30): proxies ~$12–18 · reserve ~$10–15 for a compose final or hand recipe to rainbowpuffpuff.

What runs where (checklist)

WorkAccountEst. $Status
Re-smoke + env_fingerprint.txt (pin 2.13)rainbowpuffpuff~0.01DONE
Raw FineWeb + val for stock F1rainbowpuffpuff~0–1DONE
F1_seal stock 4768 (sole speed denominator)rainbowpuffpuff~8–10DONE · \(T\)=3.866 h
Full claim final (Muon+par+stack)rainbowpuffpuff~9–10NEXT
Val shard + readinessindeea~0DONE
Proxy control · ix_controlindeea~0.4DONE · 4.731
Parallel on · ix_parallel_onindeea~0.4DONE · 4.585 · BANK
Muon · ix_muonindeea~0.4DONE · 4.236 · PROMOTE
Compose / schedule / prior_bandindeea~2DONE compose≈par · sched park · prior 4.768 kill
Full compose / claim @4768rainbowpuffpuff~8–10ONLY IF PROXY WINS

Retired / archive accounts (do not burn for new science)

ProfilePast roleNow
acalincarolScale · F2 recordArchive / data source
stufflatersF1 historical · Wave-4Done — no more anneal GPU
deeferentleegWave-3 · F2bArchive (quality hit, provisional wall)

rainbowpuffpuff — clock commands (when approved)

# profile is local name = workspace rainbowpuffpuff
MODAL_PROFILE=rainbowpuffpuff modal volume create nocap --version=2
MODAL_PROFILE=rainbowpuffpuff modal run modal_nocap.py --phase smoke
# confirm /vol/env_fingerprint.txt → torch 2.13.0 + A100-40

MODAL_PROFILE=rainbowpuffpuff modal run modal_nocap.py --phase data --chunks 28
MODAL_PROFILE=rainbowpuffpuff modal run --detach modal_nocap.py --phase f1
# → runs/f1_baseline (or f1_seal name) = sole T denominator

indeea — research commands (when approved)

ItemStatus
Volume nocap v2CREATED
Curated seed (triage_full 20 · scores 28 · features 28 · prior)SEEDED
Smoke A100-SXM4-40GB · torch 2.13.0+cu130OK
Readiness f2b_okTRUE (raw train optional)
Scripts indeea_scripts/*.sh + indeea_proxy.pyDRY-RUN READY
# always dry-run first; --execute only when approved
cd software_i_built/modal/indeea_scripts
./00_check.sh
./01_seed_val_data.sh --execute
./10_proxy_control.sh --execute
./15_proxy_parallel.sh --execute
# mild schedule only — not extreme short-WD finals
ARM=wd160 ./12_proxy_schedule.sh --execute

MODAL_PROFILE=indeea modal run indeea_proxy.py --arm control --iters 800 --input curated
Split rules (forensic · post–Meta review)

Published speedup: both \(T_{F1\_seal}\) and \(T_M\) on rainbowpuffpuff only (same pin, A100-40, compile warm in \(T\)). No cross-account cardinal %.

indeea ranks methods vs its own proxy control — ordinal only; a “win” is a nomination, never a board %.

Same team: writeup discloses two workspaces, one methodology (not two independent competitors).

Noise: single-seed \|X\| < ~6% is not a publishable win until sealed CV known.

indeea torch 2.13 = same CLI stack as F2b — not a cheat kit. Protocol: §01b · docs/ops/FAIR_CLOCK.md.

Legacy anchor #indeea redirects conceptually to §13 Dual accounts.

13b

Win plan — best Modal path (approved · executing)

Goal: disjoint val ≤ 3.3821 with \(T < T_{F1\_seal}\) by a margin that survives ~6% noise, A100-40 + torch==2.13, claim on rainbowpuffpuff, story that is not “paste Modded-NanoGPT.” F2b proved quality stack alone does not win the clock — we need \(N^*\) and/or \(t_{step}\) levers under fair-clock rules.

Status 2026-07-11 night — F1_seal SEALED · indeea done · claim ready

Phase A (clock) COMPLETE: F1_seal on rpp · app ap-bWq1ZYnXFOfFe98SbgxhRs stopped · final.pt · first cross @step 4736 val 3.381538 · \(T_{F1\_seal}\)=13,918,668 ms = 232.0 min = 3.866 h · final 3.379813 · step_avg ~2939 ms · torch 2.13.0+cu130 · A100-40. Preempt attempt archived separately (not the seal).

Phase B (indeea) ALL FINISHED. Best @800: muon_par 4.218 · muon 4.236 · seed-robust. Phase D next: full claim Muon + parallel + curated/prior on rpp vs sealed \(T\).

Private doc: docs/ops/WIN_PLAN.md · fair clock: §01b.

Tier 0 — clock (mandatory)

#WorkAccountEst. $Status
0aVolume + smoke + fingerprintrainbowpuffpuff~0.01DONE
0bRaw FineWeb + val (data --chunks 28)rainbowpuffpuff~0–1DONE
0cF1_seal stock 4768rainbowpuffpuff~8–10DONE · \(T\)=3.866 h @4736
B*indeea full board + Muon ablationsindeea~$6–8ALL DONE

Tier 1 — highest EV for a real win (implement then run)

RankBetCode?Why it can winWhere
1Muon / Newton-Muon + AdamW embed/headKit port requiredOnly big untried \(N^*\) lever; GPT-2-class litindeea proxy → rpp claim
2Compose: F2b stack + parallel (+ Muon if #1)Parallel flags existFree \(t_{step}\) + known quality hitrpp claim
3Horizon-free / anytime + registered averagingSchedule codeExplains F2/F2b; earlier first-crossindeea → rpp
4Prior-filter or raw/curated mixLight CPU + proxyOriginal data story; may cut \(N^*\)indeea → rpp
5Prior anneal (strong early → 0)Small flagUses existing prior assetindeea → rpp

Tier 2 — ordinal screens (indeea)

#ActionAccountEst. $Status
1muon_par800indeea4.218BEST
2muon / seed42 / lr01indeea4.23–4.24seed-robust · lr0.01≈0.02
3muon_noprior / rawindeea~4.26prior+curated help a little
4parallel / composeindeea4.58BANK systems
5controlindeea4.731denom
muon_par1600indeea3.941@1600longer horizon OK
lr05 / prior / schedindeea4.41–4.81kill/park
indeea ablations COMPLETE (2026-07-11)

Best @800: muon+parallel 4.218 · muon alone 4.236 · seed42 4.235 (not a fluke) · lr 0.05 hurts (4.409).

@1600: muon+parallel 3.941 — keeps falling (proxy→full transfer hopeful).

Claim recipe: Muon (lr≈0.02) + parallel + curated + prior on rpp vs F1_seal. Attribute Keller Muon.

Kill schedule/data fast if Δ < 0.01 CE; put remaining $ into Muon + one full claim. Proxies never publish board %.

Phased execution

# PHASE A — CLOCK (rpp)  ~$10
MODAL_PROFILE=rainbowpuffpuff modal volume create nocap --version=2
MODAL_PROFILE=rainbowpuffpuff modal run modal_nocap.py --phase smoke
MODAL_PROFILE=rainbowpuffpuff modal run modal_nocap.py --phase data --chunks 28
MODAL_PROFILE=rainbowpuffpuff modal run --detach modal_nocap.py --phase f1

# PHASE B — SCREEN (indeea) while coding Muon  ~$8–12
cd indeea_scripts
./00_check.sh
./01_seed_val_data.sh --execute
./10_proxy_control.sh --execute
./15_proxy_parallel.sh --execute
# + implement Muon in train_gpt2_t4.py

# PHASE C — MUON DECISION (indeea)  ~$3–5 after kit
./11_proxy_muon.sh --execute   # unblocked only after port

# PHASE D — CLAIM (rpp)  ~$9–18
# if Muon promotes: Muon + parallel + stack
# else: parallel + stack + best data/schedule nominee
# if |X| in 6–10%: 2nd seed; if <~6%: do not publish as win

Skip (do not burn credits)

Win path in one line

Seal clock → implement Muon → proxy on indeea → if promote, full claim = Muon + parallel + proven stack on rpp vs F1_seal. Fallback if Muon fails: anytime + prior-filter/mix + parallel compose.

Deep dive: §13c Muon (theory · kit · full indeea board · claim recipe · attribution).

13c

Muon — theory, kit, indeea board, claim

This is the campaign’s main optimizer bet. After data+prior+EMA+long warmdown (F2b) hit quality but not earlier first-cross, we needed a lever that cuts steps-to-target \(N^*\), not just step time. Muon is that lever at proxy scale. Full claim still waits on sealed \(T_{F1}\) on rainbowpuffpuff.

One-sentence result (indeea, ordinal only)

Hybrid Muon on 2D hidden weights + AdamW on embed/head reaches val@800 ≈ 4.23–4.24 vs AdamW control 4.731 (≈ −0.50 CE), is seed-stable, prefers lr ≈ 0.01–0.02, stacks slightly with parallel (4.218), and at 1600 steps still falls to 3.941. Not a board % — nomination for a full 4768 claim.

What Muon is

ALGORITHM
Orthogonalized momentum on matrices

Muon treats each 2D weight matrix as a matrix, not a bag of scalars. It runs Nesterov-style momentum on the gradient, then approximates a polar / zero-power map via Newton–Schulz iteration so the update is closer to an orthogonal direction in spectral geometry. Scale factor \(\sqrt{\max(1,\,m/n)}\) restores a sensible magnitude after NS.

WHY NOT ADAMW-ONLY
Coordinate-wise optimizers ignore matrix structure

AdamW is excellent and remains our embed / lm_head / 1D path. Hidden Linear weights are low-rank-ish operators; matrix-aware updates often reduce the number of steps to a CE target on GPT-2-class runs — exactly the \(N^*\) gap F2b left open.

HYBRID
2D → Muon · rest → AdamW

Standard practice from Keller Jordan / community Muon: do not Muon the embedding or lm_head; keep AdamW there with its own LR group.

SPECTRAL LR
Typical scale ~0.02

Muon LRs are not AdamW LRs. Our board: 0.01 ≈ 0.02; 0.05 hurts (4.409). Default claim: --muon_lr 0.02.

NS STEPS
Newton–Schulz ×5

Kit uses the standard 5-step NS coeffs (3.4445, −4.7750, 2.0315) in bf16, same family as public Muon implementations.

Why Muon for NoCap (campaign logic)

Fact from earlier wavesImplication
F2 miss: short WD @ full horizon never crossed 3.3821Anneal length is fragile; not our primary \(N^*\) bet
F2b hit quality (3.377) but first-cross @ same step 4736 as F1Data+prior+EMA+long WD ≠ earlier passage time
Wave-4 @2400: WD120 vs WD720 Δ≈0.01 CEAnneal is a small dial at proxy — park as main strategy
Parallel ~1.6% faster step @ historical proxyBank \(t_{step}\); cannot alone open a ≥6% win
Literature O1/O2: Muon / Newton-Muon cut steps on GPT-2 speedrun classHighest-EV untried lever → kit port → indeea board

Pre-registered card: private docs/academic_lit/CARDS/B-Muon.md — promote if proxy dominates AdamW early; claim only with sealed fair-clock \(T\).

Literature we cite (not a paste of Modded-NanoGPT)

IDPaper / noteWhat we takeWhat we do not take
O1 2502.16982 · Muon is Scalable for LLM Training Matrix Muon on hidden weights; hybrid with AdamW; scale facts Whole speedrun repo as submission body
O2 2604.01472 · Newton–Muon Second-order motivation; reported −6% steps / −4% wall on GPT-2-class Unverified port before hybrid Muon ships
O3 2602.21545 · Better Muon + norm Optional later refinement if hybrid plateaus Extra knobs on first claim
Blog Keller Jordan · kellerjordan.github.io/posts/muon/ Algorithm clarity, NS intuition, hybrid grouping Claiming their wall-clock as ours
Honesty / attribution

Competition writeup must attribute Muon (Keller Jordan et al.) and note Modded-NanoGPT adjacency if we ship this optimizer. We motivate via our F2b failure mode + sealed ablations — not “we downloaded a leaderboard script.” Meta forensic review: same rule (adopted).

Kit implementation (what we actually run)

FILES
kit/muon_opt.py

Embedded single-device hybrid (no extra pip): zeropower_via_newtonschulz5, muon_update, SingleDeviceMuonWithAuxAdam, build_muon_adam_optimizer. Shipped via volume kit_override/ so Modal picks it up without republishing the whole tarball.

TRAINER HOOKS
train_gpt2_t4.py

--optimizer {adamw,muon} · --muon_lr (default: follow --learning_rate; proxies often 0.02). LR schedule scales each param-group relative to its base (spectral vs AdamW). GradScaler path stays AdamW-safe; Muon path is bf16-friendly.

Param groupOptimizerTypical defaults in kit
Hidden 2D weights (use_muon=True)Muonlr 0.02 · momentum 0.95 · NS 5 · WD 0
embed / lm_head / 1D biases normsAdamWlr ~3e-4 class · β=(0.9, 0.95) · eps 1e-10
# indeea proxy shape (ordinal)
MODAL_PROFILE=indeea ./11_proxy_muon.sh --execute
# or direct flags once kit override is live:
# --optimizer muon --muon_lr 0.02 --iters 800 --input curated (+ prior)

# claim shape (after F1_seal) on rainbowpuffpuff only
# Muon + parallel + curated + prior · full 4768 · report train_time to first disjoint ≤3.3821

indeea protocol (how the board was run)

Full ordinal board (2026-07-11) — COMPLETE

RankRunVal@800step_avgCall
1ix_muon_par8004.218937BEST COMPOSE
2ix_muon4.236902PROMOTE strong alone
3ix_muon_seed424.235906SEED-ROBUST ≈ seed 1337
4ix_muon_lr014.231947lr 0.01 ≈ 0.02
5ix_muon_noprior4.256944prior helps ~0.02
6ix_muon_raw4.258972curated helps ~0.02
7ix_parallel_on4.585866BANK systems
8ix_compose8004.583875≈ parallel
9ix_control4.731878AdamW denom
10ix_sched_wd1604.734929PARK
11ix_prior_band4.768925KILL
12ix_sched_wd4004.814881PARK
ix_muon_lr054.409902LR TOO HIGH
Longer horizonVal@1600step_avgNotes
ix_muon_par16003.941835Still falling · claim-shaped · not a seal

What the board taught us

PROMOTE
Muon is the real lever

~0.50 CE vs control at 800 steps — larger than parallel, schedule, or data ablations combined. Seed 1337 vs 42 is a coin flip (4.236 vs 4.235). lr 0.01–0.02 is flat; do not “turn it up.”

COMPOSE
Parallel is additive, small

muon+par 4.218 vs muon 4.236 (~0.02 CE). Parallel alone 4.585 is a systems bank (often better step_avg on non-Muon arms). Ship both on claim.

DATA
Prior + curated help a little

Drop prior → 4.256; raw → 4.258. Keep F2b-style curated+prior for continuity and ~0.02 CE — they do not replace Muon.

KILL / PARK
Stop burning budget here

prior_band kill (4.768). Schedule WD160/400 park. Muon lr 0.05 kill. Another short-WD final is still low EV after F2/W4.

Claim recipe (nominated — not yet sealed)

Optimizer: hybrid Muon · --muon_lr 0.02 (or 0.01).

Systems: parallel block on (banked \(t_{step}\)).

Data / head-start: triage curated FineWeb + unigram prior (F2b lineage).

Where: full 4768 on rainbowpuffpuff only, after F1_seal lands.

Metric: \(T = \) train_time_ms at first disjoint val ≤ 3.3821. Speedup = \((T_{F1\_seal}-T_M)/T_{F1\_seal}\).

Publish bar: single-seed \|X\| ≥ ~6% (infra noise floor), else 2nd seed or no win claim. Fingerprint torch + GPU on both runs.

Fair-clock constraints (Muon-specific)

RuleWhy
indeea board = ordinal onlyDifferent workspace; proxies rank methods, they do not print board %
Both \(T_{F1\_seal}\) and \(T_M\) on rainbowpuffpuffNo cross-account cardinal speedup
Same torch==2.13.0 pin + A100-40Otherwise stack confound (see F2b −2.9% retraction)
Disjoint val only for first-crossSliding/EMA are diagnostic, not claim metrics
Attribute Muon in writeupForensic / scientific honesty; Modded-NanoGPT adjacency
Proxy→full transfer unproven until claim finishes3.941@1600 is hopeful, not a seal

Status vs next action

StepStatusNotes
Card B-Muon + lit mapDONEdocs/academic_lit/CARDS/B-Muon.md
Kit port + volume overrideDONEmuon_opt.py · --optimizer muon
indeea full board + ablationsDONEBest compose 4.218 · logs under results/indeea/
F1_seal on rppSEALED\(T\)=3.866 h @4736 · final 3.3798 · results/f1_seal/
Full claim 4768 on rppNEXTMuon + parallel + curated/prior · beat 3.866 h by ≥~6%
Newton-Muon / Better-Muon refinementsLATEROnly if hybrid claim is close but short of ~6%
Bottom line

Muon is no longer a literature wishlist item — it is a proxy-validated promote with seed and LR ablations, a clear kill list around it, and a single claim recipe. F1_seal is done (\(T\)=3.866 h). Remaining risk is proxy→full transfer and fair-clock variance on the claim run — not “does Muon beat AdamW at 800 steps?”

14

Future architecture (post-finals leads)

After F2b (−2.9% wall), Wave-4 anneal data, and the indeea Muon board: prioritize shipping the Muon claim under fair-clock, then horizon-free schedules if still short — not another short-WD final.

#LeadWhy it matters
1Muon / Newton-MuonPromoted on indeea (−0.50 CE @800 vs control). Next: full claim vs F1_seal. See §13c.
2Anytime / ScheduleFree + averagingFixes horizon mismatch that killed F2 WD256.
3Parallel attn+FFN (+ fuse)Already ~1.6% faster @proxy; free basis points.
4Fused Canon−0.078 nats if step tax ≤3%; else park.
5Prior-filter / mix / curriculumQuality stack didn’t cut steps; try cheaper filters + order.
6Packing / batch / FP8Tangential t_step systems (G3/G5/G6).
15

How to run the agent

# once per workspace
pip install modal
modal setup
modal volume create nocap --version=2

# cheap proof (~$0.01)
modal run kit/modal_nocap.py --phase smoke

# proxy DAG (~$4–6, 60–80 min wall)
modal run --detach kit/modal_nocap.py --phase all

# full curated dataset for F2
modal run --detach kit/modal_nocap.py --phase scale --chunks 28

# finals (per-account profiles — volumes do NOT share)
MODAL_PROFILE=stufflaters   modal run --detach kit/modal_nocap.py --phase f1
MODAL_PROFILE=acalincarol   modal run --detach kit/modal_nocap.py --phase f2
MODAL_PROFILE=deeferentleeg modal run --detach kit/modal_nocap.py --phase f2b
MODAL_PROFILE=stufflaters   modal run --detach kit/modal_nocap.py --phase wave4
MODAL_PROFILE=indeea        modal run kit/modal_nocap.py --phase smoke

# indeea research proxies (dry-run unless --execute)
cd indeea_scripts && ./10_proxy_control.sh   # add --execute when approved

# readiness / transfer (CPU only — no GPU)
MODAL_PROFILE=<name> modal run kit/modal_nocap.py --phase readiness
MODAL_PROFILE=acalincarol   modal volume get nocap triage_full/ ./triage_full/
MODAL_PROFILE=indeea        modal volume put nocap ./triage_full triage_full -f

# fetch evidence
modal volume get nocap runs_logs.zip .
python kit/summarize_runs.py runs
COMPANION DOCS
Read order

01–04 campaign docs → 05 this map → academic_lit/ · indeea_scripts/ · volume_backup/MANIFEST.md · LESSONS.md

LOCAL WORKSPACE
software_i_built/modal/

modal_nocap.py · academic_lit (72 papers) · indeea_scripts · volume_backup · pull_20260711 · nocap_archive

One-line summary

The agent, compressed

A serverless FineWeb experiment agent with F1_seal DONE (\(T\)=3.866 h @4736 on rpp, torch 2.13), historical F1 3.82 h provisional, F2 miss, F2b quality hit (3.377) with −2.9% wall retracted as speed evidence (infra floor ~6%), Wave-4 done, indeea Muon board promote (4.218), dual accounts, Meta forensic review → APPROVE-WITH-FIXES. Next: Muon+parallel claim vs sealed \(T\).