AI Slop Code Risk Monitor

heyform/heyform

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

Open-Source Form Builder

3.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for heyform/heyform, a TypeScript project with 9,057 GitHub stars. SynthScan examined 164,067 lines of code across 1015 source files, recording 460 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 3.3 (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.

3.3
Adjusted Signal
3.3
Raw Pattern Score
100%
Time Factor
2026-11-01
Last Push
9.1K
Stars
TypeScript
Language
164.1K
Lines of Code
1.0K
Files
460
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 9.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 3.0/100 · LOW

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

Agent Over-Engineering Ratio 12.2/100 · LOW

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

PR Review Velocity Impact 14.9/100 · LOW

Which changes need focused human review? 460 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 0HIGH 1MEDIUM 32LOW 427

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 460 distinct pattern matches across 5 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 Identifiers333 hits · 331 pts
SeverityFileLineSnippetContext
LOWpackages/webapp/test/file-upload.test.ts10function testNormalizesCurrentAndLegacyFileValues() {CODE
LOWpackages/webapp/test/file-upload.test.ts49function testSupportsSelfHostedUrlsAndRejectsUnsafeProtocols() {CODE
LOWpackages/webapp/test/file-upload.test.ts73function testDashboardOnlyLinksToTrustedUploadOrigins() {CODE
LOWpackages/webapp/test/file-upload.test.ts106function testOnlyTrustedStripeReceiptsAreClickable() {CODE
LOWpackages/webapp/src/utils/file-upload.ts36export function isTrustedStripeReceiptUrl(value: unknown): value is string {CODE
LOW…s/webapp/src/pages/form/Settings/EmailNotification.tsx18export default function FormSettingsEmailNotification() {CODE
LOW…bapp/src/pages/form/Settings/notificationRecipients.ts43export function parseNotificationRecipients(value?: string): string[] {CODE
LOW…bapp/src/pages/form/Settings/notificationRecipients.ts57export function validateNotificationRecipients(CODE
LOWpackages/webapp/src/pages/form/Integrations/utils.ts6export function getIntegrationDescription(t: TFunction, app: IntegratedAppType) {CODE
LOWpackages/webapp/src/pages/form/Integrations/utils.ts52export function getIntegrationDefaultConfig(app: IntegratedAppType) {CODE
LOWpackages/webapp/src/pages/form/Integrations/utils.ts61export function getIntegrationAuthorizeUrl(formId: string, appId: string) {CODE
LOWpackages/webapp/src/pages/form/Builder/utils/field.ts17export function removeInvalidNextFieldIds(rawFields: FormFieldType[]): FormFieldType[] {CODE
LOW…kages/webapp/src/pages/form/Builder/RichText/index.tsx134 function handleToolbarSelectionChange() {CODE
LOW…ckages/webapp/src/pages/form/Builder/RichText/utils.ts95export function getTextPrecedingAtTrigger(CODE
LOW…app/src/pages/workspace/Settings/ConnectedAccounts.tsx81export default function WorkspaceConnectedAccounts() {CODE
LOWpackages/webapp/src/consts/env.ts57export function getVerifyEmailResendCooldownSeconds() {CODE
LOWpackages/server/test/abuse-limits.test.ts7function testAbuseInputsAreNormalizedAndDeduplicated() {CODE
LOWpackages/server/test/abuse-limits.test.ts21async function testTranslationJobsUseUserAndTeamBudgetsAndCanRetryAfterFailure() {CODE
LOWpackages/server/test/redis-config.test.ts7function testRedisClientsShareTlsConfiguration() {CODE
LOWpackages/server/test/redis-config.test.ts26function testRedisTlsJsonConfiguration() {CODE
LOWpackages/server/test/permission.guard.test.ts7function createGraphqlExecutionContext({CODE
LOWpackages/server/test/permission.guard.test.ts27function createHttpExecutionContext({CODE
LOWpackages/server/test/permission.guard.test.ts81async function testCollaboratorCanPassTeamGuard() {CODE
LOWpackages/server/test/permission.guard.test.ts156async function testHttpFormGuardReadsRequestQuery() {CODE
LOWpackages/server/test/cors.test.ts55function testBuildsUniqueAllowlist() {CODE
LOWpackages/server/test/cors.test.ts67function testAllowsOnlyConfiguredOrigins() {CODE
LOWpackages/server/test/cors.test.ts76async function testOriginCheckerCallback() {CODE
LOWpackages/server/test/cors.test.ts103async function testCorsMiddlewareDoesNotReflectDeniedOrigins() {CODE
LOWpackages/server/test/ai-json.test.ts165function testJsonRepairDoesNotValidateFieldOrRichTextSchemas() {CODE
LOWpackages/server/test/exception-security.test.ts36function testHttpErrorsAlwaysReceiveAResponse() {CODE
LOWpackages/server/test/exception-security.test.ts60function testGraphqlFilterMasksUnexpectedErrors() {CODE
LOWpackages/server/test/exception-security.test.ts81async function testGraphqlFormatterOnlyExposesClientSafeMessages() {CODE
LOWpackages/server/test/integration-auth.test.ts429function testDefineAppValidatesAuthAndQueue() {CODE
LOWpackages/server/test/integration-auth.test.ts502async function testAddQueueAppliesAppOptions() {CODE
LOWpackages/server/test/integration-auth.test.ts548async function testHidesAppsWithoutProviderCredentials() {CODE
LOWpackages/server/test/integration-auth.test.ts579async function testApiKeyIsStoredEncryptedAndNeverReturned() {CODE
LOWpackages/server/test/integration-auth.test.ts640async function testMissingApiKeyFailsWithoutRetry() {CODE
LOWpackages/server/test/integration-auth.test.ts649async function testUnreadableApiKeyNeedsANewKey() {CODE
LOWpackages/server/test/integration-auth.test.ts746async function testStateIsBoundToUserAndSingleUse() {CODE
LOWpackages/server/test/integration-auth.test.ts794async function testConnectingCreatesATeamConnection() {CODE
LOWpackages/server/test/integration-auth.test.ts867async function testRejectsConnectionsThatCantBeUsed() {CODE
LOWpackages/server/test/integration-auth.test.ts911async function testSameAccountSharesOneConnection() {CODE
LOWpackages/server/test/integration-auth.test.ts985async function testReconnectingResumesEveryIntegrationUsingIt() {CODE
LOWpackages/server/test/integration-auth.test.ts1031async function testSettingsPickOneOfTheTeamsAccounts() {CODE
LOWpackages/server/test/integration-auth.test.ts1096async function testPickingAnAccountThatNeedsReconnecting() {CODE
LOWpackages/server/test/integration-auth.test.ts1152async function testListsTheTeamsAccountsForAnApp() {CODE
LOWpackages/server/test/integration-auth.test.ts1240async function testTeamSettingsListConnectedAccounts() {CODE
LOWpackages/server/test/integration-auth.test.ts1304async function testDeletingAnIntegrationKeepsTheAccount() {CODE
LOWpackages/server/test/integration-auth.test.ts1335async function testDisconnectingRevokesAndHoldsIntegrations() {CODE
LOWpackages/server/test/integration-auth.test.ts1373async function testOnlyTheConnectorOrOwnerCanDisconnect() {CODE
LOWpackages/server/test/integration-auth.test.ts1407async function testRevokesAnAccessTokenWithoutRefreshToken() {CODE
LOWpackages/server/test/integration-auth.test.ts1421async function testFailedRevocationNeverBlocksDisconnecting() {CODE
LOWpackages/server/test/integration-auth.test.ts1458async function testNothingToRevokeStillDisconnects() {CODE
LOWpackages/server/test/integration-auth.test.ts1486async function testAccountUsedByAnotherWorkspaceIsNotRevoked() {CODE
LOWpackages/server/test/integration-auth.test.ts1527async function testConcurrentDisconnectsStillRevokeTheGrant() {CODE
LOWpackages/server/test/integration-auth.test.ts1552async function testTurningOnResendsWaitingSubmissions() {CODE
LOWpackages/server/test/integration-auth.test.ts1573async function testValidTokenIsUsedWithoutRefresh() {CODE
LOWpackages/server/test/integration-auth.test.ts1590async function testExpiredTokenIsRefreshed() {CODE
LOWpackages/server/test/integration-auth.test.ts1630async function testRefreshMovesTokensToTheCurrentKey() {CODE
LOWpackages/server/test/integration-auth.test.ts1657async function testOneRefreshServesEveryIntegration() {CODE
273 more matches not shown…
Fake / Example Data93 hits · 99 pts
SeverityFileLineSnippetContext
LOWpackages/webapp/src/locales/ja.json590 "placeholder": "フォームとヘルプドキュメントを検索する",CODE
LOWpackages/webapp/src/locales/ja.json920 "placeholder": "例: 100xxxxxxxxxxxxx",CODE
LOWpackages/webapp/src/locales/ja.json926 "placeholder": "例: UA-XXXXX-Y",CODE
LOWpackages/webapp/src/locales/ja.json979 "placeholder": "オーディエンスを選択してください"CODE
LOWpackages/webapp/src/locales/ja.json1140 "placeholder": "ここにリダイレクトURLを入力してください。例:https://example.com",CODE
LOWpackages/webapp/src/locales/ja.json1207 "placeholder": "言語を選択"CODE
LOWpackages/webapp/src/locales/ja.json1223 "placeholder": "name@example.com",CODE
LOWpackages/webapp/src/locales/de.json590 "placeholder": "Suche nach Formularen und Hilfedokumenten",CODE
LOWpackages/webapp/src/locales/de.json920 "placeholder": "z.B. 100xxxxxxxxxxxxx",CODE
LOWpackages/webapp/src/locales/de.json926 "placeholder": "z.B. UA-XXXXX-Y",CODE
LOWpackages/webapp/src/locales/de.json979 "placeholder": "Wählen Sie ein Publikum aus"CODE
LOWpackages/webapp/src/locales/de.json1140 "placeholder": "Geben Sie hier die Weiterleitungs-URL ein, z.B. https://example.com",CODE
LOWpackages/webapp/src/locales/de.json1211 "placeholder": "Sprachen auswählen"CODE
LOWpackages/webapp/src/locales/de.json1227 "placeholder": "name@example.com",CODE
LOWpackages/webapp/src/locales/pl.json590 "placeholder": "Szukaj formularzy i dokumentów pomocy",CODE
LOWpackages/webapp/src/locales/pl.json920 "placeholder": "np. 100xxxxxxxxxxxxx",CODE
LOWpackages/webapp/src/locales/pl.json926 "placeholder": "np. UA-XXXXX-Y",CODE
LOWpackages/webapp/src/locales/pl.json979 "placeholder": "Wybierz odbiorców"CODE
LOWpackages/webapp/src/locales/pl.json1140 "placeholder": "Wprowadź tutaj URL przekierowania, np. https://example.com",CODE
LOWpackages/webapp/src/locales/pl.json1207 "placeholder": "Wybierz języki"CODE
LOWpackages/webapp/src/locales/pl.json1223 "placeholder": "name@example.com",CODE
LOWpackages/webapp/src/locales/zh-cn.json590 "placeholder": "搜索表单和帮助文档",CODE
LOWpackages/webapp/src/locales/zh-cn.json999 "placeholder": "例如 100xxxxxxxxxxxxx",CODE
LOWpackages/webapp/src/locales/zh-cn.json1005 "placeholder": "例如 UA-XXXXX-Y",CODE
LOWpackages/webapp/src/locales/zh-cn.json1058 "placeholder": "选择一个受众群体"CODE
LOWpackages/webapp/src/locales/zh-cn.json1172 "placeholder": "https://docs.google.com/spreadsheets/d/…"CODE
LOWpackages/webapp/src/locales/zh-cn.json1177 "placeholder": "第一个工作表"CODE
LOWpackages/webapp/src/locales/zh-cn.json1266 "placeholder": "在此处输入重定向 URL,例如:https://example.com",CODE
LOWpackages/webapp/src/locales/zh-cn.json1337 "placeholder": "选择语言"CODE
LOWpackages/webapp/src/locales/zh-cn.json1353 "placeholder": "name@example.com",CODE
LOWpackages/webapp/src/locales/en.json590 "placeholder": "Search for forms and help documents",CODE
LOWpackages/webapp/src/locales/en.json1001 "placeholder": "e.g. 100xxxxxxxxxxxxx",CODE
LOWpackages/webapp/src/locales/en.json1007 "placeholder": "e.g. UA-XXXXX-Y",CODE
LOWpackages/webapp/src/locales/en.json1060 "placeholder": "Select an audience"CODE
LOWpackages/webapp/src/locales/en.json1175 "placeholder": "https://docs.google.com/spreadsheets/d/…"CODE
LOWpackages/webapp/src/locales/en.json1180 "placeholder": "First tab"CODE
LOWpackages/webapp/src/locales/en.json1269 "placeholder": "Enter the redirect URL here, e.g., https://example.com",CODE
LOWpackages/webapp/src/locales/en.json1340 "placeholder": "Select languages"CODE
LOWpackages/webapp/src/locales/en.json1356 "placeholder": "name@example.com",CODE
LOWpackages/webapp/src/locales/it.json590 "placeholder": "Cerca moduli e documenti di aiuto",CODE
LOWpackages/webapp/src/locales/it.json982 "placeholder": "es. 100xxxxxxxxxxxxx",CODE
LOWpackages/webapp/src/locales/it.json988 "placeholder": "es. UA-XXXXX-Y",CODE
LOWpackages/webapp/src/locales/it.json1041 "placeholder": "Seleziona un pubblico"CODE
LOWpackages/webapp/src/locales/it.json1202 "placeholder": "Inserisci l'URL di reindirizzamento qui, es. https://esempio.com",CODE
LOWpackages/webapp/src/locales/it.json1269 "placeholder": "Seleziona lingue"CODE
LOWpackages/webapp/src/locales/it.json1285 "placeholder": "name@example.com",CODE
LOWpackages/webapp/src/locales/fr.json590 "placeholder": "Rechercher des formulaires et des documents d'aide",CODE
LOWpackages/webapp/src/locales/fr.json924 "placeholder": "ex. 100xxxxxxxxxxxxx",CODE
LOWpackages/webapp/src/locales/fr.json930 "placeholder": "ex. UA-XXXXX-Y",CODE
LOWpackages/webapp/src/locales/fr.json983 "placeholder": "Sélectionnez un public"CODE
LOWpackages/webapp/src/locales/fr.json1144 "placeholder": "Entrez l'URL de redirection ici, par exemple, https://example.com",CODE
LOWpackages/webapp/src/locales/fr.json1211 "placeholder": "Sélectionnez des langues"CODE
LOWpackages/webapp/src/locales/fr.json1227 "placeholder": "name@example.com",CODE
LOWpackages/webapp/src/locales/pt-br.json590 "placeholder": "Pesquise formulários e documentos de ajuda",CODE
LOWpackages/webapp/src/locales/pt-br.json982 "placeholder": "por exemplo 100xxxxxxxxxxxx",CODE
LOWpackages/webapp/src/locales/pt-br.json988 "placeholder": "por exemplo UA-XXXXX-Y",CODE
LOWpackages/webapp/src/locales/pt-br.json1041 "placeholder": "Selecione um público"CODE
LOWpackages/webapp/src/locales/pt-br.json1202 "placeholder": "Insira a URL de redirecionamento aqui, por exemplo, https://example.com",CODE
LOWpackages/webapp/src/locales/pt-br.json1269 "placeholder": "Selecione idiomas"CODE
LOWpackages/webapp/src/locales/pt-br.json1285 "placeholder": "name@example.com",CODE
33 more matches not shown…
Decorative Section Separators32 hits · 96 pts
SeverityFileLineSnippetContext
MEDIUMpackages/server/test/e2e/auth-flows.e2e.test.ts28 // ── updateUserPassword ───────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/auth-flows.e2e.test.ts71 // ── sendResetPasswordEmail + resetPassword ───────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/auth-flows.e2e.test.ts129 // ── Membership-revocation edge ───────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/permission-matrix.e2e.test.ts201 // ── 1. Truly public — anonymous + everyone ───────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/permission-matrix.e2e.test.ts227 // ── 2. Authenticated, no team context ────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/permission-matrix.e2e.test.ts270 // ── 3. Team-scoped reads — team members only ─────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/input-validation.e2e.test.ts46 // ── Sign-up & auth ───────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/input-validation.e2e.test.ts71 // ── Team / Workspace ─────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/input-validation.e2e.test.ts103 // ── Project ──────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/input-validation.e2e.test.ts118 // ── Form ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/input-validation.e2e.test.ts154 // ── Submission ───────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/team-flow.e2e.test.ts74 // ── Setup phase: one signup per role ──────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/team-flow.e2e.test.ts145 // ── Verification phase: admin sees roles assigned correctly ───────────────COMMENT
MEDIUMpackages/server/test/e2e/team-flow.e2e.test.ts171 // ── Project + form lifecycle ──────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/team-flow.e2e.test.ts344 // ── Permission probes for non-admin roles ─────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/team-flow.e2e.test.ts393 // ── Delete cascade: form → project → team ─────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/stateful-edges.e2e.test.ts35 // ── Helpers in-suite ──────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/stateful-edges.e2e.test.ts73 // ── Optimistic-locking / version edges ───────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/stateful-edges.e2e.test.ts91 // ── Trash lifecycle ──────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/stateful-edges.e2e.test.ts142 // ── Cross-team data leakage ──────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/stateful-edges.e2e.test.ts163 // ── Invite / join edges ──────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/stateful-edges.e2e.test.ts211 // ── Team membership / ownership edges ────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/stateful-edges.e2e.test.ts237 // ── Public form / submission edges ───────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/rate-limit.e2e.test.ts21 // ── Login attempt lockout (5 wrong / 15-min window) ──────────────────────COMMENT
MEDIUMpackages/server/test/e2e/rate-limit.e2e.test.ts50 // ── sendResetPasswordEmail cooldown (60s per user) ───────────────────────COMMENT
MEDIUMpackages/server/test/e2e/helpers/gql.ts9// ── Auth ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/helpers/gql.ts22// ── User ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/helpers/gql.ts58// ── Team / Workspace ────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/helpers/gql.ts195// ── Project ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/helpers/gql.ts238// ── Form ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/helpers/gql.ts458// ── Submission ──────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/server/test/e2e/helpers/gql.ts484// ── Catalog ─────────────────────────────────────────────────────────────────COMMENT
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHpackages/server/src/utils/ai-fields.ts14// Invalid optional scalars are discarded, without coercing AI-generated values.COMMENT
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOWpackages/server/src/apps/oauth2-providers.ts1// OAuth2 providers that `auth: { type: 'oauth2', provider }` can name.COMMENT