AI Slop Code Risk Monitor

gopasspw/gopass

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

The slightly more awesome standard unix password manager for teams

1.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for gopasspw/gopass, a Go project with 7,300 GitHub stars. SynthScan examined 108,466 lines of code across 773 source files, recording 129 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 1.8 (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.8
Adjusted Signal
1.8
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
7.3K
Stars
Go
Language
108.5K
Lines of Code
773
Files
129
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 2.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 2.8/100 · LOW

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

Agent Over-Engineering Ratio 3.7/100 · LOW

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

PR Review Velocity Impact 7.8/100 · LOW

Which changes need focused human review? 129 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 23LOW 106

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

Decorative Section Separators22 hits · 81 pts
SeverityFileLineSnippetContext
MEDIUM⚡internal/backend/crypto/gpg/gpgconf/utils_test.go29#-----------------------------COMMENT
MEDIUM⚡internal/backend/crypto/gpg/gpgconf/utils_test.go31#-----------------------------COMMENT
MEDIUM⚡internal/backend/crypto/gpg/gpgconf/utils_test.go35#-----------------------------COMMENT
MEDIUM⚡internal/backend/crypto/gpg/gpgconf/utils_test.go37#-----------------------------COMMENT
MEDIUMinternal/backend/crypto/gpg/gpgconf/utils_test.go52#-----------------------------COMMENT
MEDIUMinternal/backend/crypto/gpg/gpgconf/utils_test.go54#-----------------------------COMMENT
MEDIUMinternal/backend/crypto/gpg/gpgconf/utils_test.go75#-----------------------------COMMENT
MEDIUMinternal/backend/crypto/gpg/gpgconf/utils_test.go77#-----------------------------COMMENT
MEDIUMinternal/action/handler_shims.go17// ── secretHandler shims ────────────────────────────────────────────────────COMMENT
MEDIUMinternal/action/handler_shims.go76// ── searchHandler shims ────────────────────────────────────────────────────COMMENT
MEDIUMinternal/action/handler_shims.go92// ── generateHandler shims ──────────────────────────────────────────────────COMMENT
MEDIUMinternal/action/handler_shims.go106// ── mountHandler shims ─────────────────────────────────────────────────────COMMENT
MEDIUMinternal/action/handler_shims.go128// ── recipientHandler shims ─────────────────────────────────────────────────COMMENT
MEDIUMinternal/action/handler_shims.go162// ── setupHandler shims ─────────────────────────────────────────────────────COMMENT
MEDIUM⚡internal/action/handler_shims.go227// ── syncHandler shims ──────────────────────────────────────────────────────COMMENT
MEDIUM⚡internal/action/handler_shims.go232// ── auditHandler shims ─────────────────────────────────────────────────────COMMENT
MEDIUM⚡internal/action/handler_shims.go238// ── templateHandler shims ──────────────────────────────────────────────────COMMENT
MEDIUMinternal/action/handler_shims.go260// ── binaryHandler shims ────────────────────────────────────────────────────COMMENT
MEDIUM⚡internal/action/handler_shims.go282// ── envHandler shims ───────────────────────────────────────────────────────COMMENT
MEDIUM⚡internal/action/handler_shims.go286// ── otpHandler shims ───────────────────────────────────────────────────────COMMENT
MEDIUM⚡internal/action/handler_shims.go295// ── miscHandler shims ──────────────────────────────────────────────────────COMMENT
MEDIUMinternal/action/handler_shims.go355// ── searchHandler internal shims ───────────────────────────────────────────COMMENT
Fake / Example Data55 hits · 62 pts
SeverityFileLineSnippetContext
LOW⚡internal/backend/crypto/gpg/key_list_test.go14 genTestKey("John", "johnny", "Doe", "john.doe@example.org"),CODE
LOW⚡internal/backend/crypto/gpg/key_list_test.go15 genTestKey("Jane", "jane", "Doe", "jane.doe@example.org", "25FF1614B8F87B52FFFF99B962AF4031C82E0019"),CODE
LOW⚡internal/backend/crypto/gpg/key_list_test.go16 genTestKey("Jim", "jimmy", "Doe", "jim.doe@example.org", "25FF1614B8F87B52FFFF99B962AF4031C82E2019", "z", "none"),CODE
LOWinternal/backend/crypto/gpg/key_list_test.go36 k, err := kl.FindKey("jim.doe@example.org")CODE
LOWinternal/backend/crypto/gpg/key_list_test.go56 k, err = kl.FindKey("John Doe")CODE
LOWinternal/backend/crypto/gpg/key_test.go27 email := "john.doe@example.org"CODE
LOWinternal/backend/crypto/gpg/identity_test.go14 Name: "John Doe",CODE
LOWinternal/backend/crypto/gpg/identity_test.go16 Email: "john.doe@example.org",CODE
LOWinternal/backend/crypto/gpg/cli/gpg_others_test.go45 _, err := g.GenerateIdentity(ctx, "foo", "foo@bar.com", "bar")CODE
LOWinternal/backend/crypto/gpg/cli/gpg_windows_test.go47 _, err := g.GenerateIdentity(ctx, "foo", "foo@bar.com", "bar")CODE
LOW⚡internal/backend/crypto/gpg/colons/parse_colons_test.go30 name: "John Doe",CODE
LOW⚡internal/backend/crypto/gpg/colons/parse_colons_test.go37 name: "John Doe",CODE
LOW⚡internal/backend/crypto/gpg/colons/parse_colons_test.go44 name: "John Doe",CODE
LOWinternal/backend/storage/gogit/gogit_test.go48 g, err := Init(ctx, gitdir, "Dead Beef", "dead.beef@example.org")CODE
LOWinternal/backend/storage/gogit/gogit_test.go158 remote, err := Init(ctx, remoteDir, "Remote", "remote@example.org")CODE
LOWinternal/backend/storage/gogit/gogit_test.go165 local, err := Clone(ctx, remoteDir, localDir, "Local", "local@example.org")CODE
LOWinternal/backend/storage/gogit/gogit_test.go222 remote, err := Init(ctx, remoteDir, "Remote", "remote@example.org")CODE
LOWinternal/backend/storage/gogit/gogit_test.go229 local, err := Clone(ctx, remoteDir, localDir, "Local", "local@example.org")CODE
LOWinternal/backend/storage/gogit/crossbackend_test.go58 goGit, err := Init(ctx, goDir, "Test", "test@example.org")CODE
LOWinternal/backend/storage/gogit/crossbackend_test.go64 cliGit, err := gitfs.Init(ctx, cliDir, "Test", "test@example.org")CODE
LOWinternal/backend/storage/gogit/crossbackend_test.go88 remote, err := Init(ctx, remoteDir, "Remote", "remote@example.org")CODE
LOWinternal/backend/storage/gogit/crossbackend_test.go123 goGit, err := Clone(ctx, remoteDir, goDir, "Local", "local@example.org")CODE
LOWinternal/backend/storage/gogit/crossbackend_test.go128 cliGit, err := gitfs.Clone(ctx, remoteDir, cliDir, "Local", "local@example.org")CODE
LOWinternal/backend/storage/gogit/gogit_extra_test.go505 sig := object.Signature{Name: "Test", Email: "test@example.org"}CODE
LOWinternal/backend/storage/gitfs/git_test.go35 git, err := Init(ctx, gitdir, "Dead Beef", "dead.beef@example.org")CODE
LOWinternal/backend/storage/gitfs/config_test.go29 git, err := Init(ctx, gitdir, "Dead Beef", "dead.beef@example.org")CODE
LOWinternal/backend/storage/gitfs/config_test.go35 require.NoError(t, git.InitConfig(ctx, "Foo Bar", "foo.bar@example.org"))CODE
LOWinternal/recipients/recipients_test.go24 in: []string{"baz@bar.com", "foo@bar.com"},CODE
LOW⚡internal/recipients/recipients_test.go53 in: "foo@bar.com",CODE
LOW⚡internal/recipients/recipients_test.go54 want: []string{"foo@bar.com"},CODE
LOW⚡internal/recipients/recipients_test.go58 want: []string{"baz@bar.com", "foo@bar.com"},CODE
LOW⚡internal/recipients/recipients_test.go62 want: []string{"baz@bar.com", "foo@bar.com"},CODE
LOW⚡internal/recipients/recipients_test.go66 want: []string{"baz@bar.com", "foo@bar.com"},CODE
LOWinternal/action/clone_test.go35 gr, err := git.Init(ctx, gd, "Nobody", "foo.bar@example.org")CODE
LOWinternal/action/generate_test.go275 in: []string{"some/mount/gmail.com/john.doe@example.org", "example.com/user@example.org"},CODE
LOWinternal/action/generate_test.go276 out: []string{"john.doe@example.org", "user@example.org"},CODE
LOWinternal/action/rcs_test.go37 c := gptest.CliCtxWithFlags(ctx, t, map[string]string{"name": "foobar", "email": "foo.bar@example.org"})CODE
LOWinternal/action/history_test.go24 t.Setenv("GIT_AUTHOR_EMAIL", "foo.bar@example.org")CODE
LOWinternal/action/history_test.go55 require.NoError(t, act.rcsInit(ctx, "", "foo bar", "foo.bar@example.org"))CODE
LOWinternal/action/init_test.go43 c := gptest.CliCtx(ctx, t, "foo.bar@example.org")CODE
LOWinternal/action/init_test.go54 require.Error(t, act.initGenerateIdentity(ctx, crypto, "foo bar", "foo.bar@example.org"))CODE
LOWinternal/action/commands_test.go69 "email": "foo.bar@example.org",CODE
LOWinternal/action/setup_test.go120 require.NoError(t, act.initGenerateIdentity(ctx, crypto, "foo bar", "foo.bar@example.org"))CODE
LOWinternal/action/setup_test.go149 c := gptest.CliCtx(ctx, t, "foo.bar@example.org")CODE
LOWinternal/action/setup_test.go168 require.Error(t, act.initGenerateIdentity(ctx, crypto, "foo bar", "foo.bar@example.org"))CODE
LOWdocs/setup.md478gopass --yes setup --remote github.com/example/pass.git --team example --create-team --name "John Doe" --email "john.doeCODE
LOWdocs/setup.md481gopass --yes setup --remote github.com/example/pass.git --team example --name "Jane Doe" --email "jane.doe@example.com"CODE
LOWdocs/adr/A-14-team-workflows.md77filename := filepath.Join(keyDir, r) // r == raw id, e.g. "user@example.com"CODE
LOWdocs/adr/A-14-team-workflows.md88`recipientCheck("user@example.com")` → `FindRecipients("user@example.com")`.CODE
LOWpkg/ctxutil/ctxutil_test.go130 ctx = WithEmail(ctx, "foo@bar.com")CODE
LOWpkg/ctxutil/ctxutil_test.go152 assert.Equal(t, "foo@bar.com", GetEmail(ctx))CODE
LOW⚡pkg/termio/identity_test.go71 t.Setenv("EMAIL", "user@example.com")CODE
LOW⚡pkg/termio/identity_test.go74 require.NoError(t, cfg.SetLocal("user.name", "Jane Doe"))CODE
LOW⚡pkg/termio/identity_test.go80 assert.Equal(t, "Jane Doe", DetectName(ctx, nil))CODE
LOWpkg/gopass/secrets/akv_test.go219lorem ipsum dolor suntCODE
Over-Commented Block49 hits · 49 pts
SeverityFileLineSnippetContext
LOWmain_test.go101 ".audit",COMMENT
LOWinternal/tree/node.go101 }COMMENT
LOWinternal/secretservice/store.go121 locked map[string]boolCOMMENT
LOWinternal/secretservice/doc.go1//go:build linuxCOMMENT
LOWinternal/secretservice/volatile.go21COMMENT
LOWinternal/secretservice/crypto/crypto.go1// Package crypto implements the transport encryption algorithms defined byCOMMENT
LOWinternal/config/config.go221 if v := cfg.Get(key); v != "" {COMMENT
LOWinternal/config/legacy/io.go181 }COMMENT
LOWinternal/backend/crypto/gpg/doc.go1// Package gpg provides a GPG crypto backend for gopass.COMMENT
LOWinternal/backend/crypto/gpg/gpgconf/utils_test.go21 }COMMENT
LOWinternal/backend/crypto/gpg/gpgconf/utils_test.go41no-commentsCOMMENT
LOWinternal/backend/crypto/gpg/gpgconf/utils_test.go61# Set the proxy to use for HTTP and HKP keyservers - default to the standardCOMMENT
LOWinternal/backend/crypto/gpg/colons/parse_colons.go21 reUIDNoEmailComment = regexp.MustCompile(`([^(<]+)\s+(\([^)]+\))`)COMMENT
LOWinternal/backend/crypto/gpg/colons/parse_colons.go41// rvk - Revocation KEyCOMMENT
LOWinternal/backend/crypto/age/agent/client.go181 // Status is the payload of the status command: "" or "locked".COMMENT
LOWinternal/backend/crypto/age/agent/agent_test.go461}COMMENT
LOWinternal/backend/storage/gogit/rcs.go381 return nilCOMMENT
LOWinternal/backend/storage/gogit/merge.go81 case merkletrie.Modify:COMMENT
LOWinternal/backend/storage/gogit/merge.go521 }COMMENT
LOWinternal/backend/storage/gitfs/ssh_others.go1//go:build !windows && !darwinCOMMENT
LOWinternal/backend/storage/gitfs/ssh_darwin.go1//go:build darwinCOMMENT
LOWinternal/backend/storage/fs/rcs.go1// This file contains stub implementations for the rcs interface that isCOMMENT
LOWinternal/backend/storage/fs/store.go81// IsVCSDirName reports whether a single path component names a VCS metadataCOMMENT
LOWinternal/action/completion.go81COMMENT
LOWinternal/action/templates.go21COMMENT
LOWinternal/action/exit/errors.go21 // Aborted is used if the user willingly aborted an action.COMMENT
LOWinternal/goeol/doc.go1// Package goeol contains canary tests that fail once the Go version targeted byCOMMENT
LOWinternal/pwschemes/argon2i/argon2i.go41//COMMENT
LOWinternal/pwschemes/argon2id/argon2id.go41//COMMENT
LOWinternal/buildinfo/buildinfo.go1// Package buildinfo exposes the gopass build version to internal packages.COMMENT
LOWinternal/ageagentlauncher/register.go1// Package ageagentlauncher wires the standalone gopass CLI's age-agent launcherCOMMENT
LOWinternal/store/leaf/recipients.go401// ID, or fingerprint) to its canonical form (full fingerprint) by queryingCOMMENT
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW.github/workflows/scorecard.yml41 with:COMMENT
LOWhelpers/commitmsg/commitmsg.go81 // conventionalRE matches a Conventional Commits 1.0.0 subject.COMMENT
LOWhelpers/changelog/main.go1// Copyright 2021 The gopass Authors. All rights reserved.COMMENT
LOWhelpers/release/changelog.go41// changelog is a parsed CHANGELOG.md.COMMENT
LOWpkg/ctxutil/ctxutil.go21COMMENT
LOWpkg/ctxutil/ctxutil.go41 // NoNetwork indicates that no network operations should be performed.COMMENT
LOWpkg/hibp/dump/scanner.go1// Package dump implements an haveibeenpwned.com dump scanner. It is designedCOMMENT
LOWpkg/protect/protect.go1//go:build !openbsdCOMMENT
LOWpkg/appdir/appdir.go41// UserCache returns the user's cache dir for gopass.COMMENT
LOWpkg/tempfile/mount_darwin.go21func tempdirBase() string {COMMENT
LOWpkg/gopass/doc.go1// Package gopass contains the public gopass API.COMMENT
LOWpkg/gopass/doc.go21// - https://github.com/gopasspw/gopass-jsonapiCOMMENT
LOWpkg/gopass/secrets/doc.go1// Package secrets provides the secret types used by the gopass API.COMMENT
LOWpkg/gopass/secrets/yaml.go21var _ gopass.Secret = &YAML{}COMMENT
LOWpkg/gopass/api/api.go1// Package api provides a gopass API implementation.COMMENT
LOWpkg/debug/doc.go1// Package debug provides logging of debug information.COMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMinternal/config/legacy/io.go185 // We try to provide a seamless config upgrade path for users of ourCOMMENT
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
LOWinternal/updater/verify_canary_test.go14// This is supposed to act as a canary so we don't forget to roll the keyCOMMENT
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWhelpers/postrel/main_test.go24// TODO: Add test for createMilestones functionCOMMENT