Thibaut Forest Claude Fable 5 commited on
Commit
3704c62
·
1 Parent(s): e4aaa05

phase 68: T5 global-optimum probe (6 lanes) - all rejected with mechanisms; 60d65da stands as final

Browse files
EXPERIMENTS.md CHANGED
@@ -3493,3 +3493,58 @@ this feature space across our own features, the literature's, and the
3493
  readable competitors' - the ordering axis is closed from every direction
3494
  tried. PRIVATE SELECTION stands: 60d65da first, 4c93883 (measured
3495
  1575.31) as the no-inference alternative.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3493
  readable competitors' - the ordering axis is closed from every direction
3494
  tried. PRIVATE SELECTION stands: 60d65da first, 4c93883 (measured
3495
  1575.31) as the no-inference alternative.
3496
+
3497
+ ## Phase 68 - T5 global-optimum probe (6 structural lanes): ZERO adoptions - 60d65da is the honest optimum of this framing, search closed
3498
+
3499
+ User-directed final campaign ("it's a local optimum but probably not the
3500
+ global one") - four commissioned angles plus the two rank-3-derived
3501
+ prototypes, every arm paired vs 60d65da (1541.3), parity-verified,
3502
+ count-flat unless noted (reports agent_reports_bgkf/t5_*.md):
3503
+ - BASE REBUILD: competitor-style wide-space stacked base (78 leak-verified
3504
+ cols, 4-learner stack) IS a better dies42 classifier than logbag
3505
+ (per-fold OOF AUC 0.965 vs 0.938, 4/5 folds, biggest where labels are
3506
+ scarce) and it does NOT price: |delta| <= 9.2 (<=0.3sig) at every mixing
3507
+ weight. AUC gains live in separating obvious cases; cost lives in the
3508
+ fine ordering near the inclusion cutoff, which logbag already has.
3509
+ Base-model capacity is not the binding constraint.
3510
+ - JOINT SEARCH: 8-dim differential evolution, 90 evals, tune/validate
3511
+ origin split. Best tune delta -104; 100% of it sign-reverses on the
3512
+ held-out origins (top-3 all flip). The CV's resolution is exhausted at
3513
+ this scale - any future multi-dial "win" of this size is presumed noise
3514
+ unless it passes the same split.
3515
+ - SELECTION ARCHITECTURE: expected-gain (cost-based) selection at pinned
3516
+ count: best arm -5.0+/-28.8 (0.2sig); the geography term is a measured
3517
+ LOSS +27..+31/scen (2sig, robust across three geo-on/off contrasts).
3518
+ The rank-4 team's -14.6 selection edge exists only count-floating.
3519
+ - DATA WALL: learning curve 40->100% is shelf-not-slope (local slope ~0,
3520
+ p=.68); a hypothetical DOUBLED corpus prices at ~-44 [-100..0]; label
3521
+ audit recovers zero positives. The surface rewards building/failure-mode
3522
+ COVERAGE, not volume - the optimum is not gated on labels nobody has.
3523
+ - SEASONAL MARGIN (rank-3 recipe): the fleet seasonal factor is REAL here
3524
+ (p2p 0.0585 V in demeaned fleet-median voltage, matches their 0.048)
3525
+ but injecting it into the wiener barrier distance loses at every
3526
+ strength on both climatology maps (best arm +1.0, and the mild setting
3527
+ is significantly harmful, wilcoxon p=.031; one Dec origin +546 from a
3528
+ 2 mV shift). Their -104 lived in calibrated-probability expected-cost
3529
+ selection; in a rank-only frozen-count slot the factor only reorders,
3530
+ and it reorders worst where deaths cluster. Wrong lever, axis closed.
3531
+ - DRAWDOWN REFRAME (rank-3 core method, faithful rebuild): 1.72M
3532
+ (h,m)-conditioned censored drawdown rows from 71,878 battery-days, their
3533
+ exact HGB (450/.07/63/200), 107 causal features, fold-safe. Monotone-
3534
+ against dose response: alone +255.6 (3.9sig), as 4th source @.10 +14.1
3535
+ (0.7sig loss, best arm); survival-curve read strictly worse. OOF AUC
3536
+ 0.958 vs raw v_min_7's 0.961 - it learns first-passage of the LAGGING
3537
+ smoothed statistic while the champion sits on leading raw-voltage
3538
+ indicators. Their 1350.7 is their whole stack (expected-cost scheduler,
3539
+ seasonality, timing), not an order signal that transplants.
3540
+
3541
+ CONCLUSION: with T2-T5 plus peer transplants (~150 arms) the ordering,
3542
+ base-capacity, selection, data, seasonality and reframing axes are ALL
3543
+ closed with mechanisms. 60d65da (CV 1541.3, count-flat) stands as the
3544
+ genuine optimum of this framing at this instrument's resolution.
3545
+
3546
+ FINAL SELECTION (deadline 2026-08-23 23:59): private pick 60d65da first;
3547
+ 4c93883 (publicly measured 1575.31) as the no-inference alternative.
3548
+ e4745d2 publicly refuted (1594.89). Never 698401a. Count-coupled CV
3549
+ frontier (gated hazard+alpha 1398.0) remains report-only: the family is
3550
+ 0-for-4 on public conversion.
agent_reports_bgkf/t5_base.md ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T5 BASE-REBUILD lane: wide-feature stacked nonlinear base vs the linear order-primary — REJECTED (wash, not capacity-limited)
2
+
3
+ Date: 2026-08-23. Lane: BASE-REBUILD (T5 global-optimum probe).
4
+ Baseline: head config 60d65da, CV 1541.3 on bgkf (`/tmp/ref_head_1541.csv`;
5
+ parity re-verified through this lane's own driver: 1541.3, +0.0, swaps 2.27).
6
+ Champion order = .50*rank(logbag vm7) + .30*rank(WienerFHT) + .20*rank(gapHGB
7
+ on FEATURES+vmin7_rank+GAP4); values/counts always champion logbag (order-only
8
+ via blend w2=1.0).
9
+
10
+ ## Hypothesis
11
+
12
+ The champion's order primary is a bagged LOGISTIC on ~14 hand-picked snapshot
13
+ features. The rank-4 public competitor's base is a stacked nonlinear ensemble
14
+ over a wide multi-scale feature space. Grafts onto our pipeline all failed
15
+ (saturated local optimum) — this lane REBUILT the base as a unit: wide table +
16
+ stacked ensemble, and tested it as order primary / full order / diversity
17
+ partner.
18
+
19
+ ## Build
20
+
21
+ 1. WIDE TABLE (`/tmp/c29/build_wide.py` -> `/tmp/c29/wide.parquet`): 78
22
+ feature cols per (device_id, origin_idx), all 168 origins (real+synthetic),
23
+ strictly as-of-origin from the daily corrected-voltage series (beta 0.005
24
+ fixed): rolling {3,7,14,30,60,90,180,365}d x {mean,min,max,std,coverage,
25
+ masked-OLS slope}; window contrasts (mean/min/slope 7-30, 14-90, 30-180,
26
+ 60-365); days-since-min {30,90,180,365}; temp means {7,30,90};
27
+ v_last_c/data_gap_days; within-snapshot pct-ranks of v_last_c and 7d-min
28
+ globally/per-building/per-room; building/room device counts. Leak-freedom
29
+ verified by recomputing 25 random (device,origin) rows from the raw series
30
+ truncated at origin — 0 mismatches beyond float32 precision (2e-5).
31
+ Coverage >= 86% on every column.
32
+
33
+ 2. STACKED BASE (`/tmp/c29/run.py` StackBase): learners = HGB(depth3, lr.06,
34
+ 300it), HGB(depth2, lr.03, 600it), RF(350, min_leaf 5) on wide+FEATURES+
35
+ vmin7_rank+GAP4 (~96 cols), LogisticRegression on the champion's scaled
36
+ feature set; building-GroupKFold(4) OOF probabilities (deaths-sorted snake,
37
+ deterministic — the established contamination rule) -> LogisticRegression
38
+ (C=0.03) calibrator; learners refit on full fold-train. Fold-safe inside
39
+ .fit(train); memoized per outer fold. cv.py/models_cv.py md5-pinned per arm
40
+ (race guard); no repo files touched.
41
+
42
+ ## Results (paired vs head 1541.3, 48 scenarios; bgkf, p_star=1.0, split 3, tw 2.0)
43
+
44
+ | arm | order | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
45
+ |---|---|---|---|---|---|---|---|
46
+ | parity | champion .50/.30/.20 rebuilt | 1541.3 | +0.0±0.0 | 0.4σ | 1W/1L | – | 2.27 |
47
+ | arm_a | stack replaces logbag at .50 (+.30 wn +.20 gap) | 1549.4 | +8.1±48.0 | 0.2σ | 25W/19L | p0.441 | 2.28 |
48
+ | arm_b | stack as FULL order (w 1.0) | 1533.1 | -8.2±55.1 | 0.1σ | 30W/17L | p0.295 | 2.26 |
49
+ | arm_c | .50*rank(champ composite) + .50*rank(stack) | 1532.2 | -9.2±36.6 | 0.3σ | 24W/19L | p0.583 | 2.28 |
50
+
51
+ No arm reaches 1σ (adoption bar for a new mechanism: 2σ). Weight mini-sweep
52
+ not triggered (rule: only if a/c < 0 at >= 1σ). Swaps flat 2.26-2.28
53
+ everywhere — count-flat as designed.
54
+
55
+ Block structure (delta means): every arm WINS warmup s0-7 (arm_a -78, arm_b
56
+ -262, arm_c -104) and LOSES the panel s8-41 (+27 / +48 / +9); nearend ~+13.
57
+ The tiny negative means are entirely the 8 warmup scenarios; the 34-scenario
58
+ panel prefers the champion. Deltas are heavy-tailed (arm_b: s21 +1545, s0
59
+ -810, s12 +794, s28 -757) — hence SE 37-55 and no resolvable effect.
60
+
61
+ ## AUC comparison (dies42, building-OOF, closed rows at real origins)
62
+
63
+ | fold | n_test | deaths | logbag | STACK | wiener | gapHGB |
64
+ |---|---|---|---|---|---|---|
65
+ | 0 | 3056 | 123 | 0.962 | **0.974** | 0.929 | 0.969 |
66
+ | 1 | 1987 | 91 | 0.963 | **0.979** | 0.930 | 0.970 |
67
+ | 2 | 3661 | 80 | **0.968** | 0.962 | 0.939 | 0.974 |
68
+ | 3 | 967 | 71 | 0.837 | **0.930** | 0.833 | 0.893 |
69
+ | 4 | 7917 | 61 | 0.958 | **0.978** | 0.965 | 0.963 |
70
+
71
+ Stack beats logbag in 4/5 folds (mean per-fold 0.965 vs 0.938; +9.3 pts on
72
+ the hard fold 3, exactly where logbag collapses). Pooled-across-folds AUC is
73
+ lower for the stack (0.948 vs 0.957) only because its probability scale varies
74
+ more across fold fits — per-fold is the fair capacity read. Inner-OOF AUCs per
75
+ learner: h3 .947-.977, h2 .955-.977, rf .960-.977, lr .956-.972, meta .972-.981
76
+ — the linear learner is competitive with the trees even inside the wide space.
77
+
78
+ ## Verdict
79
+
80
+ REJECTED — hypothesis answered, both halves:
81
+
82
+ 1. **The capacity is real.** The rebuilt wide-space stacked base is a genuinely
83
+ better building-OOF dies42 classifier than the champion logbag (4/5 folds,
84
+ large margin where training deaths are scarce). The competitor-style base
85
+ CAN be built on this data and it does classify better. This is not a
86
+ feature-engineering or model-capacity failure.
87
+
88
+ 2. **The capacity does not price.** At every mixing weight (0.5 primary, 1.0
89
+ full, 0.5 diversity ensemble) plan cost is a wash (|delta| <= 9.2, <= 0.3σ,
90
+ wilcoxon p >= 0.29). Its classification edge concentrates in warmup/sparse-
91
+ label regimes (fold 3, s0-7) where scenario costs are small; in the panel
92
+ block that dominates THE SCORE, logbag's calibrated top ranks near the
93
+ inclusion cutoff are already sufficient, and the stack's reorderings there
94
+ are net-slightly-negative. Same mechanism as the t4 stacking lane
95
+ (`t4_stack.md`): dies42-AUC gains live in separating obvious cases, cost
96
+ lives in the fine ordering near the cutoff.
97
+
98
+ The linear order-primary is genuinely sufficient at this data size (461
99
+ devices, ~1130 death-rows): base-model capacity is NOT the binding constraint
100
+ on bgkf cost. Do not revisit base-model family swaps as a cost lever; any
101
+ future gain must come from a signal that reorders the marginal band
102
+ specifically (or from count/timing machinery, which is closed/tiered
103
+ separately).
104
+
105
+ Artifacts: /tmp/c29/build_wide.py, /tmp/c29/wide.parquet, /tmp/c29/run.py,
106
+ /tmp/c29/arms.out (incl. full AUC diag), /tmp/cv_bgkfcand_c29_{parity,arm_a,
107
+ arm_b,arm_c}.csv.
agent_reports_bgkf/t5_data.md ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T5 DATA-WALL: is label scarcity the binding constraint?
2
+
3
+ Baseline 60d65da champion, CV 1541.3 on bgkf (parity verified cell-exact vs
4
+ /tmp/ref_head_1541.csv: max per-origin diff 0.0). Champion = values
5
+ logbag(vm7), order .50 rank(logbag) + .30 rank(WienerFHT) + .20 rank(gapHGB),
6
+ planner p_star=1.0, split_days=3, timing_weight=2.0. All work in /tmp/c32/
7
+ (run.py driver, analyze.py + extrap.py analysis, cv_*.csv per-arm results,
8
+ arms.csv per-draw table, fold_arms.csv fold-level table). No repo file
9
+ touched; monkeypatch only; nothing committed.
10
+
11
+ ## Design
12
+
13
+ Learning curve: a model-class wrapper drops fold-TRAIN buildings inside
14
+ fit() before refitting BOTH the values primary and all three order sources;
15
+ test folds, planner state, and evaluator identical to the champion run.
16
+ frac=1.0 through the wrapper reproduces 1541.3 exactly (bit-faithful, every
17
+ origin 0.0). Two samplers, both stratified on per-building train death
18
+ count:
19
+
20
+ * v1 (`f*`): death-sorted list split into n_keep contiguous strata, one
21
+ building drawn per stratum. Structural quirk found post-hoc: at frac .8
22
+ the multi-building strata all sit at the HIGH-death end, so drops
23
+ concentrate on high-death buildings (keeps only ~63% of deaths at 79% of
24
+ buildings). Kept as an informative composition contrast, not discarded.
25
+ * v2 (`g*`): drops evenly spaced across the death-sorted list (random
26
+ offset), so kept-death fraction tracks the building fraction. This is the
27
+ clean volume axis. 5 seeds at .4/.6/.8/.9.
28
+
29
+ Count-flat caveat (by design, per the tasking): subsampling changes the
30
+ primary's p42 values, so the count machinery moves within each arm (swaps
31
+ 2.09-2.88 vs ref 2.27). The curve measures the WHOLE champion's data
32
+ response including that channel, not a values-frozen ordering response.
33
+
34
+ ## 1. Learning curve
35
+
36
+ Per-draw deltas vs 1541.3 (SCORE units; x = actual fraction of the 320
37
+ fold-train unique deaths kept, aggregated over folds):
38
+
39
+ | nominal | n draws | mean SCORE | delta | draw scatter (sd) | per-draw deltas |
40
+ |---|---|---|---|---|---|
41
+ | 40% | 8 | 1684.6 | +143.3 | 131.4 | +379, -19, +246 (v1); +171, +98, +173, +108, -10 (v2) |
42
+ | 60% | 8 | 1626.3 | +85.0 | 66.4 | +136, +225, +11 (v1); +72, +63, +60, +51, +62 (v2) |
43
+ | 80% | 8 | 1657.1 | +115.8 | 66.6 | +146, +198, +211 (v1); +57, +138, +40, +72, +65 (v2) |
44
+ | 90% | 5 | 1612.0 | +70.6 | 47.3 | +45, +93, +11, +136, +68 (v2) |
45
+ | 100% | 1 | 1541.3 | 0.0 | - | parity, exact |
46
+
47
+ v2-only (clean volume axis): x=0.42 -> +108; x=0.62 -> +62; x=0.76 -> +74;
48
+ x=0.89 -> +71; x=1.00 -> 0.
49
+
50
+ The shape is NOT a smooth data-volume law. It is a shelf plus a cliff:
51
+ any subsample from 60% to 90% costs a roughly constant +60..+75, and the
52
+ local slope on the v2 shelf 0.6->0.9 is -29.9 +/- 70.1 per unit
53
+ death-fraction (p=0.68) - i.e. per +10% data: -3.0 +/- 7.0, statistically
54
+ zero. The drop to 0 happens only at exactly 100%, which is the
55
+ zero-perturbation parity point (the alpha=1.0 count appetite and every dial
56
+ were tuned on the full-data model); the shelf offset is perturbation +
57
+ composition cost, not marginal data value.
58
+
59
+ Composition dominates volume, three independent lines:
60
+
61
+ * Matched death-fraction ~0.63-0.65: v1 draws (drops hit high-death
62
+ buildings) +185.0 mean vs v2 draws (even drops) +80.7 mean. Same label
63
+ count, 2.3x the damage when the lost labels come from high-death
64
+ buildings.
65
+ * Two 40%-of-corpus draws MATCH full data (f40s1 -18.7, g40s4 -10.5): the
66
+ model family already saturates on a favorable 40% subset (~32-37% of
67
+ rows, ~39-42% of deaths).
68
+ * Fold-level paired regression (150 fold x arm points, delta fold cost vs
69
+ deaths dropped): slope +24.0 per dropped unique death (~ +0.5 SCORE per
70
+ death; p=0.009) but r=0.21 - deaths-dropped explains only ~4% of the
71
+ variance; which buildings dropped explains the rest.
72
+
73
+ ## Extrapolation to 150% / 200% data (honest bounds)
74
+
75
+ Fits on all draws + the exact 100% anchor, x = kept-death fraction;
76
+ bootstrap resampled within levels, 3000 reps; gains measured against each
77
+ fit's OWN y(1) so the fit's anchor miss does not inflate them:
78
+
79
+ | fit (v2-only + anchor) | y(1.0) | gain at x=1.5 | gain at x=2.0 |
80
+ |---|---|---|---|
81
+ | power y = c + a*x^-b | 1586.8 (misses true 1541.3 by +45.5) | -25.7 [-47..0] | -43.7 [-80..0] |
82
+ | log y = b0 + b1*ln x | 1586.4 (miss +45.1) | -26.6 [-58..+3] | -45.5 [-100..+5] |
83
+
84
+ (All-draws fits: gain200 -35 [-103..-9] power, -90 [-162..-10] log; the log
85
+ fit is dragged steep by the v1 composition-skewed deep cuts and misses the
86
+ known anchor by +38 - treat it as an upper bound on optimism.)
87
+
88
+ Both parametric families overshoot the known 100% point by ~+45: the data
89
+ reject a smooth volume curve, and the smooth-fit gains are therefore
90
+ upper-ish bounds. Face value: +50% more same-kind data buys ~26 SCORE,
91
+ doubling buys ~44, with 95% bounds touching 0 in the clean (v2) fits.
92
+ The local shelf slope says the marginal value of same-kind data at the
93
+ current corpus size is indistinguishable from zero.
94
+
95
+ Big caveat the curve cannot price: "same-kind" is load-bearing. Data
96
+ containing NEW failure modes (the public fleet's uncatchable tail /
97
+ train-absent ghosts, public-measured 4x) is a distribution-shift question,
98
+ not a volume question - this probe says nothing about it.
99
+
100
+ ## 2. Label audit
101
+
102
+ Ledger: 82 devices with an eol; 80 with eol <= last origin (2026-07-27);
103
+ 2 died 2026-07-28 (after the last origin, before data end 07-31).
104
+
105
+ * bgkf convention (origin <= max-42d): ALL 80 observable deaths appear as
106
+ dies42=1 in at least one closed row. ZERO deaths lost. The window_closed
107
+ column convention likewise loses zero (82/82 incl. the two late deaths).
108
+ * walk_forward's comment ("every death <= origin lands in some closed
109
+ window") verified on the actual table: holds at 47/48 real origins;
110
+ violated once, transiently, at 2025-10-06 (1 of 12 deaths not yet in a
111
+ closed window - the 4d synthetic grid had not yet closed a window
112
+ containing it). Immaterial: fold train sets use the max-origin cut.
113
+ * Recoverable rows the convention DOES discard: 69 open-window rows with
114
+ dies42=1 (8 devices, of which only 2 devices - the 07-28 deaths - are
115
+ entirely absent from closed-window positives).
116
+ * Recovery arm (`aug`): champion refit on train + those recovered positive
117
+ rows (train buildings only), values + all order sources. Result: SCORE
118
+ 1570.1, +28.8 +/- 24.1 vs 1541.3 (1.2 sigma), 15W/33L, Wilcoxon p=0.147.
119
+ Swaps 2.28 vs ref 2.27 - count effectively flat, so the (insignificant)
120
+ harm is not an appetite artifact. No usable signal is being discarded;
121
+ adding near-boundary positive rows without their matching negatives
122
+ slightly distorts the base rate for nothing.
123
+
124
+ ## 3. Per-fold death count vs cost
125
+
126
+ Raw 5-fold regression (parity run): train_deaths 58/62/66/65/69 vs mean
127
+ test cost 426/263/336/291/224 -> slope -14.3 per death (r=-0.77, p=0.13),
128
+ but this is confounded: folds with fewer train deaths are exactly the folds
129
+ whose TEST buildings hold more deaths (22/18/14/15/11), i.e. harder fleets.
130
+ The clean version is the paired fold x arm regression above (+24.0 per
131
+ dropped death, p=0.009, r=0.21), which corroborates a real but weak volume
132
+ effect swamped by composition.
133
+
134
+ ## VERDICT
135
+
136
+ Label volume is NOT the binding constraint; the champion model family is
137
+ data-saturated on this corpus. The learning curve is flat from 60% to 100%
138
+ of the data (local slope ~0, p=0.68), favorable 40% subsets already
139
+ reproduce 1541.3, and even the optimistic smooth-fit extrapolation prices a
140
+ DOUBLED corpus at ~-44 SCORE [-100..0] - far less than the method-search
141
+ deltas this repo routinely adjudicates, with bounds touching zero. The
142
+ label audit closes the other escape hatch: the training convention discards
143
+ essentially nothing (0 of 80 observable deaths lost; recovering the 69
144
+ discarded open-window rows is a wash at best, +28.8 +/- 24.1).
145
+
146
+ What the response surface actually rewards is COVERAGE - specific
147
+ high-death buildings carry non-redundant failure-mode information (same
148
+ label count, 2.3x damage when they are the ones missing). Consequences for
149
+ the T5 probe: (a) further same-kind data would not move the CV much, so the
150
+ global optimum is not gated on labels nobody has; (b) capacity/structure
151
+ search on this corpus is also near its ceiling for THIS champion family
152
+ (flat shelf = the extra 40% of data adds nothing the model can use);
153
+ (c) the remaining headroom, if any, lives in mechanisms that generalize
154
+ across failure modes / fleets (distribution shift), which neither this
155
+ curve nor more of the same labels can buy.
agent_reports_bgkf/t5_drawdown.md ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T5 drawdown-survival campaign (rank-3 team's method, v1+v2) — NEGATIVE
2
+
3
+ DRAWDOWN agent, 2026-08-23 ~21:25-22:15. Champion = head 60d65da replica
4
+ (CV 1541.3, order .50 lb / .30 wiener / .20 gapHGB, split_days=3,
5
+ timing_weight=2.0). Reference /tmp/ref_head_1541.csv (asserted 1541.312).
6
+ Work dir /tmp/c33/ (common.py, build_corpus.py, train_fold.py, run.py,
7
+ diag.py, cv_bgkfcand_c33_*.csv, dd_f{0..4}.parquet).
8
+
9
+ ## Method under test (from /tmp/hf_battery3/sackriti/README.md, their
10
+ building-OOF 1350.68 vs our 1541.3)
11
+
12
+ EOL label is deterministic (first day smoothed gm series <= 2.40V; our
13
+ 81/82-exact recipe, agent_reports_bgkf/t3_gm.md). So "fails within h days"
14
+ == "gm draws down by >= m within h days", m = current margin above 2.40.
15
+ Train ONE survival model with (h, m) as INPUT features — every battery-day
16
+ x horizon x margin is a labeled row (their "454 positives -> 2.0M labeled
17
+ questions" move).
18
+
19
+ ## Build (faithful v1)
20
+
21
+ - Corpus: 71,878 table rows (all 168 origins) x 10 horizons
22
+ {7,14,21,28,42,63,90,130,180,260} x 3 margins (actual margin, weight 2 /
23
+ oversampled per their recipe, + 2 random U[0.01,0.25]) = 1,721,248 kept
24
+ examples after conservative censoring (no-event windows past a device's
25
+ last defined gm day dropped). Positive rate 1.4% (h=7) -> 62.3% (h=260);
26
+ deployment-query positive rate 4.05%; gm coverage 99.7% of table rows.
27
+ - Features (107): 13 BASE + vmin7_rank + GAP4 + 7 gm cols (t3 exact-label
28
+ statistic) + 78 leak-verified as-of-origin cols (/tmp/c29/wide.parquet,
29
+ t5_base) + query terms h, m, m/h, log m. No seasonality factor (their
30
+ -104 lever; see verdict).
31
+ - Model: HistGradientBoostingClassifier, their hyperparams (450 iters,
32
+ lr .07, 63 leaves, min leaf 200, no early stop), 2-seed ensemble.
33
+ - Fold-safe: per outer bgkf fold, trained ONLY on fold-train devices'
34
+ corpus rows (900k-row cap subsample; futures of fold-train devices are
35
+ known within fold — deployment-legal); per-fold OOF scores cached and
36
+ looked up by the arm class inside the untouched cv harness.
37
+ - Query v1: P(drawdown >= actual margin within 42d) at (h=42,
38
+ m=clip(gm_gap,.005)). Query v2: expected-time-to-cross proxy = area
39
+ under the monotone-clipped survival curve over h in {7..130} (their
40
+ 108-horizon curve read, order-equivalent). No-gm devices (0.3%) fall
41
+ back to champion-primary rank. Values stay champion logbag; order-only.
42
+
43
+ ## OOF signal quality (real origins, n=19,890, 454 dying rows, true OOF)
44
+
45
+ AUC dies42: dd 0.9580 vs -v_min_7 0.9609, -gm_gap 0.9387. Median
46
+ dying-device within-origin rank: dd 13 vs v_min_7 10. The 2M-row (h,m)
47
+ augmentation DID beat its own input statistic (gm_gap) but does not catch
48
+ the champion's leading raw-voltage indicators.
49
+
50
+ ## Arms (kind='logbag' variant='vm7' blend=(arm,1.0) p_star=1.0,
51
+ split_days=3, timing_weight=2.0; paired vs 1541.3, 48 origins; all
52
+ count-flat by construction — values untouched)
53
+
54
+ | arm | what | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
55
+ |------------|-----------------------------------------|--------|--------------|-----|-------|----------|-------|
56
+ | parity | champion order3 replica | 1541.3 | +0.0, maxabs 0.00 | — | — | — | 2.27 |
57
+ | dd_alone | dd rank alone (order w 1.0) — unit test | 1796.9 | +255.6±65.2 | 3.9 | 14/32 | .001 | 2.32 |
58
+ | dd_primary | dd replaces logbag at .50 | 1639.0 | +97.7±59.0 | 1.7 | 23/23 | .422 | 2.31 |
59
+ | dd_blend | 50/50 champion-order rank + dd rank | 1599.9 | +58.6±49.9 | 1.2 | 20/24 | .165 | 2.30 |
60
+ | dd_4th | 4th source at .10 (.45/.27/.18/.10) | 1555.4 | +14.1±20.7 | 0.7 | 10/15 | .411 | 2.29 |
61
+ | dd2_alone | v2 survival-curve (ETT) rank alone | 1873.3 | +332.0±66.5 | 5.0 | 11/36 | .000 | 2.30 |
62
+ | dd2_4th | v2 ETT as 4th source at .10 | 1567.9 | +26.5±25.4 | 1.0 | 12/18 | .360 | 2.29 |
63
+
64
+ Dose-response is monotone: dd weight 1.0 -> .50 -> .50-of-order -> .10
65
+ gives +256 -> +98 -> +59 -> +14. Pure drag, not a complementary signal.
66
+ The v2 curve read is strictly worse than the v1 point query at both
67
+ weights — the query shape is not the weakness; the model's ordering is.
68
+
69
+ Per-block texture (delta vs champion): dd_alone/dd_primary WIN warmup
70
+ s_0-7 (-104 / -90: short-history origins where the champion is data-poor)
71
+ but lose it back 3x in the panel (+343 / +158) and nearend (+238 / +6).
72
+ Catastrophic single origins: s21 +1179 (alone) / +1626 (primary), s17,
73
+ s23. A warmup-gated blend would be an 8-origin post-hoc cherry-pick —
74
+ report-only by the tiered adoption rules; not pursued.
75
+
76
+ ## Verdict
77
+
78
+ **Comprehensively negative. No arm improves at any sigma; nothing
79
+ approaches any adoption tier (new mechanism would need 2sigma+ WIN; best
80
+ arm is a 0.7sigma LOSS). Do not ship; no deployment integration needed.**
81
+
82
+ Why the rank-3 method didn't transplant: (1) the drawdown model learns
83
+ first-passage of the LAGGING gm statistic — t3 already showed v_min_7
84
+ anticipates it by construction (min <= median-of-medians), and the
85
+ champion's logbag/wiener/gapHGB already sit on those leading indicators;
86
+ (2) their 1350.68 is the product of their WHOLE stack — expected-cost
87
+ selection/timing/routing priced from the survival curve against the
88
+ evaluator's real accounting, seasonal common factor (-104 on their own
89
+ base), 2-day timing shift — not of the order signal alone. Our harness
90
+ isolates the order contribution, and it is negative everywhere. Porting
91
+ their scheduler is a planner-axis project, not a tonight order tweak
92
+ (appetite axis is CLOSED per standing decision).
93
+
94
+ Replication value kept: /tmp/c33 pipeline (corpus builder + fold-safe
95
+ OOF trainer) is a clean reusable template for (h,m)-parameterized label
96
+ augmentation; parity replica remains exact (maxabs 0.00).
agent_reports_bgkf/t5_joint.md ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T5 JOINT-OPTIMIZATION probe: is 60d65da only a *coordinate-wise* optimum?
2
+
3
+ **Date** 2026-08-23 · **Lane** /tmp/c30 · **Baseline** 60d65da = CV 1541.3 on bgkf
4
+ (ref `/tmp/ref_head_1541.csv`) · **Verdict: NO joint structure — the CV's
5
+ resolution is exhausted; the tune-vs-validate gap (+164 to +192) proves the
6
+ apparent joint wins are noise-fitting.**
7
+
8
+ ## Question
9
+
10
+ Every champion dial was tuned one-at-a-time (order weights .50/.30/.20 bowl-
11
+ mapped; planner timing_weight=2.0 / split_days=3; gap-HGB lr=.06 / l2=1.0;
12
+ alpha=1.0). One-dial search can only find axis-aligned optima. Is there a
13
+ better point reachable only by moving several dials AT ONCE?
14
+
15
+ ## Method
16
+
17
+ 8-dim derivative-free joint search over: order-weight simplex
18
+ (w_lb/w_wn/w_gap, softmax-parametrized), discrete-hazard 4th order source
19
+ weight whz [0,.15] (c17 DiscHazHGB, reused verbatim), gap-HGB lr [.02,.18]
20
+ and l2 [.05,20] (log-scale, quantized), timing_weight [1,4], split_days
21
+ {2..5}, wiener K_SHRINK [3,12]. Counts untouched throughout: value-preserving
22
+ blend on the primary logbag p42 values, p_star=1.0 fixed (count axis publicly
23
+ refuted). Cached harness: primary/wiener/hazard fits once per fold, gap-HGB
24
+ refit per (lr,l2), per-cell rank blend + re-plan (Ft2RUL-exact arithmetic,
25
+ incl. the round-to-12 weight rule).
26
+
27
+ **Overfitting guard (non-negotiable with 48 scenario totals):** origins split
28
+ TUNE = 24 even / VALIDATE = 24 odd (interleaved → warmup/panel/nearend
29
+ balanced in both halves; note TUNE mean 1642.8 vs VALIDATE 1439.8 — even
30
+ origins are the harder half). Search objective = paired mean delta vs
31
+ reference on TUNE only. VALIDATE touched exactly once, for the top-3.
32
+ Full-48 read only for a candidate whose VALIDATE delta is also <0 at >=1
33
+ sigma.
34
+
35
+ **Parity gates (passed before any search):**
36
+ - P1: reconstructed champion predictions bit-exact vs the c11 captured
37
+ Ft2RUL cells — 240/240 cells, worst |dp42| = 0.0.
38
+ - P2: champion through this harness = SCORE 1541.3122, delta +0.000000,
39
+ swaps 2.27, max per-cell cost delta vs reference 1.1e-13.
40
+
41
+ ## Search trace
42
+
43
+ Differential evolution (pop 16 incl. champion, best/1/bin, F=0.5-0.8,
44
+ CR=0.85), **90 evaluations** (16 init LHS + 5 generations, 1586 s), every
45
+ eval logged in `/tmp/c30/search.jsonl`.
46
+
47
+ - best TUNE delta **-104.4 ± 49.6** (2.1 sigma on TUNE, 16W/7L)
48
+ - median of all 90 evals -18.3, worst +155.1
49
+ - swaps 2.24-2.27 everywhere (count-flat by construction, verified)
50
+
51
+ The DE converged into one corner, far from the champion: wiener nearly
52
+ deleted (w_wn ~= .03 vs .30), gap-HGB dominant (w_gap ~= .56 vs .20), hazard
53
+ weight pinned at its cap (.15 vs 0), l2 pushed to 7-20, timing_weight 3.5-4,
54
+ split_days 2, K 9-10. Best-15 evals all share this shape.
55
+
56
+ ## Top-3: tune vs validate (THE measurement)
57
+
58
+ | rank | cfg (wwn/wgap/whz/lr/l2/tw/sd/K) | TUNE delta | VALIDATE delta | gap | pass |
59
+ |---|---|---|---|---|---|
60
+ | 1 | .034/.563/.150/.035/7.39/3.49/2/9 | **-104.4 ± 49.6** | **+67.3 ± 59.4** (11W/12L) | **+171.7** | NO |
61
+ | 2 | .034/.563/.150/.030/7.39/4.00/2/9 | -100.9 ± 49.9 | +63.5 ± 56.7 (13W/10L) | +164.3 | NO |
62
+ | 3 | .051/.551/.150/.040/7.39/4.00/2/8 | -93.7 ± 49.0 | +98.8 ± 59.7 (9W/13L) | +192.4 | NO |
63
+
64
+ All three candidates are WORSE than the champion on the never-touched half —
65
+ not merely attenuated, sign-REVERSED. The tune-validate gap (+164 to +192) is
66
+ ~1.7x the size of the apparent improvement itself. (Report-only arithmetic:
67
+ top-1's deterministic full-48 combination would be (-104.4+67.3)/2 = -18.5,
68
+ ~0.5 sigma of a full-48 SE — nothing even before the guard.)
69
+
70
+ **No full-48 read was earned** (protocol: validate-pass required). No
71
+ candidate goes forward.
72
+
73
+ ## Interpretation
74
+
75
+ 1. **Joint search finds no structure that coordinate-wise search missed.**
76
+ The champion (delta 0 by parity) is the only point in 90 joint evaluations
77
+ whose TUNE performance survives contact with held-out origins.
78
+ 2. **The CV's resolution is exhausted at this granularity.** A 24-origin
79
+ paired objective hands a free-moving 8-dim search ~2-sigma of purchasable
80
+ noise (-104 on TUNE), and 100% of it evaporates on the odd origins. Any
81
+ future tuning claim of this size from a multi-dial search should be
82
+ presumed noise unless it passes exactly this kind of split.
83
+ 3. The corner the search ran to (gap-source dominant, hazard maxed, wiener
84
+ deleted, tw~4/sd=2) is consistent with earlier single-axis evidence that
85
+ those directions are flat-to-worse (c17 hazard arms, gap-weight sweep at
86
+ 274f134) — the DE simply assembled the individually-insignificant noise
87
+ directions into one TUNE-half mirage.
88
+
89
+ ## Artifacts
90
+
91
+ - `/tmp/c30/joint.py` (harness), `/tmp/c30/driver.py` (stages),
92
+ `/tmp/c30/search.jsonl` (all 90 evals), `/tmp/c30/summary.json`,
93
+ `/tmp/c30/driver.log`.
94
+ - No tracked repo file modified; models monkeypatched only; planner attrs
95
+ snapshot/restored around every candidate; source md5-pinned at start /
96
+ pre-validate / end (unchanged).
agent_reports_bgkf/t5_seasonal.md ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T5: fleet-level seasonal common factor as a MARGIN adjustment — REJECTED
2
+
3
+ Idea (rank-3 team's README, cached /tmp/hf_battery3/sackriti/README.md): a
4
+ fleet-level seasonal swing in voltage (their p2p 0.048 V vs near-death slope
5
+ 0.0022 V/day) supplies part of the 42d drawdown by calendar alone; worth
6
+ −104 OOF for them. Distinct from the rejected MnesisLab temp transplant
7
+ (t4_transplant.md): (i) the factor is a cross-sectional median of
8
+ per-device-demeaned smoothed voltage, so sensor noise averages out; (ii) it
9
+ adjusts the wiener MARGIN d, not the rank weights — no competing order source.
10
+
11
+ Baseline champion 60d65da: CV 1541.3 (order .50 logbag(vm7) + .30 WienerFHT
12
+ + .20 gapHGB; split_days=3, timing_weight=2.0; ref /tmp/ref_head_1541.csv).
13
+ Artifacts: /tmp/c34/ (build_factor.py, run.py, ef.csv, factor.csv, per-arm CSVs).
14
+
15
+ ## Factor build (leak-free, all-trailing)
16
+
17
+ Validated smoothing recipe (t3_gm.md): temp-gated (10,30) exclusive daily
18
+ medians, day valid iff >=5 gated readings, calendar grid, rolling(7,
19
+ min_periods=3).median(). Factor(d) = median over devices of [v_smooth(dev,d)
20
+ − trailing 90d mean]; require >=20 devices (median 302). 1258 factor days
21
+ 2023-02-20 → 2026-07-31. **p2p 0.0585 V** (min −0.0485 @ 2025-11-26, max
22
+ +0.0100 @ 2025-07-24) — matches their reported 0.048 V scale, and the
23
+ Sep→Nov descent is real in our fleet too.
24
+
25
+ ## expected_fall constructions (per origin, strictly-past climatology, ±7d doy smoothing, wrapped)
26
+
27
+ 1. **ef_lvl** (task spec, literal): current factor level − min next-42d clim,
28
+ clamped >=0. **Degenerate: 4/48 nonzero, max 0.005.** The realized
29
+ demeaned factor has larger amplitude than the 2-year smoothed climatology,
30
+ so the level sits below the clim min almost everywhere. Fails its own
31
+ sanity check (nonzero only in summer). Not run as an arm.
32
+ 2. **ef** (clim-vs-clim): clim(doy(origin)) − min next-42d clim, clamped.
33
+ 19/48 nonzero, max 0.0107. Sanity OK: peaks entering autumn (Sep origins
34
+ 0-2: 0.004-0.006; Jul origins 43-47: 0.005-0.011 anticipating the August
35
+ descent), zero Mar-Jun. But zero through Oct-Feb: current-year days inside
36
+ the ±7d doy window drag clim_now down during the descent (vintage
37
+ asymmetry), zeroing ef exactly where 46/82 deaths cluster.
38
+ 3. **ef2** (prior-years-only): climatology fit on days < origin−21d, so
39
+ clim_now near today's doy has no current-year days. 37/48 nonzero, mean
40
+ 0.0026, max 0.0114; engages Sep-Oct (0.001-0.008), Jan-Feb bump
41
+ (0.005-0.008), Jul (0.006-0.011); zero Dec and Mar-Jun.
42
+
43
+ expected_fall per origin block (ef / ef2, volts): Sep 0.004-0.006 / 0.004-0.008;
44
+ Oct-Nov 0 / 0.001-0.0025; Dec 0 / ~0; Jan-Feb 0-0.002 / 0.002-0.008;
45
+ Mar-Jun ~0 / ~0; late Jun-Jul 0.005-0.011 / 0.003-0.011. Shape is right:
46
+ ~0 in spring, largest entering autumn. Magnitude ~3-5 days of near-death aging.
47
+
48
+ ## Arms (paired vs 1541.3; s scales expected_fall inside d_eff = clip(d − s·ef, 1e-6, ·) in the .30 wiener slot)
49
+
50
+ | arm | ef map | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
51
+ |---|---|---:|---:|---:|---:|---:|---:|
52
+ | s_ctl (parity) | — | 1541.3 | +0.0±0.0 | 0.4σ | 1/1 | — | 2.27 |
53
+ | s_w05 | ef, s=0.5 | 1542.9 | +1.6±1.0 | 1.6σ | 1/6 | p0.031 | 2.27 |
54
+ | s_w10 | ef, s=1.0 | 1542.8 | +1.5±1.2 | 1.2σ | 2/5 | p0.219 | 2.27 |
55
+ | s_w15 | ef, s=1.5 | 1542.3 | +1.0±1.2 | 0.9σ | 3/4 | p0.578 | 2.27 |
56
+ | s_w20 | ef, s=2.0 | 1542.5 | +1.1±1.3 | 0.9σ | 3/4 | p0.578 | 2.27 |
57
+ | s_both10 | ef, s=1.0 + gap cols adj | 1549.5 | +8.2±10.5 | 0.8σ | 4/7 | p0.365 | 2.27 |
58
+ | s2_w05 | ef2, s=0.5 | 1554.4 | +13.1±11.4 | 1.1σ | 1/8 | p0.008 | 2.27 |
59
+ | s2_w10 | ef2, s=1.0 | 1553.7 | +12.4±11.4 | 1.1σ | 3/6 | p0.203 | 2.27 |
60
+ | s2_w15 | ef2, s=1.5 | 1562.1 | +20.8±14.6 | 1.4σ | 5/7 | p0.380 | 2.27 |
61
+
62
+ Parity control exact (two origins differ by float noise from HGB threading,
63
+ mean +0.0). Counts fixed by the value-preserving blend; swaps 2.27 everywhere.
64
+
65
+ ## Mechanism of the losses
66
+
67
+ - ef arms only ever change plans at origins 43-47 (Jul 2026). o47 loses
68
+ +45.3 at EVERY s; net +1.0..+1.6 across the whole grid. The Sep origins
69
+ (ef 0.004-0.006) produce zero plan changes — the rank shifts never flip a
70
+ decision there.
71
+ - ef2 arms engage the winter block and it is worse: s2_w10's delta is
72
+ dominated by a single +546 blowup at o17 (2025-12-29, ef2 only 0.0019) —
73
+ mis-ordering in the death-cluster months is exactly where cost is most
74
+ leveraged, and a fleet-common margin shift interacting with per-device
75
+ (m, s2) reorders the wrong devices there. Monotone worse with s
76
+ (+13.1 → +12.4 → +20.8).
77
+ - s_both10 (gap columns also adjusted): HGB retrained on adjusted features
78
+ sloshes ±250-330 at ef≈0 origins — variance, no signal.
79
+
80
+ ## Neighbor-consistency and tier verdict
81
+
82
+ No s value wins anywhere on either ef map. Neighbors corroborate a
83
+ consistent HARM: ef grid uniformly +1.0..+1.6 (s_w05 wilcoxon p=0.031
84
+ against us), ef2 grid monotonically worse (s2_w05 1W/8L p=0.008). Under the
85
+ tiered bar (new mechanism, >=2σ + neighbor corroboration) this is a clean
86
+ **REJECT** — not "no effect" but a measured negative at every dial setting.
87
+
88
+ Why it worked for them and not us: their −104 OOF came inside a 122-feature
89
+ survival classifier with expected-cost selection, where the seasonal term
90
+ recalibrates absolute probabilities and timing. In our champion the wiener
91
+ is an ORDER source only (rank, counts frozen), so a fleet-common margin
92
+ scalar acts solely through the nonlinear (m, s2) x d reordering — a much
93
+ weaker and evidently miscalibrated lever. The margin axis via seasonal
94
+ climatology is CLOSED; do not revisit as a rank-side tweak.
agent_reports_bgkf/t5_select.md ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T5 selection-architecture lane — count-PINNED expected-gain selection (2026-08-23)
2
+
3
+ Question: the rank-4 public competitor selects by MARGINAL EXPECTED GAIN
4
+ (risk x (no_schedule_cost - scheduled_cost) - (1-risk) x early_cost -
5
+ service), with a geography-aware emergency term inside no_schedule_cost
6
+ (their ablation: that term alone -14.6/scen in THEIR architecture). As a
7
+ rank TILT on our champion order it is catastrophic (+135..+452, measured
8
+ this evening — DEAD). Is the ARCHITECTURE — selecting by expected gain
9
+ instead of blended rank, at the champion's exact count — any better?
10
+
11
+ Baseline: 60d65da head = Ft2RUL (values logbag(vm7), order .50 lb + .30
12
+ wiener + .20 gapHGB), plan_tsroute alpha 1.0 / ec_margin .8 / split_days 3
13
+ / timing_weight 2.0. SCORE 1541.3 (/tmp/ref_head_1541.csv).
14
+
15
+ ## Harness (/tmp/c31/, repo untouched)
16
+
17
+ - Cells: private copy of the T2 prediction cache (/tmp/c31/cells.pkl,
18
+ md5-pinned b093b6b7…) — per-(fold,origin) champion predictions captured
19
+ through a real `cv.run_bgkf(kind='@deployed')`. Re-planned at the head
20
+ planner state it reproduces /tmp/ref_head_1541.csv **bit-exactly
21
+ (240/240 cells, max diff 0.0)** — the parity gate, passed before any arm.
22
+ - Intervention: injected `rank_score` column only (plan_tsroute's own
23
+ documented order hook), planner code UNCHANGED. `p42` untouched, so
24
+ n = round(alpha·sum p42) is identical per cell; the break-even top-up
25
+ runs identically (curve-based, order-independent). Injecting
26
+ rank_score = p42 is plan-inert (asserted per cell) — the plumbing adds
27
+ nothing.
28
+ - Count pin verified from the realized plans: swaps 2.26 vs 2.27, per-cell
29
+ set size identical in 238/240 cells; the 2 exceptions (f1/s_46, f3/s_45,
30
+ both near-end) are −1 battery because the non-empty break-even set is
31
+ already inside the EG top-n so the union shrinks — same in every arm.
32
+ - risk = pred['p42'] (the cached Ft2RUL output IS the blend-rank-mapped
33
+ calibrated probability: primary logbag(vm7) sorted values reassigned in
34
+ 3-way-blend order — both roles the mission allows, one column).
35
+ - Expected gain, battery-varying terms only (the constant in-plan service
36
+ cost time_per_battery is order-invariant at pinned count — dropped):
37
+ `EG = park + p42·obs_frac·geo − min_d curves[b,d]`
38
+ where park/curves = mc.cost_curves exactly (park replica asserted to
39
+ 0.0 on all 240 cells), obs_frac = censor-masked death mass, and geo
40
+ mirrors the evaluator's emergency loop per miss: round-trip travel +
41
+ building change (skipped at the base building) + room change + swap
42
+ (visit_h), overtime 2·max(clock−8,0) with clock = visit_h + return leg
43
+ (mean-field self-carry of the evaluator's return-leg double-count
44
+ quirk), daily-limit 100·(clock>24), weekly share 100·min(visit_h/24,1).
45
+ Geography is real here: 3 of 24 buildings are 7.8–10.25h out; a
46
+ dedicated miss trip there costs ~90–140 beyond late-days vs ~11 nearby.
47
+
48
+ ## Arms (paired vs 1541.3 on 48 origin-sums; swaps 2.26 everywhere)
49
+
50
+ | arm | selection order | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
51
+ |---|---|---|---|---|---|---|---|
52
+ | ega (full EG) | park + p·geo − minC | 1567.2 | +25.84±25.33 | 1.0 | 12/16 | .350 | 2.26 |
53
+ | egb (geo OFF) | park − minC | 1536.3 | −4.99±28.79 | 0.2 | 16/11 | .822 | 2.26 |
54
+ | egc (blend) | .5 rank(p42) + .5 rank(EG) | 1574.5 | +33.14±14.17 | 2.3 | 2/10 | .016 | 2.26 |
55
+ | egc_ng (blend, geo off) | .5 rank(p42) + .5 rank(EG_nogeo) | 1546.1 | +4.80±15.29 | 0.3 | 5/5 | .846 | 2.26 |
56
+ | egd (compact gate on ega) | geo only where mean visit_h≤8h | 1563.3 | +21.94±26.03 | 0.8 | 12/16 | .412 | 2.26 |
57
+
58
+ Geography term isolated (paired arm-vs-arm, same cells):
59
+
60
+ | contrast | delta±SE | sig | W/L | wilcoxon |
61
+ |---|---|---|---|---|
62
+ | geo term (ega−egb) | +30.83±15.60 | 2.0 | 2/11 | .033 |
63
+ | gated geo (egd−egb) | +26.93±15.35 | 1.8 | 2/9 | .067 |
64
+ | geo inside blend (egc−egc_ng) | +28.34±14.64 | 1.9 | 0/7 | .016 |
65
+
66
+ The compactness gate is nearly inert in our fold geometry: 215/240 cells
67
+ have mean dedicated-trip hours ≤ 8h, so the gate leaves geo on almost
68
+ everywhere (egd ≈ ega).
69
+
70
+ ## Mechanism (why the architecture loses at pinned count)
71
+
72
+ Churn vs the champion set (~45 batteries across ~40 cells per arm):
73
+
74
+ | arm | churned batteries | mean p42 | true death rate | remote (visit_h>8) |
75
+ |---|---|---|---|---|
76
+ | ega dropped | 46 | .276 | **23.9%** (11/46) | 15% |
77
+ | ega added | 44 | .129 | **6.8%** (3/44) | 23% |
78
+ | egb dropped | 46 | .279 | 23.9% (11/46) | 22% |
79
+ | egb added | 44 | .105 | 9.1% (4/44) | 7% |
80
+
81
+ p42 is CALIBRATED on both sides (realized death rates match the mean p42).
82
+ Expected gain deliberately trades likely-deaths for expensive-if-missed:
83
+ it drops ~.28-probability batteries to add ~.11-probability ones whose
84
+ miss would be costly (geo) or whose curves look sharp. At a PINNED count
85
+ that is a pure recall sacrifice — ~7 extra true misses across the panel,
86
+ each costing late-days plus a dedicated emergency trip (T2: 154/scen of
87
+ ops cost rides on misses). The geo term makes it strictly worse by
88
+ steering the added slots toward remote insurance (23% remote adds vs 7%
89
+ without geo). Since a miss's cost ≈ p42·(late_days + geo) and late-days
90
+ (~hundreds) dominate geo (~11–140), ordering by p42 is already
91
+ near-optimal for the dominant term; EG's deviations from it mostly inject
92
+ day-quantile curve-estimation error into a slot-limited decision. Worst
93
+ at warmup origins (egb +38/scen s_0-7), where the curves are shakiest.
94
+
95
+ egb (geo-off margin, park − minC) is the only non-losing arm and it is a
96
+ wash: mean −5.0 carried by single-cell coin flips (s_12 −668, s_15 −457
97
+ vs s_21 +427, s_4 +384), 5%-trimmed mean +1.7, Wilcoxon p .82. Panel
98
+ block −17.0±38 (0.4σ, 12W/8L p .67) — nothing approaches any bar.
99
+
100
+ ## Why the competitor's −14.6 does not transplant
101
+
102
+ In their architecture the EG rule also SETS the count (select while
103
+ EG > 0): the geography term there mostly acts as an appetite mechanism —
104
+ it admits extra insurance swaps where a miss would be expensive, i.e. it
105
+ buys recall. Count-pinning — which is exactly what our public evidence
106
+ demands (count-coupled wins are untrustworthy, 4x) — removes that channel,
107
+ and what remains of "geography-aware selection" is a reallocation from
108
+ likely-deaths to remote maybes, which measurably loses. Combined with
109
+ tonight's tilt result (geo as a rank tilt: +135..+452), the geography
110
+ axis is dead in every count-flat form we can express.
111
+
112
+ ## Verdict
113
+
114
+ - Expected-gain selection does NOT beat blended-rank selection at pinned
115
+ count: best arm −5.0±28.8 (0.2σ, rank-test flat), everything else worse.
116
+ - The geography term is not "part of the win we're missing" — inside the
117
+ architecture it is a measured LOSS of +27..+31/scen (2σ, 2W/11L,
118
+ consistent across full/gated/blend forms).
119
+ - The only ≥2σ results in the lane are losses (egc +33.1 at 2.3σ; geo
120
+ term +30.8 at 2.0σ). Nothing to adopt; nothing worth a public probe.
121
+ - Caveats: geo uses a mean-field self-carry clock, a linear weekly-limit
122
+ share and a flat room-change — approximations of the emergency loop,
123
+ but the conclusion is invariant across three independent geo-on/geo-off
124
+ contrasts; selection-set churn is small (~45 batteries), so cell deltas
125
+ are lumpy — the sign of the geo term is nonetheless rank-significant.
126
+
127
+ Artifacts: /tmp/c31/{lib31,parity,arms}.py, parity log
128
+ /tmp/c31/parity.log, arm CSVs /tmp/c31/arm_*.csv, selection sets
129
+ /tmp/c31/sets_*.pkl, base replan /tmp/c31/base_replan.csv. Repo untouched
130
+ (rank_score injection only; planner attrs saved/restored per call;
131
+ modules md5-pinned against parallel-session races).