diff --git a/WorldModel/EXPERIMENT_LEDGER.md b/WorldModel/EXPERIMENT_LEDGER.md index e685caf..9f51264 100644 --- a/WorldModel/EXPERIMENT_LEDGER.md +++ b/WorldModel/EXPERIMENT_LEDGER.md @@ -294,3 +294,16 @@ Two reviewers verified the delivered synthetic A/Bs are sound (symlog threaded i - **The repaired benchmark is still underpowered.** At n=200, against a deliberately large effect (an eleven-fold difference in training), the continuous endpoint reaches only |t| = 1.48. Extrapolating on the sqrt(n) behaviour it does exhibit, |t|=2 needs n ~ 365; on 3 seeds that estimate is itself noisy. - Decision: **KEEP all six repairs** — every one removes a measured noise source and n=200 is free. **DO NOT declare the benchmark repaired.** It can now adjudicate a large effect at n~400; it cannot adjudicate the 0.07-scale effects the objective A/B line cares about, and raising n alone will not get there because the binary endpoint does not respond to n. Adopting `log_distance_ratio_mean` as the adjudicator is now a prerequisite rather than an option, and remains a separate pre-registered decision that must still clear the blind criterion. - Next question: the ceiling is now `goal_tol` and the horizon, not the sample size. A success criterion that discards the distance it is computed from cannot be fixed by more episodes. Before any regularizer A/B: decide the adjudicating endpoint under the blind criterion, and re-examine whether `goal_tol=0.15` at `horizon=6` leaves any resolvable signal at all. Also outstanding — nodes 10 and 11 swept CEM knobs under the shared-generator defect, so their paired reading did not hold; re-running them is cheap and would either confirm "the planner is not the bottleneck" on sound footing or overturn it. + +## 16 — CEM-budget sweep re-run on the repaired benchmark: node 11 confirmed, its point estimate refuted, and a worse finding underneath (2026-08-02, commit ) +- Category: Benchmark +- Hypothesis: (node 15) nodes 10 and 11 swept CEM knobs under the shared-generator defect — one `torch.Generator` consumed sequentially, so planning noise on episode i depended on `n_samples * cem_iters * horizon`. Any arm changing a budget knob got different noise on the same episode, so node 11's "within seed noise" reading rested on a comparison that was not paired. Re-run it with per-episode generators, a fixed episode set, n=200 and the continuous endpoint. +- Prediction: node 11's conclusion (more budget does not lift control) either survives on sound footing or is overturned. +- Implementation: `default(cem_iters=3, n_samples=64)` vs `tuned(8, 192)`, x {signal, nuisance}, seeds 0-4, `n=384`, 22 epochs, latent_dim 32, `episode_seed=2`, `n_episodes=200`. Trivial-policy controls (zero-action and random-action) computed on the same episode construction. +- Evidence: + - **Node 11's CONCLUSION SURVIVES.** More CEM budget does not lift control: 0/5 seeds reach paired |t| = 2 on either endpoint in either mode. Mean paired |t| for signal is 0.86 binary / 0.48 log; for nuisance 0.85 / 0.89. + - **But its seed spread was 14x too wide, and its POINT ESTIMATE HAD THE WRONG SIGN.** Node 11 reported default 0.342+/-0.151 vs tuned 0.325+/-0.144, delta **-0.017** — tuned slightly worse. Repaired: signal default **0.335+/-0.011** vs tuned **0.360+/-0.016**, delta **+0.025**; nuisance 0.337+/-0.023 vs 0.354+/-0.025, delta **+0.017**. The +/-0.15 that node 11 called seed noise was mostly the benchmark's own defects, and the direction it reported was noise. A conclusion can be right while every number supporting it is not. + - **THE PLANNER ENDS FARTHER FROM THE GOAL THAN IT STARTED.** `log(d_final/d_start)` is POSITIVE in all 20 runs: signal +0.108 (default) / +0.082 (tuned), nuisance +0.128 / +0.097. Mean final distance is ~9-14% GREATER than the starting distance. + - **And it is worse than doing nothing.** Zero-action on the same episodes gives +0.034 (signal) / +0.029 (nuisance); random-action +0.046 / +0.060. Paired per-episode, planner minus zero-action is positive in **6/6** mode x seed comparisons (deltas +0.055 to +0.155, sign test p ~ 0.03), though only 1/6 individually clears |t| = 2. Same direction against random-action, 6/6. +- Decision: **KEEP node 11's decision (reject the CEM-budget lever) and REPLACE its evidence.** The lever genuinely does not work, now measured with a seed spread of +/-0.011 rather than +/-0.15. **REFRAME the open question.** Nodes 11-15 asked why the planner fails to beat chance; that framing is too generous. On the distance endpoint it is consistently worse than taking no action at all, which is not what an uninformative planner looks like — an uninformative planner scores like the zero policy. Something is systematically pointing it away from the goal. +- Next question: this is a directional defect, not a power problem, and it is cheap to localise. Candidates, in order: (a) the goal latent, already known from node 14 to sit ~70x further from the start latent than the goal displacement warrants, so the cost gradient may point almost anywhere; (b) sign or axis convention between the latent displacement and the action applied in `_step`; (c) the predictor's rollout diverging over `horizon=6` so the minimised cost is computed on a state that does not correspond to the executed trajectory. Test (b) first — it is a one-line check and would explain the sign exactly. NOTE that node 14's one-frame remedy did NOT fix control, so (a) alone is not sufficient.