Home of the Renovate CLI: Cross-platform Dependency Automation by Mend.io
This report summarizes scanner evidence for renovatebot/renovate, a TypeScript project with 22,969 GitHub stars. SynthScan examined 672,640 lines of code across 3616 source files, recording 434 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 0.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.
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.
Can maintainers explain intent, assumptions, and trade-offs? 401 finding(s).
Are imports declared and package/API names verified? 33 finding(s).
Are wrappers, guards, and repeated structures necessary? 349 finding(s).
Which changes need focused human review? 434 finding(s).
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.
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.
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.
The scanner identified 434 distinct pattern matches across 11 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/sync-org-issue-fields.ts | 136 | export function getUpdateFieldOptionsCommand( | CODE |
| LOW | tools/validate-schema.ts | 11 | async function validateFileAgainstSchema( | CODE |
| LOW | tools/validate-schema.ts | 22 | async function validateFileAgainstSchemaFromFile( | CODE |
| LOW | tools/validate-schema.ts | 76 | async function validateDataFilesAgainstSchemas(): Promise<void> { | CODE |
| LOW | tools/utils/sync-module-labels.ts | 107 | export function formatCreateLabelCommands( | CODE |
| LOW | tools/docs/schema.ts | 273 | function createSchemaForParentConfigs( | CODE |
| LOW | tools/docs/schema.ts | 352 | function createSchemaForChildConfigs( | CODE |
| LOW | tools/docs/manager-asdf-supported-plugins.ts | 11 | export async function generateManagerAsdfSupportedPlugins( | CODE |
| LOW | tools/docs/manager-mise-supported-plugins.ts | 125 | export async function generateManagerMiseSupportedPlugins( | CODE |
| LOW | tools/docs/github-query-items.ts | 174 | export function generateFeatureAndBugMarkdown( | CODE |
| LOW | tools/docs/config.ts | 284 | function generateCacheNamespacesList(): string { | CODE |
| LOW | tools/docs/config.ts | 299 | function generateInheritConfigSupportList(): string { | CODE |
| LOW | tools/docs/config.ts | 317 | function generateStatusCheckWhenTable(): string { | CODE |
| LOW | tools/docs/config.ts | 357 | function generateToolsForConstraints(): string { | CODE |
| LOW | tools/docs/config.ts | 374 | function generateAdditionalConstraints(): string { | CODE |
| LOW | tools/docs/config.ts | 389 | function generateToolsForInstallTools(): string { | CODE |
| LOW | tools/docs/env-vars.ts | 14 | function hardcodedProcessEnvToMarkdown(): string { | CODE |
| LOW | tools/docs/minimum-release-age.ts | 61 | export async function generateMinimumReleaseAgePage( | CODE |
| LOW | tools/docs/test/schema.spec.ts | 80 | async function getLinksToMissingHeadings(): Promise<string[]> { | CODE |
| LOW | tools/docs/test/schema.spec.ts | 378 | function getPresetsRejectedBySchema(): string[] { | CODE |
| LOW | tools/docs/manager/github-actions/known-actions.ts | 26 | function determineDependencyToUpdate({ | CODE |
| LOW | tools/docs/manager/github-actions/known-actions.ts | 57 | export async function generateManagerKnownGithubActions( | CODE |
| LOW | test/http-mock.ts | 93 | function massageHttpMockStacktrace(err: Error): void { | CODE |
| LOW | test/docs/documentation.spec.ts | 31 | async function getConfigOptionSubHeaders( | CODE |
| LOW | test/docs/documentation.spec.ts | 92 | function getPostUpdateOptionsValues(): Set<string> { | CODE |
| LOW | test/docs/documentation.spec.ts | 109 | function getRequiredConfigSubOptions(): string[] { | CODE |
| LOW | test/docs/documentation.spec.ts | 214 | function getRequiredSelfHostedOptions(): string[] { | CODE |
| LOW | test/docs/documentation.spec.ts | 241 | function getRequiredSelfHostedSubOptions(): string[] { | CODE |
| LOW | test/docs/documentation.spec.ts | 302 | async function getSelfHostedExperimentalConfigHeaders( | CODE |
| LOW | test/docs/documentation.spec.ts | 324 | async function getAdditionalHandlebarsHelpersHeaders(): Promise< | CODE |
| LOW | test/docs/documentation.spec.ts | 355 | async function getUpdateTypeSupportTable(): Promise< | CODE |
| LOW | lib/config-validator.ts | 39 | async function partiallyGlobalInitialize(): Promise<void> { | CODE |
| LOW | lib/logger/bunyan.ts | 87 | function serializedSanitizedLogger(streams: BunyanStream[]): BunyanLogger { | CODE |
| LOW⚡ | lib/logger/remap.ts | 53 | export function resetGlobalLogLevelRemaps(): void { | CODE |
| LOW⚡ | lib/logger/remap.ts | 58 | export function setRepositoryLogLevelRemaps( | CODE |
| LOW⚡ | lib/logger/remap.ts | 64 | export function resetRepositoryLogLevelRemaps(): void { | CODE |
| LOW | lib/util/interpolator.ts | 17 | export function validateInterpolatedValues( | CODE |
| LOW | lib/util/interpolator.ts | 56 | function replaceInterpolatedValuesInString( | CODE |
| LOW | lib/util/interpolator.ts | 93 | export function replaceInterpolatedValuesInObject( | CODE |
| LOW | lib/util/sanitize.ts | 66 | export function clearRepoSanitizedSecretsList(): void { | CODE |
| LOW | lib/util/sanitize.ts | 70 | export function clearGlobalSanitizedSecretsList(): void { | CODE |
| LOW⚡ | lib/util/check-token.ts | 65 | export function isGithubPersonalAccessToken(token: string): boolean { | CODE |
| LOW⚡ | lib/util/check-token.ts | 69 | export function isGithubServerToServerToken(token: string): boolean { | CODE |
| LOW⚡ | lib/util/check-token.ts | 73 | export function isGithubFineGrainedPersonalAccessToken(token: string): boolean { | CODE |
| LOW⚡ | lib/util/check-token.ts | 83 | export function takePersonalAccessTokenIfPossible( | CODE |
| LOW | lib/util/host-rules.ts | 471 | function addUrlSecretsForSanitizing(secrets: string[]): void { | CODE |
| LOW | lib/util/host-rules.ts | 611 | export function getDetachedCredentialsHash(text: string): string | null { | CODE |
| LOW | lib/util/host-rules.ts | 684 | function fromShorterToLongerMatchHost(a: HostRule, b: HostRule): number { | CODE |
| LOW | lib/util/host-rules.ts | 712 | function fromLowerRankAndShorterMatchHost(a: HostRule, b: HostRule): number { | CODE |
| LOW | lib/util/host-rules.ts | 721 | function headersOfLastRuleToSetThem( | CODE |
| LOW | lib/util/unicode.ts | 15 | export function logWarningIfUnicodeHiddenCharactersInPackageFile( | CODE |
| LOW | lib/util/minimum-release-age.ts | 31 | export function calculateMinimumReleaseAgeMs( | CODE |
| LOW | lib/util/cache/sanitize-key.ts | 48 | function addDetachedCredentialsHashes(key: string): string { | CODE |
| LOW | lib/util/cache/repository/impl/s3.spec.ts | 23 | function createGetObjectCommandInput( | CODE |
| LOW | lib/util/cache/repository/impl/s3.spec.ts | 35 | function createPutObjectCommandInput( | CODE |
| LOW | lib/util/http/rate-limits.ts | 71 | export function getConcurrentRequestsLimit(url: string): number | null { | CODE |
| LOW | lib/util/http/host-guard.ts | 430 | function stripCrossOriginCredentials( | CODE |
| LOW | lib/util/exec/types.ts | 137 | export function isAdditionalConstraintName( | CODE |
| LOW | lib/util/vulnerability/utils.ts | 19 | export function getFixedVersionConstraint( | CODE |
| LOW | lib/util/vulnerability/utils.ts | 37 | export function getLastAffectedVersionConstraint( | CODE |
| 289 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/find-issues-with-missing-labels.sh | 29 | # Create a list of issue numbers with authors | COMMENT |
| MEDIUM | tools/find-issues-with-missing-labels.sh | 51 | # Create a list of issue numbers with authors | COMMENT |
| MEDIUM | …dules/manager/terraform/__fixtures__/rangeStrategy.hcl | 1 | # This file is maintained automatically by "terraform init". | COMMENT |
| MEDIUM | …/__fixtures__/flux-system-invalid/gotk-components.yaml | 1 | # This file is missing the required Flux Version header | COMMENT |
| MEDIUM | lib/modules/manager/pip-compile/artifacts.spec.ts | 42 | # This file is autogenerated by pip-compile with Python 3.11 | COMMENT |
| MEDIUM | lib/modules/manager/pip-compile/artifacts.spec.ts | 416 | # This file is autogenerated by pip-compile | COMMENT |
| MEDIUM | lib/modules/manager/pip-compile/artifacts.spec.ts | 457 | # This file is autogenerated by pip-compile | COMMENT |
| MEDIUM | lib/modules/manager/pip-compile/common.spec.ts | 20 | # This file is autogenerated by pip-compile with Python 3.11 | COMMENT |
| MEDIUM | lib/modules/manager/pip-compile/common.ts | 267 | /^(?:#.*?\r?\n)*# This file is autogenerated by pip-compile with Python (?<pythonVersion>\d+(?:\.\d+)*)\s/, | CODE |
| MEDIUM | lib/modules/manager/pip-compile/extract.spec.ts | 25 | # This file is autogenerated by pip-compile with Python 3.11 | COMMENT |
| MEDIUM | lib/modules/manager/poetry/utils.spec.ts | 9 | '# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.\n', | CODE |
| MEDIUM | lib/modules/manager/poetry/extract.spec.ts | 564 | '# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.\n', | CODE |
| MEDIUM | lib/modules/manager/gradle-wrapper/util.spec.ts | 45 | #This file is generated by updateDaemonJvm | COMMENT |
| MEDIUM | lib/modules/manager/gradle-wrapper/util.spec.ts | 69 | #This file is generated by updateDaemonJvm | COMMENT |
| MEDIUM | lib/modules/manager/github-actions/artifacts.spec.ts | 21 | # This file is machine-generated by \`gh actions-lock\`. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/usage/configuration-options.md | 2030 | "gitIgnoredAuthors": ["some-bot@example.org"] | CODE |
| LOW⚡ | lib/proxy.spec.ts | 65 | vi.stubEnv('HTTP_PROXY', 'http://user:s3cr3t@example.org'); | CODE |
| LOW⚡ | lib/proxy.spec.ts | 71 | vi.stubEnv('HTTPS_PROXY', 'http://user:s3cr3t@example.org'); | CODE |
| LOW⚡ | lib/proxy.spec.ts | 77 | vi.stubEnv('HTTP_PROXY', 'http://user@example.org'); | CODE |
| LOW⚡ | lib/proxy.spec.ts | 83 | vi.stubEnv('HTTP_PROXY', 'http://:s3cr3t@example.org'); | CODE |
| LOW | lib/util/common.spec.ts | 11 | "name": "John Doe", | CODE |
| LOW | lib/util/common.spec.ts | 37 | "name": "John Doe", | CODE |
| LOW | lib/util/common.spec.ts | 133 | name: 'John Doe', | CODE |
| LOW | lib/util/common.spec.ts | 191 | name: 'John Doe', | CODE |
| LOW | lib/util/url.spec.ts | 333 | ${'user@example.com'} | ${false} | CODE |
| LOW | lib/util/schema-utils/index.spec.ts | 667 | expect(isEmailAdress('user@example.com')).toBe(true); | CODE |
| LOW | lib/util/git/index.spec.ts | 1855 | await fs.writeFile(`${base.path}/test`, 'lorem ipsum'); | CODE |
| LOW | lib/util/git/index.spec.ts | 1889 | await fs.writeFile(`${base.path}/test`, 'lorem ipsum'); | CODE |
| LOW | lib/workers/repository/update/pr/labels.spec.ts | 91 | 'Torem ipsum dolor sit amet, consectetur adipiscing elit. Sed fringilla erat eu lectus gravida varius. Maecenas | CODE |
| LOW | lib/workers/repository/update/pr/labels.spec.ts | 98 | 'Torem ipsum dolor sit amet, consectetur adipiscing', // len: 50 | CODE |
| LOW | lib/workers/repository/update/pr/labels.spec.ts | 111 | 'Torem ipsum dolor sit amet, consectetur adipiscing elit. Sed fringilla erat eu lectus gravida varius. Maecena | CODE |
| LOW | lib/workers/repository/update/pr/labels.spec.ts | 119 | 'Torem ipsum dolor sit amet, consectetur adipiscing', // len: 50 | CODE |
| LOW | lib/modules/platform/utils/pr-body.spec.ts | 81 | const body = smartTruncate('Lorem ipsum dolor sit amet', 10); | CODE |
| LOW | lib/modules/platform/utils/pr-body.spec.ts | 81 | const body = smartTruncate('Lorem ipsum dolor sit amet', 10); | CODE |
| LOW | lib/modules/platform/gitea/schema.spec.ts | 58 | email: 'user@example.com', | CODE |
| LOW | lib/modules/platform/gitea/schema.spec.ts | 61 | expect(user.email).toBe('user@example.com'); | CODE |
| LOW | lib/modules/platform/gitea/gitea-helper.spec.ts | 60 | email: 'admin@example.com', | CODE |
| LOW | lib/modules/platform/gitea/gitea-helper.spec.ts | 118 | body: 'Lorem ipsum dolor sit amet', | CODE |
| LOW | lib/modules/platform/gitea/gitea-helper.spec.ts | 118 | body: 'Lorem ipsum dolor sit amet', | CODE |
| LOW | lib/modules/platform/scm-manager/utils.spec.ts | 95 | contact: 'test@test.com', | CODE |
| LOW | lib/modules/platform/scm-manager/index.spec.ts | 26 | contact: 'test@test.com', | CODE |
| LOW | …odules/platform/scm-manager/scm-manager-helper.spec.ts | 25 | contact: 'test@test.com', | CODE |
| LOW⚡ | lib/modules/platform/bitbucket-server/index.spec.ts | 1087 | q.filter === 'test@test.com' && | CODE |
| LOW⚡ | lib/modules/platform/bitbucket-server/index.spec.ts | 1097 | emailAddress: 'test@test.com', | CODE |
| LOW⚡ | lib/modules/platform/bitbucket-server/index.spec.ts | 1102 | bitbucket.addReviewers(5, ['name', 'userName2', 'test@test.com']), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/mkdocs/mkdocs.yml | 141 | # Extensions | COMMENT |
| LOW | .github/pull-request-size.yml | 1 | # Configuration for PR Size Labeler | COMMENT |
| LOW | lib/util/exec/docker/index.spec.ts | 381 | // }) | COMMENT |
| LOW | lib/util/exec/docker/index.ts | 241 | // It also left `$` and backticks live in the outer context, which silently | COMMENT |
| LOW | lib/util/git/private-key.ts | 121 | COMMENT | |
| LOW | lib/modules/datasource/jsr/common.ts | 1 | export const defaultRegistryUrls = [ | COMMENT |
| LOW | …ource/golang-version/__fixtures__/releases-invalid3.go | 1 | // Copyright 2020 The Go Authors. All rights reserved. | COMMENT |
| LOW | lib/modules/platform/codecommit/codecommit-client.ts | 121 | // repositoryName: string, | COMMENT |
| LOW | lib/modules/platform/codecommit/index.ts | 461 | // } | COMMENT |
| LOW | lib/modules/platform/codecommit/index.ts | 481 | // ); | COMMENT |
| LOW | lib/modules/platform/codecommit/index.ts | 501 | // const response = await client.updatePrStatus( | COMMENT |
| LOW | …/modules/manager/bazel-module/parser/extension-tags.ts | 1 | import { query as q } from '@renovatebot/good-enough-parser'; | COMMENT |
| LOW | lib/modules/manager/cargo/__fixtures__/Cargo.1.toml | 61 | [dev-dependencies] | COMMENT |
| LOW | …pile/__fixtures__/requirementsWithUnknownArguments.txt | 1 | # | COMMENT |
| LOW | …pip-compile/__fixtures__/requirementsCustomCommand.txt | 1 | # | COMMENT |
| LOW | …e/__fixtures__/requirementsWithExploitingArguments.txt | 1 | # | COMMENT |
| LOW | lib/modules/manager/kustomize/extract.spec.ts | 1061 | name: 'arbitrary ssh host with double-slash path delimiter', | COMMENT |
| LOW | lib/modules/versioning/rez/pattern.ts | 1 | // Regular Expressions have been copied from, some more work were necessary to make it work: | COMMENT |
| LOW | lib/modules/versioning/rez/pattern.ts | 21 | // " ^(?P<lower_bound>" | COMMENT |
| LOW | lib/modules/versioning/rez/pattern.ts | 41 | // " (?P<range_upper_asc_prefix><(?={version_group})|<=)" # <= only if followed by a version group | COMMENT |
| LOW | lib/modules/versioning/maven/compare.ts | 521 | // | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | lib/workers/global/index.spec.ts | 278 | const denialWarnings = logger.logger.warn.mock.calls.filter( | CODE |
| CRITICAL | lib/workers/global/initialize.spec.ts | 184 | const denialWarnings = logger.logger.warn.mock.calls.filter( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …workers/repository/process/lookup/__fixtures__/01.json | 1 | {"_id":"q","_rev":"630-d7fce0e6c70f098394f2354b47a5d56a","name":"q","description":"A library for promises (CommonJS/Prom | CODE |
| MEDIUM | …rkers/repository/process/lookup/__fixtures__/next.json | 1 | {"_id":"next","_rev":"268-a36e4644c508821b322a115415ac0a22","name":"next","dist-tags":{"latest":"4.2.3","beta":"4.0.0-be | CODE |
| LOW | …rkers/repository/process/lookup/__fixtures__/next.json | 1 | {"_id":"next","_rev":"268-a36e4644c508821b322a115415ac0a22","name":"next","dist-tags":{"latest":"4.2.3","beta":"4.0.0-be | CODE |
| LOW | …sitory/process/lookup/__fixtures__/vue-test-utils.json | 1 | {"_id":"vue-test-utils","_rev":"22-66ccf0fa49e20a73a70fbe8379efde72","name":"vue-test-utils","description":"Utilities fo | CODE |
| LOW | …orkers/repository/process/lookup/__fixtures__/vue.json | 1 | {"_id":"vue","_rev":"638-dc9984a3a413fdba4589a021d11f2548","name":"vue","description":"Reactive, component-oriented view | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/logger/once.spec.ts | 63 | function doSomething() { | CODE |
| LOW | lib/logger/once.spec.ts | 77 | function doSomething() { | CODE |
| LOW | lib/logger/once.spec.ts | 92 | function doSomething() { | CODE |
| LOW | lib/logger/once.spec.ts | 109 | function doSomething(s: string) { | CODE |
| LOW | lib/logger/once.spec.ts | 127 | function doSomething() { | CODE |
| LOW | lib/logger/once.spec.ts | 149 | function doSomething() { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | lib/modules/datasource/repology/__fixtures__/nginx.json | 1 | [{"repo":"parabola","subrepo":"extra","srcname":"nginx","binname":"nginx","visiblename":"nginx","version":"1.18.0","lice | CODE |
| MEDIUM | lib/modules/manager/gleam/extract.ts | 14 | // this allows us to leverage renovate built-in configurations and presets | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | lib/modules/manager/pep723/utils.spec.ts | 131 | print("requires-python>=3.11") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/usage/mend-hosted/github-com-token.md | 29 | ### Step 1: Acquire a github.com token | COMMENT |
| LOW | docs/usage/mend-hosted/github-com-token.md | 43 | ### Step 2: Add the token to the Org/Repo credentials | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …orkers/repository/process/lookup/__fixtures__/vue.json | 1 | {"_id":"vue","_rev":"638-dc9984a3a413fdba4589a021d11f2548","name":"vue","description":"Reactive, component-oriented view | CODE |