Roadmap
Progress parsed from ROADMAP.md.
Phase 0 — Foundation (done)
Phase 1 — Real Canadian data (replace placeholders)
Phase 2 — Temporal resolution
Phase 3 — Biomass & WS3 integration
Phase 4 — FABLE linkage
Phase 5 — Full visualisation
Phase 6 — Scenarios
Phase 7 — Validation & calibration
Phase 8 — Reproducibility & workflow (last phase)
Phase 9 — Docs & delivery
Detail
OSeCAN — Roadmap to a full-fledged model
Living tracker from the current working skeleton (real demand + placeholders) to a
production model with full Canadian open data and full visualisation. Check boxes off as
tasks are crossed. Legend: [x] done · [~] in progress · [ ] todo.
Last updated: 2026-07-22 (v0.3).
v0.3 — ARCHITECTURE SETTLED (Elias & Taco, 2026-07-22): single OSeMOSYS
REGION, geography in zone codes, all transmission as technologies, provincial policy via UDC.Tradenot used. Verified solving optimal, UDC verified binding. Seedocs/model-description.md.
Phase 0 — Foundation ✅ (done)
- [x]
model_structure.py— multi-province energy + biomass vocabulary (land/water delegated) - [x]
sets_n_ratios.py— energy-only set builder; 13 zones, 2021–2070; tests green - [x] Reproducible
uvproject (pyproject, lockfile, wheel-based solver) - [x] Staged data layout (
external → interim → mapped → params) + provenance manifest - [x]
retrieve(open-data downloader w/ sha256) +harmonize(params⊆SETS gate) - [x] Full placeholder parameter set (
build_params) + WS3/FABLE seams - [x] Real demand: CER EF2026 →
SpecifiedAnnualDemand(validated ≈2,040 PJ elec 2025) - [x] Pipeline: assemble → datafile → preprocess → LP → solve OPTIMAL (GLPK, 19s)
- [x] Diagnostics bundle + auto-updated
modelling_review.md - [x] Dashboard (HTML), transmission map (GADM), MkDocs site, code reference (HTML)
Phase 1 — Real Canadian data (replace placeholders) [~]
- [ ]
ResidualCapacity← CERelectricity-capacity-2026+ CODERS (existing fleet by province/tech) - [ ] Transmission capacity ← CER
electricity-interchange-2026(interprovincial) + provincial data (intra-provincial) — replacesTransmissionLinksplaceholders - [ ] Zone demand split ← IESO zonal / AESO planning areas / BC Hydro regions (replace
ZoneDemandShare) - [ ]
CapitalCost/FixedCost← CER assumptions / NRCan / cross-check pypsa-canada - [ ]
VariableCost(fuel prices) ← CERend-use-prices/benchmark-prices - [ ]
EmissionActivityRatio← ECCC National Inventory Report factors - [ ]
EmissionsPenalty/ emission limits ← federal OBPS schedule + Clean Electricity Regs - [ ]
DiscountRate← Canadian social discount rate (decide 3% vs 5%) - [ ] Write a cleaner per source (mirror
clean_demandpattern); each pinned indata_sources.yaml - [ ]
harmonizegreen after every swap; log each inmodelling_review.md
Phase 2 — Temporal resolution [ ]
- [ ] Replace single annual timeslice with seasonal/diurnal slices (demand + VRE profiles)
- [ ]
CapacityFactorper timeslice ← RESource wind/solar + hydro monthly profiles - [ ]
SpecifiedDemandProfilefrom CER/hourly load shapes - [ ] Re-check solve time + feasibility at higher temporal resolution
Phase 3 — Biomass & WS3 integration [ ]
- [ ] Provincialise biomass feedstock supply (
SUP*) — one per grid - [ ] WS3 feedstock supply curves →
TotalTechnologyAnnualActivityUpperLimit+VariableCost - [ ] Biomass conversion techs per feedstock (power, heat, biofuel, +CCS)
- [ ] Document the WS3→OSeCAN interface (units, resolution, frequency)
Phase 4 — FABLE linkage [ ]
- [ ] FABLE food-demand / land-constraint hand-off (soft-link inputs)
- [ ] Define shared land-accounting boundary (what stays external)
- [ ] Ingestion script (mirror
clean_demand)
Phase 5 — Full visualisation [~]
- [x] Extract solved results → result CSVs (direct GLPK extractor in
pipeline/solve.py) - [x] Populate dashboard Outputs tab: capacity, generation, emissions, net flows
- [x] Template-driven report (
vis/templates/report_template.html) — all inputs+outputs, per-plot info button - [x] Light theme across figures; Cambria default
- [x] Results-driven transmission map (solved flows, direction colours)
- [ ] Per-province result plots; nexus/biomass flow view
Phase 6 — Scenarios [ ]
- [x] Provincial policy mechanism — solved by UDC (v0.3):
ProvincialPoliciesinmodel_structure.pybecomes UDC rows. RE share and emission caps implemented; verified binding. - [ ] Populate real provincial policies (BC/QC clean-electricity targets, AB TIER, coal phase-outs)
- [ ] Scenario overlay layer (config-driven param/constraint switches)
- [ ] CER scenarios (Current Measures / Canada Net-zero / Higher / Lower)
- [ ] Net-zero-2050 emission-limit trajectory + Clean Electricity Regs case
Phase 7 — Validation & calibration [ ]
- [ ] Base-year generation/capacity vs CER/StatCan historicals
- [ ] Interties vs actual transfer ratings
- [ ] Sensitivity ranking (which inputs move results most) before deep calibration
- [ ] Resolve outstanding BC Hydro validation item (per workplan §3.4)
Phase 8 — Reproducibility & workflow (last phase) [ ]
- [ ] Snakemake
workflow/Snakefileorchestrating all stages (build → data → solve → plots) - [ ]
uv.lockcommitted; vendored model file + sha256 recorded - [ ] CI smoke build (clean-machine
uv sync+osecan build-sets+ tests)
Phase 9 — Docs & delivery [ ]
- [ ] Fill remaining
[confirm]sources indata/SOURCES.md - [ ] Finalise MkDocs site (results pages, methods, provenance) + deploy
- [ ] Contract deliverables mapping (Tasks 1–6) cross-checked
How this tracker is maintained
Check a box when a task is crossed; add sub-tasks as they surface. osecan run appends run
outcomes to modelling_review.md (issues/logs); this file holds the forward plan.
Delta E+ · SFU