lam2sp3 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_*.…
HEAD: gap-approach HGB third order source at w .20 (user call) - CV 1568.6
Thibaut Forest+1: Claude Fable 5
274f134
Order = .55*logbag(vm7) + .25*wiener + .20*HGB(d2, gap-approach features:
gap_ratio/rel_close/dwell_flat/gap_log - the plateau-vs-fast-crosser shape
from the autopsy). Value-preserving; counts untouched. Evidence: -32.5 +/-
25.2 vs 1601.2, six-of-six sign consistency across weights/bases, below
the formal 2-sigma bar for new mechanisms - shipped on the count-flat
order-blend risk class (never publicly refuted). Deployment parity
bit-exact (1568.6, cell diff 0); end-to-end pseudo-split rehearsal clean
(48s, recall .535 vs .514 prior head at equal swaps). days_below_245
merged into the shipped train table; BATTERYSWAP_FT2_GAPW=0 reverts.
cv cand ft2a10 / head now run the literal deployed class.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
cv: 'ft2a10' now tracks the shipped head (w .25, 1601.2); old form kept as ft2a10_w20
Thibaut Forest+1: Claude Fable 5
adc06b1
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
HEAD: wiener weight .25 (1601.2 on bgkf, deployment parity exact; count-flat weight tweak inside the validated blend; sub-bar 1.6sigma, shipped per user)
Thibaut Forest+1: Claude Fable 5
f8a734c
cv cand head = the shipped model. FT2_W env reverts.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
cv: SCORE line shows SE + 95% CI (scenario-scatter caveat; paired deltas remain the decision statistic)
Thibaut Forest+1: Claude Fable 5
e95e770
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
cv: p_star hook in run_bgkf + 'ft2a10' candidate (the head/alpha-1.0 model) - one-liner CLI
Thibaut Forest+1: Claude Fable 5
826bd69
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
cv: register the adopted model as 'ft2' candidate (vm7 variant + wiener .20) - one-liner CLI, verified 1688.4
Thibaut Forest+1: Claude Fable 5
87cd73d
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CV v5 fidelity pass (user): GroupKFold with deployment-exact held-out semantics
Thibaut Forest+1: Claude Opus 5 (1M context)
2a6a86a
Fold fits on TRAIN buildings' full closed history (= the static foreign fit
deployment-legal for held-out fleets); planner state = submit.py static-path
knobs exactly, incl. the cold-start floor gate (structurally inert at fold
sizes >= 60 deaths vs gate 20); in-fold purge dropped (stricter than the
deployment it represents, bought no public coherence). Both public and
private splits are ~2x held-out fleets (Docker rehearsal) -> ONE CV for both.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CV v4 (user directive): building-GroupKFold x temporal purge - per fold, per scenario, fit on train buildings' pairs with label windows entirely outside the scenario window; test scenario on the test buildings as a standalone fleet
Thibaut Forest+1: Claude Opus 5 (1M context)
9d114fd
Double holdout by construction (fleet axis + time axis), no tuning: the
public-calibrated pricing layer was explicitly rejected. Coherence with
recorded public deltas is checked, never fitted.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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)
4be2283
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>
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)
698401a
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…
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>
cv: temporal purge is the ONLY protocol (user spec) - all48oof fits per scenario on ALL buildings' pairs whose 42d label windows lie fully before/after the scenario window (no building holdout, full-fleet plans); all48/static/screen/lobo/ablate and the lobo/wf/self variants REMOVED (git history keeps them; exp_x29/x30 need the old cv.py); SCORE 1877.3 -> 1972.0 (harsher: warmup 3560.3 vs 2875.3 loses the calendar-local window; panel 1839.6 vs 1857.7)
Thibaut Forest+1: Claude Fable 5
4f5f060
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
all48oof static: EXACT leave-one-building-out predictions per user spec (24 models on 23 buildings each, was 5 fold models on ~19); SCORE 1913.3 -> 1877.3
Thibaut Forest+1: Claude Opus 5 (1M context)
227c214
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
all48oof prints THE SCORE as a single value (mean cost/scenario, building-clean predictions, full-fleet plans); lobo demoted to diagnostic
Thibaut Forest+1: Claude Opus 5 (1M context)
596925f
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
cv lobo: leave-one-building-out cost CV (user-specified primary) - per scenario x building, static fit on the other 23 buildings' full closed history, per-building plan+score; reports mean/bldg, sum, recall, and zero-swap-with-death count (the model-adaptation to-do list)
Thibaut Forest+1: Claude Opus 5 (1M context)
2512a0a
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
all48oof: static fit protocol is the default (user-shaped) - one fit per fold on the other buildings' FULL closed history, deployment's exact shape; 40s runtime; new reference panel 1893.4 / ALL-48 1913.3; 'cv all48oof wf' keeps the walk-forward variant
Thibaut Forest+1: Claude Opus 5 (1M context)
79a4af2
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
all48oof defaults to the oof arm only (THE SCORE); 'cv all48oof self' re-enables the validity-check arm and the flattery readout
Thibaut Forest+1: Claude Opus 5 (1M context)
11cbd93
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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 5
43761b5
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The 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>
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)
ab4b0fd
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phase 41-42: fixed-N ablation rejects the vrel port; public says pooling is a wash
Thibaut Forest+1: Claude Opus 5 (1M context)
41a82cd
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…
Phase 40: port the research loop's CV discipline + ship in-fleet pooling
Thibaut Forest+1: Claude Opus 5 (1M context)
c7d5d98
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…