AI Slop Code Risk Monitor

jj-vcs/jj

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

A Git-compatible VCS that is both simple and powerful

2.9 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for jj-vcs/jj, a Rust project with 32,314 GitHub stars. SynthScan examined 331,160 lines of code across 675 source files, recording 908 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 2.9 (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.9
Adjusted Signal
2.9
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
32.3K
Stars
Rust
Language
331.2K
Lines of Code
675
Files
908
Pattern Hits
2026-10-31
Scan Date
0.01
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 12.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.6/100 · LOW

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

Agent Over-Engineering Ratio 0.2/100 · LOW

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

PR Review Velocity Impact 13.4/100 · LOW

Which changes need focused human review? 908 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 2HIGH 4MEDIUM 5LOW 897

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 908 distinct pattern matches across 11 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.

Over-Commented Block862 hits · 862 pts
SeverityFileLineSnippetContext
LOWdeny.toml1# This template contains all of the possible sections and their default valuesCOMMENT
LOWdeny.toml21# `target_family = "unix"` configuration, that only having windows targets inCOMMENT
LOWdeny.toml41#exclude = []COMMENT
LOWdeny.toml61COMMENT
LOWdeny.toml101]COMMENT
LOWdeny.toml121# The SPDX expression for the license requirements of the crateCOMMENT
LOWdeny.toml141# not have its license(s) checkedCOMMENT
LOWdeny.toml161# the workspace that is being checked. This can be overridden by allowing/denyingCOMMENT
LOWdeny.toml181COMMENT
LOWdeny.toml201# If true, the allowed features must exactly match the enabled feature set. IfCOMMENT
LOWdeny.toml221# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.htmlCOMMENT
LOW.config/rumdl.toml1# Rumdl enables these rules by default. We disable the ones that report findingsCOMMENT
LOW.config/rumdl.toml21 # 4 findings. Heading levels should only increment by one level at a time.COMMENT
LOW.config/rumdl.toml41 "commands-show-output",COMMENT
LOW.config/rumdl.toml61 # https://github.com/rvben/rumdl/blob/main/docs/md031.mdCOMMENT
LOW.config/rumdl.toml81 # 44 findings. Code blocks should use a consistent style.COMMENT
LOW.config/rumdl.toml121# [heading-increment]COMMENT
LOW.config/rumdl.toml141# code-blocks = trueCOMMENT
LOW.config/rumdl.toml161# [blanks-around-headings]COMMENT
LOW.config/rumdl.toml181# ol-single = 1COMMENT
LOW.config/rumdl.toml201# [fenced-code-language]COMMENT
LOW.config/rumdl.toml221# [link-fragments]COMMENT
LOW.config/rumdl.toml241COMMENT
LOWcore/src/file_util.rs1// Copyright 2021 The Jujutsu AuthorsCOMMENT
LOWcore/src/file_util.rs101COMMENT
LOWcore/src/commit.rs1// Copyright 2020 The Jujutsu AuthorsCOMMENT
LOWcore/src/operation.rs1// Copyright 2020 The Jujutsu AuthorsCOMMENT
LOWcore/src/tree_walk.rs1// Copyright 2026 The Jujutsu AuthorsCOMMENT
LOWcore/src/tree_walk.rs121COMMENT
LOWcore/src/merged_tree.rs1// Copyright 2023 The Jujutsu AuthorsCOMMENT
LOWcore/src/graph.rs1// Copyright 2021-2023 The Jujutsu AuthorsCOMMENT
LOWcore/src/graph.rs141/// If no branches are prioritized, the branch containing the first commit inCOMMENT
LOWcore/src/tree_merge.rs1// Copyright 2023-2025 The Jujutsu AuthorsCOMMENT
LOWcore/src/backend.rs1// Copyright 2020 The Jujutsu AuthorsCOMMENT
LOWcore/src/backend.rs181#[derive(ContentHash, Debug, PartialEq, Eq, Clone, serde::Serialize)]COMMENT
LOWcore/src/backend.rs201 /// The change ID of this commit. This is a stable identifier that followsCOMMENT
LOWcore/src/backend.rs221 pub target_commit: CommitId,COMMENT
LOWcore/src/backend.rs241}COMMENT
LOWcore/src/backend.rs261/// A `CopyHistory` along with its `CopyId`.COMMENT
LOWcore/src/backend.rs301 /// UTF-8, such as a symlink target with invalid UTF-8 stored in the GitCOMMENT
LOWcore/src/backend.rs321 /// The source error.COMMENT
LOWcore/src/backend.rs361 },COMMENT
LOWcore/src/backend.rs421/// (`Merge::is_absent()`). For example, when getting the value at aCOMMENT
LOWcore/src/backend.rs801 ///COMMENT
LOWcore/src/backend.rs821 /// called this method, since `Store` shares the read between concurrentCOMMENT
LOWcore/src/backend.rs841 /// committer name to an authenticated user's name, or the backend'sCOMMENT
LOWcore/src/backend.rs861 /// to be reverse-topological. That is, for any two copy records withCOMMENT
LOWcore/src/lib.rs1// Copyright 2026 The Jujutsu AuthorsCOMMENT
LOWcore/src/op_store.rs1// Copyright 2020 The Jujutsu AuthorsCOMMENT
LOWcore/src/op_store.rs281COMMENT
LOWcore/src/op_store.rs301 /// Details of this operation.COMMENT
LOWcore/src/op_store.rs381COMMENT
LOWcore/src/index.rs1// Copyright 2020 The Jujutsu AuthorsCOMMENT
LOWcore/src/index.rs41 #[error("Cannot collect all heads by index of this type")]COMMENT
LOWcore/src/index.rs181}COMMENT
LOWcore/src/index.rs261 async fn resolve_prefix(COMMENT
LOWcore/src/conflict_labels.rs1// Copyright 2025 The Jujutsu AuthorsCOMMENT
LOWcore/src/repo_path.rs1// Copyright 2020 The Jujutsu AuthorsCOMMENT
LOWcore/src/repo_path.rs441 /// Returns the `(common_prefix, self_remainder)`.COMMENT
LOWcore/src/iter_util.rs1// Copyright 2025 The Jujutsu AuthorsCOMMENT
802 more matches not shown…
Fake / Example Data21 hits · 21 pts
SeverityFileLineSnippetContext
LOWweb/docs/src/content/docs/config.md2009email = "YOUR_OSS_EMAIL@example.org"STRING
LOWweb/docs/src/content/docs/revsets.md549'user()' = 'user("me@example.org")'CODE
LOWdocs/config.md2523email = "YOUR_OSS_EMAIL@example.org"STRING
LOWdocs/revsets.md599'user()' = 'user("me@example.org")'CODE
LOWcli/tests/test_git_init.rs1151 user.email = 'base@example.org'CODE
LOWcli/tests/test_git_init.rs1156 user.email = 'new-repo@example.org'CODE
LOWcli/tests/test_git_clone.rs966 user.email = 'base@example.org'CODE
LOWcli/tests/test_git_clone.rs971 user.email = 'new-repo@example.org'CODE
LOWcli/src/text_util.rs729 split_email("user@example.com"),CODE
LOWcli/src/config.rs1312 assert_eq!(parse("John Doe")?.as_str(), Some("John Doe"));CODE
LOWcli/src/template_builder.rs3901 literal(new_signature("User", "user@example.com"))CODE
LOWcli/src/template_builder.rs4040 literal(new_signature("User", "user@example.com"))CODE
LOWcli/src/template_builder.rs5733 literal(new_signature("User", "user@example.com"))CODE
LOWcli/src/config/colors.toml40"placeholder" = "red"CODE
LOWlib/testutils/src/git.rs24pub const GIT_EMAIL: &str = "someone@example.org";CODE
LOWlib/src/trailer.rs49/// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodCOMMENT
LOWlib/src/trailer.rs49/// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodCOMMENT
LOWlib/src/trailer.rs153 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sedCODE
LOWlib/src/trailer.rs153 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sedCODE
LOWlib/src/trailer.rs186 Summary: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodCODE
LOWlib/src/trailer.rs186 Summary: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodCODE
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALcli/src/commit_ref_list.rs498 .map(|c| c.author.timestamp.timestamp.0.to_string())CODE
CRITICALcli/src/commit_ref_list.rs508 .map(|c| c.committer.timestamp.timestamp.0.to_string())CODE
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHweb/docs/src/content/docs/config.md0/// set -euo pipefail /// echo "look ma, everything in one file!" /// echo "args: $@" ///STRING
HIGHdocs/config.md0/// set -euo pipefail /// echo "look ma, everything in one file!" /// echo "args: $@" ///STRING
HIGHcli/src/commands/util/exec.rs0/// set -euo pipefail /// echo "look ma, everything in one file!" /// echo "args: $@" ///STRING
Structural Annotation Overuse9 hits · 14 pts
SeverityFileLineSnippetContext
LOWweb/docs/src/content/docs/FAQ.md332#### Step 1: Find the commit ID for the "last good version"COMMENT
LOWweb/docs/src/content/docs/FAQ.md414#### Step 2: Create a new change on top of the original revisionCOMMENT
LOWweb/docs/src/content/docs/FAQ.md455#### Step 3: Move any bookmarks to the original revisionCOMMENT
LOWweb/docs/src/content/docs/FAQ.md461#### Step 4: Abandon the unwanted revisionCOMMENT
LOWdocs/FAQ.md344#### Step 1: Find the commit ID for the "last good version"COMMENT
LOWdocs/FAQ.md428#### Step 2: Create a new change on top of the original revisionCOMMENT
LOWdocs/FAQ.md472#### Step 3: Move any bookmarks to the original revisionCOMMENT
LOWdocs/FAQ.md478#### Step 4: Abandon the unwanted revisionCOMMENT
LOWlib/src/graph_dominators.rs281 // Step 1: Compute Dominators on Reverse GraphCOMMENT
AI Slop Vocabulary3 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUMweb/docs/package-lock.json7064 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",CODE
MEDIUMcli/tests/test_global_opts.rs1404 // The timestamp is constant sized so this is a robust operation.COMMENT
MEDIUMlib/src/secure_config.rs308 // In the future, we consider something a little more robust, where asCOMMENT
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMcli/tests/test_alias.rs342 # Create a disabled alias.COMMENT
MEDIUMlib/src/secure_config.rs44# This file is for old versions of jj.COMMENT
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHAI_POLICY.md11 If a substantial part of your contribution is generated by AI, pleaseCODE
Slop Phrases2 hits · 3 pts
SeverityFileLineSnippetContext
LOWweb/docs/src/content/docs/config.toml3# Don't forget to change these to your own details!COMMENT
LOWdocs/config.toml3# Don't forget to change these to your own details!COMMENT
Verbosity Indicators2 hits · 3 pts
SeverityFileLineSnippetContext
LOWlib/src/graph_dominators.rs281 // Step 1: Compute Dominators on Reverse GraphCOMMENT
LOWlib/src/git.rs497 // a tag or not, and we need to check if it's a commit object.COMMENT
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWlib/tests/test_merge_trees.rs116// TODO: Add tests for simplification of multi-way conflicts. Both the contentCOMMENT