Warmup period filtering for projections: read_projection_data now computes an is_warmup column marking the first 3 years of each member's time series, and both _aggregate_projections and _evaluate_projection exclude warmup data from their calculations
Projection API now sends raw per-member timeseries (projection) alongside the aggregated data (aggregated_projection), enabling CSV export of the full ensemble
Horizon dropdown labels now display the date range (e.g., "H50 (2041-01-01 to 2070-12-31)")
E2E tests verifying exported CSV content for projection data and results (column structure, ensemble member count, indicator values) for both Baskatong and Au Saumon
Simulation and projection APIs now correctly compare snow model against "none" string instead of None, fixing snow model detection after the 3.4.1 sentinel change
Simulation API explicitly casts hydro parameters to float64, preventing dtype errors when JSON round-trip through JavaScript produces integer values
Projection file upload now resets previous results, preventing stale charts from persisting
Projection remove calibration now properly clears config state
Fixed calibration bug where selecting transformation "none" (high flows) would break calibration by being incorrectly converted to null — the snow model's null sentinel was colliding with the transformation's legitimate "none" value
Backend now sends "none" as a string instead of null for the "no snow model" option, normalizing to None only at the API boundary
Parameter slider step precision increased from 0.1 to 0.01 for non-integer parameters
Renamed bucket model parameters from descriptive names (c_soil, alpha, k_r, delta, beta, k_t) to generic names (x1–x6), matching the convention used by GR4J and CEQUEAU
Calibration bar chart x-axis tick labels are now limited to 10 to prevent overlapping when many iterations are displayed
Cleaned up model registry docstrings to avoid hardcoded model lists
Added CEQUEAU model documentation: overview, mathematical formulation from Perrin (2000), 9-parameter description, and differences from original 11-parameter CEQUEAU
Added comprehensive Concepts documentation with mathematical formulations:
GR4J model: production store, unit hydrographs, routing store equations
Bucket model: linear reservoir theory, flow partitioning, comparison with GR4J
Eager file existence checks in data.py for read_catchment_data, read_projection_data, and _get_available_period to properly handle missing files with lazy Polars operations