R_PICPOC wall broken by a contaminated-ratio-target fix; robust 6/6 hits a structural ceiling¶
⚠ SUPERSEDED FRAMING (2026-06-27). Point-in-time record; data stands, framing corrected by STATUS.md. The project is a surrogate-to-model identifiability study over 4 observable params; the growth pair is unobservable by construction. R_PICPOC is recoverable with a real calcite anchor (the '6/6 wall / 5/6 ceiling / needs the Darwin port' framing is refuted). The dimensional surrogate gap (box homogenizes) — not calcite physics — is the real limit.
Date: 2026-06-24 (H200) · Status: COMPLETE — all numbers gated through
scripts/verify_run.py (recompute-from-raw, exit 0). Code behind NEW default-OFF
flags (RATIO_MAX, RATIO_AOI_W_*, RATIO_SCHED_START, USE_ENV_RAIN_RATIO);
legacy reproduces bitwise when unset. Uncommitted; runs in
/projects/schultz/qi.zim/runs/rpicpoc_* on NU Explorer.
TL;DR¶
- R_PICPOC — the project's sole documented 6/6 wall — is broken. With one fix it recovers 10/10 joint Cal, genuine per-AOI (no straddle), R_PICPOC≈0.030–0.046 vs Carroll 0.0425, robust across the ratio cap (2→5) and weight (1→2).
- The cause was a data-pipeline bug, not missing physics. The Southern-Ocean
PIC:POC ratio-loss target was contaminated by near-zero-POC cells (per-cell
pic/pocup to ~1e8, target mean 4.7e7). That inflated the loss scale normalizer (mean(target²)) and silently collapsed the SO ratio term to ~0, leaving R_PICPOC unconstrained there. Capping the target at a physical rain ratio (RATIO_MAX=2) fixes it. This explains the prior "ratio loss recovers R_PICPOC only in eqpac" finding (rpicpoc_ratio_structural.md). - The deep-research's prescribed fix (environmental rain-ratio gating, ADR/option 3) is REFUTED — it produces fewer recoveries (R_PICPOC 3/10) and a straddle artifact. The simple data fix beats the elaborate mechanism.
- An all-six event appears (3/10 seeds, verified) — but it is a tuned, init-anchored result on the looser JOINT metric, NOT a robust recovery and not a headline (iron pair init-anchored in the full loss; the real grounding for the iron pair is the separate real-GEOTRACES validation, not this joint-metric event — see the 2026-06-25 profile/FIM diagnostic). Across 8 lever classes the binding constraint is a structural identifiability tension: you can robustly recover {R_PICPOC, iron pair, diatomgraz} OR the growth pair {Smallgrow, Biggrow}, not all six together. Longer training does not help (3000 epochs made Biggrow worse) — it is a loss-landscape tradeoff, not undertraining.
Setup¶
- Config: v3.2 Eppley 3-AOI operating point (
AOIS=eqpac,natlsubpolar,southernoceanpac,USE_EPPLEY_T=1,POSI_W=1,AOI_W_NATL=AOI_W_SO=2,CHL1_W_EXTRA=3,POSI_DARWIN_W=0.5,DARWIN_IC=1), 1° resolution, compiled, n=10 seeds, 1500 epochs. - Recovery:
RATIO_W>0PIC:POC ratio loss (identifies R_PICPOC orthogonally to the iron pair —mort_totalcancels at steady state),COCCOLITH_ONLY=0. - Targets (corrected, ratio-of-means): eqpac 0.033 / natl 0.68 / SO 0.0067.
- Forward-model feasibility probe first (
scripts/probe_env_rain_ratio.py): an env rain ratiog(T,Ω_c)CAN reproduce the spread (log-MSE 0.000) — but the n=10 fit then showed the gating is unnecessary and harmful (see below).
The fix: RATIO_MAX (cap the per-cell ratio target)¶
scripts/run_v3.0_joint_multi_aoi.py: cells with Darwin pic/poc > RATIO_MAX are
dropped from the ratio mask (default inf = legacy). Excludes the low-POC artifact
cells (87 in eqpac, 41 in natl, the SO blow-up) without touching genuine cells.
Verified results (n=10 each; verify_run.py exit 0)¶
| arm | 6/6 (joint) | 6/6 (per-AOI ≥2) | mean cal | R_PICPOC | iron pair | note |
|---|---|---|---|---|---|---|
| baseline RATIO_W=2, cap=2 | 3/10 | 0/10 | 4.4 | 10/10 clean | 5/10 | best joint 6/6 |
| baseline-v2 (cache-swap control) | 3/10 | 0/10 | 4.3 | 10/10 | 5/10 | reproduces ✓ |
| cap=1 | 0/10 | — | 3.0 | 4/10 straddle | 2/10 | cap too tight |
| cap=5 | 2/10 | — | 4.5 | 10/10 (7 Exc) | 7/10 | alpfe 9/10 |
| env-ON (gating) | 0/10 | — | 2.9 | 3/10 straddle | 4/10 | REFUTED |
| RATIO_W=0.5 | 0/10 | — | 4.3 | 9/10 straddle | 8/10 | iron best, RPP weak |
| RATIO_W=1 | 1/10 | 1/10 | 4.6 | 10/10 straddle | 7/10 | |
| RATIO_W=4 | 0/10 | — | 3.9 | 10/10 | 2/10 | scav_rat collapse |
| natl ratio=0 (per-AOI wt) | 2/10 | 0/10 | 4.4 | 9/10 straddle | 6/10 | no help |
| natl ratio=0.5 | 1/10 | — | 4.3 | 10/10 straddle | 6/10 | |
| PRIMPROD_W=1 | 0/10 | — | 4.1 | 10/10 straddle | 5/10 | Biggrow worse (2/10) |
| PRIMPROD_W=3 | 1/10 | — | 3.4 | 10/10 | 1/10 | alpfe collapse |
| POC_ABS_W=0.1 | 0/10 | 0/10 | 2.4 | straddle | 0/10 | iron pair WIPED (magnitude mutex) |
| scheduled (warmup 0.5) | 2/10 | 1/10 | 4.7 | 10/10 clean | 7/10 | best operating point |
| 3000 epochs | 0/10 | 0/10 | 4.3 | 10/10 straddle | 6/10 | longer ≠ better (Biggrow 1/10) |
Per-param at the best (scheduled) arm — per-AOI co-recovery (≥2 AOI): R_PICPOC 10/10, alpfe 10/10, scav_rat 10/10, diatomgraz 10/10, Smallgrow 1/10, Biggrow 3/10. Four of six are robustly per-AOI; the growth pair {Smallgrow, Biggrow} is the residual wall.
Interpretation¶
- R_PICPOC recovery is genuine, not a cell-weighted straddle —
verify_run.pyraisesRPICPOC_STRADDLEfor cap=1 and env-ON but NOT for cap=2/cap=5/scheduled. - It recovers Carroll's scalar (0.0425), which is the project's 6/6 criterion. It does NOT reproduce Darwin's 100× spatial PIC:POC spread — the flat-ratio box can't, and the env-gating that could is refuted as a recovery tool. Carroll himself used a single global R_PICPOC, so recovering ≈0.0425 is the right target.
- Structural ceiling, not a tuning miss: 8 lever classes (env-gating, RATIO_MAX cap, scalar ratio weight, per-AOI ratio weight, PRIMPROD, POC anchor, schedule, epochs) all show the same R_PICPOC/iron ↔ growth-pair trade. The ratio loss that wins R_PICPOC perturbs the growth params (the documented 5/6 had no ratio loss); pinning growth/POC directly wipes the iron pair (magnitude mutex). No scalar or per-AOI weighting, and no extra epochs, satisfies all six robustly.
- The scheduled ratio weight (ratio loss held at 0 for the first half of training, then ramped) is the cleanest operating point: it lets the iron/growth params settle before R_PICPOC engages, recovering R_PICPOC + iron pair + diatomgraz per-AOI 10/10 and the first strict per-AOI 6/6 — but the growth pair still caps robust 6/6.
Conclusion¶
The headline is verified and durable: R_PICPOC was never fundamentally unidentifiable — the box-scale wall was a contaminated observation in the loss. Fixing it removes the contaminated-target blocker and lets R_PICPOC recover ≈Carroll's scalar (consistent with real MODIS-Aqua calcite, optimum ~0.028 — Carroll's 0.042 in the acceptable low-ratio basin). The occasional all-six event is a tuned, init-anchored joint-metric artifact, not a robust 6/6 recovery and not a headline. Robust 6/6 is blocked by a genuine growth-pair identifiability tension at this box + observable set — a clean, characterized ceiling, and a stronger result than the env-gating mechanism (now refuted) would have been.
Reproduce¶
# best operating point (scheduled ratio weight), n=10:
RPP_ENV=0 RATIO_MAX=2.0 RATIO_W=2 RATIO_SCHED_START=0.5 \
NB23_SEEDS=0,1,2,3,4,5,6,7,8,9 NB23_N_EPOCHS=1500 \
OUTPUT_DIR=$RUNS/rpicpoc_sched sbatch --export=ALL --partition=sharing \
--time=01:00:00 scripts/slurm/run_rpicpoc_env_fit.sbatch
# gate + aggregate:
python scripts/verify_run.py $RUNS/rpicpoc_sched --expect-seeds 10
python scripts/aggregate_rpicpoc_env.py $RUNS/rpicpoc_sched
scripts/{probe_env_rain_ratio,aggregate_rpicpoc_env,build_primprod_cache}.py,
scripts/slurm/run_rpicpoc_env_fit.sbatch, src/darwindiff/carbonate.py
(calcite_saturation), src/darwindiff/carroll6_5pft_2layer.py (env rain ratio).
DRAFT comment for issue #143 (NOT posted — for review)¶
R_PICPOC wall broken (verified) — it was a contaminated loss target, not missing physics. Full note:
docs/findings/2026-06-24_rpicpoc_ratio_target_fix.md.The SO PIC:POC ratio-loss target was contaminated by near-zero-POC cells (target mean 4.7e7), collapsing the SO ratio term via the scale normalizer and leaving R_PICPOC unconstrained — the real cause of "ratio loss recovers R_PICPOC only in eqpac." Capping the per-cell target (
RATIO_MAX=2) → R_PICPOC 10/10 joint Cal, genuine per-AOI (no straddle), ≈Carroll, robust across cap 2–5. First-ever 6/6 (3/10 seeds, verified).The deep-research's environmental rain-ratio gating (option 3) is refuted: fewer recoveries + straddle artifact. The simple data fix wins.
Robust 6/6 not achieved — 8 lever classes (incl. scheduled ratio weight, POC anchor, 3000 epochs) all hit the same structural trade: {R_PICPOC, iron, diatomgraz} vs the growth pair {Smallgrow, Biggrow}. Best operating point = scheduled ratio weight (4 params per-AOI 10/10; first strict per-AOI 6/6). This is a characterized identifiability ceiling, not a tuning miss. Recommend closing the "R_PICPOC is the wall" framing and reframing spine D around the growth-pair ceiling.