AI Slop Code Risk Monitor

angular/angular-cli

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

CLI tool for Angular

1.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for angular/angular-cli, a TypeScript project with 27,017 GitHub stars. SynthScan examined 175,537 lines of code across 1380 source files, recording 183 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 1.2 (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.2
Adjusted Signal
1.2
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
27.0K
Stars
TypeScript
Language
175.5K
Lines of Code
1.4K
Files
183
Pattern Hits
2026-10-31
Scan Date
0.00
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 5.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.3/100 · LOW

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

Agent Over-Engineering Ratio 4.5/100 · LOW

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

PR Review Velocity Impact 5.5/100 · LOW

Which changes need focused human review? 183 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 1HIGH 0MEDIUM 4LOW 178

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 183 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.

Hyper-Verbose Identifiers162 hits · 162 pts
SeverityFileLineSnippetContext
LOWtools/quicktype_runner.js145function appendDeprecatedDescription(schema) {CODE
LOWtests/e2e/tests/vitest/larger-project-coverage.ts71async function generateArtifactsInBatches(artifactCount: number): Promise<string[]> {CODE
LOWtests/e2e/tests/vitest/larger-project.ts40async function generateArtifactsInBatches(artifactCount: number): Promise<void> {CODE
LOWtests/e2e/tests/vite/ssr-entry-express.ts118async function modifyFileAndWaitUntilUpdated(CODE
LOWtests/e2e/tests/vite/ssr-entry-h3.ts102async function modifyFileAndWaitUntilUpdated(CODE
LOWtests/e2e/tests/vite/ssr-entry-hono.ts94async function modifyFileAndWaitUntilUpdated(CODE
LOWtests/e2e/tests/vite/ssr-entry-fastify.ts111async function modifyFileAndWaitUntilUpdated(CODE
LOWtests/e2e/utils/project.ts186export function updateServerFileForEsbuild(filepath: string): Promise<void> {CODE
LOWtests/e2e/utils/process.ts215export async function waitForAnyProcessOutputToMatch(CODE
LOWtests/e2e/utils/process.ts329export async function execAndWaitForOutputToMatch(CODE
LOWtests/e2e/utils/registry.ts53export async function createNpmConfigForAuthentication(CODE
LOWtests/e2e/utils/registry.ts107export function setNpmEnvVarsForAuthentication(CODE
LOWpackages/angular/cli/src/utilities/formatting.ts31export function batchFilesByArgumentLength(CODE
LOWpackages/angular/cli/src/utilities/completion.ts36export async function considerSettingUpAutocompletion(CODE
LOWpackages/angular/cli/src/utilities/completion.ts124async function shouldPromptForAutocompletionSetup(CODE
LOWpackages/angular/cli/src/utilities/completion.ts254function getShellRunCommandCandidates(shell: string, home: string): string[] | undefined {CODE
LOWpackages/angular/cli/src/utilities/config.ts326export async function getConfiguredPackageManager(): Promise<PackageManager | null> {CODE
LOWpackages/angular/cli/src/utilities/node-version.ts29export function isNodeVersionMinSupported(CODE
LOW…ages/angular/cli/src/command-builder/command-runner.ts198async function getConfiguredPackageManager(CODE
LOW…gular/cli/src/command-builder/utilities/json-schema.ts150function isSupportedArrayItemSchema(schema: json.JsonObject): boolean {CODE
LOW…mand-builder/utilities/normalize-options-middleware.ts20export function createNormalizeOptionsMiddleware(localeYargs: Argv): (args: Arguments) => void {CODE
LOWpackages/angular/cli/src/commands/update/cli.ts719export async function resolveFallbackMigrations(CODE
LOW…ges/angular/cli/src/commands/update/update-resolver.ts127export function angularMajorCompatGuarantee(range: string) {CODE
LOW…angular/cli/src/commands/update/utilities/migration.ts310async function getOptionalMigrationsToRun(CODE
LOW…angular/cli/src/commands/update/utilities/migration.ts357function getMigrationTitleAndDescription(migration: MigrationSchematicDescription): {CODE
LOW…gular/cli/src/commands/update/utilities/cli-version.ts82export function getCLIUpdateRunnerVersion(CODE
LOW…gular/cli/src/commands/update/utilities/cli-version.ts178export async function shouldForcePackageManager(CODE
LOW…ckages/angular/cli/src/commands/mcp/workspace-utils.ts130export async function resolveWorkspaceAndProject({CODE
LOWpackages/angular/cli/src/commands/mcp/devserver.ts172export function createDevServerNotFoundError(CODE
LOWpackages/angular/cli/src/commands/mcp/tools/projects.ts33function getStyleLanguageFromExtension(extension: string): StyleLanguage | undefined {CODE
LOWpackages/angular/cli/src/commands/mcp/tools/projects.ts567async function createListProjectsHandler({ server, roots: configuredRoots }: McpToolContext) {CODE
LOW…s/angular/cli/src/commands/mcp/tools/best-practices.ts86async function getVersionSpecificBestPractices(CODE
LOW…s/angular/cli/src/commands/mcp/tools/best-practices.ts194function createBestPracticesHandler({ logger, server }: McpToolContext) {CODE
LOW…oneless-migration/analyze-for-unsupported-zone-uses.ts14export async function analyzeForUnsupportedZoneUses(CODE
LOW…oneless-migration/analyze-for-unsupported-zone-uses.ts42export async function findUnsupportedZoneUsages(CODE
LOW⚡…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts15export function createProvideZonelessForTestsSetupPrompt(testFilePath: string): MigrationResponse {CODE
LOW…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts56export function createUnsupportedZoneUsagesMessage(CODE
LOW…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts114export function generateZonelessMigrationInstructionsForComponent(CODE
LOW…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts165export function createTestDebuggingGuideForNonActionableInput(CODE
LOW…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts180export async function createFixResponseForZoneTests(CODE
LOW…/tools/onpush-zoneless-migration/zoneless-migration.ts56export async function registerZonelessMigrationTool(CODE
LOW…/tools/onpush-zoneless-migration/zoneless-migration.ts113async function discoverAndCategorizeFiles(CODE
LOW…/tools/onpush-zoneless-migration/zoneless-migration.ts219async function rankComponentFilesForMigration(CODE
LOW…angular/cli/src/commands/mcp/resources/instructions.ts12export function registerInstructionsResource(server: McpServer): void {CODE
LOWpackages/angular/cli/src/package-managers/parsers.ts226export function parseYarnClassicDependencies(CODE
LOWpackages/angular/cli/src/package-managers/parsers.ts853export function parseYarnModernDependencies(CODE
LOW…ular/cli/src/package-managers/manifest-dependencies.ts70async function findNodeModulesDirectories(CODE
LOW…ular/cli/src/package-managers/manifest-dependencies.ts138export async function resolveManifestDependencies(CODE
LOWpackages/angular/cli/src/analytics/analytics.ts30export function isPackageNameSafeForAnalytics(name: string): boolean {CODE
LOWpackages/angular/cli/src/analytics/analytics.ts119async function getAnalyticsUserIdForLevel(CODE
LOWpackages/angular/cli/src/analytics/analytics.ts186function analyticsConfigValueToHumanFormat(value: unknown): 'enabled' | 'disabled' | 'not set' {CODE
LOWpackages/angular/ssr/test/testing-utils.ts49export function setAngularAppTestingManifest(CODE
LOWpackages/angular/ssr/node/src/errors.ts21export function attachNodeGlobalErrorHandlers(): void {CODE
LOWpackages/angular/ssr/node/src/environment-options.ts21export function getTrustProxyHeadersFromEnv(): ReadonlyArray<string> | undefined {CODE
LOWpackages/angular/ssr/node/src/response.ts18function isResponseDestroyedOrClosed(destination: ServerResponse | Http2ServerResponse): boolean {CODE
LOWpackages/angular/ssr/node/src/response.ts39export async function writeResponseToNodeResponse(CODE
LOWpackages/angular/ssr/node/src/request.ts50export function createWebRequestFromNodeRequest(CODE
LOWpackages/angular/ssr/node/src/request.ts164function getAllowedProxyHeaderValue(CODE
LOWpackages/angular/ssr/src/i18n.ts28export function getPotentialLocaleIdFromUrl(url: URL, basePath: string): string {CODE
LOWpackages/angular/ssr/src/app.ts471export function getOrCreateAngularServerApp(CODE
102 more matches not shown…
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICAL…ngular_devkit/schematics/tools/fallback-engine-host.ts83 return context.schematic.collection.description.host.createSourceFromUrl(url, context);CODE
Modern AI Meta-Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMtests/e2e/assets/20.0-project/README.md15## Code scaffoldingCOMMENT
MEDIUMtests/e2e/assets/ssr-project-webpack/README.md9## Code scaffoldingCOMMENT
MEDIUM…les/testing/builder/projects/hello-world-app/README.md9## Code scaffoldingCOMMENT
Verbosity Indicators4 hits · 8 pts
SeverityFileLineSnippetContext
LOW⚡…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts24 #### Step 1: Enable Zoneless Change Detection for the SuiteCOMMENT
LOW…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts42 #### Step 2: Identify and fix Failing TestsCOMMENT
LOW⚡…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts125 #### Step 1: Identify and Refactor StateCOMMENT
LOW⚡…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts133 #### Step 2: Add \`ChangeDetectionStrategy.Eager\`COMMENT
Structural Annotation Overuse4 hits · 8 pts
SeverityFileLineSnippetContext
LOW⚡…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts24 #### Step 1: Enable Zoneless Change Detection for the SuiteCOMMENT
LOW…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts42 #### Step 2: Identify and fix Failing TestsCOMMENT
LOW⚡…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts125 #### Step 1: Identify and Refactor StateCOMMENT
LOW⚡…ommands/mcp/tools/onpush-zoneless-migration/prompts.ts133 #### Step 2: Add \`ChangeDetectionStrategy.Eager\`COMMENT
Over-Commented Block6 hits · 6 pts
SeverityFileLineSnippetContext
LOWtests/e2e/tests/update/update.ts21 // Example error where 11.2.14 satisfies the SemVer range ^11.0.0 but still fails:COMMENT
LOW…sts/e2e/tests/commands/config/config-set-enum-check.ts1import { ng } from '../../../utils/process';COMMENT
LOWpackages/angular_devkit/core/node/cli-logger.ts41 // If we do console.log(message) or process.stdout.write(message + '\n'), the process mightCOMMENT
LOW…kit/schematics_cli/schematic/files/src/collection.json1// By default, collection.json is a Loose-format JSON5 format, which means it's loaded using aCOMMENT
LOW…ics_cli/schematic/files/src/my-full-schematic/index.ts21 },COMMENT
LOW…hematics_cli/schematic/files/src/my-schematic/index.ts1import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics';COMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/perf.yml48 # We utilize the google-github-actions/auth action to allow us to get an active credential using workflowCOMMENT
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippetContext
LOWpackages/angular/ssr/test/utils/validation_spec.ts450 'x-forwarded-email': 'user@example.com',CODE
LOWpackages/angular/ssr/test/utils/validation_spec.ts458 expect(secured.headers.get('x-forwarded-email')).toBe('user@example.com');CODE