AI Slop Code Risk Monitor

trpc/trpc

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

🧙‍♀️ Move Fast and Break Nothing. End-to-end typesafe APIs made easy.

1.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for trpc/trpc, a TypeScript project with 40,752 GitHub stars. SynthScan examined 181,131 lines of code across 1459 source files, recording 111 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 1.7 (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.7
Adjusted Signal
1.7
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
40.8K
Stars
TypeScript
Language
181.1K
Lines of Code
1.5K
Files
111
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 2.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 4.9/100 · LOW

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

Agent Over-Engineering Ratio 2.3/100 · LOW

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

PR Review Velocity Impact 7.8/100 · LOW

Which changes need focused human review? 111 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 17HIGH 0MEDIUM 15LOW 79

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 111 distinct pattern matches across 8 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.

Hallucination Indicators17 hits · 175 pts
SeverityFileLineSnippetContext
CRITICALexamples/.test/monotest-app/src/vanilla-client.ts20 const res = await client.router01.child.grandchild.proc.query();CODE
CRITICAL…pgrade/test/__fixtures__/hooks/withInvalidate.snap.tsx17 trpc.post.x.y.z.longPropName.pathFilter(),CODE
CRITICAL…ges/upgrade/test/__fixtures__/hooks/withInvalidate.tsx13 utils.post.x.y.z.longPropName.invalidate();CODE
CRITICAL…ade/test/__fixtures__/hooks/multipleFunctions.snap.tsx7 useQuery(trpc.a.b.c.d.queryOptions());CODE
CRITICAL…ade/test/__fixtures__/hooks/multipleFunctions.snap.tsx15 useQuery(trpc.a.b.c.d.queryOptions());CODE
CRITICALpackages/upgrade/test/__fixtures__/hooks/basic.snap.tsx7 useQuery(trpc.a.b.c.d.queryOptions());CODE
CRITICALpackages/upgrade/test/__fixtures__/hooks/basic.tsx6 trpc.a.b.c.d.useQuery();CODE
CRITICAL…/upgrade/test/__fixtures__/hooks/multipleFunctions.tsx5 trpc.a.b.c.d.useQuery();CODE
CRITICAL…/upgrade/test/__fixtures__/hooks/multipleFunctions.tsx12 trpc.a.b.c.d.useQuery();CODE
CRITICALpackages/tests/server/smoke.test.ts108 expect(await ctx.client.deeply.nested.greeting.query('KATT')).toBe(CODE
CRITICALpackages/tests/server/smoke.test.ts132 expect(await ctx.client.deeply.nested.greeting.query('KATT')).toBe(CODE
CRITICALpackages/tests/server/smoke.test.ts135 expect(await ctx.client.deeply.nested.router.greeting.query('KATT')).toBe(CODE
CRITICALpackages/tests/server/children.test.ts32 expect(await ctx.client.child.grandchild.foo.query()).toBe('grandchild');CODE
CRITICALpackages/tests/server/children.test.ts33 expect(await ctx.client.child.grandchild.mut.mutate()).toBe('mut');CODE
CRITICAL…rc/unstable-core-do-not-import/http/resolveResponse.ts807 // - `router._def._config.transformer.output.serialize()` throwsCOMMENT
CRITICAL…er/src/unstable-core-do-not-import/http/contentType.ts137 opts.router._def._config.transformer.input.deserialize(inputs);CODE
CRITICAL…er/src/unstable-core-do-not-import/http/contentType.ts152 opts.router._def._config.transformer.input.deserialize(input);CODE
Decorative Section Separators15 hits · 45 pts
SeverityFileLineSnippetContext
MEDIUMwww/docs/client/react/getQueryKey.md32// will match all ───────────────────────┘COMMENT
MEDIUM…ersioned_docs/version-10.x/client/react/getQueryKey.md31// will match all ───────────────────────┘COMMENT
MEDIUM_artifacts/domain_map.yaml57 # ── Defining the API ──────────────────────────────────────────────COMMENT
MEDIUM_artifacts/domain_map.yaml636 # ── Consuming the API ─────────────────────────────────────────────COMMENT
MEDIUM_artifacts/domain_map.yaml961 # ── Hosting the API ───────────────────────────────────────────────COMMENT
MEDIUM_artifacts/domain_map.yaml1146 # ── Real-time ─────────────────────────────────────────────────────COMMENT
MEDIUM_artifacts/domain_map.yaml1272 # ── Framework integration ─────────────────────────────────────────COMMENT
MEDIUM_artifacts/domain_map.yaml1395 # ── Composition skills ────────────────────────────────────────────COMMENT
MEDIUM_artifacts/skill_tree.yaml13 # ── Router skill (entry point) ────────────────────────────────────COMMENT
MEDIUM_artifacts/skill_tree.yaml30 # ── Defining the API (packages/server) ────────────────────────────COMMENT
MEDIUM_artifacts/skill_tree.yaml180 # ── Hosting the API (packages/server — adapters) ──────────────────COMMENT
MEDIUM_artifacts/skill_tree.yaml266 # ── Consuming the API (packages/client) ───────────────────────────COMMENT
MEDIUM_artifacts/skill_tree.yaml336 # ── Real-time (packages/server + packages/client) ─────────────────COMMENT
MEDIUM_artifacts/skill_tree.yaml363 # ── Framework integration ─────────────────────────────────────────COMMENT
MEDIUM_artifacts/skill_tree.yaml449 # ── Interop and publishing ────────────────────────────────────────COMMENT
Hyper-Verbose Identifiers38 hits · 38 pts
SeverityFileLineSnippetContext
LOWwww/docusaurus.typedoc.js9function generateTypedocDocusaurusPlugins(directories) {CODE
LOW…es/next-sse-chat/src/app/channels/[channelId]/hooks.ts9export function useThrottledIsTypingMutation(channelId: string) {CODE
LOWexamples/next-sse-chat/src/server/trpc.ts51 async function artificialDelayInDevelopment(opts) {CODE
LOW…ntent-types/client/src/SendMultipartFormDataButton.tsx3export function SendMultipartFormDataButton() {CODE
LOWpackages/upgrade/src/transforms/hooksToOptions.ts375 function removeSuspenseDestructuring(CODE
LOWpackages/upgrade/src/lib/ast/modifiers.ts15export function replaceMemberExpressionRootIndentifier(CODE
LOWpackages/react-query/test/offline.test.tsx67 async function simulateMutationWithoutConnection() {CODE
LOWpackages/react-query/test/offline.test.tsx103 async function restoreConnectionAndVerifyMutation() {CODE
LOWpackages/react-query/test/polymorphism.test.tsx417function SubTypedStartExportButton(props: SubTypedStartExportButtonProps) {CODE
LOWpackages/react-query/src/internals/trpcResult.ts30export async function buildQueryFromAsyncIterable(CODE
LOWpackages/tests/server/errors.test.ts22function getMessageFromUnknownError(err: unknown, fallback: string): string {CODE
LOW…ession/issue-6057-node-http-handler-opts-types.test.ts59function createRequiredContextRouter() {CODE
LOWpackages/server/src/adapters/aws-lambda/getPlanner.ts46function getHeadersAndCookiesFromResponse(response: Response) {CODE
LOWpackages/server/src/observable/operators.test.ts508function createSyncTerminatingSharedSource(CODE
LOW…s/server/src/unstable-core-do-not-import/middleware.ts228export function createErrorFormatterMiddleware(CODE
LOW…s/server/src/unstable-core-do-not-import/middleware.ts313 async function outputValidatorMiddleware({ next }) {CODE
LOW…server/src/unstable-core-do-not-import/stream/jsonl.ts478 function getOrCreate(chunkId: ChunkIndex) {CODE
LOW…/unstable-core-do-not-import/http/getHTTPStatusCode.ts96export function getHTTPStatusCodeFromError(error: TRPCError) {CODE
LOW…table-core-do-not-import/http/parseConnectionParams.ts5export function parseConnectionParamsFromUnknown(CODE
LOW…table-core-do-not-import/http/parseConnectionParams.ts35export function parseConnectionParamsFromString(CODE
LOWpackages/openapi/test/types.ts248export function requireEnvelopeDataSchema({CODE
LOWpackages/openapi/test/types.ts299export function getResponseComponentSchema(CODE
LOWpackages/openapi/test/types.ts306export function requireResponseComponentSchema(CODE
LOWpackages/openapi/src/schemaExtraction.ts281export function collectRuntimeDescriptions(CODE
LOWpackages/openapi/src/generate.ts84function isStandardFunctionInterface(type: ts.Type): boolean {CODE
LOWpackages/openapi/src/generate.ts337function convertPrimitiveOrLiteral(CODE
LOWpackages/openapi/src/generate.ts542function detectDiscriminatorProperty(schemas: SchemaObject[]): string | null {CODE
LOWpackages/openapi/src/generate.ts985function shouldIncludeProcedureInOpenAPI(type: ProcedureInfo['type']): boolean {CODE
LOWpackages/openapi/src/generate.ts989function getProcedureInputTypeName(type: ts.Type, path: string): string {CODE
LOWpackages/openapi/src/generate.ts1032function isCollapsedProcedureInputType(type: ts.Type): boolean {CODE
LOWpackages/openapi/src/generate.ts1041function recoverProcedureInputType(CODE
LOWpackages/openapi/src/generate.ts1212function extractProcedureErrorSchema(CODE
LOWpackages/openapi/src/generate.ts1236function addsNothingToRouterErrorType(CODE
LOWpackages/openapi/src/heyapi/index.ts51export function createTRPCHeyApiTypeResolvers(): HeyAPIResolvers {CODE
LOWpackages/openapi/src/heyapi/index.ts71export function createTRPCHeyApiClientConfig(opts?: TRPCHeyApiClientOptions) {CODE
LOWpackages/openapi/src/heyapi/index.ts120export function createTRPCErrorInterceptor(CODE
LOWpackages/openapi/src/heyapi/index.ts153export function configureTRPCHeyApiClient(CODE
LOWpackages/client/src/TRPCClientError.ts37function getMessageFromUnknownError(err: unknown, fallback: string): string {CODE
Over-Commented Block25 hits · 25 pts
SeverityFileLineSnippetContext
LOWwww/og-image/next-env.d.ts1/// <reference types="next" />COMMENT
LOWwww/og-image/pages/api/landing.tsx21 const data = await (COMMENT
LOWwww/og-image/pages/api/_ref/vercel.tsx61 {COMMENT
LOWexamples/next-edge-runtime/next-env.d.ts1/// <reference types="next" />COMMENT
LOWexamples/next-formdata/next-env.d.ts1/// <reference types="next" />COMMENT
LOWexamples/.test/ssg/next-env.d.ts1/// <reference types="next" />COMMENT
LOWexamples/.test/diagnostics-big-router/next-env.d.ts1/// <reference types="next" />COMMENT
LOWexamples/.test/ssg-infinite-serialization/next-env.d.ts1/// <reference types="next" />COMMENT
LOWexamples/next-prisma-websockets-starter/next-env.d.ts1/// <reference types="next" />COMMENT
LOW…bsockets-starter/.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW…les/next-prisma-websockets-starter/src/pages/index.tsx321// ctx: await createContext(),COMMENT
LOWexamples/next-websockets-encoder/next-env.d.ts1/// <reference types="next" />COMMENT
LOWexamples/next-prisma-starter/next-env.d.ts1/// <reference types="next" />COMMENT
LOWexamples/next-prisma-starter/src/pages/index.tsx161COMMENT
LOWexamples/next-prisma-starter/src/pages/index.tsx181// trpcState: ssg.dehydrate(),COMMENT
LOWexamples/next-big-router/next-env.d.ts1/// <reference types="next" />COMMENT
LOWexamples/next-minimal-starter/next-env.d.ts1/// <reference types="next" />COMMENT
LOWexamples/.experimental/next-app-dir/test/client.test.ts21COMMENT
LOWpackages/react-query/src/createTRPCReact.tsx141// TQueryFnData,COMMENT
LOWpackages/react-query/src/createTRPCReact.tsx161// TQueryKey,COMMENT
LOWpackages/react-query/src/createTRPCReact.tsx241 // TPageParamCOMMENT
LOW…ages/react-query/src/shared/polymorphism/routerLike.ts41// TRoot extends AnyRootTypes,COMMENT
LOW…kages/react-query/src/shared/hooks/createRootHooks.tsx1// NOTE: This indirection is only needed to break a circular-reference.COMMENT
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW.github/workflows/notify-intent.yml1# notify-intent.yml — Drop this into your library repo's .github/workflows/COMMENT
Fake / Example Data8 hits · 8 pts
SeverityFileLineSnippetContext
LOWwww/og-image/pages/index.tsx70 'The createContext() function is called for each request, and the result is propagated to all resolvers.CODE
LOWwww/og-image/pages/index.tsx70 'The createContext() function is called for each request, and the result is propagated to all resolvers.CODE
LOWwww/docs/server/context.md143 const user = token ? { email: 'user@example.com' } : null;CODE
LOWwww/docs/client/react/useMutation.md77 const name = 'John Doe';CODE
LOWwww/docs/client/react/disabling-queries.md21 return { name: input.name, email: 'user@example.com' };CODE
LOWwww/versioned_docs/version-9.x/reactjs/useMutation.md53 const name = 'John Doe';CODE
LOW…ersioned_docs/version-10.x/client/react/useMutation.md57 const name = 'John Doe';CODE
LOW…ntent-types/client/src/SendMultipartFormDataButton.tsx11 fd.set('name', 'John Doe');CODE
Structural Annotation Overuse5 hits · 8 pts
SeverityFileLineSnippetContext
LOW…ct-query/skills/react-query-classic-migration/SKILL.md25## Step 1: Run the upgrade CLICOMMENT
LOW…ct-query/skills/react-query-classic-migration/SKILL.md38## Step 2: Install the new packageCOMMENT
LOW…ct-query/skills/react-query-classic-migration/SKILL.md46## Step 3: Set up the new providerCOMMENT
LOW…ct-query/skills/react-query-classic-migration/SKILL.md163## Step 4: Typecheck and fixCOMMENT
LOW…ct-query/skills/react-query-classic-migration/SKILL.md177## Step 5: Remove classic packageCOMMENT
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOW.github/workflows/check-skills.yml47 # Check if any skills need reviewCOMMENT
LOW.github/workflows/semantic-pr.yml77 # Check if scope is in allowed listCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWpackages/server/src/adapters/ws.ts207 function handleRequest(msg: TRPCClientOutgoingMessage, batchIndex: number) {CODE