尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Day planner for Torus-style battery and flywheel stations on Utah's grid (Hard Tech Hackathon, Torus bounty)
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A day planner for battery and flywheel stations on Utah's grid, built for the Torus bounty (Energy x AI Infrastructure) at the Hard Tech Hackathon, Salt Lake City, October 2026.
Clearlane reads the day-ahead price for PacifiCorp East, charges the battery (Pulse) in the midday clear lane when solar floods the grid, stays off the road in the evening jam, and keeps the flywheel (Spin) ready for Rocky Mountain Power's demand response calls. It exports an hourly operating envelope that marks the System Critical Hours, the grid's tightest hours. The envelope is a format Clearlane proposes.
The stations here are simulated Torus-style stations. Prices and forecasts are real public data, and everything simulated is labeled on screen. Dollar values are value to RMP's system at day-ahead prices, not revenue for Torus or savings for a host.
npx vite preview (below), open /?ff=presenter for the eight presenter screens. Right or
PageDown is Next, Left or PageUp is Back. / alone is the six-beat walkthrough.npm run reproduce re-derives every stage number offline; see
Reproduce every number.npm ci
npm run build
npx vite preview
Open the address vite preview prints. The app reads only committed files (DATA_MODE=snapshot) and makes no request
to any other origin. Right and Left step through a beat, the number keys jump to a beat, and ? shows the key map.
Generated by node tools/readme-numbers.mjs from public/derived/numbers.json (stage day 2026-10-27). Do not edit by hand.
| What | Value | Class | Key |
|---|---|---|---|
| Hour the evening price peaks (hour beginning, Mountain time) | 6pm | DERIVED | peak_hour_mt |
| Peak price over the cheapest hour | 2.6x | DERIVED | peak_over_trough |
| Battery on a fixed off-peak rule, value to RMP's system per MW-day | $20.06 | DERIVED | fixed_usd_mw_day |
| Clearlane's timetable, same measure | $58.41 | DERIVED | clearlane_usd_mw_day |
| Clearlane over the off-peak rule | 2.9x | DERIVED | race_ratio |
| System Critical Hours in the envelope | 6 | DERIVED | sch_hours_today |
| Simulated RMP calls Spin answered in full | 99% | SIMULATED | calls_answered_pct_mt |
| Days in the May 1 to Oct 27 backtest | 179 | DERIVED | backtest_days |
| Backtest days Clearlane beat the off-peak rule | 91% | DERIVED | share_days_beating |
| Clearlane's median day in the backtest, per MW-day | $38.69 | DERIVED | clearlane_p50 |
| Backtest RMP calls missed, Clearlane | 1% | SIMULATED | calls_missed_by_policy_clearlane_mt |
| Backtest RMP calls missed, fixed overnight rule | 23% | SIMULATED | calls_missed_by_policy_fixed_overnight_mt |
| Backtest RMP calls missed, price-only battery plan | 40% | SIMULATED | calls_missed_by_policy_price_only_mt |
Every number on screen comes from public/derived/numbers.json or the engine, and carries a class. docs/FACTS.md
lists every number with its source, class and how it was checked.
| Class | Meaning |
|---|---|
| REAL | Public data as published: CAISO prices and forecasts, EIA emissions |
| DERIVED | Computed from REAL data by the engine |
| SIMULATED | Modeled: the stations, the calls and how they respond |
| TORUS_PUBLISHED | A figure from Torus's own pages or the RMP case study |
| ASSUMPTION | A value we chose, stated where it is used |
| MEASURED | Timed live on the machine running the demo, such as the re-plan solve time |
slc_*) in one research snapshot,
research/data/pace_snapshot_2026-10-27.csv. Not used by the app. CC BY 4.0; weather data by Open-Meteo.com.Sources for each file are in research/DATA-SOURCES.md. The code is MIT licensed.
MIT covers the code only: CAISO OASIS and EIA data keep their publishers' terms, and Torus figures are quoted with attribution and Torus's permission.
npm ci
npm run reproduce
Works offline. It checks the SHA-256 of every input in public/data against tools/manifest.sha256, re-runs the
engine into a scratch folder, and compares every file in public/derived with the committed one. It ends with
"REPRODUCED n/n stage numbers" and exits 0; any difference exits 1 and names the file and the stage key. Every number,
with its class and source, is listed in docs/NUMBERS.md. npm run reproduce -- --fetch also re-fetches the
operating day from CAISO OASIS and EIA and reports any difference, since OASIS can revise its data. CI runs the
offline mode on every pull request.
npm run check:all
node tools/offline-check.mjs
node tools/facts-check.mjs
Typecheck, unit tests, build and the Python prep tests; then the six beats driven offline in a browser; then every
number checked against docs/FACTS.md. CI runs the first two.
| Path | What |
|---|---|
prep/ | Python that fetches public data and builds each day's bundle in public/data/ |
engine/ | TypeScript planner: the dynamic program, the call replay, the envelope and the backtest |
app/ | The stage app (Vite and React) |
contracts/ | Every data shape that crosses a boundary |
research/ | The research behind every number, with sources |
docs/FACTS.md | Every number we say, with its source and certainty |
One founder, Craig Cossairt, working with six AI agent lanes (integration, engine, data, UI, pitch and science), each
in its own git worktree. GitHub issues were the task board and every change landed as a reviewed pull request.
AGENTS.md and docs/lanes/ hold the rules each lane followed.