AI Slop Code Risk Monitor

riverqueue/river

SlopCodeMonitor badge for riverqueue/river Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

The polyglot queue: Fast and reliable background jobs in Go, Ruby, Rust, and JS/TS on Postgres or SQLite.

1.9 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for riverqueue/river, a Go project with 5,844 GitHub stars. SynthScan examined 326,908 lines of code across 1191 source files, recording 521 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 1.9 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

1.9
Adjusted Signal
1.9
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
5.8K
Stars
Go
Language
326.9K
Lines of Code
1.2K
Files
521
Pattern Hits
2026-10-31
Scan Date
0.01
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 7.3/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 502 finding(s).

Hallucinated Dependency & Supply Chain Risk 1.4/100 · LOW

Are imports declared and package/API names verified? 15 finding(s).

Agent Over-Engineering Ratio 1.3/100 · LOW

Are wrappers, guards, and repeated structures necessary? 67 finding(s).

PR Review Velocity Impact 8.8/100 · LOW

Which changes need focused human review? 521 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 7HIGH 0MEDIUM 10LOW 504

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 521 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Over-Commented Block432 hits · 410 pts
SeverityFileLineSnippetContext
LOWexample_job_args_hooks_test.go121 // JobWithHooksInsertAndWorkBeginHook.InsertBegin ranCOMMENT
LOWerror.go21func JobCancel(err error) error {COMMENT
LOWexample_batch_insert_test.go81 }COMMENT
LOWworker.go21//COMMENT
LOWworker.go41 Middleware(job *rivertype.JobRow) []rivertype.WorkerMiddlewareCOMMENT
LOWworker.go61 // be cancelled for other reasons.COMMENT
LOWworker.go81type WorkerDefaults[T JobArgs] struct{}COMMENT
LOWworker.go101// river.AddWorker(workers, &SortWorker{})COMMENT
LOWworker.go121 panic(err)COMMENT
LOWclient_context.go21// from the context provided to a Worker's Work() method.COMMENT
LOWproducer.go81COMMENT
LOWresumable.go41 state.CursorsDirty = trueCOMMENT
LOWresumable.go101// cursor value from an earlier failed attempt, if one was recorded withCOMMENT
LOWjob_list_params.go141 // time field based on listed state. The best fit is determined by lookingCOMMENT
LOWjob_list_params.go541// NamedArgs are named arguments for use with JobListParams.Where. Keys shouldCOMMENT
LOWjob_list_params.go561//COMMENT
LOWdelete_many_params.go121 paramsCopy := p.copy()COMMENT
LOWclient.go81 // The [rivertest.Worker] type automatically disables uniqueness enforcementCOMMENT
LOWclient.go101 // with one of its own by cordoning each type to its own prefix.COMMENT
LOWclient.go121 CancelledJobRetentionPeriod time.DurationCOMMENT
LOWclient.go141 // tracking, but can also be used to customize retry behavior.COMMENT
LOWclient.go161 // jobs across all queues and discards those whose kinds it doesn't know.COMMENT
LOWclient.go181 // This is used to identify the client in job attempts and for leader election.COMMENT
LOWclient.go201 // Defaults to 30 seconds, which should be more than enough time for mostCOMMENT
LOWclient.go221 // also be used (for example) to stop and exit the program if too many jobsCOMMENT
LOWclient.go241 //COMMENT
LOWclient.go261 // rivertype.Middleware. Use Plugins for an extension that should act asCOMMENT
LOWclient.go281 // Logger is the structured logger to use for logging purposes. If none isCOMMENT
LOWclient.go301 // cause it to be invoked when a job is worked. Middleware structs mayCOMMENT
LOWclient.go321 // A type qualifies as a plugin by implementing [rivertype.Plugin]. MostCOMMENT
LOWclient.go341 // `LISTEN` statements to wait for events like a leadership resignation orCOMMENT
LOWclient.go361 Queues map[string]QueueConfigCOMMENT
LOWclient.go381 // will be scheduled for a retry, while one which has exhausted its attemptsCOMMENT
LOWclient.go401 // Defaults to DefaultRetryPolicy.COMMENT
LOWclient.go421 // ctx, stop := signal.NotifyContext(ctx, syscall.SIGINT, syscall.SIGTERM)COMMENT
LOWclient.go441 //COMMENT
LOWclient.go461 // in production, but which may be harmful to tests, in ways like having theCOMMENT
LOWclient.go481 //COMMENT
LOWclient.go681 // are coming in via LISTEN/NOTIFY then fetches may be delayed as long asCOMMENT
LOWclient.go741// because an operation may have made partial changes. If the application needsCOMMENT
LOWclient.go821 // rows. For example, attempting to cancel a job that doesn't exist willCOMMENT
LOWclient.go841// import "github.com/riverqueue/river/riverdriver/riverpgxv5"COMMENT
LOWclient.go1201 stopServicesOnError := func() {COMMENT
LOWclient.go1361// more aggressive stop than Stop because the contexts for any in-progress jobsCOMMENT
LOWclient.go1401}COMMENT
LOWclient.go1421 return c.SubscribeConfig(&SubscribeConfig{Kinds: kinds})COMMENT
LOWclient.go1481 }()COMMENT
LOWclient.go1501// If the job is already finalized (cancelled, completed, or discarded), noCOMMENT
LOWclient.go1521// signal is received but _after_ this update was made, the behavior depends onCOMMENT
LOWclient.go1541 Queue: job.Queue,COMMENT
LOWclient.go1561// changes are made.COMMENT
LOWclient.go1661// current time only if it's not already in the past.COMMENT
LOWclient.go1701}COMMENT
LOWclient.go1921 return nil, errCOMMENT
LOWclient.go1961 InsertOpts *InsertOptsCOMMENT
LOWclient.go2001//COMMENT
LOWclient.go2201 producer.TriggerJobFetch()COMMENT
LOWclient.go2241COMMENT
LOWclient.go2261// {Args: BatchInsertArgs{}, InsertOpts: &river.InsertOpts{Priority: 3}},COMMENT
LOWclient.go2481//COMMENT
372 more matches not shown…
Hallucination Indicators7 hits · 85 pts
SeverityFileLineSnippetContext
CRITICAL⚡java/README.md730 org.junit.jupiter.api.Assertions.assertEquals(inserted.job().id(), event.job().id());CODE
CRITICAL⚡java/README.md731 org.junit.jupiter.api.Assertions.assertEquals(Job.State.COMPLETED, event.job().state());CODE
CRITICAL⚡java/README.md732 org.junit.jupiter.api.Assertions.assertEquals("hello", event.job().metadata().path("output").asString());CODE
CRITICALjava/river/src/main/java/com/riverqueue/Database.java83 long deadline = System.nanoTime() + java.util.concurrent.TimeUnit.SECONDS.toNanos(5);CODE
CRITICALjava/bin/github-release.py418 'public class Smoke { public static void main(String[] args) { if (!com.riverqueue.Client.class.getName().eqCODE
CRITICAL…/src/main/java/com/riverqueue/conformance/Adapter.java244 times.add(java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(next));CODE
CRITICALruby/spec/row_decoding_shared_examples.rb43 expect(client.job_list.jobs.first.errors.map(&:to_h)).to eq(read.errors.map(&:to_h))CODE
Hyper-Verbose Identifiers63 hits · 68 pts
SeverityFileLineSnippetContext
LOWjs/worker-threads/src/thread.ts198function typeScriptSourceSpecifier(CODE
LOWjs/driver/prisma/src/transaction.ts106function validatePrismaTransaction(CODE
LOWjs/driver/pg/src/sql/jobs.ts988function validateCompletionCommands(CODE
LOWjs/driver/pg/src/sql/maintenance.ts662async function maintenanceLeaderIsCurrent(CODE
LOWjs/etc/riverqueue.unstable-driver.api.md76export declare function createJobArgsTransformPlugin(CODE
LOWjs/etc/riverqueue.unstable-driver.api.md88export declare function createJobInsertMetadataTransformPlugin(CODE
LOWjs/etc/riverqueue.unstable-driver.api.md1935export declare function postgresCapabilitiesFromRow(row: {CODE
LOWjs/migrate/src/migrator.integration.test.ts365async function waitForAdvisoryLockWaiter(pool: pg.Pool): Promise<void> {CODE
LOWjs/src/json.ts279export function stringifySelectedUniqueJson(CODE
LOW⚡js/src/job-insert-metadata-transform.ts71export function createJobInsertMetadataTransformPlugin(CODE
LOW⚡js/src/job-insert-metadata-transform.ts81export function cloneJobInsertMetadataTransformPlugin(CODE
LOW⚡js/src/job-insert-metadata-transform.ts89export function getJobInsertMetadataTransformers(CODE
LOW⚡js/src/job-insert-metadata-transform.ts96export function isJobInsertMetadataTransformPlugin(plugin: object): boolean {CODE
LOW⚡js/src/job-insert-metadata-transform.ts101export function transformJobInsertMetadata(CODE
LOWjs/src/periodic.ts357export function setPeriodicJobsChangeHandler(CODE
LOWjs/src/periodic.ts411export function hasUninitializedPeriodicJobs(registry: PeriodicJobs): boolean {CODE
LOWjs/src/query.ts89export function normalizeJobDeleteManyOptions(CODE
LOWjs/src/query.ts210export function normalizeJobUpdateOptions(CODE
LOWjs/src/query.ts225export function normalizeQueueListOptions(CODE
LOWjs/src/job-args-transform.ts95export function createJobArgsTransformPlugin(CODE
LOWjs/src/job-args-transform.ts107export function cloneJobArgsTransformPlugin(CODE
LOWjs/src/job-args-transform.ts127export function transformJobArgsForInsert(CODE
LOWjs/src/services.ts1296function requireMaintenanceCapabilities(driver: RuntimeDriver): void {CODE
LOWjs/src/runtime/validation.ts6export function requireNonNegativeInteger(name: string, value: number): number {CODE
LOWjs/src/runtime/settings.ts730function resolveMaintenanceSettings(CODE
LOWjs/src/runtime/notification-payloads.ts34export function notificationLeaderResigned(payload: string): string | null {CODE
LOWjs/src/runtime/notification-payloads.ts54export function notificationRequestsLeadershipResignation(CODE
LOWjs/src/runtime/attempt-result.ts76export function normalizeWorkAttemptResult(CODE
LOWjs/src/internal/postgres-capabilities.ts81export function postgresCapabilitiesFromRow(row: {CODE
LOWjs/src/internal/event-loop-delay-monitor.ts107function nanosecondsToMilliseconds(value: number): number {CODE
LOWjava/bin/github_release_test.py60 def test_artifacts_include_parent_without_fat_jar_or_conformance(self):CODE
LOWjava/bin/github_release_test.py68 def test_manifest_rejects_missing_extra_changed_and_symlinked_files(self):CODE
LOWjava/bin/github_release_test.py87 def test_pom_coordinates_parent_inheritance_and_packaging(self):CODE
LOWjava/bin/github_release_test.py109 def test_repository_tracking_accepts_old_and_url_qualified_ids(self):CODE
LOWjava/bin/github_release_test.py128 def test_upload_creates_drafts_without_replacing_latest(self):CODE
LOWjava/bin/github_release_test.py166 def test_upload_resumes_matching_draft_and_never_clobbers(self):CODE
LOWjava/bin/github_release_test.py183 def test_upload_refuses_dirty_build_wrong_tag_and_published_release(self):CODE
LOW⚡java/bin/github_release_test.py206 def test_verify_assets_refuses_mismatches_before_uploading_anything(self):CODE
LOW⚡java/bin/github_release_test.py213 def test_verify_refuses_credentials_and_non_https_urls(self):CODE
LOW⚡java/bin/github_release_test.py222 def test_versions_reject_snapshots_aliases_and_paths(self):CODE
LOWruby/driver/riverqueue-activerecord/lib/driver.rb181 private def postgres_insert_params_to_hash(insert_params, nonce)CODE
LOW⚡ruby/driver/riverqueue-activerecord/lib/driver.rb220 private def postgres_to_insert_results(res, nonce)CODE
LOW⚡ruby/driver/riverqueue-activerecord/lib/driver.rb227 private def postgres_to_job_row_from_model(river_job)CODE
LOW⚡ruby/driver/riverqueue-activerecord/lib/driver.rb233 private def postgres_to_job_row_from_raw(row, columns, column_types)CODE
LOWruby/driver/riverqueue-activerecord/lib/driver.rb292 private def sqlite_insert_params_to_hash(insert_params, nonce)CODE
LOWruby/driver/riverqueue-activerecord/lib/driver.rb393 private def sqlite_to_job_row_from_model(river_job)CODE
LOWruby/driver/riverqueue-activerecord/lib/driver.rb398 private def sqlite_to_job_row_from_raw(row)CODE
LOWruby/driver/riverqueue-sequel/spec/spec_helper.rb53def available_test_transaction(&)CODE
LOWruby/driver/riverqueue-sequel/lib/driver.rb163 private def postgres_insert_params_to_hash(insert_params, nonce)CODE
LOWruby/driver/riverqueue-sequel/lib/driver.rb249 private def sqlite_insert_params_to_hash(insert_params, nonce)CODE
LOWruby/driver/riverqueue-sequel/lib/driver.rb341 private def sqlite_to_job_row_from_raw(row)CODE
LOWruby/spec/support/transaction_helpers.rb70 def exec_rollback_to_savepoint(name = current_savepoint_name)CODE
LOWruby/lib/client_runtime.rb289 private def check_remote_cancellations(queue)CODE
LOWruby/lib/client_runtime.rb443 private def finish_transactional_completion(job, timing)CODE
LOWruby/lib/client.rb54 def __insert_with_default_scheduled_at(args, insert_opts, default_scheduled_at)CODE
LOWruby/lib/client.rb429 private def insert_and_check_unique_job(insert_params)CODE
LOWruby/lib/client.rb485 private def make_unique_key_and_bitmask(insert_params, unique_opts)CODE
LOWruby/lib/config.rb35 def resolved_fetch_poll_interval(config)CODE
LOWruby/lib/driver/runtime.rb364 def notification_delete_before(horizon:, max: 10_000)CODE
LOWruby/lib/driver/runtime.rb539 private def runtime_decode_postgres_job(row)CODE
3 more matches not shown…
Decorative Section Separators4 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUM⚡internal/leadership/doc.go34// ┌─────────────────────────────────────┐COMMENT
MEDIUM⚡internal/leadership/doc.go38// └──────────────────┬──────────────────┘COMMENT
MEDIUM⚡internal/leadership/doc.go41// ┌─────────────────────────────────────┐COMMENT
MEDIUM⚡internal/leadership/doc.go45// └──────────────────┬──────────────────┘COMMENT
AI Slop Vocabulary5 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUMriverdbtest/riverdbtest_test.go67 // Essentially the same check as above, but just looking that jobs areCOMMENT
MEDIUMriverdriver/river_driver_interface.go519 // encoded into EncodedArgs, but the original is kept here for to leverage itsCOMMENT
MEDIUMruby/driver/riverqueue-activerecord/lib/driver.rb9 # Used in conjunction with a River client like:COMMENT
MEDIUMruby/driver/riverqueue-sequel/lib/driver.rb8 # Used in conjunction with a River client like:COMMENT
MEDIUMruby/lib/client.rb21 # Used in conjunction with a River driver like:COMMENT
Fake / Example Data8 hits · 9 pts
SeverityFileLineSnippetContext
LOWjs/examples/prisma/src/index.ts52 to: "user@example.com",CODE
LOWjs/examples/node-postgres/src/index.ts44 to: "user@example.com",CODE
LOWrust/riverqueue/src/client/insert.rs340 /// .insert(SendEmail { address: "user@example.com".to_owned() })COMMENT
LOWrust/riverqueue/src/client/insert.rs346 /// .insert(SendEmail { address: "admin@example.com".to_owned() })COMMENT
LOWinternal/dbunique/db_unique_test.go108 Recipient: "user@example.com",CODE
LOWinternal/dbunique/db_unique_test.go116 expectedJSON: `&kind=worker_1&args={"recipient":"user@example.com","subject":"Test Email"}`,CODE
LOWinternal/dbunique/db_unique_test.go130 PhoneNumber: "555-5678",CODE
LOWinternal/dbunique/db_unique_test.go136 expectedJSON: `&kind=worker_2&args={"phone_number":"555-5678"}`,CODE
Slop Phrases2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMriverlog/example_new_middleware_custom_context_test.go59 // For demonstration purposes we show the use of a built-inCOMMENT
LOWruby/spec/client_spec.rb298 # individual drivers has their own unique insert tests that make sure to doCOMMENT