.vbw-planning/milestones/ui-fixes-and-smart-scraping/phases/01-ui-polish-and-bug-fixes/01-SUMMARY.md
Dismissible OPML import banner on the sources index page. Users can now click an X button to dismiss the import history notification. Dismissed banners are hidden via a dismissed_at timestamp on the ImportHistory model, filtered out of the controller query, and removed from the DOM via Turbo Stream.
db/migrate/20260305120000_add_dismissed_at_to_import_histories.rb (created)test/dummy/db/schema.rb (modified - schema dump)app/controllers/source_monitor/import_history_dismissals_controller.rb (created)config/routes.rb (modified - added nested dismissal resource)test/controllers/source_monitor/import_history_dismissals_controller_test.rb (created)app/views/source_monitor/sources/_import_history_panel.html.erb (modified - added dismiss button)app/models/source_monitor/import_history.rb (modified - added not_dismissed scope)app/controllers/source_monitor/sources_controller.rb (modified - chained not_dismissed)test/models/source_monitor/import_history_dismissed_test.rb (created)resource :dismissal (singular nested resource with POST) instead of PATCH /import_histories/:id/dismiss to follow the project's Everything-is-CRUD routing conventionassert_response :not_found instead of assert_raises(ActiveRecord::RecordNotFound) because Rails integration tests convert exceptions to HTTP responses