Skip to content

Architecture decisions

Decisions that shape MEME and are not derivable from the code alone are recorded here as lightweight architecture decision records (ADRs). Each record states the context, the decision and its consequences, so a later reader knows why the service looks the way it does before proposing to change it.

ADR Decision Status
0001 MEME is one dependency-free Go binary; the solvers are external Python processes accepted
0002 Validation is capability-gated: nothing a payload asks for is dropped without an error or a warning accepted
0003 Framework-only concepts travel in per-target native blocks, never in the canonical schema accepted
0004 Golden files and a validation matrix freeze the emitter contract accepted
0005 Simulation is an asynchronous job with a zipped result bundle accepted
0006 Framework versions are separate targets: a default, version variants and aliases accepted
0007 The environment ships free solvers only: HiGHS, CBC and GLPK accepted
0008 Power flow is a PyPSA run mode over an electrical network in the canonical model; MEME never chains jobs accepted (amended by 0009)
0009 Reactive power, voltage control, shunts and fixed transfers complete the power-flow network; power-flow inputs are ignored where no power flow runs accepted
0010 The electrical network enters the optimization: linear power flow, line expansion, security constraints and transmission economics accepted
0011 PyPSA optimization completeness: Store-based storage, modular capacity, retirement, slack demand, copperplate, unit-commitment extras and multi-period investment accepted

Adding a record

Copy 0000-template.md to the next free number, fill it in, add a row above, and link it from the pull request. A record is never rewritten once accepted: a factual detail that has aged is corrected in a dated Amendments section at the end of the record (and the status notes it), and a decision that changes gets a new number and marks the old one superseded.