feat(latest): split browser poll cooldown #48

Merged
sulthan merged 1 commits from issue-42-browser-cooldown into main 2026-08-09 06:25:49 +07:00
Owner

Summary

Split latest-chapter polling cooldowns by fetch cost. Browser-backed kagane and novelfull series now rest longer without changing the cadence of plain-TLS sites.

Behavior

  • Plain-TLS series keep the 1h default cooldown.
  • Browser-backed series use LATEST_CHAPTER_POLL_BROWSER_COOLDOWN, defaulting to 6h.
  • Both cooldowns share the existing 15m minimum floor; invalid values retain the existing fallback behavior.
  • The poller still selects both classes in one due query per cycle.
  • Existing ordering and exclusions remain unchanged: reader-count precedence, least-recently-checked ordering, finished exclusion, archived polling, and orphan exclusion.

Implementation

  • Added the browser cooldown to backend configuration and passed it through production poller construction.
  • Added the browser-site list as the single routing source used for both due-query cutoff selection and fetcher choice.
  • Kept all query values parameterized; the site list is passed as a bound PostgreSQL array parameter.
  • Updated startup logging to report interval, plain cooldown, browser cooldown, batch, and stagger.
  • Documented the variable, default, and floor in README.md, .env.example, backend/AGENTS.md, and docker-compose.yml.

Review findings addressed

The first review found that configuration parsing was correct but startLatestPoller did not pass BrowserCooldown into latest.Poller; every browser-backed row would therefore have been due immediately. Production construction now goes through newLatestPoller, with a regression test covering both cooldown fields.

The review also identified duplicated browser-site knowledge in fetch routing. slices.Contains(browserBackedSites, site) now reuses the same list already supplied to the store query.

Verification

  • Focused backend tests pass: go test ./internal/latest ./internal/store ..
  • Full suite passes: go test ./....
  • graphify update . completed.
  • Issue #42 was updated and closed.
## Summary Split latest-chapter polling cooldowns by fetch cost. Browser-backed kagane and novelfull series now rest longer without changing the cadence of plain-TLS sites. ## Behavior - Plain-TLS series keep the 1h default cooldown. - Browser-backed series use `LATEST_CHAPTER_POLL_BROWSER_COOLDOWN`, defaulting to 6h. - Both cooldowns share the existing 15m minimum floor; invalid values retain the existing fallback behavior. - The poller still selects both classes in one due query per cycle. - Existing ordering and exclusions remain unchanged: reader-count precedence, least-recently-checked ordering, finished exclusion, archived polling, and orphan exclusion. ## Implementation - Added the browser cooldown to backend configuration and passed it through production poller construction. - Added the browser-site list as the single routing source used for both due-query cutoff selection and fetcher choice. - Kept all query values parameterized; the site list is passed as a bound PostgreSQL array parameter. - Updated startup logging to report interval, plain cooldown, browser cooldown, batch, and stagger. - Documented the variable, default, and floor in `README.md`, `.env.example`, `backend/AGENTS.md`, and `docker-compose.yml`. ## Review findings addressed The first review found that configuration parsing was correct but `startLatestPoller` did not pass `BrowserCooldown` into `latest.Poller`; every browser-backed row would therefore have been due immediately. Production construction now goes through `newLatestPoller`, with a regression test covering both cooldown fields. The review also identified duplicated browser-site knowledge in fetch routing. `slices.Contains(browserBackedSites, site)` now reuses the same list already supplied to the store query. ## Verification - Focused backend tests pass: `go test ./internal/latest ./internal/store .`. - Full suite passes: `go test ./...`. - `graphify update .` completed. - Issue #42 was updated and closed.
sulthan added 1 commit 2026-08-09 06:23:15 +07:00
sulthan merged commit cd3a7e3d01 into main 2026-08-09 06:25:49 +07:00
Sign in to join this conversation.