Releases: dchuk/source_monitor
Releases · dchuk/source_monitor
v0.15.0
Dependency maintenance + documentation release. No source/API changes.
Security
- Bump Rails to 8.1.3 via the 8.1.2.1 security release (#104) — five CVEs (XSS in tag/DebugExceptions helpers, Active Storage path-traversal, NumberConverter).
Changed
- Allow ViewComponent 4.x (#96):
view_componentconstraint widened>= 3.0, < 4.0→>= 3.0, < 5.0(lockfile now 4.5.0). Engine uses only stable VC APIs; host apps with VC 3.x customizations should review v4 notes beforebundle update. - Solid Queue 1.4.0 (#102); nokolexbor 0.6.4 (#103); json 2.19.2 (#99).
- Dev/CI bumps: test-prof 1.6.0 (#101), webmock 3.26.2 (#100), brakeman 8.0.4 (#88), selenium-webdriver 4.41.0 (#78), stackprof 0.2.28 (#71), GitHub Actions artifact actions (#87, #86).
Documentation
- Consolidate conventions into
AGENTS.mdas canonical cross-agent reference (#134); update README/docs/skill version refs to 0.15.0.
v0.14.0
Security (BREAKING)
- Fail-closed engine access by default (#129). With no authentication/authorization handler configured, every mounted SourceMonitor route now returns
403 Forbidden. Configureconfig.authentication.authenticate_with/authorize_with, or setconfig.authentication.open_access = true(demo/non-production only). See docs/upgrade.md.
Fixed
- Request flashes no longer leak across users (#130). Flash toasts are delivered response-local instead of broadcast to a global ActionCable stream.
Changed
- Gem package no longer ships
.claudeinternals (#131). Only.claude/skills/sm-*skills are packaged.
v0.13.0
Changed
- Fetch pipeline performance overhaul — resolves production DB overload on small servers (2-core/4GB) where 569 fetch jobs backed up and PostgreSQL hit 150% CPU
- Normalize GUIDs to lowercase on write, replacing
LOWER(guid)queries that forced sequential scans — existing btree indexes now used correctly - Restructure advisory lock in FetchRunner into 3 phases (lock/fetch/write) so DB connections are not held idle during HTTP requests
- Add BatchItemCreator for bulk item lookups — reduces per-fetch queries from ~N*2 to 2 regardless of entry count
- Normalize GUIDs to lowercase on write, replacing
v0.12.4
Fixed
- ScrapeItemJob failing with "Locking a record with unpersisted changes" on Rails 8.1.2 — replaced
assign_attributeswithreloadin scraping state machine - FetchFeedJob permanently failing on advisory lock contention — switched to exponential backoff with jitter and graceful discard on exhaustion
- OPML import dismissal only hiding the latest notification — now dismisses all undismissed import histories for the user
- Dashboard pagination not working — schedule group keys were silently dropped by overly restrictive param whitelist regex
- Source filter dropdowns not auto-submitting — missing
filter-submitStimulus controller declaration on search forms (also fixed on logs index)
v0.12.3
Added
- Cross-page "select all" for scraping recommendations — banner appears when candidates span multiple pages, backend resolves all candidates via query
Fixed
- Source action dropdown icon rendered as gear instead of vertical ellipsis (three dots)
- "Enable Scraping" button did not open confirmation modal — Stimulus controller scope and missing
stopmethod fixed
v0.12.2
v0.12.1
Documentation
- Updated README, docs/setup, docs/upgrade with v0.12.0 version references and upgrade guide
- Updated 4 skill references (sm-job, sm-architecture, sm-domain-model, sm-upgrade) for service class extractions, new components, and model methods
- Improved
/releasecommand: Step 4 now spawns agents to automatically audit AND fix all stale docs before every release
Full changelog: https://github.com/dchuk/source_monitor/blob/main/CHANGELOG.md
v0.12.0
Rails Audit & Refactoring Release
Added
StatusBadgeComponentfor unified status badge renderingIconComponentwith named icon registrySourceDetailsPresenter,SourcesFilterPresenter,FilterDropdownComponentSetSourcecontroller concern (7 controllers)rescue_from ActiveRecord::RecordNotFoundwith Turbo-aware 404Source.enable_scraping!,Item#restore!- Modal accessibility:
role="dialog",aria-modal, focus trapping - Logs index Turbo Frame, date range scopes, Result structs
Fixed
- LogCleanupJob cascades deletes to LogEntry records
health_statusdefault aligned between model and database- Pagination tests parallel-safe
- Deadlock rescue in 4 jobs
Changed
- 5 jobs extracted to service classes (ScrapeItemJob, DownloadContentImagesJob, FaviconFetchJob, SourceHealthCheckJob, ImportSessionHealthCheckJob)
- 30 forwarding methods removed from FeedFetcher/ItemCreator
- Test factory helpers centralized into ModelFactories module
Full changelog: https://github.com/dchuk/source_monitor/blob/main/CHANGELOG.md
v0.11.1
v0.11.0
Breaking Changes
- Health status model simplified from 7 values to 4.
healthy/auto_paused/unknown→working,warning/critical→failing.decliningandimprovingunchanged. Requires migration:bin/rails source_monitor:upgrade && bin/rails db:migrate. config.health.warning_thresholdremoved. Delete this line from your initializer if present.
Added
- Smart scrape recommendations. Dashboard widget and sources index badge identify sources with low feed word counts that would benefit from scraping.
- Bulk scrape enablement. Select multiple recommended sources and enable scraping in one action with confirmation modal.
- Test scrape with modal results. "Test Scrape" button runs a synchronous scrape and shows feed vs scraped word count comparison in a modal.
- Cloudflare bypass techniques. Cookie replay and UA rotation for Cloudflare-challenged feeds.
- Consecutive failure auto-pause. Sources that fail consecutively are automatically paused.
- Error categorization on fetch logs. New
error_categorycolumn classifies fetch failures. - Dashboard pagination. Turbo Frame pagination for sources list, fetch schedule buckets, and health distribution badges.
- Health distribution badges. Dashboard shows working/declining/improving/failing source counts.
- Sortable computed columns. New Items/Day, Avg Feed Words, and Avg Scraped Words columns.
- Dismissible OPML import banner.
- SVG favicon conversion. SVG favicons auto-converted to PNG via MiniMagick.
Changed
- Health badge colors updated for 4-status model.
- Sources index splits Health and Fetch Status into separate columns.
- Fetch interval shown as rate "(X.Xx / day)" under fetch status badge.
- Enabling auto-scrape now sets both
scraping_enabledandauto_scrape, and queues existing unscraped items.
Fixed
- Dashboard fetch schedule source links no longer show "Content missing".
- Force-fetch lock contention handled gracefully.
- Blocked response detection via HTML body sniffing.
Migration Required
Run bin/rails source_monitor:upgrade then bin/rails db:migrate.