Freeze legacy API and add public-only offline catalog - #1
Closed
kvkenyon wants to merge 1 commit into
Closed
Conversation
This was referenced Sep 5, 2026
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.
The generator previously read a moving ERCOT URL and could emit empty Row models when response metadata was missing. This PR freezes legacy reproduction and adds an opt-in offline public catalog. It adds no current typed or raw data retrieval.
Covered now
_client.py,_generated.py, and__init__.pybyte for byte against audit based1daad25df42d3fff41f88b907d99ef325b970e0: 35 product exports,configure, 510 method signatures/categories, 204 nested models, and the base response model. Preserve legacy exceptions, pagination, token behavior, and DataFrames.--checkis read-only. Remove the authenticated developer--refreshand--cache-productscommands; metadata refresh needs a separate reviewed tool.tinyercot.catalog: immutable offline observations of 257 public API operations, including 243 data GET paths (242 public-reports and one ESR). Record verbs/media types, legacy path membership, 39 changed query contracts, and one order-only change.metadata_onlydoes not claim retrieval coverage. Add selected API/MIS/live delivery metadata and explicit access boundaries.The inventory uses ERCOT's public Public Reports OpenAPI export and ESR export, captured on 2026-09-05. Source hashes and projection recipes are in
tools/inputs/; scope and source links are indocs/public-foundation.md.Restricted, unavailable, and deferred
Secure, Certified, participant-only, EWS, private telemetry, private bids/COP/awards, settlements, customer data, and other entitlement-bound services remain restricted and excluded. The catalog marks ERCOT's 2001 hourly load gap unavailable. Missing or unrecognized access labels remain unknown. Public aggregates and delayed disclosures do not grant access to original private records. Public API data requests still require ERCOT account authentication; offline metadata does not.
Current response verification, full EMIL metadata, new clients/errors/status handling, raw transport, MIS/archive downloads, live feeds, lifecycle metadata, bounded history, temporal/DST, revision/as-of semantics, dependency matrix coverage, and installed-wheel typing remain deferred. No new adapter or placeholder client is added.
No authenticated ERCOT request or historical bulk extraction occurred. No ERCOT credentials were read or used. No paid data access, secret copying, or forecaster work occurred. Tests use fixtures, synthetic credentials, and mocked transport with network access blocked. No no-mistakes workflow ran. This is a direct PR; do not merge.
Validation
873 tests passed on Python 3.14.0 and 3.11.14. Exact commands:
uv sync --frozen --group dev uv run python tools/generate_client.py --check uv run pytest -q UV_PROJECT_ENVIRONMENT=/tmp/tinyercot-py311 uv run --frozen --python 3.11 pytest -q uv run ruff check tools/generate_client.py tinyercot/catalog.py tests uv run ruff format --check tools/generate_client.py tinyercot/catalog.py tests uv build uv export --frozen --no-dev --no-emit-project --output-file /tmp/tinyercot-requirements.txt uv venv /tmp/tinyercot-wheel --python 3.14 uv pip sync --python /tmp/tinyercot-wheel/bin/python /tmp/tinyercot-requirements.txt uv pip install --python /tmp/tinyercot-wheel/bin/python --no-deps dist/tinyercot-0.2.2-py3-none-any.whl /tmp/tinyercot-wheel/bin/python -I tests/wheel_smoke.py git diff --check git diff --cached --checkGeneration reproduced SHA-256
aaf91cb373b7557113e5343e4366e0d331566d82327ffabe4b9562937f3c2b5c. Scoped lint/format passed for nine Python files. The sdist/wheel build and isolated installed-wheel check passed. The final wheel was reinstalled withuv pip install --python /tmp/tinyercot-wheel/bin/python --no-deps --reinstall dist/tinyercot-0.2.2-py3-none-any.whland the smoke check passed again. Runtime dependency versions remain fixed; uv corrected the stale local project version in its lock.Exploratory full-tree Ruff checks found pre-existing findings in
examples/streaming_stats.py(RUF013,DTZ011) and frozentinyercot/__init__.py(RUF100), plus existing formatting in the example and_client.py. Those files remain unchanged. CI checks the authored/changed Python scope. New Python documentation was reviewed for Google-style sections; the existing repo has no type-check command or source license-header convention.The initial catalog test exposed the omitted order-only drift case, and the first wheel omitted JSON metadata. Both were fixed and retested.
docs/task-note.mdrecords exact scope, evidence, commands, outcomes, and deferred work. No implementation blocker remains.Handoff
Head commit:
4b26c8a91efbba668dbbc40f564bbe812d4ae792.GitHub offline compatibility run passed for Python 3.11 and 3.14. The worktree is clean. This PR remains open and unmerged.