AI Slop Code Risk Monitor

standardnotes/app

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

Think fearlessly with end-to-end encrypted notes and files. For issues, visit https://standardnotes.com/forum or https://standardnotes.com/help.

1.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for standardnotes/app, a TypeScript project with 6,691 GitHub stars. SynthScan examined 318,801 lines of code across 2662 source files, recording 270 pattern matches distributed across 6 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
6.7K
Stars
TypeScript
Language
318.8K
Lines of Code
2.7K
Files
270
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 3.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.7/100 · LOW

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

Agent Over-Engineering Ratio 3.9/100 · LOW

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

PR Review Velocity Impact 5.2/100 · LOW

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

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 270 distinct pattern matches across 6 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 Identifiers228 hits · 244 pts
SeverityFileLineSnippetContext
LOWpackages/encryption/src/Domain/Split/EncryptionSplit.ts6export function CreateEncryptionSplitWithKeyLookup(CODE
LOWpackages/encryption/src/Domain/Split/EncryptionSplit.ts26export function CreateDecryptionSplitWithKeyLookup(CODE
LOWpackages/encryption/src/Domain/Split/EncryptionSplit.ts46export function FindPayloadInEncryptionSplit(uuid: string, split: KeyedEncryptionSplit): DecryptedPayloadInterface {CODE
LOWpackages/encryption/src/Domain/Split/EncryptionSplit.ts82export function FindPayloadInDecryptionSplit(uuid: string, split: KeyedDecryptionSplit): EncryptedPayloadInterface {CODE
LOW…ges/encryption/src/Domain/Types/EncryptedParameters.ts33export function isErrorDecryptingParameters(CODE
LOW…ges/encryption/src/Domain/Types/EncryptedParameters.ts44export function encryptedInputParametersFromPayload(payload: EncryptedPayloadInterface): EncryptedInputParameters {CODE
LOW…src/Domain/Keys/RootKey/ProtocolVersionForKeyParams.ts5export function ProtocolVersionForKeyParams(response: KeyParamsData | AnyKeyParamsContent): ProtocolVersion {CODE
LOW…yption/src/Domain/Operator/004/V004AlgorithmHelpers.ts3export function doesPayloadRequireSigning(payload: { shared_vault_uuid?: string }) {CODE
LOW…yption/src/Domain/Operator/004/V004AlgorithmHelpers.ts7export function deconstructEncryptedPayloadString(payloadString: string): V004Components {CODE
LOWpackages/web/src/javascripts/FeatureTrunk.ts11export function featureTrunkVaultsEnabled(): boolean {CODE
LOWpackages/web/src/javascripts/FeatureTrunk.ts15export function featureTrunkLocalizationEnabled(): boolean {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts48export function StringDeletePlaceholderAttempt(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts53export function StringArchiveLockedAttempt(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts58export function StringUnarchiveLockedAttempt(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts63export function StringDeleteLockedAttempt(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts73export function StringRestoreLockedAttempt(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts78export function StringPermanentlyDeleteItem(noteTitle: string): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts184export function StringUnsupportedBackupFileVersion(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts190export function StringConfirmAppQuitDuringUpgrade(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts195export function StringConfirmAppQuitDuringPasscodeChange(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts200export function StringConfirmAppQuitDuringPasscodeRemoval(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts205export function StringUpgradeAccountConfirmTitle(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts209export function StringUpgradeAccountConfirmText(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts216export function StringUpgradeAccountConfirmButton(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts220export function StringRemoveOfflineKeyConfirmation(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts224export function StringDeleteAccountConfirmation(): string {CODE
LOW⚡packages/web/src/javascripts/Constants/Strings.ts229export function StringFailedToUpdateUserSetting(): string {CODE
LOWpackages/web/src/javascripts/Constants/Strings.ts106export function StringProtectingNoteWithoutProtectionSources(): string {CODE
LOWpackages/web/src/javascripts/Constants/Strings.ts114export function StringDeleteItemsPermanentlyTitle(): string {CODE
LOWpackages/web/src/javascripts/Constants/Strings.ts130export function StringDeleteMultipleFiles(): string {CODE
LOWpackages/web/src/javascripts/Constants/Strings.ts135export function StringSignOutConfirmation(): string {CODE
LOWpackages/web/src/javascripts/Constants/Strings.ts159export function StringNonMatchingPasscodes(): string {CODE
LOWpackages/web/src/javascripts/Constants/Strings.ts163export function StringNonMatchingPasswords(): string {CODE
LOWpackages/web/src/javascripts/Constants/Strings.ts270export function StringArchiveLockedNotesAttempt(archive: boolean, notesCount = 1): string {CODE
LOWpackages/web/src/javascripts/Constants/Strings.ts285export function StringDeleteLockedNotesAttempt(notesCount = 1): string {CODE
LOW…/web/src/javascripts/Utils/LocalizedSystemViewTitle.ts4export function getLocalizedSystemViewTitle(id: SystemViewId): string | undefined {CODE
LOW…s/web/src/javascripts/Utils/DropdownItemsForEditors.ts18export function getDropdownItemsForAllEditors(application: WebApplicationInterface): EditorOption[] {CODE
LOW…ages/web/src/javascripts/Utils/copyTextToClipboard.tsx1export function fallbackCopyTextToClipboard(text: string) {CODE
LOWpackages/web/src/javascripts/Utils/DateUtils.ts43export function numberOfMonthsBetweenDates(date1: Date, date2: Date, roundUpFractionalMonths = true) {CODE
LOW…rc/javascripts/Utils/KeyboardShortcutCategoryLabels.ts16export function translateKeyboardShortcutCategory(category: KeyboardShortcutCategory): string {CODE
LOWpackages/web/src/javascripts/Utils/Utils.ts148export function destroyAllObjectProperties(object: any): void {CODE
LOW…avascripts/Utils/prepareWebAuthnRegistrationOptions.ts4export function prepareWebAuthnRegistrationOptions(options: Record<string, unknown>): Record<string, unknown> {CODE
LOW…kages/web/src/javascripts/Utils/LocalizedDateFormat.ts4export function capitalizeForSentenceStart(text: string): string {CODE
LOW…kages/web/src/javascripts/Utils/LocalizedDateFormat.ts43export function formatItemDateForSentenceStart(date: Date): string {CODE
LOW…kages/web/src/javascripts/Utils/LocalizedDateFormat.ts47export function formatDateAndTimeForNoteTitle(date: Date, includeTime = true): string {CODE
LOW…kages/web/src/javascripts/Utils/LocalizedDateFormat.ts114export function dateToHoursAndMinutesTimeString(date: Date): string {CODE
LOWpackages/web/src/javascripts/Utils/DateLocale.ts50export function isDateLocalizationEnabled(): boolean {CODE
LOW…tils/Items/Search/isSearchResultAlreadyLinkedToItem.ts3export function isSearchResultAlreadyLinkedToItem(searchResult: LinkableItem, item: LinkableItem): boolean {CODE
LOW…cripts/Utils/Items/Search/isSearchResultExistingTag.ts3export function isSearchResultExistingTag(result: DecryptedItemInterface<ItemContent>, searchQuery: string) {CODE
LOW…scripts/Utils/Items/Search/doesItemMatchSearchQuery.ts4export function getItemTitleInContextOfLinkBubble(item: DecryptedItemInterface<ItemContent>) {CODE
LOW…src/javascripts/Utils/Items/Search/getSearchResults.ts12function resultLimitForSearchQuery(query: string): number {CODE
LOW…scripts/Utils/Items/Icons/getIconAndTintForNoteType.ts5export function getIconAndTintForNoteType(noteType?: NoteType, subtle?: boolean): [IconType, number] {CODE
LOW…scripts/Components/Preferences/Controller/MenuItems.ts8export function buildPreferencesMenuItems(enableUnfinishedFeatures: boolean): PreferencesMenuItem[] {CODE
LOW…ts/Preferences/Panes/HomeServer/HomeServerSettings.tsx141 async function updateHomeServerDataLocation() {CODE
LOW…ts/Preferences/Panes/HomeServer/HomeServerSettings.tsx268 function isTextareaScrolledToBottom(textarea: HTMLTextAreaElement) {CODE
LOW…ponents/Preferences/Panes/WhatsNew/getSectionItems.tsx5function removeAnythingInParentheses(line: string): string {CODE
LOW…ripts/Components/SmartViewBuilder/PredicateKeypaths.ts26export function getPredicateKeypathLabels(): { [k in PredicateKeypath]: string } {CODE
LOW…ponents/ContentListView/Types/AbstractListItemProps.ts26export function doListItemPropsMeritRerender(CODE
LOW…ponents/ContentListView/Types/AbstractListItemProps.ts57function doesTagsChangeMeritRerender(previous: SNTag[], next: SNTag[]): boolean {CODE
LOW…ponents/ContentListView/Types/AbstractListItemProps.ts90function doesItemChangeMeritRerender(previous: ListableContentItem, next: ListableContentItem): boolean {CODE
168 more matches not shown…
Hallucination Indicators7 hits · 85 pts
SeverityFileLineSnippetContext
CRITICAL⚡packages/snjs/mocha/item_manager.test.js85 expect(application.items.collection.referenceMap.directMap.get(tag.uuid)).to.eql([note.uuid])CODE
CRITICAL⚡packages/snjs/mocha/item_manager.test.js92 expect(application.items.collection.referenceMap.inverseMap.get(note.uuid)).to.eql([tag.uuid])CODE
CRITICAL⚡packages/snjs/mocha/item_manager.test.js100 expect(application.items.collection.referenceMap.inverseMap.get(note.uuid)).to.eql([tag.uuid])CODE
CRITICALpackages/snjs/mocha/mutator_service.test.js77 expect(application.items.collection.referenceMap.directMap.get(tag.uuid)).to.eql([])CODE
CRITICALpackages/snjs/mocha/mutator_service.test.js78 expect(application.items.collection.referenceMap.inverseMap.get(note.uuid).length).to.equal(0)CODE
CRITICALpackages/snjs/mocha/mutator_service.test.js97 expect(application.items.collection.referenceMap.directMap.get(tag.uuid)).to.eql([])CODE
CRITICALpackages/snjs/mocha/mutator_service.test.js98 expect(application.items.collection.referenceMap.inverseMap.get(note.uuid)).to.eql([])CODE
Fake / Example Data26 hits · 26 pts
SeverityFileLineSnippetContext
LOW…t/AegisConverter/AegisToAuthenticatorConverter.spec.ts14 account: 'test@test.com',CODE
LOW…t/AegisConverter/AegisToAuthenticatorConverter.spec.ts20 account: 'test@test.com',CODE
LOW…ages/ui-services/src/Import/AegisConverter/testData.ts13 name: 'test@test.com',CODE
LOW…ages/ui-services/src/Import/AegisConverter/testData.ts27 name: 'test@test.com',CODE
LOW…s/ui-services/src/Import/EvernoteConverter/testData.ts25<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd"><en-note><div>Lorem ipsum dolor sit amet, consectetur aCODE
LOW…s/ui-services/src/Import/EvernoteConverter/testData.ts25<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd"><en-note><div>Lorem ipsum dolor sit amet, consectetur aCODE
LOW…src/Import/EvernoteConverter/EvernoteConverter.spec.ts84 expect((successful?.[2] as SNNote).content.text).toBe('Lorem ipsum dolor sit amet, consectetur adipiscing elit.')CODE
LOW…src/Import/EvernoteConverter/EvernoteConverter.spec.ts84 expect((successful?.[2] as SNNote).content.text).toBe('Lorem ipsum dolor sit amet, consectetur adipiscing elit.')CODE
LOW…src/Import/EvernoteConverter/EvernoteConverter.spec.ts108 '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>',CODE
LOW…src/Import/EvernoteConverter/EvernoteConverter.spec.ts108 '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>',CODE
LOW…Import/GoogleKeepConverter/GoogleKeepConverter.spec.ts76 expect(result?.content.text).toBe('Lorem ipsum dolor sit amet, consectetur adipiscing elit.')CODE
LOW…Import/GoogleKeepConverter/GoogleKeepConverter.spec.ts76 expect(result?.content.text).toBe('Lorem ipsum dolor sit amet, consectetur adipiscing elit.')CODE
LOW…ui-services/src/Import/GoogleKeepConverter/testData.ts308<div class="content">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>CODE
LOW…ui-services/src/Import/GoogleKeepConverter/testData.ts308<div class="content">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>CODE
LOWpackages/snjs/mocha/003.test.js57 const identifier = 'foo@bar.com'CODE
LOWpackages/snjs/mocha/session.test.js259 accessToken: 'this-is-a-fake-token-1234',CODE
LOWpackages/snjs/mocha/session.test.js260 refreshToken: 'this-is-a-fake-token-1234',CODE
LOWpackages/snjs/mocha/session.test.js349 accessToken: 'this-is-a-fake-token-1234',CODE
LOWpackages/snjs/mocha/session.test.js350 refreshToken: 'this-is-a-fake-token-1234',CODE
LOWpackages/snjs/mocha/session.test.js450 refreshToken: 'this-is-a-fake-token-1234',CODE
LOWpackages/snjs/mocha/004.test.js55 const identifier = 'foo@bar.com'CODE
LOW…ckages/snjs/mocha/model_tests/notes_smart_tags.test.js7 const BASE = 'Lorem ipsum dolor sit amet. 'CODE
LOW…ckages/snjs/mocha/model_tests/notes_smart_tags.test.js7 const BASE = 'Lorem ipsum dolor sit amet. 'CODE
LOWpackages/snjs/mocha/vaults/contacts.test.js30 name: 'John Doe',CODE
LOWpackages/snjs/mocha/vaults/contacts.test.js37 expect(contact.name).to.equal('John Doe')CODE
LOWpackages/snjs/mocha/lib/Collaboration.js22 name: 'John Doe',CODE
Decorative Section Separators4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUM…es/mobile/.devcontainer/library-scripts/node-debian.sh2#-------------------------------------------------------------------------------------------------------------COMMENT
MEDIUM…es/mobile/.devcontainer/library-scripts/node-debian.sh5#-------------------------------------------------------------------------------------------------------------COMMENT
MEDIUM…/mobile/.devcontainer/library-scripts/common-debian.sh2#-------------------------------------------------------------------------------------------------------------COMMENT
MEDIUM…/mobile/.devcontainer/library-scripts/common-debian.sh5#-------------------------------------------------------------------------------------------------------------COMMENT
Over-Commented Block4 hits · 4 pts
SeverityFileLineSnippetContext
LOWpackages/web/src/robots.txt1# User-agent: *COMMENT
LOWpackages/mobile/ios/StandardNotes-Bridging-Header.h1#import <React/RCTBridgeModule.h>COMMENT
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW.github/workflows/codeql-analysis.yml61 # ✏️ If the Autobuild fails above, remove it and uncomment the following three linesCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…kages/desktop/app/javascripts/Main/ExtensionsServer.ts48async function handleRequest(request: IncomingMessage, response: ServerResponse) {CODE