Skip to content

[PROBE] mass/multi-decadal-drift: long-horizon storage bounds under stationary forcing #13

Description

@hiter-joe

Summary

I would like to claim mass/multi-decadal-drift from the roadmap. I propose a
50-year synthetic experiment targeting small reporting errors that accumulate
into physically impossible storage while the reported water budget still closes.

The first version will reuse existing criteria, particularly state_bounds and
closure. It will not classify every long-term storage trend as unphysical.

Conservation law

Mass.

Residual equation

For a daily timestep:

r_t = P_t + G_t - ET_t - Q_t - (S_t - S_(t-1)) [mm per step],

where G is any declared external water exchange and S includes every reported
water store. The budget uses the supplied precipitation rather than a modified
driver echoed by the model. The initial state for a scored interval is the state
immediately before that interval.

The principal discriminating check is an existing physical bound, for example
0 <= mrso <= soil_capacity_mm. This checks absolute storage, not just its change.

Tolerance and its denominator

  • Retain the existing closure rule: abs(sum(r_t)) / sum(P_t) <= 0.05.
    The generator supplies positive accumulated precipitation, so this denominator
    does not approach zero.
  • Reuse the current state_bounds tolerance of 1e-6 mm and the case's declared
    physical capacities. This is an absolute bound check with no precipitation
    denominator.
  • Do not tighten closure merely to force the new negative control to fail.

Extending a constant fractional leak from ten to fifty years does not itself
increase its precipitation-normalized residual. The added discrimination here
comes from accumulated storage exceeding physical capacity.

How would an unphysical model fail this?

Use an exact bucket as the positive control. A proposed negative control reports
Q'_t = Q_t - epsilon and S'_t = S_t + epsilon * elapsed_days, with a fixed
epsilon = 0.012 mm/day. The true internal bucket evolves normally. The invented
storage compensates the runoff deficit, so the reported budget still closes.

The offset accumulates from the first input timestep, including spinup. The model
does not inspect the requested horizon, probe identity, seed, or future inputs.
Its runoff must remain nonnegative for the tested cases.

A standalone feasibility experiment using the existing local reference_bucket
adapter and seeds 0 through 19 produced:

  • Exact bucket: maximum soil storage 163.68 mm, below the 320 mm capacity.
  • Biased reporter: maximum soil storage over the ten-year scored prefix 225.06 mm.
  • Same biased reporter over fifty scored years: peak storage 387.18-400.26 mm.
  • First capacity violation occurred 31.18-33.24 years into the scored interval.
  • All tested closure ratios were below 1e-10.

These are preliminary local results, not an acceptance-gate result or validation
against all physical baselines. They establish a concrete short/long distinction.
Implementation will map the new negative control explicitly to state_bounds
under baselines.must_fail.

A model that fabricates bounded states and compensating fluxes could still pass.
Existing forcing-fidelity, ET-plausibility, and non-degeneracy checks should be
retained where applicable, but passing this probe alone cannot establish physical
understanding or detect every hidden leak.

How is the case generated?

Generate a five-year block of daily precipitation, temperature, and PET from a
recorded seed, then repeat it for five years of spinup and fifty scored years.
This gives exactly repeated block totals without an imposed secular forcing trend.
The initial case is warm and snow-free, with variable rainfall every third day
and a seasonal PET cycle, to isolate finite soil/canopy storage behavior.

The prototype uses 365-day model years and continuous Gregorian timestamps;
seasonality follows the forcing index rather than calendar-year boundaries.
This convention will be documented explicitly. It is a controlled periodic case,
not a claim of realistic stochastic weather or strict statistical stationarity.

The implementation will return the repository's required DataFrame/static-dict
pair, respect its length contract, and be deterministic for a given seed. No
generated forcing dataset will be committed. Five years of spinup is provisional;
settling sensitivity will be checked with a longer warmup.

Implementation and acceptance

  • Add probe.yaml, generate.py, and a physics README under
    probes/mass/multi-decadal-drift/.
  • Require the full 18,250-day scored interval through the probe's minimum-window
    mechanism; verify submitted-model evaluation cannot reduce it to an event window.
  • Add the fixed-bias negative reference model and focused discrimination tests.
  • Check reproducibility, prefix consistency, units, boundary indexing, and warmup
    sensitivity. Keep the same error magnitude across all seeds and horizons.
  • Validate the applicable physical baselines, including the bucket and the physical
    baselines used by catchment-closure. Confirm any storage-capacity assumptions are
    valid for their state definitions before finalizing the manifest.
  • Measure runtime/output size, set suitable limits, run ht validate, the targeted
    ht gate, and relevant regression/documentation checks.

The first version detects eventual physical-bound violations. Detecting bounded
secular drift would require an additional, separately justified criterion.

Will you build it?

Yes - assign it to me. I will develop the contribution after the proposal is
accepted and assigned, following the repository contribution process.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    acceptedProposal approved and assignedprobe-proposalA proposed new probe

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions