Skip to content

Add Ruuster home listings and fix MusicBrainz rate-limit retries - #104

Merged
ralyodio merged 1 commit into
mainfrom
feat/ruuster-listings
Sep 13, 2026
Merged

ralyodio merged 1 commit into
mainfrom
feat/ruuster-listings

Conversation

@ralyodio

@ralyodio ralyodio commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

MusicBrainz upcoming releases repeatedly failed with HTTP 503 because Retry-After: 0 caused an immediate retry. MusicBrainz requests now share a process-wide queue, wait at least 1.1 seconds between requests, and retry with 5/15/45 second backoff while honoring longer numeric or HTTP-date retry hints. Temporary cover-art failures are no longer cached as missing artwork. A read-only test from the production container recovered from 503 to 200 after the first five-second wait.

Adds a ruuster adapter and hourly ruuster-san-jose-homes source for the supplied San Jose saved search, plus the san-jose-homes feed and a database-free JSON export script. The adapter preserves search filters, removes tracking, pages through public JSON, fetches property details and attribution, and combines syndicated MLS copies by listing number and address. It respects the worker detail budget/deadline and resumes unfinished pages. Historical entries keep their last observed status when they leave the search; disappearing listings are not classified as sold.

Validation: live Ruuster export returned 38 unique properties from 104 upstream records; hidden-address/deleted records are omitted. Focused regression tests and repository lint pass. Final local suite against current main: 1,629 passed, zero failures; one PostgreSQL-only migration test is covered by CI. Provider reuse restrictions are documented in README.

@ralyodio
ralyodio merged commit ec8f73f into main Sep 13, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant