feat: power-markets pivot — EIA-930 (live) + ERCOT nodal (dormant)#23
Merged
Conversation
added 13 commits
June 19, 2026 20:04
…mbol Bare BA / settlement-point symbols (e.g. 'aeci') are intentionally not in the static symbology reverse index, so mode_for_symbol() raised on them and both write_bars() and read_as_of() failed for power.* libraries. Add an optional explicit mode (a property of the library via mode_for_library()); power callers (asset, check, read API) pass it. Caught by a live EIA-930 ingest smoke test; locked with symbology + storage round-trip regression tests.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refocuses Energex on power markets, additively on the existing hexagonal bitemporal platform (core, pandera gate, Dagster, read-API seam all unchanged).
Part A — EIA-930 (live)
Eia930RegionConnector+Eia930FuelConnector: hourly demand / day-ahead forecast / net generation / interchange + generation-by-fuel for all ~60–70 US balancing authorities via EIA v2electricity/rto/*.power.{demand,demand_forecast,generation,interchange,generation_by_fuel}.degenerate(latest-wins) revision mode.power.*symbology routing (no static enumeration of BAs).POWER_REGION+POWER_GEN_BY_FUELpandera gates; Dagster assets, read-back checks, hourly schedule; ~3-yr backfill partition.Part B — ERCOT nodal (dormant until creds)
ErcotSppConnector(OAuth2 ROPC): RT + DA settlement point prices →power.lmp,bitemporal_merge.ERCOT_USERNAME/ERCOT_PASSWORD/ERCOT_SUBSCRIPTION_KEY; schedule shipsSTOPPED(no failing runs).ERCOT_SPP/ERCOT_LOAD/ERCOT_FUELMIXgates (replace the oldERCOT_DALMPstub).Other
*_legacy).fix(storage): route power reads/writes by library mode (mode_for_library) since bare BA symbols aren't in the static reverse index — caught by a live ingest smoke test, locked with regression tests.201 tests pass; ruff check + format clean; dagster definitions validate.