AI Slop Code Risk Monitor

samanhappy/mcphub

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

Self-hosted MCP gateway and control plane for connecting, controlling, and operating MCP servers.

2.4 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for samanhappy/mcphub, a TypeScript project with 2,610 GitHub stars. SynthScan examined 190,287 lines of code across 822 source files, recording 200 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 2.4 (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.

2.4
Adjusted Signal
2.4
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
2.6K
Stars
TypeScript
Language
190.3K
Lines of Code
822
Files
200
Pattern Hits
2026-10-31
Scan Date
0.02
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 3.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 3.1/100 · LOW

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

Agent Over-Engineering Ratio 6.1/100 · LOW

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

PR Review Velocity Impact 10.3/100 · LOW

Which changes need focused human review? 200 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 4HIGH 11MEDIUM 62LOW 123

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

Decorative Section Separators62 hits · 194 pts
SeverityFileLineSnippetContext
MEDIUMfrontend/src/components/ServerForm.tsx340 // ── OpenAPI source analysis (#1082, #1093) ────────────────────────────────COMMENT
MEDIUMfrontend/src/components/ServerForm.tsx340 // ── OpenAPI source analysis (#1082, #1093) ────────────────────────────────COMMENT
MEDIUMtests/frontend/serverFormPayload.test.ts252 // ── #F1 OAuth sub-field round-trip ────────────────────────────────────────COMMENT
MEDIUMtests/frontend/serverFormPayload.test.ts252 // ── #F1 OAuth sub-field round-trip ────────────────────────────────────────COMMENT
MEDIUMtests/dao/userDaoDbImpl.test.ts1// ── Mock UserRepository ───────────────────────────────────────────COMMENT
MEDIUMtests/dao/userDaoDbImpl.test.ts41 // ── findBySsoUserId ──────────────────────────────────────────COMMENT
MEDIUMtests/dao/userDaoDbImpl.test.ts67 // ── toIUser mapping ─────────────────────────────────────────COMMENT
MEDIUMtests/dao/userDaoDbImpl.test.ts111 // ── create with ssoUserId ───────────────────────────────────COMMENT
MEDIUMtests/dao/userDaoDbImpl.test.ts146 // ── createWithHashedPassword with ssoUserId ─────────────────COMMENT
MEDIUMtests/dao/userDaoDbImpl.test.ts165 // ── update with ssoUserId ───────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts17// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts19// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts78// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts80// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts117// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts119// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts161// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts163// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts197// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts199// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/utils/tokenTruncation.test.ts276// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/utils/tokenTruncation.test.ts278// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/utils/tokenTruncation.test.ts288// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/utils/tokenTruncation.test.ts290// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts308// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts310// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts470// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts472// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts522// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/utils/tokenTruncation.test.ts524// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/controllers/userController.test.ts3// ── Mock service layer ───────────────────────────────────────────COMMENT
MEDIUMtests/controllers/userController.test.ts55 // ── createUser ───────────────────────────────────────────────COMMENT
MEDIUMtests/controllers/userController.test.ts109 // ── updateExistingUser ───────────────────────────────────────COMMENT
MEDIUMtests/controllers/builtinConfigAuth.test.ts3// ── Mock DAO layer ───────────────────────────────────────────────COMMENT
MEDIUMtests/services/userService.test.ts1// ── Mock DAO layer ────────────────────────────────────────────────COMMENT
MEDIUMtests/services/userService.test.ts46 // ── createNewUser ────────────────────────────────────────────COMMENT
MEDIUMtests/services/userService.test.ts95 // ── updateUser ───────────────────────────────────────────────COMMENT
MEDIUMtests/services/userService.test.ts146 // ── deleteUser ───────────────────────────────────────────────COMMENT
MEDIUMtests/services/betterAuthSession.test.ts3// ── Mock DAO layer ────────────────────────────────────────────────COMMENT
MEDIUMtests/services/betterAuthSession.test.ts20// ── Mock Better Auth runtime config ──────────────────────────────COMMENT
MEDIUMtests/services/betterAuthSession.test.ts27// ── Mock Better Auth modules (used by getBetterAuthSession) ──────COMMENT
MEDIUMtests/services/betterAuthSession.test.ts45 // ── Priority 1: ssoUserId match ──────────────────────────────COMMENT
MEDIUMtests/services/betterAuthSession.test.ts104 // ── Priority 2: email match (legacy fallback) ────────────────COMMENT
MEDIUM⚡tests/services/betterAuthSession.test.ts162 // ── Priority 3: username match (backward compat) ─────────────COMMENT
MEDIUMtests/services/betterAuthSession.test.ts219 // ── Priority 4: create new user ──────────────────────────────COMMENT
MEDIUMtests/services/betterAuthSession.test.ts282 // ── Session edge cases ───────────────────────────────────────COMMENT
MEDIUMtests/services/betterAuthSession.test.ts312 // ── Forward-auth identities stay separate ────────────────────COMMENT
MEDIUMsrc/clients/openapi.ts1140 // ── Declared-security resolution (#1077) ─────────────────────────────────COMMENT
MEDIUMsrc/clients/openapi.ts1140 // ── Declared-security resolution (#1077) ─────────────────────────────────COMMENT
MEDIUMsrc/types/index.ts919// ─── Context Footprint (token cost) feature ───────────────────────────────COMMENT
MEDIUMsrc/utils/tokenTruncation.ts51// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/utils/tokenTruncation.ts53// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/utils/tokenTruncation.ts78// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/utils/tokenTruncation.ts80// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/utils/tokenTruncation.ts103// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/utils/tokenTruncation.ts105// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/utils/tokenTruncation.ts355// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/utils/tokenTruncation.ts357// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/utils/tokenTruncation.ts420// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/utils/tokenTruncation.ts422// ─────────────────────────────────────────────────────────────────────────────COMMENT
2 more matches not shown…
Magic Placeholder Names11 hits · 55 pts
SeverityFileLineSnippetContext
HIGHmcp_settings.json10 "AMAP_MAPS_API_KEY": "your-api-key"CODE
HIGHarticals/intro2.md60 "AMAP_MAPS_API_KEY": "your-api-key"CODE
HIGHfrontend/src/components/ServerForm.tsx1052 placeholder="your-api-key"CODE
HIGHtests/cli/commands/install.test.ts34 env: { AMAP_MAPS_API_KEY: '<your-api-key>' },CODE
HIGHtests/cli/commands/install.test.ts38 AMAP_MAPS_API_KEY: { description: 'AMap API key', required: true, example: '<your-api-key>' },CODE
HIGHexamples/openapi-schema-config.json13 "value": "your-api-key-here"CODE
HIGHexamples/openapi-schema-config.json246 "value": "your-api-key-here"CODE
HIGHsrc/services/vectorSearchService.ts55 ` -H "Authorization: Bearer <YOUR_API_KEY>"`,CODE
HIGHsrc/services/vectorSearchService.ts55 ` -H "Authorization: Bearer <YOUR_API_KEY>"`,CODE
HIGHsrc/services/vectorSearchService.ts950 `[Embedding] Reproducible curl (copy/paste and replace <YOUR_API_KEY>):\n${buildEmbeddingsDebugCurl(config.bCODE
HIGHsrc/services/vectorSearchService.ts950 `[Embedding] Reproducible curl (copy/paste and replace <YOUR_API_KEY>):\n${buildEmbeddingsDebugCurl(config.bCODE
Hyper-Verbose Identifiers47 hits · 47 pts
SeverityFileLineSnippetContext
LOWfrontend/src/utils/openApiSourceAnalysis.ts45export function shouldAutoAnalyzeOpenApiSource(options: {CODE
LOWfrontend/src/utils/openApiSecurityPrefill.ts29export function isOpenApiSecurityUntouched(formData: ServerFormData, userTouched = false): boolean {CODE
LOWfrontend/src/utils/openApiSecurityPrefill.ts52export function applyDeclaredSecurityPrefill(CODE
LOWfrontend/src/utils/openApiSecurityPrefill.ts89export function securityConfigurationsDiffer(CODE
LOWfrontend/src/utils/openApiSecurityPrefill.ts117export function describeConfiguredSecurity(formData: ServerFormData): string | null {CODE
LOWfrontend/src/utils/openApiSecurityPrefill.ts139export function buildOpenApiSecurityNotice(CODE
LOWfrontend/src/pages/SettingsPage.tsx434function getDefaultTokenLimitForUI(model: string): number {CODE
LOWfrontend/src/pages/SettingsPage.tsx475function getEmbeddingProviderPresetId(CODE
LOWfrontend/src/pages/SettingsPage.tsx504function parseEmbeddingMaxTokensForUpdate(CODE
LOWfrontend/src/pages/SettingsPage.tsx515function parseEmbeddingDimensionsForUpdate(CODE
LOWfrontend/src/pages/SettingsPage.tsx537function parseOptionalSearchSettingForUpdate(CODE
LOWfrontend/src/pages/SettingsPage.tsx569function parseBasePacingDelayForUpdate(CODE
LOWscripts/dev-backend.js12function resolvePathFromProjectRoot(value) {CODE
LOWsrc/dao/examples.ts139export async function exampleSystemConfigOperations() {CODE
LOWsrc/dao/examples.ts170export async function exampleUserConfigOperations() {CODE
LOWsrc/utils/credentialBindingMigration.ts16export async function migrateCredentialBindings(): Promise<void> {CODE
LOWsrc/utils/openApiRequestBody.ts63export function makeMultipartBodySchemaModelFriendly(schema: unknown): unknown {CODE
LOWsrc/utils/openApiRequestBody.ts245function assertValidMultipartContentType(contentType: string): void {CODE
LOWsrc/utils/path.ts176function resolveSettingsPathFromEnv(envPath: string, filename: string): string {CODE
LOWsrc/utils/ssrf.ts233export function createRedirectValidatingFetch(CODE
LOWsrc/utils/tokenCost.ts68export function serializePromptDefinition(CODE
LOWsrc/utils/tokenCost.ts78export function serializeResourceDefinition(CODE
LOWsrc/utils/smartRouting.ts534export function parseToolDefinitionFields(value: unknown): ToolDefinitionField[] | undefined {CODE
LOWsrc/utils/processTree.ts40export function isProcessTreeKillAvailable(): boolean {CODE
LOWsrc/utils/processTree.ts50export function resetProcessTreeKillCache(): void {CODE
LOWsrc/utils/tokenTruncation.ts35export function getModelDefaultTokenLimit(model: string): number {CODE
LOWsrc/db/types/postgresVectorType.ts7export function registerPostgresVectorType(dataSource: DataSource): void {CODE
LOWsrc/controllers/oauthServerController.ts44async function resolveBetterAuthUserForAuthorize(req: Request): Promise<AuthenticatedUser | null> {CODE
LOWsrc/controllers/oauthServerController.ts113async function validateClientRedirectUri(CODE
LOWsrc/services/changelogService.ts23export function clearChangelogUpdateCache(): void {CODE
LOWsrc/services/changelogService.ts70async function fetchUpdateInfoFromMcphubWeb(CODE
LOWsrc/services/activityLoggingService.ts164export function getActivityLoggingService(): ActivityLoggingService {CODE
LOWsrc/services/hostedInternalAuth.ts58export function serializeInternalRequestBodyForSignature(body?: unknown): string {CODE
LOWsrc/services/hostedInternalAuth.ts143export function verifyInternalExpressRequest(CODE
LOWsrc/services/hostedControlPlaneClient.ts104function createSignedControlPlaneHeaders(CODE
LOWsrc/services/hostedControlPlaneClient.ts116function createValidateHostedApiKeyAuthHeaders(): InternalRequestAuthHeaders {CODE
LOWsrc/services/vectorSearchService.ts1016function generateFallbackEmbedding(text: string): number[] {CODE
LOWsrc/services/vectorSearchService.ts1920async function checkDatabaseVectorDimensions(dimensionsNeeded: number): Promise<boolean> {CODE
LOWsrc/services/vectorSearchService.ts2069async function clearMismatchedVectorData(expectedDimensions: number): Promise<void> {CODE
LOWsrc/services/toolPolicyDiagnostics.ts10export async function warnMissingToolPolicyReferences(): Promise<void> {CODE
LOWsrc/services/openApiGeneratorService.ts28function convertToolSchemaToOpenAPI(tool: Tool): {CODE
LOWsrc/services/openApiGeneratorService.ts91function generateOperationFromTool(tool: Tool, serverName: string): OpenAPIV3.OperationObject {CODE
LOWsrc/services/hostedEventSubscriber.ts37function shouldSubscribeToRedisEvents(): boolean {CODE
LOWsrc/services/hostedEventSubscriber.ts81export async function startHostedEventSubscriber(): Promise<void> {CODE
LOWsrc/services/hostedEventSubscriber.ts219export async function stopHostedEventSubscriber(): Promise<void> {CODE
LOWsrc/services/templateService.ts253function stripOpenApiSecuritySecrets(CODE
LOWsrc/services/mcpService.ts6409export async function filterResourceTemplatesByGroup(CODE
Verbosity Indicators22 hits · 41 pts
SeverityFileLineSnippetContext
LOW⚡src/config/migrationUtils.ts64 // Step 1: Backup current dataCOMMENT
LOW⚡src/config/migrationUtils.ts69 // Step 2: Perform migrationCOMMENT
LOW⚡src/config/migrationUtils.ts78 // Step 3: Validate migrationCOMMENT
LOWsrc/scripts/dao-demo.ts130 // Step 1: Show current configurationCOMMENT
LOWsrc/scripts/dao-demo.ts142 // Step 2: Switch to DAO and show same dataCOMMENT
LOWsrc/scripts/dao-demo.ts156 // Step 3: Demonstrate CRUD operationsCOMMENT
LOWsrc/scripts/dao-demo.ts220 // Step 4: Show benefitsCOMMENT
LOW⚡src/db/connection.ts286 // Step 1: Drop any existing index on the columnCOMMENT
LOW⚡src/db/connection.ts293 // Step 2: Ensure embedding column exists and uses vector typeCOMMENT
LOW⚡src/db/connection.ts301 // Step 3: Try to create appropriate indicesCOMMENT
LOW⚡src/services/oauthClientRegistration.ts178 // Step 1: Parse WWW-Authenticate header to get resource metadata URLCOMMENT
LOW⚡src/services/oauthClientRegistration.ts186 // Step 2: Fetch protected resource metadataCOMMENT
LOW⚡src/services/oauthClientRegistration.ts189 // Step 3: Select first authorization server (TODO: implement proper selection logic)COMMENT
LOW⚡src/services/oauthClientRegistration.ts196 // Step 4: Determine resource URL (canonical URI of MCP server)COMMENT
LOW⚡src/services/oauthClientRegistration.ts199 // Step 5: Extract supported scopes from resource metadataCOMMENT
LOWsrc/services/oauthClientRegistration.ts287 // Step 1: Determine the authorization server URLCOMMENT
LOWsrc/services/oauthClientRegistration.ts303 // Step 2: Prepare client metadata for registrationCOMMENT
LOWsrc/services/oauthClientRegistration.ts344 // Step 3: Perform dynamic client registrationCOMMENT
LOWsrc/services/oauthClientRegistration.ts360 // Step 4: Store registered client informationCOMMENT
LOWsrc/services/sseService.ts305 // Step 1: Try to match as a group (by name or id), since group has higher priorityCOMMENT
LOWsrc/services/sseService.ts389 // Step 2: Not a group, try to match as a server nameCOMMENT
LOWsrc/services/sseService.ts413 // Step 3: Not a valid group or server, deny accessCOMMENT
Structural Annotation Overuse22 hits · 41 pts
SeverityFileLineSnippetContext
LOW⚡src/config/migrationUtils.ts64 // Step 1: Backup current dataCOMMENT
LOW⚡src/config/migrationUtils.ts69 // Step 2: Perform migrationCOMMENT
LOW⚡src/config/migrationUtils.ts78 // Step 3: Validate migrationCOMMENT
LOWsrc/scripts/dao-demo.ts130 // Step 1: Show current configurationCOMMENT
LOWsrc/scripts/dao-demo.ts142 // Step 2: Switch to DAO and show same dataCOMMENT
LOWsrc/scripts/dao-demo.ts156 // Step 3: Demonstrate CRUD operationsCOMMENT
LOWsrc/scripts/dao-demo.ts220 // Step 4: Show benefitsCOMMENT
LOW⚡src/db/connection.ts286 // Step 1: Drop any existing index on the columnCOMMENT
LOW⚡src/db/connection.ts293 // Step 2: Ensure embedding column exists and uses vector typeCOMMENT
LOW⚡src/db/connection.ts301 // Step 3: Try to create appropriate indicesCOMMENT
LOW⚡src/services/oauthClientRegistration.ts178 // Step 1: Parse WWW-Authenticate header to get resource metadata URLCOMMENT
LOW⚡src/services/oauthClientRegistration.ts186 // Step 2: Fetch protected resource metadataCOMMENT
LOW⚡src/services/oauthClientRegistration.ts189 // Step 3: Select first authorization server (TODO: implement proper selection logic)COMMENT
LOW⚡src/services/oauthClientRegistration.ts196 // Step 4: Determine resource URL (canonical URI of MCP server)COMMENT
LOW⚡src/services/oauthClientRegistration.ts199 // Step 5: Extract supported scopes from resource metadataCOMMENT
LOWsrc/services/oauthClientRegistration.ts287 // Step 1: Determine the authorization server URLCOMMENT
LOWsrc/services/oauthClientRegistration.ts303 // Step 2: Prepare client metadata for registrationCOMMENT
LOWsrc/services/oauthClientRegistration.ts344 // Step 3: Perform dynamic client registrationCOMMENT
LOWsrc/services/oauthClientRegistration.ts360 // Step 4: Store registered client informationCOMMENT
LOWsrc/services/sseService.ts305 // Step 1: Try to match as a group (by name or id), since group has higher priorityCOMMENT
LOWsrc/services/sseService.ts389 // Step 2: Not a group, try to match as a server nameCOMMENT
LOWsrc/services/sseService.ts413 // Step 3: Not a valid group or server, deny accessCOMMENT
Hallucination Indicators4 hits · 40 pts
SeverityFileLineSnippetContext
CRITICALsrc/clients/__tests__/openapi-path-params.test.ts71 const requestConfig = client.httpClient.request.mock.calls.at(-1)[0];CODE
CRITICALsrc/controllers/serverController.ts2830 oidcTarget.providerId = auth.betterAuth.providers.oidc.providerId.trim();CODE
CRITICALsrc/controllers/serverController.ts2834 oidcTarget.discoveryUrl = auth.betterAuth.providers.oidc.discoveryUrl.trim();CODE
CRITICALsrc/controllers/serverController.ts2849 const promptValue = auth.betterAuth.providers.oidc.prompt.trim();CODE
Fake / Example Data17 hits · 24 pts
SeverityFileLineSnippetContext
LOWtests/frontend/serverFormPayload.test.ts269 contacts: ['admin@example.com'],CODE
LOWtests/utils/parameterConversion.test.ts139 const params = { name: 'John Doe' };CODE
LOWtests/utils/parameterConversion.test.ts149 expect(result.name).toBe('John Doe');CODE
LOWtests/scripts/validate-release-notes.test.ts177 expect(result.stderr).toContain('placeholder');CODE
LOW⚡tests/controllers/userController.test.ts144 email: 'admin@example.com',CODE
LOW⚡tests/controllers/userController.test.ts150 body: { isAdmin: true, email: 'admin@example.com' },CODE
LOW⚡tests/controllers/userController.test.ts158 email: 'admin@example.com',CODE
LOW⚡tests/services/userService.test.ts119 email: 'admin@example.com',CODE
LOW⚡tests/services/userService.test.ts122 await updateUser('testuser', { isAdmin: true, email: 'admin@example.com' });CODE
LOW⚡tests/services/userService.test.ts125 expect(mockUpdate).toHaveBeenCalledWith('testuser', { email: 'admin@example.com' });CODE
LOW⚡tests/services/betterAuthSession.test.ts129 user: { id: 'ba-456', email: 'user@example.com', name: 'User' },CODE
LOW⚡tests/services/betterAuthSession.test.ts133 username: 'user@example.com',CODE
LOW⚡tests/services/betterAuthSession.test.ts134 email: 'user@example.com',CODE
LOW⚡tests/services/betterAuthSession.test.ts142 expect(mockUpdate).toHaveBeenCalledWith('user@example.com', { ssoUserId: 'ba-456' });CODE
LOW⚡tests/services/betterAuthSession.test.ts147 user: { id: undefined, email: 'user@example.com' },CODE
LOW⚡tests/services/betterAuthSession.test.ts151 username: 'user@example.com',CODE
LOW⚡tests/services/betterAuthSession.test.ts152 email: 'user@example.com',CODE
Over-Commented Block15 hits · 15 pts
SeverityFileLineSnippetContext
LOWfrontend/src/pages/ServersPage.tsx61COMMENT
LOWfrontend/src/pages/ServersPage.tsx81 // only consumer of the 'commit' | 'stale' wording). Edit has no busyCOMMENT
LOWfrontend/src/pages/ServersPage.tsx101 // in flight when the user clicks Duplicate on B (the `duplicatingServer`COMMENT
LOWscripts/build-release-notes.js1import { execFileSync } from 'child_process';COMMENT
LOW.github/workflows/ci.yml61 # steps:COMMENT
LOW.github/workflows/ci.yml81COMMENT
LOW.github/workflows/ci.yml101COMMENT
LOWsrc/clients/openapi.ts141 private oauth2TokenRequest?: Promise<string | undefined>;COMMENT
LOWsrc/types/index.ts581 perSessionClient?: boolean; // Dedicated upstream client per legacy session or explicit modern client stateCOMMENT
LOWsrc/utils/tokenTruncation.ts281 model: string,COMMENT
LOWsrc/cli/call-arguments.ts1import fs from 'node:fs';COMMENT
LOWsrc/services/vectorSearchService.ts181/** Fallback embedding method (used when no API is configured) produces 100-dimensional vectors */COMMENT
LOWsrc/services/vectorSearchService.ts1141 //COMMENT
LOWsrc/services/personalOAuthService.ts41// The declaration, not resolved tokens/client registration, binds a flow to its destination.COMMENT
LOWsrc/services/mcpService.ts2581 // Gone from the configuration while it waited.COMMENT