Release Notes
Release history for SEALS. Versions continue this repository’s own tags (v1.2.0 preceded v2.0.0).
For the shared platform beneath SEALS — hazelbean, ProjectFlow and the conventions — see the Earth-Economy Devstack release notes.
SEALS v2.0.0 (2026-07-30)
Run-file spec: three complexity axes, and run_project(p).
A run file’s complexity is now described by three independent axes rather than one ladder. Configuration (how a run varies) keeps the numbered levels 1–4: one task with inline constants; a task tree; + a scenarios CSV; + a parameters CSV. Code layout (where the code lives) runs single file → split (
<project>_tasks.py,_functions.py,_utils.py,_initialize_project.py) → library package. Ownership (who owns the code you run) runs self-contained → devstack developer → downstream user. Moving along one axis never requires moving along another, so “level” unqualified always means the configuration axis.run_projectnow takes onlyp. The caller builds and configures the ProjectFlow in the__main__guard;run_project(p)only runs it. The rule that replaces a signature full of keyword defaults:run_project(p)sets what no variant ever changes; the caller sets what a variant might. A constant that starts varying moves one line up instead of becoming a new keyword argument, so the entry point stops growing as a project accumulates definition CSVs. Cost: barerun_project()no longer works, and a variant wrapper is four lines rather than three.<project>_utils.pyis defined as a promotion queue into hazelbean — science-unaware helpers used by more than one project belong upstream — while<project>_functions.pyholds the model’s domain knowledge and is terminal.examples/reorganized:run_templates/(copy-me) andrun_templates_annotated/(the same code with the reasoning written out), plusinput_research_scripts/for real run files and the raw scripts they replace. Two new templates hold configuration fixed at level 4 and move one other axis each:run_template_split_layout.pyandrun_template_downstream_user.py.The six numbered sections of project_complexity.qmd are renamed to “Stage N, the old way” / “Stage N, redone with ProjectFlow” so they no longer collide with the configuration levels. They are a historical narrative, not the spec.
All 46
*_old_spec.pyarchives are deleted across the stack. Git history is the archive for pre-conversion forms. The emptydocs/run_file.qmdstub is removed;examples/index.qmdis the landing page for “what should my run file look like?”.