From 551b6ad86b067394a7c5947b1274933436daf283 Mon Sep 17 00:00:00 2001 From: jam-sudo Date: Mon, 6 Jul 2026 20:00:20 -0400 Subject: [PATCH] docs(oatp): formalize the +BSA PSu,inf deferral (data-blocked) after closing the auto-ECM xfail A 3-agent investigation of the diagnosis section 9 '+BSA / PSu,inf OATP' lever found the re-anchor already shipped (#66: abundance 5.0e5->1.3e5 onto non-holdout pitavastatin) and the lever headline-inert (DE-44). #103 closed the last loose end (test_predict_auto_ecm) via a stack-robust fold-error gate. The remaining +BSA PS reparameterization is now formally deferred: the per-substrate PSu,inf(+BSA)/Kp values are in the paywalled Li/Benet 2020 primary source (not to be fabricated), and it is near-zero-observable (the abundance re-anchor absorbs the PS change; pravastatin is validation-only) on top of headline-inert. Records this in the DE-44 status line and a 2026-07-06 experiment-log entry so it is a closed, documented decision rather than a dangling TODO. --- docs/research/dead-ends.md | 2 +- docs/research/experiment-log.md | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/research/dead-ends.md b/docs/research/dead-ends.md index 81373f8..0fcff04 100644 --- a/docs/research/dead-ends.md +++ b/docs/research/dead-ends.md @@ -308,7 +308,7 @@ Artifacts: `data/enzymes/ugt_ivive_sf.json` (all-1.0 audited registry), `src/sis - **Hierarchical multi-assay target-denoising** — data fatal: of 5,338 unique CLint compounds **exactly 1** has cross-source measurements (field max ~50) → Dawid-Skene unidentifiable. Mechanism also wrong: Bowman & Benet 2019 (our own cited source) shows interlab variance is *systematic per-protocol bias*, not random noise — averaging averages bias. - **Calibrated-CLint-uncertainty → meta *routing*** — the inverse-variance mechanism already ran: DE-26 M7 Local-BMA **+0.082 worse**, M9 +0.014 worse. Only the *PI-recalibration* half survives (touches the interval, not the point estimate → cannot trip co-calibration), and only for *coverage/UQ*, not point-AAFE. CLint-CV ranks |Cmax fold-error| weakly (SRCC≈0.16). - **Per-subclass measured-input routing (aggregate)** — the ML track is `predict_cmax(smiles, dose)`, **structurally blind to measured ADME**, so the strongest meta track (3.01) is frozen and the shipped measured "≈11% gain" is *engine-only* and never propagates to the meta headline. Capability already shipped; the "targeted-selection" wrapper adds nothing testable. -- **+BSA / albumin-mediated PSu,inf (OATP)** — *keep as correctness only, not a lever*: a real primary-literature mechanistic fix (Li/Benet 2020, ~1.9–2.0 fold, no scaling) but **inert** — touches 1 holdout drug (pravastatin, inviolable) and 0 prospective → ΔMeta≈0.000. Ships under correctness-over-benchmark (spec `2026-06-04-oatp-ecm-reanchor-design.md`). +- **+BSA / albumin-mediated PSu,inf (OATP)** — *keep as correctness only, not a lever*: a real primary-literature mechanistic fix (Li/Benet 2020, ~1.9–2.0 fold, no scaling) but **inert** — touches 1 holdout drug (pravastatin, inviolable) and 0 prospective → ΔMeta≈0.000. Ships under correctness-over-benchmark (spec `2026-06-04-oatp-ecm-reanchor-design.md`). **Status 2026-07-06:** the abundance re-anchor (off holdout pravastatin → non-holdout pitavastatin) and the auto-ECM xfail closure shipped (statin FE-gates green, #103); the **+BSA PS reparameterization itself is formally DEFERRED as data-blocked** — the per-substrate PSu,inf(+BSA)/Kp values live only in the paywalled Li/Benet 2020 primary source (AAPS J; not to be fabricated), and even implemented it is near-zero-*observable* (the abundance re-anchors to pitavastatin, so only *relative* statin PS shifts; pravastatin stays validation-only) on top of headline-inert. Re-open only if the primary-source table becomes available. - **Structure→F as engine prior/anchor** — collides DE-28 (repo's own structure→F predictor = scaffold-CV R²=−0.09; the external "Q²=0.58" is the optimistic/AD-filtered tail) + DE-43 damping + circularity (engine E and structure→F are both functions of the same SMILES → no orthogonal information = DE-23 in F clothing). **Why the whole class fails (unifying):** CLint enters the pipeline **only through the engine track**, which the fixed-weight meta damps to ~18% pass-through (DE-43) under r>0.986 track co-calibration (DE-26). So any CLint improvement *in isolation* either re-learns the existing weights (null) or breaks co-calibration (regression) — the pattern of 18+ prior reverts. The floor is two floors (DE-14 target-noise + mechanistic transporter–enzyme-interplay IVIVE), neither reachable from the CLint side. diff --git a/docs/research/experiment-log.md b/docs/research/experiment-log.md index fa8a201..75ae0dc 100644 --- a/docs/research/experiment-log.md +++ b/docs/research/experiment-log.md @@ -10,6 +10,33 @@ Reverse-chronological. The project README carries only the **current** headline --- +## 2026-07-06 — OATP1B1 ECM: closed the FLUX-1 auto-ECM xfail; +BSA PSu,inf formally deferred (data-blocked) + +A 3-agent investigation of "the one un-foreclosed accuracy lever" (diagnosis §9 — the +BSA / +albumin-mediated PSu,inf OATP correction, Li/Benet 2020) found the re-anchor already shipped and +the lever headline-inert, and closed its last test loose end: + +- **Re-anchor already done** (#66, 2026-06-04): OATP1B1 abundance 5.0e5 → 1.3e5, calibrated on + pitavastatin (non-holdout), pravastatin demoted to validation-only (Invariant #5 restored). + `test_oatp_ecm_statins[pravastatin, pitavastatin]` were already un-xfailed and passing. +- **Closed the last loose end (#103):** `test_predict_auto_ecm.py` still pinned two auto-ECM Cmax + values (0.0294 / 0.00116) computed under the old 5.0e5 abundance — 53% / 90% stale under the live + 1.3e5, so both tests were xfailed. Their purpose is mechanical (auto-activation fires, warning + emitted), and Cmax accuracy is already guarded by the sibling `test_oatp_ecm_statins.py`, so the + fragile exact pins were replaced with that sibling's **stack-robust fold-error gate** (pravastatin + FE<3.0, pitavastatin FE<3.2) and un-xfailed. Verified public-clone deterministic: pravastatin Cmax + 0.0450 (FE 1.00), pitavastatin 0.0022 (FE 1.58); all 4 tests pass strict. +- **+BSA PSu,inf formally deferred (DE-44):** the mechanistic upgrade (replace `hepatic_ecm.json` + seed PS midpoints with Li/Benet 2020 +BSA-derived PSu,inf, then re-derive abundance) is + **data-blocked** — the per-substrate PSu,inf/Kp values are in the paywalled AAPS J primary source + ([DOI](https://doi.org/10.1208/s12248-020-00528-y)), not to be fabricated — and near-zero-observable + (the abundance re-anchor absorbs the PS change; only *relative* statin shifts; pravastatin is + validation-only) on top of headline-inert. Deferred until the primary-source table is available. + +No headline change (2.743). The engine's OATP1B1 ECM is correct and tested; the residual is +provenance (seed vs +BSA PS), not accuracy — a third correctness-not-accuracy finding this cycle, +after the RBP honest-1.0 fix and the prospective re-score. + ## 2026-07-05 — Prospective N=28 re-scored on the current engine: FLUX-1 does not improve OOD Cmax (DE-54) Re-ran the 2026-06-01 public-clone prospective set (28 single-agent oral SM 2024-2025 FDA NMEs)