Changelog#
Changelog#
All notable changes to SYMFLUENCE are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]#
[0.7.1] - 2026-03-01#
Fixed#
HPC file-locking workaround: Added tempfile fallback (attempt 4) to ERA5 NetCDF writer for parallel filesystems (Lustre/GPFS/BeeGFS) where HDF5
fcntl()locking fails even withHDF5_USE_FILE_LOCKING=FALSE. Writes to$TMPDIRfirst, then moves the file to the target path.mizuRoute Makefile build: Collapse multi-line
LIBNETCDFbefore appending RPATH flags to avoid breaking backslash continuation (caused “missing separator” errors on CI).ngen linker (expat): Detect system UDUNITS2 via
pkg-config/ldconfig(not just explicit env var) so-lexpatis added for XML symbol resolution.Wflow calibration: Fix snow parameters, routing, and unit conversion issues. Add Oudin PET, log-transform bounds, and sub-daily resampling support.
FUSE preprocessing: Make streamflow observations optional.
MPI launcher: Add fallback when preferred launcher fails; prefer
mpirunoversrunfor launcher detection.
Added#
SPDX license headers on all source files.
Coverage tracking in cross-platform CI workflow.
Unit tests for NGEN, JFUSE, HYPE model runners and configs.
Unit tests for core modules (file_utils, validation, path_resolver).
Unit tests for
_safe_to_netcdffallback chain.WATFLOOD: Expand calibration to 16 parameters with tests.
Bow River preset and default
DEM_SOURCEto Copernicus.Config-hash stage invalidation for workflow orchestrator.
[0.7.0] - 2026-02-10#
Note: This release jumps from the last tagged release v0.5.2 directly to v0.7.0. Versions 0.5.3–0.6.0 were development milestones on the
developbranch and were never tagged or published tomain. Their changes are included in this release and documented below in the [0.6.0] and [0.5.x] sections for historical reference.
Breaking Change: This release refactors the CLI to a subcommand architecture. All existing CLI commands will need to be updated.
Added#
New CLI Commands
symfluence gui launch- Panel-based web GUI for workflow managementsymfluence data download|list|info- Standalone dataset acquisition without a full project--shapefileoption forsymfluence data downloadto derive bounding box from a shapefile
Documentation Improvements
New CFuse model guide (experimental differentiable PyTorch-based FUSE)
New JFuse model guide (experimental JAX-based FUSE with gradient support)
New WM-Fire model guide (wildfire spread simulation with RHESSys)
Comprehensive CLI reference documentation with all commands and options
Expanded configuration parameter reference
Fixed Python API examples in calibration documentation
New testing guide for contributors with pytest patterns and CI integration
Added agent-assisted contribution workflow documentation
Agent Improvements
Enhanced
show_staged_changeswith diff statistics and file summaryImproved
generate_pr_descriptionwith auto-detection of modified filesBetter PR descriptions with context-specific sections and testing checklists
Added documentation for fuzzy matching threshold parameter
HBV Module Refactoring
New
losses.pymodule with differentiable NSE/KGE loss functions and gradient utilitiesNew
parameters.pymodule with parameter bounds, defaults, and scaling utilitiesLazy imports in
__init__.pyfor optional JAX dependencyReduced
model.pyby ~650 lines through modularization
HBV Parameter Regionalization
Neural transfer functions for spatially-varying parameter estimation
Support for catchment attribute-based parameter prediction
HBV Calibration Improvements
Hydrograph signature metrics for multi-objective calibration
Enhanced optimizer with adaptive learning rates
New modular command structure in
src/symfluence/cli/:argument_parser.py- Main parser with subcommand structurevalidators.py- Validation utilitiescommands/directory with category-specific handlers
Changed#
Complete CLI Refactor
Replaced flat flag-based interface with modern two-level subcommand architecture
New structure:
symfluence <category> <action>instead ofsymfluence --flag9 command categories: workflow, project, binary, config, job, example, agent, gui, data
Eliminated complex mode detection logic
Archived old
cli_argument_manager.pyfor reference
New CLI Structure
# Workflow commands symfluence workflow run [--config CONFIG] symfluence workflow step STEP_NAME symfluence workflow list-steps symfluence workflow status # Project commands symfluence project init [PRESET] symfluence project pour-point LAT/LON --domain-name NAME --definition METHOD symfluence project list-presets # Binary/tool commands symfluence binary install [TOOL...] symfluence binary validate symfluence binary doctor # Configuration commands symfluence config validate symfluence config validate-env symfluence config list-templates # Job commands symfluence job submit [WORKFLOW_CMD] [SLURM_OPTIONS] # Example commands symfluence example launch EXAMPLE_ID symfluence example list # Agent commands symfluence agent start symfluence agent run PROMPT # GUI commands symfluence gui launch # Data commands symfluence data download DATASET --bbox W S E N symfluence data list symfluence data info DATASET
HBV Sub-Daily Parameter Scaling
Implemented exact exponential scaling for recession coefficients (K0, K1, K2)
Formula:
k_sub = 1 - (1 - k_daily)^(dt/24)replaces linear approximationEliminates ~5-13% error in recession behavior at sub-daily timesteps
Flux rate parameters (CFMAX, PERC) continue to use linear scaling
Added
FLUX_RATE_PARAMSandRECESSION_PARAMSconstants
MESH Preprocessing Consolidation
Moved configuration defaults to dedicated
config_defaults.pyStreamlined
config_generator.pyandmeshflow_manager.pyExpanded
parameter_fixer.pywith robust parameter handlingUpdated NALCMS to CLASS land cover mapping (wetland, snow/ice corrections)
Added unit conversion utilities for forcing data
Improved logging (replaced debug prints with proper logger calls)
FLUXCOM ET Acquisition Rework
Replaced stub ICOS downloader with fully functional
_download_from_icos()using ICOS Carbon Portal metadata APISmart variable matching (exact name, then substring, then fallback)
Automatic unit conversion (W/m2, mm/hr, mm/day)
Nearest-neighbor fallback for basins smaller than the grid cell
MODIS ET Acquisition Improvements
Spatial subsetting via sinusoidal projection for large tiles with small domains
Improved special-value masking (all MODIS QC codes, not just fill value)
SDS name matching now tries exact match before substring search
Reporting Module Cleanup
Simplified plotter implementations
Improved shapefile handling
Example Notebooks — Typed Config Migration
Migrated notebooks 02a–03b from legacy
yaml.safe_load+ flat dict pattern toSymfluenceConfig.from_minimal()typed config APIAll 9 example notebooks (01a–04b) now use the same typed, validated, frozen config pattern
Removed MAF-specific language from all example notebooks; acquisition comments now reference
DATA_ACCESS: 'cloud'or'maf'config settingFixed pre-existing bugs: 02a
NameErroron config access, 03bcf.managerswrong variable name, 03b config overwrite bug, 03b outdated CLI syntax
Fixed#
MESH lumped mode routing: switched from
run_deftonoroutemode to correctly preserve lower-zone baseflow (wf_lzs);run_defin MESH 1.5.6 bypassesSTGGWstorage, causing zero baseflowTraceback handling in MESH postprocessor
Added missing
pydanticruntime dependency topyproject.tomlFixed invalid escape sequences in
__init__.pywarning filters for Python 3.12+ compatibilityCI pipeline now correctly fails on unit/integration test regressions (removed
|| truefrom pytest invocations)
Documentation#
Added comprehensive sub-daily simulation section to HBV model guide
Documented parameter scaling approaches (exact vs linear)
Added validation methodology for sub-daily implementations
Migration Guide#
Old Command (v0.6.x) |
New Command (v0.7.0) |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Benefits of new CLI:
Clearer command organization and discoverability
Better help messages (
symfluence workflow --helpshows workflow-specific options)Easier to extend with new commands
Industry-standard pattern (like git, docker, kubectl)
[0.6.0] - 2025-12-29#
Added#
Calibration Observation Data Utilities
download_smhi_discharge.py- Download discharge data from Swedish Meteorological Instituteprepare_streamflow_for_calibration.py- Convert discharge CSV to calibration formatsetup_calibration.py- Automated calibration setup with parameter boundsCalibration demo tests for Elliðaár (Iceland) and Fyris (Sweden) basins
CARRA/CERRA Data Processing Improvements
Fixed CARRA longitude normalization in spatial subsetting
FORCING_TIME_STEP_SIZEconfiguration support (10800s for CERRA)FORCING_SHAPE_ID_NAMEconfiguration support with default ‘ID’
Changed#
CLI orchestrator integration completed with full workflow execution support
Version bump to 0.6.0 across all version references
Removed#
Deprecated CONFLUENCE backward compatibility
Removed
CONFLUENCE.pywrapper fileRemoved
./confluenceshell scriptRemoved
CONFLUENCE_DATA_DIRandCONFLUENCE_CODE_DIRconfiguration supportAll documentation now uses SYMFLUENCE exclusively
Fixed#
CARRA spatial subsetting for small basin extents
EASYMORE remapping failures for CARRA datasets
[0.5.11] - 2025-12-15#
Changed#
Enhanced ngen outlet detection
Cleaned up technical debt
Fixed#
Mypy type errors in config property inheritance
Completed typed config migration for base classes
Improved#
Centralized evaluation metric logic
Improved linting and added ruff tests to pyproject.toml
[0.5.3] - 2025-11-15#
Added#
Support for cloud acquisition of:
Copernicus DEM
MODIS land cover
Global USDA-NRCS soil texture class map
Forcing datasets: ERA5, NEX-GDDP, CONUS404, AORC
Agnostic pipeline for cloud-based ERA5 matched workflows
Full cloud-integrated workflow tested with ERA5
Made MPI worker log generation optional
Initial t-route support (in progress)
[0.5.2] - 2025-11-12#
Major: Formal Initial Release with End-to-End CI Validation#
This release marks the first fully reproducible SYMFLUENCE workflow with continuous integration.
Added#
End-to-End CI Pipeline (Example Notebook 2a Equivalent) Integrated a comprehensive GitHub Actions workflow that builds, validates, and runs SYMFLUENCE automatically on every commit to
main.Compiles all hydrologic model dependencies (TauDEM, mizuRoute, FUSE, NGEN).
Validates MPI, NetCDF, GDAL, and HDF5 environments.
Executes key steps (
setup_project,create_pour_point,define_domain,discretize_domain,model_agnostic_preprocessing,run_model,calibrate_model,run_benchmarking).Confirms reproducible outputs under
SYMFLUENCE_DATA_DIR/domain_Bow_at_Banff.Runs both wrapper (
./symfluence) and direct Python entrypoints equivalently.
Changed#
Updated
external_tools_config.pyto include automatic path resolution for TauDEM binaries (e.g.,moveoutletstostrms → moveoutletstostreams).Expanded logging and run summaries for CI visibility.
Protected
mainbranch to require successful CI validation before merge.
Notes#
This release formalizes SYMFLUENCE’s reproducibility framework, guaranteeing that all supported workflows can be rebuilt and validated automatically on clean systems.
[0.5.0] - 2025-01-09#
Major: CONFLUENCE → SYMFLUENCE Rebranding#
This is the rebranding release. The project is now SYMFLUENCE (SYnergistic Modelling Framework for Linking and Unifying Earth-system Nexii for Computational Exploration).
Added#
Complete rebranding to SYMFLUENCE
New domain: symfluence.org
PyPI package:
pip install symfluenceBackward compatibility for all CONFLUENCE names (with deprecation warnings)
Changed#
Main script:
CONFLUENCE.py→symfluence.pyShell command:
./confluence→./symfluenceConfig parameters:
CONFLUENCE_*→SYMFLUENCE_*Repository:
DarriEy/CONFLUENCE→symfluence-org/SYMFLUENCE
Deprecated#
All CONFLUENCE naming (removed in v0.6.0)
Links#
Documentation: symfluence.readthedocs.io