Skip to content

v1.0.0 β€” the machine gun

Choose a tag to compare

@github-actions github-actions released this 06 Oct 03:59
· 15 commits to main since this release

leadhound is now working as it was meant to work: the gig drops, your phone buzzes, you fire. 1.0 because the missing pieces were speed and survival, not features.

πŸ“‘ Freelancer webhook β€” seconds, not polls

Register the receiver URL + signing secret in the developer portal and new projects flow straight into the pipeline: scored, drafted, pushed, per user. HMAC-SHA256 verified against the raw body (constant-time, all common header variants), guid dedupe so the poller never double-pushes. One-click secret rotation β€” the old secret dies instantly, the new one is shown exactly once. Live event counters on the πŸ“‘ card and in /api/radar.

⏰ Downtime catch-up

Sleep 8 hours and the hound wakes up and catches up: if the last sweep is over an hour old at boot, the first sweep backfills the blackout and flags everything you missed with an amber ⏰ late chip. Timezone-aware comparison β€” no format lies.

πŸ’“ Radar heartbeat + πŸ• watchdog

The poller lands a heartbeat after every sweep; thread_alive checks the actual thread, and stalled fires when the heartbeat goes quiet for 3x the interval. /api/health is real vitals now (db, uptime, poller, listeners β€” aggregate only). A watchdog supervisor relaunches dead poller threads with exponential backoff (15-min cap), respawns dead pocket bots from the db arm-state, and respects shutdown above all.

⚑ Polite fast lane

RemoteOK / Remotive / WWR / HN / custom RSS now poll on a 2-minute floor, paying their way with ETag + Last-Modified conditional GET β€” an unchanged feed costs a 304 and nothing else. Keys/cookie/search connectors keep their 5-minute floor (Connector.min_poll is the per-source truth), and Β±20% jitter keeps a fleet of hounds from stamping a source in unison.

🀫 /ping heartbeat board

One command, all of ops: βœ… healthy sources with cadence + tick age, 🟑 overdue or never swept, ❌ erroring with the reason, the radar thread's own pulse, and the webhook armed state with rejected-signature warnings.

Install: pipx install leadhound or docker compose up β€” then leadhound web, connect sources, arm the pocket sniper.

5 assets: wheel, sdist, Windows / macOS / Linux binaries. 380+ tests, ruff clean, CI green on every commit.