What's Changed
- chore: back-merge main into develop (release hygiene) by @DarriEy in #239
- chore: trim deprecated shims and dead code ahead of v1.0.0 by @DarriEy in #240
- feat(data): community observation backend — acquisition-backend protocol (contract 0.5.0) + posture/provenance gates by @DarriEy in #241
- fix(models): make PIHM/WRF-Hydro/WFLOW runnable and stop silent model skips by @DarriEy in #243
- feat(backends): posture-only admission for the forcing/dataset gate by @DarriEy in #242
- fix(backends): serialize manifest paths POSIX-style for Windows portability by @DarriEy in #245
- fix(sensitivity): skip gracefully when calibration produced no usable samples by @DarriEy in #244
- feat(backends): attribute selection gate at forcing/observation posture parity by @DarriEy in #246
- feat(observations): route non-streamflow obs (TWS/SWE/ET/snow-cover/groundwater) through the community backend tier by @DarriEy in #247
- feat(observations): station-id pass-through for community point/tower obs + live SNOTEL acceptance by @DarriEy in #248
- fix: repair TDX subset path + reproduce paper domain-definition configs by @DarriEy in #249
- fix(examples): reproduce paper domains from configs_orig data-pipeline flat configs by @DarriEy in #250
- fix(coupled): stage per-process sub-model settings for parallel calibration by @DarriEy in #252
- fix(config): accept integer gauge IDs + mapping path in MultiGaugeConfig; portable large_domain configs by @DarriEy in #253
- fix(models): register LSTM runner; rebuild stale NGEN forcing on unit mismatch by @DarriEy in #254
- feat(hype): elevation-banded sub-basin discretization (GeoData + forcing) by @DarriEy in #255
- fix(forcing): reprocess stale remap outputs; honor --force-rerun by @DarriEy in #256
- fix(eval): don't multiply catchment area by HRU count by @DarriEy in #257
- fix(coupled): keep groundwater-coupling flux in SUMMA output by @DarriEy in #258
- fix(watflood): read CFIF forcing vars; stage .par robustly by @DarriEy in #259
- fix(watflood): valid snow-depletion curve + openable .sdc path by @DarriEy in #260
- fix(pcrglobwb): register postprocessor in the model manifest by @DarriEy in #261
- Fix standalone NOAH-MP (noah-owp-modular) end-to-end run by @DarriEy in #262
- fix(forcing): finer CDS grid for CARRA/CERRA to preserve orographic gradients by @DarriEy in #263
- Compute final-eval metrics via the model worker when the generic target can't by @DarriEy in #264
- Sanitize '/' in algorithm names when building result filenames by @DarriEy in #265
- Run paper HYPE config semi-distributed (elevation bands) to match Paper 3 by @DarriEy in #266
- fix(forcing): invalidate remap weight cache when forcing grid changes by @DarriEy in #267
- docs(paper3): trim supplementary configs to the final manuscript's experiments by @DarriEy in #268
- fix(tests): repoint paper-config seed guard after #268 config trim by @DarriEy in #270
- chore: add CITATION.cff and .zenodo.json for Zenodo archiving by @DarriEy in #269
- chore: release prep for 0.9.2 — fix unloadable paper configs + CHANGELOG by @DarriEy in #271
- feat(pihm): semi-distributed hillslope-band mesh by @DarriEy in #272
- feat(noahmp): calibrated Nash-cascade routing for standalone Noah-MP by @DarriEy in #273
- fix(pihm): document PIHM_HILLSLOPE_BANDS in config template (develop is red) by @DarriEy in #274
- chore: bump version to 0.9.2 by @DarriEy in #275
- Release v0.9.2 by @DarriEy in #276
Full Changelog: v0.9.1...v0.9.2