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

docs: phase 67 - T4 count-flat campaign (6 lanes, ~50 arms) all rejected with mechanisms; 60d65da = count-flat ceiling

Browse files
EXPERIMENTS.md CHANGED
@@ -3456,3 +3456,40 @@ favorable on bgkf warmup. Fourth count-coupled public refutation
3456
  lone converter. bgkf's warmup block over-prices cold-scenario catches
3457
  relative to the public fleet. PRIVATE SELECTION: 60d65da (count-flat
3458
  lam2sp3, expected ~1571) or measured 4c93883 (1575.31); not e4745d2.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3456
  lone converter. bgkf's warmup block over-prices cold-scenario catches
3457
  relative to the public fleet. PRIVATE SELECTION: 60d65da (count-flat
3458
  lam2sp3, expected ~1571) or measured 4c93883 (1575.31); not e4745d2.
3459
+
3460
+ ## Phase 67 - T4 count-flat campaign (6 lanes, ~50 arms): ZERO adoptions - 60d65da confirmed as the count-flat ceiling of this feature space
3461
+
3462
+ User-directed sub-1400 count-flat push. Every lane paired vs 60d65da
3463
+ (1541.3) at 2sigma, parity-verified, swaps flat. All six REJECTED with
3464
+ mechanisms (reports agent_reports_bgkf/t4_*.md):
3465
+ - STACKING: learned metas over-weight the best-AUC source (gapHGB); plan
3466
+ cost is decided at the cutoff, which the cost-tuned .50/.30/.20 already
3467
+ encodes. Loss monotone in meta dose (+16.5 at 25% ... +139 HGB-meta).
3468
+ - EXTERNAL data/models: NASA transfer collapses to a monotone transform
3469
+ of the current voltage gap (Spearman .999) - lab aging corpora have
3470
+ near-uniform fade slopes; foundation models unloadable in the runtime
3471
+ stack (no transformers/safetensors). Measured +32.5 / wash.
3472
+ - SURVIVAL/LTR: Cox, cost-weighted listwise, martingale-GBM all lose the
3473
+ gap slot by >=2.6sig WITH identical features - the dies42 classification
3474
+ objective itself is the value. Cost-aligned listwise is the worst
3475
+ (gradient too diffuse at ~1.2k positives/157 groups).
3476
+ - LITERATURE features (knee/Bacon-Watts, sample entropy, monotonicity,
3477
+ relaxation, variance): all lose or wash inside the gapHGB; best
3478
+ standalone-AUC features lose MOST (dilute the depth-2 splits on the
3479
+ validated quartet). Anchored logbag control failed on cue (+61.6).
3480
+ - TRANSPLANT (rank-4 MnesisLab, full source read): geo-aware ordering
3481
+ tilt +135..+452 (their compactness gate passes on all our fold-fleets,
3482
+ so gating does not rescue it); seasonal temp layer = plan no-op (gated
3483
+ devices already top-ranked); left-truncated FP-AFT faithful (params
3484
+ match theirs) but moves ~1 unit; their EB wiener +128. THEIR 1407.63 IS
3485
+ OPERATING POINT + their untransplantable base pipeline, not a readable
3486
+ layer: 743 swaps converting at ~16.8 late-days/swap vs our 6.0 marginal.
3487
+ - SEQUENCE (GRU-D on 60d daily telemetry, 5-seed, fold-safe): encoder
3488
+ genuine (OOF AUC 0.94-0.96) but fully redundant with the snapshot
3489
+ stack; monotone-against dose response (+21.6 at w=.05).
3490
+
3491
+ CONCLUSION: 60d65da (CV 1541.3) is the measured count-flat ceiling of
3492
+ 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.
agent_reports_bgkf/t4_ext.md ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T4 external-resources lane — final report (2026-08-23)
2
+
3
+ Question: can EXTERNAL battery datasets or pretrained time-series models
4
+ improve the count-flat ORDER vs head 60d65da (CV 1541.3 on bgkf)?
5
+
6
+ **Verdict: NO — well-argued and empirically measured negative.** Nothing on
7
+ the external axis reaches the 2σ new-mechanism bar tonight; the one candidate
8
+ that could be built (NASA PCoE transfer GRU) degenerates to a redundant
9
+ voltage-level rank and measures null-to-negative.
10
+
11
+ ## Rules caveat (applies to everything below)
12
+
13
+ Whether competition rules permit external data / pretrained weights is
14
+ UNKNOWN. Any external candidate — including the NASA-trained GRU measured
15
+ here — would need an explicit rules check before any ship. None qualified on
16
+ merit anyway, so the question is moot tonight.
17
+
18
+ ## Triage table
19
+
20
+ | Resource | Verdict | Why |
21
+ |---|---|---|
22
+ | NASA PCoE battery aging (phm-datasets S3, 200 MB, no registration) | ACQUIRED + MEASURED — null/negative | 34 cells .mat v5 (scipy.io reads; 26 usable ≥40 discharge cycles). Capacity-fade-per-cycle mapped to our gap-to-2.40V scale; transfer signal collapses to a level detector (see below). |
23
+ | CALCE (CS2 etc., direct zip, no registration) | DEAD in stack | Zips contain .xlsx; openpyxl absent from venv and competition runtime → unparseable. Same per-cycle structure as NASA anyway. |
24
+ | Toyota/Stanford Severson (data.matr.io) | DEAD in stack | .mat v7.3 = HDF5; h5py absent → unreadable. Files ~GB each. Same capacity-per-cycle structure. |
25
+ | Oxford battery degradation (ORA) | TRIAGED OUT | n=8 cells (too tiny to train anything), .mat retrieval path unclear inside budget; cycling structure again. |
26
+ | Sandia / batteryarchive.org | TRIAGED OUT | Download flow not scriptable in budget (account-gated cell downloads); per-cycle capacity structure → same degeneracy as NASA. |
27
+ | Calendar-aging sets (Samsung INR21700 279-cell "multi-stage", NMC/C-SiO 228-cell, Nature Sci Data 2024) | TRIAGED OUT | Closest structurally, but they publish periodic lab check-ups (capacity/OCV curves), NOT continuous daily float-voltage drift; multi-GB (over 2 GB budget); mapping to our task reduces to the same fade-level trajectory. |
28
+ | HF time-series foundation models (amazon/chronos, timesfm, moment, moirai, TTM) | DEAD ON ARRIVAL | `transformers` and `safetensors` absent from venv AND system python; no pip installs allowed; competition runtime = sklearn/torch/lifelines/scipy only. Models cannot even be LOADED, let alone shipped. Not measurable, not shippable. |
29
+ | Competition's own unlabeled telemetry | SKIPPED per mission | Closed, contaminated axis. |
30
+
31
+ ## What was built and measured (NASA transfer)
32
+
33
+ Pipeline (all in /tmp/c26/, nothing tracked touched):
34
+ - `prep_ours.py` — leak-free lookback windows: per (device, origin 0–47),
35
+ last 64 calendar days of temp-gated (10–30 °C) daily-median voltage minus
36
+ 2.40, interpolated on the day grid. 22,128 windows, 461 devices.
37
+ - `nasa_train_score.py` — 26 NASA cells' discharge-capacity trajectories
38
+ mapped to our scale (gap = 0 at 70% initial capacity, fresh gap 0.6 V);
39
+ time-stretch augmentation f ∈ {1,1.5,2,4,6,8} + 0.015 V noise; windows
40
+ L=64, label = crosses threshold within 42 units; GRU(1→16)+linear
41
+ (~1k params, torch-only → runtime-shippable in principle). Trained ONLY on
42
+ NASA → frozen, fold-safe by construction. Held-out-cell AUC 0.93.
43
+ - `run.py` — head-exact driver (order .50 logbag / .30 wiener / .20 gapHGB,
44
+ vm7, p*=1.0, split_days=3, timing_weight=2.0; ref asserts 1541.3).
45
+
46
+ **The decisive diagnostic**: on our windows, Spearman(GRU score, −final gap)
47
+ = 0.999, and slope-probe ramps at equal level get identical scores (fast
48
+ decline 0.031 vs slow 0.031 at gap 0.05). The GRU is a pure LEVEL detector.
49
+ Cause is structural, not a bug: within any time-stretch class of NASA
50
+ capacity trajectories, per-unit fade slope is nearly uniform, so
51
+ "crosses within 42 units" is fully determined by current level — the corpus
52
+ never forces slope-dependence. Broadening the stretch mix (f=1…8, 8× slope
53
+ range) did not change this. So the maximum transferable signal ≈ a monotone
54
+ transform of v_corr_last — the single most-mined feature in this competition
55
+ (v_last, vmin7_rank, wiener FHT all already encode level and better).
56
+
57
+ ## Measured arms (bgkf, paired vs head 1541.3, 28 scored origins)
58
+
59
+ | Arm | SCORE | Δ ± SE | sig | W/L | Wilcoxon | swaps |
60
+ |---|---|---|---|---|---|---|
61
+ | ext4 — GRU as 4th order source, weights .45/.27/.18/.10 | 1573.8 | +32.5 ± 21.1 (worse) | 1.5σ | 10W/12L | p 0.236 | 2.26 |
62
+ | extemb — 8 GRU hidden dims added to gapHGB feature cols | 1540.2 | −1.2 ± 8.1 | 0.1σ | 4W/2L | p 0.688 | 2.27 |
63
+
64
+ Count-flatness vs ref: extemb swap counts identical on all origins; ext4
65
+ differs by 1 swap on 1 origin (reorder moved one battery across the planning
66
+ window edge — same magnitude as prior c9 arms at 2.28).
67
+
68
+ Reading: ext4 actively hurts — a redundant level rank at w=.10 dilutes the
69
+ richer 3-way order (mirrors t_rk4's +22.3 from the c9 wave). extemb is a
70
+ pure null — HGB absorbs/ignores the level-transform columns (which are also
71
+ NaN on the 72% synthetic training rows). Neither is close to the 2σ +
72
+ controls bar for a new mechanism. Nothing to ship.
73
+
74
+ ## Tier verdict
75
+
76
+ REJECT the external axis for this competition. The failure is structural,
77
+ not effort-bounded: every accessible public dataset is cycle/calendar aging
78
+ whose mapping onto "daily float voltage drifting to a hard 2.40 V threshold"
79
+ collapses to fade-level — information the order already exploits to
80
+ saturation. Pretrained TS foundation models are unloadable in the allowed
81
+ stack. Recommend no further spend here before the deadline.
82
+
83
+ Artifacts: /tmp/c26/{prep_ours.py, nasa_train_score.py, run.py,
84
+ ext_scores.csv, gru_nasa.pt, cv_bgkfcand_ext4.csv, cv_bgkfcand_extemb.csv,
85
+ ours_windows.npz}; NASA raw in /tmp/c26/nasa/.
agent_reports_bgkf/t4_lit.md ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T4 LITERATURE lane — literature-derived count-flat order features
2
+
3
+ Date: 2026-08-23 (deadline day). Baseline: head config 60d65da = CV 1541.3
4
+ on bgkf (`/tmp/ref_head_1541.csv`, per-origin paired, 48 origins).
5
+ Work dir `/tmp/c25/` (build_lit.py, run.py, lane.log). No repo files touched.
6
+
7
+ ## Literature sweep (~20 min, 5 searches)
8
+
9
+ What the battery-RUL/PHM literature suggests that is computable from a daily
10
+ median-voltage series in <=30 lines, mapped to our two known failure modes
11
+ (misses ranked 3-4 too low with signal present; plateau devices at
12
+ 2.41-2.44 V, 40+ days, only 36% die):
13
+
14
+ 1. **Knee-point / broken-stick detection** — Bacon-Watts and two-segment
15
+ fits are the standard for locating the transition from slow to fast
16
+ degradation; robust to noise, no capacity-fade model needed.
17
+ - Fermin-Cueto et al. (knee-point identification, Bacon-Watts),
18
+ via [MDPI Batteries 11(6) 221](https://doi.org/10.3390/batteries11060221)
19
+ and [knee-onset ID, IOPscience](https://iopscience.iop.org/article/10.1088/3049-4761/ae5067)
20
+ - [Segmented regression](https://en.wikipedia.org/wiki/Segmented_regression)
21
+ - Implemented: `bw_tau` (days-before-origin of best two-segment break on
22
+ the last 120 d, O(n) prefix-sum SSE grid), `bw_slope2` (post-knee
23
+ slope), `bw_dslope` (knee sharpness). Targets misses whose recent
24
+ regime change is diluted in the fixed-window slopes.
25
+
26
+ 2. **Sample entropy of voltage** — SampEn of discharge voltage is a
27
+ recurring SOH indicator (Widodo et al.; RVM prognostics).
28
+ - [Sample-entropy prognostics with RVM, J. Manuf. Syst.](https://www.sciencedirect.com/science/article/abs/pii/S0278612521000741)
29
+ - Implemented: `sampen_30` (m=1, r=0.2*std, last 30 daily values).
30
+
31
+ 3. **Monotonicity metric (PHM prognostic-parameter suitability, Coble &
32
+ Hines family)** — Spearman rho of voltage vs time; a plateau device is
33
+ flat (rho ~ 0) while a real decliner is monotone (rho ~ -1). Directly
34
+ attacks the plateau false-include mode.
35
+ - [Data-driven prognostics based on health indicators (HAL)](https://hal.science/hal-00869489/document)
36
+ - Implemented: `mono_60` (Spearman rho over last 60 d).
37
+
38
+ 4. **Relaxation/recovery statistics** — Zhu et al., Nat Comm 2022: variance,
39
+ skewness, maxima of the voltage-relaxation curve predict capacity; the
40
+ recovery-from-minimum idea transfers as rebound features.
41
+ - [Zhu et al. 2022, Nature Communications](https://www.nature.com/articles/s41467-022-29837-w)
42
+ - Implemented: `reb_30 = v_last - v_min_30`, `reb_frac` (rebound as a
43
+ fraction of the drop from baseline), `skew_30` (skewness of last 30
44
+ daily values).
45
+
46
+ 5. **Variance-of-degradation** — float-voltage spread/variance rises toward
47
+ EOL in stationary lead-acid fleets.
48
+ - [Lead-acid EOL field discussion](https://forum.solar-electric.com/discussion/354321/learning-to-identify-end-of-life-for-lead-acid-batteries),
49
+ [multi-phase Wiener RUL for lead-acid](https://www.sciencedirect.com/science/article/abs/pii/S0957582025002411)
50
+ - Implemented: zero-cost arm, `vstd_30`/`rng_30` already on the table
51
+ (never tried inside the gap-HGB; dead only as GLOBAL logbag features).
52
+
53
+ Considered and skipped: label-statistic smoothers (banned — lagging),
54
+ cohort/batch clocks (already adjudicated), CNN/GPR/RVM model swaps (not
55
+ count-flat order deliverables in the time budget), ranking-under-censoring
56
+ methods (method-level, no <=30-line feature).
57
+
58
+ ## Delivery vehicle
59
+
60
+ All features delivered ADDED to the gap-HGB order source of the shipped
61
+ 3-way order (.50 logbag(vm7) + .30 wiener + .20 gapHGB), champion HGB
62
+ architecture identical (depth2 lr.06 300it seed0), only cols change.
63
+ Feature pass strictly as-of-origin (`day <= origin`), same in-band
64
+ daily-median series as features.py, all 168 origins (real + synthetic),
65
+ cached to /tmp/c25/lit_features.parquet (77 299 rows).
66
+
67
+ Parity arm `t_head` re-runs the exact head config against the reference.
68
+
69
+ ## Feature diagnostics (closed pairs, before any CV run)
70
+
71
+ Direction-free single-feature AUC vs dies42: bw_slope2 0.75 (reversed),
72
+ mono_60 0.65, reb_frac 0.66, vstd_30/rng_30 0.82/0.83, sampen_30 0.53
73
+ (dead), skew_30 0.56. On the plateau cohort (v_corr_last 2.41-2.44,
74
+ n=636, death rate 0.37): bw_slope2 0.63 and mono_60 0.63 are the best
75
+ discriminators — the literature signals DO exist in this data, on the right
76
+ cohort. They just do not convert to plan cost (below).
77
+
78
+ ## Results (paired vs head 1541.3 per origin, 48 origins; positive = worse)
79
+
80
+ | arm | delivery | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
81
+ |--------|-----------------------|--------|--------------|-----|--------|----------|-------|
82
+ | t_head | parity (exact head) | 1541.3 | +0.0± 0.0 | 0.4 | 1W/1L | nan | 2.27 |
83
+ | t_bw | gapHGB + bw_tau/slope2/dslope | 1573.4 | +32.1±17.2 | 1.9 | 8W/9L | 0.159 | 2.28 |
84
+ | t_ent | gapHGB + sampen_30 | 1555.9 | +14.6±19.7 | 0.7 | 8W/4L | 1.000 | 2.27 |
85
+ | t_mono | gapHGB + mono_60 | 1576.2 | +34.8��21.3 | 1.6 | 7W/9L | 0.348 | 2.27 |
86
+ | t_reb | gapHGB + reb_30/reb_frac/skew_30 | 1549.7 | +8.3±12.5 | 0.7 | 7W/6L | 0.893 | 2.27 |
87
+ | t_var | gapHGB + vstd_30/rng_30 | 1567.5 | +26.1±21.7 | 1.2 | 10W/11L | 0.432 | 2.28 |
88
+ | t_lb_reb | logbag primary + reb family (anchored control) | 1602.9 | +61.6±26.3 | 2.3 | 13W/18L | 0.079 | 2.27 |
89
+
90
+ Anchored control behaves exactly as predicted: the least-bad HGB family
91
+ (reb) moved into the logbag order-primary loses +61.6 at 2.3sig — same
92
+ failure shape as GAP4 in logbag (+123). The instrument is measuring what it
93
+ should.
94
+
95
+ Count-flat check (per (origin, fold) n_swaps vs reference, 240 cells):
96
+ t_head/t_ent/t_mono cell-identical; t_bw/t_reb/t_var differ in 3-4 cells by
97
+ max ±1 (break-even top-up wiggle). All arms are order-only as designed.
98
+
99
+ Combos (t_bwmono, t_all, ...) were pre-registered but NOT run: every
100
+ single-family arm lost, so stacking them cannot clear the bar; deadline
101
+ budget went to the anchored control instead.
102
+
103
+ ## Verdict
104
+
105
+ REJECT — tier: no adoption, report-only. Zero of five literature arms wins;
106
+ best is t_reb at +8.3±12.5 (noise-level LOSS), worst are the two arms whose
107
+ features had the best plateau AUC (t_bw +32.1 at 1.9sig, t_mono +34.8 at
108
+ 1.6sig — significant in the WRONG direction). The pattern repeats the GAP4
109
+ logbag lesson from the other side: features with real cohort-level AUC
110
+ dilute the depth-2 HGB's splits on the already-validated gap quartet and
111
+ push the marginal ranking around at exactly the rank-gap 1-10 positions
112
+ where the cost lives. The gap-HGB at its shipped weight (.20) appears
113
+ saturated; the head config's feature set survives another five-way attack
114
+ unchanged.
115
+
agent_reports_bgkf/t4_seq.md ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T4 SEQUENCE lane: GRU temporal encoder on raw daily telemetry (NEGATIVE)
2
+
3
+ Date 2026-08-23. Baseline: head 60d65da (order .50 logbag(vm7) + .30 wiener
4
+ + .20 gapHGB; values logbag @ alpha 1.0; planner tw 2.0 / split 3), reference
5
+ per-cell CSV /tmp/ref_head_1541.csv, CV 1541.3 on bgkf. All arms paired vs
6
+ that reference on the 48 all-building scenario totals.
7
+
8
+ ## Hypothesis
9
+
10
+ The whole stack is snapshot features; degradation SHAPE (knees, dips,
11
+ recovery, plateau texture) in the raw daily series is unexploited. A small
12
+ recurrent encoder (CMAPSS / battery-SoH literature) on the last 60 days of
13
+ daily telemetry as a new order source.
14
+
15
+ ## Method
16
+
17
+ - Sequences: per (device, origin) row of the feature table, the 60 calendar
18
+ days ENDING at the origin (leak spot-checked). 4 channels: daily median
19
+ v_corr (v - 0.005*(t-20), last-obs-carried-forward, fixed physical
20
+ normalization - nothing fitted), observed mask, days-since-last-obs
21
+ (GRU-D-style delta, /90), temp-gated in-band coverage mask. Built once for
22
+ all 71,878 rows (no cross-device stats, so one cache serves every fold).
23
+ Builder: /tmp/c22/build_seqs.py -> /tmp/c22/seqs.npz.
24
+ - Encoder: GRU(4 -> hidden 48, 2 layers, dropout 0.1) -> linear logit on
25
+ dies42. BCE, pos_weight = neg/pos, positives urgency-weighted (RankNet
26
+ 'days' precedent). Adam lr 3e-3, wd 1e-3, 30 epochs, batch 1024.
27
+ - Fold safety: exact replication of run_bgkf's split (cv.build_folds) and
28
+ train subset (closed rows, fold-train buildings only). NO self-supervised
29
+ pretraining, no test-fold telemetry in any fit (phase-51 lesson honored).
30
+ Seed ensemble = 5 seeds, combined as mean of within-fleet pct ranks.
31
+ Fitter: /tmp/c22/fit_seq.py -> /tmp/c22/seq_scores_f{0..4}.parquet.
32
+ - Measurement: cv.run_bgkf(kind='logbag', variant='vm7', blend=(arm,1.0),
33
+ p_star=1.0, split_days=3, timing_weight=2.0) - value-preserving order
34
+ mapping, counts fixed. Driver /tmp/c22/run.py; per-cell CSVs
35
+ /tmp/cv_bgkfcand_c22_*.csv.
36
+ - Parity control: re-implemented champion order reproduces the reference
37
+ EXACTLY (+0.0, 46/48 cells identical), so arm deltas are clean.
38
+
39
+ ## Encoder quality (out-of-fold, test-building closed real-origin rows)
40
+
41
+ | fold | seq AUC | -v_last AUC | pos |
42
+ |------|---------|-------------|-----|
43
+ | 0 | 0.951 | 0.944 | 123 |
44
+ | 1 | 0.942 | 0.946 | 91 |
45
+ | 2 | 0.939 | 0.964 | 80 |
46
+ | 3 | 0.908 | 0.779 | 71 |
47
+ | 4 | 0.956 | 0.954 | 61 |
48
+
49
+ The encoder is real (it generalizes across buildings; fold 3 shows it beats
50
+ the raw level where v_last fails) but overall only ~matches a single strong
51
+ snapshot feature.
52
+
53
+ ## Results (paired vs head 1541.3; 48 scenarios)
54
+
55
+ | arm | order | SCORE | delta +/- SE | sig | W/L | wilcoxon | swaps |
56
+ |-----|-------|-------|--------------|-----|-----|----------|-------|
57
+ | champ (parity) | .50/.30/.20/- | 1541.3 | +0.0 +/- 0.0 | 0.4 | 1W/1L | nan | 2.27 |
58
+ | (d) seq_alone | 0/0/0/1.0 | 1935.7 | +394.4 +/- 71.3 | 5.5 | 9W/39L | 0.000 | 2.26 |
59
+ | (a) seq_g20 | .50/.30/0/.20 | 1654.3 | +113.0 +/- 36.5 | 3.1 | 14W/21L | 0.017 | 2.27 |
60
+ | (c) seq_w30 | .50/0/.20/.30 | 1613.8 | +72.5 +/- 27.1 | 2.7 | 20W/22L | 0.089 | 2.25 |
61
+ | (b) seq_4th | .45/.27/.18/.10 | 1584.1 | +42.8 +/- 20.4 | 2.1 | 9W/14L | 0.140 | 2.27 |
62
+ | dose ctrl | .475/.285/.19/.05 | 1562.9 | +21.6 +/- 16.9 | 1.3 | 6W/7L | 0.508 | 2.27 |
63
+
64
+ All arms count-flat (2.25-2.27 vs ref 2.27). Dose-response is MONOTONE
65
+ against the source: 0 -> +0.0, .05 -> +21.6, .10 -> +42.8, .20 -> +113.0.
66
+ Every insertion point (gap slot, wiener slot, 4th source, any weight) makes
67
+ the order worse; the losses are significant in the wrong direction.
68
+
69
+ ## Verdict
70
+
71
+ REJECTED (new-mechanism tier needs >= 2 sigma IMPROVEMENT; we have 2-5 sigma
72
+ degradation). The temporal-shape signal the GRU extracts is already captured
73
+ by the snapshot stack (slopes, accel, drop_recent, wiener drift, gap
74
+ features); at the margin the encoder adds noise, not recall. Standalone
75
+ anchor (1935.7) confirms it is far from champion-grade on its own.
76
+
77
+ Do NOT retest: GRU/temporal encoder on daily (v_corr, mask, delta, in-band)
78
+ sequences as an order source at any slot/weight in the 3-way order. A
79
+ materially different attempt would need a different signal (e.g. sub-daily
80
+ texture), not different weights.
81
+
82
+ ## Deployment cost (moot, for the record)
83
+
84
+ Fit: ~7 s/epoch uncontended at 2 torch threads -> ~3.5 min/seed, ~17.5 min
85
+ for the 5-seed ensemble (deployment fits once on full train); inference on
86
+ the whole table <10 s. Inside the 30-min budget, but not shipped.
agent_reports_bgkf/t4_stack.md ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T4 stacking lane: learned meta-combiner over the 3-source order — REJECTED
2
+
3
+ Date: 2026-08-23. Lane: STACKING (T4 count-flat campaign).
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). Champion order =
6
+ fixed-weight rank blend .50*rank(logbag vm7) + .30*rank(WienerFHT) +
7
+ .20*rank(gapHGB depth2 on FEATURES+vmin7_rank+GAP4).
8
+
9
+ ## Question
10
+
11
+ Can a LEARNED fold-safe meta-combiner (stacked generalization) beat the
12
+ fixed .50/.30/.20 weights by knowing per-device WHEN to trust which source
13
+ (context: wnr_n, staleness, gap_ratio, vmin7_rank; disagreement stats)?
14
+
15
+ ## Method
16
+
17
+ Driver `/tmp/c24/run.py` (diagnostic `/tmp/c24/diag.py`). Inside each outer
18
+ fold's fit(train): fold-train split by BUILDING into K=4 inner folds
19
+ (deaths-sorted snake, deterministic; the established contamination rule —
20
+ never by row); out-of-fold predictions of all 3 sources on every train row,
21
+ pct-ranked WITHIN origin_idx groups (the deployment-time analog: the test
22
+ fleet is ranked at one origin, ~5 buildings — inner-test is also ~5
23
+ buildings, so rank distributions match); meta fit on
24
+ [r1,r2,r3, spread, |ri-rj|, wnr_n, staleness, gap_ratio, vmin7_rank] ->
25
+ dies42; sources refit on full fold-train; meta combines their test ranks.
26
+ Order-only: measured via cv.run_bgkf(kind='logbag', variant='vm7',
27
+ blend=(arm,1.0), p_star=1.0, split_days=3, timing_weight=2.0) — blend w2=1.0
28
+ reassigns the primary's sorted p42 values onto the meta's order, so the
29
+ count machinery is untouched. Paired vs the 48 per-scenario reference
30
+ totals. cv.py/models_cv.py md5-pinned per run (race guard); no repo files
31
+ touched.
32
+
33
+ ## Results (paired vs head 1541.3, 48 scenarios)
34
+
35
+ | arm | meta | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
36
+ |---|---|---|---|---|---|---|---|
37
+ | par (parity) | fixed .50/.30/.20 | 1541.3 | +0.0±0.0 | 0.4σ | 1W/1L | – | 2.27 |
38
+ | a_log | logistic, ranks+disagree+context | 1604.5 | +63.2±44.8 | 1.4σ | 19W/25L | p0.208 | 2.26 |
39
+ | b_hgb | HGB depth2, same features | 1680.5 | +139.2±61.6 | 2.3σ | 17W/31L | p0.020 | 2.28 |
40
+ | c_ranks | HGB depth2, 3 ranks only | 1613.2 | +71.9±46.5 | 1.5σ | 17W/26L | p0.113 | 2.30 |
41
+ | d_cvx | convex weights, simplex grid by OOF AUC | 1598.6 | +57.3±41.0 | 1.4σ | 21W/21L | p0.620 | 2.28 |
42
+ | e_logrk | logistic, 3 ranks only | 1619.1 | +77.8±44.0 | 1.8σ | 17W/24L | p0.257 | 2.26 |
43
+ | e_log50 | 0.50*champ + 0.50*rank(a_log) | 1594.8 | +53.4±27.5 | 1.9σ | 13W/26L | p0.065 | 2.26 |
44
+ | e_log75 | 0.75*champ + 0.25*rank(a_log) | 1557.8 | +16.5±19.6 | 0.8σ | 16W/11L | p0.838 | 2.27 |
45
+
46
+ All deltas positive = WORSE than head. Every learned arm loses; b_hgb is a
47
+ 2.3σ significant LOSS. Swaps flat everywhere (2.26-2.30 vs 2.27) — the
48
+ mechanism is count-flat as designed; the losses are pure ordering damage.
49
+
50
+ ## Why it fails (diagnostic, per outer fold)
51
+
52
+ Per-source inner-OOF AUCs: lb 0.932-0.944, wiener 0.919-0.947, gap
53
+ 0.941-0.955 — gapHGB is the BEST dies42 classifier in every fold. So any
54
+ classification-trained meta over-weights it:
55
+
56
+ - d_cvx learned weights (lb, wn, gap): (.15,.45,.40), (.10,.25,.65),
57
+ (.05,.30,.65), (.30,.30,.40), (.25,.20,.55) — gap at 2-3x its champion
58
+ weight, logbag starved. The champion .50/.30/.20 is IN the grid and the
59
+ learned points beat it on inner-OOF AUC in all 5 folds (+0.001 to +0.008)
60
+ — yet cost says the opposite. Objective mismatch, not estimation noise.
61
+ - a_log coefficients: r3 (gap) largest in 4/5 folds; context features get
62
+ small/unstable coefficients (vmin7_rank negative only because it double-
63
+ counts with the sources) — context adds nothing (a_log ~ e_logrk ~ c_ranks).
64
+ - Dose-response is monotone: 25% meta +16.5, 50% +53.4, 100% +63.2. The
65
+ learned order contributes no positive increment at ANY mixing weight.
66
+
67
+ Root cause: dies42-AUC/logloss over the closed-pair corpus is dominated by
68
+ separating obvious survivors from obvious deaths, where gapHGB excels. Plan
69
+ cost is decided by the fine ordering near the swap-inclusion cutoff and its
70
+ timing interplay, where logbag's calibrated top ranks matter — exactly what
71
+ the fully-mapped cost simplex (.50/.30/.20 optimal) already encodes. A
72
+ fold-safe meta cannot see cost, so it reliably walks AWAY from the cost
73
+ optimum toward the classification optimum (~.15/.30/.55 region).
74
+
75
+ ## Verdict
76
+
77
+ Tier: REJECTED, mechanism dead — do not adopt, no arm to escalate.
78
+ Stacked generalization over these 3 sources is structurally mispriced under
79
+ any label-classification objective; the fixed .50/.30/.20 cost-mapped
80
+ weights stand. Do NOT revisit with a different meta-model family (HGB,
81
+ logistic, constrained-convex, ranks-only, context, shrinkage all measured
82
+ here); the only untried fix — per-fold weights tuned on plan cost — is the
83
+ already-dead static-simplex search wearing fold noise.
84
+
85
+ Artifacts: /tmp/c24/run.py, /tmp/c24/diag.py, /tmp/c24/*.out,
86
+ /tmp/cv_bgkfcand_c24_*.csv.
agent_reports_bgkf/t4_surv.md ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T4 survival/ranking campaign: literature-grade survival & LTR as order sources
2
+
3
+ **Date:** 2026-08-23 (deadline day). **Agent:** SURVIVAL/RANKING lane, /tmp/c23/.
4
+ **Verdict up front: comprehensive REJECT — all 13 arms lose to the head, most at 2.6–3.3σ. No adoption candidate. All arms count-flat (swaps 2.27±0.02).**
5
+
6
+ ## Setup
7
+
8
+ - Baseline: head config 60d65da, CV 1541.3 on bgkf; reference per-cell CSV
9
+ `/tmp/ref_head_1541.csv` (assert passed: groupby-origin mean within 1.0).
10
+ - Measurement: `cv.run_bgkf(kind='logbag', variant='vm7', blend=(name,1.0),
11
+ p_star=1.0, split_days=3, timing_weight=2.0)` — value-preserving rank blend,
12
+ counts untouched. Paired per-origin deltas over 48 all-building totals.
13
+ - Champion order = .50·rank(logbag vm7) + .30·rank(WienerFHT) + .20·rank(gapHGB).
14
+ - **Parity control:** a from-parts recomposition of the head order (`ctrl`)
15
+ scored 1541.3, delta +0.0 (1W/1L, ties elsewhere) — the composer is faithful,
16
+ so every arm delta is attributable to the swapped-in source alone.
17
+ - Fold safety: supervised sources fit on the fold-train closed table run_bgkf
18
+ hands them; Cox-family censored pools built exactly per cv.py's hazard-branch
19
+ recipe (`mc.censored_pairs(FULL, max_origin)` restricted to fold-train devices).
20
+ - Driver + sources: `/tmp/c23/run.py`; per-cell CSVs `/tmp/c23/cv_*.csv`.
21
+
22
+ ## Order sources tested (methods, not features)
23
+
24
+ - **cox** — lifelines CoxPHFitter (penalizer 1.0 / 0.1) on FEATURES+vmin7_rank
25
+ (median-impute + standardize), proper censoring from the censored-pairs pool;
26
+ order = log partial hazard.
27
+ - **lcw** — cost-aware LISTWISE ranker (torch, 5-seed bag, MLP 32/16, 300 ep):
28
+ softmax loss over per-origin groups, each positive's gain = expected late-day
29
+ cost `10·(42 − days_to_eol)` (floor 5). Meaningfully different from the dead
30
+ plain RankNet: listwise normalization over the whole origin group + linear
31
+ cost gains (0–420) instead of pairwise BCE with 1–2× weights.
32
+ - **mgb** — GBM-Cox hybrid (two-stage boosting-for-survival): HGB regressor
33
+ (3-seed bag, depth 2, lr .06, 300 iter) on lifelines martingale residuals;
34
+ order = log-partial-hazard + HGB(residual). (Residuals realigned from
35
+ lifelines' duration-sorted output — verified.)
36
+ - **\*g4** variants — same sources given the four gap-approach columns
37
+ (gap_ratio, rel_close, dwell_flat, gap_log), closing the features-vs-method
38
+ confound in the gap slot.
39
+
40
+ ## Results (paired vs head 1541.3; 48 origins; swaps target ~2.27)
41
+
42
+ | arm | slot | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
43
+ |---|---|---|---|---|---|---|---|
44
+ | ctrl (parity) | head recomposed | 1541.3 | +0.0±0.0 | 0.4σ | 1W/1L | — | 2.27 |
45
+ | cox1_gap | gap .20 | 1611.7 | +70.4±24.2 | 2.9σ | 13W/25L | .019 | 2.27 |
46
+ | cox01_gap | gap .20 | 1614.0 | +72.7±24.9 | 2.9σ | 13W/19L | .065 | 2.27 |
47
+ | coxg4_gap | gap .20 (+GAP4) | 1648.4 | +107.1±32.7 | 3.3σ | 12W/26L | .001 | 2.28 |
48
+ | cox1_4th | 4th .10 | 1561.2 | +19.9±13.5 | 1.5σ | 11W/9L | .571 | 2.27 |
49
+ | cox1_alone | alone | 1665.5 | +124.2±46.8 | 2.7σ | 13W/33L | .006 | 2.24 |
50
+ | lcw_gap | gap .20 | 1618.5 | +77.2±28.2 | 2.7σ | 8W/26L | .003 | 2.27 |
51
+ | lcwg4_gap | gap .20 (+GAP4) | 1619.3 | +78.0±29.6 | 2.6σ | 10W/24L | .011 | 2.27 |
52
+ | lcw_4th | 4th .10 | 1578.2 | +36.9±21.5 | 1.7σ | 12W/14L | .340 | 2.27 |
53
+ | lcw_alone | alone | 1710.4 | +169.1±61.5 | 2.7σ | 18W/29L | .012 | 2.25 |
54
+ | mgb_gap | gap .20 | 1651.5 | +110.2±34.2 | 3.2σ | 7W/23L | .001 | 2.29 |
55
+ | mgbg4_gap | gap .20 (+GAP4) | 1650.3 | +109.0±36.4 | 3.0σ | 5W/28L | .001 | 2.29 |
56
+ | mgb_4th | 4th .10 | 1571.2 | +29.9±21.0 | 1.4σ | 7W/11L | .181 | 2.27 |
57
+ | mgb_alone | alone | 1625.0 | +83.7±47.4 | 1.8σ | 20W/27L | .098 | 2.26 |
58
+
59
+ (All deltas are LOSSES; positive = worse than head.)
60
+
61
+ ## Reading
62
+
63
+ 1. **The gap slot's signal is the objective, not the features.** With identical
64
+ GAP4 columns, Cox (+107), listwise-cost (+78) and martingale-GBM (+109) all
65
+ lose the slot by 2.6–3.3σ; the dies42 classification HGB is doing real,
66
+ method-specific work there.
67
+ 2. **Proper censoring buys nothing here.** Cox partial hazard alone (+124) is
68
+ far behind the champion composite; the closed-window dies42 label already
69
+ captures what the 42d planning problem needs. Martingale-residual boosting
70
+ does add order signal over pure Cox (alone: +84 vs +124) but never enough.
71
+ 3. **Cost-weighted listwise is the weakest source** (alone +169) despite being
72
+ aligned with the real cost objective — with ~1.2k positives across ~157
73
+ origin-groups the listwise gradient is too diffuse; the champion's bagged
74
+ logistic + FHT prior generalize better at this n.
75
+ 4. **Dilution monotonicity:** every source's damage scales with its weight
76
+ (alone > gap .20 > 4th .10), and no 4th-slot arm shows even a directional
77
+ win (best: cox1_4th +19.9±13.5, 11W/9L, wilcoxon .571 — noise-shaped loss).
78
+
79
+ ## Tier verdict
80
+
81
+ Adoption bar (tiered, user-approved): new mechanisms need ≥2σ paired WINS with
82
+ controls. **Nothing qualifies �� every arm is a loss; the best is a 1.4σ loss.**
83
+ No follow-up recommended on this axis.
84
+
85
+ DEAD (do not retest): Cox partial hazard as order source (any penalizer, any
86
+ slot, ±GAP4), cost-weighted listwise/softmax ranker (per-origin groups, late-day
87
+ gains, any slot, ±GAP4), GBM-on-martingale-residuals hybrid (any slot, ±GAP4).
88
+ Together with the earlier kills (discrete-time hazard HGB, AFT-lite+IPCW, plain
89
+ RankNet, imminence-weighted gap-HGB) this closes the survival/LTR order-source
90
+ axis: **the champion 3-way order stands.**
agent_reports_bgkf/t4_transplant.md ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # T4 TRANSPLANT — rank-4 competitor mechanisms on the head config
2
+
3
+ **Agent:** transplant lane, T4 count-flat campaign. **Date:** 2026-08-23.
4
+ **Baseline:** head 60d65da (3-way order .50 logbag / .30 wiener / .20 gap-HGB,
5
+ alpha 1.0, split_days 3, timing_weight 2.0) = **CV 1541.3** on bgkf.
6
+ Reference per-cell CSV `/tmp/ref_head_1541.csv` (asserted 1541.31).
7
+ **Parity:** the order3 replica reproduced the deployed head exactly
8
+ (champ arm: 1541.3, delta +0.0, swaps 2.27) — every arm below is paired
9
+ against a validated baseline.
10
+
11
+ **Source:** rank-4 competitor's readable source (public 1407.63 vs our
12
+ lineage 1575.31), cached `/tmp/hf_battery3/carl/` (`hierarchical_fpt.py`,
13
+ `identity_ensemble.py`, `competition_planner.py`).
14
+ **Code:** `/tmp/c27/` (precompute.py, aft_precompute.py, run.py, run_aft20.py);
15
+ per-cell CSVs `/tmp/cv_bgkfcand_c27_*.csv`. No tracked file touched,
16
+ monkeypatch only, no commits.
17
+
18
+ All arms are ORDER-ONLY: blend value-preservation keeps the logbag p42
19
+ multiset, so the count machinery is untouched (swaps 2.26–2.30 vs head 2.27).
20
+ Fold-safety: all fits on fold-train only; pools within fold-train; the
21
+ 364-day seasonal lag reads LAST year (legal); frozen constants
22
+ (beta 0.00549 V/degC) are not fits.
23
+
24
+ ## Results (paired vs head, 48 all-building scenario totals)
25
+
26
+ | arm | mechanism | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
27
+ |---|---|---|---|---|---|---|---|
28
+ | champ | parity replica | 1541.3 | +0.0±0.0 | 0.4 | 1W/1L | – | 2.27 |
29
+ | geo05 | geography tilt w=.05 | 1676.5 | **+135.2±38.5** | 3.5 | 7W/26L | .000 | 2.28 |
30
+ | geo10 | geography tilt w=.10 | 1853.5 | **+312.2±60.6** | 5.2 | 6W/37L | .000 | 2.29 |
31
+ | geo20 | geography tilt w=.20 | 1993.1 | **+451.8±65.3** | 6.9 | 5W/41L | .000 | 2.30 |
32
+ | geomult | rank(p42pctl·(250+E_b)) | 1944.2 | **+402.9±68.7** | 5.9 | 2W/36L | .000 | 2.29 |
33
+ | seas_hgb | seasonal feats in gap-HGB | 1585.9 | +44.6±26.5 | 1.7 | 9W/14L | .160 | 2.28 |
34
+ | seas_p05 | seasonal gated post w=.05 | 1541.3 | +0.0±0.0 | 0.4 | 1W/1L | – | 2.27 |
35
+ | seas_p10 | seasonal gated post w=.10 | 1541.3 | −0.0±0.0 | 1.0 | 2W/0L | – | 2.27 |
36
+ | aft10 | FP-lifetime AFT 4th @.10 | 1540.2 | −1.1±0.8 | 1.4 | 6W/5L | .520 | 2.26 |
37
+ | aft20 | FP-lifetime AFT 4th @.20 | 1559.7 | +18.4±15.6 | 1.2 | 13W/12L | .895 | 2.27 |
38
+ | carlw30 | their EB wiener in .30 slot | 1669.7 | **+128.4±43.7** | 2.9 | 14W/27L | .008 | 2.27 |
39
+ | carl4_15 | their FPT residual @.15 | 1540.0 | −1.3±8.0 | 0.2 | 6W/6L | .970 | 2.27 |
40
+ | carl4_20 | their FPT residual @.20 | 1566.0 | +24.6±17.5 | 1.4 | 10W/9L | .595 | 2.27 |
41
+
42
+ ## Tier verdict: NOTHING ADOPTS
43
+
44
+ No arm reaches the 1.5-sigma count-flat-tweak bar, let alone the 2-sigma +
45
+ controls bar for new mechanisms. Best arms (aft10 −1.1±0.8, carl4_15
46
+ −1.3±8.0) are washes; four arms are significant LOSSES.
47
+
48
+ ## Per-diagnostic notes
49
+
50
+ **Geography-aware ordering tilt (their emergency-cost pricing).**
51
+ Implemented planner-side via the `rank_score` column in `plan_tsroute`
52
+ (top-n SET changes, n itself unchanged). E_b = both depot legs +
53
+ building/room/battery service time + overtime share + daily penalty,
54
+ exactly their `mean_dedicated_trip_hours` geometry. Monotonically
55
+ catastrophic in w (+135 → +452), losses near-uniform across scenarios, so
56
+ the peer's fallback (their 007 gate: apply only when fleet mean
57
+ dedicated-trip cost ≤ 8h) is settled without a run: **all five fold-fleets
58
+ pass the gate** (means 1.9–7.7h), so gated ≡ ungated ≡ rejected. Reading:
59
+ under a fixed count, tilting marginal inclusions toward expensive-to-reach
60
+ buildings evicts true positives; geography does not price OUR misses
61
+ because the planner already routes and times whatever set it is given.
62
+ Their pricing pays off only jointly with their bigger selection set.
63
+
64
+ **Seasonal temperature signal (their one novel idea).** Full construction
65
+ transplanted (health = V − 0.00549·(T−20), 90d drift slope clipped ≤0,
66
+ 42d forecast + same-device temp 364d ago re-added, re-smoothed, min,
67
+ gate pmin ≤ 2.50V). Coverage: strict machinery valid on 54% of
68
+ device-origins; the ≤2.50V gate fires on 9.2%. As a gated within-set
69
+ permutation (their assign_multiset delivery) it is a **cost no-op at
70
+ w=.05/.10**: the gated devices are already at the very top of the champion
71
+ order, so re-permuting them changes no plan. As gap-HGB features
72
+ (seas_pmin_rx, seas_dtemp) it is a 1.7-sigma LOSS (+44.6) — the signal the
73
+ gate carries is already saturated by v_corr/tau_projected; what is left is
74
+ noise the HGB overfits. Their novelty does not transfer because our stack
75
+ already prices temperature (v_corr_*) and terminal proximity.
76
+
77
+ **Their EB Wiener (12 weekly increments, leave-building-out pool,
78
+ 1.4826·MAD diffusion).** As the .30-slot replacement: 2.9-sigma LOSS
79
+ (+128.4). Our cached per-device MLE (180d window, K=6 shrinkage toward
80
+ population median) is simply a better drift estimator here than their
81
+ 12-week median-increment with EB shrinkage toward a fold-train pool.
82
+ As their literal gated 15% rank residual on top of the champion: wash
83
+ (−1.3±8.0); at 20%: negative. Their Wiener is a weaker sibling of a slot
84
+ we already occupy with a stronger implementation.
85
+
86
+ **AFT on first-passage lifetimes (left-truncated log-normal).** Faithful
87
+ implementation confirmed: our fold fits give b0≈0.86–1.22, b1≈0.84–0.89,
88
+ sigma≈0.22–0.24 vs their published train fit b0=0.874, b1=0.889,
89
+ sigma=0.233; 79 event devices among reliable rows (theirs: 76). This is
90
+ NOT our dead AFT-on-observed-EOL — different target, truncation handled.
91
+ Still: −1.1±0.8 at their weight .10 (1.4 sigma, trivially small because the
92
+ gated set again overlaps the already-selected top), and pushing the weight
93
+ to .20 flips it negative (+18.4). Correct sign, no adoptable magnitude.
94
+
95
+ ## Is their 1407.63 method or operating point?
96
+
97
+ **Operating point.** Every mechanism in their readable source, transplanted
98
+ at matched swap count onto our order, is a wash or a loss (best −1.3,
99
+ sub-0.5-sigma). Their board profile — 743 swaps / 3349 late-days vs our
100
+ 644 / 5009 — says they buy ~99 extra swaps and convert them at ~16.8
101
+ late-days per marginal swap (ours convert at ~6.0 near our cutoff). That
102
+ conversion rate is only reachable with more inclusions on a fleet whose
103
+ tail we demonstrably cannot rank into the top-644; no count-flat ordering
104
+ graft closes it. The appetite axis is CLOSED by user directive, so this is
105
+ a diagnosis, not an action item: their gap is appetite + selection-set
106
+ size, not transferable ordering signal.