{
  "openapi": "3.1.0",
  "info": {
    "title": "HydroModPy configuration schema",
    "version": "1.0",
    "description": "Pydantic-validated schema for the HydroModPy TOML root configuration. Generated from ``HydroModPyConfig`` and wrapped into an OpenAPI document so it can be rendered by the Stoplight Elements viewer on ``schema_explorer.rst``."
  },
  "paths": {},
  "components": {
    "schemas": {
      "HydroModPyConfig": {
        "additionalProperties": false,
        "description": "Top-level configuration for HydroModPy.\n\nAggregates sub-components (workspace, geographic, domain, data, flow,\ntransport, solver, modflownwt, modflow6, display)\ninto a centralized,\nhierarchical model and validates optional flow parameters as\n`FieldParamConfig` dictionaries.",
        "properties": {
          "workflow": {
            "$ref": "#/components/schemas/WorkflowConfig",
            "description": "Workflow configuration. `workflow.mode` must be one of 'simulation', 'calibration', 'overview', 'comparison', 'testbed', 'site_selection'. Drives dispatch in `hmp run <toml>` and in API-driven callers that instantiate `HydroModPyConfig` from a frontend form.",
            "examples": [
              {
                "mode": "simulation"
              }
            ],
            "x-hmp-profile": "user"
          },
          "workspace": {
            "$ref": "#/components/schemas/WorkspaceConfig",
            "description": "Configuration block for the project workspace and folder structure.",
            "examples": [
              {
                "project_root": "."
              }
            ],
            "x-hmp-profile": "user"
          },
          "geographic": {
            "$ref": "#/components/schemas/GeographicConfig",
            "description": "Configuration block for geographic and watershed delineation parameters.",
            "x-hmp-profile": "user"
          },
          "domain": {
            "$ref": "#/components/schemas/DomainConfig",
            "description": "Domain configuration defining domain depth plus the spatial-support mode used for heterogeneous parameter mapping (`none`, `geology`, or `zones`).",
            "x-hmp-profile": "user"
          },
          "data": {
            "$ref": "#/components/schemas/DataManagersConfig",
            "description": "Data-managers configuration. Use `data.types` to declare requested families (for example `geology`). The launcher can also infer extra families from other sections (domain, flow), controlled by `data.inference_mode` ('warn' or 'strict').",
            "x-hmp-profile": "user"
          },
          "flow": {
            "$ref": "#/components/schemas/FlowConfig",
            "description": "Flow process configuration with declared parameter ids in [flow].param_list and payloads validated from [flow.param.<id>] TOML sections.",
            "x-hmp-profile": "user"
          },
          "transport": {
            "$ref": "#/components/schemas/TransportConfig",
            "description": "Transport process configuration, with solver-specific parameter blocks under [transport.modpath.parameters], [transport.mt3dms.parameters], and [transport.modflow6gwt.parameters].",
            "x-hmp-profile": "user"
          },
          "simulation": {
            "$ref": "#/components/schemas/SimulationConfig",
            "description": "Optional simulation orchestration block loaded from [simulation] and [[simulation.process]]. When absent, the launcher uses its default fixed phase order.",
            "x-hmp-profile": "user"
          },
          "solver": {
            "$ref": "#/components/schemas/SolverConfig",
            "description": "Global solver selection loaded from [solver.backend].",
            "x-hmp-profile": "user"
          },
          "modflownwt": {
            "$ref": "#/components/schemas/ModflowConfig",
            "description": "Expert MODFLOW-NWT package configuration loaded from [modflownwt.runtime.<package>], [modflownwt.process_specific], [modflownwt.sgrid.planar], and [modflownwt.sgrid.vertical].",
            "x-hmp-profile": "expert"
          },
          "modflow6": {
            "$ref": "#/components/schemas/Modflow6Config",
            "description": "Expert MODFLOW 6 package configuration loaded from [modflow6.runtime], [modflow6.process_specific], [modflow6.sgrid.planar], and [modflow6.sgrid.vertical].",
            "x-hmp-profile": "expert"
          },
          "display": {
            "$ref": "#/components/schemas/DisplayConfig",
            "description": "Optional display and export toggles loaded from the [display] section.",
            "x-hmp-profile": "user"
          },
          "persistence": {
            "$ref": "#/components/schemas/PersistenceConfig",
            "description": "Storage backend toggles loaded from [persistence]. Drives the DuckDB catalog, Zarr field arrays, Parquet tables, and the `hydromodpy.lock` reproducibility manifest.",
            "x-hmp-profile": "user"
          },
          "analysis": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnalysisConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional analysis hub loaded from [analysis]. Aggregates [analysis.capability_gallery] (figure publication), and [analysis.comparison] (simulation-comparison launcher).",
            "x-hmp-profile": "dev"
          },
          "overview": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OverviewConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional overview report settings loaded from the [overview] section.  When present without [simulation], triggers the data-overview (watershed identity card) workflow.",
            "x-hmp-profile": "user"
          },
          "mesh_catchment": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeshCatchmentConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional mesh-only settings loaded from the [mesh_catchment] section. Mesh-only public runs should use [simulation.process] with type='mesh'; the standalone mesh API can still consume this section directly.",
            "x-hmp-profile": "user"
          },
          "mesh_input": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeshInputConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional external mesh declaration loaded from the [mesh_input] section. Declares a pre-existing planar mesh (and optional solver exchange bundle) the simulation or comparison workflow should consume instead of running the embedded mesh-catchment workflow. Mutually exclusive with [mesh_catchment].",
            "x-hmp-profile": "user"
          },
          "calibration": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CalibrationConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional calibration settings loaded from the [calibration] section.  When present, triggers the calibration workflow.",
            "x-hmp-profile": "user"
          },
          "testbed": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TestbedConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional method-testbed settings loaded from the [testbed] section. Drives the orchestration layer over child runners (comparison or simulation) and is dispatched when workflow.mode='testbed'.",
            "x-hmp-profile": "user"
          },
          "site_selection": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SiteSelectionConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional upstream basin site-selection workflow configuration.",
            "x-hmp-profile": "user"
          },
          "hydrometry": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HydrometryConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional hydrometric observations used by data and site-selection workflows.",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "workflow",
          "workspace",
          "geographic"
        ],
        "title": "HydroModPyConfig",
        "type": "object"
      },
      "AnalysisConfig": {
        "additionalProperties": false,
        "description": "Hub aggregating every post-simulation analysis sub-section.\n\nEach field is optional: ``[analysis.capability_gallery]`` selects figures\nfor the versionable gallery, and ``[analysis.comparison]`` drives the\ncomparison launcher.",
        "properties": {
          "batch": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RegionalLabConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional regional-lab batch settings loaded from [analysis.batch]. Parsed standalone via RegionalLabLauncher under the section name [regional_lab].",
            "x-hmp-profile": "user"
          },
          "capability_gallery": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CapabilityGalleryConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional publication block copying selected run figures into a versionable capability-gallery source folder, loaded from [analysis.capability_gallery].",
            "x-hmp-profile": "user"
          },
          "comparison": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ComparisonSection"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional simulation-comparison block loaded from [analysis.comparison]. Parsed standalone via SimulationComparisonConfig under the section name [comparison].",
            "x-hmp-profile": "user"
          }
        },
        "title": "AnalysisConfig",
        "type": "object"
      },
      "AreaCriteriaConfig": {
        "additionalProperties": false,
        "description": "Area criterion configuration.",
        "properties": {
          "mode": {
            "default": "report_only",
            "description": "How basin area contributes to selection.",
            "enum": [
              "hard_reject",
              "warning",
              "score",
              "stratify",
              "report_only"
            ],
            "examples": [
              "hard_reject"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "target_area_km2": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Named target area used for reporting or strict area profiles.",
            "title": "Target Area Km2",
            "x-hmp-profile": "user"
          },
          "preferred_area_km2": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Preferred area used by score-based campaigns.",
            "title": "Preferred Area Km2",
            "x-hmp-profile": "user"
          },
          "score_half_width_fraction": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Relative half-width of the area score around preferred_area_km2.",
            "title": "Score Half Width Fraction",
            "x-hmp-profile": "user"
          },
          "hard_min_area_km2": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Hard lower area bound when configured.",
            "title": "Hard Min Area Km2",
            "x-hmp-profile": "user"
          },
          "hard_max_area_km2": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Hard upper area bound when configured.",
            "title": "Hard Max Area Km2",
            "x-hmp-profile": "user"
          },
          "ranges": {
            "description": "Explicit area ranges used for hard rejection, warnings or stratification. Prefer this over target/preferred area fields when the campaign is defined by minimum and maximum basin sizes.",
            "items": {
              "$ref": "#/components/schemas/AreaRangeConfig"
            },
            "title": "Ranges",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "title": "AreaCriteriaConfig",
        "type": "object"
      },
      "AreaRangeConfig": {
        "additionalProperties": false,
        "description": "Readable basin-area interval used by selection criteria.",
        "properties": {
          "range_id": {
            "default": "",
            "description": "Stable identifier for the area range.",
            "examples": [
              ""
            ],
            "title": "Range Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "label": {
            "default": "",
            "description": "Human-readable area range label.",
            "examples": [
              ""
            ],
            "title": "Label",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "min_area_km2": {
            "description": "Minimum basin area for this range.",
            "examples": [
              1.0
            ],
            "exclusiveMinimum": 0,
            "title": "Min Area Km2",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "max_area_km2": {
            "description": "Maximum basin area for this range.",
            "examples": [
              1.0
            ],
            "exclusiveMinimum": 0,
            "title": "Max Area Km2",
            "type": "number",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "min_area_km2",
          "max_area_km2"
        ],
        "title": "AreaRangeConfig",
        "type": "object"
      },
      "BasConfig": {
        "additionalProperties": false,
        "description": "BAS package settings.",
        "properties": {
          "hnoflo": {
            "default": -9999.0,
            "description": "BAS no-flow head sentinel value (HNOFLO).",
            "examples": [
              -9999.0
            ],
            "title": "Hnoflo",
            "type": "number",
            "x-hmp-profile": "expert"
          }
        },
        "title": "BasConfig",
        "type": "object"
      },
      "BoussinesqBackend": {
        "additionalProperties": false,
        "description": "Select the Boussinesq flow backend.",
        "properties": {
          "backend": {
            "const": "boussinesq",
            "default": "boussinesq",
            "description": "Discriminator tag selecting the Boussinesq flow backend.",
            "examples": [
              "boussinesq"
            ],
            "title": "Backend",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "BoussinesqBackend",
        "type": "object"
      },
      "BrgmGeology1mSource": {
        "additionalProperties": false,
        "description": "BRGM 1:1M national geological map (CODE_LEG legend).",
        "properties": {
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "SHP/GPKG/GeoJSON mask for spatial filtering/clipping.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Use project extent for bbox-based data retrieval.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore cache and re-download from API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "source": {
            "const": "brgm_1m",
            "default": "brgm_1m",
            "description": "Discriminator tag selecting the BRGM 1:1M geology provider.",
            "examples": [
              "brgm_1m"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "BrgmGeology1mSource",
        "type": "object"
      },
      "BrgmGeology50kSource": {
        "additionalProperties": false,
        "description": "BRGM 1:50K departmental geological map (CODE_LEG legend).",
        "properties": {
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "SHP/GPKG/GeoJSON mask for spatial filtering/clipping.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Use project extent for bbox-based data retrieval.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore cache and re-download from API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "source": {
            "const": "brgm_50k",
            "default": "brgm_50k",
            "description": "Discriminator tag selecting the BRGM 1:50K geology provider.",
            "examples": [
              "brgm_50k"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "BrgmGeology50kSource",
        "type": "object"
      },
      "BudgetConfig": {
        "additionalProperties": false,
        "description": "Budget extraction configuration.",
        "properties": {
          "spatial_fields": {
            "default": true,
            "description": "Extract per-cell budget fields (DRN, RCH, etc.) into Zarr.",
            "examples": [
              true
            ],
            "title": "Spatial Fields",
            "type": "boolean",
            "x-hmp-profile": "dev"
          }
        },
        "title": "BudgetConfig",
        "type": "object"
      },
      "CalibObjectiveBlockDecl": {
        "additionalProperties": false,
        "description": "Weighted metric block used by a composite objective.\n\nA block consumes one or more named outputs, applies one metric, and\ncontributes ``weight`` to the final minimization cost. Blocks make mixed\nobjectives explicit, for example combining heads, discharge, and transport\nsignals in one calibration session.",
        "properties": {
          "name": {
            "description": "Unique block identifier used in logs and persistence.",
            "examples": [
              "example"
            ],
            "title": "Name",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "metric": {
            "default": "rmse",
            "description": "Metric key. One of rmse, nse, kge, mae.",
            "enum": [
              "rmse",
              "nse",
              "kge",
              "mae"
            ],
            "examples": [
              "rmse"
            ],
            "title": "Metric",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "weight": {
            "default": 1.0,
            "description": "Relative weight of this block in the composite sum.",
            "examples": [
              1.0
            ],
            "exclusiveMinimum": 0.0,
            "title": "Weight",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "uses_outputs": {
            "description": "Outputs (by name) consumed by this block.",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "title": "Uses Outputs",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "normalize_cost": {
            "default": false,
            "description": "When True, divide the block cost by a reference scale (observed std fallback mean absolute value).",
            "examples": [
              false
            ],
            "title": "Normalize Cost",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "transform": {
            "default": "identity",
            "description": "Per-block cost transform applied before weighting.",
            "enum": [
              "identity",
              "log",
              "inverse"
            ],
            "examples": [
              "identity"
            ],
            "title": "Transform",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "name",
          "uses_outputs"
        ],
        "title": "CalibObjectiveBlockDecl",
        "type": "object"
      },
      "CalibOutputBoundary": {
        "additionalProperties": false,
        "description": "Observable extracted from a boundary package.\n\nUse this variant for fluxes integrated over a named boundary\n(drains, rivers, GHB) referenced by ``boundary_id``.",
        "properties": {
          "variable": {
            "description": "Simulated variable to extract (e.g. 'discharge').",
            "examples": [
              "example"
            ],
            "title": "Variable",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "support": {
            "const": "boundary",
            "default": "boundary",
            "description": "Discriminator tag. 'boundary' sums flux at boundary_id.",
            "examples": [
              "boundary"
            ],
            "title": "Support",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "boundary_id": {
            "description": "Boundary package identifier.",
            "examples": [
              "example"
            ],
            "title": "Boundary Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "time": {
            "anyOf": [
              {
                "enum": [
                  "all",
                  "last",
                  "first"
                ],
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ],
            "default": "all",
            "description": "'all' keeps every time step; 'last' / 'first' selects one; a list of ISO timestamps selects specific steps.",
            "examples": [
              "all"
            ],
            "title": "Time",
            "x-hmp-profile": "user"
          },
          "reducer": {
            "default": "none",
            "description": "Aggregation over the retained time slice.",
            "enum": [
              "mean",
              "sum",
              "last",
              "none"
            ],
            "examples": [
              "mean"
            ],
            "title": "Reducer",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "observed_values": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Hard-coded observed values (used by twin-synthetic cases).",
            "title": "Observed Values",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "variable",
          "boundary_id"
        ],
        "title": "CalibOutputBoundary",
        "type": "object"
      },
      "CalibOutputCell": {
        "additionalProperties": false,
        "description": "Observable extracted at one structured cell.\n\nUse this variant for explicit ``(row, col)`` selectors on a structured\ngrid, optionally with a non-zero ``layer``. ``cell_id`` is a flat index\naccepted on backends that expose one.",
        "properties": {
          "variable": {
            "description": "Simulated variable to extract (e.g. 'head').",
            "examples": [
              "example"
            ],
            "title": "Variable",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "support": {
            "const": "cell",
            "default": "cell",
            "description": "Discriminator tag. 'cell' reads one structured cell.",
            "examples": [
              "cell"
            ],
            "title": "Support",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "cell_id": {
            "anyOf": [
              {
                "description": "Non-negative integer.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Flat cell index when the backend exposes one.",
            "title": "Cell Id",
            "x-hmp-profile": "user"
          },
          "row": {
            "anyOf": [
              {
                "description": "Non-negative integer.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Structured row index.",
            "title": "Row",
            "x-hmp-profile": "user"
          },
          "col": {
            "anyOf": [
              {
                "description": "Non-negative integer.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Structured column index.",
            "title": "Col",
            "x-hmp-profile": "user"
          },
          "layer": {
            "default": 0,
            "description": "Structured layer index.",
            "examples": [
              0
            ],
            "minimum": 0,
            "title": "Layer",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "time": {
            "anyOf": [
              {
                "enum": [
                  "all",
                  "last",
                  "first"
                ],
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ],
            "default": "all",
            "description": "'all' keeps every time step; 'last' / 'first' selects one; a list of ISO timestamps selects specific steps.",
            "examples": [
              "all"
            ],
            "title": "Time",
            "x-hmp-profile": "user"
          },
          "reducer": {
            "default": "none",
            "description": "Aggregation over the retained time slice.",
            "enum": [
              "mean",
              "sum",
              "last",
              "none"
            ],
            "examples": [
              "mean"
            ],
            "title": "Reducer",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "observed_values": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Hard-coded observed values (used by twin-synthetic cases).",
            "title": "Observed Values",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "variable"
        ],
        "title": "CalibOutputCell",
        "type": "object"
      },
      "CalibOutputPoint": {
        "additionalProperties": false,
        "description": "Observable extracted at a planar ``(x, y)`` point.\n\nUse this variant for piezometric heads sampled at a single coordinate.\nProvide either ``x`` and ``y`` or a GeoJSON ``geometry`` block.",
        "properties": {
          "variable": {
            "description": "Simulated variable to extract (e.g. 'head', 'outlet_discharge').",
            "examples": [
              "example"
            ],
            "title": "Variable",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "support": {
            "const": "point",
            "default": "point",
            "description": "Discriminator tag. 'point' reads the variable at (x, y).",
            "examples": [
              "point"
            ],
            "title": "Support",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "geometry": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "GeoJSON point geometry. Coordinates are in metres.",
            "title": "Geometry",
            "x-hmp-profile": "user"
          },
          "x": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "properties": {
                  "magnitude": {
                    "title": "Magnitude",
                    "type": "string"
                  },
                  "units": {
                    "title": "Units",
                    "type": "string"
                  }
                },
                "required": [
                  "magnitude"
                ],
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "X coordinate. Accepts a bare number (metres) or a pint string like '100 m'.",
            "title": "X",
            "x-hmp-profile": "user"
          },
          "y": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "properties": {
                  "magnitude": {
                    "title": "Magnitude",
                    "type": "string"
                  },
                  "units": {
                    "title": "Units",
                    "type": "string"
                  }
                },
                "required": [
                  "magnitude"
                ],
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Y coordinate. Accepts a bare number (metres) or a pint string like '100 m'.",
            "title": "Y",
            "x-hmp-profile": "user"
          },
          "time": {
            "anyOf": [
              {
                "enum": [
                  "all",
                  "last",
                  "first"
                ],
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ],
            "default": "all",
            "description": "'all' keeps every time step; 'last' / 'first' selects one; a list of ISO timestamps selects specific steps.",
            "examples": [
              "all"
            ],
            "title": "Time",
            "x-hmp-profile": "user"
          },
          "reducer": {
            "default": "none",
            "description": "Aggregation over the retained time slice.",
            "enum": [
              "mean",
              "sum",
              "last",
              "none"
            ],
            "examples": [
              "mean"
            ],
            "title": "Reducer",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "observed_values": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Hard-coded observed values (used by twin-synthetic cases).",
            "title": "Observed Values",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "variable"
        ],
        "title": "CalibOutputPoint",
        "type": "object"
      },
      "CalibParameterDecl": {
        "additionalProperties": false,
        "description": "User declaration for one calibrated parameter.\n\nThe declaration is read from ``[calibration.parameters.<name>]``. It\ndefines the physical bounds, the sampling transform, and optionally the\ntarget path in ``HydroModPyConfig`` that receives each sampled value.\n\nUse ``mode=\"replace\"`` for direct parameter values and ``mode=\"scale\"``\nfor multiplicative factors applied to an existing config value.",
        "properties": {
          "bounds": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "maxItems": 2,
                "minItems": 2,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "[low, high] physical bounds. Inherits from Pydantic annotation when omitted.",
            "title": "Bounds",
            "x-hmp-profile": "user"
          },
          "transform": {
            "default": "identity",
            "description": "Transform applied before sampling. 'log' for strictly-positive quantities spanning orders of magnitude.",
            "enum": [
              "identity",
              "log",
              "logit"
            ],
            "examples": [
              "identity"
            ],
            "title": "Transform",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "prior": {
            "default": "uniform",
            "description": "Prior distribution used by Bayesian samplers.",
            "enum": [
              "uniform",
              "log_uniform",
              "normal"
            ],
            "examples": [
              "uniform"
            ],
            "title": "Prior",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Dotted path into HydroModPyConfig. Optional: when omitted, the caller is responsible for injection.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "target": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Readable alias for 'path'. When both are set, 'target' wins.",
            "title": "Target",
            "x-hmp-profile": "user"
          },
          "mode": {
            "default": "replace",
            "description": "'replace' writes the sampled value as-is; 'scale' multiplies the base TOML value at the target path by the sample.",
            "enum": [
              "replace",
              "scale"
            ],
            "examples": [
              "replace"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "units": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Parameter units label.",
            "title": "Units",
            "x-hmp-profile": "user"
          }
        },
        "title": "CalibParameterDecl",
        "type": "object"
      },
      "CalibrationConfig": {
        "additionalProperties": false,
        "description": "Top-level ``[calibration]`` section.\n\nThe config selects the optimizer, iteration budget, candidate persistence\npolicy, parameter declarations, observable outputs, and objective blocks.\nIt is the stable user-facing schema used by CLI calibration and\n``Project.calibrate``.\n\nWhen no explicit objective block is declared, HydroModPy can synthesize one\nfrom ``objective`` and ``variable`` if the matching output exists.",
        "properties": {
          "method": {
            "default": "grid",
            "description": "Optimization method. Optuna is installed by default; install the calibration extra for cma_es and Optuna's cmaes sampler.",
            "examples": [
              "grid"
            ],
            "title": "Method",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "max_iter": {
            "default": 100,
            "description": "Maximum number of calibration iterations.",
            "examples": [
              100
            ],
            "minimum": 1,
            "title": "Max Iter",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "batch_size": {
            "default": 1,
            "description": "Number of suggestions drawn per ask (for parallel optimizers).",
            "examples": [
              1
            ],
            "minimum": 1,
            "title": "Batch Size",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "parallel": {
            "default": 1,
            "description": "Number of trials evaluated concurrently inside one batch via a thread pool. parallel=1 keeps the legacy sequential loop.",
            "examples": [
              1
            ],
            "minimum": 1,
            "title": "Parallel",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "seed": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Random seed for reproducibility.",
            "title": "Seed",
            "x-hmp-profile": "user"
          },
          "save_runs": {
            "default": "none",
            "description": "How much to persist per iteration:\n- 'none': 1 DuckDB row per iteration, no Zarr.\n- 'best_n': same + promote top N to full simulations after the loop.\n- 'all': every iteration becomes a full simulation (Zarr included).",
            "enum": [
              "none",
              "best_n",
              "all"
            ],
            "examples": [
              "none"
            ],
            "title": "Save Runs",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "save_best_n": {
            "default": 10,
            "description": "Number of top iterations to promote when save_runs='best_n'.",
            "examples": [
              10
            ],
            "minimum": 0,
            "title": "Save Best N",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "use_cache": {
            "default": true,
            "description": "Enable params_hash content-addressable cache.",
            "examples": [
              true
            ],
            "title": "Use Cache",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "lightweight_extraction": {
            "default": true,
            "description": "Skip Parquet/Zarr writes for lumped models (GR4J, ...) and read simulated series from the per-trial RAM cache instead. Only the promoted runs go through the catalog write path.",
            "examples": [
              true
            ],
            "title": "Lightweight Extraction",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "objective": {
            "default": "nse",
            "description": "Metric key used by the default ScalarObjective.",
            "examples": [
              "nse"
            ],
            "title": "Objective",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "variable": {
            "default": "head",
            "description": "Observed variable (for ObservationSet).",
            "examples": [
              "head"
            ],
            "title": "Variable",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "optimizer_kwargs": {
            "additionalProperties": true,
            "description": "Extra keyword arguments forwarded to the optimizer adapter.",
            "title": "Optimizer Kwargs",
            "type": "object",
            "x-hmp-profile": "dev"
          },
          "parameters": {
            "additionalProperties": {
              "$ref": "#/components/schemas/CalibParameterDecl"
            },
            "description": "Per-parameter declarations (bounds, transform, prior, path).",
            "title": "Parameters",
            "type": "object",
            "x-hmp-profile": "user"
          },
          "outputs": {
            "additionalProperties": {
              "description": "Discriminated union of calibration output variants selected by 'support'.",
              "discriminator": {
                "mapping": {
                  "boundary": "#/$defs/CalibOutputBoundary",
                  "cell": "#/$defs/CalibOutputCell",
                  "point": "#/$defs/CalibOutputPoint"
                },
                "propertyName": "support"
              },
              "oneOf": [
                {
                  "$ref": "#/components/schemas/CalibOutputPoint"
                },
                {
                  "$ref": "#/components/schemas/CalibOutputBoundary"
                },
                {
                  "$ref": "#/components/schemas/CalibOutputCell"
                }
              ]
            },
            "description": "Named observables extracted from each candidate run.",
            "title": "Outputs",
            "type": "object",
            "x-hmp-profile": "user"
          },
          "objective_blocks": {
            "description": "Weighted blocks making up a composite objective. When empty, a single implicit block is built from 'objective' and 'variable'.",
            "items": {
              "$ref": "#/components/schemas/CalibObjectiveBlockDecl"
            },
            "title": "Objective Blocks",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "persist_iteration_detail": {
            "default": "summary",
            "description": "'none' skips component metrics; 'summary' keeps block totals; 'full' also stores per-block raw and normalized costs.",
            "enum": [
              "none",
              "summary",
              "full"
            ],
            "examples": [
              "none"
            ],
            "title": "Persist Iteration Detail",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "persist_model_distribution": {
            "default": false,
            "description": "Persist the candidate distribution alongside the session.",
            "examples": [
              false
            ],
            "title": "Persist Model Distribution",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "rerun_best_with_outputs": {
            "default": false,
            "description": "Replay the best candidate with full outputs after the loop.",
            "examples": [
              false
            ],
            "title": "Rerun Best With Outputs",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "materialize_candidates": {
            "default": false,
            "description": "Write a standalone override TOML for each candidate under 'candidates_root' so runs can be replayed later.",
            "examples": [
              false
            ],
            "title": "Materialize Candidates",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "candidates_root": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory for per-candidate overlay TOMLs. Required when materialize_candidates is True.",
            "title": "Candidates Root",
            "x-hmp-profile": "dev"
          },
          "persistence": {
            "$ref": "#/components/schemas/PersistenceConfig",
            "description": "Single switch governing every persistence sink (catalog, Zarr, Parquet, lockfile) for calibration outputs.",
            "x-hmp-profile": "user"
          }
        },
        "title": "CalibrationConfig",
        "type": "object"
      },
      "CapabilityGalleryConfig": {
        "additionalProperties": false,
        "description": "Optional publication target for stable, versionable run figures.",
        "properties": {
          "enabled": {
            "default": false,
            "description": "Render (or copy) selected figures into a versionable gallery folder.",
            "examples": [
              false
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "output_dir": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Destination directory for selected gallery assets. Relative paths are resolved against the TOML directory.",
            "title": "Output Dir",
            "x-hmp-profile": "user"
          },
          "case_slug": {
            "default": "simulation_regression_flow_case",
            "description": "Stable identifier used in the gallery manifest.",
            "examples": [
              "simulation_regression_flow_case"
            ],
            "title": "Case Slug",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "assets": {
            "default": [
              "piezometric_map.png",
              "seepage_map.png",
              "hydrograph.png",
              "water_budget.png",
              "watershed_id_card.png"
            ],
            "description": "Asset filenames. Each ``<name>.png`` is first rendered through the injected render callback when a Run is available, otherwise copied from one of the standard figure subdirs of the run folder.",
            "items": {
              "type": "string"
            },
            "title": "Assets",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "title": "CapabilityGalleryConfig",
        "type": "object"
      },
      "CatchmentZonesSupportConfig": {
        "additionalProperties": false,
        "description": "Support built from catchment/domain zonation already prepared in setup.",
        "properties": {
          "kind": {
            "const": "catchment_zones",
            "examples": [
              "catchment_zones"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "source_zone_id": {
            "default": "catchment",
            "description": "Domain zone id providing the source catchment zonation.",
            "examples": [
              "catchment"
            ],
            "title": "Source Zone Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "default_cell_samples_per_axis": {
            "default": 8,
            "description": "Sub-sampling resolution per cell axis used when rasterizing zone masks.",
            "examples": [
              8
            ],
            "minimum": 2,
            "title": "Default Cell Samples Per Axis",
            "type": "integer",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "kind"
        ],
        "title": "CatchmentZonesSupportConfig",
        "type": "object"
      },
      "CauchyBC": {
        "additionalProperties": false,
        "description": "Cauchy flow boundary condition.",
        "properties": {
          "id": {
            "description": "Boundary-condition identifier.",
            "examples": [
              "example"
            ],
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Boundary-condition value, scalar or one value per stress period.",
            "title": "Value",
            "x-hmp-profile": "user"
          },
          "description": {
            "default": "",
            "description": "Boundary-condition description.",
            "examples": [
              ""
            ],
            "title": "Description",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "units": {
            "default": "",
            "description": "Boundary-condition units.",
            "examples": [
              ""
            ],
            "title": "Units",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "kind": {
            "const": "cauchy",
            "default": "cauchy",
            "description": "Boundary-condition kind discriminator.",
            "examples": [
              "cauchy"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "data_value": {
            "default": false,
            "description": "If True, boundary-condition values are sourced from data.",
            "examples": [
              false
            ],
            "title": "Data Value",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "forcing": {
            "default": null,
            "description": "Cauchy boundaries do not support runtime head forcing.",
            "title": "Forcing",
            "type": "null",
            "x-hmp-profile": "dev"
          },
          "application_domain": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Boundary-application domain. Supported values are: top, north side, south side, east side, west side.",
            "title": "Application Domain",
            "x-hmp-profile": "user"
          },
          "support_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional explicit runtime support label used by unstructured backends to select one target support independently from the canonical boundary id.",
            "title": "Support Label",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "id"
        ],
        "title": "CauchyBC",
        "type": "object"
      },
      "ComparisonAuditConfig": {
        "additionalProperties": false,
        "description": "Post-run equivalence policy for child simulations.",
        "properties": {
          "mode": {
            "const": "strict_same_case",
            "default": "strict_same_case",
            "examples": [
              "strict_same_case"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "on_mismatch": {
            "default": "fail",
            "enum": [
              "fail",
              "warn",
              "ignore"
            ],
            "examples": [
              "fail"
            ],
            "title": "On Mismatch",
            "type": "string",
            "x-hmp-profile": "dev"
          }
        },
        "title": "ComparisonAuditConfig",
        "type": "object"
      },
      "ComparisonExecutionConfig": {
        "additionalProperties": false,
        "description": "How comparison child simulations are executed.",
        "properties": {
          "backend": {
            "const": "subprocess_hmp_run",
            "default": "subprocess_hmp_run",
            "examples": [
              "subprocess_hmp_run"
            ],
            "title": "Backend",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "max_parallel_runs": {
            "default": 1,
            "description": "Number of child simulations executed in parallel. Forced to 1 in V1.",
            "examples": [
              1
            ],
            "minimum": 1,
            "title": "Max Parallel Runs",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "keep_generated_configs": {
            "default": true,
            "examples": [
              true
            ],
            "title": "Keep Generated Configs",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "run_simulations": {
            "default": true,
            "examples": [
              true
            ],
            "title": "Run Simulations",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "python_executable": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Python Executable",
            "x-hmp-profile": "dev"
          },
          "timeout_seconds": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional per-child timeout in seconds. None disables the timeout.",
            "title": "Timeout Seconds",
            "x-hmp-profile": "dev"
          }
        },
        "title": "ComparisonExecutionConfig",
        "type": "object"
      },
      "ComparisonFineRaster": {
        "additionalProperties": false,
        "description": "Optional common regular-grid rasterization for map comparisons.",
        "properties": {
          "enabled": {
            "default": false,
            "description": "Enable the shared fine raster for map comparisons.",
            "examples": [
              false
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "expert"
          },
          "resolution": {
            "anyOf": [
              {
                "description": "Positive floating-point value.",
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Target raster cell size in meters (EPSG:2154 grid).",
            "title": "Resolution",
            "x-hmp-profile": "expert"
          },
          "extent_mode": {
            "default": "intersection",
            "description": "Strategy used to derive the common raster extent across simulations.",
            "enum": [
              "intersection",
              "union",
              "reference"
            ],
            "examples": [
              "intersection"
            ],
            "title": "Extent Mode",
            "type": "string",
            "x-hmp-profile": "expert"
          },
          "interpolation": {
            "default": "linear",
            "description": "Regridding method used to project each map onto the shared fine raster.",
            "enum": [
              "linear",
              "nearest"
            ],
            "examples": [
              "linear"
            ],
            "title": "Interpolation",
            "type": "string",
            "x-hmp-profile": "expert"
          },
          "write_geotiff": {
            "default": true,
            "description": "Write the regridded maps as GeoTIFF files alongside the comparison figures.",
            "examples": [
              true
            ],
            "title": "Write Geotiff",
            "type": "boolean",
            "x-hmp-profile": "expert"
          }
        },
        "title": "ComparisonFineRaster",
        "type": "object"
      },
      "ComparisonObservable": {
        "additionalProperties": false,
        "description": "One quantity of interest extracted from each simulation run folder.",
        "properties": {
          "name": {
            "description": "Unique identifier of this observable inside the comparison.",
            "examples": [
              "example"
            ],
            "pattern": "^[a-z][a-z0-9_]*$",
            "title": "Name",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "variable": {
            "description": "Name of the simulated variable to extract (e.g. head, discharge).",
            "examples": [
              "example"
            ],
            "title": "Variable",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "source": {
            "const": "disk",
            "default": "disk",
            "description": "Backing store for the extracted values; currently only disk outputs.",
            "examples": [
              "disk"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "simulations": {
            "anyOf": [
              {
                "items": {
                  "description": "Snake-case identifier starting with a lowercase letter.",
                  "pattern": "^[a-z][a-z0-9_]*$",
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Subset of simulation ids this observable applies to; null means all.",
            "title": "Simulations",
            "x-hmp-profile": "user"
          },
          "support": {
            "default": "point",
            "description": "Spatial support of the observable (point, outlet, boundary, mask, map).",
            "enum": [
              "point",
              "outlet",
              "boundary",
              "cell_mask",
              "map"
            ],
            "examples": [
              "point"
            ],
            "title": "Support",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "anchor_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional anchor key resolved from anchors_file to provide x and y.",
            "title": "Anchor Id",
            "x-hmp-profile": "user"
          },
          "x": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Easting in meters (EPSG:2154 / Lambert 93).",
            "title": "X",
            "x-hmp-profile": "user"
          },
          "y": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Northing in meters (EPSG:2154 / Lambert 93).",
            "title": "Y",
            "x-hmp-profile": "user"
          },
          "cell_index": {
            "anyOf": [
              {
                "description": "Non-negative integer.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Zero-based mesh cell index for point or outlet support.",
            "title": "Cell Index",
            "x-hmp-profile": "user"
          },
          "cell_indices": {
            "anyOf": [
              {
                "items": {
                  "description": "Non-negative integer.",
                  "minimum": 0,
                  "type": "integer"
                },
                "minItems": 1,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "List of zero-based mesh cell indices used for cell_mask support.",
            "title": "Cell Indices",
            "x-hmp-profile": "user"
          },
          "boundary_id": {
            "anyOf": [
              {
                "description": "Snake-case identifier starting with a lowercase letter.",
                "pattern": "^[a-z][a-z0-9_]*$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Identifier of the boundary group selected for boundary support.",
            "title": "Boundary Id",
            "x-hmp-profile": "user"
          },
          "allow_domain_proxy": {
            "default": false,
            "description": "Allow whole-domain reduction as outlet fallback when no location is set.",
            "examples": [
              false
            ],
            "title": "Allow Domain Proxy",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "time": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": "all",
            "description": "Timestep selector (timestamp, integer index, or 'all').",
            "examples": [
              "all"
            ],
            "title": "Time",
            "x-hmp-profile": "user"
          },
          "time_window": {
            "anyOf": [
              {
                "maxItems": 2,
                "minItems": 2,
                "prefixItems": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "string"
                  }
                ],
                "type": "array"
              },
              {
                "maxItems": 2,
                "minItems": 2,
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional inclusive time window as a (start, end) pair, mutually exclusive with time.",
            "title": "Time Window",
            "x-hmp-profile": "user"
          },
          "reducer": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Spatial reducer applied over the support (e.g. nearest_cell, sum, max).",
            "title": "Reducer",
            "x-hmp-profile": "user"
          },
          "time_reducer": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Temporal reducer applied over the selected timesteps (e.g. mean, sum).",
            "title": "Time Reducer",
            "x-hmp-profile": "user"
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional unit label attached to the extracted values for display.",
            "title": "Unit",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "name",
          "variable"
        ],
        "title": "ComparisonObservable",
        "type": "object"
      },
      "ComparisonSection": {
        "additionalProperties": false,
        "description": "Top-level comparison experiment section.",
        "properties": {
          "comparison_id": {
            "anyOf": [
              {
                "description": "Snake-case identifier starting with a lowercase letter.",
                "pattern": "^[a-z][a-z0-9_]*$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Stable identifier for this comparison run.",
            "title": "Comparison Id",
            "x-hmp-profile": "user"
          },
          "base_simulation_config": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Base Simulation Config",
            "x-hmp-profile": "expert"
          },
          "base_simulation_overlay": {
            "additionalProperties": true,
            "description": "Shared TOML overlay applied to the base simulation config before any child-specific comparison.simulation.overlay. This is the preferred hook for catalog-driven site loops: a testbed can render one comparison per catalog row and inject the row values here, for example geographic outlet coordinates, target basin area, recharge chronicle path, geology/K-table paths, mesh-catchment options, initial-condition policy, or common workspace/data roots. The overlay is intentionally broad because it describes the physical case shared by all methods being compared; solver or method differences remain in each comparison.simulation.overlay.",
            "title": "Base Simulation Overlay",
            "type": "object",
            "x-hmp-profile": "expert"
          },
          "anchors_file": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Anchors File",
            "x-hmp-profile": "expert"
          },
          "output_root": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Output Root",
            "x-hmp-profile": "expert"
          },
          "reference_simulation": {
            "anyOf": [
              {
                "description": "Snake-case identifier starting with a lowercase letter.",
                "pattern": "^[a-z][a-z0-9_]*$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Reference Simulation",
            "x-hmp-profile": "expert"
          },
          "continue_on_error": {
            "default": false,
            "examples": [
              false
            ],
            "title": "Continue On Error",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "execution": {
            "$ref": "#/components/schemas/ComparisonExecutionConfig",
            "description": "Execution settings for the comparison child runs.",
            "x-hmp-profile": "dev"
          },
          "audit": {
            "$ref": "#/components/schemas/ComparisonAuditConfig",
            "description": "Post-run audit policy applied to each child simulation.",
            "x-hmp-profile": "dev"
          },
          "fine_raster": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ComparisonFineRaster"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "x-hmp-profile": "expert"
          },
          "simulation": {
            "description": "Generated child simulations to run in the comparison. At least one entry required.",
            "items": {
              "$ref": "#/components/schemas/ComparisonSimulationConfig"
            },
            "title": "Simulation",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "observable": {
            "description": "Observables to compare across the declared simulations. At least one entry required.",
            "items": {
              "$ref": "#/components/schemas/ComparisonObservable"
            },
            "title": "Observable",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "title": "ComparisonSection",
        "type": "object"
      },
      "ComparisonSimulationConfig": {
        "additionalProperties": false,
        "description": "One generated child simulation in a comparison experiment.",
        "properties": {
          "id": {
            "description": "Snake-case identifier starting with a lowercase letter.",
            "examples": [
              "example"
            ],
            "pattern": "^[a-z][a-z0-9_]*$",
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Label",
            "x-hmp-profile": "user"
          },
          "enabled": {
            "default": true,
            "examples": [
              true
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "solver": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Solver",
            "x-hmp-profile": "expert"
          },
          "simulation_config": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Simulation Config",
            "x-hmp-profile": "expert"
          },
          "run_folder": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Run Folder",
            "x-hmp-profile": "expert"
          },
          "mesh_label": {
            "anyOf": [
              {
                "description": "Snake-case identifier starting with a lowercase letter.",
                "pattern": "^[a-z][a-z0-9_]*$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Mesh Label",
            "x-hmp-profile": "user"
          },
          "mesh_mode": {
            "default": "unknown",
            "enum": [
              "mesh_catchment",
              "mesh_input",
              "sgrid",
              "structured",
              "unstructured",
              "unknown"
            ],
            "examples": [
              "mesh_catchment"
            ],
            "title": "Mesh Mode",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "overlay": {
            "additionalProperties": true,
            "description": "Child-specific TOML overlay merged after comparison.base_simulation_overlay and after the shared base simulation config. Use it for solver-specific settings, child labels, child process selection, or deliberately varied method parameters. Site-wide inputs that must be identical for every child in one comparison, such as outlet coordinates, recharge forcing, mesh generation settings, or reference data paths, should be placed in comparison.base_simulation_overlay instead.",
            "title": "Overlay",
            "type": "object",
            "x-hmp-profile": "expert"
          }
        },
        "required": [
          "id"
        ],
        "title": "ComparisonSimulationConfig",
        "type": "object"
      },
      "ConcentrationTransportParametersConfig": {
        "additionalProperties": false,
        "description": "Configuration payload shared by concentration transport solvers.",
        "properties": {
          "spc_name": {
            "default": "NO3",
            "description": "Name of transported species.",
            "examples": [
              "NO3"
            ],
            "title": "Spc Name",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "sconc_init": {
            "default": 0.0,
            "description": "Initial concentration value (can be overridden at runtime).",
            "examples": [
              0.0
            ],
            "title": "Sconc Init",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "sconc_input": {
            "default": 0.0,
            "description": "Recharge concentration input value (can be overridden at runtime).",
            "examples": [
              0.0
            ],
            "title": "Sconc Input",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "disp_long": {
            "default": 0.0,
            "description": "Longitudinal dispersivity [L].",
            "examples": [
              0.0
            ],
            "title": "Disp Long",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "disp_transh": {
            "default": 0.0,
            "description": "Horizontal transverse dispersivity ratio.",
            "examples": [
              0.0
            ],
            "title": "Disp Transh",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "disp_transv": {
            "default": 0.0,
            "description": "Vertical transverse dispersivity ratio.",
            "examples": [
              0.0
            ],
            "title": "Disp Transv",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "diffu_coeff": {
            "default": 0.0,
            "description": "Molecular diffusion coefficient [L2/T].",
            "examples": [
              0.0
            ],
            "title": "Diffu Coeff",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "react_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Reaction order for MT3DMS: None, 0, or 1.",
            "title": "React Order",
            "x-hmp-profile": "dev"
          },
          "rate_decay": {
            "default": 0.0,
            "description": "Decay rate value (can be overridden at runtime).",
            "examples": [
              0.0
            ],
            "title": "Rate Decay",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "plot_conc": {
            "default": true,
            "description": "Enable concentration plotting outputs.",
            "examples": [
              true
            ],
            "title": "Plot Conc",
            "type": "boolean",
            "x-hmp-profile": "dev"
          }
        },
        "title": "ConcentrationTransportParametersConfig",
        "type": "object"
      },
      "ConstantThicknessDepthModel": {
        "additionalProperties": false,
        "description": "Vertical model using one constant thickness below topography.\n\nBottom elevation is computed cell-wise as:\n``bottom = top_surface - thickness``.",
        "properties": {
          "kind": {
            "const": "constant_thickness",
            "default": "constant_thickness",
            "description": "Depth-model kind discriminator. Use 'constant_thickness' to define bottom as top-thickness.",
            "examples": [
              "constant_thickness"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "thickness": {
            "default": 50.0,
            "description": "Constant aquifer thickness applied below topography (canonical metres). Accepts inline units, e.g. '0.2 km'.",
            "examples": [
              50.0
            ],
            "exclusiveMinimum": 0.0,
            "title": "Thickness",
            "type": "number",
            "x-hmp-profile": "user"
          }
        },
        "title": "ConstantThicknessDepthModel",
        "type": "object"
      },
      "CriteriaConfig": {
        "additionalProperties": false,
        "description": "Versioned criteria set and criterion-mode lists.",
        "properties": {
          "ruleset": {
            "default": "site_selection_v1",
            "examples": [
              "site_selection_v1"
            ],
            "title": "Ruleset",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "hard_reject": {
            "items": {
              "type": "string"
            },
            "title": "Hard Reject",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "warning": {
            "items": {
              "type": "string"
            },
            "title": "Warning",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "soft_score": {
            "items": {
              "type": "string"
            },
            "title": "Soft Score",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "report_only": {
            "items": {
              "type": "string"
            },
            "title": "Report Only",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "area": {
            "$ref": "#/components/schemas/AreaCriteriaConfig",
            "x-hmp-profile": "user"
          },
          "observations": {
            "$ref": "#/components/schemas/ObservationsCriteriaConfig",
            "x-hmp-profile": "user"
          },
          "influence": {
            "$ref": "#/components/schemas/InfluenceCriteriaConfig",
            "x-hmp-profile": "user"
          },
          "geology": {
            "$ref": "#/components/schemas/GeologyCriteriaConfig",
            "x-hmp-profile": "user"
          }
        },
        "title": "CriteriaConfig",
        "type": "object"
      },
      "CustomBackend": {
        "additionalProperties": false,
        "description": "Plugin-registered flow backend identified by a free-form name.\n\nThe discriminator value is the literal string ``\"custom\"``; the actual\nbackend name lives in ``name``. ``SolverConfig.validate_registry()``\nenforces that the name resolves to a registered flow adapter at\nlauncher time.",
        "properties": {
          "backend": {
            "const": "custom",
            "default": "custom",
            "description": "Discriminator tag indicating a plugin-provided flow backend.",
            "examples": [
              "custom"
            ],
            "title": "Backend",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "name": {
            "description": "Plugin-registered flow backend name (matches registry).",
            "examples": [
              "example"
            ],
            "title": "Name",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "name"
        ],
        "title": "CustomBackend",
        "type": "object"
      },
      "CustomDemSource": {
        "additionalProperties": false,
        "description": "User-provided raster file (GeoTIFF, Esri ASCII Grid, NetCDF).",
        "properties": {
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "SHP/GPKG/GeoJSON mask for spatial filtering/clipping.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Use project extent for bbox-based data retrieval.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore cache and re-download from API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "source": {
            "const": "custom",
            "default": "custom",
            "description": "Discriminator tag selecting the 'custom' DEM provider.",
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "description": "Path to custom DEM file or directory (TIF, ASC, NC).",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Path",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "path"
        ],
        "title": "CustomDemSource",
        "type": "object"
      },
      "CustomGeologySource": {
        "additionalProperties": false,
        "description": "User-provided geology file (SHP/GPKG/TIF/CSV).",
        "properties": {
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "SHP/GPKG/GeoJSON mask for spatial filtering/clipping.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Use project extent for bbox-based data retrieval.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore cache and re-download from API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "source": {
            "const": "custom",
            "default": "custom",
            "description": "Discriminator tag selecting the 'custom' geology provider.",
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "description": "Path to custom geology file or directory (SHP, GPKG, TIF, CSV).",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "code_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Attribute column for geology codes in custom vector files (SHP/GPKG). Required for custom vector sources.",
            "title": "Code Field",
            "x-hmp-profile": "user"
          },
          "values_table_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional CSV linking geology codes to descriptions. Columns: geology_code, description.",
            "title": "Values Table Path",
            "x-hmp-profile": "user"
          },
          "col_x": {
            "default": "x",
            "description": "Column for X coordinate in CSV.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column for Y coordinate in CSV.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_code": {
            "default": "geology_code",
            "description": "Column for geology code in CSV.",
            "examples": [
              "geology_code"
            ],
            "title": "Col Code",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:2154",
            "description": "Default CRS for CSV points.",
            "examples": [
              "EPSG:2154"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "path"
        ],
        "title": "CustomGeologySource",
        "type": "object"
      },
      "DataManagersConfig": {
        "additionalProperties": false,
        "description": "Top-level ``[data]`` configuration for manager families.\n\nThe `types` list declares user-requested data families. The effective\nactive set can also include planner-inferred families deduced from other\nsections (domain, flow) depending on `inference_mode`.\n\nFor each active type, the matching nested section can be validated dynamically:\n- `geology` already uses its dedicated Pydantic model (`GeologyConfig`),\n- `oceanic` uses `OceanicConfig`,\n- the other data families are kept as validated mappings for now.\n\nUse this model for validation only. Runtime activation order is represented\nby ``DataLoadPlan`` and loaded by ``DataManagersRuntimeLoader``.",
        "properties": {
          "project_crs": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "EPSG code or WKT string of the project coordinate reference system. When set, all loaded data is reprojected to this CRS. Example: 'EPSG:2154' (Lambert-93).",
            "title": "Project Crs",
            "x-hmp-profile": "user"
          },
          "types": {
            "description": "Ordered list of data-manager types explicitly requested in [data]. The launcher may append inferred types deduced from other sections (for example domain.zone_ids, flow.active_bc). Allowed values: 'dem', 'etp', 'geology', 'humidity', 'hydrography', 'hydrometry', 'intermittency', 'oceanic', 'piezometry', 'precipitation', 'radiation', 'recharge', 'runoff', 'soil_moisture', 'temperature', 'water_quality', 'wind'.",
            "items": {
              "type": "string"
            },
            "title": "Types",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "inference_mode": {
            "default": "warn",
            "description": "Policy applied when the planner infers types not explicitly listed in data.types. 'warn': keep inferred types and continue even if data.<type> is missing. 'strict': raise when an inferred type has no explicit data.<type> section (except geology, which can use its default typed config).",
            "enum": [
              "warn",
              "strict"
            ],
            "examples": [
              "warn"
            ],
            "title": "Inference Mode",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "dem": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/hydromodpy__data__variables__dem__config__DemConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "DEM configuration used when 'dem' is listed in data.types.",
            "x-hmp-profile": "user"
          },
          "geology": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/GeologyConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Geology configuration used when 'geology' is listed in data.types.",
            "x-hmp-profile": "user"
          },
          "hydrography": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HydrographyConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Hydrography configuration (stream network vector data).",
            "x-hmp-profile": "user"
          },
          "hydrometry": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HydrometryConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Hydrometry configuration (discharge time-series).",
            "x-hmp-profile": "user"
          },
          "intermittency": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IntermittencyConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Intermittency configuration (ONDE stream flow-state observations).",
            "x-hmp-profile": "user"
          },
          "oceanic": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OceanicConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Oceanic configuration used when 'oceanic' is listed in data.types.",
            "x-hmp-profile": "user"
          },
          "piezometry": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PiezometryConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Piezometry configuration (groundwater level time-series).",
            "x-hmp-profile": "user"
          },
          "water_quality": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WaterQualityConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Water quality configuration (physico-chemical parameters).",
            "x-hmp-profile": "user"
          },
          "recharge": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RechargeConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Recharge configuration (drainage / soil infiltration time series).",
            "x-hmp-profile": "user"
          },
          "runoff": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RunoffConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Runoff configuration (surface runoff time series).",
            "x-hmp-profile": "user"
          },
          "precipitation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PrecipitationConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Precipitation configuration (liquid and solid precipitation).",
            "x-hmp-profile": "user"
          },
          "etp": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/EtpConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "ETP configuration (potential evapotranspiration).",
            "x-hmp-profile": "user"
          },
          "temperature": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TemperatureConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Temperature configuration (air temperature time series).",
            "x-hmp-profile": "user"
          },
          "wind": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WindConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Wind configuration (wind speed time series).",
            "x-hmp-profile": "user"
          },
          "humidity": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HumidityConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Humidity configuration (relative humidity time series).",
            "x-hmp-profile": "user"
          },
          "radiation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RadiationConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Radiation configuration (atmospheric and visible radiation).",
            "x-hmp-profile": "user"
          },
          "soil_moisture": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SoilMoistureConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Soil moisture configuration (soil moisture index).",
            "x-hmp-profile": "user"
          }
        },
        "title": "DataManagersConfig",
        "type": "object"
      },
      "DemAreaLightConfig": {
        "additionalProperties": false,
        "description": "Minimal DEM-only basin selection settings.",
        "properties": {
          "target_area_km2": {
            "default": 100.0,
            "description": "Preferred upstream basin area for DEM-only candidate outlets.",
            "examples": [
              100.0
            ],
            "exclusiveMinimum": 0,
            "title": "Target Area Km2",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "min_area_km2": {
            "default": 75.0,
            "description": "Minimum accepted upstream basin area.",
            "examples": [
              75.0
            ],
            "exclusiveMinimum": 0,
            "title": "Min Area Km2",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "max_area_km2": {
            "default": 125.0,
            "description": "Maximum accepted upstream basin area.",
            "examples": [
              125.0
            ],
            "exclusiveMinimum": 0,
            "title": "Max Area Km2",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "n_basins": {
            "default": 50,
            "description": "Target number of basins selected by the greedy light workflow.",
            "examples": [
              50
            ],
            "exclusiveMinimum": 0,
            "title": "N Basins",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "max_candidates_before_delineation": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional cap on DEM-area outlet candidates delineated before final selection. Lower values make examples faster but can leave fewer accepted basins after spatial filtering.",
            "title": "Max Candidates Before Delineation",
            "x-hmp-profile": "user"
          }
        },
        "title": "DemAreaLightConfig",
        "type": "object"
      },
      "DemCatchDef": {
        "additionalProperties": false,
        "description": "Model domain defined directly from a DEM raster.",
        "properties": {
          "dem_init_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Path to the DEM raster used as input. For 'dem' and 'txt' modes: defines the model domain directly. For 'from_outlet_coord' and 'from_polyg_shp' modes: regional DEM used for flow analysis. May be left absent when [data.dem.sources] declares the DEM.",
            "title": "Dem Init Path",
            "x-hmp-profile": "user"
          },
          "catch_def": {
            "const": "dem",
            "default": "dem",
            "description": "Catchment defined by the DEM raster extent.",
            "examples": [
              "dem"
            ],
            "title": "Catch Def",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "DemCatchDef",
        "type": "object"
      },
      "DerivedConfig": {
        "additionalProperties": false,
        "description": "Toggle flags for derived variable computation.",
        "properties": {
          "watertable_elevation": {
            "default": true,
            "description": "Compute water-table elevation from uppermost saturated layer.",
            "examples": [
              true
            ],
            "title": "Watertable Elevation",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "watertable_depth": {
            "default": true,
            "description": "Compute water-table depth (surface minus water-table elevation).",
            "examples": [
              true
            ],
            "title": "Watertable Depth",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "seepage_areas": {
            "default": true,
            "description": "Identify seepage areas where water table >= surface elevation.",
            "examples": [
              true
            ],
            "title": "Seepage Areas",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "groundwater_flux": {
            "default": false,
            "description": "Magnitude of inter-cell flow (right/front/lower face). Volumetric.",
            "examples": [
              false
            ],
            "title": "Groundwater Flux",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "release_flux": {
            "default": true,
            "description": "Positive total groundwater release flux from drains and surface excess.",
            "examples": [
              true
            ],
            "title": "Release Flux",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "accumulation_flux": {
            "default": true,
            "description": "Drain flux routed on the drainage network.",
            "examples": [
              true
            ],
            "title": "Accumulation Flux",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "release_accumulation_flux": {
            "default": false,
            "description": "Release flux routed on surface drainage paths.",
            "examples": [
              false
            ],
            "title": "Release Accumulation Flux",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "outflow_drain": {
            "default": true,
            "description": "Positive per-cell drain outflow summed over layers.",
            "examples": [
              true
            ],
            "title": "Outflow Drain",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "concentration_seepage": {
            "default": false,
            "description": "Concentration at seepage cells only. Requires transport.",
            "examples": [
              false
            ],
            "title": "Concentration Seepage",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mass_seepage": {
            "default": false,
            "description": "Mass flux at seepage cells. Requires transport + budget.",
            "examples": [
              false
            ],
            "title": "Mass Seepage",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mass_accumulated": {
            "default": false,
            "description": "Cumulative mass_seepage over time.",
            "examples": [
              false
            ],
            "title": "Mass Accumulated",
            "type": "boolean",
            "x-hmp-profile": "dev"
          }
        },
        "title": "DerivedConfig",
        "type": "object"
      },
      "DirichletBC": {
        "additionalProperties": false,
        "description": "Dirichlet flow boundary condition.",
        "properties": {
          "id": {
            "description": "Boundary-condition identifier.",
            "examples": [
              "example"
            ],
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Boundary-condition value, scalar or one value per stress period.",
            "title": "Value",
            "x-hmp-profile": "user"
          },
          "description": {
            "default": "",
            "description": "Boundary-condition description.",
            "examples": [
              ""
            ],
            "title": "Description",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "units": {
            "default": "",
            "description": "Boundary-condition units.",
            "examples": [
              ""
            ],
            "title": "Units",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "kind": {
            "const": "dirichlet",
            "default": "dirichlet",
            "description": "Boundary-condition kind discriminator.",
            "examples": [
              "dirichlet"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "data_value": {
            "default": false,
            "description": "If True, boundary-condition values are sourced from data.",
            "examples": [
              false
            ],
            "title": "Data Value",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "forcing": {
            "anyOf": [
              {
                "description": "Discriminated union of boundary-forcing payloads (constant or csv).",
                "discriminator": {
                  "mapping": {
                    "constant": "#/$defs/FlowBoundaryForcingConstantConfig",
                    "csv": "#/$defs/FlowBoundaryForcingCsvConfig"
                  },
                  "propertyName": "mode"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/FlowBoundaryForcingConstantConfig"
                  },
                  {
                    "$ref": "#/components/schemas/FlowBoundaryForcingCsvConfig"
                  }
                ]
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional runtime forcing declaration for lateral Dirichlet boundaries. Supported modes: 'constant' and 'csv'. The launcher resolves this payload to boundary.value using [simulation.time].",
            "title": "Forcing",
            "x-hmp-profile": "dev"
          },
          "application_domain": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Boundary-application domain. Supported values are: top, north side, south side, east side, west side.",
            "title": "Application Domain",
            "x-hmp-profile": "user"
          },
          "support_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional explicit runtime support label used by unstructured backends to select one target support independently from the canonical boundary id.",
            "title": "Support Label",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "id"
        ],
        "title": "DirichletBC",
        "type": "object"
      },
      "DisConfig": {
        "additionalProperties": false,
        "description": "DIS package settings.",
        "properties": {
          "itmuni": {
            "default": 0,
            "description": "DIS time unit code used by MODFLOW (ITMUNI).",
            "examples": [
              0
            ],
            "title": "Itmuni",
            "type": "integer",
            "x-hmp-profile": "expert"
          }
        },
        "title": "DisConfig",
        "type": "object"
      },
      "DisplayConfig": {
        "additionalProperties": false,
        "description": "Display behaviour resolved from the ``[display]`` TOML section.",
        "properties": {
          "enabled": {
            "default": true,
            "description": "Master switch. When False, no figure is rendered or saved.",
            "examples": [
              true
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "backend": {
            "default": "auto",
            "description": "Matplotlib backend. 'auto' selects Agg in headless mode and a GUI backend when ``show`` is enabled.",
            "enum": [
              "agg",
              "qt5agg",
              "auto"
            ],
            "examples": [
              "agg"
            ],
            "title": "Backend",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "preset": {
            "default": "default",
            "description": "Named theme applied before rendering any figure.",
            "enum": [
              "default",
              "print",
              "dark"
            ],
            "examples": [
              "default"
            ],
            "title": "Preset",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "show": {
            "default": false,
            "description": "Open an interactive window via ``matplotlib.pyplot.show``.",
            "examples": [
              false
            ],
            "title": "Show",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "save": {
            "default": true,
            "description": "Write rendered figures to disk under ``output_dir``.",
            "examples": [
              true
            ],
            "title": "Save",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "output_dir": {
            "default": "figures",
            "description": "Directory (relative to project root) for saved figures.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Output Dir",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "dpi": {
            "default": 150,
            "description": "DPI used when saving raster figures.",
            "examples": [
              150
            ],
            "minimum": 1,
            "title": "Dpi",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "cmap": {
            "default": "viridis",
            "description": "Default sequential colormap for spatial figures.",
            "examples": [
              "viridis"
            ],
            "title": "Cmap",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "figures": {
            "description": "Names of registered figures to auto-render at the end of `hmp run` (and consumed by `hmp display`). Empty list disables auto-rendering; figures can still be produced later with `hmp display <toml>`. Disable per-run via `hmp run --no-display` or for an entire Python Project via `Project(..., no_display=True)`.",
            "items": {
              "type": "string"
            },
            "title": "Figures",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "overrides": {
            "additionalProperties": {
              "additionalProperties": true,
              "type": "object"
            },
            "description": "Per-figure keyword overrides, keyed by figure name (e.g. ``{'piezometric_map': {'cmap': 'cividis', 'vmin': 0}}``).",
            "title": "Overrides",
            "type": "object",
            "x-hmp-profile": "expert"
          },
          "flow": {
            "$ref": "#/components/schemas/DisplayFlowConfig",
            "description": "Flow figure switches.",
            "x-hmp-profile": "user"
          },
          "particles": {
            "$ref": "#/components/schemas/DisplayParticlesConfig",
            "description": "Particle figure switches.",
            "x-hmp-profile": "user"
          },
          "transport": {
            "$ref": "#/components/schemas/DisplayTransportConfig",
            "description": "Transport figure switches.",
            "x-hmp-profile": "user"
          }
        },
        "title": "DisplayConfig",
        "type": "object"
      },
      "DisplayFlowConfig": {
        "additionalProperties": false,
        "description": "Display switches for flow figures.",
        "properties": {
          "enabled": {
            "default": true,
            "description": "Master switch for flow figures.",
            "examples": [
              true
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "cross_section": {
            "default": true,
            "description": "Render the flow cross-section plot.",
            "examples": [
              true
            ],
            "title": "Cross Section",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "streamflow": {
            "default": true,
            "description": "Render the streamflow comparison plot.",
            "examples": [
              true
            ],
            "title": "Streamflow",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "piezometry": {
            "default": true,
            "description": "Render the piezometry plot.",
            "examples": [
              true
            ],
            "title": "Piezometry",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "watertable_map": {
            "default": true,
            "description": "Render water-table maps.",
            "examples": [
              true
            ],
            "title": "Watertable Map",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "dem_map": {
            "default": true,
            "description": "Render a DEM overview map.",
            "examples": [
              true
            ],
            "title": "Dem Map",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "budget": {
            "default": false,
            "description": "Render groundwater budget figures.",
            "examples": [
              false
            ],
            "title": "Budget",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "hydrography": {
            "default": true,
            "description": "Render hydrography maps.",
            "examples": [
              true
            ],
            "title": "Hydrography",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "boussinesq_state": {
            "default": true,
            "description": "Render the Boussinesq state figure.",
            "examples": [
              true
            ],
            "title": "Boussinesq State",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "boussinesq_diagnostics": {
            "default": true,
            "description": "Render Boussinesq diagnostics.",
            "examples": [
              true
            ],
            "title": "Boussinesq Diagnostics",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "boussinesq_mass_balance": {
            "default": true,
            "description": "Render Boussinesq mass-balance diagnostics.",
            "examples": [
              true
            ],
            "title": "Boussinesq Mass Balance",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "boussinesq_probes": {
            "default": true,
            "description": "Render Boussinesq probe time series.",
            "examples": [
              true
            ],
            "title": "Boussinesq Probes",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "boussinesq_edge_flux": {
            "default": true,
            "description": "Render final Boussinesq edge fluxes.",
            "examples": [
              true
            ],
            "title": "Boussinesq Edge Flux",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "DisplayFlowConfig",
        "type": "object"
      },
      "DisplayParticlesConfig": {
        "additionalProperties": false,
        "description": "Display switches for particle figures.",
        "properties": {
          "enabled": {
            "default": true,
            "description": "Master switch for particle figures.",
            "examples": [
              true
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "pathlines": {
            "default": false,
            "description": "Render particle pathlines.",
            "examples": [
              false
            ],
            "title": "Pathlines",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "DisplayParticlesConfig",
        "type": "object"
      },
      "DisplayTransportConfig": {
        "additionalProperties": false,
        "description": "Display switches for transport figures.",
        "properties": {
          "enabled": {
            "default": true,
            "description": "Master switch for transport figures.",
            "examples": [
              true
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "concentration": {
            "default": false,
            "description": "Render concentration plots.",
            "examples": [
              false
            ],
            "title": "Concentration",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "gif": {
            "default": false,
            "description": "Export concentration GIF animation.",
            "examples": [
              false
            ],
            "title": "Gif",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "web_animation": {
            "default": false,
            "description": "Export browser-friendly concentration animation.",
            "examples": [
              false
            ],
            "title": "Web Animation",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "DisplayTransportConfig",
        "type": "object"
      },
      "DomainConfig": {
        "additionalProperties": false,
        "description": "Domain configuration.\n\nControls which zone providers are loaded in `Domain`.",
        "properties": {
          "zone_ids": {
            "description": "Ordered list of zone identifiers loaded in the domain registry. Keep this list for actual runtime zones (for example 'catchment', 'geology', or custom zonations). Spatial-support declarations live under domain.supports.",
            "items": {
              "description": "Snake-case identifier starting with a lowercase letter.",
              "pattern": "^[a-z][a-z0-9_]*$",
              "type": "string"
            },
            "title": "Zone Ids",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "supports": {
            "description": "Named spatial supports available to heterogeneous parameters. Each key is a support identifier referenced by field_spatial_id.",
            "patternProperties": {
              "^[a-z][a-z0-9_]*$": {
                "description": "Discriminated union of spatial-support kinds selected by kind tag.",
                "discriminator": {
                  "mapping": {
                    "catchment_zones": "#/$defs/CatchmentZonesSupportConfig",
                    "generated_bands": "#/$defs/GeneratedBandsSupportConfig",
                    "generated_rings": "#/$defs/GeneratedRingsSupportConfig",
                    "geology": "#/$defs/GeologySupportConfig"
                  },
                  "propertyName": "kind"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/GeneratedBandsSupportConfig"
                  },
                  {
                    "$ref": "#/components/schemas/GeneratedRingsSupportConfig"
                  },
                  {
                    "$ref": "#/components/schemas/CatchmentZonesSupportConfig"
                  },
                  {
                    "$ref": "#/components/schemas/GeologySupportConfig"
                  }
                ]
              }
            },
            "propertyNames": {
              "description": "Snake-case identifier starting with a lowercase letter."
            },
            "title": "Supports",
            "type": "object",
            "x-hmp-profile": "user"
          },
          "depth_model": {
            "description": "Vertical domain model configuration. Use 'constant_thickness' or 'flat_substratum'.",
            "discriminator": {
              "mapping": {
                "constant_thickness": "#/$defs/ConstantThicknessDepthModel",
                "flat_substratum": "#/$defs/FlatSubstratumDepthModel"
              },
              "propertyName": "kind"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/ConstantThicknessDepthModel"
              },
              {
                "$ref": "#/components/schemas/FlatSubstratumDepthModel"
              }
            ],
            "title": "Depth Model",
            "x-hmp-profile": "user"
          }
        },
        "title": "DomainConfig",
        "type": "object"
      },
      "EtpConfig": {
        "additionalProperties": false,
        "description": "Top-level potential evapotranspiration configuration.\n\nThe section groups ETP sources and an optional date window. Loaded data can\nbe used by land-surface coupling, recharge estimation, or atmospheric\nforcing workflows.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/EtpSourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "EtpConfig",
        "type": "object"
      },
      "EtpSourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one potential evapotranspiration data source.\n\nETP sources load potential evapotranspiration from custom files or SIM2\nEDR products. Source-level fields define station columns, gridded file\npaths, masks, units, and cache refresh behavior.",
        "properties": {
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user CSV files, 'sim2' for SIM2 EDR API.",
            "enum": [
              "custom",
              "sim2"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs, or a single .nc/.tif file.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "crs": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional CRS fallback for custom gridded NetCDF inputs that do not declare CRS metadata.",
            "title": "Crs",
            "x-hmp-profile": "user"
          },
          "nodata": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional nodata fallback for custom gridded NetCDF inputs that do not declare nodata metadata.",
            "title": "Nodata",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "source"
        ],
        "title": "EtpSourceConfig",
        "type": "object"
      },
      "EvtConfig": {
        "additionalProperties": false,
        "description": "EVT package settings.",
        "properties": {
          "nevtop": {
            "default": 3,
            "description": "EVT option code that defines how ET extinction depth is applied (NEVTOP).",
            "examples": [
              3
            ],
            "title": "Nevtop",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "ievt": {
            "default": 1,
            "description": "EVT integer array selector used when NEVTOP requires layer indices (IEVT).",
            "examples": [
              1
            ],
            "title": "Ievt",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "ipakcb": {
            "default": 1,
            "description": "EVT cell-by-cell budget output flag (IPAKCB).",
            "examples": [
              1
            ],
            "title": "Ipakcb",
            "type": "integer",
            "x-hmp-profile": "expert"
          }
        },
        "title": "EvtConfig",
        "type": "object"
      },
      "ExportConfig": {
        "additionalProperties": false,
        "description": "Automated export configuration.",
        "properties": {
          "netcdf": {
            "default": false,
            "description": "Export to NetCDF-4/UGRID.",
            "examples": [
              false
            ],
            "title": "Netcdf",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "csv_timeseries": {
            "default": true,
            "description": "Export time series to CSV.",
            "examples": [
              true
            ],
            "title": "Csv Timeseries",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "vtu": {
            "default": false,
            "description": "Export to VTU (ParaView).",
            "examples": [
              false
            ],
            "title": "Vtu",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "geotiff": {
            "default": false,
            "description": "Export to GeoTIFF.",
            "examples": [
              false
            ],
            "title": "Geotiff",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "shapefile": {
            "default": false,
            "description": "Export to Shapefile.",
            "examples": [
              false
            ],
            "title": "Shapefile",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "output_dir": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Output directory for exports. Defaults to project results folder.",
            "title": "Output Dir",
            "x-hmp-profile": "dev"
          },
          "variables": {
            "$ref": "#/components/schemas/ExportVariablesConfig",
            "description": "Which variables to include in exports.",
            "x-hmp-profile": "user"
          },
          "resolution": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "GeoTIFF pixel size in CRS units for toggle exports. Auto-derived from the grid when omitted.",
            "title": "Resolution",
            "x-hmp-profile": "dev"
          },
          "artifacts": {
            "description": "Explicit export artifacts: full control over variable, format, timestep and destination, beyond the format toggles above.",
            "items": {
              "$ref": "#/components/schemas/ExportSpec"
            },
            "title": "Artifacts",
            "type": "array",
            "x-hmp-profile": "dev"
          }
        },
        "title": "ExportConfig",
        "type": "object"
      },
      "ExportFormat": {
        "description": "Output formats reachable through the unified export engine.",
        "enum": [
          "csv",
          "netcdf",
          "geotiff",
          "shapefile",
          "vtu",
          "hmp"
        ],
        "title": "ExportFormat",
        "type": "string"
      },
      "ExportSpec": {
        "additionalProperties": false,
        "description": "One export artifact: what to select, in which format, where to write.\n\n``fmt`` is optional when ``dest`` carries a known extension\n(``.nc`` -> netcdf, ``.tif`` -> geotiff, ``.csv`` -> csv ...).",
        "properties": {
          "var": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ],
            "description": "Variable name, list of names, or '*' (all timeseries, csv only).",
            "title": "Var",
            "x-hmp-profile": "user"
          },
          "dest": {
            "description": "Output file path. Its extension can imply 'fmt'.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Dest",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "fmt": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ExportFormat"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Output format. Inferred from the 'dest' extension when omitted.",
            "x-hmp-profile": "user"
          },
          "time": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "items": {
                  "type": "integer"
                },
                "type": "array"
              },
              {
                "enum": [
                  "first",
                  "last",
                  "all"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Timestep selector: index, list of indices, 'first', 'last', 'all', or None (per-format default: all timesteps for netcdf, last for rasters).",
            "title": "Time",
            "x-hmp-profile": "user"
          },
          "layer": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Layer index for 3D fields.",
            "title": "Layer",
            "x-hmp-profile": "dev"
          },
          "resolution": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "GeoTIFF pixel size in CRS units. Auto-derived from the grid when omitted.",
            "title": "Resolution",
            "x-hmp-profile": "dev"
          },
          "crs": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Output CRS (e.g. 'EPSG:2154'). Auto-filled from the simulation when omitted.",
            "title": "Crs",
            "x-hmp-profile": "dev"
          },
          "nodata": {
            "default": -9999.0,
            "description": "Nodata fill value for raster formats.",
            "examples": [
              -9999.0
            ],
            "title": "Nodata",
            "type": "number",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "var",
          "dest"
        ],
        "title": "ExportSpec",
        "type": "object"
      },
      "ExportVariablesConfig": {
        "additionalProperties": false,
        "description": "Which variables to include in automated exports.",
        "properties": {
          "head": {
            "default": true,
            "description": "Export head field.",
            "examples": [
              true
            ],
            "title": "Head",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "concentration": {
            "default": false,
            "description": "Export concentration field.",
            "examples": [
              false
            ],
            "title": "Concentration",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "budget": {
            "default": false,
            "description": "Export spatial budget fields.",
            "examples": [
              false
            ],
            "title": "Budget",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "pathlines": {
            "default": false,
            "description": "Export pathline data.",
            "examples": [
              false
            ],
            "title": "Pathlines",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "derived": {
            "default": true,
            "description": "Export derived variables (watertable_depth, seepage_mask, etc.).",
            "examples": [
              true
            ],
            "title": "Derived",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "ExportVariablesConfig",
        "type": "object"
      },
      "FieldHeterogeneousSection": {
        "additionalProperties": false,
        "description": "Schema for heterogeneous `[field]` payloads.",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Parameter identifier used in outputs and logs (for example 'K', 'Sy').",
            "title": "Id",
            "x-hmp-profile": "user"
          },
          "kind": {
            "const": "heterogeneous",
            "default": "heterogeneous",
            "description": "Field type selector.",
            "examples": [
              "heterogeneous"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Unit of parameter values. Typical examples: 'm/s' (K), '-' (Sy), 'm-1' (Ss).",
            "title": "Unit",
            "x-hmp-profile": "user"
          },
          "values_source": {
            "default": "inline",
            "description": "Source for heterogeneous values. Use 'inline' for TOML mapping or 'csv' for external table.",
            "enum": [
              "inline",
              "csv"
            ],
            "examples": [
              "inline"
            ],
            "title": "Values Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "values": {
            "anyOf": [
              {
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "string"
                    }
                  ]
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Inline key/value mapping used when values_source='inline'. Keys are zone/material ids, values are numeric parameter values.",
            "title": "Values",
            "x-hmp-profile": "user"
          },
          "values_csv_file": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Path to CSV mapping file used when values_source='csv'. Relative paths are resolved from TOML directory.",
            "title": "Values Csv File",
            "x-hmp-profile": "dev"
          },
          "csv_key_column": {
            "default": "zone_key",
            "description": "CSV column name containing zone/material keys.",
            "examples": [
              "zone_key"
            ],
            "title": "Csv Key Column",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "csv_value_column": {
            "default": "value",
            "description": "CSV column name containing numeric parameter values.",
            "examples": [
              "value"
            ],
            "title": "Csv Value Column",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "field_spatial_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Identifier of the spatial field used to map heterogeneous values (must match geometry field id).",
            "title": "Field Spatial Id",
            "x-hmp-profile": "user"
          }
        },
        "title": "FieldHeterogeneousSection",
        "type": "object"
      },
      "FieldHomogeneousSection": {
        "additionalProperties": false,
        "description": "Schema for homogeneous `[field]` payloads.",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Parameter identifier used in outputs and logs (for example 'K', 'Sy').",
            "title": "Id",
            "x-hmp-profile": "user"
          },
          "kind": {
            "const": "homogeneous",
            "default": "homogeneous",
            "description": "Field type selector.",
            "examples": [
              "homogeneous"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Unit of parameter values. Typical examples: 'm/s' (K), '-' (Sy), 'm-1' (Ss).",
            "title": "Unit",
            "x-hmp-profile": "user"
          },
          "value": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Scalar surface value used when kind='homogeneous'.",
            "title": "Value",
            "x-hmp-profile": "user"
          }
        },
        "title": "FieldHomogeneousSection",
        "type": "object"
      },
      "FieldVerticalProfileSection": {
        "additionalProperties": false,
        "description": "Schema for `[field_vertical_profile]`.",
        "properties": {
          "mode": {
            "default": "none",
            "description": "Depth dependency mode shared over the full domain. Allowed values: 'none', 'exponential', 'tabulated'.",
            "enum": [
              "none",
              "exponential",
              "tabulated"
            ],
            "examples": [
              "none"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "characteristic_depth": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "properties": {
                      "magnitude": {
                        "title": "Magnitude",
                        "type": "string"
                      },
                      "units": {
                        "title": "Units",
                        "type": "string"
                      }
                    },
                    "required": [
                      "magnitude"
                    ],
                    "type": "object"
                  }
                ],
                "gt": 0.0
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Characteristic depth for exponential mode. Vertical factor is exp(-depth/characteristic_depth).",
            "title": "Characteristic Depth",
            "x-hmp-profile": "dev"
          },
          "min_factor": {
            "anyOf": [
              {
                "description": "Probability in the closed interval [0, 1].",
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional floor factor for exponential mode. If provided, factor is max(exp(-depth/characteristic_depth), min_factor).",
            "title": "Min Factor",
            "x-hmp-profile": "dev"
          },
          "depths": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "minItems": 1,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Depth nodes for tabulated mode (meters, first value must be 0).",
            "title": "Depths",
            "x-hmp-profile": "dev"
          },
          "factors": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "minItems": 1,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Multiplicative factors aligned with `depths` for tabulated mode (first value must be 1 at depth 0).",
            "title": "Factors",
            "x-hmp-profile": "dev"
          },
          "interpolation": {
            "default": "linear",
            "description": "Interpolation strategy for tabulated mode. Allowed values: 'linear' or 'step'.",
            "enum": [
              "linear",
              "step"
            ],
            "examples": [
              "linear"
            ],
            "title": "Interpolation",
            "type": "string",
            "x-hmp-profile": "dev"
          }
        },
        "title": "FieldVerticalProfileSection",
        "type": "object"
      },
      "FlatSubstratumDepthModel": {
        "additionalProperties": false,
        "description": "Vertical model using one flat (constant-elevation) substratum.\n\nBottom elevation is constant over the whole domain:\n``bottom = substratum_elevation``.",
        "properties": {
          "kind": {
            "const": "flat_substratum",
            "default": "flat_substratum",
            "description": "Depth-model kind discriminator. Use 'flat_substratum' to define one constant bottom elevation.",
            "examples": [
              "flat_substratum"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "substratum_elevation": {
            "default": 0.0,
            "description": "Flat substratum elevation (m) applied over the full domain.",
            "examples": [
              0.0
            ],
            "title": "Substratum Elevation",
            "type": "number",
            "x-hmp-profile": "user"
          }
        },
        "title": "FlatSubstratumDepthModel",
        "type": "object"
      },
      "FlatTopography": {
        "additionalProperties": false,
        "description": "Constant-elevation analytical topography.",
        "properties": {
          "kind": {
            "const": "flat",
            "default": "flat",
            "description": "Analytical topography law: 'flat' keeps one constant elevation.",
            "examples": [
              "flat"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "base_elevation": {
            "default": 20.0,
            "description": "Constant surface elevation (m).",
            "examples": [
              20.0
            ],
            "title": "Base Elevation",
            "type": "number",
            "x-hmp-profile": "user"
          }
        },
        "title": "FlatTopography",
        "type": "object"
      },
      "FlowBoundaryForcingConstantConfig": {
        "additionalProperties": false,
        "description": "Constant head forcing applied to every stress period.",
        "properties": {
          "mode": {
            "const": "constant",
            "default": "constant",
            "description": "Discriminator tag for the constant boundary-forcing variant.",
            "examples": [
              "constant"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "value": {
            "description": "Constant boundary head value used when mode='constant'.",
            "examples": [
              1.0
            ],
            "title": "Value",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "units": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Source units of forcing values before runtime conversion.",
            "title": "Units",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "value"
        ],
        "title": "FlowBoundaryForcingConstantConfig",
        "type": "object"
      },
      "FlowBoundaryForcingCsvConfig": {
        "additionalProperties": false,
        "description": "CSV-backed boundary forcing resolved at runtime against simulation.time.",
        "properties": {
          "mode": {
            "const": "csv",
            "default": "csv",
            "description": "Discriminator tag for the CSV-backed boundary-forcing variant.",
            "examples": [
              "csv"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path_file": {
            "description": "CSV file path containing time-series boundary head values when mode='csv'.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Path File",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "sep": {
            "default": ",",
            "description": "CSV column separator.",
            "examples": [
              ","
            ],
            "title": "Sep",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "date_column": {
            "default": "date",
            "description": "CSV column containing timestamps.",
            "examples": [
              "date"
            ],
            "title": "Date Column",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "date_format": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional datetime format passed to pandas.to_datetime.",
            "title": "Date Format",
            "x-hmp-profile": "dev"
          },
          "value_column": {
            "default": "value",
            "description": "CSV column containing boundary head values.",
            "examples": [
              "value"
            ],
            "title": "Value Column",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "fill_method": {
            "default": "ffill",
            "description": "Gap-filling policy used when a stress period has no direct sample.",
            "enum": [
              "ffill",
              "bfill"
            ],
            "examples": [
              "ffill"
            ],
            "title": "Fill Method",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "aggregate": {
            "default": "mean",
            "description": "Stress-period aggregation method.",
            "enum": [
              "mean",
              "last"
            ],
            "examples": [
              "mean"
            ],
            "title": "Aggregate",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "units": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Source units of forcing values before runtime conversion.",
            "title": "Units",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "path_file"
        ],
        "title": "FlowBoundaryForcingCsvConfig",
        "type": "object"
      },
      "FlowConfig": {
        "additionalProperties": false,
        "description": "Flow-process configuration.\n\nParameters are declared in `param_list` (ordered list of ids), and\nparameter payloads are stored in `param`. The 13 flat\n``runtime_*``/``vi_*``/``ts_vi_*`` Boussinesq knobs are declared on\n:class:`FlowRuntimeFields` and grouped together by the\n:attr:`runtime` property as a :class:`FlowRuntimeConfig` view.",
        "properties": {
          "runtime_backend": {
            "default": "local",
            "description": "Optional nonlinear runtime backend hint used by the Boussinesq solver implementation. Other flow solvers may ignore this field.",
            "enum": [
              "local",
              "scipy",
              "scipy_sparse",
              "petsc"
            ],
            "examples": [
              "local",
              "scipy_sparse"
            ],
            "stability": "experimental",
            "title": "Runtime Backend",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "surface_interaction_model": {
            "default": "auto",
            "description": "Optional Boussinesq surface-interaction closure selector. 'regularized_partition' uses the Marcais-style q_ex = G_r(theta) R(balance) law; 'complementarity' uses the mixed PETSc q_ex-perp-(z_top-h) formulation; 'vi_obstacle' uses the experimental PETSc head-only VI obstacle formulation; 'auto' keeps the historical backend-dependent default.",
            "enum": [
              "auto",
              "regularized_partition",
              "complementarity",
              "vi_obstacle",
              "ts_vi_obstacle"
            ],
            "examples": [
              "auto",
              "regularized_partition"
            ],
            "stability": "experimental",
            "title": "Surface Interaction Model",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "runtime_max_iterations": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional override for the nonlinear iteration budget used by the Boussinesq runtime backend.",
            "display_max": 100000,
            "display_min": 1,
            "display_name_fr": "It\u00e9rations max (solveur)",
            "help_text_fr": "Budget d'it\u00e9rations non-lin\u00e9aires pour le solveur.",
            "title": "Runtime Max Iterations",
            "unit": "-",
            "widget_type": "input",
            "x-hmp-profile": "dev"
          },
          "runtime_tol_residual_inf": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional override for the infinity-norm residual tolerance used by the Boussinesq runtime backend.",
            "title": "Runtime Tol Residual Inf",
            "x-hmp-profile": "dev"
          },
          "runtime_tol_state_update_inf": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional override for the infinity-norm state-update tolerance used by Boussinesq backends that track it.",
            "title": "Runtime Tol State Update Inf",
            "x-hmp-profile": "dev"
          },
          "vi_substeps_per_period": {
            "default": 1,
            "description": "Fixed number of Backward-Euler substeps per stress period for the experimental PETSc VI obstacle runtime. Rate-based forcing values are kept unchanged on each substep.",
            "examples": [
              1
            ],
            "title": "Vi Substeps Per Period",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "vi_substep_on_failure": {
            "default": false,
            "description": "When true, retry a failed PETSc VI obstacle stress period with increasing substep counts.",
            "examples": [
              false
            ],
            "title": "Vi Substep On Failure",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "vi_max_adaptive_substeps": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Maximum number of PETSc VI obstacle substeps allowed for adaptive failure retries.",
            "title": "Vi Max Adaptive Substeps",
            "x-hmp-profile": "dev"
          },
          "ts_vi_steps_per_period": {
            "default": 4,
            "description": "Fixed PETSc TS Backward-Euler steps per stress period for the experimental TS VI obstacle runtime.",
            "examples": [
              4
            ],
            "title": "Ts Vi Steps Per Period",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "ts_vi_adapt": {
            "default": false,
            "description": "Enable experimental PETSc TS adaptivity for the TS VI obstacle runtime.",
            "examples": [
              false
            ],
            "title": "Ts Vi Adapt",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "ts_vi_dt_min_fraction": {
            "default": 0.015625,
            "description": "Minimum TS VI time-step as a fraction of the stress-period length.",
            "examples": [
              0.015625
            ],
            "title": "Ts Vi Dt Min Fraction",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "ts_vi_dt_max_fraction": {
            "default": 0.25,
            "description": "Maximum TS VI time-step as a fraction of the stress-period length.",
            "examples": [
              0.25
            ],
            "title": "Ts Vi Dt Max Fraction",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "ts_vi_type": {
            "default": "beuler",
            "description": "PETSc TS type for the experimental TS VI obstacle runtime.",
            "examples": [
              "beuler"
            ],
            "title": "Ts Vi Type",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "ts_vi_snes_type": {
            "default": "vinewtonrsls",
            "description": "PETSc SNES type for the experimental TS VI obstacle runtime.",
            "examples": [
              "vinewtonrsls"
            ],
            "title": "Ts Vi Snes Type",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "param_list": {
            "description": "Ordered list of flow-parameter identifiers used to build runtime parameters (for example ['K', 'Ss', 'Sy']).",
            "examples": [
              [
                "K",
                "Sy",
                "Ss"
              ]
            ],
            "items": {
              "type": "string"
            },
            "title": "Param List",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "param": {
            "additionalProperties": {
              "$ref": "#/components/schemas/FlowParam"
            },
            "description": "Mapping of flow-parameter identifiers to native FieldParamConfig payloads.",
            "title": "Param",
            "type": "object",
            "x-hmp-profile": "user"
          },
          "ic": {
            "$ref": "#/components/schemas/FlowInitialConditions",
            "description": "Validated flow initial-condition structure parsed from [flow.ic]. Stored as FlowInitialConditions(h=FlowInitialCondition).",
            "x-hmp-profile": "user"
          },
          "bc": {
            "additionalProperties": {
              "description": "Boundary-condition kind discriminator.",
              "discriminator": {
                "mapping": {
                  "cauchy": "#/$defs/CauchyBC",
                  "dirichlet": "#/$defs/DirichletBC",
                  "robin": "#/$defs/RobinBC"
                },
                "propertyName": "kind"
              },
              "oneOf": [
                {
                  "$ref": "#/components/schemas/DirichletBC"
                },
                {
                  "$ref": "#/components/schemas/CauchyBC"
                },
                {
                  "$ref": "#/components/schemas/RobinBC"
                }
              ]
            },
            "description": "Mapping of flow boundary-condition payloads parsed from ``[flow.bc]``.\n\n**Supported TOML sections**\n\n- ``[flow.bc.dirichlet.<id>]`` where ``<id>`` is one of ``ocean``, ``stream``, ``north_side``, ``south_side``, ``east_side``, ``west_side``\n- ``[flow.bc.cauchy.drainage]``\n- ``[flow.bc.robin.drainage]``\n- ``[flow.bc.<custom_id>]`` for generic payloads\n\n**Common keys**\n\n- ``value`` (required): numeric or ``'<value> <unit>'``\n- ``application_domain``: optional for dirichlet when ``<id>`` implies it (e.g. ``west_side`` -> ``'west side'``); required for ``cauchy`` and ``robin`` drainage\n\n**Allowed application_domain values:** ``top``, ``north side``, ``south side``, ``east side``, ``west side``.\n\n**Default units:** ``m`` for dirichlet, ``m2/s`` for cauchy/robin.\n\n**Cauchy vs Robin:** both map to the same MODFLOW ``DRN`` package; the distinction only matters for the Boussinesq solver, which uses two different surface-interaction closures (``cauchy`` for the linear formulation ``q = C(h - h_ref)``, ``robin`` for the regularized partition / complementarity variants selected by ``flow.surface_interaction_model``).",
            "title": "Bc",
            "type": "object",
            "x-hmp-profile": "user"
          },
          "sinks_sources": {
            "$ref": "#/components/schemas/FlowSinksSourcesConfig",
            "description": "Typed sinks/sources payload (for example pumping wells).",
            "x-hmp-profile": "user"
          },
          "active_sinks_sources": {
            "description": "Explicitly activated sink/source names for this flow run. Allowed values: 'recharge', 'wells', 'etp'. Boussinesq currently rejects 'etp' at solver-contract validation. An empty list means no sink/source package is assembled by the solver.",
            "examples": [
              [
                "recharge"
              ],
              [
                "recharge",
                "wells"
              ],
              [
                "etp"
              ]
            ],
            "items": {
              "description": "Snake-case identifier starting with a lowercase letter.",
              "pattern": "^[a-z][a-z0-9_]*$",
              "type": "string"
            },
            "title": "Active Sinks Sources",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "active_bc": {
            "description": "Explicitly activated boundary-condition ids for this flow run. Allowed values are the canonical ids declared in the flow boundary-condition registry: 'ocean', 'stream', 'north_side', 'south_side', 'east_side', 'west_side', 'drainage'. An empty list means no boundary-condition package is assembled by the solver.",
            "examples": [
              [
                "ocean"
              ],
              [
                "west_side",
                "east_side",
                "drainage"
              ]
            ],
            "items": {
              "description": "Snake-case identifier starting with a lowercase letter.",
              "pattern": "^[a-z][a-z0-9_]*$",
              "type": "string"
            },
            "title": "Active Bc",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "flow_regime": {
            "default": "transient",
            "description": "Global flow simulation regime used by solvers consuming [flow] (steady or transient).",
            "display_name_fr": "R\u00e9gime d'\u00e9coulement",
            "enum": [
              "steady",
              "transient"
            ],
            "examples": [
              "steady",
              "transient"
            ],
            "help_text_fr": "R\u00e9gime stationnaire (steady) ou transitoire (transient). Le r\u00e9gime transitoire requiert une condition initiale [flow.ic].",
            "title": "Flow Regime",
            "type": "string",
            "unit": "-",
            "widget_type": "select",
            "x-hmp-profile": "user"
          },
          "first_period_steady": {
            "default": true,
            "description": "For transient flow, mark the first solver stress period as steady-state. Ignored for steady flow, where all solver periods are steady.",
            "display_name_fr": "Premiere periode stationnaire",
            "examples": [
              true,
              false
            ],
            "help_text_fr": "En regime transitoire, force la premiere periode de calcul en stationnaire. En regime stationnaire, toutes les periodes restent stationnaires.",
            "title": "First Period Steady",
            "type": "boolean",
            "unit": "-",
            "widget_type": "checkbox",
            "x-hmp-profile": "user"
          }
        },
        "title": "FlowConfig",
        "type": "object"
      },
      "FlowEtpConfig": {
        "additionalProperties": false,
        "description": "Typed payload for diffuse evapotranspiration over the model domain.\n\nDrives the MODFLOW EVT package. Conceptually parallel to\n:class:`FlowRechargeConfig`: scalar / list / mapping / runtime-series\npayloads are accepted and converted to SI ``m/s`` at runtime via\n``apply_etp_load_result_to_flow``. The actual conversion to a\nstress-period dictionary is handled by\n:class:`FlowToModflowAdapter._build_etp_payload`. This is the unique\nentry point for the EVT package.",
        "properties": {
          "values": {
            "default": 0.0,
            "description": "ETP payload: scalar, list (one per stress period), mapping {kper: value}, or runtime series. Values must be non-negative; the EVT package treats them as outflow rates.",
            "examples": [
              0.0
            ],
            "title": "Values",
            "x-hmp-profile": "user"
          },
          "heterogeneous_source": {
            "default": null,
            "description": "Optional raw data source for heterogeneous (2D per-cell) ETP. When set, the solver adapter discretizes FieldRecords onto the MODFLOW grid instead of using the scalar 'values' field. Expected: LoadResult with FieldRecords.",
            "title": "Heterogeneous Source",
            "x-hmp-profile": "dev"
          },
          "first_clim": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ],
            "default": "mean",
            "description": "Period-0 policy when values is a sequence: 'mean' (series average), 'first' (first element), or a numeric scalar.",
            "examples": [
              "mean"
            ],
            "title": "First Clim",
            "x-hmp-profile": "dev"
          },
          "units": {
            "default": "mm/day",
            "description": "Units of the ETP data source. Data-manager outputs use mm/day by convention; converted to m/s at runtime.",
            "examples": [
              "mm/day"
            ],
            "title": "Units",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "surface_offset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "properties": {
                  "magnitude": {
                    "title": "Magnitude",
                    "type": "string"
                  },
                  "units": {
                    "title": "Units",
                    "type": "string"
                  }
                },
                "required": [
                  "magnitude"
                ],
                "type": "object"
              }
            ],
            "default": 2.0,
            "description": "Distance below the topographic surface (m) where the EVT extraction surface sits. MODFLOW EVT extracts water linearly between this surface and surface - extinction_depth. Legacy default was DEM - 2 m.",
            "examples": [
              2.0
            ],
            "title": "Surface Offset",
            "x-hmp-profile": "dev"
          },
          "extinction_depth": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "properties": {
                  "magnitude": {
                    "title": "Magnitude",
                    "type": "string"
                  },
                  "units": {
                    "title": "Units",
                    "type": "string"
                  }
                },
                "required": [
                  "magnitude"
                ],
                "type": "object"
              }
            ],
            "default": 1.0,
            "description": "EVT extinction depth (m): below surface_offset + extinction_depth, evapotranspiration is zero. Legacy default was 1 m.",
            "examples": [
              1.0
            ],
            "title": "Extinction Depth",
            "x-hmp-profile": "dev"
          },
          "spatial_mode": {
            "default": "auto",
            "description": "How to interpret spatial data: 'auto' (points->homogeneous, fields->heterogeneous), 'homogeneous', or 'heterogeneous'.",
            "enum": [
              "auto",
              "homogeneous",
              "heterogeneous"
            ],
            "examples": [
              "auto"
            ],
            "title": "Spatial Mode",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "interpolation_method": {
            "default": "nearest",
            "description": "Spatial interpolation method for gridded/point data onto the MODFLOW grid. Options: 'nearest', 'linear', 'idw'.",
            "enum": [
              "nearest",
              "linear",
              "idw"
            ],
            "examples": [
              "nearest"
            ],
            "title": "Interpolation Method",
            "type": "string",
            "x-hmp-profile": "dev"
          }
        },
        "title": "FlowEtpConfig",
        "type": "object"
      },
      "FlowICBottom": {
        "additionalProperties": false,
        "description": "Initialize head at the bottom surface (empty aquifer).",
        "properties": {
          "id": {
            "default": "h",
            "description": "id of the initial condition (forced to 'h' for flow)",
            "examples": [
              "h"
            ],
            "title": "Id",
            "toml_exclude": true,
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "value": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Process-specific initial-condition value payload.",
            "title": "Value",
            "x-hmp-profile": "user"
          },
          "description": {
            "default": "",
            "description": "Description of the initial condition",
            "examples": [
              ""
            ],
            "title": "Description",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "units": {
            "default": "m",
            "description": "Runtime unit for the initial hydraulic-head field.",
            "examples": [
              "m"
            ],
            "title": "Units",
            "toml_exclude": true,
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "type": {
            "const": "bottom",
            "default": "bottom",
            "description": "Initialize head at the bottom surface (empty aquifer).",
            "examples": [
              "bottom"
            ],
            "title": "Type",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "FlowICBottom",
        "type": "object"
      },
      "FlowICCustom": {
        "additionalProperties": false,
        "description": "Initialize head with one explicit numeric value.",
        "properties": {
          "id": {
            "default": "h",
            "description": "id of the initial condition (forced to 'h' for flow)",
            "examples": [
              "h"
            ],
            "title": "Id",
            "toml_exclude": true,
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "value": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "properties": {
                  "magnitude": {
                    "title": "Magnitude",
                    "type": "string"
                  },
                  "units": {
                    "title": "Units",
                    "type": "string"
                  }
                },
                "required": [
                  "magnitude"
                ],
                "type": "object"
              }
            ],
            "description": "Initial hydraulic-head value.",
            "title": "Value",
            "x-hmp-profile": "user"
          },
          "description": {
            "default": "",
            "description": "Description of the initial condition",
            "examples": [
              ""
            ],
            "title": "Description",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "units": {
            "default": "",
            "description": "Units of the initial condition",
            "examples": [
              ""
            ],
            "title": "Units",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "type": {
            "const": "custom",
            "default": "custom",
            "description": "Initialize head with one explicit numeric value.",
            "examples": [
              "custom"
            ],
            "title": "Type",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "value"
        ],
        "title": "FlowICCustom",
        "type": "object"
      },
      "FlowICSteadyState": {
        "additionalProperties": false,
        "description": "Initialize a transient run from a same-solver steady solve.",
        "properties": {
          "id": {
            "default": "h",
            "description": "id of the initial condition (forced to 'h' for flow)",
            "examples": [
              "h"
            ],
            "title": "Id",
            "toml_exclude": true,
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "value": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Process-specific initial-condition value payload.",
            "title": "Value",
            "x-hmp-profile": "user"
          },
          "description": {
            "default": "",
            "description": "Description of the initial condition",
            "examples": [
              ""
            ],
            "title": "Description",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "units": {
            "default": "m",
            "description": "Runtime unit for the initial hydraulic-head field.",
            "examples": [
              "m"
            ],
            "title": "Units",
            "toml_exclude": true,
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "type": {
            "const": "steady_state",
            "default": "steady_state",
            "description": "Initialize a transient run from a same-solver steady solve using a documented forcing strategy.",
            "examples": [
              "steady_state"
            ],
            "title": "Type",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "source": {
            "anyOf": [
              {
                "enum": [
                  "recharge",
                  "mean_recharge"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Forcing source used by the initialization solve. 'mean_recharge' is an alias for source='recharge' with recharge_statistic='time_mean'.",
            "title": "Source",
            "x-hmp-profile": "user"
          },
          "recharge_statistic": {
            "anyOf": [
              {
                "const": "time_mean",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Statistic applied to the recharge chronicle.",
            "title": "Recharge Statistic",
            "x-hmp-profile": "user"
          },
          "boundary_condition_policy": {
            "anyOf": [
              {
                "const": "first_period",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Policy used for transient boundary-condition chronicles during the steady initialization solve.",
            "title": "Boundary Condition Policy",
            "x-hmp-profile": "user"
          }
        },
        "title": "FlowICSteadyState",
        "type": "object"
      },
      "FlowICTop": {
        "additionalProperties": false,
        "description": "Initialize head at the top surface (full aquifer).",
        "properties": {
          "id": {
            "default": "h",
            "description": "id of the initial condition (forced to 'h' for flow)",
            "examples": [
              "h"
            ],
            "title": "Id",
            "toml_exclude": true,
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "value": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Process-specific initial-condition value payload.",
            "title": "Value",
            "x-hmp-profile": "user"
          },
          "description": {
            "default": "",
            "description": "Description of the initial condition",
            "examples": [
              ""
            ],
            "title": "Description",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "units": {
            "default": "m",
            "description": "Runtime unit for the initial hydraulic-head field.",
            "examples": [
              "m"
            ],
            "title": "Units",
            "toml_exclude": true,
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "type": {
            "const": "top",
            "default": "top",
            "description": "Initialize head at the top surface (full aquifer).",
            "examples": [
              "top"
            ],
            "title": "Type",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "FlowICTop",
        "type": "object"
      },
      "FlowICTopOffset": {
        "additionalProperties": false,
        "description": "Initialize head at the top surface minus a vertical offset `value`.",
        "properties": {
          "id": {
            "default": "h",
            "description": "id of the initial condition (forced to 'h' for flow)",
            "examples": [
              "h"
            ],
            "title": "Id",
            "toml_exclude": true,
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "value": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "properties": {
                  "magnitude": {
                    "title": "Magnitude",
                    "type": "string"
                  },
                  "units": {
                    "title": "Units",
                    "type": "string"
                  }
                },
                "required": [
                  "magnitude"
                ],
                "type": "object"
              }
            ],
            "description": "Vertical offset below the top surface.",
            "title": "Value",
            "x-hmp-profile": "user"
          },
          "description": {
            "default": "",
            "description": "Description of the initial condition",
            "examples": [
              ""
            ],
            "title": "Description",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "units": {
            "default": "",
            "description": "Units of the initial condition",
            "examples": [
              ""
            ],
            "title": "Units",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "type": {
            "const": "top_offset",
            "default": "top_offset",
            "description": "Initialize head at the top surface minus `value`.",
            "examples": [
              "top_offset"
            ],
            "title": "Type",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "value"
        ],
        "title": "FlowICTopOffset",
        "type": "object"
      },
      "FlowInitialConditions": {
        "additionalProperties": false,
        "description": "Container for flow initial conditions stored in process runtime.\n\nKeeping one explicit container (instead of bare values) allows the process\nAPI to remain extensible when adding future IC variables.",
        "properties": {
          "h": {
            "description": "Hydraulic-head initial condition payload.",
            "discriminator": {
              "mapping": {
                "bottom": "#/$defs/FlowICBottom",
                "custom": "#/$defs/FlowICCustom",
                "steady_state": "#/$defs/FlowICSteadyState",
                "top": "#/$defs/FlowICTop",
                "top_offset": "#/$defs/FlowICTopOffset"
              },
              "propertyName": "type"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/FlowICTop"
              },
              {
                "$ref": "#/components/schemas/FlowICTopOffset"
              },
              {
                "$ref": "#/components/schemas/FlowICBottom"
              },
              {
                "$ref": "#/components/schemas/FlowICCustom"
              },
              {
                "$ref": "#/components/schemas/FlowICSteadyState"
              }
            ],
            "title": "H",
            "x-hmp-profile": "user"
          }
        },
        "title": "FlowInitialConditions",
        "type": "object"
      },
      "FlowParam": {
        "additionalProperties": false,
        "description": "Flow parameter payload using native field-param sections.",
        "properties": {
          "field": {
            "description": "Discriminated parameter section `[field]`.",
            "discriminator": {
              "mapping": {
                "heterogeneous": "#/$defs/FieldHeterogeneousSection",
                "homogeneous": "#/$defs/FieldHomogeneousSection"
              },
              "propertyName": "kind"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/FieldHomogeneousSection"
              },
              {
                "$ref": "#/components/schemas/FieldHeterogeneousSection"
              }
            ],
            "title": "Field",
            "x-hmp-profile": "user"
          },
          "field_vertical_profile": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FieldVerticalProfileSection"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional depth profile section `[field_vertical_profile]`.",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "field"
        ],
        "title": "FlowParam",
        "type": "object"
      },
      "FlowProcessConfig": {
        "additionalProperties": false,
        "description": "``[[simulation.process]]`` entry for a flow process.",
        "properties": {
          "id": {
            "description": "User-facing identifier for the process. This id is required and must be unique within the simulation.",
            "examples": [
              "flow_main"
            ],
            "pattern": "^[a-z][a-z0-9_]*$",
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "type": {
            "const": "flow",
            "default": "flow",
            "description": "Discriminator selecting the 'flow' process family.",
            "examples": [
              "flow"
            ],
            "title": "Type",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "solvers": {
            "description": "Ordered list of active flow solver names. At least one solver is required for flow processes.",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "title": "Solvers",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "id",
          "solvers"
        ],
        "title": "FlowProcessConfig",
        "type": "object"
      },
      "FlowRechargeConfig": {
        "additionalProperties": false,
        "description": "Typed payload for diffuse recharge over the model domain.\n\nRecharge drives the MODFLOW RCH package. The conversion to MODFLOW\nstress-period dictionaries is handled by\n``FlowToModflowAdapter._build_recharge_payload``. Negative values can be\nrouted to EVT when ``negative_to_evt`` is enabled.\n\nAttributes\n----------\nvalues :\n    Recharge payload. Accepted forms:\n\n    - **scalar** ``float``: uniform rate applied to every stress period,\n    - **list / numpy array**: one value per stress period\n      (length must match ``nper``),\n    - **mapping** ``{period_index: value}``: explicit per-period assignment,\n    - **runtime series** (pandas-like object with ``.iloc``): used when\n      recharge is computed dynamically (e.g. from PyHELP output).\n\nfirst_clim : str | float\n    Policy for stress-period 0 when ``values`` is a sequence.\n    MODFLOW steady-state warm-up periods often need a representative rate\n    that differs from the first raw time step. Options:\n\n    - ``\"mean\"``: arithmetic mean of the entire series (default),\n    - ``\"first\"``: first value of the series,\n    - *numeric*: explicit scalar.\n\nunits : str\n    Physical units of ``values``. The flow runtime converts the payload\n    to SI ``m/s`` when the process is built.",
        "properties": {
          "values": {
            "default": 0.0,
            "description": "Recharge payload: scalar, list (one per stress period), mapping {kper: value}, or runtime series.",
            "examples": [
              0.0
            ],
            "title": "Values",
            "x-hmp-profile": "user"
          },
          "heterogeneous_source": {
            "default": null,
            "description": "Optional raw data source for heterogeneous (2D per-cell) recharge. When set, the solver adapter discretizes FieldRecords onto the MODFLOW grid instead of using the scalar 'values' field. Expected: LoadResult with FieldRecords.",
            "title": "Heterogeneous Source",
            "x-hmp-profile": "dev"
          },
          "first_clim": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ],
            "default": "mean",
            "description": "Period-0 policy when values is a sequence: 'mean' (series average), 'first' (first element), or a numeric scalar.",
            "examples": [
              "mean"
            ],
            "title": "First Clim",
            "x-hmp-profile": "dev"
          },
          "units": {
            "default": "mm/day",
            "description": "Units of the recharge data source. Data-manager outputs use mm/day by convention; override when providing values in another unit (e.g. 'm/day'). Converted to m/s at runtime via factor_to_m_per_s().",
            "examples": [
              "mm/day"
            ],
            "title": "Units",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "negative_to_evt": {
            "default": true,
            "description": "When true, negative recharge values are routed to the solver EVT package and RCH receives the non-negative clipped recharge.",
            "examples": [
              true
            ],
            "title": "Negative To Evt",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "spatial_mode": {
            "default": "auto",
            "description": "How to interpret spatial data: 'auto' (points->homogeneous, fields->heterogeneous), 'homogeneous' (force spatial averaging), 'heterogeneous' (force per-cell discretization, including point-to-grid interpolation when stations have coordinates).",
            "enum": [
              "auto",
              "homogeneous",
              "heterogeneous"
            ],
            "examples": [
              "auto"
            ],
            "title": "Spatial Mode",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "interpolation_method": {
            "default": "nearest",
            "description": "Spatial interpolation method for gridded/point data onto the MODFLOW grid. Options: 'nearest', 'linear', 'idw'.",
            "enum": [
              "nearest",
              "linear",
              "idw"
            ],
            "examples": [
              "nearest"
            ],
            "title": "Interpolation Method",
            "type": "string",
            "x-hmp-profile": "dev"
          }
        },
        "title": "FlowRechargeConfig",
        "type": "object"
      },
      "FlowSinksSourcesConfig": {
        "additionalProperties": false,
        "description": "Top-level container for all sink/source elements of the flow process.\n\nMaps directly to the ``[flow.sinks_sources]`` TOML section. All fields\nare optional so that a minimal ``FlowSinksSourcesConfig()`` (no wells,\nno recharge, no etp) is always valid and represents a passive model.\n\nFields\n------\nwells : dict[str, FlowWellConfig]\n    Pumping/injection wells keyed by a user-defined string id.\nrecharge : FlowRechargeConfig | None\n    Diffuse recharge configuration. ``None`` means no recharge.\netp : FlowEtpConfig | None\n    Diffuse evapotranspiration configuration. ``None`` means no\n    EVT package is built.",
        "properties": {
          "wells": {
            "additionalProperties": {
              "$ref": "#/components/schemas/FlowWellConfig"
            },
            "description": "Mapping of well ids to typed well payloads.",
            "title": "Wells",
            "type": "object",
            "x-hmp-profile": "user"
          },
          "recharge": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FlowRechargeConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Diffuse recharge configuration. None = zero recharge for all periods.",
            "x-hmp-profile": "user"
          },
          "etp": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FlowEtpConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Diffuse evapotranspiration configuration. None = no EVT package built.",
            "x-hmp-profile": "user"
          }
        },
        "title": "FlowSinksSourcesConfig",
        "type": "object"
      },
      "FlowStationCriteriaConfig": {
        "additionalProperties": false,
        "description": "Criteria applied to flow stations in observation-led selections.",
        "properties": {
          "mode": {
            "default": "report_only",
            "enum": [
              "hard_reject",
              "warning",
              "score",
              "stratify",
              "report_only"
            ],
            "examples": [
              "hard_reject"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "min_record_years": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Min Record Years",
            "x-hmp-profile": "user"
          },
          "max_station_to_outlet_distance_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Max Station To Outlet Distance Km",
            "x-hmp-profile": "user"
          },
          "require_station_inside_or_at_outlet": {
            "default": false,
            "examples": [
              false
            ],
            "title": "Require Station Inside Or At Outlet",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "FlowStationCriteriaConfig",
        "type": "object"
      },
      "FlowWellConfig": {
        "additionalProperties": false,
        "description": "Typed payload for one pumping or injection well.\n\nA well is defined by its location (``location``) and its flux schedule\nover time (``flux``). ``location`` is a discriminated union with three\nvariants: ``cell`` for direct ``[lay, row, col]`` indexing, ``absolute_xy``\nfor projected coordinates, or ``relative_xy`` for normalized horizontal\ncoordinates. ``flux`` follows the MODFLOW sign convention: negative =\npumping, positive = injection. ``flux`` may be a scalar (constant rate)\nor a list with one value per stress period.",
        "properties": {
          "location": {
            "description": "Well location payload. Discriminated by 'kind': 'cell', 'absolute_xy', or 'relative_xy'.",
            "discriminator": {
              "mapping": {
                "absolute_xy": "#/$defs/FlowWellLocationAbsoluteXY",
                "cell": "#/$defs/FlowWellLocationCell",
                "relative_xy": "#/$defs/FlowWellLocationRelativeXY"
              },
              "propertyName": "kind"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/FlowWellLocationCell"
              },
              {
                "$ref": "#/components/schemas/FlowWellLocationAbsoluteXY"
              },
              {
                "$ref": "#/components/schemas/FlowWellLocationRelativeXY"
              }
            ],
            "title": "Location",
            "x-hmp-profile": "user"
          },
          "flux": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Well rate [L^3/T]. Scalar for constant rate, or one value per stress period. Negative = pumping, positive = injection.",
            "title": "Flux",
            "x-hmp-profile": "user"
          },
          "forcing": {
            "anyOf": [
              {
                "description": "Discriminated union of well-forcing payloads (constant or csv).",
                "discriminator": {
                  "mapping": {
                    "constant": "#/$defs/FlowWellForcingConstantConfig",
                    "csv": "#/$defs/FlowWellForcingCsvConfig"
                  },
                  "propertyName": "kind"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/FlowWellForcingConstantConfig"
                  },
                  {
                    "$ref": "#/components/schemas/FlowWellForcingCsvConfig"
                  }
                ]
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional runtime forcing declaration. Supported modes: 'constant' and 'csv'. The launcher resolves this payload to well.flux using [simulation.time].",
            "title": "Forcing",
            "x-hmp-profile": "dev"
          },
          "units": {
            "default": "m3/s",
            "description": "Units of flux values.",
            "examples": [
              "m3/s"
            ],
            "title": "Units",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "description": {
            "default": "",
            "description": "Optional well description.",
            "examples": [
              ""
            ],
            "title": "Description",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "location"
        ],
        "title": "FlowWellConfig",
        "type": "object"
      },
      "FlowWellForcingConstantConfig": {
        "additionalProperties": false,
        "description": "One constant well-rate forcing applied to every stress period.",
        "properties": {
          "kind": {
            "const": "constant",
            "default": "constant",
            "description": "Discriminator tag for the constant well-forcing variant.",
            "examples": [
              "constant"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "value": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "properties": {
                  "magnitude": {
                    "title": "Magnitude",
                    "type": "string"
                  },
                  "units": {
                    "title": "Units",
                    "type": "string"
                  }
                },
                "required": [
                  "magnitude"
                ],
                "type": "object"
              }
            ],
            "description": "Constant well rate in the same units as the parent well.",
            "title": "Value",
            "x-hmp-profile": "user"
          },
          "units": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Source units of the constant value before runtime conversion.",
            "title": "Units",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "value"
        ],
        "title": "FlowWellForcingConstantConfig",
        "type": "object"
      },
      "FlowWellForcingCsvConfig": {
        "additionalProperties": false,
        "description": "CSV-backed well forcing resolved at runtime against simulation.time.",
        "properties": {
          "kind": {
            "const": "csv",
            "default": "csv",
            "description": "Discriminator tag for the CSV-backed well-forcing variant.",
            "examples": [
              "csv"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path_file": {
            "description": "Path to the CSV chronicle file.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Path File",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "sep": {
            "default": ",",
            "description": "CSV delimiter.",
            "examples": [
              ","
            ],
            "title": "Sep",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "date_column": {
            "default": "date",
            "description": "CSV column containing timestamps.",
            "examples": [
              "date"
            ],
            "title": "Date Column",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "date_format": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional datetime format passed to pandas.to_datetime.",
            "title": "Date Format",
            "x-hmp-profile": "dev"
          },
          "value_column": {
            "default": "value",
            "description": "CSV column containing well rates.",
            "examples": [
              "value"
            ],
            "title": "Value Column",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "fill_method": {
            "default": "ffill",
            "description": "Gap-filling policy used when a stress period has no direct sample.",
            "enum": [
              "ffill",
              "bfill"
            ],
            "examples": [
              "ffill"
            ],
            "title": "Fill Method",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "aggregate": {
            "default": "mean",
            "description": "Stress-period aggregation method.",
            "enum": [
              "mean",
              "last"
            ],
            "examples": [
              "mean"
            ],
            "title": "Aggregate",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "units": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Source units of CSV values before runtime conversion.",
            "title": "Units",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "path_file"
        ],
        "title": "FlowWellForcingCsvConfig",
        "type": "object"
      },
      "FlowWellLocationAbsoluteXY": {
        "additionalProperties": false,
        "description": "Projected ``(x, y)`` coordinates in solver units.",
        "properties": {
          "kind": {
            "const": "absolute_xy",
            "default": "absolute_xy",
            "description": "Discriminator tag for the absolute-xy well location.",
            "examples": [
              "absolute_xy"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "layer": {
            "default": 0,
            "description": "Layer index (0-based) targeted by the well.",
            "examples": [
              0
            ],
            "title": "Layer",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "x": {
            "description": "Projected X coordinate in solver units.",
            "examples": [
              1.0
            ],
            "title": "X",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "y": {
            "description": "Projected Y coordinate in solver units.",
            "examples": [
              1.0
            ],
            "title": "Y",
            "type": "number",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "x",
          "y"
        ],
        "title": "FlowWellLocationAbsoluteXY",
        "type": "object"
      },
      "FlowWellLocationCell": {
        "additionalProperties": false,
        "description": "Direct ``[lay, row, col]`` addressing on a structured solver grid.",
        "properties": {
          "kind": {
            "const": "cell",
            "default": "cell",
            "description": "Discriminator tag for the cell-based well location.",
            "examples": [
              "cell"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "cell": {
            "description": "Direct cell indices as [lay, row, col] (0-based, FLOPY convention).",
            "maxItems": 3,
            "minItems": 3,
            "prefixItems": [
              {
                "type": "integer"
              },
              {
                "type": "integer"
              },
              {
                "type": "integer"
              }
            ],
            "title": "Cell",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "cell"
        ],
        "title": "FlowWellLocationCell",
        "type": "object"
      },
      "FlowWellLocationRelativeXY": {
        "additionalProperties": false,
        "description": "Normalized ``(x_rel, y_rel)`` in ``[0, 1]`` over the domain extent.",
        "properties": {
          "kind": {
            "const": "relative_xy",
            "default": "relative_xy",
            "description": "Discriminator tag for the relative-xy well location.",
            "examples": [
              "relative_xy"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "layer": {
            "default": 0,
            "description": "Layer index (0-based) targeted by the well.",
            "examples": [
              0
            ],
            "title": "Layer",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "x_rel": {
            "description": "Relative X position in [0, 1] from west to east.",
            "examples": [
              1.0
            ],
            "title": "X Rel",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "y_rel": {
            "description": "Relative Y position in [0, 1] from south to north.",
            "examples": [
              1.0
            ],
            "title": "Y Rel",
            "type": "number",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "x_rel",
          "y_rel"
        ],
        "title": "FlowWellLocationRelativeXY",
        "type": "object"
      },
      "GeneratedBandsSupportConfig": {
        "additionalProperties": false,
        "description": "Analytical bands split along one cartesian axis.",
        "properties": {
          "kind": {
            "const": "generated_bands",
            "examples": [
              "generated_bands"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "axis": {
            "default": "x",
            "enum": [
              "x",
              "y"
            ],
            "examples": [
              "x"
            ],
            "title": "Axis",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "coordinate_mode": {
            "default": "relative",
            "enum": [
              "relative",
              "absolute"
            ],
            "examples": [
              "relative"
            ],
            "title": "Coordinate Mode",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "breaks": {
            "description": "Ordered break coordinates delimiting consecutive bands. With coordinate_mode='relative', values are fractions in ]0,1[. With coordinate_mode='absolute', values are converted to metres.",
            "items": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "string"
                }
              ]
            },
            "title": "Breaks",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "labels": {
            "description": "Ordered band labels. Length must be len(breaks)+1.",
            "items": {
              "type": "string"
            },
            "title": "Labels",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "default_cell_samples_per_axis": {
            "default": 8,
            "description": "Sub-sampling resolution per cell axis used when rasterizing band masks.",
            "examples": [
              8
            ],
            "minimum": 2,
            "title": "Default Cell Samples Per Axis",
            "type": "integer",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "kind"
        ],
        "title": "GeneratedBandsSupportConfig",
        "type": "object"
      },
      "GeneratedRingsSupportConfig": {
        "additionalProperties": false,
        "description": "Analytical concentric rings centered on one cartesian point.",
        "properties": {
          "kind": {
            "const": "generated_rings",
            "examples": [
              "generated_rings"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "coordinate_mode": {
            "default": "relative",
            "enum": [
              "relative",
              "absolute"
            ],
            "examples": [
              "relative"
            ],
            "title": "Coordinate Mode",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "radii": {
            "description": "Ordered ring radii delimiting consecutive concentric zones. With coordinate_mode='relative', values are fractions in ]0,1[ of the largest inscribed circle around the chosen center. With coordinate_mode='absolute', values are converted to metres.",
            "items": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "string"
                }
              ]
            },
            "title": "Radii",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "labels": {
            "description": "Ordered ring labels. Length must be len(radii)+1.",
            "items": {
              "type": "string"
            },
            "title": "Labels",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "center_x": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional x coordinate of the ring center (projected metres). Defaults to the domain midpoint. Accepts inline units, e.g. '500 m'.",
            "title": "Center X",
            "x-hmp-profile": "dev"
          },
          "center_y": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional y coordinate of the ring center (projected metres). Defaults to the domain midpoint. Accepts inline units.",
            "title": "Center Y",
            "x-hmp-profile": "dev"
          },
          "default_cell_samples_per_axis": {
            "default": 8,
            "description": "Sub-sampling resolution per cell axis used when rasterizing ring masks.",
            "examples": [
              8
            ],
            "minimum": 2,
            "title": "Default Cell Samples Per Axis",
            "type": "integer",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "kind"
        ],
        "title": "GeneratedRingsSupportConfig",
        "type": "object"
      },
      "GeographicConfig": {
        "additionalProperties": false,
        "description": "Geographic configuration for watershed delineation.\n\nThis model stores parameters used to extract and prepare the physical domain\n(watershed geometry and rasters) based on various possible input definitions.\n\nStandard mode uses an external DEM with one of the catchment definitions:\ndirect DEM, XYZ text grid, outlet coordinate, or polygon shapefile.\nSynthetic mode builds an analytical support and bypasses external DEM\ndelineation.",
        "properties": {
          "source_mode": {
            "default": "standard",
            "description": "Geographic runtime mode. 'standard' keeps the historical DEM/outlet/polygon workflow. 'synthetic' builds one analytical support from [geographic.synthetic].",
            "enum": [
              "standard",
              "synthetic"
            ],
            "examples": [
              "standard"
            ],
            "title": "Source Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "catchment": {
            "anyOf": [
              {
                "description": "Catchment definition discriminator.",
                "discriminator": {
                  "mapping": {
                    "dem": "#/$defs/DemCatchDef",
                    "from_outlet_coord": "#/$defs/OutletCatchDef",
                    "from_polyg_shp": "#/$defs/PolygonCatchDef",
                    "txt": "#/$defs/TxtCatchDef"
                  },
                  "propertyName": "catch_def"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/DemCatchDef"
                  },
                  {
                    "$ref": "#/components/schemas/TxtCatchDef"
                  },
                  {
                    "$ref": "#/components/schemas/OutletCatchDef"
                  },
                  {
                    "$ref": "#/components/schemas/PolygonCatchDef"
                  }
                ]
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Catchment definition payload used when source_mode='standard'. Discriminated by 'catch_def' on the nested table: 'dem' | 'txt' | 'from_outlet_coord' | 'from_polyg_shp'.",
            "title": "Catchment",
            "x-hmp-profile": "user"
          },
          "crs_project": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Target projected CRS for all outputs (e.g. 'EPSG:2154'). If not set, derived from the input DEM.",
            "title": "Crs Project",
            "x-hmp-profile": "user"
          },
          "dem_correc_type": {
            "default": "breach",
            "description": "DEM depression correction method. 'breach' (recommended) preserves natural flow paths. 'fill' raises sinks to their pour point.",
            "enum": [
              "breach",
              "fill"
            ],
            "examples": [
              "breach"
            ],
            "title": "Dem Correc Type",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "bottom_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Path to a raster representing the aquifer bottom elevation. Must share the same grid as the model domain.",
            "title": "Bottom Path",
            "x-hmp-profile": "user"
          },
          "reg_fold": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Folder with pre-computed regional flow rasters. When set, rasters are loaded instead of recomputed.",
            "title": "Reg Fold",
            "x-hmp-profile": "dev"
          },
          "synthetic": {
            "$ref": "#/components/schemas/SyntheticGeographicConfig",
            "description": "Synthetic geographic support used when source_mode='synthetic'. This analytical mode bypasses watershed delineation from external DEM files.",
            "x-hmp-profile": "user"
          },
          "river_network": {
            "$ref": "#/components/schemas/RiverNetworkConfig",
            "description": "Optional DEM-derived river-network extraction settings. When disabled, no stream network is generated in geographic preprocessing.",
            "x-hmp-profile": "user"
          },
          "reuse_existing_outputs": {
            "default": false,
            "description": "If true, reuse previously generated geographic artifacts when the cached fingerprint matches the current DEM, outlet/polygon and geographic settings. This is useful for profiling repeated simulation runs in the same workspace.",
            "examples": [
              false
            ],
            "title": "Reuse Existing Outputs",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "write_intermediates": {
            "default": false,
            "description": "Keep intermediate rasters and shapefiles on disk after geographic preprocessing. When false (default), results_stable/ is removed after ingestion into the simulation Zarr store.",
            "examples": [
              false
            ],
            "title": "Write Intermediates",
            "type": "boolean",
            "x-hmp-profile": "dev"
          }
        },
        "title": "GeographicConfig",
        "type": "object"
      },
      "GeologyConfig": {
        "additionalProperties": false,
        "description": "Top-level geology variable configuration.\n\nThe section defines one or more geology sources and the sampling density\nused when categorical geology is projected onto mesh cells. By default,\nHydroModPy uses the BRGM 1:1M source so geology can be activated by\nplanner inference without a long user section.\n\nExample TOML::\n\n    [data.geology]\n    cell_samples_per_axis = 8\n\n    [[data.geology.sources]]\n    source = \"brgm_1m\"\n\n    [[data.geology.sources]]\n    source = \"custom\"\n    path = \"data/my_geology.gpkg\"\n    code_field = \"LITHOLOGY\"",
        "properties": {
          "sources": {
            "description": "At least one geology data source. Defaults to BRGM 1:1M.",
            "items": {
              "description": "Discriminated union of geology data sources tagged by the 'source' provider key.",
              "discriminator": {
                "mapping": {
                  "brgm_1m": "#/$defs/BrgmGeology1mSource",
                  "brgm_50k": "#/$defs/BrgmGeology50kSource",
                  "custom": "#/$defs/CustomGeologySource"
                },
                "propertyName": "source"
              },
              "oneOf": [
                {
                  "$ref": "#/components/schemas/CustomGeologySource"
                },
                {
                  "$ref": "#/components/schemas/BrgmGeology1mSource"
                },
                {
                  "$ref": "#/components/schemas/BrgmGeology50kSource"
                }
              ]
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "id": {
            "default": "field_geology",
            "description": "Identifier of the geology spatial field.",
            "examples": [
              "field_geology"
            ],
            "pattern": "^[a-z][a-z0-9_]*$",
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "cell_samples_per_axis": {
            "default": 8,
            "description": "Sub-sampling density for GeologyField.on_mesh(). Higher = more precise geology interface, slower runtime.",
            "examples": [
              8
            ],
            "minimum": 2,
            "title": "Cell Samples Per Axis",
            "type": "integer",
            "x-hmp-profile": "dev"
          }
        },
        "title": "GeologyConfig",
        "type": "object"
      },
      "GeologyCriteriaConfig": {
        "additionalProperties": false,
        "description": "Geology criterion configuration.",
        "properties": {
          "mode": {
            "default": "report_only",
            "enum": [
              "hard_reject",
              "warning",
              "score",
              "stratify",
              "report_only"
            ],
            "examples": [
              "hard_reject"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "prefer_diversity": {
            "default": false,
            "examples": [
              false
            ],
            "title": "Prefer Diversity",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "layers": {
            "description": "Optional polygon layers used to compute geology evidence.",
            "items": {
              "$ref": "#/components/schemas/GeologyLayerConfig"
            },
            "title": "Layers",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "title": "GeologyCriteriaConfig",
        "type": "object"
      },
      "GeologyLayerConfig": {
        "additionalProperties": false,
        "description": "Polygon layer used to compute basin geology classes.",
        "properties": {
          "name": {
            "description": "Human-readable geology layer name.",
            "examples": [
              "example"
            ],
            "minLength": 1,
            "title": "Name",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "description": "Vector polygon file containing geology units.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "class_field": {
            "description": "Feature field containing the geology class.",
            "examples": [
              "example"
            ],
            "minLength": 1,
            "title": "Class Field",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "id_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source-feature identifier field.",
            "title": "Id Field",
            "x-hmp-profile": "user"
          },
          "label_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source-feature label field.",
            "title": "Label Field",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "name",
          "path",
          "class_field"
        ],
        "title": "GeologyLayerConfig",
        "type": "object"
      },
      "GeologySupportConfig": {
        "additionalProperties": false,
        "description": "Support backed by the geology data manager.",
        "properties": {
          "kind": {
            "const": "geology",
            "examples": [
              "geology"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "kind"
        ],
        "title": "GeologySupportConfig",
        "type": "object"
      },
      "HumidityConfig": {
        "additionalProperties": false,
        "description": "Top-level relative-humidity configuration.\n\nThe section groups humidity sources and an optional date window. Loaded data\ncan support atmospheric forcing, evapotranspiration context, and HELP\ncoupling.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/HumiditySourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "HumidityConfig",
        "type": "object"
      },
      "HumiditySourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one relative-humidity data source.\n\nHumidity sources load station or gridded relative-humidity time series from\ncustom files or SIM2 EDR products. Source-level fields define file paths,\nstation columns, masks, units, and cache refresh behavior.",
        "properties": {
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user CSV files, 'sim2' for SIM2 EDR API.",
            "enum": [
              "custom",
              "sim2"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs, or a single .nc/.tif file.",
            "title": "Path",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "source"
        ],
        "title": "HumiditySourceConfig",
        "type": "object"
      },
      "HydrographyConfig": {
        "additionalProperties": false,
        "description": "Top-level hydrography configuration.\n\nThe section lists stream-network sources used by data loading and boundary\npreparation. It is commonly inferred when ``flow.active_bc`` contains a\nstream boundary condition.",
        "properties": {
          "sources": {
            "description": "At least one hydrography data source.",
            "items": {
              "$ref": "#/components/schemas/HydrographySourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "HydrographyConfig",
        "type": "object"
      },
      "HydrographySourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one hydrography data source.\n\nHydrography sources describe river-network vector or raster data. Use\n``custom`` for local files, ``osm`` for OpenStreetMap waterways,\n``bdtopage`` for the Sandre WFS service, or ``euhydro`` for the EEA\nEU-Hydro service.",
        "properties": {
          "source": {
            "description": "Data provider.",
            "enum": [
              "custom",
              "osm",
              "bdtopage",
              "euhydro"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Path to a vector file (SHP/GPKG/GeoJSON), raster (TIF/TIFF), or directory containing one.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "rasterize_field": {
            "default": "FID",
            "description": "Attribute field used when rasterising the vector layer.",
            "examples": [
              "FID"
            ],
            "title": "Rasterize Field",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "typename": {
            "default": "sa:CoursEau_FXX_Topage2025",
            "description": "WFS typename for BD Topage.",
            "examples": [
              "sa:CoursEau_FXX_Topage2025"
            ],
            "title": "Typename",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "page_size": {
            "default": 2000,
            "description": "WFS pagination page size (BD Topage).",
            "examples": [
              2000
            ],
            "title": "Page Size",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "group_name": {
            "default": "River_Net_lines",
            "description": "MapServer group name for EU-Hydro layer discovery.",
            "examples": [
              "River_Net_lines"
            ],
            "title": "Group Name",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "euhydro_page_size": {
            "default": 1000,
            "description": "Pagination page size for EU-Hydro REST queries.",
            "examples": [
              1000
            ],
            "title": "Euhydro Page Size",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "force_refresh": {
            "default": false,
            "description": "Bypass API cache and re-download data.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "waterway_types": {
            "description": "OSM waterway tag values to fetch.",
            "items": {
              "type": "string"
            },
            "title": "Waterway Types",
            "type": "array",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "source"
        ],
        "title": "HydrographySourceConfig",
        "type": "object"
      },
      "HydrologyConfig": {
        "additionalProperties": false,
        "description": "DEM-derived hydrologic products requested by the selection workflow.",
        "properties": {
          "method": {
            "const": "dem_only",
            "default": "dem_only",
            "description": "Hydrologic product generation method.",
            "examples": [
              "dem_only"
            ],
            "title": "Method",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "flow_algorithm": {
            "const": "d8",
            "default": "d8",
            "description": "Flow routing algorithm used by existing spatial products.",
            "examples": [
              "d8"
            ],
            "title": "Flow Algorithm",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "hydrologic_conditioning": {
            "default": "existing_default",
            "description": "DEM conditioning strategy forwarded to existing flow products.",
            "enum": [
              "existing_default",
              "fill",
              "breach"
            ],
            "examples": [
              "existing_default"
            ],
            "title": "Hydrologic Conditioning",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "network_threshold_area_km2": {
            "default": 1.0,
            "description": "Contributing-area threshold used to extract the stream network.",
            "examples": [
              1.0
            ],
            "exclusiveMinimum": 0,
            "title": "Network Threshold Area Km2",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "compute_strahler": {
            "default": true,
            "description": "Request Strahler diagnostics if existing spatial primitives support them.",
            "examples": [
              true
            ],
            "title": "Compute Strahler",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "HydrologyConfig",
        "type": "object"
      },
      "HydrometryConfig": {
        "additionalProperties": false,
        "description": "Top-level hydrometry configuration.\n\nThe section groups hydrometric sources and the optional simulation date\nwindow inherited from ``BaseVariableConfig``. Loaded data is stored as\nstation time series for calibration, boundary checks, or reporting.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/HydrometrySourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "HydrometryConfig",
        "type": "object"
      },
      "HydrometrySourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one hydrometry data source.\n\nHydrometry sources load river discharge or stage time series. Use\n``custom`` for local station files and ``hubeau`` for the French Hub'Eau\nhydrometry API. Station filters, spatial masks, and units are declared at\nsource level.",
        "properties": {
          "fallback_search_radius_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Maximum search radius (km) used to find a fallback station when no observation is available inside the requested bbox.",
            "title": "Fallback Search Radius Km",
            "x-hmp-profile": "dev"
          },
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user files, 'hubeau' for Hub'Eau API.",
            "enum": [
              "custom",
              "hubeau"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "product": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Hub'Eau variable code (e.g. 'QmnJ', 'QmM', 'HmnJ').",
            "title": "Product",
            "x-hmp-profile": "user"
          },
          "require_observations": {
            "default": true,
            "description": "Only keep stations that have observations in the period.",
            "examples": [
              true
            ],
            "title": "Require Observations",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "max_stations": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Maximum number of Hub'Eau stations to download after discovery. Useful for fast preview runs over a larger territory.",
            "title": "Max Stations",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "source"
        ],
        "title": "HydrometrySourceConfig",
        "type": "object"
      },
      "IgnGeoplateformeDemSource": {
        "additionalProperties": false,
        "description": "Recommended IGN DEM source assembled from Geoplateforme archives.",
        "properties": {
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "SHP/GPKG/GeoJSON mask for spatial filtering/clipping.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Use project extent for bbox-based data retrieval.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore cache and re-download from API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "departments": {
            "description": "Optional French department codes to fetch. When set, these codes constrain archive downloads instead of inferring departments only from the bbox.",
            "items": {
              "type": "string"
            },
            "title": "Departments",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "country": {
            "default": "FR",
            "description": "Country code used for administrative DEM selectors.",
            "examples": [
              "FR"
            ],
            "title": "Country",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "regions": {
            "description": "Optional French administrative regions used to infer department downloads.",
            "items": {
              "type": "string"
            },
            "title": "Regions",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "source": {
            "const": "ign_geoplateforme_dem",
            "default": "ign_geoplateforme_dem",
            "description": "Discriminator tag selecting the IGN Geoplateforme DEM provider.",
            "examples": [
              "ign_geoplateforme_dem"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "dataset": {
            "const": "bd-alti",
            "default": "bd-alti",
            "description": "IGN DEM product assembled by the data manager. Only BD ALTI 25 m is currently exposed as an assembled raster source; use the download_dem_fr helper to inspect raw RGE ALTI archives.",
            "examples": [
              "bd-alti"
            ],
            "title": "Dataset",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "resolution_m": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Requested DEM resolution in metres. Defaults are resolved by the manager from the selected dataset.",
            "title": "Resolution M",
            "x-hmp-profile": "user"
          },
          "file_format": {
            "default": "ASC",
            "description": "Requested archive payload format when exposed by Geoplateforme.",
            "examples": [
              "ASC"
            ],
            "title": "File Format",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "crs": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional CRS filter forwarded to Geoplateforme discovery.",
            "title": "Crs",
            "x-hmp-profile": "user"
          }
        },
        "title": "IgnGeoplateformeDemSource",
        "type": "object"
      },
      "InfluenceCriteriaConfig": {
        "additionalProperties": false,
        "description": "Known-influence checks for observation-led campaigns.",
        "properties": {
          "mode": {
            "default": "report_only",
            "enum": [
              "hard_reject",
              "warning",
              "score",
              "stratify",
              "report_only"
            ],
            "examples": [
              "hard_reject"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "reject_major_dam_upstream": {
            "default": false,
            "examples": [
              false
            ],
            "title": "Reject Major Dam Upstream",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "reject_major_withdrawal_upstream": {
            "default": false,
            "examples": [
              false
            ],
            "title": "Reject Major Withdrawal Upstream",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "reject_major_regulated_reach": {
            "default": false,
            "examples": [
              false
            ],
            "title": "Reject Major Regulated Reach",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "influence_search_radius_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Influence Search Radius Km",
            "x-hmp-profile": "user"
          },
          "layers": {
            "description": "Optional vector layers used to compute influence flags automatically.",
            "items": {
              "$ref": "#/components/schemas/InfluenceLayerConfig"
            },
            "title": "Layers",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "title": "InfluenceCriteriaConfig",
        "type": "object"
      },
      "InfluenceLayerConfig": {
        "additionalProperties": false,
        "description": "Vector layer used to compute anthropic-influence evidence.",
        "properties": {
          "name": {
            "description": "Human-readable influence layer name.",
            "examples": [
              "example"
            ],
            "minLength": 1,
            "title": "Name",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "description": "Vector file containing influence features.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "influence_type": {
            "description": "Normalized influence flag filled when features match a basin.",
            "enum": [
              "major_dam_upstream",
              "major_withdrawal_upstream",
              "major_regulated_reach"
            ],
            "examples": [
              "major_dam_upstream"
            ],
            "title": "Influence Type",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "id_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source-feature identifier field.",
            "title": "Id Field",
            "x-hmp-profile": "user"
          },
          "label_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source-feature label field.",
            "title": "Label Field",
            "x-hmp-profile": "user"
          },
          "severity_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional field used to classify major features.",
            "title": "Severity Field",
            "x-hmp-profile": "user"
          },
          "major_values": {
            "description": "Values considered major in severity_field. When empty, every matched feature is considered major.",
            "items": {
              "type": "string"
            },
            "title": "Major Values",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "name",
          "path",
          "influence_type"
        ],
        "title": "InfluenceLayerConfig",
        "type": "object"
      },
      "IntermittencyConfig": {
        "additionalProperties": false,
        "description": "Top-level intermittency configuration.\n\nThe section groups flow-state observation sources and an optional date\nwindow. Loaded data can be used to compare simulated drying or active\nstream behavior against observed intermittency states.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/IntermittencySourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "IntermittencyConfig",
        "type": "object"
      },
      "IntermittencySourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one intermittency data source.\n\nIntermittency sources load stream flow-state observations from local files\nor from the Hub'Eau ONDE API. The source can restrict stations by id,\ndepartment code, project extent, or a spatial mask.",
        "properties": {
          "fallback_search_radius_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Maximum search radius (km) used to find a fallback station when no observation is available inside the requested bbox.",
            "title": "Fallback Search Radius Km",
            "x-hmp-profile": "dev"
          },
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user files, 'hubeau' for Hub'Eau stream-flow API.",
            "enum": [
              "custom",
              "hubeau"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "code_departement": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "INSEE department codes to filter Hub'Eau station discovery.",
            "title": "Code Departement",
            "x-hmp-profile": "user"
          },
          "require_observations": {
            "default": true,
            "description": "Only keep stations that have observations in the period.",
            "examples": [
              true
            ],
            "title": "Require Observations",
            "type": "boolean",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "source"
        ],
        "title": "IntermittencySourceConfig",
        "type": "object"
      },
      "LinearTopography": {
        "additionalProperties": false,
        "description": "Linear analytical topography rising from right to left.",
        "properties": {
          "kind": {
            "const": "linear",
            "default": "linear",
            "description": "Analytical topography law: 'linear' increases from right to left.",
            "examples": [
              "linear"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "base_elevation": {
            "default": 20.0,
            "description": "Reference elevation (m) on the right boundary.",
            "examples": [
              20.0
            ],
            "title": "Base Elevation",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "right_to_left_amplitude": {
            "default": 0.0,
            "description": "Additional elevation reached on the left boundary relative to the right boundary. Positive values make the surface rise from right to left.",
            "examples": [
              0.0
            ],
            "title": "Right To Left Amplitude",
            "type": "number",
            "x-hmp-profile": "dev"
          }
        },
        "title": "LinearTopography",
        "type": "object"
      },
      "LmtConfig": {
        "additionalProperties": false,
        "description": "LMT package settings.",
        "properties": {
          "output_file_name": {
            "default": "mt3d_link.ftl",
            "description": "LMT output filename used to couple MODFLOW to MT3DMS.",
            "examples": [
              "mt3d_link.ftl"
            ],
            "title": "Output File Name",
            "type": "string",
            "x-hmp-profile": "expert"
          },
          "extension": {
            "default": "lmt8",
            "description": "LMT package filename extension.",
            "examples": [
              "lmt8"
            ],
            "title": "Extension",
            "type": "string",
            "x-hmp-profile": "expert"
          },
          "output_format": {
            "default": "unformatted",
            "description": "LMT file format (typically 'formatted' or 'unformatted').",
            "examples": [
              "unformatted"
            ],
            "title": "Output Format",
            "type": "string",
            "x-hmp-profile": "expert"
          }
        },
        "title": "LmtConfig",
        "type": "object"
      },
      "MapContextConfig": {
        "additionalProperties": false,
        "description": "Optional static context layers for review figures.",
        "properties": {
          "layers": {
            "description": "Context vector layers drawn behind selection artifacts.",
            "items": {
              "$ref": "#/components/schemas/MapContextLayerConfig"
            },
            "title": "Layers",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "title": "MapContextConfig",
        "type": "object"
      },
      "MapContextLayerConfig": {
        "additionalProperties": false,
        "description": "Optional layer shown only on site-selection review maps.",
        "properties": {
          "name": {
            "description": "Human-readable layer name used in the map/report manifest.",
            "examples": [
              "example"
            ],
            "minLength": 1,
            "title": "Name",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "description": "GeoJSON file used as static map context.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "role": {
            "default": "other",
            "description": "Visual role controlling the default map style.",
            "enum": [
              "territory",
              "hydrography",
              "geology",
              "other"
            ],
            "examples": [
              "territory"
            ],
            "title": "Role",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "label_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional feature-property field used for future labels.",
            "title": "Label Field",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "name",
          "path"
        ],
        "title": "MapContextLayerConfig",
        "type": "object"
      },
      "MeshCatchmentConfig": {
        "additionalProperties": false,
        "description": "Top-level launcher contract for one mono-catchment meshing run.",
        "properties": {
          "constraints_mode": {
            "default": "geology_rivers",
            "description": "Meshing compliance target. 'geology_only' conforms the mesh to geology interfaces only, 'rivers_only' conforms the mesh to river traces only, and 'geology_rivers' enforces both sets of constraints in one mesh.",
            "enum": [
              "geology_only",
              "rivers_only",
              "geology_rivers"
            ],
            "examples": [
              "geology_only"
            ],
            "title": "Constraints Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "output_mesh": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional `.msh` output path for the generated planar mesh. When omitted, the launcher writes the mesh to `results_stable/mesh/mesh_catchment.msh` inside the active catchment workspace in standard layout, or directly to `workspace.project_root/mesh_catchment.msh` when `output_layout='flat'` is used.",
            "title": "Output Mesh",
            "x-hmp-profile": "dev"
          },
          "output_summary_json": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional JSON sidecar path for QA metrics, cleaned-input diagnostics, and summary metadata describing the generated mesh. When omitted, the launcher writes it next to the default mesh output.",
            "title": "Output Summary Json",
            "x-hmp-profile": "dev"
          },
          "output_figure": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional overview figure path. Use it when you want a quick visual QA artifact showing the support domain, geology zones, river constraints, and final mesh footprint.",
            "title": "Output Figure",
            "x-hmp-profile": "dev"
          },
          "output_figure_regional": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional regional overview figure path. When omitted but output_figure is set, the launcher writes a second figure next to the main one with suffix `_regional` to show where the catchment sits on the full DEM.",
            "title": "Output Figure Regional",
            "x-hmp-profile": "dev"
          },
          "figures_enabled": {
            "default": true,
            "description": "If true, generate the overview figure artifacts when figure output paths are configured. Set it to false to skip figure creation entirely, even in batch mode where default filename patterns are present.",
            "examples": [
              true
            ],
            "title": "Figures Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "export_exchange_bundle": {
            "default": true,
            "description": "If true, export the solver-exchange mesh bundle next to the generated mesh. Set it to false for profiling or mesh-only runs that do not need bundle metadata. Downstream solvers that require runtime mesh support may fail without this bundle.",
            "examples": [
              true
            ],
            "title": "Export Exchange Bundle",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "figure_dpi": {
            "default": 300,
            "description": "Pixel density used when rendering the main mesh overview figure. Increase it when you need to inspect mesh edges and constraints more closely in the saved PNG.",
            "examples": [
              300
            ],
            "exclusiveMinimum": 0,
            "title": "Figure Dpi",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "figure_regional_dpi": {
            "default": 220,
            "description": "Pixel density used when rendering the regional overview figure. Keep it lower than figure_dpi when you want detailed local mesh inspection without making the regional PNG too heavy.",
            "examples": [
              220
            ],
            "exclusiveMinimum": 0,
            "title": "Figure Regional Dpi",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "output_layout": {
            "default": "standard",
            "description": "Dedicated-launcher output layout. Use 'standard' to keep final mesh artifacts under `results_stable/mesh/`, or 'flat' to write final mesh artifacts directly under `workspace.project_root` while keeping intermediate runtime folders out of that final directory.",
            "enum": [
              "standard",
              "flat"
            ],
            "examples": [
              "standard"
            ],
            "title": "Output Layout",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "show_plot": {
            "default": false,
            "description": "If true, open the generated overview figure interactively at the end of the run. Keep it false for batch or headless execution.",
            "examples": [
              false
            ],
            "title": "Show Plot",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "geographic_outputs_mode": {
            "default": "keep",
            "description": "Control what happens to intermediate geographic preprocessing artifacts after the mesh run. Use 'keep' to preserve the canonical `results_stable/geographic` and `results_stable/demcorrecflow` folders, or 'cleanup' to delete them at the end of the dedicated mesh launcher once the mesh outputs and exchange bundle have been written.",
            "enum": [
              "keep",
              "cleanup"
            ],
            "examples": [
              "keep"
            ],
            "title": "Geographic Outputs Mode",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "rivers": {
            "$ref": "#/components/schemas/MeshCatchmentRiversConfig",
            "description": "River-constraint section used when constraints_mode includes rivers. The default behavior is to reuse the in-memory river trace already built by the geographic pipeline.",
            "x-hmp-profile": "user"
          },
          "geology": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional geology support used when constraints_mode includes geology. This section defines which polygon source represents lithological zones and how those polygons should be interpreted before conformal meshing. Validated through the geology data-source Protocol; stored as a normalized mapping.",
            "title": "Geology",
            "x-hmp-profile": "user"
          },
          "watershed_boundary": {
            "$ref": "#/components/schemas/MeshCatchmentWatershedBoundaryConfig",
            "description": "Optional watershed-boundary mesh constraint. Enable it to force a conformal mesh line along the catchment boundary while keeping the geology zonation represented on the whole support domain.",
            "x-hmp-profile": "user"
          },
          "hydraulic_properties": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeshCatchmentHydraulicPropertiesConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional hydraulic-property tables keyed by geology zones. The launcher projects geology on the mesh and exports per-cell conductivity/storage values as weighted averages of geology fractions.",
            "x-hmp-profile": "user"
          },
          "domain": {
            "description": "Effective support domain to mesh. The default `geographic_box_buffer` mode reuses the catchment bounding box plus geographic buffer prepared during delineation, which is usually the right support for mono-catchment meshing.",
            "discriminator": {
              "mapping": {
                "bbox": "#/$defs/ZoneMeshingDomainBBox",
                "geographic_box_buffer": "#/$defs/ZoneMeshingDomainGeographicBoxBuffer",
                "geographic_watershed": "#/$defs/ZoneMeshingDomainGeographicWatershed",
                "geographic_watershed_box": "#/$defs/ZoneMeshingDomainGeographicWatershedBox",
                "polygon": "#/$defs/ZoneMeshingDomainPolygon",
                "vector": "#/$defs/ZoneMeshingDomainVector"
              },
              "propertyName": "kind"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/ZoneMeshingDomainBBox"
              },
              {
                "$ref": "#/components/schemas/ZoneMeshingDomainPolygon"
              },
              {
                "$ref": "#/components/schemas/ZoneMeshingDomainVector"
              },
              {
                "$ref": "#/components/schemas/ZoneMeshingDomainGeographicBoxBuffer"
              },
              {
                "$ref": "#/components/schemas/ZoneMeshingDomainGeographicWatershed"
              },
              {
                "$ref": "#/components/schemas/ZoneMeshingDomainGeographicWatershedBox"
              }
            ],
            "title": "Domain",
            "x-hmp-profile": "user"
          },
          "zone_meshing": {
            "$ref": "#/components/schemas/ZoneMeshingSettings",
            "description": "Low-level Gmsh sizing and cleanup parameters controlling cell size, simplification, and interface refinement. Defaults are valid, but project examples typically override them to target a desired number of cells.",
            "x-hmp-profile": "dev"
          }
        },
        "title": "MeshCatchmentConfig",
        "type": "object"
      },
      "MeshCatchmentHydraulicConductivity": {
        "additionalProperties": false,
        "description": "Conductivity mapping exported on mesh cells.",
        "properties": {
          "values_source": {
            "default": "inline",
            "description": "Source of the geology-key to property mapping. Use 'inline' for TOML dictionaries or 'csv' for an external table.",
            "enum": [
              "inline",
              "csv"
            ],
            "examples": [
              "inline"
            ],
            "title": "Values Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "values": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Inline mapping from geology zone key to property value. Keys must match the normalized `zone_key` values exported by the geology loader.",
            "title": "Values",
            "x-hmp-profile": "user"
          },
          "values_csv_file": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "CSV file used when values_source='csv'. Relative paths are resolved from the launcher TOML directory.",
            "title": "Values Csv File",
            "x-hmp-profile": "dev"
          },
          "csv_key_column": {
            "default": "zone_key",
            "description": "CSV column containing geology zone keys.",
            "examples": [
              "zone_key"
            ],
            "title": "Csv Key Column",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "csv_value_column": {
            "default": "value",
            "description": "CSV column containing numeric property values.",
            "examples": [
              "value"
            ],
            "title": "Csv Value Column",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_value": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Fallback value applied when one geology zone has no explicit mapping. Leave empty to keep exported cell values undefined for unmapped zones.",
            "title": "Default Value",
            "x-hmp-profile": "user"
          },
          "unit": {
            "default": "m/s",
            "description": "Input unit used by conductivity values. Exported bundle values are always converted to `m/s`.",
            "examples": [
              "m/s"
            ],
            "minLength": 1,
            "title": "Unit",
            "type": "string",
            "x-hmp-profile": "dev"
          }
        },
        "title": "MeshCatchmentHydraulicConductivity",
        "type": "object"
      },
      "MeshCatchmentHydraulicPropertiesConfig": {
        "additionalProperties": false,
        "description": "Optional hydraulic properties derived from the geology zonation.",
        "properties": {
          "conductivity": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeshCatchmentHydraulicConductivity"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional hydraulic-conductivity mapping by geology key. When provided, the bundle exports one `hydraulic_conductivity_m_s` value per cell.",
            "x-hmp-profile": "user"
          },
          "storage_coefficient": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeshCatchmentStorageCoefficient"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional storage-coefficient mapping by geology key. When provided, the bundle exports one `storage_coefficient` value per cell.",
            "x-hmp-profile": "user"
          }
        },
        "title": "MeshCatchmentHydraulicPropertiesConfig",
        "type": "object"
      },
      "MeshCatchmentRiversConfig": {
        "additionalProperties": false,
        "description": "River-trace inputs consumed by the conformal mesher.",
        "properties": {
          "source": {
            "default": "geographic_features",
            "description": "Origin of the river constraints used to force mesh edges along the river network. Use 'geographic_features' for the in-memory river trace produced by geographic preprocessing, or 'file' to reload a vector river dataset from disk.",
            "enum": [
              "geographic_features",
              "file"
            ],
            "examples": [
              "geographic_features"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Vector file path used only when source='file'. The path may be absolute or relative to the TOML location and should point to a line dataset describing the river centerlines to honor during meshing.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "clip_to_domain": {
            "default": true,
            "description": "If true, clip the river trace to the effective meshing support before sending it to Gmsh. Keep this enabled in most workflows to avoid constraining the mesh with segments that lie outside the chosen domain or scope.",
            "examples": [
              true
            ],
            "title": "Clip To Domain",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "min_segment_length": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "properties": {
                  "magnitude": {
                    "title": "Magnitude",
                    "type": "string"
                  },
                  "units": {
                    "title": "Units",
                    "type": "string"
                  }
                },
                "required": [
                  "magnitude"
                ],
                "type": "object"
              }
            ],
            "default": 0.0,
            "description": "Minimum retained river segment length, in projected metres after reprojection. Use this to discard tiny residual segments created by clipping or noisy hydrography that would only add mesh complexity without hydraulic meaning.",
            "examples": [
              0.0
            ],
            "title": "Min Segment Length",
            "x-hmp-profile": "user"
          },
          "snap_tolerance": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "properties": {
                  "magnitude": {
                    "title": "Magnitude",
                    "type": "string"
                  },
                  "units": {
                    "title": "Units",
                    "type": "string"
                  }
                },
                "required": [
                  "magnitude"
                ],
                "type": "object"
              }
            ],
            "default": 0.0,
            "description": "Reserved snapping tolerance, in projected metres, for possible future cleanup of nearly coincident river vertices. The current workflow stores the value in the launcher contract but does not apply an additional snapping pass.",
            "examples": [
              0.0
            ],
            "title": "Snap Tolerance",
            "x-hmp-profile": "user"
          }
        },
        "title": "MeshCatchmentRiversConfig",
        "type": "object"
      },
      "MeshCatchmentStorageCoefficient": {
        "additionalProperties": false,
        "description": "Storage-coefficient mapping exported on mesh cells.",
        "properties": {
          "values_source": {
            "default": "inline",
            "description": "Source of the geology-key to property mapping. Use 'inline' for TOML dictionaries or 'csv' for an external table.",
            "enum": [
              "inline",
              "csv"
            ],
            "examples": [
              "inline"
            ],
            "title": "Values Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "values": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Inline mapping from geology zone key to property value. Keys must match the normalized `zone_key` values exported by the geology loader.",
            "title": "Values",
            "x-hmp-profile": "user"
          },
          "values_csv_file": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "CSV file used when values_source='csv'. Relative paths are resolved from the launcher TOML directory.",
            "title": "Values Csv File",
            "x-hmp-profile": "dev"
          },
          "csv_key_column": {
            "default": "zone_key",
            "description": "CSV column containing geology zone keys.",
            "examples": [
              "zone_key"
            ],
            "title": "Csv Key Column",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "csv_value_column": {
            "default": "value",
            "description": "CSV column containing numeric property values.",
            "examples": [
              "value"
            ],
            "title": "Csv Value Column",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_value": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Fallback value applied when one geology zone has no explicit mapping. Leave empty to keep exported cell values undefined for unmapped zones.",
            "title": "Default Value",
            "x-hmp-profile": "user"
          }
        },
        "title": "MeshCatchmentStorageCoefficient",
        "type": "object"
      },
      "MeshCatchmentWatershedBoundaryConfig": {
        "additionalProperties": false,
        "description": "Optional watershed-boundary mesh constraint.",
        "properties": {
          "enabled": {
            "default": false,
            "description": "If true, inject the watershed boundary as one dedicated linear constraint in addition to geology and/or river constraints.",
            "examples": [
              false
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "boundary_refinement_distance": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "properties": {
                      "magnitude": {
                        "title": "Magnitude",
                        "type": "string"
                      },
                      "units": {
                        "title": "Units",
                        "type": "string"
                      }
                    },
                    "required": [
                      "magnitude"
                    ],
                    "type": "object"
                  }
                ],
                "ge": 0.0
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional influence distance, in projected metres, used for the watershed-boundary refinement family. When omitted, the mesher derives one conservative distance from the boundary extent.",
            "title": "Boundary Refinement Distance",
            "x-hmp-profile": "dev"
          },
          "smoothing": {
            "$ref": "#/components/schemas/MeshCatchmentWatershedBoundarySmoothingConfig",
            "description": "Optional regularization controls applied before the watershed boundary is converted to a linear constraint.",
            "x-hmp-profile": "user"
          },
          "outside_coarsening": {
            "$ref": "#/components/schemas/MeshCatchmentWatershedOutsideCoarseningConfig",
            "description": "Optional coarse-background size field applied outside the regularized watershed while keeping the geology partition unchanged.",
            "x-hmp-profile": "user"
          },
          "geology_conformity": {
            "$ref": "#/components/schemas/MeshCatchmentWatershedGeologyConformityConfig",
            "description": "Optional control of where geology remains conformal relative to the watershed. Keep the default full_domain mode to preserve the current behavior.",
            "x-hmp-profile": "user"
          }
        },
        "title": "MeshCatchmentWatershedBoundaryConfig",
        "type": "object"
      },
      "MeshCatchmentWatershedBoundarySmoothingConfig": {
        "additionalProperties": false,
        "description": "Optional smoothing controls for the watershed-boundary constraint.",
        "properties": {
          "enabled": {
            "default": false,
            "description": "If true, apply the smoothing controls below before converting the watershed boundary into one linear constraint.",
            "examples": [
              false
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "distance": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "properties": {
                      "magnitude": {
                        "title": "Magnitude",
                        "type": "string"
                      },
                      "units": {
                        "title": "Units",
                        "type": "string"
                      }
                    },
                    "required": [
                      "magnitude"
                    ],
                    "type": "object"
                  }
                ],
                "ge": 0.0
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional regularization tolerance, in projected metres, used to simplify the watershed boundary at roughly the target internal mesh scale before it is injected as a linear mesh constraint. When omitted, the mesher reuses zone_meshing.global_size.",
            "title": "Distance",
            "x-hmp-profile": "dev"
          },
          "river_buffer_distance": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "properties": {
                      "magnitude": {
                        "title": "Magnitude",
                        "type": "string"
                      },
                      "units": {
                        "title": "Units",
                        "type": "string"
                      }
                    },
                    "required": [
                      "magnitude"
                    ],
                    "type": "object"
                  }
                ],
                "ge": 0.0
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional protective buffer around river traces, in projected metres, merged into the boundary-support polygon before smoothing so the final watershed boundary stays slightly outside river corridors near the basin edge.",
            "title": "River Buffer Distance",
            "x-hmp-profile": "dev"
          },
          "outer_bias_distance": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "properties": {
                      "magnitude": {
                        "title": "Magnitude",
                        "type": "string"
                      },
                      "units": {
                        "title": "Units",
                        "type": "string"
                      }
                    },
                    "required": [
                      "magnitude"
                    ],
                    "type": "object"
                  }
                ],
                "ge": 0.0
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional outward bias, in projected metres, applied after smoothing so the final watershed boundary remains slightly englobing instead of cutting back toward the raw catchment contour.",
            "title": "Outer Bias Distance",
            "x-hmp-profile": "dev"
          }
        },
        "title": "MeshCatchmentWatershedBoundarySmoothingConfig",
        "type": "object"
      },
      "MeshCatchmentWatershedGeologyConformityConfig": {
        "additionalProperties": false,
        "description": "Optional control of where geology remains conformal around the watershed.",
        "properties": {
          "mode": {
            "default": "full_domain",
            "description": "Control where geology remains conformal. Use 'full_domain' to keep the current behavior, or 'buffered_watershed_envelope' to keep geology interfaces active only inside one buffered envelope around the regularized watershed, without creating one strict partition boundary on that envelope.",
            "enum": [
              "full_domain",
              "buffered_watershed_envelope"
            ],
            "examples": [
              "full_domain"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "buffer_distance": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "properties": {
                      "magnitude": {
                        "title": "Magnitude",
                        "type": "string"
                      },
                      "units": {
                        "title": "Units",
                        "type": "string"
                      }
                    },
                    "required": [
                      "magnitude"
                    ],
                    "type": "object"
                  }
                ],
                "ge": 0.0
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional outward buffer, in projected metres, added around the regularized watershed before selecting where geology interfaces remain active. When omitted in buffered_watershed_envelope mode, the mesher reuses zone_meshing.global_size.",
            "title": "Buffer Distance",
            "x-hmp-profile": "dev"
          }
        },
        "title": "MeshCatchmentWatershedGeologyConformityConfig",
        "type": "object"
      },
      "MeshCatchmentWatershedOutsideCoarseningConfig": {
        "additionalProperties": false,
        "description": "Optional coarse-background size controls outside the watershed.",
        "properties": {
          "enabled": {
            "default": false,
            "description": "If true, add one regional mesh-size field that keeps the current background size inside the watershed and coarsens the mesh outside it.",
            "examples": [
              false
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "size_factor": {
            "default": 2.0,
            "description": "Multiplicative factor applied to zone_meshing.global_size outside the watershed. Use 2.0 for an outside background roughly twice as coarse as the internal baseline.",
            "examples": [
              2.0
            ],
            "minimum": 1.0,
            "title": "Size Factor",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "transition_distance": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "properties": {
                      "magnitude": {
                        "title": "Magnitude",
                        "type": "string"
                      },
                      "units": {
                        "title": "Units",
                        "type": "string"
                      }
                    },
                    "required": [
                      "magnitude"
                    ],
                    "type": "object"
                  }
                ],
                "ge": 0.0
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional transition width, in projected metres, used to ramp from the internal background size to the coarser outside size away from the watershed boundary.",
            "title": "Transition Distance",
            "x-hmp-profile": "dev"
          },
          "grid_resolution": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "properties": {
                      "magnitude": {
                        "title": "Magnitude",
                        "type": "string"
                      },
                      "units": {
                        "title": "Units",
                        "type": "string"
                      }
                    },
                    "required": [
                      "magnitude"
                    ],
                    "type": "object"
                  }
                ],
                "gt": 0.0
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional structured-grid resolution, in projected metres, used to discretize the outside coarsening field. When omitted, the mesher reuses zone_meshing.global_size.",
            "title": "Grid Resolution",
            "x-hmp-profile": "dev"
          }
        },
        "title": "MeshCatchmentWatershedOutsideCoarseningConfig",
        "type": "object"
      },
      "MeshInputConfig": {
        "additionalProperties": false,
        "description": "External pre-existing mesh declared in ``[mesh_input]``.\n\nEither ``mesh_path`` or ``bundle_dir`` must be provided. Paths are stored\nas ``Path`` instances; relative paths are resolved by the call site (the\nsimulation launcher resolves them against the TOML directory).",
        "properties": {
          "mesh_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Path to the external planar mesh file (typically a ``.msh``). Required when ``bundle_dir`` is not provided. Relative paths are resolved against the TOML directory.",
            "title": "Mesh Path",
            "x-hmp-profile": "user"
          },
          "bundle_dir": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Path to the solver-exchange mesh bundle directory associated with the external mesh. Required when ``mesh_path`` is not provided. Relative paths are resolved against the TOML directory.",
            "title": "Bundle Dir",
            "x-hmp-profile": "user"
          }
        },
        "title": "MeshInputConfig",
        "type": "object"
      },
      "MeshProcessConfig": {
        "additionalProperties": false,
        "description": "``[[simulation.process]]`` entry for a mesh orchestration process.",
        "properties": {
          "id": {
            "description": "User-facing identifier for the process. This id is required and must be unique within the simulation.",
            "examples": [
              "flow_main"
            ],
            "pattern": "^[a-z][a-z0-9_]*$",
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "type": {
            "const": "mesh",
            "default": "mesh",
            "description": "Discriminator selecting the 'mesh' orchestration family.",
            "examples": [
              "mesh"
            ],
            "title": "Type",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "backend": {
            "const": "catchment",
            "default": "catchment",
            "description": "Backend used by the mesh process. Currently only 'catchment' is supported (delegates to the [mesh_catchment] runtime).",
            "examples": [
              "catchment"
            ],
            "title": "Backend",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "solvers": {
            "description": "Reserved for future use. Mesh processes must not declare solvers; set 'backend' instead.",
            "items": {
              "type": "string"
            },
            "maxItems": 0,
            "title": "Solvers",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "id"
        ],
        "title": "MeshProcessConfig",
        "type": "object"
      },
      "Modflow6Backend": {
        "additionalProperties": false,
        "description": "Select the MODFLOW 6 flow backend.",
        "properties": {
          "backend": {
            "const": "modflow6",
            "default": "modflow6",
            "description": "Discriminator tag selecting the MODFLOW 6 flow backend.",
            "examples": [
              "modflow6"
            ],
            "title": "Backend",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "Modflow6Backend",
        "type": "object"
      },
      "Modflow6Config": {
        "additionalProperties": false,
        "description": "Expert-level MODFLOW 6 configuration organized by concern.",
        "properties": {
          "runtime": {
            "$ref": "#/components/schemas/Modflow6RuntimeConfig",
            "description": "MODFLOW 6 runtime options.",
            "x-hmp-profile": "expert"
          },
          "process_specific": {
            "$ref": "#/components/schemas/Modflow6ProcessSpecificConfig",
            "description": "Process-specific controls for MODFLOW 6 flow packages.",
            "x-hmp-profile": "expert"
          },
          "sgrid": {
            "$ref": "#/components/schemas/SolverSGridConfig",
            "description": "Solver-grid payload split into planar and vertical sections.",
            "x-hmp-profile": "user"
          },
          "tgrid": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TMeshConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional temporal discretization payload as TMeshConfig. In launcher mode, stress periods are driven by [simulation.time]; steady/transient policy is driven by [flow].flow_regime and [flow].first_period_steady.",
            "x-hmp-profile": "user"
          }
        },
        "title": "Modflow6Config",
        "type": "object"
      },
      "Modflow6ProcessSpecificConfig": {
        "additionalProperties": false,
        "description": "Process-specific parameters used by selected MODFLOW 6 packages.",
        "properties": {
          "vka": {
            "default": 1.0,
            "description": "Vertical anisotropy factor used to derive k33 from k.",
            "examples": [
              1.0
            ],
            "title": "Vka",
            "type": "number",
            "x-hmp-profile": "expert"
          },
          "evt_extinction_depth": {
            "default": 1.0,
            "description": "MF6 EVT extinction depth in meters when recharge negatives are routed to EVT.",
            "examples": [
              1.0
            ],
            "exclusiveMinimum": 0.0,
            "title": "Evt Extinction Depth",
            "type": "number",
            "x-hmp-profile": "expert"
          }
        },
        "title": "Modflow6ProcessSpecificConfig",
        "type": "object"
      },
      "Modflow6PrtParametersConfig": {
        "additionalProperties": false,
        "description": "Configuration payload for MODFLOW 6 PRT particle tracking.",
        "properties": {
          "release_zone": {
            "default": "domain",
            "description": "Particle release selector: 'domain', 'domain_nonriver', 'upstream', 'upstream_nonriver', 'river', 'outlet', or 'custom'.",
            "examples": [
              "domain"
            ],
            "title": "Release Zone",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "upstream_top_quantile": {
            "default": 0.9,
            "description": "Top-elevation quantile used by upstream release zones. A value of 0.90 selects cells in the highest 10 percent of active cell-top elevations.",
            "examples": [
              0.9
            ],
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Upstream Top Quantile",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "outlet_bottom_quantile": {
            "default": 0.1,
            "description": "Bottom-elevation quantile used by the 'outlet' release zone. A value of 0.10 selects cells in the lowest 10 percent of active cell-top elevations.",
            "examples": [
              0.1
            ],
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Outlet Bottom Quantile",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "track_dir": {
            "const": "forward",
            "default": "forward",
            "description": "Particle tracking direction. MF6 PRT support is currently forward only.",
            "examples": [
              "forward"
            ],
            "title": "Track Dir",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "porosity": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional uniform particle-tracking porosity. When omitted, the flow model specific yield is used where positive.",
            "title": "Porosity",
            "x-hmp-profile": "dev"
          },
          "local_z": {
            "default": 0.5,
            "description": "Local vertical release coordinate within the cell.",
            "examples": [
              0.5
            ],
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Local Z",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "particle_cell_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "integer"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional zero-based DISV cell2d ids for explicit particle release. Used when release_zone is 'custom'.",
            "title": "Particle Cell Ids",
            "x-hmp-profile": "dev"
          },
          "max_particles": {
            "anyOf": [
              {
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional maximum number of release cells after zone selection.",
            "title": "Max Particles",
            "x-hmp-profile": "dev"
          },
          "sel_slice": {
            "anyOf": [
              {
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional deterministic slicing step for selected release cells.",
            "title": "Sel Slice",
            "x-hmp-profile": "dev"
          },
          "release_times_days": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional particle release times in model time units. Existing MODFLOW 6 models in HydroModPy use days.",
            "title": "Release Times Days",
            "x-hmp-profile": "dev"
          },
          "track_times_days": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional user tracking output times in model time units.",
            "title": "Track Times Days",
            "x-hmp-profile": "dev"
          },
          "track_time_step_days": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional regular spacing, in days, for generated PRT tracking output times. Used only when track_times_days is omitted.",
            "title": "Track Time Step Days",
            "x-hmp-profile": "dev"
          },
          "stop_time_days": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional absolute particle stop time in model time units.",
            "title": "Stop Time Days",
            "x-hmp-profile": "dev"
          },
          "stop_travel_time_days": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional maximum particle travel time in model time units.",
            "title": "Stop Travel Time Days",
            "x-hmp-profile": "dev"
          },
          "extend_tracking": {
            "default": true,
            "description": "Track particles beyond the final flow time step when MF6 permits it.",
            "examples": [
              true
            ],
            "title": "Extend Tracking",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "dry_tracking_method": {
            "default": "drop",
            "description": "MF6 PRT behavior for dry-but-active cells.",
            "enum": [
              "drop",
              "stop",
              "stay"
            ],
            "examples": [
              "drop"
            ],
            "title": "Dry Tracking Method",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "exit_solve_tolerance": {
            "default": 1e-10,
            "description": "PRT generalized Pollock exit solve tolerance.",
            "examples": [
              1e-10
            ],
            "exclusiveMinimum": 0.0,
            "title": "Exit Solve Tolerance",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "write_track_csv": {
            "default": true,
            "description": "Write the PRT track CSV file used by the HydroModPy extractor.",
            "examples": [
              true
            ],
            "title": "Write Track Csv",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "write_track_binary": {
            "default": true,
            "description": "Write the binary PRT track file.",
            "examples": [
              true
            ],
            "title": "Write Track Binary",
            "type": "boolean",
            "x-hmp-profile": "dev"
          }
        },
        "title": "Modflow6PrtParametersConfig",
        "type": "object"
      },
      "Modflow6RuntimeConfig": {
        "additionalProperties": false,
        "description": "Expert runtime settings used to build and solve MODFLOW 6 packages.",
        "properties": {
          "mf6_executable_name": {
            "default": "mf6",
            "description": "MODFLOW 6 executable name or absolute path.",
            "examples": [
              "mf6"
            ],
            "title": "Mf6 Executable Name",
            "type": "string",
            "x-hmp-profile": "expert"
          },
          "mf6_ims_complexity": {
            "default": "COMPLEX",
            "description": "IMS complexity keyword for MODFLOW 6 (e.g. SIMPLE, MODERATE, COMPLEX).",
            "examples": [
              "COMPLEX"
            ],
            "title": "Mf6 Ims Complexity",
            "type": "string",
            "x-hmp-profile": "expert"
          },
          "mf_verbose": {
            "default": false,
            "description": "Enable verbose FloPy logging for MODFLOW 6 setup and execution.",
            "examples": [
              false
            ],
            "title": "Mf Verbose",
            "type": "boolean",
            "x-hmp-profile": "expert"
          },
          "mf6_outer_dvclose": {
            "default": 0.0001,
            "description": "IMS outer-iteration head-change convergence criterion.",
            "examples": [
              0.0001
            ],
            "exclusiveMinimum": 0.0,
            "title": "Mf6 Outer Dvclose",
            "type": "number",
            "x-hmp-profile": "expert"
          },
          "mf6_inner_dvclose": {
            "default": 0.0001,
            "description": "IMS inner-iteration head-change convergence criterion.",
            "examples": [
              0.0001
            ],
            "exclusiveMinimum": 0.0,
            "title": "Mf6 Inner Dvclose",
            "type": "number",
            "x-hmp-profile": "expert"
          },
          "mf6_outer_maximum": {
            "default": 500,
            "description": "Maximum number of IMS outer iterations.",
            "examples": [
              500
            ],
            "exclusiveMinimum": 0,
            "title": "Mf6 Outer Maximum",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "mf6_inner_maximum": {
            "default": 500,
            "description": "Maximum number of IMS inner iterations.",
            "examples": [
              500
            ],
            "exclusiveMinimum": 0,
            "title": "Mf6 Inner Maximum",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "mf6_enable_rewet": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable NPF cell rewetting. When left to None, HydroModPy keeps rewetting disabled unless explicitly enabled.",
            "title": "Mf6 Enable Rewet",
            "x-hmp-profile": "expert"
          },
          "mf6_newton": {
            "default": false,
            "description": "Enable the MODFLOW 6 Newton-Raphson formulation for convertible groundwater cells.",
            "examples": [
              false
            ],
            "title": "Mf6 Newton",
            "type": "boolean",
            "x-hmp-profile": "expert"
          },
          "mf6_newton_under_relaxation": {
            "default": true,
            "description": "Enable MODFLOW 6 Newton under-relaxation when mf6_newton is true.",
            "examples": [
              true
            ],
            "title": "Mf6 Newton Under Relaxation",
            "type": "boolean",
            "x-hmp-profile": "expert"
          },
          "mf6_enable_xt3d": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable MF6 NPF XT3D terms. When left to None, HydroModPy auto-enables XT3D on unstructured solver meshes. This increases computational cost but can improve accuracy on unstructured or non-orthogonal grids.",
            "title": "Mf6 Enable Xt3D",
            "x-hmp-profile": "expert"
          },
          "mf6_rewet_wetfct": {
            "default": 0.1,
            "description": "MF6 NPF rewet WETFCT factor.",
            "examples": [
              0.1
            ],
            "exclusiveMinimum": 0.0,
            "title": "Mf6 Rewet Wetfct",
            "type": "number",
            "x-hmp-profile": "expert"
          },
          "mf6_rewet_iwetit": {
            "default": 1,
            "description": "MF6 NPF rewet IWETIT interval.",
            "examples": [
              1
            ],
            "exclusiveMinimum": 0,
            "title": "Mf6 Rewet Iwetit",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "mf6_rewet_ihdwet": {
            "default": 0,
            "description": "MF6 NPF rewet IHDWET flag.",
            "examples": [
              0
            ],
            "title": "Mf6 Rewet Ihdwet",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "mf6_rewet_wetdry": {
            "default": 0.1,
            "description": "MF6 NPF WETDRY threshold used when rewetting is active.",
            "examples": [
              0.1
            ],
            "exclusiveMinimum": 0.0,
            "title": "Mf6 Rewet Wetdry",
            "type": "number",
            "x-hmp-profile": "expert"
          }
        },
        "title": "Modflow6RuntimeConfig",
        "type": "object"
      },
      "ModflowConfig": {
        "additionalProperties": false,
        "description": "Expert-level MODFLOW configuration organized by concern.",
        "properties": {
          "runtime": {
            "$ref": "#/components/schemas/ModflowRuntimeConfig",
            "description": "MODFLOW runtime package options grouped by package.",
            "x-hmp-profile": "expert"
          },
          "process_specific": {
            "$ref": "#/components/schemas/ModflowProcessSpecificConfig",
            "description": "Process-specific package controls (currently UPW/EVT knobs).",
            "x-hmp-profile": "expert"
          },
          "sgrid": {
            "$ref": "#/components/schemas/SolverSGridConfig",
            "description": "Spatial-grid payload split into `[...sgrid.planar]` and `[...sgrid.vertical]`.",
            "x-hmp-profile": "user"
          },
          "tgrid": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TMeshConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional temporal discretization payload as one validated `TMeshConfig` model. In launcher mode, stress periods are driven by [simulation.time]; steady/transient policy is driven by [flow].flow_regime and [flow].first_period_steady.",
            "x-hmp-profile": "user"
          }
        },
        "title": "ModflowConfig",
        "type": "object"
      },
      "ModflowNwtBackend": {
        "additionalProperties": false,
        "description": "Select the MODFLOW-NWT flow backend.",
        "properties": {
          "backend": {
            "const": "modflow_nwt",
            "default": "modflow_nwt",
            "description": "Discriminator tag selecting the MODFLOW-NWT flow backend.",
            "examples": [
              "modflow_nwt"
            ],
            "title": "Backend",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "ModflowNwtBackend",
        "type": "object"
      },
      "ModflowProcessSpecificConfig": {
        "additionalProperties": false,
        "description": "Process-specific parameters used by selected MODFLOW packages.",
        "properties": {
          "vka": {
            "default": 1.0,
            "description": "Vertical hydraulic conductivity control passed to the UPW package (VKA).",
            "examples": [
              1.0
            ],
            "title": "Vka",
            "type": "number",
            "x-hmp-profile": "expert"
          },
          "exdp": {
            "default": 1.0,
            "description": "Extinction depth (metres) used by the EVT package (EXDP). Accepts inline units, e.g. '1 m', '50 cm'.",
            "examples": [
              1.0
            ],
            "exclusiveMinimum": 0.0,
            "title": "Exdp",
            "type": "number",
            "x-hmp-profile": "expert"
          }
        },
        "title": "ModflowProcessSpecificConfig",
        "type": "object"
      },
      "ModflowRuntimeConfig": {
        "additionalProperties": false,
        "description": "Expert runtime settings grouped by MODFLOW-NWT package.",
        "properties": {
          "nwt": {
            "$ref": "#/components/schemas/NwtSolverConfig",
            "description": "NWT solver and executable settings.",
            "x-hmp-profile": "expert"
          },
          "dis": {
            "$ref": "#/components/schemas/DisConfig",
            "x-hmp-profile": "expert"
          },
          "bas": {
            "$ref": "#/components/schemas/BasConfig",
            "x-hmp-profile": "expert"
          },
          "upw": {
            "$ref": "#/components/schemas/UpwConfig",
            "x-hmp-profile": "expert"
          },
          "evt": {
            "$ref": "#/components/schemas/EvtConfig",
            "x-hmp-profile": "expert"
          },
          "oc": {
            "$ref": "#/components/schemas/OcConfig",
            "x-hmp-profile": "expert"
          },
          "wel": {
            "$ref": "#/components/schemas/WelConfig",
            "x-hmp-profile": "expert"
          },
          "lmt": {
            "$ref": "#/components/schemas/LmtConfig",
            "x-hmp-profile": "expert"
          }
        },
        "title": "ModflowRuntimeConfig",
        "type": "object"
      },
      "ModpathParametersConfig": {
        "additionalProperties": false,
        "description": "Configuration payload for the Modpath transport solver.",
        "properties": {
          "zone_partic": {
            "default": "domain",
            "description": "Particle injection zone selector: 'domain', 'seepage_clip', or a raster path.",
            "examples": [
              "domain"
            ],
            "title": "Zone Partic",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "track_dir": {
            "default": "forward",
            "description": "Particle tracking direction.",
            "enum": [
              "forward",
              "backward",
              "custom"
            ],
            "examples": [
              "forward"
            ],
            "title": "Track Dir",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "bore_depth": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional bore depth list used for vertical particle injection.",
            "title": "Bore Depth",
            "x-hmp-profile": "dev"
          },
          "cell_div": {
            "default": 1,
            "description": "Number of particles per axis in each cell.",
            "examples": [
              1
            ],
            "minimum": 1,
            "title": "Cell Div",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "zloc_div": {
            "default": false,
            "description": "If true, apply vertical subdivision for particle injection.",
            "examples": [
              false
            ],
            "title": "Zloc Div",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "sel_random": {
            "anyOf": [
              {
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional random downsampling count of injected particles.",
            "title": "Sel Random",
            "x-hmp-profile": "dev"
          },
          "sel_slice": {
            "anyOf": [
              {
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional slicing step for injected particles.",
            "title": "Sel Slice",
            "x-hmp-profile": "dev"
          }
        },
        "title": "ModpathParametersConfig",
        "type": "object"
      },
      "NwtSolverConfig": {
        "additionalProperties": false,
        "description": "MODFLOW-NWT solver package settings.",
        "properties": {
          "version": {
            "default": "mfnwt",
            "description": "MODFLOW executable/version identifier passed to FloPy.",
            "examples": [
              "mfnwt"
            ],
            "title": "Version",
            "type": "string",
            "x-hmp-profile": "expert"
          },
          "listunit": {
            "default": 2,
            "description": "Fortran unit number used for the MODFLOW list file.",
            "examples": [
              2
            ],
            "title": "Listunit",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "verbose": {
            "default": false,
            "description": "Enable verbose FloPy logging for model setup.",
            "examples": [
              false
            ],
            "title": "Verbose",
            "type": "boolean",
            "x-hmp-profile": "expert"
          },
          "headtol": {
            "default": 0.0001,
            "description": "Head closure criterion for the NWT nonlinear solver.",
            "examples": [
              0.0001
            ],
            "title": "Headtol",
            "type": "number",
            "x-hmp-profile": "expert"
          },
          "fluxtol": {
            "default": 500.0,
            "description": "Flux closure criterion for the NWT nonlinear solver.",
            "examples": [
              500.0
            ],
            "title": "Fluxtol",
            "type": "number",
            "x-hmp-profile": "expert"
          },
          "maxiterout": {
            "default": 5000,
            "description": "Maximum outer nonlinear iterations in the NWT solver.",
            "examples": [
              5000
            ],
            "title": "Maxiterout",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "thickfact": {
            "default": 1e-05,
            "description": "NWT wetting/thickness factor controlling nonlinear updates.",
            "examples": [
              1e-05
            ],
            "title": "Thickfact",
            "type": "number",
            "x-hmp-profile": "expert"
          },
          "linmeth": {
            "default": 1,
            "description": "Linear solver choice for NWT (see MODFLOW-NWT documentation).",
            "examples": [
              1
            ],
            "title": "Linmeth",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "iprnwt": {
            "default": 1,
            "description": "NWT print flag controlling iteration diagnostics in listing outputs.",
            "examples": [
              1
            ],
            "title": "Iprnwt",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "ibotav": {
            "default": 1,
            "description": "NWT option for averaging saturated thickness at the cell bottom.",
            "examples": [
              1
            ],
            "title": "Ibotav",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "options": {
            "default": "COMPLEX",
            "description": "NWT nonlinear option keyword (for example SIMPLE or COMPLEX).",
            "examples": [
              "COMPLEX"
            ],
            "title": "Options",
            "type": "string",
            "x-hmp-profile": "expert"
          },
          "continue_run": {
            "default": false,
            "description": "If true, continue NWT iterations on partially converged stress periods.",
            "examples": [
              false
            ],
            "title": "Continue Run",
            "type": "boolean",
            "x-hmp-profile": "expert"
          },
          "backflag": {
            "default": 0,
            "description": "NWT backtracking activation flag.",
            "examples": [
              0
            ],
            "title": "Backflag",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "stoptol": {
            "default": 1e-10,
            "description": "NWT backtracking stopping tolerance.",
            "examples": [
              1e-10
            ],
            "title": "Stoptol",
            "type": "number",
            "x-hmp-profile": "expert"
          }
        },
        "title": "NwtSolverConfig",
        "type": "object"
      },
      "ObservationsCriteriaConfig": {
        "additionalProperties": false,
        "description": "Criteria applied to observation families.",
        "properties": {
          "flow_station_mode": {
            "default": "report_only",
            "enum": [
              "hard_reject",
              "warning",
              "score",
              "stratify",
              "report_only"
            ],
            "examples": [
              "hard_reject"
            ],
            "title": "Flow Station Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "flow_station_max_distance_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Flow Station Max Distance Km",
            "x-hmp-profile": "user"
          },
          "piezometer_mode": {
            "default": "report_only",
            "enum": [
              "hard_reject",
              "warning",
              "score",
              "stratify",
              "report_only"
            ],
            "examples": [
              "hard_reject"
            ],
            "title": "Piezometer Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "piezometer_max_distance_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Piezometer Max Distance Km",
            "x-hmp-profile": "user"
          },
          "flow_station": {
            "$ref": "#/components/schemas/FlowStationCriteriaConfig",
            "x-hmp-profile": "user"
          },
          "station_influence": {
            "$ref": "#/components/schemas/StationInfluenceCriteriaConfig",
            "x-hmp-profile": "user"
          },
          "piezometer_layers": {
            "description": "Optional vector layers used to compute piezometer evidence.",
            "items": {
              "$ref": "#/components/schemas/PiezometerLayerConfig"
            },
            "title": "Piezometer Layers",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "title": "ObservationsCriteriaConfig",
        "type": "object"
      },
      "OcConfig": {
        "additionalProperties": false,
        "description": "OC package settings.",
        "properties": {
          "compact": {
            "default": true,
            "description": "Enable compact budget format in OC outputs.",
            "examples": [
              true
            ],
            "title": "Compact",
            "type": "boolean",
            "x-hmp-profile": "expert"
          }
        },
        "title": "OcConfig",
        "type": "object"
      },
      "OceanicConfig": {
        "additionalProperties": false,
        "description": "Top-level oceanic configuration.\n\nThe section groups sea-level sources and an optional date window. It is\ncommonly inferred when ``flow.active_bc`` contains an ocean boundary\ncondition.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/OceanicSourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "OceanicConfig",
        "type": "object"
      },
      "OceanicSourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one oceanic boundary data source.\n\nOceanic sources describe sea-level information for coastal boundary\nconditions. Use ``custom`` for local files, ``shom`` for tide-gauge data,\nor ``constant`` for a fixed mean sea-level value.",
        "properties": {
          "fallback_search_radius_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Maximum search radius (km) used to find a fallback station when no observation is available inside the requested bbox.",
            "title": "Fallback Search Radius Km",
            "x-hmp-profile": "dev"
          },
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user CSV/NC/TIF files, 'shom' for SHOM API, 'constant' for fixed MSL.",
            "enum": [
              "custom",
              "shom",
              "constant"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs, or a single .nc/.tif file.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Constant mean sea-level value in metres.",
            "title": "Value",
            "x-hmp-profile": "user"
          },
          "nearest": {
            "default": true,
            "description": "Use nearest tide gauge to watershed centroid.",
            "examples": [
              true
            ],
            "title": "Nearest",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "require_observations": {
            "default": true,
            "description": "Raise if SHOM returns no observations.",
            "examples": [
              true
            ],
            "title": "Require Observations",
            "type": "boolean",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "source"
        ],
        "title": "OceanicSourceConfig",
        "type": "object"
      },
      "OutletCatchDef": {
        "additionalProperties": false,
        "description": "Watershed delineated from an outlet coordinate.",
        "properties": {
          "dem_init_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Path to the DEM raster used as input. For 'dem' and 'txt' modes: defines the model domain directly. For 'from_outlet_coord' and 'from_polyg_shp' modes: regional DEM used for flow analysis. May be left absent when [data.dem.sources] declares the DEM.",
            "title": "Dem Init Path",
            "x-hmp-profile": "user"
          },
          "catch_def": {
            "const": "from_outlet_coord",
            "default": "from_outlet_coord",
            "description": "Watershed delineated from outlet coordinates on a regional DEM.",
            "examples": [
              "from_outlet_coord"
            ],
            "title": "Catch Def",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "x_outlet": {
            "description": "X coordinate of the watershed outlet in the projected CRS.",
            "examples": [
              1.0
            ],
            "title": "X Outlet",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "y_outlet": {
            "description": "Y coordinate of the watershed outlet in the projected CRS.",
            "examples": [
              1.0
            ],
            "title": "Y Outlet",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "snap_dist": {
            "description": "Maximum snapping distance (metres) to move the outlet to the nearest stream cell. Accepts inline units (e.g. 50, '50 m', '0.05 km').",
            "examples": [
              1.0
            ],
            "exclusiveMinimum": 0.0,
            "title": "Snap Dist",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "buff_area": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ],
            "description": "Buffer around the watershed polygon. Numeric values are interpreted as a percentage of sqrt(area [km^2]). String values are interpreted as explicit distances (for example '500 m', '2 km').",
            "title": "Buff Area",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "x_outlet",
          "y_outlet",
          "snap_dist",
          "buff_area"
        ],
        "title": "OutletCatchDef",
        "type": "object"
      },
      "OutletsConfig": {
        "additionalProperties": false,
        "description": "Candidate outlet generation settings.",
        "properties": {
          "candidate_mode": {
            "default": "network_sampling",
            "description": "How candidate outlets are generated.",
            "enum": [
              "network_sampling",
              "station_outlets"
            ],
            "examples": [
              "network_sampling"
            ],
            "title": "Candidate Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "min_distance_between_outlets_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Minimum distance between generated outlets.",
            "title": "Min Distance Between Outlets Km",
            "x-hmp-profile": "user"
          },
          "allow_nested_basins": {
            "default": false,
            "description": "Allow nested candidate basins before final selection.",
            "examples": [
              false
            ],
            "title": "Allow Nested Basins",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "max_generated_candidates": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": 200,
            "description": "Maximum number of DEM/network-generated candidates to delineate.",
            "examples": [
              200
            ],
            "title": "Max Generated Candidates",
            "x-hmp-profile": "user"
          },
          "max_rejected_candidate_audit_records": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": 5000,
            "description": "Maximum number of rejected DEM/network candidate cells written to the candidate-generation audit JSONL.",
            "examples": [
              5000
            ],
            "title": "Max Rejected Candidate Audit Records",
            "x-hmp-profile": "user"
          },
          "max_generated_network_cells": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": 50000,
            "description": "Maximum number of DEM-derived stream cells exported to the generated network vector layer. Highest-accumulation cells are kept first.",
            "examples": [
              50000
            ],
            "title": "Max Generated Network Cells",
            "x-hmp-profile": "user"
          },
          "snap_to_generated_stream": {
            "default": true,
            "description": "Snap outlets to the DEM-derived stream network when applicable.",
            "examples": [
              true
            ],
            "title": "Snap To Generated Stream",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "snap_strategy": {
            "default": "dem_accumulation",
            "description": "Outlet snapping strategy. 'dem_accumulation' snaps directly on the DEM-derived accumulation raster. 'bdtopage_then_dem' first projects the station to BD Topage, then snaps locally on the DEM raster.",
            "enum": [
              "dem_accumulation",
              "bdtopage_then_dem"
            ],
            "examples": [
              "dem_accumulation"
            ],
            "title": "Snap Strategy",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "snap_dist_m": {
            "default": 150,
            "description": "Maximum snapping distance in metres for outlet-based delineation.",
            "examples": [
              150
            ],
            "exclusiveMinimum": 0,
            "title": "Snap Dist M",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "reference_network_source": {
            "default": "bdtopage",
            "description": "Reference hydrographic network used by bdtopage_then_dem.",
            "enum": [
              "bdtopage",
              "custom"
            ],
            "examples": [
              "bdtopage"
            ],
            "title": "Reference Network Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "reference_network_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Local vector network used when reference_network_source='custom'.",
            "title": "Reference Network Path",
            "x-hmp-profile": "user"
          },
          "reference_network_max_distance_m": {
            "default": 100.0,
            "description": "Maximum accepted distance from candidate outlet to the reference network.",
            "examples": [
              100.0
            ],
            "exclusiveMinimum": 0,
            "title": "Reference Network Max Distance M",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "reference_network_fetch_margin_m": {
            "default": 500.0,
            "description": "Extra margin around outlets when downloading a BD Topage reference network.",
            "examples": [
              500.0
            ],
            "minimum": 0,
            "title": "Reference Network Fetch Margin M",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "reference_network_page_size": {
            "default": 2000,
            "description": "BD Topage WFS page size used for the reference network download.",
            "examples": [
              2000
            ],
            "exclusiveMinimum": 0,
            "title": "Reference Network Page Size",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "reference_network_force_refresh": {
            "default": false,
            "description": "Redownload BD Topage even if the run output already contains a network file.",
            "examples": [
              false
            ],
            "title": "Reference Network Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          }
        },
        "title": "OutletsConfig",
        "type": "object"
      },
      "OutputConfig": {
        "additionalProperties": false,
        "description": "Output artifact switches.",
        "properties": {
          "write_rejected": {
            "default": true,
            "examples": [
              true
            ],
            "title": "Write Rejected",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "write_selected": {
            "default": true,
            "examples": [
              true
            ],
            "title": "Write Selected",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "write_geojson": {
            "default": true,
            "examples": [
              true
            ],
            "title": "Write Geojson",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "write_geoparquet": {
            "default": false,
            "examples": [
              false
            ],
            "title": "Write Geoparquet",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "write_geopackage": {
            "default": false,
            "examples": [
              false
            ],
            "title": "Write Geopackage",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "write_csv": {
            "default": true,
            "examples": [
              true
            ],
            "title": "Write Csv",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "write_regional_lab_csv": {
            "default": true,
            "examples": [
              true
            ],
            "title": "Write Regional Lab Csv",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "write_report_html": {
            "default": false,
            "examples": [
              false
            ],
            "title": "Write Report Html",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "keep_intermediate_rasters": {
            "default": false,
            "description": "Keep intermediate GeoTIFF rasters such as flow products and per-candidate watershed masks after final outputs are written.",
            "examples": [
              false
            ],
            "title": "Keep Intermediate Rasters",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "OutputConfig",
        "type": "object"
      },
      "OverviewConfig": {
        "additionalProperties": false,
        "description": "Overview report settings (watershed identity card).",
        "properties": {
          "name": {
            "default": "",
            "description": "Watershed name.",
            "examples": [
              ""
            ],
            "title": "Name",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Global start date (YYYY-MM-DD).",
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Global end date (YYYY-MM-DD).",
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "regional_context_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Label used for the regional location figure.",
            "title": "Regional Context Label",
            "x-hmp-profile": "user"
          },
          "panels": {
            "$ref": "#/components/schemas/OverviewPanelsConfig",
            "description": "Panel toggles.",
            "x-hmp-profile": "user"
          }
        },
        "title": "OverviewConfig",
        "type": "object"
      },
      "OverviewPanelsConfig": {
        "additionalProperties": false,
        "description": "Toggle individual report panels on/off.",
        "properties": {
          "map_dem": {
            "default": true,
            "description": "DEM elevation map.",
            "examples": [
              true
            ],
            "title": "Map Dem",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "map_geology": {
            "default": true,
            "description": "Geology lithology map.",
            "examples": [
              true
            ],
            "title": "Map Geology",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "map_hydrography": {
            "default": true,
            "description": "River network map.",
            "examples": [
              true
            ],
            "title": "Map Hydrography",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "stats_card": {
            "default": true,
            "description": "Watershed metrics card.",
            "examples": [
              true
            ],
            "title": "Stats Card",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "timeseries_discharge": {
            "default": true,
            "description": "Observed discharge.",
            "examples": [
              true
            ],
            "title": "Timeseries Discharge",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "timeseries_piezometry": {
            "default": true,
            "description": "Observed piezometry.",
            "examples": [
              true
            ],
            "title": "Timeseries Piezometry",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "climatic_summary": {
            "default": true,
            "description": "P/ETP monthly bars.",
            "examples": [
              true
            ],
            "title": "Climatic Summary",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "timeseries_intermittency": {
            "default": true,
            "description": "ONDE intermittency.",
            "examples": [
              true
            ],
            "title": "Timeseries Intermittency",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "timeseries_water_quality": {
            "default": true,
            "description": "Water-quality series.",
            "examples": [
              true
            ],
            "title": "Timeseries Water Quality",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "station_inventory": {
            "default": true,
            "description": "Station inventory table.",
            "examples": [
              true
            ],
            "title": "Station Inventory",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "OverviewPanelsConfig",
        "type": "object"
      },
      "PersistenceConfig": {
        "additionalProperties": false,
        "description": "Orthogonal switch governing every persistence sink.\n\nToggles are independent: disabling ``save_zarr`` does not silence the\ncatalog, and vice versa. ``save_catalog`` is the master switch for the\nproject DuckDB; when False, every write through\n:class:`SimulationCatalog` becomes a no-op.",
        "properties": {
          "save_catalog": {
            "default": true,
            "description": "Persist DuckDB rows (simulations, parameters, metrics, calibration_iterations). When False, catalog writes are skipped.",
            "examples": [
              true
            ],
            "title": "Save Catalog",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "save_zarr": {
            "default": true,
            "description": "Persist per-simulation field arrays (head, concentration, derived) into the Zarr store.",
            "examples": [
              true
            ],
            "title": "Save Zarr",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "save_parquet": {
            "default": true,
            "description": "Persist per-simulation tabular outputs (timeseries, budgets, mass_balance) as Parquet files.",
            "examples": [
              true
            ],
            "title": "Save Parquet",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "save_lock": {
            "default": true,
            "description": "Generate and refresh the ``hydromodpy.lock`` reproducibility manifest after data ingestion.",
            "examples": [
              true
            ],
            "title": "Save Lock",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "compression": {
            "default": "zstd",
            "description": "Codec used for Zarr field arrays and Parquet tables. 'none' disables compression.",
            "enum": [
              "none",
              "zstd",
              "lz4",
              "gzip",
              "snappy"
            ],
            "examples": [
              "none"
            ],
            "title": "Compression",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "compression_level": {
            "default": 3,
            "description": "Compression level (codec-dependent). Ignored when compression='none'.",
            "examples": [
              3
            ],
            "maximum": 22,
            "minimum": 0,
            "title": "Compression Level",
            "type": "integer",
            "x-hmp-profile": "dev"
          }
        },
        "title": "PersistenceConfig",
        "type": "object"
      },
      "PiezometerLayerConfig": {
        "additionalProperties": false,
        "description": "Vector layer used to compute piezometer evidence.",
        "properties": {
          "name": {
            "description": "Human-readable piezometer layer name.",
            "examples": [
              "example"
            ],
            "minLength": 1,
            "title": "Name",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "description": "Vector file containing piezometer features.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "id_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source-feature identifier field.",
            "title": "Id Field",
            "x-hmp-profile": "user"
          },
          "label_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source-feature label field.",
            "title": "Label Field",
            "x-hmp-profile": "user"
          },
          "record_years_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional field containing available record length in years.",
            "title": "Record Years Field",
            "x-hmp-profile": "user"
          },
          "quality_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional field containing a quality/status label.",
            "title": "Quality Field",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "name",
          "path"
        ],
        "title": "PiezometerLayerConfig",
        "type": "object"
      },
      "PiezometryConfig": {
        "additionalProperties": false,
        "description": "Top-level piezometry configuration.\n\nThe section groups groundwater observation sources and an optional date\nwindow. Loaded piezometric series can support calibration targets,\ndiagnostics, and hydrogeological context.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/PiezometrySourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "PiezometryConfig",
        "type": "object"
      },
      "PiezometrySourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one piezometry data source.\n\nPiezometry sources load groundwater-level or depth observations from local\nstation files or from the Hub'Eau piezometry API. Station filters, nearest\nstation selection, and source units are declared here.",
        "properties": {
          "fallback_search_radius_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Maximum search radius (km) used to find a fallback station when no observation is available inside the requested bbox.",
            "title": "Fallback Search Radius Km",
            "x-hmp-profile": "dev"
          },
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider.",
            "enum": [
              "custom",
              "hubeau"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "product": {
            "anyOf": [
              {
                "enum": [
                  "level",
                  "depth"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Hub'Eau measurement type: 'level' or 'depth'.",
            "title": "Product",
            "x-hmp-profile": "user"
          },
          "require_observations": {
            "default": true,
            "description": "Only keep stations that have observations in the period.",
            "examples": [
              true
            ],
            "title": "Require Observations",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "nearest": {
            "default": false,
            "description": "Keep only the nearest piezometer to the extent centroid.",
            "examples": [
              false
            ],
            "title": "Nearest",
            "type": "boolean",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "source"
        ],
        "title": "PiezometrySourceConfig",
        "type": "object"
      },
      "PlanarGridConfig": {
        "additionalProperties": false,
        "description": "Planar discretization contract for solver-facing grids.",
        "properties": {
          "mode": {
            "default": "keep_native",
            "description": "Planar solver-grid mode: keep the native domain support or resample to an explicit (ny, nx) target shape.",
            "enum": [
              "keep_native",
              "resample_to_shape"
            ],
            "examples": [
              "keep_native"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "nx": {
            "anyOf": [
              {
                "description": "Positive integer.",
                "exclusiveMinimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Target number of columns when planar mode is 'resample_to_shape'.",
            "title": "Nx",
            "x-hmp-profile": "user"
          },
          "ny": {
            "anyOf": [
              {
                "description": "Positive integer.",
                "exclusiveMinimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Target number of rows when planar mode is 'resample_to_shape'.",
            "title": "Ny",
            "x-hmp-profile": "user"
          },
          "resampling": {
            "default": "bilinear",
            "description": "Resampling rule applied when planar mode is 'resample_to_shape'.",
            "enum": [
              "bilinear",
              "average",
              "nearest"
            ],
            "examples": [
              "bilinear"
            ],
            "title": "Resampling",
            "type": "string",
            "x-hmp-profile": "dev"
          }
        },
        "title": "PlanarGridConfig",
        "type": "object"
      },
      "PolygonCatchDef": {
        "additionalProperties": false,
        "description": "Watershed delineated from a polygon shapefile.",
        "properties": {
          "dem_init_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Path to the DEM raster used as input. For 'dem' and 'txt' modes: defines the model domain directly. For 'from_outlet_coord' and 'from_polyg_shp' modes: regional DEM used for flow analysis. May be left absent when [data.dem.sources] declares the DEM.",
            "title": "Dem Init Path",
            "x-hmp-profile": "user"
          },
          "catch_def": {
            "const": "from_polyg_shp",
            "default": "from_polyg_shp",
            "description": "Watershed delineated from a polygon shapefile plus a regional DEM.",
            "examples": [
              "from_polyg_shp"
            ],
            "title": "Catch Def",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "polyg_shp_path": {
            "description": "Path to the watershed polygon shapefile.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Polyg Shp Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "buff_area": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ],
            "description": "Buffer around the watershed polygon. Numeric values are interpreted as a percentage of sqrt(area [km^2]). String values are interpreted as explicit distances (for example '500 m', '2 km').",
            "title": "Buff Area",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "polyg_shp_path",
          "buff_area"
        ],
        "title": "PolygonCatchDef",
        "type": "object"
      },
      "PrecipitationConfig": {
        "additionalProperties": false,
        "description": "Top-level precipitation configuration.\n\nThe section groups precipitation sources and an optional date window.\nLoaded data can drive hydrological forcing, recharge derivation, or\ndiagnostic comparisons.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/PrecipitationSourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "PrecipitationConfig",
        "type": "object"
      },
      "PrecipitationSourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one precipitation data source.\n\nPrecipitation sources provide rainfall, snowfall, or total precipitation\nfrom custom files or SIM2 EDR products. Components select which\nprecipitation signal is loaded from the provider.",
        "properties": {
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user CSV files, 'sim2' for SIM2 EDR API.",
            "enum": [
              "custom",
              "sim2"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "components": {
            "default": [
              "total"
            ],
            "description": "Precipitation components: 'liquid' (rain), 'solid' (snow), 'total' (sum of both).",
            "examples": [
              [
                "total"
              ]
            ],
            "items": {
              "enum": [
                "liquid",
                "solid",
                "total"
              ],
              "type": "string"
            },
            "minItems": 1,
            "title": "Components",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs, or a single .nc/.tif file.",
            "title": "Path",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "source"
        ],
        "title": "PrecipitationSourceConfig",
        "type": "object"
      },
      "RadialIslandTopography": {
        "additionalProperties": false,
        "description": "Circular emerged island surrounded by submerged ocean cells.",
        "properties": {
          "kind": {
            "const": "radial_island",
            "default": "radial_island",
            "description": "Analytical topography law: 'radial_island' builds one circular emerged island surrounded by submerged ocean cells.",
            "examples": [
              "radial_island"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "base_elevation": {
            "default": -1.0,
            "description": "Submerged ocean-floor elevation (m). Must be < 0.",
            "examples": [
              -1.0
            ],
            "title": "Base Elevation",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "island_radius": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Circular shoreline radius (metres). Defaults to 35% of the smallest domain length. Accepts inline units.",
            "title": "Island Radius",
            "x-hmp-profile": "dev"
          },
          "crest_elevation": {
            "default": 10.0,
            "description": "Central island elevation (m). The land surface decays nonlinearly to sea level at the shoreline.",
            "examples": [
              10.0
            ],
            "title": "Crest Elevation",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "center_x": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional x coordinate (metres) of the island center. Defaults to the grid midpoint.",
            "title": "Center X",
            "x-hmp-profile": "dev"
          },
          "center_y": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional y coordinate (metres) of the island center. Defaults to the grid midpoint.",
            "title": "Center Y",
            "x-hmp-profile": "dev"
          }
        },
        "title": "RadialIslandTopography",
        "type": "object"
      },
      "RadiationConfig": {
        "additionalProperties": false,
        "description": "Top-level radiation configuration.\n\nThe section groups radiation sources and an optional date window. Loaded\ndata can support atmospheric forcing, potential evapotranspiration context,\nand HELP coupling.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/RadiationSourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "RadiationConfig",
        "type": "object"
      },
      "RadiationSourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one radiation data source.\n\nRadiation sources load atmospheric and/or visible radiation from custom\nfiles or SIM2 EDR products. Components select the radiation signals used by\ndownstream forcing and HELP coupling.",
        "properties": {
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user CSV files, 'sim2' for SIM2 EDR API.",
            "enum": [
              "custom",
              "sim2"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "components": {
            "default": [
              "atmospheric",
              "visible"
            ],
            "description": "Radiation components: 'atmospheric' (DLI_Q) and/or 'visible' (SSI_Q).",
            "examples": [
              [
                "atmospheric",
                "visible"
              ]
            ],
            "items": {
              "enum": [
                "atmospheric",
                "visible"
              ],
              "type": "string"
            },
            "minItems": 1,
            "title": "Components",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs, or a single .nc/.tif file.",
            "title": "Path",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "source"
        ],
        "title": "RadiationSourceConfig",
        "type": "object"
      },
      "RechargeConfig": {
        "additionalProperties": false,
        "description": "Top-level recharge configuration.\n\nThe section groups recharge sources and an optional date window. Loaded\nrecharge is used by groundwater and coupled flow workflows as a time-series\nor gridded forcing.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/RechargeSourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "RechargeConfig",
        "type": "object"
      },
      "RechargeSourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one recharge data source.\n\nRecharge sources provide water input to the subsurface as custom files,\nSIM2 gridded products, or synthetic series. Synthetic fields can be\nconstant, time-varying, or sinusoidal depending on the declared values and\noptional amplitude settings.",
        "properties": {
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip grid.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. If omitted for NetCDF, units are inferred from variable metadata when available.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user CSV files, 'sim2' for SIM2 EDR API, 'synthetic' for generated series.",
            "enum": [
              "custom",
              "sim2",
              "synthetic"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs, or a single .nc/.tif file.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "values": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Recharge values in mm/day. Single value for constant, list for time-varying.",
            "title": "Values",
            "x-hmp-profile": "user"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Start date for synthetic series (ISO format, e.g. '2020-01-01').",
            "title": "Start Date",
            "x-hmp-profile": "user"
          },
          "freq": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Frequency for synthetic series (e.g. 'D', 'ME', 'YE').",
            "title": "Freq",
            "x-hmp-profile": "dev"
          },
          "periods": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Number of periods for synthetic series.",
            "title": "Periods",
            "x-hmp-profile": "dev"
          },
          "amplitude": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Sinusoidal amplitude in mm/day (superimposed on values).",
            "title": "Amplitude",
            "x-hmp-profile": "expert"
          },
          "period_days": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Sinusoidal period in days.",
            "title": "Period Days",
            "x-hmp-profile": "expert"
          },
          "offset": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Sinusoidal baseline offset in mm/day.",
            "title": "Offset",
            "x-hmp-profile": "expert"
          },
          "runoff_ratio": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Fraction of recharge routed to runoff (0.0 to 1.0).",
            "title": "Runoff Ratio",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "source"
        ],
        "title": "RechargeSourceConfig",
        "type": "object"
      },
      "RegionalLabCatalogConfig": {
        "additionalProperties": false,
        "description": "Normalized catalog-loading contract.",
        "properties": {
          "path": {
            "description": "Resolved path to the site catalog (CSV or JSONL).",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "format": {
            "default": "auto",
            "description": "Catalog format. 'auto' infers from suffix.",
            "enum": [
              "auto",
              "csv",
              "jsonl"
            ],
            "examples": [
              "auto"
            ],
            "title": "Format",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "site_id_field": {
            "default": "site_id",
            "description": "Catalog column carrying the site identifier.",
            "examples": [
              "site_id"
            ],
            "title": "Site Id Field",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "site_label_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "site_label",
            "description": "Catalog column carrying a human-readable site label.",
            "examples": [
              "site_label"
            ],
            "title": "Site Label Field",
            "x-hmp-profile": "user"
          },
          "cluster_id_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "cluster_id",
            "description": "Catalog column carrying the cluster identifier.",
            "examples": [
              "cluster_id"
            ],
            "title": "Cluster Id Field",
            "x-hmp-profile": "user"
          },
          "cluster_label_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "cluster_label",
            "description": "Catalog column carrying the cluster label.",
            "examples": [
              "cluster_label"
            ],
            "title": "Cluster Label Field",
            "x-hmp-profile": "user"
          },
          "cluster_family_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "cluster_family",
            "description": "Catalog column carrying the cluster family name.",
            "examples": [
              "cluster_family"
            ],
            "title": "Cluster Family Field",
            "x-hmp-profile": "user"
          },
          "cluster_scale_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "cluster_scale",
            "description": "Catalog column carrying the cluster spatial scale tag.",
            "examples": [
              "cluster_scale"
            ],
            "title": "Cluster Scale Field",
            "x-hmp-profile": "user"
          },
          "region_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "region_id",
            "description": "Catalog column carrying the region identifier.",
            "examples": [
              "region_id"
            ],
            "title": "Region Field",
            "x-hmp-profile": "user"
          },
          "source_selection_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "source_selection_id",
            "description": "Catalog column carrying the data-source selection identifier.",
            "examples": [
              "source_selection_id"
            ],
            "title": "Source Selection Field",
            "x-hmp-profile": "user"
          },
          "status_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "site_status",
            "description": "Catalog column carrying the site lifecycle status.",
            "examples": [
              "site_status"
            ],
            "title": "Status Field",
            "x-hmp-profile": "user"
          },
          "maturity_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "maturity",
            "description": "Catalog column carrying the site maturity level.",
            "examples": [
              "maturity"
            ],
            "title": "Maturity Field",
            "x-hmp-profile": "user"
          },
          "x_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "x",
            "description": "Catalog column carrying the X coordinate (CRS units).",
            "examples": [
              "x"
            ],
            "title": "X Field",
            "x-hmp-profile": "user"
          },
          "y_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "y",
            "description": "Catalog column carrying the Y coordinate (CRS units).",
            "examples": [
              "y"
            ],
            "title": "Y Field",
            "x-hmp-profile": "user"
          },
          "area_km2_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "area_km2",
            "description": "Catalog column carrying the catchment area in km^2.",
            "examples": [
              "area_km2"
            ],
            "title": "Area Km2 Field",
            "x-hmp-profile": "user"
          },
          "tags_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "tags",
            "description": "Catalog column carrying free-form tags joined by tag_separator.",
            "examples": [
              "tags"
            ],
            "title": "Tags Field",
            "x-hmp-profile": "user"
          },
          "enabled_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "enabled",
            "description": "Catalog column flagging whether a site is active.",
            "examples": [
              "enabled"
            ],
            "title": "Enabled Field",
            "x-hmp-profile": "user"
          },
          "required_fields": {
            "default": [],
            "description": "Catalog columns that must be present and non-empty per row.",
            "items": {
              "type": "string"
            },
            "title": "Required Fields",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "path_fields": {
            "default": [],
            "description": "Catalog columns whose values are resolved as filesystem paths.",
            "items": {
              "type": "string"
            },
            "title": "Path Fields",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "tag_separator": {
            "default": ";",
            "description": "Separator splitting the tags column into individual tags.",
            "examples": [
              ";"
            ],
            "title": "Tag Separator",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "source_manifest_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional site-selection manifest used to resolve the site catalog.",
            "title": "Source Manifest Path",
            "x-hmp-profile": "user"
          },
          "source_manifest_output_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Output key read from the site-selection manifest.",
            "title": "Source Manifest Output Key",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "path"
        ],
        "title": "RegionalLabCatalogConfig",
        "type": "object"
      },
      "RegionalLabClusterRuleConfig": {
        "additionalProperties": false,
        "description": "One explicit cluster enrichment rule applied on top of the site catalog.",
        "properties": {
          "id": {
            "description": "Unique rule identifier.",
            "examples": [
              "example"
            ],
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "label": {
            "description": "Human-readable rule label.",
            "examples": [
              "example"
            ],
            "title": "Label",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "enabled": {
            "default": true,
            "description": "If False, the rule is parsed but skipped during enrichment.",
            "examples": [
              true
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "priority": {
            "default": 100,
            "description": "Application order (lower runs first) when several rules match.",
            "examples": [
              100
            ],
            "title": "Priority",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "selection": {
            "$ref": "#/components/schemas/RegionalLabSelectionConfig",
            "description": "Site filters (ids, regions, families, tags) restricting which sites the rule applies to.",
            "x-hmp-profile": "user"
          },
          "field_equals": {
            "default": [],
            "description": "Column equality constraints applied on top of selection (key=value).",
            "items": {
              "maxItems": 2,
              "minItems": 2,
              "prefixItems": [
                {
                  "type": "string"
                },
                {
                  "type": "string"
                }
              ],
              "type": "array"
            },
            "title": "Field Equals",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "set_cluster_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Cluster id to assign to matched sites. None leaves it untouched.",
            "title": "Set Cluster Id",
            "x-hmp-profile": "user"
          },
          "set_cluster_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Cluster label to assign to matched sites. None leaves it untouched.",
            "title": "Set Cluster Label",
            "x-hmp-profile": "user"
          },
          "set_cluster_family": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Cluster family to assign to matched sites. None leaves it untouched.",
            "title": "Set Cluster Family",
            "x-hmp-profile": "user"
          },
          "set_cluster_scale": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Cluster scale tag to assign to matched sites. None leaves it untouched.",
            "title": "Set Cluster Scale",
            "x-hmp-profile": "user"
          },
          "cluster_tags": {
            "default": [],
            "description": "Extra tags appended to the cluster of matched sites.",
            "items": {
              "type": "string"
            },
            "title": "Cluster Tags",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "override_existing_cluster": {
            "default": false,
            "description": "If True, overwrite cluster fields already set on matched sites.",
            "examples": [
              false
            ],
            "title": "Override Existing Cluster",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "id",
          "label",
          "selection"
        ],
        "title": "RegionalLabClusterRuleConfig",
        "type": "object"
      },
      "RegionalLabConfig": {
        "additionalProperties": false,
        "description": "Validated top-level configuration for one regional-lab run.",
        "properties": {
          "config_path": {
            "description": "Resolved path to the source TOML file.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Config Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "base_dir": {
            "description": "Directory used to resolve relative paths.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Base Dir",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "lab_id": {
            "description": "Regional-lab identifier.",
            "examples": [
              "example"
            ],
            "title": "Lab Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "output_root": {
            "description": "Directory where lab artifacts are written.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Output Root",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "execute": {
            "default": true,
            "description": "If False, the planner runs but no child workflows are launched.",
            "examples": [
              true
            ],
            "title": "Execute",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "continue_on_error": {
            "default": true,
            "description": "If True, keep dispatching siblings after a child failure.",
            "examples": [
              true
            ],
            "title": "Continue On Error",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "validate_config_paths": {
            "default": true,
            "description": "If True, ensure each rendered child config path exists before run.",
            "examples": [
              true
            ],
            "title": "Validate Config Paths",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "resume_from_report": {
            "default": true,
            "description": "If True, replay the previous report to skip already-completed cases.",
            "examples": [
              true
            ],
            "title": "Resume From Report",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "skip_completed_cases": {
            "default": true,
            "description": "If True, do not re-run cases marked as completed in the report.",
            "examples": [
              true
            ],
            "title": "Skip Completed Cases",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "catalog": {
            "$ref": "#/components/schemas/RegionalLabCatalogConfig",
            "description": "Site catalog source declaring the columns and filters used to enumerate runs.",
            "x-hmp-profile": "user"
          },
          "selection": {
            "$ref": "#/components/schemas/RegionalLabSelectionConfig",
            "description": "Top-level site selection filters applied before cluster rules and recipes.",
            "x-hmp-profile": "user"
          },
          "cluster_rules": {
            "default": [],
            "description": "Optional cluster enrichment rules applied on top of the catalog.",
            "items": {
              "$ref": "#/components/schemas/RegionalLabClusterRuleConfig"
            },
            "title": "Cluster Rules",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "recipes": {
            "description": "Per-recipe expansion plans declaring which child launchers run on which sites.",
            "items": {
              "$ref": "#/components/schemas/RegionalLabRecipeConfig"
            },
            "title": "Recipes",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "config_path",
          "base_dir",
          "lab_id",
          "output_root",
          "catalog",
          "selection",
          "recipes"
        ],
        "title": "RegionalLabConfig",
        "type": "object"
      },
      "RegionalLabRecipeConfig": {
        "additionalProperties": false,
        "description": "One recipe expanded across selected sites.",
        "properties": {
          "id": {
            "description": "Unique recipe identifier.",
            "examples": [
              "example"
            ],
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "label": {
            "description": "Human-readable recipe label.",
            "examples": [
              "example"
            ],
            "title": "Label",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "launcher": {
            "description": "Child launcher dispatched per site.",
            "enum": [
              "simulation",
              "comparison"
            ],
            "examples": [
              "simulation"
            ],
            "title": "Launcher",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "config_path_template": {
            "description": "Template producing the child config path from a site context.",
            "examples": [
              "example"
            ],
            "title": "Config Path Template",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "enabled": {
            "default": true,
            "description": "If False, the recipe is parsed but skipped during dispatch.",
            "examples": [
              true
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "selection": {
            "$ref": "#/components/schemas/RegionalLabSelectionConfig",
            "description": "Site filters restricting which sites this recipe expands over.",
            "x-hmp-profile": "user"
          },
          "required_fields": {
            "default": [],
            "description": "Catalog columns that must be present per site for this recipe.",
            "items": {
              "type": "string"
            },
            "title": "Required Fields",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "allowed_platforms": {
            "default": [],
            "description": "Platforms (linux, darwin, windows) on which the recipe may run.",
            "items": {
              "type": "string"
            },
            "title": "Allowed Platforms",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "id",
          "label",
          "launcher",
          "config_path_template",
          "selection"
        ],
        "title": "RegionalLabRecipeConfig",
        "type": "object"
      },
      "RegionalLabSelectionConfig": {
        "additionalProperties": false,
        "description": "Top-level site selection filters.",
        "properties": {
          "site_ids": {
            "default": [],
            "description": "Whitelist of site identifiers to keep. Empty means no filter.",
            "items": {
              "type": "string"
            },
            "title": "Site Ids",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "cluster_ids": {
            "default": [],
            "description": "Whitelist of cluster identifiers to keep. Empty means no filter.",
            "items": {
              "type": "string"
            },
            "title": "Cluster Ids",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "regions": {
            "default": [],
            "description": "Whitelist of region identifiers to keep. Empty means no filter.",
            "items": {
              "type": "string"
            },
            "title": "Regions",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "families": {
            "default": [],
            "description": "Whitelist of cluster family names to keep. Empty means no filter.",
            "items": {
              "type": "string"
            },
            "title": "Families",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "scales": {
            "default": [],
            "description": "Whitelist of cluster scale tags to keep. Empty means no filter.",
            "items": {
              "type": "string"
            },
            "title": "Scales",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "statuses": {
            "default": [],
            "description": "Whitelist of site lifecycle statuses to keep. Empty means no filter.",
            "items": {
              "type": "string"
            },
            "title": "Statuses",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "maturity_levels": {
            "default": [],
            "description": "Whitelist of site maturity levels to keep. Empty means no filter.",
            "items": {
              "type": "string"
            },
            "title": "Maturity Levels",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "tags": {
            "default": [],
            "description": "Required tags. A site must carry every tag listed here to pass.",
            "items": {
              "type": "string"
            },
            "title": "Tags",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "limit": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Maximum number of sites to retain after filtering. None disables.",
            "title": "Limit",
            "x-hmp-profile": "user"
          },
          "include_disabled": {
            "default": false,
            "description": "If True, also keep sites flagged as disabled in the catalog.",
            "examples": [
              false
            ],
            "title": "Include Disabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "RegionalLabSelectionConfig",
        "type": "object"
      },
      "ResultsConfig": {
        "additionalProperties": false,
        "description": "Configuration for ``[simulation.results]``.\n\nControls whether simulation outputs are stored in the SimulationCatalog,\nwhich derived variables are computed, and which export formats are\nproduced automatically after each run.",
        "properties": {
          "persistence": {
            "$ref": "#/components/schemas/PersistenceConfig",
            "description": "Simulation-run persistence switch passed to the result catalog (DuckDB rows, Zarr fields, Parquet tables, lockfile).",
            "x-hmp-profile": "user"
          },
          "keep_solver_files": {
            "default": false,
            "description": "Keep raw solver output files (.hds, .cbc, .lst) after ingestion.",
            "examples": [
              false
            ],
            "title": "Keep Solver Files",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "solver_scratch": {
            "default": ".solver_scratch",
            "description": "Directory for temporary solver files, relative to the project. Use an absolute path (e.g. /scratch/$USER/hmp) for HPC.",
            "examples": [
              ".solver_scratch"
            ],
            "title": "Solver Scratch",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "derived": {
            "$ref": "#/components/schemas/DerivedConfig",
            "description": "Derived variable computation toggles.",
            "x-hmp-profile": "user"
          },
          "budget": {
            "$ref": "#/components/schemas/BudgetConfig",
            "x-hmp-profile": "dev"
          },
          "export": {
            "$ref": "#/components/schemas/ExportConfig",
            "x-hmp-profile": "user"
          }
        },
        "title": "ResultsConfig",
        "type": "object"
      },
      "RiverNetworkConfig": {
        "additionalProperties": false,
        "description": "Optional DEM-based river network extraction settings.\n\nEnable this block when geographic preprocessing must derive streams from\nflow accumulation. Thresholds can be expressed as contributing area\n(``area_km2``) or contributing cell count (``cells``), with optional\npruning and Strahler/link rasters for downstream diagnostics.",
        "properties": {
          "enabled": {
            "default": false,
            "description": "Enable DEM-based river-network extraction from flow accumulation during geographic preprocessing.",
            "examples": [
              false
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "threshold_mode": {
            "default": "area_km2",
            "description": "Stream-initiation threshold selector. 'area_km2' uses contributing area in km^2. 'cells' uses contributing-cell count directly.",
            "enum": [
              "area_km2",
              "cells"
            ],
            "examples": [
              "area_km2"
            ],
            "title": "Threshold Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "threshold_area_km2": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Contributing area threshold (km^2), required when threshold_mode='area_km2'.",
            "title": "Threshold Area Km2",
            "x-hmp-profile": "user"
          },
          "threshold_cells": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Contributing-cell threshold, required when threshold_mode='cells'.",
            "title": "Threshold Cells",
            "x-hmp-profile": "user"
          },
          "prune_short_streams": {
            "default": false,
            "description": "If true, remove short stream segments after extraction.",
            "examples": [
              false
            ],
            "title": "Prune Short Streams",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "min_stream_length_m": {
            "default": 0.0,
            "description": "Minimum stream length (metres) used by short-segment pruning. Accepts inline units (e.g. 0, 250, '250 m', '0.5 km').",
            "examples": [
              0.0
            ],
            "minimum": 0.0,
            "title": "Min Stream Length M",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "compute_strahler_order": {
            "default": true,
            "description": "Compute Strahler order raster from extracted streams.",
            "examples": [
              true
            ],
            "title": "Compute Strahler Order",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "compute_stream_links": {
            "default": true,
            "description": "Compute stream-link identifier raster from extracted streams.",
            "examples": [
              true
            ],
            "title": "Compute Stream Links",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "all_vertices": {
            "default": false,
            "description": "Forwarded to Whitebox raster_streams_to_vector. False keeps a lighter vector geometry.",
            "examples": [
              false
            ],
            "title": "All Vertices",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "RiverNetworkConfig",
        "type": "object"
      },
      "RobinBC": {
        "additionalProperties": false,
        "description": "Robin flow boundary condition.",
        "properties": {
          "id": {
            "description": "Boundary-condition identifier.",
            "examples": [
              "example"
            ],
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Boundary-condition value, scalar or one value per stress period.",
            "title": "Value",
            "x-hmp-profile": "user"
          },
          "description": {
            "default": "",
            "description": "Boundary-condition description.",
            "examples": [
              ""
            ],
            "title": "Description",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "units": {
            "default": "",
            "description": "Boundary-condition units.",
            "examples": [
              ""
            ],
            "title": "Units",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "kind": {
            "const": "robin",
            "default": "robin",
            "description": "Boundary-condition kind discriminator.",
            "examples": [
              "robin"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "data_value": {
            "default": false,
            "description": "If True, boundary-condition values are sourced from data.",
            "examples": [
              false
            ],
            "title": "Data Value",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "forcing": {
            "default": null,
            "description": "Robin boundaries do not support runtime head forcing.",
            "title": "Forcing",
            "type": "null",
            "x-hmp-profile": "dev"
          },
          "application_domain": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Boundary-application domain. Supported values are: top, north side, south side, east side, west side.",
            "title": "Application Domain",
            "x-hmp-profile": "user"
          },
          "support_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional explicit runtime support label used by unstructured backends to select one target support independently from the canonical boundary id.",
            "title": "Support Label",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "id"
        ],
        "title": "RobinBC",
        "type": "object"
      },
      "RunoffConfig": {
        "additionalProperties": false,
        "description": "Top-level runoff configuration.\n\nThe section groups runoff sources and an optional date window. Loaded data\ncan support hydrological forcing, recharge/runoff partitioning checks, and\ndiagnostic comparisons.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/RunoffSourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "RunoffConfig",
        "type": "object"
      },
      "RunoffSourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one runoff data source.\n\nRunoff sources load station or gridded surface-runoff time series from\ncustom files or SIM2 EDR products. Source-level fields define file paths,\nstation columns, masks, units, and cache refresh behavior.",
        "properties": {
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user CSV files, 'sim2' for SIM2 EDR API.",
            "enum": [
              "custom",
              "sim2"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs, or a single .nc/.tif file.",
            "title": "Path",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "source"
        ],
        "title": "RunoffSourceConfig",
        "type": "object"
      },
      "SimulationConfig": {
        "additionalProperties": false,
        "description": "Minimal orchestration block declared under ``[simulation]``.",
        "properties": {
          "name": {
            "default": "",
            "description": "Human-readable simulation name.",
            "examples": [
              ""
            ],
            "title": "Name",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "run_id": {
            "default": "",
            "description": "Run identifier used as the output subfolder name under results_simulations/. When empty, derived from the TOML filename at load time (e.g. run_steady_nwt.toml -> steady_nwt).",
            "examples": [
              "steady_nwt"
            ],
            "title": "Run Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "on_collision": {
            "default": "replace",
            "description": "Behavior when registering a simulation whose ``name`` already exists in this project. ``replace`` soft-replaces (the previous sim keeps its UUID but loses its name), ``fail`` raises an error, ``version`` auto-suffixes ``name.v2``, ``name.v3`` ...",
            "enum": [
              "replace",
              "fail",
              "version"
            ],
            "examples": [
              "replace"
            ],
            "title": "On Collision",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "description": {
            "default": "",
            "description": "Short free-text description of the simulation intent.",
            "examples": [
              ""
            ],
            "title": "Description",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "scientific_objective": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Scientific objective used for catalog and ML stratification.",
            "title": "Scientific Objective",
            "x-hmp-profile": "user"
          },
          "contact_email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Contact email for the simulation metadata.",
            "title": "Contact Email",
            "x-hmp-profile": "user"
          },
          "doi": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "DOI or reference identifier for the simulation metadata.",
            "title": "Doi",
            "x-hmp-profile": "user"
          },
          "study_area_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Human-readable study area name.",
            "title": "Study Area Name",
            "x-hmp-profile": "user"
          },
          "outlet_x": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Outlet X coordinate in the project CRS units.",
            "title": "Outlet X",
            "x-hmp-profile": "user"
          },
          "outlet_y": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Outlet Y coordinate in the project CRS units.",
            "title": "Outlet Y",
            "x-hmp-profile": "user"
          },
          "time": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationTimeConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional canonical simulation window used to align solver temporal settings and validate forcing coverage. Required for launcher flow processes and for runtime features that explicitly consume simulation-window dates.",
            "x-hmp-profile": "user"
          },
          "process": {
            "description": "Ordered list of requested processes loaded from [[simulation.process]]. At most one process per type is supported.",
            "items": {
              "description": "Discriminated union of simulation processes tagged by the 'type' family (flow, transport, mesh).",
              "discriminator": {
                "mapping": {
                  "flow": "#/$defs/FlowProcessConfig",
                  "mesh": "#/$defs/MeshProcessConfig",
                  "transport": "#/$defs/TransportProcessConfig"
                },
                "propertyName": "type"
              },
              "oneOf": [
                {
                  "$ref": "#/components/schemas/FlowProcessConfig"
                },
                {
                  "$ref": "#/components/schemas/TransportProcessConfig"
                },
                {
                  "$ref": "#/components/schemas/MeshProcessConfig"
                }
              ]
            },
            "title": "Process",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "results": {
            "$ref": "#/components/schemas/ResultsConfig",
            "description": "Results storage and export configuration loaded from [simulation.results]. Controls SimulationCatalog, derived variables, and automated exports.",
            "x-hmp-profile": "dev"
          },
          "rng_seed": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Master RNG seed for the simulation. When set, every stochastic consumer (mesh point sampling, synthetic forcing, ...) derives its own deterministic sub-seed via ``hydromodpy.core.rng.RngManager``. Persisted in ``runs_environment.rng_seed`` so the run can be re-executed from the catalog snapshot.",
            "title": "Rng Seed",
            "x-hmp-profile": "user"
          }
        },
        "title": "SimulationConfig",
        "type": "object"
      },
      "SimulationTimeConfig": {
        "additionalProperties": false,
        "description": "Canonical simulation time window and forcing-coverage policy.",
        "properties": {
          "start_datetime": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Simulation window lower datetime bound used by launcher-level time alignment and forcing checks.",
            "examples": [
              "2019-01-01"
            ],
            "title": "Start Datetime",
            "x-hmp-profile": "user"
          },
          "end_datetime": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Simulation window upper datetime bound, interpreted as inclusive. Must be greater than or equal to start_datetime.",
            "examples": [
              "2025-12-31"
            ],
            "title": "End Datetime",
            "x-hmp-profile": "user"
          },
          "step_value": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "default": "1 month",
            "description": "Forcing/stress-period time-step scalar or inline token '<value> <unit>' (for example '30 day'). This controls the temporal aggregation step for forcing series (for example recharge/runoff) and the resulting stress periods.",
            "examples": [
              "1 month",
              "10 day"
            ],
            "title": "Step Value",
            "x-hmp-profile": "user"
          },
          "step_unit": {
            "anyOf": [
              {
                "enum": [
                  "hour",
                  "day",
                  "month",
                  "year"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional forcing/stress-period base time unit used with step_value when step_value is provided without an inline unit.",
            "title": "Step Unit",
            "x-hmp-profile": "user"
          },
          "substeps_per_period": {
            "default": 1,
            "description": "Number of solver time steps within each stress period. Higher values improve transient accuracy (e.g., 30 for daily substeps inside monthly stress periods).",
            "examples": [
              1
            ],
            "minimum": 1,
            "title": "Substeps Per Period",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "coverage_policy": {
            "default": "error",
            "description": "Behavior when recharge does not fully cover the declared simulation window bounds [start_datetime, end_datetime]: 'error' raises, 'warn' emits a warning, 'ignore' skips checks.",
            "enum": [
              "error",
              "warn",
              "ignore"
            ],
            "examples": [
              "error"
            ],
            "title": "Coverage Policy",
            "type": "string",
            "x-hmp-profile": "dev"
          }
        },
        "title": "SimulationTimeConfig",
        "type": "object"
      },
      "SiteSelectionConfig": {
        "additionalProperties": false,
        "description": "Top-level site-selection workflow configuration.",
        "properties": {
          "selection_id": {
            "description": "Stable identifier for this selection campaign.",
            "examples": [
              "example"
            ],
            "minLength": 1,
            "title": "Selection Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "output_root": {
            "description": "Output directory for all site-selection artifacts.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Output Root",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "random_seed": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional seed used by stochastic candidate thinning.",
            "title": "Random Seed",
            "x-hmp-profile": "user"
          },
          "strategy": {
            "$ref": "#/components/schemas/StrategyConfig",
            "x-hmp-profile": "user"
          },
          "territory": {
            "$ref": "#/components/schemas/TerritoryConfig",
            "description": "Territory where candidate basins are searched.",
            "x-hmp-profile": "user"
          },
          "dem": {
            "$ref": "#/components/schemas/hydromodpy__spatial__site_selection__config__models__DemConfig",
            "x-hmp-profile": "user"
          },
          "hydrology": {
            "$ref": "#/components/schemas/HydrologyConfig",
            "x-hmp-profile": "user"
          },
          "dem_area_light": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DemAreaLightConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Compact settings for DEM-only automatic small-basin selection.",
            "x-hmp-profile": "user"
          },
          "input": {
            "$ref": "#/components/schemas/SiteSelectionInputConfig",
            "x-hmp-profile": "user"
          },
          "outlets": {
            "$ref": "#/components/schemas/OutletsConfig",
            "x-hmp-profile": "user"
          },
          "spatial_selection": {
            "$ref": "#/components/schemas/SpatialSelectionConfig",
            "x-hmp-profile": "user"
          },
          "criteria": {
            "$ref": "#/components/schemas/CriteriaConfig",
            "x-hmp-profile": "user"
          },
          "output": {
            "$ref": "#/components/schemas/OutputConfig",
            "x-hmp-profile": "user"
          },
          "map_context": {
            "$ref": "#/components/schemas/MapContextConfig",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "selection_id",
          "output_root",
          "territory"
        ],
        "title": "SiteSelectionConfig",
        "type": "object"
      },
      "SiteSelectionInputConfig": {
        "additionalProperties": false,
        "description": "Execution input selector used by the ``site_selection`` workflow.",
        "properties": {
          "mode": {
            "default": "plan_only",
            "description": "Explicit workflow input mode.",
            "enum": [
              "plan_only",
              "hydrometry",
              "delineated_catchments",
              "generated_candidates",
              "dem_area_light"
            ],
            "examples": [
              "plan_only"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "catchments_csv": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Pre-delineated catchments CSV used when mode='delineated_catchments'.",
            "title": "Catchments Csv",
            "x-hmp-profile": "user"
          },
          "region_id": {
            "default": "",
            "description": "Optional region identifier written to regional-lab CSV outputs.",
            "examples": [
              ""
            ],
            "title": "Region Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "workspace_root": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional workspace root forwarded to data-manager based loading.",
            "title": "Workspace Root",
            "x-hmp-profile": "user"
          },
          "data_root": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional data root forwarded to data-manager based loading.",
            "title": "Data Root",
            "x-hmp-profile": "user"
          },
          "write_plan_manifest": {
            "default": true,
            "description": "Write site_selection_plan.json when the workflow is run in plan mode.",
            "examples": [
              true
            ],
            "title": "Write Plan Manifest",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "delineate_from_outlets": {
            "default": false,
            "description": "When using catchments_csv, compute watershed contours from outlet coordinates and DEM flow products instead of trusting watershed_shp.",
            "examples": [
              false
            ],
            "title": "Delineate From Outlets",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "SiteSelectionInputConfig",
        "type": "object"
      },
      "SoilMoistureConfig": {
        "additionalProperties": false,
        "description": "Top-level soil-moisture configuration.\n\nThe section groups soil-moisture sources and an optional date window.\nLoaded data can support hydrological diagnostics and land-surface forcing\nanalyses.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/SoilMoistureSourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "SoilMoistureConfig",
        "type": "object"
      },
      "SoilMoistureSourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one soil-moisture data source.\n\nSoil-moisture sources load station or gridded soil-moisture indices from\ncustom files or SIM2 EDR products. Source-level fields define file paths,\nstation columns, masks, units, and cache refresh behavior.",
        "properties": {
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user CSV files, 'sim2' for SIM2 EDR API.",
            "enum": [
              "custom",
              "sim2"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs, or a single .nc/.tif file.",
            "title": "Path",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "source"
        ],
        "title": "SoilMoistureSourceConfig",
        "type": "object"
      },
      "SolverConfig": {
        "additionalProperties": false,
        "description": "Configuration block defining the active groundwater solver engine.\n\nThe V1 TOML form is ``backend = { backend = \"modflow6\" }`` for a\nbuilt-in backend, or ``backend = { backend = \"custom\", name = \"x\" }``\nfor a plugin-registered backend.",
        "properties": {
          "backend": {
            "description": "Active flow backend selector (discriminated union).",
            "discriminator": {
              "mapping": {
                "boussinesq": "#/$defs/BoussinesqBackend",
                "custom": "#/$defs/CustomBackend",
                "modflow6": "#/$defs/Modflow6Backend",
                "modflow_nwt": "#/$defs/ModflowNwtBackend"
              },
              "propertyName": "backend"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/Modflow6Backend"
              },
              {
                "$ref": "#/components/schemas/ModflowNwtBackend"
              },
              {
                "$ref": "#/components/schemas/BoussinesqBackend"
              },
              {
                "$ref": "#/components/schemas/CustomBackend"
              }
            ],
            "title": "Backend",
            "x-hmp-profile": "user"
          }
        },
        "title": "SolverConfig",
        "type": "object"
      },
      "SolverSGridConfig": {
        "additionalProperties": false,
        "description": "Solver-facing grid configuration split into explicit planar and vertical parts.",
        "properties": {
          "planar": {
            "$ref": "#/components/schemas/PlanarGridConfig",
            "description": "Planar discretization of the solver grid.",
            "x-hmp-profile": "user"
          },
          "vertical": {
            "$ref": "#/components/schemas/VerticalGridConfig",
            "description": "Vertical layering of the solver grid.",
            "x-hmp-profile": "user"
          }
        },
        "title": "SolverSGridConfig",
        "type": "object"
      },
      "SpatialSelectionConfig": {
        "additionalProperties": false,
        "description": "Spatial thinning and overlap policy.",
        "properties": {
          "max_selected_sites": {
            "anyOf": [
              {
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Maximum number of catchments kept after ranking and spatial thinning.",
            "title": "Max Selected Sites",
            "x-hmp-profile": "user"
          },
          "allow_nested_basins": {
            "default": false,
            "description": "Allow selected basins to be nested.",
            "examples": [
              false
            ],
            "title": "Allow Nested Basins",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "min_outlet_distance_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Minimum spacing between selected outlets.",
            "title": "Min Outlet Distance Km",
            "x-hmp-profile": "user"
          },
          "max_pairwise_basin_overlap_fraction": {
            "anyOf": [
              {
                "maximum": 1,
                "minimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Maximum allowed overlap fraction between selected basins.",
            "title": "Max Pairwise Basin Overlap Fraction",
            "x-hmp-profile": "user"
          },
          "overlap_reference": {
            "default": "smaller_basin",
            "description": "Denominator used for overlap fraction.",
            "enum": [
              "smaller_basin",
              "candidate",
              "selected"
            ],
            "examples": [
              "smaller_basin"
            ],
            "title": "Overlap Reference",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "overlap_mode": {
            "default": "hard_reject",
            "description": "How overlap violations affect selection.",
            "enum": [
              "hard_reject",
              "warning",
              "score",
              "report_only"
            ],
            "examples": [
              "hard_reject"
            ],
            "title": "Overlap Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "spatial_quota_mode": {
            "default": "none",
            "description": "Optional coarse spatial quota applied after ranking.",
            "enum": [
              "none",
              "grid"
            ],
            "examples": [
              "none"
            ],
            "title": "Spatial Quota Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "spatial_quota_cell_size_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Grid cell size used when spatial_quota_mode='grid'.",
            "title": "Spatial Quota Cell Size Km",
            "x-hmp-profile": "user"
          },
          "spatial_quota_max_sites_per_cell": {
            "default": 1,
            "description": "Maximum selected sites allowed in one spatial quota cell.",
            "examples": [
              1
            ],
            "minimum": 1,
            "title": "Spatial Quota Max Sites Per Cell",
            "type": "integer",
            "x-hmp-profile": "user"
          }
        },
        "title": "SpatialSelectionConfig",
        "type": "object"
      },
      "StationInfluenceCriteriaConfig": {
        "additionalProperties": false,
        "description": "Criteria applied to station influence metadata.",
        "properties": {
          "mode": {
            "default": "report_only",
            "enum": [
              "hard_reject",
              "warning",
              "score",
              "stratify",
              "report_only"
            ],
            "examples": [
              "hard_reject"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "source": {
            "default": "hubeau_station_metadata",
            "examples": [
              "hubeau_station_metadata"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "warn_if_general_influence": {
            "default": true,
            "examples": [
              true
            ],
            "title": "Warn If General Influence",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "warn_if_local_influence": {
            "default": true,
            "examples": [
              true
            ],
            "title": "Warn If Local Influence",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "warn_if_comment_keyword": {
            "default": true,
            "description": "Report comment keyword matches as warnings. Comment keywords are not treated as hard-reject evidence.",
            "examples": [
              true
            ],
            "title": "Warn If Comment Keyword",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "unknown_policy": {
            "default": "neutral",
            "enum": [
              "neutral",
              "warning"
            ],
            "examples": [
              "neutral"
            ],
            "title": "Unknown Policy",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "comment_keywords": {
            "description": "Keywords searched in station influence comments.",
            "items": {
              "type": "string"
            },
            "title": "Comment Keywords",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "title": "StationInfluenceCriteriaConfig",
        "type": "object"
      },
      "StrategyConfig": {
        "additionalProperties": false,
        "description": "High-level strategy controlling candidate generation and criterion order.",
        "properties": {
          "principle": {
            "default": "criteria_crossing",
            "description": "Selection principle: observation-led or direct criteria crossing.",
            "enum": [
              "observation_led",
              "criteria_crossing"
            ],
            "examples": [
              "observation_led"
            ],
            "title": "Principle",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "profile": {
            "anyOf": [
              {
                "enum": [
                  "area_only",
                  "gauged_downstream_station"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional selection profile. Short-term supported profiles are 'area_only' and 'gauged_downstream_station'.",
            "title": "Profile",
            "x-hmp-profile": "user"
          },
          "primary_axes": {
            "description": "Physical or spatial axes that drive a criteria_crossing selection.",
            "items": {
              "type": "string"
            },
            "title": "Primary Axes",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "observation_role": {
            "default": "report_only",
            "description": "How observations influence a criteria_crossing campaign.",
            "enum": [
              "primary",
              "bonus",
              "score",
              "stratify",
              "report_only",
              "ignore"
            ],
            "examples": [
              "primary"
            ],
            "title": "Observation Role",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "geology_role": {
            "default": "report_only",
            "description": "How geology influences a criteria_crossing campaign.",
            "enum": [
              "primary",
              "bonus",
              "score",
              "stratify",
              "report_only",
              "ignore"
            ],
            "examples": [
              "primary"
            ],
            "title": "Geology Role",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "primary_observation_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Observation family required by an observation_led strategy.",
            "title": "Primary Observation Type",
            "x-hmp-profile": "user"
          },
          "observation_source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Provider or normalized source used for primary observations.",
            "title": "Observation Source",
            "x-hmp-profile": "user"
          },
          "candidate_mode": {
            "anyOf": [
              {
                "enum": [
                  "network_sampling",
                  "station_outlets"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional strategy-level candidate generation mode.",
            "title": "Candidate Mode",
            "x-hmp-profile": "user"
          }
        },
        "title": "StrategyConfig",
        "type": "object"
      },
      "SyntheticGeographicConfig": {
        "additionalProperties": false,
        "description": "Top-level config for one synthetic geographic build.",
        "properties": {
          "case_id": {
            "default": "flat20",
            "description": "Identifier used by local case runners and outputs.",
            "examples": [
              "flat20"
            ],
            "title": "Case Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "grid": {
            "$ref": "#/components/schemas/SyntheticGridConfig",
            "description": "Synthetic grid definition (extent and cell size).",
            "x-hmp-profile": "user"
          },
          "topography": {
            "description": "Synthetic topography definition (shape, elevations, slope).",
            "discriminator": {
              "mapping": {
                "flat": "#/$defs/FlatTopography",
                "linear": "#/$defs/LinearTopography",
                "radial_island": "#/$defs/RadialIslandTopography"
              },
              "propertyName": "kind"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/FlatTopography"
              },
              {
                "$ref": "#/components/schemas/LinearTopography"
              },
              {
                "$ref": "#/components/schemas/RadialIslandTopography"
              }
            ],
            "title": "Topography",
            "x-hmp-profile": "user"
          }
        },
        "title": "SyntheticGeographicConfig",
        "type": "object"
      },
      "SyntheticGridConfig": {
        "additionalProperties": false,
        "description": "Structured-grid support used to generate one synthetic DEM.",
        "properties": {
          "length_x": {
            "default": 100.0,
            "description": "Total domain length along x (metres). Accepts inline units, e.g. '0.1 km'.",
            "examples": [
              100.0
            ],
            "exclusiveMinimum": 0.0,
            "title": "Length X",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "length_y": {
            "default": 1.0,
            "description": "Total domain length along y (metres). Accepts inline units, e.g. '1 m'.",
            "examples": [
              1.0
            ],
            "exclusiveMinimum": 0.0,
            "title": "Length Y",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "nx": {
            "default": 100,
            "description": "Number of cells along x.",
            "examples": [
              100
            ],
            "exclusiveMinimum": 0,
            "title": "Nx",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "ny": {
            "default": 1,
            "description": "Number of cells along y.",
            "examples": [
              1
            ],
            "exclusiveMinimum": 0,
            "title": "Ny",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "xmin": {
            "default": 0.0,
            "description": "Lower x coordinate of the support extent.",
            "examples": [
              0.0
            ],
            "title": "Xmin",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "ymin": {
            "default": 0.0,
            "description": "Lower y coordinate of the support extent.",
            "examples": [
              0.0
            ],
            "title": "Ymin",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "crs": {
            "default": "EPSG:2154",
            "description": "Projected CRS attached to synthetic outputs.",
            "examples": [
              "EPSG:2154"
            ],
            "title": "Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "nodata": {
            "default": -9999.0,
            "description": "Nodata sentinel exported to raster artefacts.",
            "examples": [
              -9999.0
            ],
            "title": "Nodata",
            "type": "number",
            "x-hmp-profile": "dev"
          }
        },
        "title": "SyntheticGridConfig",
        "type": "object"
      },
      "TMeshConfig": {
        "additionalProperties": false,
        "description": "Validated input model for ``TmeshGenerator`` settings.",
        "properties": {
          "itmuni": {
            "default": "d",
            "description": "Time unit used to interpret lenper values. In launcher mode stress periods come from [simulation.time], so this field is mirrored only for compatibility.",
            "examples": [
              "d"
            ],
            "title": "Itmuni",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "genmtd": {
            "default": "synthetic_regular",
            "description": "Temporal generation method. In launcher mode stress periods come from [simulation.time], so this field is mirrored only for compatibility.",
            "enum": [
              "synthetic_regular",
              "from_chron"
            ],
            "examples": [
              "synthetic_regular"
            ],
            "title": "Genmtd",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "nper": {
            "default": 1,
            "description": "Stress-period count. In launcher mode this is mirrored from [simulation.time] and is not the authoritative source.",
            "examples": [
              1
            ],
            "exclusiveMinimum": 0,
            "title": "Nper",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "lenper": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "items": {
                  "type": "integer"
                },
                "type": "array"
              },
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": 1,
            "description": "Stress-period length(s) interpreted with itmuni. Scalar means one regular step length repeated nper times; list means one explicit value per stress period. In launcher mode this is mirrored from [simulation.time] and is not the authoritative source.",
            "examples": [
              1
            ],
            "title": "Lenper",
            "x-hmp-profile": "user"
          },
          "chron_path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Chronicle file path used when genmtd='from_chron'. In launcher mode this field is generally not used.",
            "title": "Chron Path",
            "x-hmp-profile": "user"
          },
          "chron_dateformat": {
            "default": "%Y-%m-%d %H:%M:%S",
            "description": "Date format string used to parse the chronicle file.",
            "examples": [
              "%Y-%m-%d %H:%M:%S"
            ],
            "title": "Chron Dateformat",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "chron_colsep": {
            "default": "\t",
            "description": "Column separator used in the chronicle file.",
            "examples": [
              "\t"
            ],
            "title": "Chron Colsep",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "chron_time_col": {
            "default": "Date",
            "description": "Name of the time/date column in the chronicle file.",
            "examples": [
              "Date"
            ],
            "title": "Chron Time Col",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "start_datetime": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Lower datetime bound used by the temporal mesh. In launcher mode this field is mirrored from [simulation.time] and is not the authoritative source.",
            "title": "Start Datetime",
            "x-hmp-profile": "user"
          },
          "end_datetime": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Upper datetime bound used by the temporal mesh. In launcher mode this field is mirrored from [simulation.time] and is not the authoritative source.",
            "title": "End Datetime",
            "x-hmp-profile": "user"
          },
          "tsmult": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "items": {
                  "type": "integer"
                },
                "type": "array"
              },
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              }
            ],
            "default": 1,
            "description": "Time-step multiplier per stress period (scalar or list). In launcher mode this field is currently forced to 1.0 and generally not intended for manual editing.",
            "examples": [
              1
            ],
            "title": "Tsmult",
            "x-hmp-profile": "dev"
          },
          "ntsp": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "items": {
                  "type": "integer"
                },
                "type": "array"
              }
            ],
            "default": 1,
            "description": "Number of time steps per stress period (scalar or list). In launcher mode this field is currently forced to 1 and generally not intended for manual editing.",
            "examples": [
              1
            ],
            "title": "Ntsp",
            "x-hmp-profile": "dev"
          },
          "temporal_nodata": {
            "default": -9999.0,
            "description": "No-data sentinel value for temporal data.",
            "examples": [
              -9999.0
            ],
            "title": "Temporal Nodata",
            "type": "number",
            "x-hmp-profile": "dev"
          }
        },
        "title": "TMeshConfig",
        "type": "object"
      },
      "TemperatureConfig": {
        "additionalProperties": false,
        "description": "Top-level air-temperature configuration.\n\nThe section groups temperature sources and an optional date window. Loaded\ndata can support atmospheric forcing, HELP coupling, and diagnostic\nanalyses.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/TemperatureSourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "TemperatureConfig",
        "type": "object"
      },
      "TemperatureSourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one air-temperature data source.\n\nTemperature sources load station or gridded air-temperature time series\nfrom custom files or SIM2 EDR products. Source-level fields define file\npaths, station columns, masks, units, and cache refresh behavior.",
        "properties": {
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user CSV files, 'sim2' for SIM2 EDR API.",
            "enum": [
              "custom",
              "sim2"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs, or a single .nc/.tif file.",
            "title": "Path",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "source"
        ],
        "title": "TemperatureSourceConfig",
        "type": "object"
      },
      "TerritoryConfig": {
        "additionalProperties": false,
        "description": "Spatial domain where candidate basins are searched.",
        "properties": {
          "mode": {
            "default": "bbox",
            "description": "Territory resolver mode.",
            "enum": [
              "admin_regions",
              "admin_departments",
              "polygon_file",
              "bbox"
            ],
            "examples": [
              "admin_regions"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Country code used by administrative territory modes.",
            "title": "Country",
            "x-hmp-profile": "user"
          },
          "regions": {
            "description": "Administrative regions used when mode='admin_regions'.",
            "items": {
              "type": "string"
            },
            "title": "Regions",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "departments": {
            "description": "Administrative departments used when mode='admin_departments'.",
            "items": {
              "type": "string"
            },
            "title": "Departments",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "polygon_file": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "User polygon file used when mode='polygon_file'.",
            "title": "Polygon File",
            "x-hmp-profile": "user"
          },
          "bbox": {
            "anyOf": [
              {
                "maxItems": 4,
                "minItems": 4,
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Territory bounds as xmin, ymin, xmax, ymax.",
            "title": "Bbox",
            "x-hmp-profile": "user"
          },
          "clip_to_territory": {
            "default": true,
            "description": "Clip candidate basins or outlets to the requested territory.",
            "examples": [
              true
            ],
            "title": "Clip To Territory",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "TerritoryConfig",
        "type": "object"
      },
      "TestbedCaseConfig": {
        "additionalProperties": false,
        "description": "One concrete executable testbed case.",
        "properties": {
          "id": {
            "description": "Stable case identifier.",
            "examples": [
              "example"
            ],
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "label": {
            "description": "Human-readable case label.",
            "examples": [
              "example"
            ],
            "title": "Label",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "axis": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional axis tag used to group cases in reports.",
            "title": "Axis",
            "x-hmp-profile": "user"
          },
          "enabled": {
            "default": true,
            "description": "Toggle to skip a case without removing it from the config.",
            "examples": [
              true
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "overlay": {
            "additionalProperties": true,
            "description": "TOML overlay merged into the child-runner base config.",
            "title": "Overlay",
            "type": "object",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "id",
          "label"
        ],
        "title": "TestbedCaseConfig",
        "type": "object"
      },
      "TestbedCatalogCaseConfig": {
        "additionalProperties": false,
        "description": "One case-generation rule applied to rows from a testbed catalog.",
        "properties": {
          "id_template": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Format string evaluated against catalog row fields to derive the case id.",
            "title": "Id Template",
            "x-hmp-profile": "user"
          },
          "label_template": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Format string used to derive the case label.",
            "title": "Label Template",
            "x-hmp-profile": "user"
          },
          "axis_template": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Format string used to derive the optional axis tag.",
            "title": "Axis Template",
            "x-hmp-profile": "user"
          },
          "enabled": {
            "default": true,
            "description": "Toggle to skip the rule without removing it from the config.",
            "examples": [
              true
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "overlay": {
            "additionalProperties": true,
            "description": "TOML overlay rendered against each catalog row.",
            "title": "Overlay",
            "type": "object",
            "x-hmp-profile": "user"
          },
          "required_fields": {
            "default": [],
            "description": "Catalog columns that must be present and non-empty per row.",
            "items": {
              "type": "string"
            },
            "title": "Required Fields",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "field_equals": {
            "default": [],
            "description": "Per-field equality filters applied while expanding rows.",
            "items": {
              "maxItems": 2,
              "minItems": 2,
              "prefixItems": [
                {
                  "type": "string"
                },
                {
                  "type": "string"
                }
              ],
              "type": "array"
            },
            "title": "Field Equals",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "tags": {
            "default": [],
            "description": "Whitelist of tags applied during rule expansion.",
            "items": {
              "type": "string"
            },
            "title": "Tags",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "exclude_tags": {
            "default": [],
            "description": "Blacklist of tags applied during rule expansion.",
            "items": {
              "type": "string"
            },
            "title": "Exclude Tags",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "limit": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional cap on the number of cases generated by the rule.",
            "title": "Limit",
            "x-hmp-profile": "user"
          }
        },
        "title": "TestbedCatalogCaseConfig",
        "type": "object"
      },
      "TestbedCatalogConfig": {
        "additionalProperties": false,
        "description": "Catalog source used to generate testbed cases.",
        "properties": {
          "path": {
            "description": "Resolved path to the case catalog (CSV or JSONL).",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "format": {
            "default": "auto",
            "description": "Catalog format. 'auto' infers from the file suffix.",
            "examples": [
              "auto"
            ],
            "title": "Format",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "id_field": {
            "default": "case_id",
            "description": "Column carrying the case identifier.",
            "examples": [
              "case_id"
            ],
            "title": "Id Field",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "label_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "case_label",
            "description": "Column carrying a human-readable case label.",
            "examples": [
              "case_label"
            ],
            "title": "Label Field",
            "x-hmp-profile": "user"
          },
          "axis_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "axis",
            "description": "Column carrying the optional axis tag.",
            "examples": [
              "axis"
            ],
            "title": "Axis Field",
            "x-hmp-profile": "user"
          },
          "enabled_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "enabled",
            "description": "Column flagging whether a row is active.",
            "examples": [
              "enabled"
            ],
            "title": "Enabled Field",
            "x-hmp-profile": "user"
          },
          "tags_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "tags",
            "description": "Column carrying free-form tags joined by tag_separator.",
            "examples": [
              "tags"
            ],
            "title": "Tags Field",
            "x-hmp-profile": "user"
          },
          "required_fields": {
            "default": [],
            "description": "Columns that must be present and non-empty per row.",
            "items": {
              "type": "string"
            },
            "title": "Required Fields",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "path_fields": {
            "default": [],
            "description": "Columns whose values are resolved as filesystem paths.",
            "items": {
              "type": "string"
            },
            "title": "Path Fields",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "tag_separator": {
            "default": ";",
            "description": "Separator splitting the tags column into individual tags.",
            "examples": [
              ";"
            ],
            "title": "Tag Separator",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "field_equals": {
            "default": [],
            "description": "Per-field equality filters applied during catalog selection.",
            "items": {
              "maxItems": 2,
              "minItems": 2,
              "prefixItems": [
                {
                  "type": "string"
                },
                {
                  "type": "string"
                }
              ],
              "type": "array"
            },
            "title": "Field Equals",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "tags": {
            "default": [],
            "description": "Whitelist of tags. Empty disables the filter.",
            "items": {
              "type": "string"
            },
            "title": "Tags",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "exclude_tags": {
            "default": [],
            "description": "Blacklist of tags applied after the whitelist.",
            "items": {
              "type": "string"
            },
            "title": "Exclude Tags",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "include_disabled": {
            "default": false,
            "description": "When true, rows flagged as disabled are kept.",
            "examples": [
              false
            ],
            "title": "Include Disabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "limit": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional cap on the number of selected rows.",
            "title": "Limit",
            "x-hmp-profile": "user"
          },
          "source_manifest_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional site-selection manifest used to resolve the catalog path.",
            "title": "Source Manifest Path",
            "x-hmp-profile": "user"
          },
          "source_manifest_output_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Output key read from the site-selection manifest.",
            "title": "Source Manifest Output Key",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "path"
        ],
        "title": "TestbedCatalogConfig",
        "type": "object"
      },
      "TestbedConfig": {
        "additionalProperties": false,
        "description": "Validated configuration for one method testbed.",
        "properties": {
          "config_path": {
            "description": "Resolved path of the TOML file that produced this config.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Config Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "base_dir": {
            "description": "Directory used to resolve relative paths.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Base Dir",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "id": {
            "description": "Stable testbed identifier.",
            "examples": [
              "example"
            ],
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "profile": {
            "description": "Selected testbed profile.",
            "examples": [
              "example"
            ],
            "title": "Profile",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "subject": {
            "description": "High-level subject covered by the testbed (flow, mesh, transport).",
            "examples": [
              "example"
            ],
            "title": "Subject",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "purpose": {
            "description": "Stated purpose of the testbed (robustness, sensitivity, ...).",
            "examples": [
              "example"
            ],
            "title": "Purpose",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "output_root": {
            "description": "Directory where testbed artifacts are written.",
            "examples": [
              "data/input.csv"
            ],
            "format": "path",
            "title": "Output Root",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "execute": {
            "default": true,
            "description": "When false, child configs are materialized but not executed.",
            "examples": [
              true
            ],
            "title": "Execute",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "continue_on_error": {
            "default": true,
            "description": "When false, the first failure aborts the testbed.",
            "examples": [
              true
            ],
            "title": "Continue On Error",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "base_config_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional child workflow TOML used as the case base config.",
            "title": "Base Config Path",
            "x-hmp-profile": "user"
          },
          "runner": {
            "$ref": "#/components/schemas/TestbedRunnerConfig",
            "description": "Child-runner selection for every case.",
            "x-hmp-profile": "user"
          },
          "case": {
            "default": [],
            "description": "Explicit executable cases declared in the TOML.",
            "items": {
              "$ref": "#/components/schemas/TestbedCaseConfig"
            },
            "title": "Case",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "catalog": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TestbedCatalogConfig"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional catalog source used to expand cases from rows.",
            "x-hmp-profile": "user"
          },
          "case_from_catalog": {
            "default": [],
            "description": "Case-generation rules applied to catalog rows.",
            "items": {
              "$ref": "#/components/schemas/TestbedCatalogCaseConfig"
            },
            "title": "Case From Catalog",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "metrics": {
            "default": [],
            "description": "Metrics extracted from each child-runner summary.",
            "items": {
              "$ref": "#/components/schemas/TestbedMetricConfig"
            },
            "title": "Metrics",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "config_path",
          "base_dir",
          "id",
          "profile",
          "subject",
          "purpose",
          "output_root",
          "runner"
        ],
        "title": "TestbedConfig",
        "type": "object"
      },
      "TestbedMetricConfig": {
        "additionalProperties": false,
        "description": "One metric extracted from a child-runner summary.",
        "properties": {
          "name": {
            "description": "Metric column name.",
            "examples": [
              "example"
            ],
            "title": "Name",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "source": {
            "description": "Dotted path into the child-runner summary.",
            "examples": [
              "example"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "required": {
            "default": false,
            "description": "When true, a missing metric fails the case.",
            "examples": [
              false
            ],
            "title": "Required",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "name",
          "source"
        ],
        "title": "TestbedMetricConfig",
        "type": "object"
      },
      "TestbedRunnerConfig": {
        "additionalProperties": false,
        "description": "Child-runner selection for one testbed.",
        "properties": {
          "type": {
            "description": "Runner identifier dispatched for every case (comparison, simulation).",
            "examples": [
              "example"
            ],
            "title": "Type",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "no_display": {
            "default": true,
            "description": "Disable interactive display in child runners.",
            "examples": [
              true
            ],
            "title": "No Display",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "type"
        ],
        "title": "TestbedRunnerConfig",
        "type": "object"
      },
      "TransportConfig": {
        "additionalProperties": false,
        "description": "Transport-process configuration.",
        "properties": {
          "param_list": {
            "description": "Inherited generic parameter list (excluded from transport serialization).",
            "items": {
              "type": "string"
            },
            "title": "Param List",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "param": {
            "additionalProperties": true,
            "description": "Inherited generic parameter map (excluded from transport serialization).",
            "title": "Param",
            "type": "object",
            "x-hmp-profile": "user"
          },
          "ic": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Inherited initial-condition payload (excluded from transport serialization).",
            "title": "Ic",
            "x-hmp-profile": "user"
          },
          "bc": {
            "additionalProperties": true,
            "description": "Inherited boundary-condition map (excluded from transport serialization).",
            "title": "Bc",
            "type": "object",
            "x-hmp-profile": "user"
          },
          "sinks_sources": {
            "additionalProperties": true,
            "description": "Inherited sinks/sources map (excluded from transport serialization).",
            "title": "Sinks Sources",
            "type": "object",
            "x-hmp-profile": "user"
          },
          "active_sinks_sources": {
            "description": "Ordered list of sink/source identifiers that are explicitly activated for this process. An empty list means no sink/source is active. Concrete process configs (e.g. FlowConfig) validate the allowed values.",
            "items": {
              "type": "string"
            },
            "title": "Active Sinks Sources",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "active_bc": {
            "description": "Ordered list of boundary-condition identifiers that are explicitly activated for this process. An empty list means no boundary-condition package is assembled. Concrete process configs (e.g. FlowConfig) validate the allowed values.",
            "items": {
              "type": "string"
            },
            "title": "Active Bc",
            "type": "array",
            "x-hmp-profile": "user"
          },
          "modpath": {
            "$ref": "#/components/schemas/TransportModpathConfig",
            "description": "Modpath solver configuration block.",
            "x-hmp-profile": "user"
          },
          "mt3dms": {
            "$ref": "#/components/schemas/TransportMt3dmsConfig",
            "description": "MT3DMS solver configuration block.",
            "x-hmp-profile": "user"
          },
          "modflow6gwt": {
            "$ref": "#/components/schemas/TransportModflow6GwtConfig",
            "description": "MODFLOW 6 GWT solver configuration block.",
            "x-hmp-profile": "user"
          },
          "modflow6prt": {
            "$ref": "#/components/schemas/TransportModflow6PrtConfig",
            "description": "MODFLOW 6 PRT particle-tracking solver configuration block.",
            "x-hmp-profile": "user"
          }
        },
        "title": "TransportConfig",
        "type": "object"
      },
      "TransportModflow6GwtConfig": {
        "additionalProperties": false,
        "description": "Container for MODFLOW 6 GWT solver settings.",
        "properties": {
          "parameters": {
            "$ref": "#/components/schemas/ConcentrationTransportParametersConfig",
            "description": "Solver parameter block used by Modflow6Transport.",
            "x-hmp-profile": "user"
          }
        },
        "title": "TransportModflow6GwtConfig",
        "type": "object"
      },
      "TransportModflow6PrtConfig": {
        "additionalProperties": false,
        "description": "Container for MODFLOW 6 PRT particle-tracking settings.",
        "properties": {
          "parameters": {
            "$ref": "#/components/schemas/Modflow6PrtParametersConfig",
            "description": "Solver parameter block used by Modflow6Prt.",
            "x-hmp-profile": "user"
          }
        },
        "title": "TransportModflow6PrtConfig",
        "type": "object"
      },
      "TransportModpathConfig": {
        "additionalProperties": false,
        "description": "Container for Modpath solver settings.",
        "properties": {
          "parameters": {
            "$ref": "#/components/schemas/ModpathParametersConfig",
            "description": "Solver parameter block used by Modpath.",
            "x-hmp-profile": "user"
          }
        },
        "title": "TransportModpathConfig",
        "type": "object"
      },
      "TransportMt3dmsConfig": {
        "additionalProperties": false,
        "description": "Container for MT3DMS solver settings.",
        "properties": {
          "parameters": {
            "$ref": "#/components/schemas/ConcentrationTransportParametersConfig",
            "description": "Solver parameter block used by Mt3dms.",
            "x-hmp-profile": "user"
          }
        },
        "title": "TransportMt3dmsConfig",
        "type": "object"
      },
      "TransportProcessConfig": {
        "additionalProperties": false,
        "description": "``[[simulation.process]]`` entry for a transport process.",
        "properties": {
          "id": {
            "description": "User-facing identifier for the process. This id is required and must be unique within the simulation.",
            "examples": [
              "flow_main"
            ],
            "pattern": "^[a-z][a-z0-9_]*$",
            "title": "Id",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "type": {
            "const": "transport",
            "default": "transport",
            "description": "Discriminator selecting the 'transport' process family.",
            "examples": [
              "transport"
            ],
            "title": "Type",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "solvers": {
            "description": "Ordered list of active transport solver names. At least one solver is required for transport processes.",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "title": "Solvers",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "id",
          "solvers"
        ],
        "title": "TransportProcessConfig",
        "type": "object"
      },
      "TxtCatchDef": {
        "additionalProperties": false,
        "description": "Model domain defined from an XYZ text grid plus a cell size.",
        "properties": {
          "dem_init_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Path to the DEM raster used as input. For 'dem' and 'txt' modes: defines the model domain directly. For 'from_outlet_coord' and 'from_polyg_shp' modes: regional DEM used for flow analysis. May be left absent when [data.dem.sources] declares the DEM.",
            "title": "Dem Init Path",
            "x-hmp-profile": "user"
          },
          "catch_def": {
            "const": "txt",
            "default": "txt",
            "description": "Catchment defined from an XYZ text grid (cell_size required).",
            "examples": [
              "txt"
            ],
            "title": "Catch Def",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "cell_size": {
            "description": "Grid cell size in metres used to rasterise the XYZ point cloud. Accepts inline units (e.g. '25 m', '0.025 km').",
            "examples": [
              1.0
            ],
            "exclusiveMinimum": 0,
            "title": "Cell Size",
            "type": "number",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "cell_size"
        ],
        "title": "TxtCatchDef",
        "type": "object"
      },
      "UpwConfig": {
        "additionalProperties": false,
        "description": "UPW package settings.",
        "properties": {
          "iphdry": {
            "default": 1,
            "description": "UPW dry-cell head output flag (IPHDRY).",
            "examples": [
              1
            ],
            "title": "Iphdry",
            "type": "integer",
            "x-hmp-profile": "expert"
          },
          "hdry": {
            "default": -100.0,
            "description": "UPW dry-cell head value (HDRY).",
            "examples": [
              -100.0
            ],
            "title": "Hdry",
            "type": "number",
            "x-hmp-profile": "expert"
          },
          "layvka": {
            "default": 1,
            "description": "UPW flag controlling VKA interpretation per layer (LAYVKA).",
            "examples": [
              1
            ],
            "title": "Layvka",
            "type": "integer",
            "x-hmp-profile": "expert"
          }
        },
        "title": "UpwConfig",
        "type": "object"
      },
      "VerticalGridConfig": {
        "additionalProperties": false,
        "description": "Single source of truth for vertical-grid validation.\n\nThis model is used by surface-driven SGrid generation:\n- layering strategy (`genmtd_lay`),\n- layer count or proportions,\n- nodata masking metadata.\n\nAll geometric quantities are interpreted in SI metres.",
        "properties": {
          "genmtd_lay": {
            "default": "constant",
            "description": "Vertical-layering strategy.",
            "enum": [
              "constant",
              "decay",
              "list"
            ],
            "examples": [
              "constant"
            ],
            "title": "Genmtd Lay",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "nlay": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": 1,
            "description": "Number of layers (required for constant/decay, ignored for list).",
            "examples": [
              1
            ],
            "title": "Nlay",
            "x-hmp-profile": "user"
          },
          "lay_decay": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Decay exponent (>1) for decay layering.",
            "title": "Lay Decay",
            "x-hmp-profile": "dev"
          },
          "lay_proportions": {
            "anyOf": [
              {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit layer fractions when genmtd_lay='list' (must sum to 1).",
            "title": "Lay Proportions",
            "x-hmp-profile": "dev"
          },
          "nodata": {
            "default": -9999.0,
            "description": "No-data sentinel value.",
            "examples": [
              -9999.0
            ],
            "title": "Nodata",
            "type": "number",
            "x-hmp-profile": "dev"
          }
        },
        "title": "VerticalGridConfig",
        "type": "object"
      },
      "WaterQualityConfig": {
        "additionalProperties": false,
        "description": "Top-level water quality configuration.\n\nThe section groups water-quality sources and an optional date window. It is\ndesigned for post-processing, model evaluation, and calibration workflows\nthat compare simulated variables against observed chemistry.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/WaterQualitySourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "WaterQualityConfig",
        "type": "object"
      },
      "WaterQualitySourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one water quality data source.\n\nWater-quality sources load physico-chemical observations for river or\npiezometer sites. The source selects local files or Hub'Eau, optional\nparameter filters, station filters, and spatial discovery rules.",
        "properties": {
          "fallback_search_radius_km": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Maximum search radius (km) used to find a fallback station when no observation is available inside the requested bbox.",
            "title": "Fallback Search Radius Km",
            "x-hmp-profile": "dev"
          },
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user files, 'hubeau' for Hub'Eau API.",
            "enum": [
              "custom",
              "hubeau"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "site_type": {
            "default": "river",
            "description": "Type of site: 'river' (qualite_rivieres) or 'piezometer' (qualite_nappes).",
            "enum": [
              "river",
              "piezometer"
            ],
            "examples": [
              "river"
            ],
            "title": "Site Type",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "parameters": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Parameters to keep (e.g. ['pH', 'Nitrates']). None = all parameters.",
            "title": "Parameters",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "nearest": {
            "default": false,
            "description": "Keep only the nearest station to the extent centroid.",
            "examples": [
              false
            ],
            "title": "Nearest",
            "type": "boolean",
            "x-hmp-profile": "dev"
          }
        },
        "required": [
          "source"
        ],
        "title": "WaterQualitySourceConfig",
        "type": "object"
      },
      "WelConfig": {
        "additionalProperties": false,
        "description": "WEL package settings.",
        "properties": {
          "ipakcb": {
            "default": 1,
            "description": "WEL cell-by-cell budget output flag (IPAKCB).",
            "examples": [
              1
            ],
            "title": "Ipakcb",
            "type": "integer",
            "x-hmp-profile": "expert"
          }
        },
        "title": "WelConfig",
        "type": "object"
      },
      "WindConfig": {
        "additionalProperties": false,
        "description": "Top-level wind-speed configuration.\n\nThe section groups wind sources and an optional date window. Loaded data can\nsupport atmospheric forcing, evapotranspiration context, and HELP coupling.",
        "properties": {
          "date_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project start date (ISO format, e.g. '2019-01-01').",
            "examples": [
              "2019-01-01"
            ],
            "title": "Date Start",
            "x-hmp-profile": "user"
          },
          "date_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Project end date (ISO format, e.g. '2025-12-31').",
            "examples": [
              "2025-12-31"
            ],
            "title": "Date End",
            "x-hmp-profile": "user"
          },
          "sources": {
            "description": "At least one data source.",
            "items": {
              "$ref": "#/components/schemas/WindSourceConfig"
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "WindConfig",
        "type": "object"
      },
      "WindSourceConfig": {
        "additionalProperties": false,
        "description": "Configuration for one wind-speed data source.\n\nWind sources load station or gridded wind-speed time series from custom\nfiles or SIM2 EDR products. Source-level fields define file paths, station\ncolumns, masks, units, and cache refresh behavior.",
        "properties": {
          "station_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit station identifiers to load (custom source).",
            "title": "Station Ids",
            "x-hmp-profile": "user"
          },
          "extent": {
            "anyOf": [
              {
                "enum": [
                  "watershed",
                  "study_area"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Enable bounding-box data retrieval using the project extent. ``watershed`` uses the delineated watershed, ``study_area`` uses the broader study bounding box.",
            "title": "Extent",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore the cache and force a fresh download from the API.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "mask_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional SHP/GPKG/GeoJSON/TIF mask to spatially filter stations or clip gridded sources.",
            "title": "Mask Path",
            "x-hmp-profile": "user"
          },
          "source_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional source unit for custom gridded .nc/.tif inputs. When omitted for NetCDF, units are inferred from variable metadata.",
            "title": "Source Unit",
            "x-hmp-profile": "user"
          },
          "col_id": {
            "default": "id",
            "description": "Column name for the station identifier in location files.",
            "examples": [
              "id"
            ],
            "title": "Col Id",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_x": {
            "default": "x",
            "description": "Column name for the X coordinate in location files.",
            "examples": [
              "x"
            ],
            "title": "Col X",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_y": {
            "default": "y",
            "description": "Column name for the Y coordinate in location files.",
            "examples": [
              "y"
            ],
            "title": "Col Y",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_crs": {
            "default": "crs",
            "description": "Column name for the CRS in location files.",
            "examples": [
              "crs"
            ],
            "title": "Col Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_datetime": {
            "default": "datetime",
            "description": "Column name for timestamps in chronicle CSVs.",
            "examples": [
              "datetime"
            ],
            "title": "Col Datetime",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "col_value": {
            "default": "value",
            "description": "Column name for numeric values in chronicle CSVs.",
            "examples": [
              "value"
            ],
            "title": "Col Value",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "default_crs": {
            "default": "EPSG:4326",
            "description": "Default CRS used when a location file omits the CRS column.",
            "examples": [
              "EPSG:4326"
            ],
            "title": "Default Crs",
            "type": "string",
            "x-hmp-profile": "dev"
          },
          "source": {
            "description": "Data provider: 'custom' for user CSV files, 'sim2' for SIM2 EDR API.",
            "enum": [
              "custom",
              "sim2"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Directory containing location file and chronicle CSVs, or a single .nc/.tif file.",
            "title": "Path",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "source"
        ],
        "title": "WindSourceConfig",
        "type": "object"
      },
      "WorkflowConfig": {
        "additionalProperties": false,
        "description": "Workflow selector configuration.",
        "properties": {
          "mode": {
            "description": "Workflow mode dispatched by `hmp run`.",
            "enum": [
              "simulation",
              "calibration",
              "overview",
              "comparison",
              "testbed",
              "site_selection"
            ],
            "examples": [
              "simulation"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "mode"
        ],
        "title": "WorkflowConfig",
        "type": "object"
      },
      "WorkspaceConfig": {
        "additionalProperties": false,
        "description": "Strict-binary workspace configuration.\n\nThe canonical workspace layout is::\n\n    <workspace>/\n        workspace.toml\n        data/\n            cache.duckdb\n        projects/\n            <name>/\n                hydromodpy.toml   <- TOML lives here when using scaffold\n                catalog.duckdb\n                simulations/\n                    <basename>.zarr/ or <basename>.zarr.zip\n\nFields under ``[workspace]``:\n\n``project_root`` (required)\n    Directory of the project TOML. Usually auto-derived from the TOML\n    location by the loader.\n\n``root`` (explicit workspace override)\n    When set, the shared data workspace root. Derives ``data_dir``\n    unless it is explicitly overridden.\n\n``catalog_path`` / ``data_dir`` / ``simulations_dir``\n    Per-component explicit overrides. ``catalog_path`` and\n    ``simulations_dir`` are project-local by default.\n\n``output_root``\n    Optional redirect for heavy outputs (``.solver_scratch/`` and\n    per-run ``figures/``). Defaults to ``project_root``.",
        "properties": {
          "project_root": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "string"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "path": {
                    "title": "Path",
                    "type": "string"
                  },
                  "protocol": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "title": "Protocol"
                  },
                  "storage_options": {
                    "additionalProperties": true,
                    "title": "Storage Options",
                    "type": "object"
                  }
                },
                "required": [
                  "path"
                ],
                "type": "object"
              }
            ],
            "description": "Path to the project directory. Required in TOML configs.",
            "examples": [
              "."
            ],
            "title": "Project Root",
            "x-hmp-profile": "user"
          },
          "root": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "string"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "path": {
                    "title": "Path",
                    "type": "string"
                  },
                  "protocol": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "title": "Protocol"
                  },
                  "storage_options": {
                    "additionalProperties": true,
                    "title": "Storage Options",
                    "type": "object"
                  }
                },
                "required": [
                  "path"
                ],
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit shared data workspace root. When set, derives data_dir unless it is overridden. Result catalogs stay project-local by default.",
            "examples": [
              "../.."
            ],
            "title": "Root",
            "x-hmp-profile": "user"
          },
          "catalog_path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit path to the project catalog.duckdb. Defaults to <project_root>/catalog.duckdb.",
            "title": "Catalog Path",
            "x-hmp-profile": "dev"
          },
          "data_dir": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit path to the workspace data directory. Defaults to <root>/data.",
            "title": "Data Dir",
            "x-hmp-profile": "dev"
          },
          "simulations_dir": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Explicit path to the simulations Zarr directory. Defaults to <project_root>/simulations.",
            "title": "Simulations Dir",
            "x-hmp-profile": "dev"
          },
          "output_root": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Root directory for per-project outputs (.solver_scratch/, figures/). Defaults to project_root when not set. Use this to redirect heavy outputs to a separate disk.",
            "examples": [
              "outputs/run_a"
            ],
            "title": "Output Root",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "project_root"
        ],
        "title": "WorkspaceConfig",
        "type": "object"
      },
      "ZoneMeshingDomainBBox": {
        "additionalProperties": false,
        "description": "Axis-aligned bounding box domain contract.",
        "properties": {
          "kind": {
            "const": "bbox",
            "default": "bbox",
            "examples": [
              "bbox"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "bbox": {
            "items": {
              "type": "number"
            },
            "title": "Bbox",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "bbox"
        ],
        "title": "ZoneMeshingDomainBBox",
        "type": "object"
      },
      "ZoneMeshingDomainGeographicBoxBuffer": {
        "additionalProperties": false,
        "description": "Domain resolved from ``domain_geographic.box_buff_shp``.",
        "properties": {
          "kind": {
            "const": "geographic_box_buffer",
            "default": "geographic_box_buffer",
            "examples": [
              "geographic_box_buffer"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "ZoneMeshingDomainGeographicBoxBuffer",
        "type": "object"
      },
      "ZoneMeshingDomainGeographicWatershed": {
        "additionalProperties": false,
        "description": "Domain resolved from ``domain_geographic.watershed_shp``.",
        "properties": {
          "kind": {
            "const": "geographic_watershed",
            "default": "geographic_watershed",
            "examples": [
              "geographic_watershed"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "ZoneMeshingDomainGeographicWatershed",
        "type": "object"
      },
      "ZoneMeshingDomainGeographicWatershedBox": {
        "additionalProperties": false,
        "description": "Domain resolved from ``domain_geographic.watershed_box_shp``.",
        "properties": {
          "kind": {
            "const": "geographic_watershed_box",
            "default": "geographic_watershed_box",
            "examples": [
              "geographic_watershed_box"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          }
        },
        "title": "ZoneMeshingDomainGeographicWatershedBox",
        "type": "object"
      },
      "ZoneMeshingDomainPolygon": {
        "additionalProperties": false,
        "description": "Inline polygon coordinates domain contract.",
        "properties": {
          "kind": {
            "const": "polygon",
            "default": "polygon",
            "examples": [
              "polygon"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "coordinates": {
            "items": {
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            "title": "Coordinates",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "coordinates"
        ],
        "title": "ZoneMeshingDomainPolygon",
        "type": "object"
      },
      "ZoneMeshingDomainVector": {
        "additionalProperties": false,
        "description": "Vector file domain contract.",
        "properties": {
          "kind": {
            "const": "vector",
            "default": "vector",
            "examples": [
              "vector"
            ],
            "title": "Kind",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "examples": [
              "example"
            ],
            "title": "Path",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "id_field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional vector attribute field name used to filter features.",
            "title": "Id Field",
            "x-hmp-profile": "user"
          },
          "selected_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional value of id_field that selects a single feature in the vector source.",
            "title": "Selected Id",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "path"
        ],
        "title": "ZoneMeshingDomainVector",
        "type": "object"
      },
      "ZoneMeshingRefinementFamilySettings": {
        "additionalProperties": false,
        "description": "One family-specific refinement override inside the hotspot policy.",
        "properties": {
          "enabled": {
            "default": true,
            "description": "If False, this family is parsed but skipped during refinement.",
            "examples": [
              true
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "priority": {
            "default": 0,
            "description": "Application order between families. Higher values win when budgets compete.",
            "examples": [
              0
            ],
            "title": "Priority",
            "type": "integer",
            "x-hmp-profile": "user"
          },
          "interface_size": {
            "anyOf": [
              {
                "description": "Non-negative floating-point value.",
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Override target cell size at the family interface, in projected metres.",
            "title": "Interface Size",
            "x-hmp-profile": "dev"
          },
          "interface_distance": {
            "anyOf": [
              {
                "description": "Non-negative floating-point value.",
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Override influence distance from the family interface, in projected metres.",
            "title": "Interface Distance",
            "x-hmp-profile": "dev"
          },
          "interface_sampling": {
            "anyOf": [
              {
                "minimum": 2,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Override the number of sampled points along the family interface (>=2).",
            "title": "Interface Sampling",
            "x-hmp-profile": "dev"
          }
        },
        "title": "ZoneMeshingRefinementFamilySettings",
        "type": "object"
      },
      "ZoneMeshingRefinementGridSettings": {
        "additionalProperties": false,
        "description": "Validated grid settings for one locality-first refinement policy.",
        "properties": {
          "cell_size": {
            "anyOf": [
              {
                "description": "Positive floating-point value.",
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Target cell size in projected metres. None lets the mesher derive a default from constraints.",
            "title": "Cell Size",
            "x-hmp-profile": "user"
          },
          "neighborhood_rings": {
            "default": 1,
            "description": "Number of cell rings inspected around each hotspot when projecting refinement budget.",
            "examples": [
              1
            ],
            "exclusiveMinimum": 0,
            "title": "Neighborhood Rings",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "enable_exact_gap_check": {
            "default": true,
            "description": "If True, run the exact pairwise gap check between candidate hotspot curves.",
            "examples": [
              true
            ],
            "title": "Enable Exact Gap Check",
            "type": "boolean",
            "x-hmp-profile": "dev"
          },
          "max_exact_gap_candidates": {
            "default": 256,
            "description": "Cap on the number of curves submitted to the exact gap check before falling back to a heuristic.",
            "examples": [
              256
            ],
            "exclusiveMinimum": 0,
            "title": "Max Exact Gap Candidates",
            "type": "integer",
            "x-hmp-profile": "dev"
          }
        },
        "title": "ZoneMeshingRefinementGridSettings",
        "type": "object"
      },
      "ZoneMeshingRefinementHotspotSettings": {
        "additionalProperties": false,
        "description": "Validated hotspot-detection thresholds for local refinement budgeting.",
        "properties": {
          "radius": {
            "anyOf": [
              {
                "description": "Non-negative floating-point value.",
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Hotspot detection radius in projected metres. None lets the mesher derive a default.",
            "title": "Radius",
            "x-hmp-profile": "dev"
          },
          "max_curve_count": {
            "default": 180,
            "description": "Maximum number of constraint curves admitted in one hotspot before triggering local refinement.",
            "examples": [
              180
            ],
            "exclusiveMinimum": 0,
            "title": "Max Curve Count",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "max_family_count": {
            "default": 2,
            "description": "Maximum number of distinct constraint families coexisting in one hotspot.",
            "examples": [
              2
            ],
            "exclusiveMinimum": 0,
            "title": "Max Family Count",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "min_gap": {
            "default": 80.0,
            "description": "Minimum acceptable gap between non-conformal curves in projected metres.",
            "examples": [
              80.0
            ],
            "minimum": 0.0,
            "title": "Min Gap",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "max_node_degree": {
            "default": 4,
            "description": "Maximum tolerated topological degree at a hotspot junction node.",
            "examples": [
              4
            ],
            "exclusiveMinimum": 0,
            "title": "Max Node Degree",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "short_segment_length": {
            "default": 120.0,
            "description": "Length threshold below which a constraint segment is counted as short, in projected metres.",
            "examples": [
              120.0
            ],
            "minimum": 0.0,
            "title": "Short Segment Length",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "max_short_segment_count": {
            "default": 12,
            "description": "Maximum tolerated number of short segments inside one hotspot.",
            "examples": [
              12
            ],
            "exclusiveMinimum": 0,
            "title": "Max Short Segment Count",
            "type": "integer",
            "x-hmp-profile": "dev"
          }
        },
        "title": "ZoneMeshingRefinementHotspotSettings",
        "type": "object"
      },
      "ZoneMeshingRefinementPolicy": {
        "additionalProperties": false,
        "description": "Local refinement policy for mixed river/geology interfaces.",
        "properties": {
          "enabled": {
            "default": false,
            "description": "If True, the local refinement policy runs on top of the global zone meshing.",
            "examples": [
              false
            ],
            "title": "Enabled",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "mode": {
            "default": "family_priority_local_budget",
            "description": "Refinement mode selector. One of 'family_priority_local_budget' or 'grid_local_budget'.",
            "enum": [
              "family_priority_local_budget",
              "grid_local_budget"
            ],
            "examples": [
              "family_priority_local_budget"
            ],
            "title": "Mode",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "hotspot": {
            "$ref": "#/components/schemas/ZoneMeshingRefinementHotspotSettings",
            "description": "Hotspot-detection thresholds used when budgeting local refinement.",
            "x-hmp-profile": "dev"
          },
          "grid": {
            "$ref": "#/components/schemas/ZoneMeshingRefinementGridSettings",
            "description": "Grid settings used by the locality-first refinement policy.",
            "x-hmp-profile": "user"
          },
          "families": {
            "additionalProperties": {
              "$ref": "#/components/schemas/ZoneMeshingRefinementFamilySettings"
            },
            "description": "Per-family refinement settings keyed by family name.",
            "title": "Families",
            "type": "object",
            "x-hmp-profile": "user"
          }
        },
        "title": "ZoneMeshingRefinementPolicy",
        "type": "object"
      },
      "ZoneMeshingSettings": {
        "additionalProperties": false,
        "description": "Validated settings for one conformal 2D Gmsh meshing run.",
        "properties": {
          "algorithm": {
            "default": "delaunay",
            "description": "Planar Gmsh algorithm name. In practice the examples use 'delaunay', which is a robust default for irregular geological and river-constrained domains.",
            "examples": [
              "delaunay"
            ],
            "title": "Algorithm",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "global_size": {
            "default": 250.0,
            "description": "Baseline target cell size in projected metres over the full support domain. Think of it as the coarse background resolution before local interface refinement is added.",
            "examples": [
              250.0
            ],
            "minimum": 0.0,
            "title": "Global Size",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "min_size": {
            "anyOf": [
              {
                "description": "Non-negative floating-point value.",
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Lower bound on local cell size in projected metres. Use it to prevent extreme refinement from generating very small cells in narrow features.",
            "title": "Min Size",
            "x-hmp-profile": "user"
          },
          "max_size": {
            "anyOf": [
              {
                "description": "Non-negative floating-point value.",
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Upper bound on local cell size in projected metres. Use it when you want to cap the coarsening far from interfaces.",
            "title": "Max Size",
            "x-hmp-profile": "user"
          },
          "simplify_tolerance": {
            "default": 0.0,
            "description": "Geometry simplification tolerance, in projected metres, applied before meshing. Increase it only when the source polygons contain excessive vertex noise that does not carry hydrogeological meaning.",
            "examples": [
              0.0
            ],
            "minimum": 0.0,
            "title": "Simplify Tolerance",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "heal_tolerance": {
            "default": 0.0,
            "description": "Cleanup tolerance, in projected metres, used to repair tiny gaps or slivers between input polygons. Keep it near zero unless the source dataset is known to contain topology artifacts.",
            "examples": [
              0.0
            ],
            "minimum": 0.0,
            "title": "Heal Tolerance",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "linear_constraint_snap_tolerance": {
            "default": 0.0,
            "description": "Optional global snapping tolerance, in projected metres, applied to internal linear constraints such as rivers or watershed-boundary segments before partition splitting and Gmsh embedding.",
            "examples": [
              0.0
            ],
            "minimum": 0.0,
            "title": "Linear Constraint Snap Tolerance",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "min_polygon_area": {
            "default": 0.0,
            "description": "Minimum polygon area, in square metres, kept after cleaning. Use it to drop microscopic remnants that would otherwise create meaningless tiny mesh patches.",
            "examples": [
              0.0
            ],
            "minimum": 0.0,
            "title": "Min Polygon Area",
            "type": "number",
            "x-hmp-profile": "dev"
          },
          "refine_interfaces": {
            "default": false,
            "description": "Enable a distance-based size field around geology or river interfaces. When false, the mesh uses only the global background size constraints.",
            "examples": [
              false
            ],
            "title": "Refine Interfaces",
            "type": "boolean",
            "x-hmp-profile": "user"
          },
          "interface_size": {
            "anyOf": [
              {
                "description": "Non-negative floating-point value.",
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Target local size, in projected metres, close to constrained interfaces. When omitted and refine_interfaces=true, the schema derives a conservative default from global_size/min_size.",
            "title": "Interface Size",
            "x-hmp-profile": "dev"
          },
          "interface_distance": {
            "anyOf": [
              {
                "description": "Non-negative floating-point value.",
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Influence distance, in projected metres, over which the local interface refinement fades back to the background size. Larger values spread refinement farther away from the interface network.",
            "title": "Interface Distance",
            "x-hmp-profile": "dev"
          },
          "interface_sampling": {
            "default": 64,
            "description": "Sampling density used to discretize interface-based distance fields. Higher values better capture long and sinuous interfaces but increase Gmsh preprocessing cost.",
            "examples": [
              64
            ],
            "minimum": 2,
            "title": "Interface Sampling",
            "type": "integer",
            "x-hmp-profile": "dev"
          },
          "refinement_policy": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ZoneMeshingRefinementPolicy"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional local hotspot policy used to selectively thin low-priority refinement families when the mixed interface network becomes too dense for one robust Gmsh Delaunay run.",
            "x-hmp-profile": "user"
          }
        },
        "title": "ZoneMeshingSettings",
        "type": "object"
      },
      "hydromodpy__data__variables__dem__config__DemConfig": {
        "additionalProperties": false,
        "description": "Top-level DEM variable configuration.\n\nThe section declares one or more elevation sources. The loaded DEM can feed\ngeographic preprocessing directly or be cached as a reusable data product.\n\nExample TOML::\n\n    [data.dem]\n\n    [[data.dem.sources]]\n    source = \"ign_geoplateforme_dem\"\n    dataset = \"bd-alti\"\n    resolution_m = 25.0\n    regions = [\"Bretagne\"]\n\n    [[data.dem.sources]]\n    source = \"custom\"\n    path = \"data/my_dem.tif\"",
        "properties": {
          "sources": {
            "description": "At least one DEM data source.",
            "items": {
              "description": "Discriminated union of DEM data sources tagged by the 'source' provider key. Use 'custom' for a user file (TIF/ASC/NC) and 'ign_geoplateforme_dem' for assembled BD ALTI DEM retrieval.",
              "discriminator": {
                "mapping": {
                  "custom": "#/$defs/CustomDemSource",
                  "ign_geoplateforme_dem": "#/$defs/IgnGeoplateformeDemSource"
                },
                "propertyName": "source"
              },
              "oneOf": [
                {
                  "$ref": "#/components/schemas/CustomDemSource"
                },
                {
                  "$ref": "#/components/schemas/IgnGeoplateformeDemSource"
                }
              ]
            },
            "minItems": 1,
            "title": "Sources",
            "type": "array",
            "x-hmp-profile": "user"
          }
        },
        "required": [
          "sources"
        ],
        "title": "DemConfig",
        "type": "object"
      },
      "hydromodpy__spatial__site_selection__config__models__DemConfig": {
        "additionalProperties": false,
        "description": "DEM source requested by site selection.",
        "properties": {
          "source": {
            "default": "custom",
            "description": "DEM source identifier: custom path, data section, or ign_geoplateforme_dem.",
            "enum": [
              "custom",
              "data",
              "ign_geoplateforme_dem"
            ],
            "examples": [
              "custom"
            ],
            "title": "Source",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "path": {
            "anyOf": [
              {
                "format": "path",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Local DEM path when source='custom'.",
            "title": "Path",
            "x-hmp-profile": "user"
          },
          "resolution_m": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "DEM resolution in metres.",
            "title": "Resolution M",
            "x-hmp-profile": "user"
          },
          "cache_policy": {
            "default": "use_cache_else_download",
            "description": "Data cache policy.",
            "examples": [
              "use_cache_else_download"
            ],
            "title": "Cache Policy",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "margin_km": {
            "default": 0.0,
            "description": "DEM request margin around the territory in kilometres.",
            "examples": [
              0.0
            ],
            "minimum": 0,
            "title": "Margin Km",
            "type": "number",
            "x-hmp-profile": "user"
          },
          "request_extent": {
            "default": "territory",
            "description": "Spatial extent used when a DEM is loaded through [data.dem]. 'territory' requests the configured selection territory; 'outlets' requests the bounding box of imported outlets expanded by margin_km.",
            "enum": [
              "territory",
              "outlets"
            ],
            "examples": [
              "territory"
            ],
            "title": "Request Extent",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "map_background_extent": {
            "default": "delineation",
            "description": "DEM extent used only for review-map background. 'delineation' reuses the DEM used to calculate basin contours; 'territory' loads a regional DEM through [data.dem] without using it for delineation.",
            "enum": [
              "none",
              "delineation",
              "territory"
            ],
            "examples": [
              "none"
            ],
            "title": "Map Background Extent",
            "type": "string",
            "x-hmp-profile": "user"
          },
          "force_refresh": {
            "default": false,
            "description": "Ignore existing cached data when supported by the provider.",
            "examples": [
              false
            ],
            "title": "Force Refresh",
            "type": "boolean",
            "x-hmp-profile": "user"
          }
        },
        "title": "DemConfig",
        "type": "object"
      }
    }
  }
}
