Commit History
-
phase 75: public refutes order re-weight (+15.1); selection stays 62e9d91; head reverted
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>ead8fbc -
phase 74: alpha-1.4 re-tune - wiener weight basin floor .20 (CV 1476.0); other dials orthogonal
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>4bc9676 -
docs: phase 73 postscript - alpha dose-response confirms 1.4 optimum; no second A/B
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>a85a987 -
phase 73: alpha 1.4 converts publicly (1480.85, -94.5); selection = 62e9d91; REPRODUCIBILITY table updated
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>8107fda -
docs: phase 72 - count-flat closure sweeps + alpha 1.4 A/B decision rule
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>b8318dc -
phase 71: pressure CV instrument fails calibration (limit-collision lottery ~13x signal); no instrument change, pick stays 4c93883
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>89df098 -
phase 70: fleet-composition probe - CV packing win is a low-pressure artifact; selection locks to 4c93883
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>8e0e67b -
phase 69: public 1583.11 on restored head - lam2sp3 packing trade refuted publicly; private pick flips to 4c93883
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>771168f -
phase 68: T5 global-optimum probe (6 lanes) - all rejected with mechanisms; 60d65da stands as final
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>3704c62 -
docs: phase 67 - T4 count-flat campaign (6 lanes, ~50 arms) all rejected with mechanisms; 60d65da = count-flat ceiling
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>e4aaa05 -
docs: phase 66 postscript - warmup gate publicly refuted (1594.89); private pick 60d65da/4c93883
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>88db96b -
HEAD: T3 warmup gate - gated hazard order + alpha 1.4 boost - CV 1418.3
Thibaut Forest +1: Claude Fable 5While the training fleet's death ledger at the plan origin is below WARMUP_RATE (0.0759/device = 35/461), Ft2RUL switches ORDER to a censored-pool discrete-time hazard HGB and boosts appetite x1.4 via a consume-once plan_tsroute.alpha_boost; past the gate the model is byte-identical to the previous head (WARMUP_RATE=0 disables exactly, verified 0.0 max cell diff vs 1541.3). bgkf: 1418.3, -123.0 +/- 43.1 (2.9sigma), 14W/5L, Wilcoxon .0017. COUNT-COUPLED (swaps 2.54 vs 2.27) - shipped on the user's CV-first call for a public trigger. Scale harness: gate narrows as fleets grow (8/4/0 active scenarios at 1x/2x/4x) - bounded downside. Rehearsal: gate fired on exactly s_0-14, s_15+ byte-identical, 0 warnings. Includes T3 lane reports (gm label-statistic axis closed: the exact label is a lagging smoother; cold-start gating; scale validation) and phases 65-66. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>e4745d2 -
HEAD: T2 planner objective - timing_weight 2.0 + split_days 3 - CV 1541.3
Thibaut Forest +1: Claude Fable 5lam2sp3 from the T2 planner lane: scale timing curves x2 inside optimize_days' objective (new BATTERYSWAP_TIMING_WEIGHT dial, default 2.0) and SPLIT_DAYS default 7->3. Refuses cheap trip-merges that drag swaps off timing-optimal days: late -3.5, early -1.2, mobility +0.8. bgkf paired vs 1545.4 champion: -4.11 +/- 1.41 (2.9sigma), 25W/4L, Wilcoxon 8.8e-6, count-flat (battery sets cell-identical); dose-response plateau on both dials; survives 35-arm multiplicity. New-mechanism tier (2sigma + controls) PASSED. Deployment parity: cand ft2a10 cell-exact (diff 0.0) vs the lane measurement; timing_weight=1.0 legacy path bit-exact vs pre-T2 reference (ft2a10_sp7 control). End-to-end pseudo- split rehearsal clean (static held-out branch, 0 warnings, 38s). Also: phases 63-64 records (public conversion 1575.31 at 4c93883; five-lane T2 campaign - timing/order/hazard axes closed with structure, counts lane report-only incl. warmup-gated alpha 1488.0 for a possible public trigger) + the five t2_*.…60d65da -
Phase 62: synthetic scaling study (1x/2x/4x, official-mechanism EOLs); count rule scales cleanly; fixed-ref vmin7 dial (default off); alpha-1.0 edge holds at every scale
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>34c30a6 -
EXPERIMENTS: Phase 61 entry
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>4d3b32e -
Campaign 3 CLOSED: ~45 candidates, frontier confirmed as pipeline ceiling; autopsy prize unreachable by ordering; alpha deflated (sign-test refusal); xlb micro-piece shelved; team-repo intel (Phase 60)
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>67d461d -
Campaign 2 CLOSED: all 7 lanes final; frontier adopted at 3f9bf12; rk_4w shelved (torch, no sign edge); aux_ho raw = value channel (Phase 59)
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>ba865a1
-
CV: SCORE = summed folds per scenario (all-building out-of-fold total, familiar full-fleet magnitude); champion baseline 1760.2
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>1cefc38 -
Phase 58: definitive v5-vs-public coherence - zero false adoptions under the full protocol; faithful config reproduction matters (alpha stack reads n.s., approximations overstated misalignment)
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>b6d4319 -
Phase 57: bgkf-vs-public alignment check (3 sign flips; better than purge; vrel the one coherent cross-fleet signal)
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>24b7f13 -
Phase 57: building-GroupKFold champion baseline SCORE 352.0 (per-test-fleet denomination, 22s harness)
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>80003d7 -
Phase 57: CV replaced with building-GroupKFold (user directive) - test group planned as standalone fleet, stratified on failures + travel centrality
Thibaut Forest +1: Claude Opus 5 (1M context)Simulates the held-out deployment path (static foreign fit) the private split's unseen fleets take. Purge harness retired (three deployment blind spots, phase 56); recoverable at f5f3fda. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>4be2283 -
Phase 56 addendum 2: frontier purge gain = hidden per-scenario appetite (corr 0.76); head default reverted to legacy champion
Thibaut Forest +1: Claude Opus 5 (1M context)Anchor decomposition: order-only worth -37..-47 +/- 43 n.s.; the -342 was count reallocation via calibration (era hazard leaks through both-sides fits - purge limitation #3). BATTERYSWAP_FRONTIER now defaults OFF; dials kept for explicit A/B. Shipping bar tightened to count-matched evaluation. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>f5f3fda -
Phase 56 addendum: public refutes UNANCHORED frontier (1877.08, swaps 517 vs 580); fix = value-anchor to plain logbag
Thibaut Forest +1: Claude Opus 5 (1M context)Count collapse, not ordering: logbag_rank's sum(p42) is 0.78-0.80x plain logbag under deployment past-only fits at late origins (both-sides purge fits hid it - swaps read flat in CV). FrontierRUL now anchors p42 VALUES to a plain-logbag donor (count/pricing/timing = the measured 580-swap champion machinery, byte-equivalent) while rank+gbm supply ONLY the order. Verified at worst-collapse origins s_35/s_45: donor sums exact, frontier order exact, top-13/25 identical. BATTERYSWAP_FRONTIER_ANCHOR=0 restores the refuted unanchored form for forensics. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>86f3f93 -
Phase 56: NEW CHAMPION logbag_rank + gbm rank-blend w=0.30 (purge 1630.3, was 1972.0)
Thibaut Forest +1: Claude Opus 5 (1M context)11-lane agent campaign, ~250 candidates, all paired on the deterministic purge harness. Champion: within-fleet rank features (r_vlast/r_tau) on the bagged logistic + gbm value-preserving order blend - ordering-only, swaps flat 9.23, wins all three blocks (-341.7 +/- 103.8, 37W/11L). Deployed as submit.py FrontierRUL; fidelity vs the CV candidate is bit-exact (s_10/s_30). Dials: BATTERYSWAP_FRONTIER=0 -> legacy logbag; BATTERYSWAP_FRONTIER_W2=0 -> plain logbag_rank (purge 1746.4, no gbm flattery exposure). cv.py CHAMPION carries the blend; regenerated baseline matches the campaign run bit-for-bit. Instrument calibration (campaign's key negative): the purge rewards the two classes the public refuted - count-coupled changes (alpha 1.5: purge -202 vs public +527) and label-process exploits (cert-first re-derived at its exact pre-refutation signature 3W/0L/45T). Shipping bar recorded: ordering-only, label-process-free, swaps flat. Report-only survivors and full per-lane records in agent_re…698401a -
cv: de-tune harness from champion output shape (user) - rank_stats/rec12/rec20 removed, plan-derived swaps kept; SCORE reproduces 1972.0
Thibaut Forest +1: Claude Opus 5 (1M context)The purge harness now requires only that a method yield a plan: the pred-shape ranking metrics assumed a per-device p42 ranking, which not every method will have. models_cv.rank_stats untouched (ad-hoc use). CSV schema change: n_swaps replaces the rank columns; stale /tmp candidate CSVs deleted. (Attribution note for the record: the cv.py consolidation itself is 4f5f060 by session 59; a6c0af5 was EXPERIMENTS.md only despite its message.) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>645d27e -
Phase 55: temporal-purge CV is THE SCORE and sole validator (user directive); cv.py consolidated to the purge harness only
Thibaut Forest +1: Claude Opus 5 (1M context)Protocol (session 59 implementation, user-specified): per scenario, one model on ALL buildings' pairs with label windows fully outside the scenario window, full-fleet plan, SCORE = ALL-48 mean. Champion 1972.0 (panel 1839.6). all48/static/screen/lobo/ablate removed from cv.py - recover at 2000281. Purge-vs-LOBO paired diagnosis recorded: same-device-fate channel ~-18/origin on the panel for the linear champion, warm-up harsher via calendar starvation. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>a6c0af5 -
Phase 54: exhaustive re-adjudication complete (zero survivors); CV settles - exact leave-one-building-out, single value, champion 1877.3
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>2000281 -
Phase 52 addendum: building split extended to the cost harness - new cv all48oof protocol (building-OOF p42, full-fleet planning, paired self arm); panel 1679.2 -> 1813.6 (+134.4/origin, 8W/26L), self-building fit flatters all48 by ~+134/origin; prices harness optimism, no selection change
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>43761b5 -
Phase 53: building-CV re-adjudication - GHOST_ZERO/QUARANTINE/combined all reject; screen confirms feature rejections; record closed
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>60e7aaf -
Phases 50-51: dynamics forecast family - strongest screens of the campaign, closed by the cost harness and the building-split autopsy (own-telemetry memorization)
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>075488b -
Phase 52: building-grouped CV adopted - screen gains leave-building-out column; contamination gradient rf +.194 (scenario) -> ~0 (building); logbag choice confirmed, no reversal
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>edd5d5e -
Phase 48 addendum: late +75 proves zero public catches; cert-first family closed
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>6627f14 -
Phase 48: public refutes cert-first (+43.19, ghost force-swaps at ~111 early-days each); default off
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>e382bfa -
Phase 46 addendum: threshold sweep - cert-first works only at the label rule's exact parameters; direction closed
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>54b578c -
Phase 49: four new ordering-signal families opened and closed - longitudinal cross-origin, interactions, tau re-rank, temporal ensembling; the marginal-rank defect is missing information, not noise
Thibaut Forest +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>2cabcac -
Phase 47 renumber: blind-champion adjudication (was duplicate Phase 46); register blind4/blind3 cv variants
Thibaut Forest +1: Claude Fable 5The blind4 writeup was swept into 4e17cd1 with a colliding Phase 46 header. Renumbered to 47 per cross-session coordination. cv.py gains the rejected blind4/blind3 variants with the verdict inline so the port cannot be re-attempted by inspection. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>a94f6b9 -
Phase 46: overfitting audit - luck bounds, certain pool; ADOPT cert-first (k=3) ordering, all-48 1661.7 -> 1623.7, 3W/0L/45T
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>4e17cd1 -
Phase 45: pairwise ranking objective rejected - no new information, demotion artifact exposed; all axes now measured
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>25432c8 -
Phase 44: leaderboard inversion - appetite closed on numbers, tail transfer is the defect, no local instrument sees it
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>ab4b0fd
-
Phase 43: innovation sweep - queue pricing, lead-time bias, late decomposition; and a verified data leak we are not taking
Thibaut Forest +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>e44c7a4 -
Phase 41-42: fixed-N ablation rejects the vrel port; public says pooling is a wash
Thibaut Forest +1: Claude Opus 5 (1M context)Phase 41 discharges phase 39's standing directive ("do not port anything from that lineage without re-running the ablation on recall at fixed N"). Adds cv.ablate: holds N fixed and varies only the score, so a feature's effect on ORDERING is separated from its effect on the topsum count. No planner and no evaluator - recall at fixed N and the rank distribution of misses are functions of the score alone. Deaths caught at fixed N, paired per origin, bootstrap 95% CI: native N=12 native N=20 static N=12 static N=20 vrel alone -6 [-12,-1] +4 [-1,+9] +6 [+0,+13] -1 [-9,+7] vmin7_rank alone -1 [ -5,+2] +4 [+0,+9] -5 [-11,+1] +0 [-4,+4] both -7 [-15,+0] +5 [-1,+11] +4 [ -2,+10] -1 [-9,+7] v_last alone -39 [-57,-22] -8 [-20,+5] +7 [-10,+25] +5 [-10,+20] REJECT the port. The sign flips with N on both instruments, every CI straddles zero, and the ordering is byte-identical at 36-41 of 48 native origins and 228-230…41a82cd -
Phase 40: port the research loop's CV discipline + ship in-fleet pooling
Thibaut Forest +1: Claude Opus 5 (1M context)CV protocols move out of /tmp into batteryswap_example/cv.py, with the champion config itself promoted from /tmp/all48.py into cv.CHAMPION: all48 full-fleet walk-forward, three-regime scorecard static the deployment gate - one foreign-fleet fit, no refits, 11s a seed, ORDERING questions only (this construction manufactures a sum(p42) undercount; phase 26 believed it and public went 1661 -> 2189) screen offline model screen grouped by BATTERY, never by scenario/row models_cv.rank_stats now runs inside walk_forward, so dev/panel/test also report rec12/rec20, operating-point recall+precision, the count actually bought, and the median rank of missed deaths beside the cost. Base reproduces 1661.7 / 2379.7 / 1679.2 / 604.8 byte-exact - the additions are diagnostic only. What the new metrics show: the panel's missed deaths sit at median rank 57, 45 ranks past the cut. That is the closed appetite axis as a measurement rather than an argument. screen s…c7d5d98
-
Phase 37: dq_g20 cannot be made always-on - benefit and harm come from the same rows
Thibaut Forest +1: Claude Fable 5H1 (devw harm was a double-bootstrap artifact): refuted. Re-implemented with true sample_weight in a manual bagging loop plus a uniform-weight control; devw is +389 vs that control, clean dose-response, harm unchanged. H2 (quar's 2.48 threshold is over-broad): refuted. It does drop 77 devices vs the ~26 real ghosts, but tightening toward the ghosts is monotone in the wrong direction on s_8-47 (2.40 +36.7 ... 2.48 +509.5) with the trend's limit being 'do not filter'. At 2.40 warm-up is identical to base, so the tight filter that spares the panel also yields no cold-start gain. Devices that look dead and survive are label noise at 3-20 positives and informative hard negatives at 800+; the effect changes sign rather than attenuating. Champion unchanged: all-48 1661.7, s_8-47 1518.0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>9fd6de6 -
Phase 36: fit-protocol axis - warm-up mechanism validated (-49.8+/-6.0 across 6 seeds) but inert in deployment (static_uniq=82 vs gate 20)
Thibaut Forest +1: Claude Fable 5quar (drop 26 'looks dead, labeled survives' ghosts) and devw (device-equal resampling) each improve warm-up substantially and wreck the panel; gated at train_deaths<20 they leave panel/near-end byte-identical. Stacked (dq_g20): all-48 1619.1 vs 1661.7, every one of 6 resampling seeds improves. Not adopted. submit.py scores public,private - both held-out, both static branch, train_uniq = static_uniq = 82 unique dead devices in the foreign pool. Every gate tested is far below that, so the branch never runs where it is scored. The whole warm-up regime (23.9% of the checksum) is absent from the scored splits, which is why the cold-start floor's huge local gain (2146.9->1851.0) never showed on public. Deployment-faithful window is s_8-47, base 1518.0. Re-ranked all 86 screened configs on it: no hidden winner, only the known s_39-46 tail artifacts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>c64ca4a -
Phase 34-35: retire cross-fleet CV, re-screen 72 configs, champion unchanged
Thibaut Forest +1: Claude Fable 5No behaviour change to the shipped path. models_cv.py is untouched; the only code edits are docstrings and four unused imports (planner.py numpy/FEATURES, train.py Field, submit.py sys). Champion config verified in submit.py: logbag, ALPHA=ALPHA_STATIC=0.8, EC_MARGIN=0.8, EC_PMAX=25, SPLIT_DAYS=7, FLOOR=2.5/gate 20, CLIFF_SCALE=1.0 (off). all-48 = 1661.7, public 1661.45. Phase 34: cross-fleet CV retired after a second confident false positive. rankavg won it at -18.4 (27/32 folds, p=0.0002) and is +55.3 on the real full-fleet all-48 - losing on the panel alone (+23.9), so not a warm-up weighting artifact. Root cause: every fold trains on the full history, so the harness cannot reproduce cold-start scarcity. Also closed: warm-up physics prior (logbag already best at cold origins), optimizer budget (2x60 optimal), feature LOO (best removal +2/308). Phase 35: everything ever judged on a retired instrument re-run on the surviving one. 72 configs, base reproduced 1661.7 in every group, no…7d93fb8 -
Phase 33: late-swap root cause - count is optimal, ranking is the wall
Thibaut Forest +1: Claude Opus 5 (1M context)Forensics (panel s_8-41): late is 97.9% MISSES, 2.1% caught-late; we already swap a median 12.2d before EOL, so no timing lever exists. Recall 176/308. Missed deaths are LINGERERS (median days_below_245 63 vs 29.5 caught) sitting at median rank 35 of ~450. Definitive alpha curve on the SHIPPING rolling path (full evaluator cost): 0.6:1844 0.8:1679 1.0:1771 1.2:1862 1.5:2084 2.0:2369. Clean U with the minimum at 0.8. More swaps DO cut late (1019->691) but early rises 3x faster (444->1409); at 28.5 swaps our late still never reaches the leader's 499 while early is 2.3x theirs. No alpha reaches the leader profile - their 19 swaps are a consequence of better ranking (~40% marginal hit rate vs our 8%), not a cause. Independently reproduces public 6ea03da (+8 swaps, late -13, early +444). Six ranking attacks rejected, all with the same signature - AUC UP, top-12 recall DOWN: zone features, v_corr_last+thresh_dist, RF ranking, rank blends, cohort-restricted model, sub-daily/intra-day f…eb395ee -
Phase 28 public refutation: revert static appetite to 0.8, cliff boost off
Thibaut Forest +1: Claude Fable 5Public look 2026-08-20 (6ea03da): 2188.78 vs 1661.45 (3c7b883). First public exposure of the whole static stack at once; component signature is pure over-inclusion - battery_swap +68%, early +444, late +13 (zero recall gain). - ALPHA_STATIC default 1.5 -> 0.8: phase 26's undercount premise is refuted on the real held-out fleet; phase 20 (the probability scale transfers / overcounts) was right. The half-fleet holdout manufactures the undercount (~6 deaths/scenario makes inclusions look cheap; marginal exchange rate 0.46 late-saved per early-spent locally, ~0.03 on public, break-even 1.0) and is hereby refuted as an appetite adjudicator - count decisions are public-look-only now. It stays valid for structural questions. - CLIFF_SCALE default 2.2 -> 1.0: the boost was only ever adjudicated on top of the refuted 1.5 baseline, and the public look condemns it transitively (every cliff device was included at 1.5 + boost and late did not move). - Retained: static-fit machinery…bb5a0c1 -
Phase 28: cliff-gated static appetite (cliff_count22) for held-out splits
Thibaut Forest +1: Claude Fable 5- submit.py: on the static held-out path ONLY, rows whose raw hourly readings show a knee (>=35% of the last 7 days' readings below 2.45 V, >=20 readings, corrected voltage < 2.46) get rank_score / p42_sum = clip(2.2 * p42, 1) while raw p42 - and hence every timing curve - stays untouched. Train/rolling path byte-inert by construction. Env: BATTERYSWAP_CLIFF_SCALE (1.0 disables). - Adjudication (exp_x28.py; EXPERIMENTS.md phase 28): mined from the public Attention-Heads repo. Real-label static holdout -54.5/scenario (4/5 fleet splits, baseline at ALPHA_STATIC=1.5 so the gain is additive to phase 26, not double-counted); barrier-event resampler -66.8 with the sign held in 120/120 draws; correlated per-quarter-shock variant -66.1, also 120/120; beats plain alpha raises on mean, variance and tail (alpha=2.5 turns negative). Panel rejected it on the native path (+27): static branch only. - Verified: cliff-mask parity 1.0000 vs the adjudication harness at s_16/28/40;…6ea03da
-
Phase 27: held-out-parity audit - penalty wiring + 3-layer failure isolation
Thibaut Forest +1: Claude Opus 5 (1M context)Dress rehearsal (Docker main() over fake public+private with renamed device IDs) exposed that one bad split could destroy the whole submission: a check_dataset assertion killed the adaptive path AND the pickle fallback identically, escaped main()'s handler, and no submission.csv was written. - load_best_effort(): dataset consistency check demoted to a logged warning - fallback guarded individually; new raw-file last resort (defer-everything plans, alive-filtered) guarded again - a split can at worst lose itself - cost_curves penalty constants (EARLY/LATE) wired from each scenario's settings (evaluator charges these; constant 0.5/10.0 in train, byte-inert at defaults); planning_window_days != 42 logs loudly - audit: per-scenario settings vary only in base_location/base_room (16 bases; mobility sim already reads them live) Rehearsal after fixes: both splits static-path, complete 2-split submission.csv in 35s; all-48 checksum 1851.0186805555559 byte-exact. Co-Authored-By: Claud…fc780fa