Verification
task lint: backend Ruff and frontend Oxlint/Oxfmt passed.task check: backend mypy (109 source files) and frontend native TypeScript passed.- Pre-commit hooks passed for all changed and new files, including YAML, Python, whitespace, Ruff, and Oxfmt checks.
task test: 328 backend tests and 99 frontend tests passed, including 33 ReserveCalifornia regressions and a notification booking-context assertion.- New regressions cover inclusive request grids, exclusive check-out, padded windows, UnitId identity, date de-duplication, equipment/electrical translation, blocked/walk-in/locked/draw/closed inventory, empty grids, HTTP failures, invalid dates, idempotent metadata refreshes, cross-provider park-ID collisions, SQLite search ingestion, API booking links, CLI selection/cleanup, and synthetic VCR body matching through the retry transport.
- Review regressions cover HTTP 200 application errors, hidden/offline and retired inventory, atomic metadata/search rollback, discovery of nonreservable parks with bookable campgrounds, connection-pool cleanup, and refusal to downgrade a populated provider catalog. See the integration review for remaining shared-system gaps.
- The metadata integration test rejects any requests except GET
fd/placesand GETfd/facilities, verifying that catalog refreshes remain independent of dated availability searches. - The complete Alembic chain was applied to an isolated temporary SQLite database, downgraded by one revision, and upgraded again. Query evidence:
text
head: [(1, 'Recreation.gov'), (2, 'ReserveCalifornia')]
77984a1ae368: [(1, 'Recreation.gov')]
head: [(1, 'Recreation.gov'), (2, 'ReserveCalifornia')]- Live verification on 2026-10-12: metadata endpoints responded with HTTP 200. The implemented adapter found 33 campsites at facility 327 for arrival 2026-10-13 and check-out 2026-10-15, returning only nights 2026-10-13 and 2026-10-14. Its booking URL was
https://www.reservecalifornia.com/park/2/327. A separate request beyond the booking horizon returned no free slices. - Additional live checks found 477 RV-classified pooled units at Oceano Dunes facility 2016 and nine cabin-classified yurts at facility 752. An invalid facility returned HTTP 200 with
NightsActual=0, confirming that application errors need explicit handling. - Live responses remain outside the repository. All new committed fixtures use generated synthetic inventory and no reservation identifiers.
Limits
- Request pacing is per instance; distributed provider rate limiting remains a separate roadmap item.
- Capacity is zero when upstream omits it. Provider minimum stays remain metadata; the shared worker currently enforces only the user's requested minimum stay.
- Existing test warnings remain: pytest-asyncio's unset fixture loop scope, a Pushover mock coroutine warning, and Node's experimental localStorage warning.