MyEnergyOptimizer
Simulate a home, and later an energy community, whose electricity dispatch is decided by
logic rules the user writes: who gets the solar energy first, when the battery charges, and
whether surplus is sold or stored. The rules run as SmartMDAO
rule disciplines, are verified before a run, and never see the future except through an explicit
forecast.
Shift left, by design
Every rule in the engineering standards is enforced by a gate, and
every gate runs as early as it can: on your machine before the code leaves it, then again in
CI, and the slow or external checks on a schedule. This table is generated from the hook and
workflow configuration, so it cannot drift from what actually runs.
37 gates. 25 run on your machine before code leaves it (pre-commit / pre-push hooks); CI reruns every one of them, and scheduled jobs add the slow and the external checks.
| Gate | 💻 commit | 💻 push | ☁️ CI | 🌙 nightly | 📅 weekly |
|---|
pre-commit-hooks: check-added-large-files · check-case-conflict · check-merge-conflict · check-toml · check-yaml · detect-private-key · end-of-file-fixer · trailing-whitespace | ✓ | | ✓ | | |
gitleaks (gitleaks) | ✓ | | ✓ | | |
ruff format (ruff-format) | ✓ | | ✓ | | |
ruff check (ruff-check) | ✓ | | ✓ | | |
pyright (changed files) (pyright) | ✓ | | ✓ | | |
no silent suppressions (suppressions) | ✓ | | ✓ | | |
notebooks one concept each, committed executed (notebook-structure) | ✓ | | ✓ | | |
scripts share one shape, each smoke-tested (script-structure) | ✓ | | ✓ | | |
uv.lock in sync (uv-lock) | ✓ | | ✓ | | |
actionlint (actionlint) | ✓ |
Development
uv sync
uv run pre-commit install
uv run pytest