From 470f823900490dc21841d44f363ff759ac0ae2da Mon Sep 17 00:00:00 2001 From: Chuck Smith Date: Tue, 19 May 2026 07:42:03 -0400 Subject: [PATCH 1/8] feat: add job class name search to jobs index Text input filters the jobs list by class name (case-insensitive LIKE). Search term persists across status tab switches. Clear link shown when a search is active. Uses references(:job) to force a JOIN so the WHERE clause on solid_queue_jobs.class_name is valid. Co-Authored-By: Claude Sonnet 4.6 --- .../solid_queue_web/application.css | 30 +++++++++++++++ .../solid_queue_web/jobs_controller.rb | 7 ++-- app/views/solid_queue_web/jobs/index.html.erb | 23 +++++++++--- spec/requests/solid_queue_web/jobs_spec.rb | 37 +++++++++++++++++++ 4 files changed, 89 insertions(+), 8 deletions(-) diff --git a/app/assets/stylesheets/solid_queue_web/application.css b/app/assets/stylesheets/solid_queue_web/application.css index 78fca7e..24a7cd3 100644 --- a/app/assets/stylesheets/solid_queue_web/application.css +++ b/app/assets/stylesheets/solid_queue_web/application.css @@ -302,6 +302,36 @@ tbody tr:hover { background: var(--bg); } .sqd-row-actions { white-space: nowrap; text-align: right; width: 1%; } .sqd-row-actions form { display: inline; margin-left: 0.25rem; } +/* Search */ +.sqd-search { + display: flex; + gap: 0.5rem; + align-items: center; + margin-bottom: 1rem; +} + +.sqd-search__input { + width: 280px; + padding: 0.35rem 0.75rem; + border: 1px solid var(--border); + border-radius: 5px; + font-size: 13px; + background: var(--surface); + color: var(--text); + line-height: 1.5; +} + +.sqd-search__input:focus { + outline: 2px solid var(--primary); + outline-offset: -1px; + border-color: var(--primary); +} + +@media (max-width: 640px) { + .sqd-search { flex-wrap: wrap; } + .sqd-search__input { width: 100%; } +} + /* Filters */ .sqd-filters { display: flex; diff --git a/app/controllers/solid_queue_web/jobs_controller.rb b/app/controllers/solid_queue_web/jobs_controller.rb index aea74c4..c6d8669 100644 --- a/app/controllers/solid_queue_web/jobs_controller.rb +++ b/app/controllers/solid_queue_web/jobs_controller.rb @@ -1,10 +1,9 @@ module SolidQueueWeb class JobsController < ApplicationController - STATUSES = %w[ready scheduled claimed blocked failed].freeze - DISCARDABLE = %w[ready scheduled blocked].freeze - before_action :set_status_and_queue, only: [ :destroy, :discard_all ] + STATUSES = %w[ready scheduled claimed blocked failed].freeze + DISCARDABLE = %w[ready scheduled blocked].freeze EXECUTION_MODELS = { "ready" => SolidQueue::ReadyExecution, "scheduled" => SolidQueue::ScheduledExecution, @@ -16,8 +15,10 @@ class JobsController < ApplicationController def index @status = params[:status].presence_in(STATUSES) || "ready" @queue = params[:queue].presence + @search = params[:q].presence @jobs = EXECUTION_MODELS[@status].includes(:job) @jobs = @jobs.where(jobs: { queue_name: @queue }) if @queue.present? + @jobs = @jobs.references(:job).where("solid_queue_jobs.class_name LIKE ?", "%#{@search}%") if @search.present? @pagy, @jobs = pagy(@jobs.order(created_at: :desc)) end diff --git a/app/views/solid_queue_web/jobs/index.html.erb b/app/views/solid_queue_web/jobs/index.html.erb index f7f6089..e1f53ab 100644 --- a/app/views/solid_queue_web/jobs/index.html.erb +++ b/app/views/solid_queue_web/jobs/index.html.erb @@ -5,11 +5,11 @@
- <%= link_to "Ready", jobs_path(status: "ready", queue: @queue), class: @status == "ready" ? "active" : "" %> - <%= link_to "Scheduled", jobs_path(status: "scheduled", queue: @queue), class: @status == "scheduled" ? "active" : "" %> - <%= link_to "Running", jobs_path(status: "claimed", queue: @queue), class: @status == "claimed" ? "active" : "" %> - <%= link_to "Blocked", jobs_path(status: "blocked", queue: @queue), class: @status == "blocked" ? "active" : "" %> - <%= link_to "Failed", jobs_path(status: "failed", queue: @queue), class: @status == "failed" ? "active" : "" %> + <%= link_to "Ready", jobs_path(status: "ready", queue: @queue, q: @search), class: @status == "ready" ? "active" : "" %> + <%= link_to "Scheduled", jobs_path(status: "scheduled", queue: @queue, q: @search), class: @status == "scheduled" ? "active" : "" %> + <%= link_to "Running", jobs_path(status: "claimed", queue: @queue, q: @search), class: @status == "claimed" ? "active" : "" %> + <%= link_to "Blocked", jobs_path(status: "blocked", queue: @queue, q: @search), class: @status == "blocked" ? "active" : "" %> + <%= link_to "Failed", jobs_path(status: "failed", queue: @queue, q: @search), class: @status == "failed" ? "active" : "" %>
<% if discardable && @jobs.any? %>
@@ -22,6 +22,19 @@ <% end %>
+ +
<% if @jobs.empty? %>
No <%= @status %> jobs.
diff --git a/spec/requests/solid_queue_web/jobs_spec.rb b/spec/requests/solid_queue_web/jobs_spec.rb index 95ac5bc..ed5a243 100644 --- a/spec/requests/solid_queue_web/jobs_spec.rb +++ b/spec/requests/solid_queue_web/jobs_spec.rb @@ -66,6 +66,43 @@ end end + describe "GET /jobs/list?q= (class name search)" do + let!(:other_job) do + SolidQueue::Job.create!( + queue_name: "default", + class_name: "MailerJob", + arguments: {}, + active_job_id: SecureRandom.uuid + ) + end + + it "returns only jobs matching the search term" do + get "/jobs/list", params: { q: "Test" } + expect(response.body).to include("TestJob") + expect(response.body).not_to include("MailerJob") + end + + it "is case-insensitive" do + get "/jobs/list", params: { q: "test" } + expect(response.body).to include("TestJob") + end + + it "shows empty state when search matches nothing" do + get "/jobs/list", params: { q: "NoSuchJob" } + expect(response.body).to include("No ready jobs") + end + + it "renders a clear link when search is active" do + get "/jobs/list", params: { q: "Test" } + expect(response.body).to include("Clear") + end + + it "persists search term across status tab links" do + get "/jobs/list", params: { q: "Test" } + expect(response.body).to include("q=Test") + end + end + describe "DELETE /jobs/list/:id (discard single)" do it "discards the job and redirects (HTML)" do delete "/jobs/list/#{ready_execution.id}", params: { status: "ready" } From 90819acb7f42166b239f151aeba61c118d446ba6 Mon Sep 17 00:00:00 2001 From: Chuck Smith Date: Tue, 19 May 2026 07:50:10 -0400 Subject: [PATCH 2/8] feat: dynamic search auto-submit via Stimulus controller Registers a Stimulus Application instance scoped to this engine (sqd- prefixed controllers) and wires a SearchController that debounces input events, submitting the form after 300 ms once 4+ characters are typed or when the field is cleared. The JS is inlined via a new inline_scripts helper using the same pattern as inline_styles. Co-Authored-By: Claude Sonnet 4.6 --- .../javascripts/solid_queue_web/application.js | 15 +++++++++++++++ app/helpers/solid_queue_web/application_helper.rb | 5 +++++ .../layouts/solid_queue_web/application.html.erb | 1 + app/views/solid_queue_web/jobs/index.html.erb | 5 +++-- 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 app/assets/javascripts/solid_queue_web/application.js diff --git a/app/assets/javascripts/solid_queue_web/application.js b/app/assets/javascripts/solid_queue_web/application.js new file mode 100644 index 0000000..32a6afb --- /dev/null +++ b/app/assets/javascripts/solid_queue_web/application.js @@ -0,0 +1,15 @@ +import { Application, Controller } from "@hotwired/stimulus" + +const application = Application.start() + +class SearchController extends Controller { + filter({ target }) { + clearTimeout(this._timer) + const len = target.value.length + if (len >= 4 || len === 0) { + this._timer = setTimeout(() => target.form.requestSubmit(), 300) + } + } +} + +application.register("sqd-search", SearchController) \ No newline at end of file diff --git a/app/helpers/solid_queue_web/application_helper.rb b/app/helpers/solid_queue_web/application_helper.rb index 8656b78..9c236cd 100644 --- a/app/helpers/solid_queue_web/application_helper.rb +++ b/app/helpers/solid_queue_web/application_helper.rb @@ -4,5 +4,10 @@ def inline_styles css = SolidQueueWeb::Engine.root.join("app/assets/stylesheets/solid_queue_web/application.css").read content_tag(:style, css.html_safe) end + + def inline_scripts + js = SolidQueueWeb::Engine.root.join("app/assets/javascripts/solid_queue_web/application.js").read + content_tag(:script, js.html_safe, type: "module") + end end end diff --git a/app/views/layouts/solid_queue_web/application.html.erb b/app/views/layouts/solid_queue_web/application.html.erb index fdefcb9..78c16da 100644 --- a/app/views/layouts/solid_queue_web/application.html.erb +++ b/app/views/layouts/solid_queue_web/application.html.erb @@ -7,6 +7,7 @@ <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= inline_styles %> + <%= inline_scripts %> diff --git a/app/views/solid_queue_web/jobs/index.html.erb b/app/views/solid_queue_web/jobs/index.html.erb index e1f53ab..ffeb616 100644 --- a/app/views/solid_queue_web/jobs/index.html.erb +++ b/app/views/solid_queue_web/jobs/index.html.erb @@ -22,13 +22,14 @@ <% end %>
-
- + <% if @queue.present? %> <% end %> + data-action="input->search#filter"> <% if @search.present? %> <%= link_to "Clear", jobs_path(status: @status, queue: @queue), class: "sqd-btn sqd-btn--muted" %> diff --git a/config/importmap.rb b/config/importmap.rb new file mode 100644 index 0000000..d311d9e --- /dev/null +++ b/config/importmap.rb @@ -0,0 +1,2 @@ +pin "solid_queue_web", to: "solid_queue_web/application.js" +pin "solid_queue_web/search_controller", to: "solid_queue_web/search_controller.js" \ No newline at end of file diff --git a/lib/solid_queue_web.rb b/lib/solid_queue_web.rb index 7e46fc8..ab32d15 100644 --- a/lib/solid_queue_web.rb +++ b/lib/solid_queue_web.rb @@ -1,4 +1,5 @@ require "solid_queue_web/version" +require "importmap-rails" require "solid_queue_web/engine" module SolidQueueWeb diff --git a/lib/solid_queue_web/engine.rb b/lib/solid_queue_web/engine.rb index fbe79cc..3c356ba 100644 --- a/lib/solid_queue_web/engine.rb +++ b/lib/solid_queue_web/engine.rb @@ -9,6 +9,13 @@ class Engine < ::Rails::Engine config.i18n.load_path += Gem.find_files("pagy/locales/en.yml") + initializer "solid_queue_web.importmap", before: "importmap" do |app| + if app.config.respond_to?(:importmap) + app.config.importmap.paths << root.join("config/importmap.rb") + app.config.importmap.cache_sweepers << root.join("app/assets/javascripts") + end + end + initializer "solid_queue_web.pagy" do Pagy::OPTIONS[:limit] = 25 end diff --git a/solid_queue_web.gemspec b/solid_queue_web.gemspec index 2da1d34..b089ef0 100644 --- a/solid_queue_web.gemspec +++ b/solid_queue_web.gemspec @@ -27,4 +27,5 @@ Gem::Specification.new do |spec| spec.add_dependency "solid_queue", ">= 1.0" spec.add_dependency "pagy", ">= 43.0" spec.add_dependency "turbo-rails", ">= 2.0" + spec.add_dependency "importmap-rails", ">= 1.2" end diff --git a/spec/dummy/config/importmap.rb b/spec/dummy/config/importmap.rb new file mode 100644 index 0000000..2e57901 --- /dev/null +++ b/spec/dummy/config/importmap.rb @@ -0,0 +1 @@ +pin "@hotwired/stimulus", to: "https://ga.jspm.io/npm:@hotwired/stimulus@3.2.2/dist/stimulus.js" \ No newline at end of file From e3891e8a7b53bb26058e25da81bd5817245d8e17 Mon Sep 17 00:00:00 2001 From: Chuck Smith Date: Tue, 19 May 2026 08:25:48 -0400 Subject: [PATCH 4/8] fix: serve engine JS via Propshaft asset pipeline Move JS files from app/assets/javascripts to app/javascript (the conventional importmap-rails location) and add a solid_queue_web.assets initializer that registers the engine's app/javascript directory with the host app's asset pipeline. Add Propshaft to the Gemfile so the dummy dev server can resolve and serve the JS assets. Co-Authored-By: Claude Sonnet 4.6 --- Gemfile | 1 + Gemfile.lock | 6 ++++++ .../solid_queue_web/application.js | 0 .../solid_queue_web/search_controller.js | 0 lib/solid_queue_web/engine.rb | 8 +++++++- 5 files changed, 14 insertions(+), 1 deletion(-) rename app/{assets/javascripts => javascript}/solid_queue_web/application.js (100%) rename app/{assets/javascripts => javascript}/solid_queue_web/search_controller.js (100%) diff --git a/Gemfile b/Gemfile index 8a3070c..f5c7f7c 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,7 @@ source "https://rubygems.org" gemspec gem "puma" +gem "propshaft" gem "sqlite3" diff --git a/Gemfile.lock b/Gemfile.lock index 5ce2472..8adfce5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -159,6 +159,10 @@ GEM prettyprint prettyprint (0.2.0) prism (1.9.0) + propshaft (1.3.2) + actionpack (>= 7.0.0) + activesupport (>= 7.0.0) + rack psych (5.3.1) date stringio @@ -302,6 +306,7 @@ PLATFORMS arm64-darwin DEPENDENCIES + propshaft puma rspec-rails rubocop-rails-omakase @@ -364,6 +369,7 @@ CHECKSUMS pp (0.6.3) sha256=2951d514450b93ccfeb1df7d021cae0da16e0a7f95ee1e2273719669d0ab9df6 prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193 prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85 + propshaft (1.3.2) sha256=1d56a3e56a92c21bfc29caf07406b5386b00d4c47ddf357cf989a5a234b1389e psych (5.3.1) sha256=eb7a57cef10c9d70173ff74e739d843ac3b2c019a003de48447b2963d81b1974 puma (8.0.1) sha256=7b94e50c07655718c1fb8ae41a11fc06c7d61293208b3aa608ff71a46d3ad37c raabro (1.4.0) sha256=d4fa9ff5172391edb92b242eed8be802d1934b1464061ae5e70d80962c5da882 diff --git a/app/assets/javascripts/solid_queue_web/application.js b/app/javascript/solid_queue_web/application.js similarity index 100% rename from app/assets/javascripts/solid_queue_web/application.js rename to app/javascript/solid_queue_web/application.js diff --git a/app/assets/javascripts/solid_queue_web/search_controller.js b/app/javascript/solid_queue_web/search_controller.js similarity index 100% rename from app/assets/javascripts/solid_queue_web/search_controller.js rename to app/javascript/solid_queue_web/search_controller.js diff --git a/lib/solid_queue_web/engine.rb b/lib/solid_queue_web/engine.rb index 3c356ba..28e9b63 100644 --- a/lib/solid_queue_web/engine.rb +++ b/lib/solid_queue_web/engine.rb @@ -9,10 +9,16 @@ class Engine < ::Rails::Engine config.i18n.load_path += Gem.find_files("pagy/locales/en.yml") + initializer "solid_queue_web.assets" do |app| + if app.config.respond_to?(:assets) + app.config.assets.paths << root.join("app/javascript") + end + end + initializer "solid_queue_web.importmap", before: "importmap" do |app| if app.config.respond_to?(:importmap) app.config.importmap.paths << root.join("config/importmap.rb") - app.config.importmap.cache_sweepers << root.join("app/assets/javascripts") + app.config.importmap.cache_sweepers << root.join("app/javascript") end end From 89ce50b91f58a5e988b7be25adf3bb2f12f6f7b1 Mon Sep 17 00:00:00 2001 From: Chuck Smith Date: Tue, 19 May 2026 08:33:10 -0400 Subject: [PATCH 5/8] feat: turbo frame navigation for jobs filter and search Import @hotwired/turbo in the engine entry point so Turbo is active when using the engine's own layout. Add data-turbo-action="advance" to the jobs-table frame so status filter clicks and search submissions update only the table region and push the filtered URL to history. Pin @hotwired/turbo in the dummy app's importmap from CDN for the dev server. Co-Authored-By: Claude Sonnet 4.6 --- app/javascript/solid_queue_web/application.js | 1 + app/views/solid_queue_web/jobs/index.html.erb | 2 +- spec/dummy/config/importmap.rb | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/javascript/solid_queue_web/application.js b/app/javascript/solid_queue_web/application.js index 8af11d0..ad1349d 100644 --- a/app/javascript/solid_queue_web/application.js +++ b/app/javascript/solid_queue_web/application.js @@ -1,3 +1,4 @@ +import "@hotwired/turbo" import { Application } from "@hotwired/stimulus" import SearchController from "solid_queue_web/search_controller" diff --git a/app/views/solid_queue_web/jobs/index.html.erb b/app/views/solid_queue_web/jobs/index.html.erb index 5d08a4a..f647347 100644 --- a/app/views/solid_queue_web/jobs/index.html.erb +++ b/app/views/solid_queue_web/jobs/index.html.erb @@ -1,6 +1,6 @@

Jobs

-<%= turbo_frame_tag "jobs-table" do %> +<%= turbo_frame_tag "jobs-table", data: { turbo_action: "advance" } do %> <% discardable = SolidQueueWeb::JobsController::DISCARDABLE.include?(@status) %>
diff --git a/spec/dummy/config/importmap.rb b/spec/dummy/config/importmap.rb index 2e57901..d9879c7 100644 --- a/spec/dummy/config/importmap.rb +++ b/spec/dummy/config/importmap.rb @@ -1 +1,2 @@ -pin "@hotwired/stimulus", to: "https://ga.jspm.io/npm:@hotwired/stimulus@3.2.2/dist/stimulus.js" \ No newline at end of file +pin "@hotwired/turbo", to: "https://cdn.jsdelivr.net/npm/@hotwired/turbo@8.0.12/dist/turbo.es2017.esm.js" +pin "@hotwired/stimulus", to: "https://cdn.jsdelivr.net/npm/@hotwired/stimulus@3.2.2/dist/stimulus.js" \ No newline at end of file From 115007dc060c76ddb0f09e161bc1d3392ff3b1e7 Mon Sep 17 00:00:00 2001 From: Chuck Smith Date: Tue, 19 May 2026 08:36:10 -0400 Subject: [PATCH 6/8] fix: correct Turbo CDN URL for dummy app importmap Use turbo.es2017-esm.js (dash before esm, not dot) at the matching 8.0.23 version that turbo-rails 2.0.23 bundles. Co-Authored-By: Claude Sonnet 4.6 --- spec/dummy/config/importmap.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/dummy/config/importmap.rb b/spec/dummy/config/importmap.rb index d9879c7..aa4142b 100644 --- a/spec/dummy/config/importmap.rb +++ b/spec/dummy/config/importmap.rb @@ -1,2 +1,2 @@ -pin "@hotwired/turbo", to: "https://cdn.jsdelivr.net/npm/@hotwired/turbo@8.0.12/dist/turbo.es2017.esm.js" +pin "@hotwired/turbo", to: "https://cdn.jsdelivr.net/npm/@hotwired/turbo@8.0.23/dist/turbo.es2017-esm.js" pin "@hotwired/stimulus", to: "https://cdn.jsdelivr.net/npm/@hotwired/stimulus@3.2.2/dist/stimulus.js" \ No newline at end of file From ffd1865f02a2555e2ea0c0b43b1b86dfb338e3b1 Mon Sep 17 00:00:00 2001 From: Chuck Smith Date: Tue, 19 May 2026 08:41:50 -0400 Subject: [PATCH 7/8] style: fix rubocop offenses (trailing newlines, empty module body line) Co-Authored-By: Claude Sonnet 4.6 --- app/helpers/solid_queue_web/application_helper.rb | 1 - config/importmap.rb | 2 +- spec/dummy/config/importmap.rb | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/helpers/solid_queue_web/application_helper.rb b/app/helpers/solid_queue_web/application_helper.rb index af65f46..8656b78 100644 --- a/app/helpers/solid_queue_web/application_helper.rb +++ b/app/helpers/solid_queue_web/application_helper.rb @@ -4,6 +4,5 @@ def inline_styles css = SolidQueueWeb::Engine.root.join("app/assets/stylesheets/solid_queue_web/application.css").read content_tag(:style, css.html_safe) end - end end diff --git a/config/importmap.rb b/config/importmap.rb index d311d9e..75bc253 100644 --- a/config/importmap.rb +++ b/config/importmap.rb @@ -1,2 +1,2 @@ pin "solid_queue_web", to: "solid_queue_web/application.js" -pin "solid_queue_web/search_controller", to: "solid_queue_web/search_controller.js" \ No newline at end of file +pin "solid_queue_web/search_controller", to: "solid_queue_web/search_controller.js" diff --git a/spec/dummy/config/importmap.rb b/spec/dummy/config/importmap.rb index aa4142b..256d812 100644 --- a/spec/dummy/config/importmap.rb +++ b/spec/dummy/config/importmap.rb @@ -1,2 +1,2 @@ pin "@hotwired/turbo", to: "https://cdn.jsdelivr.net/npm/@hotwired/turbo@8.0.23/dist/turbo.es2017-esm.js" -pin "@hotwired/stimulus", to: "https://cdn.jsdelivr.net/npm/@hotwired/stimulus@3.2.2/dist/stimulus.js" \ No newline at end of file +pin "@hotwired/stimulus", to: "https://cdn.jsdelivr.net/npm/@hotwired/stimulus@3.2.2/dist/stimulus.js" From 7e67679e2cc3c25e36359b68e3ee2a1ebbb10ddb Mon Sep 17 00:00:00 2001 From: Chuck Smith Date: Tue, 19 May 2026 08:44:04 -0400 Subject: [PATCH 8/8] ci: add x86_64-linux platform to Gemfile.lock Co-Authored-By: Claude Sonnet 4.6 --- Gemfile.lock | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Gemfile.lock b/Gemfile.lock index 8adfce5..92c4383 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -147,6 +147,8 @@ GEM nio4r (2.7.5) nokogiri (1.19.3-arm64-darwin) racc (~> 1.4) + nokogiri (1.19.3-x86_64-linux-gnu) + racc (~> 1.4) pagy (43.5.4) json uri @@ -281,6 +283,7 @@ GEM railties (>= 7.1) thor (>= 1.3.1) sqlite3 (2.9.4-arm64-darwin) + sqlite3 (2.9.4-x86_64-linux-gnu) stringio (3.2.0) thor (1.5.0) timeout (0.6.1) @@ -304,6 +307,7 @@ GEM PLATFORMS arm64-darwin + x86_64-linux DEPENDENCIES propshaft @@ -363,6 +367,7 @@ CHECKSUMS net-smtp (0.5.1) sha256=ed96a0af63c524fceb4b29b0d352195c30d82dd916a42f03c62a3a70e5b70736 nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1 nokogiri (1.19.3-arm64-darwin) sha256=71b9bd424b1b7abc18b05052a1a3cfd3627abdca62be280854cc411791357e42 + nokogiri (1.19.3-x86_64-linux-gnu) sha256=2f5078620fe12e83669b5b17311b32532a8153d02eee7ad06948b926d6080976 pagy (43.5.4) sha256=2bdf3fa6b1e0cac5bbafe5d077fb24eb971f72f3194f8c6863a0f3867261ce59 parallel (2.1.0) sha256=b35258865c2e31134c5ecb708beaaf6772adf9d5efae28e93e99260877b09356 parser (3.3.11.1) sha256=d17ace7aabe3e72c3cc94043714be27cc6f852f104d81aa284c2281aecc65d54 @@ -406,6 +411,7 @@ CHECKSUMS solid_queue (1.4.0) sha256=e6a18d196f0b27cb6e3c77c5b31258b05fb634f8ed64fb1866ed164047216c2a solid_queue_web (0.4.0) sqlite3 (2.9.4-arm64-darwin) sha256=1d5aad413a815d236e96d43f05a1acc600b6cd086800770342a3f9c2877499ff + sqlite3 (2.9.4-x86_64-linux-gnu) sha256=537a3eda71b1df1336d0055cbebe55a7317c34870c192c7b6b9d8d0be6871847 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 timeout (0.6.1) sha256=78f57368a7e7bbadec56971f78a3f5ecbcfb59b7fcbb0a3ed6ddc08a5094accb