Skip to content

Releases: dchuk/source_monitor

v0.15.0

18 Jun 19:28
72e4fa2

Choose a tag to compare

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_component constraint 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 before bundle 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.md as canonical cross-agent reference (#134); update README/docs/skill version refs to 0.15.0.

v0.14.0

28 May 21:31
7dcda89

Choose a tag to compare

Security (BREAKING)

  • Fail-closed engine access by default (#129). With no authentication/authorization handler configured, every mounted SourceMonitor route now returns 403 Forbidden. Configure config.authentication.authenticate_with/authorize_with, or set config.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 .claude internals (#131). Only .claude/skills/sm-* skills are packaged.

v0.13.0

25 Mar 07:02
52e3135

Choose a tag to compare

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

v0.12.4

17 Mar 15:44
6d3da68

Choose a tag to compare

Fixed

  • ScrapeItemJob failing with "Locking a record with unpersisted changes" on Rails 8.1.2 — replaced assign_attributes with reload in 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-submit Stimulus controller declaration on search forms (also fixed on logs index)

v0.12.3

17 Mar 04:34
4495455

Choose a tag to compare

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 stop method fixed

v0.12.2

15 Mar 22:22
bc5ec76

Choose a tag to compare

Fixed

  • Health check progress counter stuck at 0/N during OPML import — aligned status vocabulary (working/failing) across all consumers that previously expected healthy/unhealthy

v0.12.1

15 Mar 16:25
632a9a7

Choose a tag to compare

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 /release command: 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

15 Mar 15:04
f66b74e

Choose a tag to compare

Rails Audit & Refactoring Release

Added

  • StatusBadgeComponent for unified status badge rendering
  • IconComponent with named icon registry
  • SourceDetailsPresenter, SourcesFilterPresenter, FilterDropdownComponent
  • SetSource controller concern (7 controllers)
  • rescue_from ActiveRecord::RecordNotFound with Turbo-aware 404
  • Source.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_status default 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

13 Mar 22:15
57b7775

Choose a tag to compare

Fixed

  • Dashboard health status chips (Working/Failing) no longer duplicate when the page is left open — the Turbo Stream target now wraps the entire stats partial for atomic replacement

v0.11.0

13 Mar 19:13
c45cc45

Choose a tag to compare

Breaking Changes

  • Health status model simplified from 7 values to 4. healthy/auto_paused/unknownworking, warning/criticalfailing. declining and improving unchanged. Requires migration: bin/rails source_monitor:upgrade && bin/rails db:migrate.
  • config.health.warning_threshold removed. 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_category column 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_enabled and auto_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.