Skip to content

JSON Schemas

The following JSON Schema files describe the structure of each JSON input file in a Cobre case directory. Point your editor’s JSON Schema validation setting at the appropriate file to get autocompletion, hover documentation, and inline error highlighting while authoring case inputs.

For a complete description of each file’s fields and validation rules, see the Case Directory Format reference page.

Schema fileInput fileDescription
config.schema.jsonconfig.jsonStudy configuration: training parameters, stopping rules, cut selection, simulation settings, and export flags
penalties.schema.jsonpenalties.jsonGlobal penalty cost defaults for bus deficit, line exchange, hydro violations, and non-controllable source curtailment
stages.schema.jsonstages.jsonTemporal structure of the study: stage sequence, load blocks, and policy graph horizon
buses.schema.jsonsystem/buses.jsonElectrical bus registry: bus identifiers, names, and optional entity-level deficit cost tiers
lines.schema.jsonsystem/lines.jsonTransmission line registry: line identifiers, source/target buses, and directional MW capacity bounds
hydros.schema.jsonsystem/hydros.jsonHydro plant registry: reservoir bounds, outflow limits, generation model parameters, and cascade linkage
thermals.schema.jsonsystem/thermals.jsonThermal plant registry: generation bounds and linear cost coefficients
energy_contracts.schema.jsonsystem/energy_contracts.jsonBilateral energy contract registry (optional entities)
non_controllable_sources.schema.jsonsystem/non_controllable_sources.jsonIntermittent (non-dispatchable) generation source registry (optional entities)
pumping_stations.schema.jsonsystem/pumping_stations.jsonPumping station registry (optional entities)
production_models.schema.jsonsystem/hydro_production_models.jsonProduction model selection, FPHA hyperplane config, and per-stage productivity overrides (optional)
scalar_parameters.schema.jsonsystem/scalar_parameters.jsonNamed scalar study parameters (single-valued numeric settings)
initial_conditions.schema.jsoninitial_conditions.jsonInitial reservoir storage, past inflows for PAR lag initialization
correlation.schema.jsonscenarios/correlation.jsonInter-site correlation matrix for scenario generation (supports inflow, load, and NCS entity types)
generic_constraints.schema.jsonconstraints/generic_constraints.jsonUser-defined linear constraints over LP variables with optional slack penalties
exchange_factors.schema.jsonconstraints/exchange_factors.jsonBlock-level line capacity multipliers for directional exchange limits
load_factors.schema.jsonscenarios/load_factors.jsonBlock-level load scaling factors for bus-stage demand profiles
non_controllable_factors.schema.jsonscenarios/non_controllable_factors.jsonBlock-level NCS availability scaling factors per source per stage per block

Every schema is served straight from this site at a stable, versioned-free URL: /schemas/<name>.schema.json (for example https://docs.cobre-rs.dev/schemas/config.schema.json once the site is live at that domain). Point your editor’s JSON Schema mapping there for autocompletion and validation while authoring case inputs.

Add a json.schemas entry to your workspace .vscode/settings.json:

{
"json.schemas": [
{
"fileMatch": ["config.json"],
"url": "https://docs.cobre-rs.dev/schemas/config.schema.json"
},
{
"fileMatch": ["system/hydros.json"],
"url": "https://docs.cobre-rs.dev/schemas/hydros.schema.json"
}
]
}

Alternatively, add a $schema key directly inside each JSON file:

{
"$schema": "https://docs.cobre-rs.dev/schemas/config.schema.json",
"training": {
"forward_passes": 192,
"stopping_rules": [{ "type": "iteration_limit", "limit": 200 }]
}
}

Configure json.schemas in your nvim-lspconfig setup for jsonls following the same URL pattern shown above.

Go to Preferences > Languages & Frameworks > Schemas and DTDs > JSON Schema Mappings, add a new mapping, paste the schema URL, and select the file pattern.

These schemas are generated in the cobre repository from the cobre-io Rust types — the Rust types are the ground truth, and the schema files are their generated output, licensed Apache-2.0. This site vendors a committed copy (currently at the v0.10.0 tag) under public/schemas/ so the files have a stable URL to serve from and to link to.

Do not hand-edit any vendored schema file. When cobre regenerates the schemas (after a change to a cobre-io input type), re-vendor the committed copy here with:

Terminal window
npm run refresh:schemas

Run npm run refresh:schemas -- --check to verify the committed copy still matches the source tag without writing anything.