AI Slop Code Risk Monitor

rocicorp/mono

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

99% of Queries in Zero Milliseconds

1.5 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for rocicorp/mono, a TypeScript project with 3,431 GitHub stars. SynthScan examined 346,212 lines of code across 1363 source files, recording 438 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 1.5 (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.5
Adjusted Signal
1.5
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
3.4K
Stars
TypeScript
Language
346.2K
Lines of Code
1.4K
Files
438
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 6.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.9/100 · LOW

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

Agent Over-Engineering Ratio 4.6/100 · LOW

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

PR Review Velocity Impact 7.0/100 · LOW

Which changes need focused human review? 438 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 2HIGH 7MEDIUM 5LOW 424

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 438 distinct pattern matches across 9 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.

Hyper-Verbose Identifiers300 hits · 316 pts
SeverityFileLineSnippetContext
LOWtools/verify-package-deps/src/verify-package-deps.ts158async function analyzePackageDependencies(): Promise<AnalyzeResult> {CODE
LOWtools/verify-package-deps/src/verify-package-deps.ts447async function verifyPackageJsonDependencies(fix: boolean) {CODE
LOWscripts/src/shared.ts197export function assertNpmZeroVersionExists(CODE
LOWscripts/src/release/create-tag.ts85export function validateCreateReleaseTagArgs({CODE
LOWscripts/src/release/create-tag.ts103function createCanaryVersionCommit({CODE
LOWpackages/zero-cache/src/types/lite.ts116export function mapLiteDataTypeToZqlSchemaValue(CODE
LOWpackages/zero-cache/src/types/lite.ts125function mapLiteDataTypeToZqlValueType(dataType: LiteTypeString): ValueType {CODE
LOWpackages/zero-cache/src/types/lite.ts231export function assertValidLiteColumnSpec(spec: ColumnSpec) {CODE
LOWpackages/zero-cache/src/types/pg.ts127export function millisecondsToPostgresTime(milliseconds: number): string {CODE
LOWpackages/zero-cache/src/types/pg.ts154export function postgresTimeToMilliseconds(timeString: string): number {CODE
LOWpackages/zero-cache/src/types/pg.ts593function isPostgresStartupConnectionError(e: unknown) {CODE
LOWpackages/zero-cache/src/test/replica-state.ts101function canonicalPhysicalDataType(dataType: string) {CODE
LOWpackages/zero-cache/src/test/lite.ts78export function expectMatchingObjectsInTables(CODE
LOWpackages/zero-cache/src/config/normalize.ts49function defaultMultipartConcurrency(multipartSize: number): number {CODE
LOWpackages/zero-cache/src/auth/load-permissions.ts64export function reloadPermissionsIfChanged(CODE
LOWpackages/zero-cache/src/server/otel-diag-logger.ts39export function setupOtelDiagnosticLogger(CODE
LOWpackages/zero-cache/src/server/otel-diag-logger.ts78export function resetOtelDiagnosticLogger(): void {CODE
LOWpackages/zero-cache/src/server/replicator.ts328function observeWalUncheckpointedBytes(CODE
LOW⚡packages/zero-cache/src/observability/metrics.ts54export function getOrCreateUpDownCounter(CODE
LOW⚡packages/zero-cache/src/observability/metrics.ts59export function getOrCreateUpDownCounter(CODE
LOW⚡packages/zero-cache/src/observability/metrics.ts64export function getOrCreateUpDownCounter(CODE
LOWpackages/zero-cache/src/observability/metrics.ts120export function getOrCreateValueHistogram(CODE
LOWpackages/zero-cache/src/observability/metrics.ts120export function getOrCreateValueHistogram(CODE
LOWpackages/zero-cache/src/observability/metrics.ts137export function getOrCreateHistogram(CODE
LOWpackages/zero-cache/src/observability/metrics.ts161export function getOrCreateNativeHistogram(CODE
LOWpackages/zero-cache/src/observability/metrics.ts161export function getOrCreateNativeHistogram(CODE
LOWpackages/zero-cache/src/observability/metrics.ts193export function getOrCreateLatencyHistogram(CODE
LOWpackages/zero-cache/src/observability/metrics.ts193export function getOrCreateLatencyHistogram(CODE
LOW⚡packages/zero-cache/src/observability/metrics.ts207export function getOrCreateCounter(CODE
LOW⚡packages/zero-cache/src/observability/metrics.ts212export function getOrCreateCounter(CODE
LOW⚡packages/zero-cache/src/observability/metrics.ts217export function getOrCreateCounter(CODE
LOW⚡packages/zero-cache/src/observability/metrics.ts232export function getOrCreateGauge(CODE
LOW⚡packages/zero-cache/src/observability/metrics.ts237export function getOrCreateGauge(CODE
LOW⚡packages/zero-cache/src/observability/metrics.ts242export function getOrCreateGauge(CODE
LOWpackages/zero-cache/src/db/lite-tables.ts259export function computeZqlSpecsFromLiteSpecs(CODE
LOWpackages/zero-cache/src/db/migration.ts198export async function createVersionHistoryTable(CODE
LOWpackages/zero-cache/src/db/sqlite-corruption.ts56export function registerSQLiteCorruptionDiagnosticTarget(CODE
LOWpackages/zero-cache/src/db/sqlite-corruption.ts65export function logLastChanceSQLiteCorruptionDiagnostics(CODE
LOWpackages/zero-cache/src/db/sqlite-corruption.ts88export function logSQLiteCorruptionDiagnostics(CODE
LOWpackages/zero-cache/src/workers/rehome.ts15export function expiredAffinityCookieHeader({CODE
LOWpackages/zero-cache/src/workers/connection.ts684function webSocketSendTimeoutError(): ProtocolErrorWithLevel {CODE
LOWpackages/zero-cache/src/workers/replicator.ts56export function replicatorDeletesStaleChangeLog(CODE
LOWpackages/zero-cache/src/workers/syncer.ts92export function computePipelineDedupStats(CODE
LOWpackages/zero-cache/src/workers/syncer.ts175function lowerBoundReplicaReadyTimeMs(CODE
LOWpackages/zero-cache/src/workers/syncer.ts245function computeServingLagDistributionMs(CODE
LOWpackages/zero-cache/src/workers/syncer.ts326function getWebSocketServerOptions(config: ZeroConfig): ServerOptions {CODE
LOWpackages/zero-cache/src/custom/fetch.ts528function apiResponseErrorMetricAttrs(CODE
LOWpackages/zero-cache/src/services/plannerz.ts263export function buildPlannerzBundleFromDB(CODE
LOW…che/src/services/change-source/pg/replication-slots.ts608export function dropInactiveSlotsAndReplicas(CODE
LOW…che/src/services/change-source/pg/replication-slots.ts738function replicationSlotManagementLock(shard: ShardID) {CODE
LOW…ro-cache/src/services/change-source/pg/initial-sync.ts1031function initialSyncCopyOtherDuration() {CODE
LOW…ro-cache/src/services/change-source/pg/initial-sync.ts1068function initialSyncCompletedCopyStream() {CODE
LOW…ro-cache/src/services/change-source/pg/initial-sync.ts1125function initialSyncDurationHistogram(name: string, description: string) {CODE
LOW…ro-cache/src/services/change-source/pg/initial-sync.ts1140function initialSyncRunMetricAttrs(attrs: InitialSyncRunMetricAttrs) {CODE
LOW…ro-cache/src/services/change-source/pg/initial-sync.ts1147function recordInitialSyncRunMetrics(CODE
LOW…cache/src/services/change-source/pg/backfill-stream.ts526async function createSnapshotTransaction(CODE
LOW…c/services/change-source/pg/replication-slot-health.ts43export function registerReplicationSlotHealthMetrics(CODE
LOW…c/services/change-source/pg/replication-slot-health.ts108export async function queryReplicationSlotHealth(CODE
LOW…o-cache/src/services/change-source/pg/change-source.ts1762export function isIndexStructurallyChanged(CODE
LOW…o-cache/src/services/change-source/pg/change-source.ts1905function summarizeReplicationEventForLog(event: ReplicationEvent): JSONObject {CODE
240 more matches not shown…
Over-Commented Block116 hits · 116 pts
SeverityFileLineSnippetContext
LOWvitest.config.ts1import {readdirSync} from 'node:fs';COMMENT
LOWpnpm-workspace.yaml21 ignoreGhsas:COMMENT
LOWpackages/zero-cache/src/server/anonymous-otel-start.ts41 #totalCrudMutations = 0;COMMENT
LOWpackages/zero-cache/src/server/change-streamer.ts381 // also necessary to avoid a self-deadlock when CHANGE_DB ==COMMENT
LOWpackages/zero-cache/src/server/replicator.ts361COMMENT
LOWpackages/zero-cache/src/db/pg-to-lite.ts81// Maps to '[]' (JSON empty array) in SQLite.COMMENT
LOWpackages/zero-cache/src/db/migration-lite.ts161 //COMMENT
LOWpackages/zero-cache/src/workers/connection.ts101 );COMMENT
LOWpackages/zero-cache/src/workers/connection.ts121 value: unknown,COMMENT
LOWpackages/zero-cache/src/services/life-cycle.ts801COMMENT
LOW…/zero-cache/src/services/change-source/protocol/mod.ts1// Types are externally exported under stable versions. Code withinCOMMENT
LOW…he/src/services/change-source/protocol/current/data.ts21 // - 'p' is for parsed JSON, which may include JSON values or JSON objects.COMMENT
LOW…he/src/services/change-source/protocol/current/data.ts161// and column names of a requested backfill still match the originalCOMMENT
LOW…he/src/services/change-source/protocol/current/data.ts201COMMENT
LOW…he/src/services/change-source/protocol/current/data.ts301COMMENT
LOW…he/src/services/change-source/protocol/current/data.ts321 // within the stream, for resumption / continuity enforcement.COMMENT
LOW…he/src/services/change-source/protocol/current/data.ts341 // and is contiguous with or earlier than its own progressMark.COMMENT
LOW…he/src/services/change-source/protocol/current/data.ts381 // enclosing transaction.COMMENT
LOW…che/src/services/change-source/pg/replication-slots.ts81COMMENT
LOW…o-cache/src/services/change-source/pg/change-source.ts1201 // The DDL event that provides command-tag context for a subsequentCOMMENT
LOW…o-cache/src/services/change-source/pg/change-source.ts1301 });COMMENT
LOW…he/src/services/change-source/pg/change-source-init.ts361 restoreFrom.id === replicateTo.id && restoreFrom.pgChangeLog;COMMENT
LOW…he/src/services/change-source/pg/change-source-init.ts381 // `waitForStoredTxPastSlot` in getSourceAndDestinationReplicas()).COMMENT
LOW…ache/src/services/change-source/pg/schema/published.ts121 // To address this, the pg_attribute rows are looked up for the index'sCOMMENT
LOW…zero-cache/src/services/change-source/pg/schema/ddl.ts1import {literal as lit} from 'pg-format';COMMENT
LOW…zero-cache/src/services/change-source/pg/schema/ddl.ts21// by REFRESH MATERIALIZED VIEW CONCURRENTLY.COMMENT
LOW…he/src/services/change-source/common/replica-schema.ts321 // (`${replicaFile}-change-log`), so the replica's copy is dead weight inCOMMENT
LOW…ges/zero-cache/src/services/view-syncer/view-syncer.ts2321 );COMMENT
LOW…ges/zero-cache/src/services/view-syncer/view-syncer.ts4441// A global Lock acts as a queue to run a single IVM time slice per iterationCOMMENT
LOW…ges/zero-cache/src/services/view-syncer/snapshotter.ts1201COMMENT
LOW…ges/zero-cache/src/services/view-syncer/schema/init.ts241 // V13 adds instances."ttlClock"COMMENT
LOWpackages/zero-cache/src/services/mutagen/mutagen.ts201 lc = lc.withContext('processMutation');COMMENT
LOWpackages/zero-cache/src/services/mutagen/mutagen.ts221 // lastMutationID. Then return the error to the app.COMMENT
LOWpackages/zero-cache/src/services/mutagen/mutagen.ts241 //COMMENT
LOW…c/services/change-streamer/sqlite-change-log-reader.ts201 const last = rows.at(-1);COMMENT
LOW…rc/services/change-streamer/change-streamer-service.ts541 // Resolves, once the lag reporter has been started (or failed to start) inCOMMENT
LOW…rc/services/change-streamer/change-streamer-service.ts1001 // assertable form of invariant 1: a synchronous SQLite commit in theCOMMENT
LOW…ages/zero-cache/src/services/change-streamer/storer.ts1321 // forwarded to subscribers (the backup replica and view-syncers)COMMENT
LOW…/zero-cache/src/services/change-streamer/subscriber.ts121 readonly #wsBatched: boolean;COMMENT
LOW…/zero-cache/src/services/change-streamer/subscriber.ts461 } finally {COMMENT
LOW…s/zero-cache/src/services/change-streamer/forwarder.ts41 );COMMENT
LOW…-cache/src/services/change-streamer/change-streamer.ts81COMMENT
LOW…-cache/src/services/change-streamer/change-streamer.ts101// v6: v0.26COMMENT
LOW…ro-cache/src/services/change-streamer/schema/tables.ts301 const stmts: PendingQuery<Row[]>[] = [];COMMENT
LOW…zero-cache/src/services/replicator/change-processor.ts501 Object.values(row),COMMENT
LOW…zero-cache/src/services/replicator/change-processor.ts721 // representation for existing and future values.COMMENT
LOW…zero-cache/src/services/replicator/change-processor.ts921 // Only columns that are still being backfilled on _this_ replica areCOMMENT
LOW…ero-cache/src/services/replicator/schema/change-log.ts41 * earlier reduces wasted work.COMMENT
LOW…ero-cache/src/services/replicator/schema/change-log.ts61 // : 'd' for deleteCOMMENT
LOW…he/src/services/replicator/schema/replication-state.ts41 // replica is reset or if there are ever multiple replicas).COMMENT
LOWpackages/z2s/src/sql.ts301 // For comparison cast to an unbounded type, not the specific columnCOMMENT
LOWpackages/zero-protocol/src/ast.ts501 readonly schema?: string | undefined;COMMENT
LOWpackages/zero-protocol/src/protocol-version.ts21// -- Version 7 introduces the initConnection.clientSchema field. (0.17)COMMENT
LOWpackages/zero-protocol/src/protocol-version.ts41// -- version 30 adds an optional primaryKey to the ClientSchema (0.24)COMMENT
LOWpackages/zero-protocol/src/protocol-version.ts61// -- version 50 adds OTEL headers to push and query messagesCOMMENT
LOWpackages/zero-solid/src/solid-view.ts81 readonly #retry: () => void;COMMENT
LOWpackages/zero-client/src/util/nanoid.ts1// This is taken from https://github.com/ai/nanoid/blob/main/index.browser.js WeCOMMENT
LOWpackages/zero-client/src/client/zero.test.ts3001 }COMMENT
LOW…kages/zero-client/src/client/zero-poke-handler.test.ts581 },COMMENT
LOWpackages/zero-client/src/client/zero.ts441 // on disconnect.COMMENT
56 more matches not shown…
Cross-Language Confusion (JS/TS)7 hits · 45 pts
SeverityFileLineSnippetContext
HIGH⚡packages/shared/src/bench-format.ts247 print(ansi.bold + header + ansi.reset);CODE
HIGH⚡packages/shared/src/bench-format.ts248 print(ansi.gray + sep + ansi.reset);CODE
HIGH⚡packages/shared/src/bench-format.ts250 print(header);CODE
HIGH⚡packages/shared/src/bench-format.ts251 print(sep);CODE
HIGHpackages/shared/src/bench-format.ts288 print(l);CODE
HIGHpackages/shared/src/bench-format.ts319 print(l);CODE
HIGHpackages/shared/src/bench-format.ts351 print(l);CODE
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALpackages/zero-client/src/client/custom.test.ts211 await z.mutate.level1.level2.level3.createIssue({CODE
CRITICALpackages/zero-client/src/client/custom.test.ts227 await z.mutate.level1.level2.level3.updateTitle({CODE
Decorative Section Separators3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMpackages/zql/src/ivm/view-apply-change.ts294 // label.creator ──────────► [User:rc=2] (one row, two refs)COMMENT
MEDIUMpackages/zero-react/src/navigation-race.test.tsx8// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/zero-react/src/navigation-race.test.tsx26// ──────────────────────────────────────────────────────────────────────────────COMMENT
Verbosity Indicators4 hits · 7 pts
SeverityFileLineSnippetContext
LOW⚡…ro-cache/src/services/change-streamer/schema/tables.ts558 // Step 1: Find backends that are blocked waiting for a lock,COMMENT
LOW…ro-cache/src/services/change-streamer/schema/tables.ts574 // Step 2: For each blocked backend, find and terminate its blockersCOMMENT
LOWpackages/replicache/src/sync/patch-putmany-diff.test.ts52 // Step 1: Simulate poke 1-3 building base via apply (putMany)COMMENT
LOWpackages/replicache/src/sync/patch-putmany-diff.test.ts80 // Step 2: Simulate poke 4 with 4913 puts, overlapping baseCOMMENT
Structural Annotation Overuse4 hits · 7 pts
SeverityFileLineSnippetContext
LOW⚡…ro-cache/src/services/change-streamer/schema/tables.ts558 // Step 1: Find backends that are blocked waiting for a lock,COMMENT
LOW…ro-cache/src/services/change-streamer/schema/tables.ts574 // Step 2: For each blocked backend, find and terminate its blockersCOMMENT
LOWpackages/replicache/src/sync/patch-putmany-diff.test.ts52 // Step 1: Simulate poke 1-3 building base via apply (putMany)COMMENT
LOWpackages/replicache/src/sync/patch-putmany-diff.test.ts80 // Step 2: Simulate poke 4 with 4913 puts, overlapping baseCOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMpackages/zqlite/src/sqlite-stat-fanout.ts272 // Use median of non-NULL fanouts (more robust than average)COMMENT
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMapps/zbugs/playwright/reset_issue.sql33 'Let me know if you need any help with this!',CODE