later annotation · v1.4Δτ, the exponent contrast declared on this page, is invariant to affine rescalings of the error but not to monotone non-affine ones — under log(1+err) and √err its sign reverses. The pre-registration below is unaltered; this note records that the paper no longer leads with the quantity it declared. See coordinate-audit.html.
Project ASPECT-D · Document 2 of 2 · CANONICAL · target: DiffuLM @ NeurIPS 2026, deadline 2026-08-29 AoE

Experimental Protocol

Per-metric (width, depth, steps) scaling for masked-diffusion TTS. Every threshold, gate, pivot, statistic, and calendar rule here is binding. Theory lives in motivation.html; architecture, recipe, frozen sampler, and calendar numbers live in configs/grid.json.

Canonicality rule. Precedence on conflict: configs/grid.json → protocol.html → task.md → motivation.html (theory only; its figures carry illustrative placeholder values by design). A number found in none of these must not be invented: use the Defaults section of task.md, else the most conservative option, and record the gap in LOG.md.

§1Objects of study

For a bidirectional masked-diffusion codec-LM of width w, depth d (fixed N = 12·d·w² per budget), decoded with T refinement steps per codebook level (NFE = 8·T), we measure on zero-shot cloning:

MetricSymbolWhereDirectionRole
Word error rate (Whisper-large-v3)WEReval_zs × every T↓Primary — compositional
Speaker similarity vs original promptSIM-oeval_zs × every T↑Primary — representational
Degenerate-output rate (rule §6.4)DegenRateeval_zs × every T↓Descriptive reliability (no runaway metric exists: nothing autoregressive can fail to stop)
UTMOS22-strongUTMOSeval_zs × every T↑Tertiary — droppable

Error transforms for fits: err_WER = WER, err_SIM = 1 − SIM-o, err_UT = (5 − UTMOS)/4. Primary metrics are computed over all items (degenerates included; excluding them biases shape comparisons). Conditional variants (non-degenerate subset) are robustness columns only.

§2Backbone, objective, sampler

Everything is frozen in grid.json → backbone: bidirectional pre-LN transformer over Mimi tokens (12.5 Hz, 8 codebooks), SoundStorm-style coarse-to-fine masked training, MaskGIT confidence decoding with exactly T steps per level, cosine unmasking schedule, Gumbel confidence noise annealed 1→0 within each level, temperature 1.0, no CFG (guidance is a deliberate exclusion — it is its own confound axis). Phoneme prefix and 3-second prompt tokens always visible; target length fixed up front from the Phase-0 sec_per_char estimate. No speaker encoder — the backbone shape is the only identity pathway.

The decisive property exploited by this design: T is an inference-time variable. One training grid yields the full (w, d, T) response surface — 15 configs × 5 T values = 75 surface points per metric — at zero additional training cost.

§3Data

Identical policy to grid.json → data: Emilia-EN 2,000 h stratified subset (seed 1234), ≥4,000 speakers, 200 held out; fallbacks MLS-English → LibriTTS-R (activates G2-alt). Splits: val 2,000 held-in clips; eval_zs 400 held-out-speaker items, 4–15 s. No long-form set.

§4Training

Per grid.json → training: 30,000 steps, effective batch 256 sequences, AdamW(0.9, 0.95), wd 0.1, clip 1.0, cosine→10%, 600 warmup, bf16. Val loss = masked CE at fixed mask ratios {0.25, 0.5, 0.75} with a fixed val-masking RNG so values are comparable across runs. Nothing but (w, d, heads, seed) differs between runs; nothing is tuned per-shape or per-T after Phase 1.

§5LR transfer (μP)

Gate G1 — width transfer 5-point sweep (grid.json → training.mup.base_lr_sweep, 3,000-step proxies) at (d=12, w=256) and (d=12, w=640). Pass iff argmin LRs within a factor of 2. Fail → disable μP multipliers, per-width 5-point sweeps for every distinct width in the active grid (≈15 GPU-h), log.
Gate G1b — depth transfer Same sweep at (d=4, w=384) and (d=24, w=384). Pass iff within a factor of 2. Fail → log-linear LR(d) interpolation between the two optima, applied per depth, slope logged.

§6Evaluation

6.1 The T sweep

Every completed (config, seed) synthesizes the full eval_zs at every T ∈ {1, 2, 4, 8, 16} steps per level, with the frozen sampler of §2 and per-item generation RNG fixed across T (same noise stream, so T is the only difference). All metrics computed at every T.

6.2 Metric models

Exactly grid.json → eval_models; fallbacks only as listed, applied uniformly, logged.

6.3 Sampler-integrity check

Before scoring: for 20 items, outputs at T=1 vs T=16 must differ on >20% of token cells under matched RNG. Identical outputs = sampler bug (T not wired through) — fix before any metric is computed. This check separates "steps genuinely don't help" (a finding) from "steps aren't happening" (a bug).

6.4 Degenerate-output rule (frozen)

An item is degenerate iff its normalized ASR transcript is empty, OR has < 30% of the target character count, OR contains any 4-gram repeated ≥ 6 times consecutively. DegenRate is reported per (config, T); primary fits never exclude degenerates.

6.5 Latency measurement

Measure c_layer(width) (ms per layer per step, batch 1) once per distinct width on the eval GPU. The design-rule table in results.html uses latency = 8·T·d·c_layer(w) with measured values only (grid.json → latency_model).

§7Statistical analysis plan (pre-registered)

7.1 Part A — anisotropy at fixed T = 16 (links to the ASPECT program)

Mfull: errm(w, d) = Em + Am·w−αm + Bm·d−βm  ·  MN: errm = Em + Cm·N−γm

Fit on the 15 config means at T=16 (weights 1/SE² over seeds; pooled SE where a config has one seed). Weighted NLS, 32 multi-starts, bounds E∈[0,1], A,B,C∈[0,10], exponents ∈(0,3]. Shape matters for metric m ⇔ ΔAICc(Mfull−MN) ≤ −4. Width-dominance ρm = αm/βm.

7.2 Part B — the step axis (primary for this paper)

Msep: errm(w, d, T) = Em + Am·w−αm + Bm·d−βm + Cm·T−τm
Msub: errm(w, d, T) = Em + Am·w−αm + Bm·(d·Tκm)−βm

Fit on all 75 surface points (config × T means). Correlation structure: the 5 T-points of one run share a trained model; all bootstraps therefore resample at the run level (seeds within configs), never at the surface-point level, then recompute every T point. 2,000 replicates, percentile CIs, RNG seed 7331.

7.3 Decision statistics & hypotheses

7.4 Outcome classes (exactly one declared in DECISION.md)

ClassCondition4-page framing
S1H-D2 supported (Δτ > 0, CI excludes 0)"Test-time scaling is metric-selective: steps rent depth, not width." [The "steps rent depth" gloss is under review — see the open Δτ-wording issue; the outcome-class declaration itself is unaffected.] Headline number (v1.0): Δτ = +0.1102, CI [0.0921, 0.1312]. H-D3's κ was not supported, so no κ is quoted.
S2CI excludes 0 with Δτ < 0Reverse selectivity — equally reportable; mechanism section revised.
F1CI includes 0, power gate G4 passed"Refinement lifts all metrics equally" — a clean negative for metric-targeted test-time scaling in masked TTS; still a workshop paper.
F2G4 failedNoise-floor measurement + power analysis + released 30–45-run suite.

§8Gates, pivots, stop-losses

Gate G0 — environment (Phase 0) (a) Mimi roundtrip on 10 clips, audible, sane mel distance; (b) 200-step single-batch overfit reduces masked CE ≥ 40%; (c) eval harness on ground-truth audio: WER ≤ 5%, median same-speaker SIM-o ≥ 0.50, median cross-speaker ≤ 0.25; (d) sec_per_char computed and logged; (e) sampler-integrity check of §6.3 passes on an untrained model (outputs vary with T). Fail after 3 distinct repair attempts → STOP-ENV.
Gate G2 — pilot floors (Phase 2) Full-schedule A3, B3, C3, seed 0, evaluated at T ∈ {1, 16}. Pass requires all of: WER(C3, T=16) ≤ 30%; WER(A3, T=16) ≤ 65%; SIM-o(C3, T=16) ≥ 0.30 and ≥ cross-speaker baseline + 0.15; DegenRate(C3, T=16) ≤ 40%.
G2-alt (LibriTTS-R fallback): SIM-o threshold ≥ 0.22 and ≥ baseline + 0.10.
Step-flatness flag (not a failure): if WER(C3, T=1) − WER(C3, T=16) < 3 points absolute while §6.3 integrity passes, set flag T-FLAT in state.json and proceed — flat step curves are a genuine finding routed to F1, not a bug.
Failure routing: only A3 fails → Pivot P2. C3 fails → one retry at 0.5× LR → still fails → Pivot P1-D. Both exhausted + still failing → STOP-PILOT, classify F2, report on pilots.
Pivot P2 — ladder shift (max once) Drop budget A, activate contingency budget D (in grid.json); grid B, C, D. Fires only if BOTH gate G5 (compute) and gate G6 (calendar) project headroom — D runs cost ≈2.3× a C run. Re-pilot D3 with G2 thresholds (C3→D3, A3→B3 substitutions).
Pivot P1-D — recipe pivot within diffusion (max once) Replace the coarse-to-fine objective/sampler with flat joint masking over the full 8-level delay-pattern grid (LLaDA/MDLM-style: t ~ U(0,1] i.i.d. over all cells, loss on all masked cells) and whole-grid confidence decoding. Under P1-D, T redefines to TOTAL steps, NFE = T, T_eval_grid = {8, 16, 32, 64, 128}; the semantics switch is logged and carried into every fit and figure. The backbone never leaves the diffusion-LM family (the venue is DiffuLM; an AR pivot would exit scope). Re-run Phases 1–2 under the new recipe.
Gate G3 — grid health (Phase 3) A run fails if it NaNs or diverges (val loss > 1.2× its running min at 3 consecutive evals): one auto-restart from scratch at 0.5× LR, then mark failed. Grid valid iff ≥ 12 of 15 active configs (≥ 8 of 10 if budget A was cut) finish ≥ 2 seeds… with the mandatory-seed policy this means both seeds. Invalid → one backfill pass at 0.5× LR if G5+G6 allow; else F2-candidate, continue to Phase 4 with what exists.
Gate G4 — power (Phase 5, before hypothesis tests) For ≥1 of {WER, SIM} at T=16: within ≥2 of 3 active budgets, (max−min config mean across shapes) ≥ 2 × pooled seed SD (pooled across the budget's configs). Fail → outcome F2; produce fits, figures, and a power analysis, but no H-D claims in either direction.
Gate G5 — compute stop-loss (continuous) Hard cap 500 B200-equivalent GPU-hours (conversion by measured throughput vs the Phase-2 pilot, logged). Re-project after Phases 1 and 2 and every 10 grid runs. Projected overrun → apply grid.json → compute.priority_cut_list in order, one cut at a time, logged. Cap reached → freeze training, complete Phases 4–7 on finished runs.
Gate G6 — calendar stop-loss (continuous; unique to ASPECT-D) Milestones M1–M6 and the hard wall 2026-08-29 AoE are in grid.json → calendar. At every milestone: if the projection for the next milestone misses its date, apply the calendar cut list in order until the projection fits, logging each cut. Writing floor: Phase 7 (paper) begins no later than M6 − 1 day regardless of experiment state — a submitted 4-page abstract with partial results and honest limitations strictly dominates an unsubmitted complete grid. The hard wall overrides everything except scientific integrity: numbers in the paper must come from fits.json/runs.csv as they stand.

§9Compute & calendar budget

ItemGPU-h (B200-eq)Calendar
Phase 0 env + data + harness8→ M1 (Aug 12)
Phase 1 μP sweeps20
Phase 2 pilots (3 runs + T∈{1,16} evals)25→ M2 (Aug 14)
Phase 3 grid, mandatory 2 seeds (30 runs)120–180→ M3 (Aug 21)
Phase 3+ stretch seed 2 (15 runs, only if G5+G6 allow)60–90within M3
Phase 4 synthesis ×5 T + scoring (≈90k utterances at full stretch)60–90→ M4 (Aug 24)
Phases 5–6 fits + figures + results.html5→ M5 (Aug 25)
Phase 7 paper draft + polish—→ M6 (Aug 27); wall Aug 29 AoE
Projected / hard cap≈240–420 / 500

§10Deliverables (definition of done)

File paths above follow the current repository layout: in v1.0 the measured outputs sat at the repository root; they now live under results/, and the research logs under archive/research-log/.

ASPECT-D protocol v1.0 · frozen before any training run · amendments require a version bump and a LOG.md entry demonstrating the change cannot bias H-D2/H-D3.