v4.10.0
Added
- Activity heatmap — hourly usage heatmap bucketing events by day-of-week × hour-of-day using portable integer epoch math (identical on SQLite and PostgreSQL) and shifted by a
tz_offsetquery param to reflect the viewer's local time, plus additional activity-dashboard metrics — useful for spotting low-traffic deploy/maintenance windows - One runner per domain — the job scheduler now guarantees a single runner processes a given domain at a time; new
job_domainmigration with supporting DAO/service logic - GitHub feedback — feedback is submitted directly as GitHub issues via
utils/github.py; the localfeedbacktable is dropped (new migration)
Changed
- DB schema validation reworked — schema validation now runs through
services/db.pyon startup, with a devmigratecommand and a lint-workflow hook - Job runner hardening — added a drain loop and failure safety net, consolidated queue claims, only cancels stuck jobs on runner reset, rests between iterations, and runs
gcduring scheduler reset openaimoved to a dev dependency; CI workflows optimized- Updated
lncrawl-scraper
Fixed
freewebnovel(#3060) — source corrected- Assorted cleanup and minor fixes across the crawler, binder, mail, and static-file middleware
Full Changelog: v4.9.0...v4.10.0