Skip to content
CAI
Software that uses CAICheck a score

bensheldon/good_job

51.5

Adequate · 19 September 2026

10.2k

lines of production code

Ruby

with JavaScript

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is GoodJob, a background job processor for Ruby on Rails that manages job execution, scheduling, and monitoring. It provides a comprehensive dashboard for observing job performance, managing cron entries, and controlling process concurrency through a modern web interface. The platform supports advanced features such as batch processing, advisory locking, and inline job buffering to ensure data consistency and reliable task execution.

How it got here

2020–2021 — GoodJob v4 architecture and testing

25 changes.

This period focused on the major release of GoodJob v4, introducing a new Capsule-based architecture, multi-scheduler support, and inline job buffering. The work involved modernizing the development environment with comprehensive tooling, migrating the test suite to RSpec, and adding extensive integration and system tests to ensure stability.

2022 — GoodJob v4 dashboard engine overhaul

19 changes.

This period focused on upgrading GoodJob to version 4, restructuring the dashboard into a mountable Rails engine with a modernized UI featuring dark mode and Turbo integration. Significant work included implementing new performance and scheduling charts, expanding cron and process management views, and refactoring core models and filtering logic for better performance and maintainability. The effort was supported by comprehensive test coverage for the new architecture and the addition of development container configurations.

2023–2026 — Dashboard overhaul and type safety

22 changes.

This period focused on significantly enhancing the GoodJob dashboard with new batch management views, performance metrics, and customizable UI extensions, supported by a frontend migration to Stimulus and Turbo. Concurrently, the project introduced Sorbet static type checking to improve code reliability and refactored the demo application to serve as a modern, standalone test harness for v4 features.

Features

Add Batches dashboard views

The dashboard now includes dedicated views for managing job batches. Users can view a paginated list of batches on the index page, inspect batch details and attributes on the show page, and see the associated jobs (both batched and callback jobs) with their status, queue, priority, labels, and execution counts. The interface supports retrying discarded batches and inspecting job parameters via a collapsible panel.

_app/views/good\job/batches · high confidence

Add GoodJob executable script

A new executable script has been added to the project, allowing users to run GoodJob directly from the command line. The script initializes the CLI environment and starts the application with the provided arguments.

exe · high confidence

Add Sorbet RBI type annotations for Rails and gems

The project now includes generated Sorbet RBI files for core Rails components (ActionMailer, ActionPack, ActionView, ActiveJob, ActiveModel, ActiveRecord, ActiveSupport, Railties) and key gems (ActionCable, ActionMailbox, Faraday, GlobalID, Minitest, Rainbow, Trix). These annotations provide static type definitions for the framework and dependencies, enabling Sorbet to perform type checking on the codebase.

sorbet/rbi · high confidence

Add Sorbet/Tapioca configuration and pre-require setup

This change introduces the initial configuration for Sorbet and Tapioca type generation. A new \config.yml\ file defines the gem and DSL generator settings, including a custom prerequire script. The \prerequire.rb\ file ensures Rails is fully loaded and initializes a dummy application class to resolve issues with engine descendants and Capybara integration. Additionally, \require.rb\ explicitly lists all necessary dependencies (such as Active Job, Good Job, Rails, and various concurrent-ruby components) to ensure the type generator has access to the correct runtime context.

sorbet/tapioca · high confidence

Add customizable view partials for GoodJob dashboard extensions

The GoodJob dashboard now supports three new customizable view partials (\_custom\_head, \_custom\_job\_details, and \_custom\_execution\_details) that allow users to inject custom content into the dashboard's HTML head, job show page, and execution details sections respectively. These partials provide access to application helpers via main\_app and relevant job/execution objects, enabling tailored UI enhancements without modifying core GoodJob views.

_app/views/good\job · high confidence

Added benchmark scripts for job throughput, advisory locks, and scheduler memory

New scripts have been added to the \scripts/\ directory to help users measure performance characteristics of GoodJob. \benchmark\_job\_throughput.rb\ benchmarks job selection strategies (sorting by priority, creation time, and queue order) using the \GoodJob::Execution\ model. \benchmark\_advisory\_locks.rb\ compares the performance of session-level versus transaction-level advisory locks. \benchmark\_scheduler\_memory.rb\ profiles memory usage when creating scheduler threads. These tools allow users to evaluate the impact of different configuration options on throughput and resource consumption.

scripts · high confidence

Added example startup scripts for FreeBSD and systemd

Users can now deploy GoodJob using standard init systems on FreeBSD and Linux. The examples directory includes a new rc.d script for FreeBSD, allowing the service to be enabled and managed via /etc/rc.conf, and a systemd unit file for Linux, which supports Type=notify (available since GoodJob v3.17.0) for automatic restarts and status reporting.

examples · high confidence

Enable Sorbet static type checking for the project

A new Sorbet configuration file has been added to the project root, enabling static type checking. The configuration specifies the current directory as the source root and excludes the \vendor/\ and \tmp/\ directories from analysis, ensuring that third-party code and temporary files do not interfere with type inference.

sorbet · high confidence

GoodJob v4 release with new architecture and features

GoodJob v4 introduces a new multi-scheduler architecture that allows running multiple schedulers for different queues, improving performance and scalability. The release includes a new CronEntry model for managing scheduled jobs, an ExecutionResult class for tracking job execution outcomes, and a Daemon class for managing daemonization. Additionally, the demo application has been moved from test/dummy to demo.

_good\job · high confidence

Initial GitHub Codespaces and devcontainer configuration

Added a complete development container setup for Ruby on Rails and PostgreSQL, enabling users to start coding immediately in GitHub Codespaces or VS Code Remote-Containers. The configuration includes a Dockerfile that installs Ruby, Node.js, and Chromium (replacing Chrome to support Apple M1/Arm CPUs), along with docker-compose.yml to orchestrate the app and database services, and devcontainer.json to define the workspace environment and port forwarding.

.devcontainer · high confidence

New ActiveJob extensions for concurrency, labels, batches, and notification control

This change introduces several new ActiveJob extensions to the GoodJob adapter. The Concurrency extension adds support for limiting concurrent job execution via configurable limits and throttles, using advisory locks and supporting dynamic keys and labels. The Labels extension allows jobs to be tagged with custom labels for better organization and filtering. The Batches extension provides integration with GoodJob batches, including a debug warning when jobs are enqueued within a batch but not using the GoodJob adapter. The InterruptErrors extension raises an exception when a job is interrupted and retried. The NotifyOptions extension allows controlling whether GoodJob emits a NOTIFY event when a job is enqueued, either globally or per-job.

_lib/good\_job/active\_job\extensions · high confidence

New Cleaner and Pause management pages with updated dashboard UI components

The dashboard now includes a Cleaner page to view discarded jobs grouped by class or exception with time-based filtering, and a Pause page to temporarily suspend jobs by queue, class, or label. The shared UI components have been updated to support these features and improve usability: the navbar now displays counts for jobs, batches, cron schedules (split by enabled/paused), processes, pauses, and discarded jobs, along with a live poll toggle and environment label; a secondary navbar shows the last updated time; a new footer displays the GoodJob version; and shared partials for alerts (toast notifications), filtering (queues, job classes, labels, search), and chart containers (with optional vertical legend) have been added to support the new and existing dashboard views.

_app/views/good\job/shared · high confidence

New Cron Entries dashboard for managing scheduled jobs

The GoodJob dashboard now includes a dedicated Cron Entries section, allowing users to view, inspect, and manage cron schedules directly. The new index page displays a table of all configured cron jobs, showing their key, job class, schedule, next scheduled run, last run time, and current status (active or paused). Users can toggle the enabled state of individual cron entries to temporarily disable or re-enable them, enqueue a specific job immediately, and inspect the full configuration details of each schedule. A separate show page provides a detailed view of a specific cron entry's associated job history.

_app/views/good\_job/cron\entries · high confidence

New GoodJob performance and scheduling charts

The GoodJob dashboard now includes new visualizations for monitoring job performance and scheduling. A performance index chart displays total execution duration over time, broken down by individual job class, with configurable time ranges (1h, 6h, 24h, 7d). A performance show chart provides a histogram of execution durations for specific job classes, helping identify slow jobs. Additionally, a scheduled-by-queue chart shows the volume of scheduled jobs per queue over time. These charts replace previous implementations with more granular, time-series-based data and support vertical legends for better readability.

_app/charts/good\job · high confidence

New dashboard helper modules for status badges, duration formatting, and icon rendering

This change introduces two new helper modules, \ApplicationHelper\ and \IconsHelper\, within the GoodJob engine to support the new dashboard UI. \IconsHelper\ provides logic for rendering SVG icons using the \\<use\>\ tag and generating status badges with specific colors for job states (e.g., 'succeeded' maps to 'success', 'discarded' to 'danger'). \ApplicationHelper\ adds utilities for formatting job durations into human-readable strings, handling relative time displays, and managing i18n translation lookups with fallbacks for missing keys. These helpers enable the dashboard to display job status, performance metrics, and localized text consistently.

app/helpers · high confidence

New install and update generators for GoodJob migrations

GoodJob now provides dedicated Rails generators (\good\_job:install\ and \good\_job:update\) to manage database schema changes. The install generator creates a monolithic migration file for initial setup, while the update generator produces idempotent incremental migration files to safely add new columns (such as \active\_job\_id\, \concurrency\_key\, and \cron\_key\) without overwriting existing data. Both generators support a \--database\ option to target specific database connections, allowing for flexible configuration in multi-database applications.

_lib/generators/good\job · high confidence

New performance dashboard with time-range controls and execution statistics

The Good Job interface now includes a dedicated performance dashboard that allows users to analyze job execution metrics over specific time periods. The new views introduce a time-range selector component with preset options and custom date pickers, enabling users to filter data by start and end times. The dashboard displays summary tables for job classes and queues, showing execution counts along with average, minimum, and maximum durations, and integrates chart containers to visualize performance trends over the selected range.

_app/views/good\job/performance · high confidence

New processes dashboard view with detailed process information

The GoodJob dashboard now includes a dedicated processes index page that lists all active GoodJob processes. For each process, users can see the process basename, PID, hostname, and current memory usage in MB. The view also displays scheduler configuration details, including the specific queues being monitored and the maximum thread count for each scheduler. Additionally, it shows whether cron jobs are enabled for the process, along with timestamps for when the process started and was last updated. Users can expand individual process rows to inspect the full raw state JSON.

_app/views/good\job/processes · high confidence

Removals

Removal of Good Job Rake task stub

The placeholder Rake task file for Good Job has been removed from the application. This cleanup eliminates unused scaffolding code, ensuring the task namespace is cleaner and preventing potential conflicts with actual Good Job background job processing.

lib/tasks · high confidence

Security

Integrate Brakeman security scanner and define GoodJob engine routes

This change introduces a new \config/brakeman.ignore\ file to suppress specific static analysis warnings from the Brakeman security scanner, addressing false positives related to SQL injection in advisory lock logic, dynamic code evaluation in the log subscriber, and command execution for process monitoring. Additionally, \config/routes.rb\ is added to define the GoodJob engine's URL structure, exposing dashboard resources for jobs, batches, cron entries, processes, performance metrics, pauses, and the cleaner, along with frontend asset routes.

config · high confidence

Architecture

GoodJob dashboard controllers restructured into a mountable engine

The GoodJob dashboard has been reorganized into a single mountable Rails engine, moving all controller logic from the lib directory into app/controllers. A new ApplicationController establishes a shared base with strict Content Security Policy headers, nonce generation, and isolated I18n configuration to prevent locale conflicts with the host application. This structure introduces dedicated controllers for managing jobs, batches, cron entries, pauses, performance metrics, and the cleaner interface, while replacing the previous Railtie with a ProcessesController to display active worker information.

app/controllers · high confidence

Behavioural changes

Dashboard jobs view restructured with execution details and error context

The GoodJob dashboard's jobs index and show pages have been updated to provide deeper visibility into job execution history. The new \\_executions.erb\ partial displays individual execution records, including queue and runtime latency, status, and error messages. For failed jobs, the view now presents error backtraces in a tabbed interface, allowing users to toggle between filtered application traces and full stack traces. The jobs index table (\\_table.erb\) has been redesigned to show job labels, attempt counts, and specific error event context (such as 'discarded' or 'retried') for discarded jobs. Additionally, the show page now explicitly lists available actions (reschedule, discard, retry, destroy) based on the job's current status and renders the full execution list sorted by number.

_app/views/good\job/jobs · high confidence

Demo app configuration modernized and relocated

The demo application's configuration files have been moved from the \test/dummy\ directory to \demo/config\, reflecting a structural reorganization. The Rails application harness has been upgraded to version 7.1.3, utilizing Ruby 3.3 and Bootsnap for improved performance. Configuration defaults are now dynamically set to match the current Rails version rather than being hardcoded to 6.0. The demo app now integrates PgHero for monitoring and configures GoodJob as the active job queue adapter. Additionally, the database configuration has been updated to use \good\_job\ prefixed database names, increased the default connection pool size to 20, and added specific settings for the demo environment, including a new \config.ru\ entry to suppress Puma web-concurrency warnings.

demo/config · high confidence

Demo app relocated and restructured with new job examples

The Rails demo application has been moved from \spec/test\_app\ to \demo/app\, renaming the app title from 'Dummy' to 'TestApp' and updating asset paths to reflect the new location. This relocation includes new job classes (\ExampleJob\, \ConfigurableQueueJob\, \FragileJob\, \PgHeroMaintenanceJob\) that demonstrate GoodJob features like concurrency control, labels, and batch processing, as well as custom view partials for the GoodJob dashboard to showcase extensibility.

demo/app · high confidence

Demo app restructured with new GoodJob, performance, and debugging initializers

The demo application's configuration has been significantly expanded and reorganized. GoodJob is now fully configured with cron jobs for examples, batches, and PG Hero maintenance, including experimental pause support and environment-specific execution modes. New initializers enable ActiveRecord explain-analyze with forced index usage, redirect Postgres notices to the Rails logger, configure Rack Mini Profiler to skip specific paths, and disable permanent connection checkouts to enforce modern connection handling. Additionally, rbtrace and Skylight sampling are now available for debugging and performance profiling, while standard Rails initializers have been moved from the test dummy to the demo directory.

demo/config/initializers · high confidence

Demo app structure reorganized with enhanced logging

The Rails demo application has been moved from the test directory to the dedicated demo folder, consolidating the harness for easier access. This change introduces a new thread name formatter in the demo library that enhances log readability by prefixing messages with a unique, color-coded emoji derived from the thread name, alongside standard error pages and assets being relocated to the new public directory.

demo/lib, demo/public · high confidence

GoodJob database schema and demo migration updates

The demo application's database migrations have been updated to reflect the current GoodJob schema, including the addition of new tables such as \good\_job\_batches\, \good\_job\_executions\, \good\_job\_processes\, and \good\_job\_settings\, as well as new columns like \active\_job\_id\, \concurrency\_key\, \cron\_key\, \labels\, and \error\_backtrace\. Several database indexes have been added, modified, or removed to optimize job scheduling, cleanup, and concurrency control, and the \pg\_stat\_statements\ extension has been enabled for query performance monitoring via PGHero.

demo/db/migrate · high confidence

GoodJob v4 core library files introduced

The GoodJob gem has been updated to version 4, introducing a new core library structure in lib/good\_job. This includes a new Capsule architecture to manage job execution resources, a CLI tool built on Thor for process management, and a Configuration system that normalizes settings from environment variables and Rails config. The update also adds bulk job enqueueing capabilities via a new Buffer mechanism, a CronManager for recurring jobs, and a Process tracker for heartbeat monitoring.

_lib/good\job · high confidence

GoodJob v4 model architecture and batch processing overhaul

GoodJob has been upgraded to version 4, introducing a new model structure that separates job records from execution history via the new \Execution\ model (deprecating \DiscreteExecution\) and a dedicated \Batch\ model for grouping jobs. This release adds support for bulk-enqueuing multiple batches via \Batch.enqueue\_all\, introduces a configurable lock strategy (\:advisory\, \:skiplocked\, or \:hybrid\) for job claiming, and allows pausing jobs by queue, class, or label. The models now inherit from a configurable \BaseRecord\ (defaulting to \ActiveRecord::Base\), and the \Process\ model now tracks detailed state including memory usage and scheduler metrics.

_app/models/good\job · high confidence

Introduce inline job buffering to defer execution until after transaction commit

GoodJob now includes an \InlineBuffer\ mechanism that captures jobs enqueued within a transaction block and defers their actual execution until the transaction has successfully committed. This ensures that jobs do not run inside the database transaction, preventing issues where jobs might access uncommitted data or cause lock contention. Users wrapping job enqueuing in \ActiveRecord::Base.transaction\ blocks will now see jobs executed only after the transaction is finalized, improving data consistency and reliability for inline job processing.

lib · high confidence

Migrate frontend to Stimulus and Turbo with new dashboard capabilities

The frontend application has been refactored to use Stimulus for JavaScript behavior and Turbo for navigation, replacing the previous stack. This change introduces a new application entry point that registers Stimulus controllers for forms, themes, async data loading, charts, and live polling. Users benefit from a new dark mode theme toggle, asynchronous loading of top navigation metrics, and enhanced performance dashboard charts with time-range selection and localized time labels. The UI also includes a new SVG icon sprite for consistent iconography, Bootstrap 5.3.1 for styling, and improved form interactions like live polling and checkbox toggling.

app/frontend · high confidence

New dashboard layout with dark mode, Turbo, and modern asset loading

The Good Job dashboard now uses a new application layout that supports dark mode via Bootstrap's color scheme, integrates Turbo for navigation, and loads assets using modern import maps and module preloading. The layout includes a favicon, a custom head partial for extensibility, and renders the navbar, secondary navbar, alerts, and footer within a flex-column structure.

app/views/layouts · high confidence

New development tooling and demo app binstubs

The repository now includes a comprehensive set of binstubs in the \bin/\ directory to streamline local development and testing. A new \bin/lint\ script unifies multiple linters (Sorbet, Rubocop, YARD, Herb, ERB Lint, Markdown Lint, i18n-tasks, and Brakeman) into a single command. Development workflows are supported by \bin/rails\ and \bin/test\_app\_rake\ which point to a new \demo\ application directory (replacing the previous \test/dummy\ structure), along with \bin/setup\ for environment initialization. Additional binstubs for \rspec\, \srb\, \tapioca\, and \docserver\ are provided, while the legacy \bin/test\ file has been removed.

bin · high confidence

Process heartbeat mechanism for job execution reliability

The notifier now includes a process heartbeat feature that automatically registers, refreshes, and deregisters the current process in the database during job execution. This ensures that process records are always up-to-date, improving reliability by preventing stale process states and handling connection changes gracefully through advisory locks and Rails executor wrapping.

_lib/good\job/notifier · high confidence

Rails demo application moved to dedicated directory with schema sanitization and server loading

The Rails demo application has been relocated from the test harness directory to a standalone \demo\ folder, serving both as a standalone demonstration of the library and as the test harness environment. To ensure stability across different Rails versions and CI environments, the demo's Rakefile now automatically sanitizes \db/schema.rb\ by stripping the specific ActiveRecord version number and removing the \pg\_catalog\ namespace from extension declarations. Additionally, the application's Rack configuration (\config.ru\) has been updated to explicitly call \Rails.application.load\_server\, which suppresses Puma web-concurrency warnings during execution.

demo · high confidence

Rails demo environment configuration restructured and enhanced

The Rails application harness has been moved from the test directory to the demo folder, introducing a dedicated demo environment that inherits from production settings. The development environment now includes specific support for GitHub Codespaces, automatically configuring host allowances and Action Cable origins when the relevant environment variables are present. In production, SSL enforcement is now controlled via the FORCE\_SSL environment variable, logging to STDOUT is enabled by default, and the Active Job queue name prefix has been updated to 'test\_app\_production'.

demo/config/environments · high confidence

Refactored dashboard filtering into a modular BaseFilter class hierarchy

The dashboard filtering logic has been restructured into a new \BaseFilter\ class with specialized subclasses (\JobsFilter\, \BatchesFilter\) to improve maintainability and performance. This change introduces a standardized interface for filtering jobs and batches, supporting filters by job class, queue, label, search query, cron key, and state. The \JobsFilter\ specifically implements optimized counting for succeeded jobs using complement subtraction to avoid full-table scans, and supports pagination via \after\_id\ and \after\_at\ parameters. Users will experience faster dashboard loads and more consistent filtering behavior across job and batch views.

app/filters · high confidence

Refactored job status logic and advisory locking infrastructure

The job status determination logic has been updated to distinguish between 'succeeded' and 'discarded' outcomes, replacing the previous 'finished' state with a more granular view of job completion. Concurrently, the advisory locking mechanism has been refactored into a new \AdvisoryLockable\ concern that supports customizable hash functions, tracks session and transaction-scoped locks to prevent leaks, and ensures proper cleanup of advisory locks. Additionally, search functionality now caps column lengths to prevent PostgreSQL tsvector limit errors, and error tracking now includes specific event types such as 'retried' and 'retry\_stopped' for better context on job failures.

app/models/concerns · high confidence

Updated GoodJob database schema with new tables and indexes

The installation migration template has been updated to include the \good\_job\_executions\, \good\_job\_batches\, \good\_job\_processes\, and \good\_job\_settings\ tables alongside the existing \good\_jobs\ table. This schema now supports tracking job execution details (including error backtraces and duration), managing job batches with callbacks, and recording process state for concurrency control. Additionally, numerous conditional and composite indexes have been added to optimize performance for job dequeueing, cron scheduling, and cleanup operations.

_lib/generators/good\job/templates/install · high confidence

Updated GoodJob v4 database migration templates

The update migration templates for GoodJob v4 have been replaced with a new set of 15 incremental migrations. These changes introduce new database indexes on the \good\_jobs\ table (including on \concurrency\_key\, \job\_class\, \finished\_at\, \queue\_name\, \created\_at\, and \scheduled\_at\) to improve dequeue and cleanup performance, add a \lock\_type\ column to support new locking strategies, and add a \jobs\_finished\_at\ column to \good\_job\_batches\ to track batch completion status.

_lib/generators/good\job/templates/update · high confidence

Updated demo database schema and seed data for GoodJob v4

The demo application's database schema has been updated to reflect the GoodJob v4 release, introducing new tables for job batches and executions, and adding specific indexes to support features like concurrency throttling, job prioritization, and performance monitoring. The schema now includes extensions for pg\_stat\_statements and pgcrypto, and adds a PGHero query stats table for performance insights. Additionally, the seed data has been updated to populate the database with realistic job and batch records, including examples of different job classes, queues, and batch callbacks, to better demonstrate the new functionality.

demo/db · high confidence

Updated good\_job gem checksums

The checksums directory now contains SHA-256 and SHA-512 hashes for a comprehensive range of good\_job gem versions, spanning from 2.9.0 through 4.19.2. This update ensures that users can verify the integrity of the good\_job gem downloads across all supported minor and patch releases.

checksums · high confidence

Fixes

Probe server now supports health checks and handles Rack 3.1+ compatibility

The probe server in lib/good\_job/probe\_server has been refactored to provide more robust health-check endpoints (/status, /status/started, /status/connected) via a new HealthcheckMiddleware, allowing users to monitor GoodJob's operational state. Additionally, the WebrickHandler has been updated to explicitly require 'rack/handler' or 'rackup/handler' to ensure compatibility with Rack versions \>= 3.1.x, where auto-loading was removed. The server also now includes a SimpleHandler for basic TCP-based probing and a NotFoundApp to return 404s for unhandled paths, making the probe server more general-purpose and reliable in various deployment scenarios.

_lib/good\_job/probe\server · high confidence

Test coverage

Added comprehensive test coverage for GoodJob core components; Added controller and helper tests for GoodJob dashboard features; Added integration tests for GoodJob core components; Added request specs for dashboard controllers; Added system tests for GoodJob dashboard features; Added test coverage for Active Job extensions; Added test coverage for GoodJob core models; Added tests for AdvisoryLockable and Filterable concerns; Added tests for ExampleJob execution behaviors; Added tests for GoodJob core lifecycle and cleanup behaviors; Added tests for GoodJob cron configuration validation; Added tests for GoodJob dashboard time-series and histogram charts; Added tests for GoodJob install and update generators; Added tests for GoodJob job locking mechanisms; Added tests for inline adapter deferred execution and lock strategy behavior; Added tests for the GoodJob jobs filter component; Initialize RSpec test configuration for the Rails application; Introduce comprehensive RSpec test support infrastructure; Removal of legacy test infrastructure and minitest files.

Dependencies

Add Appraisal configurations for Rails 6.1 through 8.1 and HEAD

The gemfiles directory now includes dedicated Appraisal configurations for Rails versions 6.1, 7.0, 7.1, 7.2, 8.0, 8.1, and the Rails HEAD branch. These files allow the library to be tested against a broader range of Rails versions, ensuring compatibility across current and future releases. The Rails 6.1 configuration also pins specific versions for puma, traces, and concurrent-ruby to ensure stability.

gemfiles · high confidence

GoodJob 4.19.2 dependency update and development environment modernization

The GoodJob gem has been updated to version 4.19.2, with its runtime dependencies now requiring ActiveJob, ActiveRecord, and Railties version 6.1.0 or higher, alongside concurrent-ruby 1.3.1+ and fugit 1.11.0+. The development environment has been significantly modernized: the minimum supported Ruby version is now 3.0.0, and the development Gemfile now supports testing against Rails versions 6.1 through 8.1 (including HEAD). Key development tooling changes include replacing Selenium with Cuprite for browser testing, adding Sorbet type checking, integrating PGHero for database monitoring in the demo app, and organizing linters (Rubocop, Brakeman, ErbLint) and debuggers into distinct groups. The gemspec has also been cleaned up to remove the RubyGems push guard and explicitly define file paths and metadata.

(dependencies) · high confidence

Housekeeping

Added empty tmp directory placeholder; Standardize development environment with EditorConfig, RuboCop, and YARD configuration.

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 51.

Lenses

  • Code Health 47
  • Architecture 93
  • Maturity 66
  • Readiness 62
  • Security 65
  • Domain Modelling 100
  • Accessibility 44

Changes since last survey

  • 300 commits — 249 feature/other, 51 fixes

By area

  • (root) — 108 commits
  • app/models — 48 commits
  • lib/good_job — 31 commits
  • app/views — 19 commits
  • config/locales — 18 commits
  • .github/workflows — 11 commits
  • demo/db — 10 commits
  • sorbet/rbi — 7 commits
  • app/controllers — 5 commits
  • app/filters — 5 commits
  • spec/integration — 5 commits
  • spec/lib — 5 commits
  • .github/dependabot.yml — 4 commits
  • lib/generators — 3 commits
  • lib/good_job.rb — 3 commits
  • spec/app — 3 commits
  • app/charts — 2 commits
  • app/frontend — 2 commits
  • spec/support — 2 commits
  • (repo) — 1 commit

Notable commits

  • fix: --daemonize no longer changes working directory, fixes relative paths (#1714)
  • fix: Add Process memory usage and fix process state update (#1516)
  • fix: Add regression test for searchable numeric arguments (#1510)
  • fix: All running jobs now have performed_at set so use that in status query; fix flaky test that took advisory lock in before block (#1444)
  • fix: Allow GoodJob::Job#retry_job's transaction to be joinable (fix CI for current rails-head) (#1496)
  • fix: Fix AdvisoryLockable using wrong advisory_lockable_column attribute when aborting create_with_advisory_lock (#1360)
  • fix: Fix ArgumentError when using perform_throttle without a label (#1760)
  • fix: Fix Batch integration test to not exhaust database connection thread pool (#1409)
  • fix: Fix Batches dashboard deserealization error (#1628)
  • fix: Fix Dashboard retries by wrapping in original/application locale (#1643)
  • fix: Fix JRuby CI failure installing rbs gem (#1794)
  • fix: Fix JRuby in development lockfile, with test (#1734)
  • fix: Fix JRuby test flakes for scheduler timeout and interrupted execution duration (#1737)
  • fix: Fix N+1 on dashboard batches index page (#1442)
  • fix: Fix N+1 queries on cron entries dashboard index page (#1727)
  • fix: Fix PG::AmbiguousColumn in skiplocked/hybrid claim with ordered queues + concurrency rules (#1768)
  • fix: Fix Probe Server handling server shutdown on SIGINT when daemonized (#1644)
  • fix: Fix PG::ProgramLimitExceeded in jobs index search for large error payloads (#1769)
  • fix: Fix a few method redefinition warnings (#1459)
  • fix: Fix a rails deprecation warning for the duration attribute (#1408)
  • …and 280 more

Architecture

  • 0 containers · 1 bounded contexts · 0 dependency edges (baseline)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

bensheldon/good_job was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 2d8ebb19120296a823c41a43b2945a09df719a7b — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.