AI Slop Code Risk Monitor

usememos/memos

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

Memos is an open-source, self-hosted note-taking app that brings your everyday thoughts together in a personal timeline. Your data stays yours, and you choose what to keep private or share.

0.4 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for usememos/memos, a Go project with 64,195 GitHub stars. SynthScan examined 245,953 lines of code across 1251 source files, recording 108 pattern matches distributed across 3 syntactic categories. The legacy adjusted pattern signal is 0.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.

0.4
Adjusted Signal
0.4
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
64.2K
Stars
Go
Language
246.0K
Lines of Code
1.3K
Files
108
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 1.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.9/100 · LOW

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

Agent Over-Engineering Ratio 0.7/100 · LOW

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

PR Review Velocity Impact 2.2/100 · LOW

Which changes need focused human review? 108 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 0MEDIUM 0LOW 108

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 108 distinct pattern matches across 3 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.

Fake / Example Data42 hits · 44 pts
SeverityFileLineSnippetContext
LOWcore/configuration/configuration_test.go20 LookupEnv: func(string) (string, bool) { return "placeholder", true },CODE
LOWcore/configuration/plan_test.go184 {Id: "openai", Title: "OpenAI", Type: storepb.AIProviderType_OPENAI, Endpoint: instancesetting.DefaultOpenAIEndpoint,CODE
LOWcore/configuration/plan_test.go384 reader.users = []*store.User{{ID: 1, Username: "admin", Role: store.RoleAdmin, Nickname: "Set by the user", Email: "admCODE
LOWweb/tests/quick-find-navigation.test.tsx213 expect(input).toHaveAttribute("placeholder", "common.search Product · common.memos");CODE
LOWweb/tests/quick-find-navigation.test.tsx227 expect(input).toHaveAttribute("placeholder", "common.search Product (123e4567…) · common.memos");CODE
LOWweb/tests/usage-limits-settings.test.tsx215 expect(screen.getByRole("textbox", { name: "Largest file (MiB)" })).toHaveAttribute("placeholder", "Unlimited");CODE
LOWmarkdown/parser/gfm_email_test.go30 {name: "first email wins", source: "foo@bar.com@baz.example", expected: []GFMEmailMatch{emailMatch(0, 11, "foo@bar.comCODE
LOWmarkdown/parser/gfm_email_test.go34 expected: []GFMEmailMatch{emailMatch(0, 11, "foo@bar.com"), emailMatch(11, 23, "+abc@def.com")},CODE
LOWinternal/email/message_test.go19 To: []string{"user@example.com"},CODE
LOWinternal/email/message_test.go37 To: []string{"user@example.com"},CODE
LOWinternal/email/message_test.go46 To: []string{"user@example.com"},CODE
LOWinternal/email/message_test.go76 To: []string{"user@example.com"},CODE
LOWinternal/email/message_test.go104 To: []string{"user@example.com"},CODE
LOWinternal/email/message_test.go176 To: []string{"user@example.com"},CODE
LOWinternal/email/message_test.go204 To: []string{"user@example.com"},CODE
LOWinternal/email/message_test.go238 msg := Message{To: []string{"user@example.com"}, Subject: "Test", Body: "Test"}CODE
LOWinternal/email/message_test.go258 msg := Message{To: []string{"user@example.com"}, Subject: "Test", Body: "Test"}CODE
LOWinternal/email/README.md43 To: []string{"user@example.com"},CODE
LOWinternal/email/README.md152 To: []string{"user@example.com"},CODE
LOWinternal/email/README.md179 Bcc: []string{"admin@example.com"},CODE
LOWinternal/email/doc.go55// To: []string{"user@example.com"},COMMENT
LOWinternal/email/doc.go74// To: []string{"user@example.com"},COMMENT
LOWinternal/email/config_test.go20 SMTPUsername: "user@example.com",CODE
LOWinternal/email/config_test.go31 SMTPUsername: "user@example.com",CODE
LOWinternal/email/config_test.go42 SMTPUsername: "user@example.com",CODE
LOWinternal/email/config_test.go53 SMTPUsername: "user@example.com",CODE
LOWinternal/email/client_test.go13 SMTPUsername: "user@example.com",CODE
LOWprovider/idp/oauth2/oauth2_test.go120 testName = "John Doe"CODE
LOWserver/api/sse_service_test.go459 Username: "user", Role: store.RoleAdmin, Email: "user@example.com",CODE
LOWserver/api/sse_service_test.go499 Username: "user", Role: store.RoleAdmin, Email: "user@example.com",CODE
LOWserver/api/sse_service_test.go529 Username: "user", Role: store.RoleAdmin, Email: "user@example.com",CODE
LOWserver/api/sse_service_test.go666 Username: "user", Role: store.RoleAdmin, Email: "user@example.com",CODE
LOWserver/api/sse_service_test.go706 Username: "user", Role: store.RoleAdmin, Email: "user@example.com",CODE
LOWserver/api/test/user_service_email_username_test.go189 Username: "admin@example.com",CODE
LOWdocs/design/memos-export-format.md139 "location": { "placeholder": "Office", "latitude": 52.52, "longitude": 13.405 },CODE
LOWdocs/design/memo-export/1.0/memo.schema.json34 "placeholder": { "type": "string" },CODE
LOWfilter/engine_test.go640 {2, `{"location":{"placeholder":"Tokyo","latitude":35.6,"longitude":139.7}}`},CODE
LOWstore/seed/sqlite/01__dump.sql87INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(3,'goldenhour0001'CODE
LOW⚡store/seed/sqlite/01__dump.sql120INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(12,'bobnighttrain1CODE
LOW⚡store/seed/sqlite/01__dump.sql123INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(13,'bobbucketlist1CODE
LOW⚡store/seed/sqlite/01__dump.sql129INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(15,'johnnyreading0CODE
LOWstore/test/configuration_state_test.go177 require.Equal(t, "admin@example.com", created.Email, "the email is normalized as the store's writes do")CODE
Hyper-Verbose Identifiers34 hits · 34 pts
SeverityFileLineSnippetContext
LOWweb/src/connect.ts102function shouldHandleUnauthenticatedRetry(error: unknown, isRetryAttempt: boolean): boolean {CODE
LOWweb/src/contexts/MentionResolutionContext.tsx58export function useResolvedMentionUsernames(content: string) {CODE
LOWweb/src/utils/redirect-safety.ts90export function shouldGatePrivateInstance(params: { isPrivateInstance: boolean; isAuthenticated: boolean; pathname: striCODE
LOWweb/src/utils/media-item.ts53export function buildAttachmentVisualItems(attachments: Attachment[]): AttachmentVisualItem[] {CODE
LOWweb/src/utils/media-item.ts104export function countLogicalAttachmentItems(attachments: Attachment[]): number {CODE
LOWweb/src/utils/media-item.ts115function buildSingleAttachmentItem(attachment: Attachment): AttachmentVisualItem {CODE
LOWweb/src/utils/markdown-manipulation.ts117export function createUniqueSlugGenerator(reservedSlugs: Iterable<string> = []): (baseSlug: string) => string {CODE
LOWweb/src/utils/tag-grammar.ts96function isNonCombiningXIDContinuationAt(source: string, index: number, limit: number): boolean {CODE
LOWweb/src/components/CreateIdentityProviderDialog.tsx183function buildDialogStateFromTemplate(templateName: string) {CODE
LOWweb/src/components/CreateIdentityProviderDialog.tsx202function buildDialogStateFromProvider(identityProvider: IdentityProvider) {CODE
LOWweb/src/components/CreateIdentityProviderDialog.tsx263function CreateIdentityProviderDialog({ open, onOpenChange, identityProvider, onSuccess }: Props) {CODE
LOWweb/src/components/ChangeMemberPasswordDialog.tsx19function ChangeMemberPasswordDialog({ open, onOpenChange, user, onSuccess }: Props) {CODE
LOWweb/src/components/MemoDisplaySettingMenu.tsx44function MemoDisplaySettingsContent() {CODE
LOWweb/src/components/UpdateCustomizedProfileDialog.tsx26function UpdateCustomizedProfileDialog({ open, onOpenChange, onSuccess }: Props) {CODE
LOWweb/src/components/Settings/sso-display.ts19export function getIdentityProviderTypeLabel(type: IdentityProvider_Type): string {CODE
LOWweb/src/components/Settings/sso-display.ts60export function getIdentifierFilterSummary(filter: string, t: Translate): string {CODE
LOWweb/src/components/PagedMemoList/PagedMemoList.tsx59function useAutoFetchWhenNotScrollable({CODE
LOWweb/src/components/ColumnGrid/ColumnGridContext.tsx30export function ColumnGridUntrappedProvider({ children }: { children: ReactNode }) {CODE
LOWweb/src/components/MemoEditor/edit/types/attachment.ts87function visualItemToAttachmentItem(item: ReturnType<typeof buildAttachmentVisualItems>[number]): AttachmentItem {CODE
LOW…nents/MemoEditor/edit/utils/deriveDefaultCreateTime.ts10export function deriveDefaultCreateTimeFromFilters(filters: MemoFilter[], now: Date = new Date()): Date | undefined {CODE
LOW…nents/MemoEditor/edit/utils/deriveDefaultCreateTime.ts20export function deriveDefaultCreateTimeFromDate(value: string, now: Date = new Date()): Date | undefined {CODE
LOW…c/components/MemoEditor/edit/hooks/useAudioRecorder.ts16function getSupportedAudioMimeType(): string | undefined {CODE
LOWweb/src/hooks/useAttachmentQueries.ts51export function useBatchDeleteAttachments() {CODE
LOWweb/src/hooks/useMemoQueries.ts160export function findMemoInCollectionQueries(queryClient: QueryClient, name: string, freshOnly = false): Memo | undefinedCODE
LOWweb/src/hooks/useMemoQueries.ts194function patchMemoInCollectionQueries(queryClient: QueryClient, update: MemoPatch) {CODE
LOWweb/src/hooks/useLiveMemoRefresh.ts480function invalidateLiveMemoQueries(queryClient: ReturnType<typeof useQueryClient>) {CODE
LOWweb/src/hooks/useAttachmentLibrary.ts245export function useAttachmentLibraryStats(filter?: string) {CODE
LOWweb/src/hooks/useAttachmentLibrary.ts253export function useUnusedAttachmentLibrary(locale: string, filter?: string, enabled = true) {CODE
LOWweb/src/hooks/useUserQueries.ts286export function useUpdateUserGeneralSetting(currentUserName?: string) {CODE
LOWweb/src/hooks/useUserQueries.ts317export function useUpdateUserEditorSetting(currentUserName?: string) {CODE
LOWweb/src/hooks/useSpaceQueries.ts328export function useDeclineSpaceInvitation(viewerName: string) {CODE
LOWweb/src/lib/context-suggestions.ts83export function getContextSuggestionCandidates(filters: MemoFilter[], viewFilter?: string): MemoSuggestion[] {CODE
LOWweb/src/lib/suggestion-expression.ts92export function parseSuggestionExpression(source: string): SuggestionExpression | undefined {CODE
LOWweb/src/lib/tag-suggestions.ts45export function getTagSuggestionCandidates(filters: MemoFilter[], viewFilter?: string): { tag: string; source: SuggestioCODE
Over-Commented Block32 hits · 32 pts
SeverityFileLineSnippetContext
LOWcore/memoexport/doc.go1// Package memoexport implements the Memos Export Format: a ZIP container thatCOMMENT
LOWweb/src/components/ui/popup.ts1// Shared enter/exit motion for popup surfaces (dropdown menu, popover, tooltip), driven byCOMMENT
LOWmarkdown/doc.go1// Package markdown is the markdown engine: parsing memo content into the ASTCOMMENT
LOWinternal/ratelimit/ratelimit.go81}COMMENT
LOWinternal/profile/profile.go21 // Port is the binding port for serverCOMMENT
LOWinternal/email/doc.go1// Package email provides SMTP email sending functionality for self-hosted Memos instances.COMMENT
LOWinternal/email/doc.go21// # Common SMTP SettingsCOMMENT
LOWinternal/email/doc.go41// - UseTLS: trueCOMMENT
LOWinternal/email/doc.go61// err := email.Send(config, message)COMMENT
LOWinternal/email/doc.go81//COMMENT
LOWprovider/ai/audio/webm.go21const (COMMENT
LOWserver/doc.go1// Package server is the HTTP process: it boots the net/http server, mounts everyCOMMENT
LOWserver/test/startup_test.go41COMMENT
LOWserver/auth/token.go81// RefreshTokenClaims contains claims for long-lived refresh tokens.COMMENT
LOWserver/api/auth_service_session.go101// This endpoint implements refresh token rotation with sliding window sessions:COMMENT
LOWserver/api/auth_service_session.go321 // The address comes from the trusted-proxy resolver, never from a headerCOMMENT
LOWserver/api/auth_service.go41 }, nilCOMMENT
LOWserver/api/auth_service.go141// as the local lookup key. On the miss path, a local user is created with theCOMMENT
LOWserver/api/attachment_service_image.go81}COMMENT
LOWserver/api/user_service_identities.go141}COMMENT
LOWserver/api/user_service_access_tokens.go61// - Optional expiration time (can be never-expiring)COMMENT
LOWserver/api/header_carrier.go81COMMENT
LOWserver/api/memo_service_webhooks.go141// parseMemoOrderBy parses the order_by field and sets the appropriate ordering in memoFind.COMMENT
LOWserver/api/authz.go81}COMMENT
LOWfilter/engine_test.go521COMMENT
LOWfilter/doc.go1// Package filter compiles the CEL filter expressions accepted by the listCOMMENT
LOWstore/memo.go161// transport-facing mutation. Drivers discover and authorize the current memo,COMMENT
LOWstore/doc.go1// Package store is the persistence layer: the Store facade, the DriverCOMMENT
LOWstore/user_unique.go21// uniqueViolationMarkers precede the constraint, index, or column name in theCOMMENT
LOWstore/migrator.go21// Migration System Overview:COMMENT
LOWstore/migrator.go41// - Every driver ships the same set of migration versions; a schema change isCOMMENT
LOWstore/db/sqlite/sqlite.go41 // good practice to be explicit and prevent future surprises on SQLite upgrades.COMMENT