What's Changed
- feat: add NLDAS-2 handler, fix MSWEP distribution by @DarriEy in #129
- feat: NLDAS-2 + MSWEP handlers; fix MODIS_SNOW registration by @DarriEy in #130
- fix(summa): default vegeParTbl to MODIFIED_IGBP_MODIS_NOAH (match IGBP land classes) by @DarriEy in #131
- feat(attributes): pluggable attribute processors + climaclass climate classification by @DarriEy in #132
- fix(security,ci): apply RTI review Tier 1 hardening by @DarriEy in #133
- fix(geofabric): mask ocean before polygonization — eliminate coastal tentacle basins by @DarriEy in #134
- build: require climaclass>=0.3.0 for climate-classification extra by @DarriEy in #136
- refactor(registry): complete registry migration Phase A (items 9 + partial Theme A) by @DarriEy in #138
- Fix ngen sac snow by @apreucil in #137
- refactor(config): typed-config plugin path — registry migration Phase B (item 18) by @DarriEy in #139
- refactor(models): pure entry-point model loading + integrity guards (B4 + Phase C) by @DarriEy in #140
- fix(security): Tier 2 security cluster — GUI bind, TauDEM shell, safe extract (items 12/13/14) by @DarriEy in #141
- build: move JAX plugins + openai to optional dependencies (review item 15) by @DarriEy in #142
- test(core): highest-priority missing core/ tests (review item 17) by @DarriEy in #143
- fix(logging): record tracebacks at resilience broad-except sites (review item 10) by @DarriEy in #144
- fix(models): custom exceptions in principal adapters + CI guard (review item 11) by @DarriEy in #145
- ci: fast unit-test + coverage gate (CI rethink, phase A) by @DarriEy in #146
- ci: tier heavy matrices off PRs → develop/nightly (CI rethink, phase B) by @DarriEy in #147
- fix: InMemoryModelWorker picks km² column and divides by 1e6 by @DarriEy in #148
- ci: install-method matrix + drop redundant twin (CI rethink, phase C — item 16) by @DarriEy in #149
- fix(mizuroute): auto-detect SUMMA runoff variable; correct stale configs by @DarriEy in #151
- ci(install): genuinely validate pipx/uv-tool installs (import inside their venvs) by @DarriEy in #152
- fix(grace): preserve Earthdata auth across URS redirect; drop dead PO.DAAC host by @DarriEy in #153
- fix(models): resolve model-ensemble run failures (HEC-HMS, LSTM/GNN, CRHM, HYPE, CLM) by @DarriEy in #154
- fix(install+mizuroute): §8 install-path gaps (#150) + back-port SUMMA runoff-var fix (#151) to develop by @DarriEy in #155
- fix(models): alias CLM-ParFlow->CLMPARFLOW; surface meshflow exceptions by @DarriEy in #157
- fix(observations): share nested-catchment resolver across all handlers by @DarriEy in #158
- fix(paths): resolve nested catchment/basin shapefiles across non-handler sites (#159) by @DarriEy in #160
- fix(mesh): report output-coverage shortfall instead of opaque failure by @DarriEy in #161
- fix(install): close remaining §8 install-path gaps G7, G1, G6 (#156) by @DarriEy in #162
- fix(release): make the Linux binary tarball portable across distros (#156 G6) by @DarriEy in #163
- ci(deps): install-manifest consistency guard — completes Tier 2 item 16 by @DarriEy in #164
- fix(ci): green up Windows unit tests and arm64 dep install by @DarriEy in #165
- fix(ci): follow symlink in arm64 binary arch verification by @DarriEy in #166
- fix(ci): pin h5py<3.16 to match netCDF4's bundled HDF5 (fixes ARM64 red) by @DarriEy in #168
- refactor(models): canonicalize PostProcessor spelling (RTI item 23) by @DarriEy in #169
- fix(ci): pin h5py>=3.16 on x86_64 to avoid same-version HDF5 dual-load by @DarriEy in #171
- feat(domain): multiple outlets for gauge-aligned delineation by @DarriEy in #172
- fix(optimization): surface swallowed calibration-import failures; skip self-training models in SA by @DarriEy in #173
- feat(config): tiered validation of unrecognized config keys (review item 21) by @DarriEy in #174
- style: roll out
from __future__ import annotationstree-wide (RTI open Q10) by @DarriEy in #176 - feat(coupling): SUMMA+dRoute coupled calibration via dCoupler + dRoute plugin boundary by @DarriEy in #175
- fix(coupling): hand each iteration's fresh upstream output to the downstream model by @DarriEy in #177
- fix(config): typed plugin config + flat-key recognition + coverage ratchet by @DarriEy in #178
- fix(hype): correct zero-discharge from broken SLC/area/coords + worker exe path by @DarriEy in #179
- fix(hype): reconcile river/catchment id mismatch in lumped GeoData by @DarriEy in #180
- fix(crhm): forcing/projection/calibration fixes + elevation-band discretisation by @DarriEy in #181
- feat(crhm): terrain radiation (per-band slope/aspect) + orographic precip by @DarriEy in #183
- fix(coupling): make joint SUMMA+dRoute calibration runnable (pool-entry, paths, land-only routing) by @DarriEy in #182
- Enable Windows external-tool binaries + green the multi-platform release by @DarriEy in #184
- Coupled SUMMA+dRoute calibration + registry-contract test/config hardening by @DarriEy in #185
- Fix Linux release portability: $ORIGIN RPATH on versioned bundled libs by @DarriEy in #186
- chore(release): bump version to 0.9.0 by @DarriEy in #187
- Release 0.9.0 by @DarriEy in #188
Full Changelog: v0.8.5...v0.9.0