AI Slop Code RIsk Monitor

ledger/ledger

Double-entry accounting system with a command-line reporting interface

7.8 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for ledger/ledger, a C++ project with 6,053 GitHub stars. SynthScan examined 40,430 lines of code across 207 source files, recording 214 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 7.8 (Moderate 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.

7.8
Adjusted Signal
7.8
Raw Pattern Score
100%
Time Factor
2026-09-22
Last Push
6.1K
Stars
C++
Language
40.4K
Lines of Code
207
Files
214
Pattern Hits
2026-10-12
Scan Date
0.04
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 17.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 3.0/100 · LOW

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

Agent Over-Engineering Ratio 20.0/100 · LOW

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

PR Review Velocity Impact 34.5/100 · MEDIUM

Which changes need focused human review? 214 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 8MEDIUM 44LOW 162

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 214 distinct pattern matches across 14 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 Separators34 hits · 93 pts
SeverityFileLineSnippetContext
MEDIUMlefthook.yml19# ---------------------------------------------------------------------------COMMENT
MEDIUMlefthook.yml25# ---------------------------------------------------------------------------COMMENT
MEDIUMlefthook.yml63# ---------------------------------------------------------------------------COMMENT
MEDIUMlefthook.yml65# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡test/snapshot.py20# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡test/snapshot.py22# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡test/snapshot.py32# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡test/snapshot.py34# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py74# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py76# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py229# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py231# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py328# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py330# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py434# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py436# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py480# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py482# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py522# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py524# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py572# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py574# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py605# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py607# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py682# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py684# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py707# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py709# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py776# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py778# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py806# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py808# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py829# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/snapshot.py831# ---------------------------------------------------------------------------COMMENT
Over-Commented Block73 hits · 73 pts
SeverityFileLineSnippetContext
LOWCMakeLists.txt601COMMENT
LOWubsan-suppressions.txt1# UndefinedBehaviorSanitizer (UBSan) suppression file for known pre-existing issues.COMMENT
LOWlsan-suppressions.txt1# LeakSanitizer (LSan) suppression file for known pre-existing leaks.COMMENT
LOWlefthook.yml1# lefthook.ymlCOMMENT
LOWbenchmark/run_benchmark.sh1#!/usr/bin/env bashCOMMENT
LOWbenchmark/profile.sh1#!/usr/bin/env bashCOMMENT
LOWtools/update_copyright_year.sh1#!/bin/shCOMMENT
LOWtest/CMakeLists.txt41add_subdirectory(baseline)COMMENT
LOWtest/GenerateTests.py21COMMENT
LOWtest/GenerateTests.py61 #p_cerr_bal.stdin.close()COMMENT
LOWtest/regress/2152.py1import ledgerCOMMENT
LOWtest/regress/752.py1import ledgerCOMMENT
LOWtest/regress/2163.py1import ledgerCOMMENT
LOWtest/regress/1019.py1#!/usr/bin/env python3COMMENT
LOWtest/regress/2169.py1import ledgerCOMMENT
LOWtest/regress/2098.py1#!/usr/bin/env python3COMMENT
LOWtest/regress/976.py1import ledgerCOMMENT
LOWtest/regress/513.py1#!/usr/bin/env python3COMMENT
LOWtest/regress/1796.py1import ledgerCOMMENT
LOWtest/regress/3229.py1#!/usr/bin/env python3COMMENT
LOWtest/scripts/mock-getquote-with-exchange.sh1#!/bin/shCOMMENT
LOWpython/demo.py21COMMENT
LOWpython/demo.py41# - Did you use European-style numbers (1.000,00)?COMMENT
LOWpython/demo.py101COMMENT
LOWpython/demo.py241#COMMENT
LOWpython/demo.py261# promotes itself to a Balance object to make the addition valid.COMMENT
LOWcontrib/ledger-completion.bash1### AssumptionCOMMENT
LOWcontrib/ledger-completion.bash41 # Options are found in source code:COMMENT
LOWcontrib/ledger-completion.bash81 return 0COMMENT
LOWcontrib/non-profit-audit-reports/readcsv.py1#!/usr/bin/env python3COMMENT
LOWcontrib/non-profit-audit-reports/csv2ods.py1#!/usr/bin/env python3COMMENT
LOWcontrib/non-profit-audit-reports/ooolib2/__init__.py1"ooolib-python - Copyright (C) 2006-2009 Joseph Colton"COMMENT
LOWcontrib/iso4127-commodities/iso4217ledger.sh1#!/bin/shCOMMENT
LOWcontrib/raw/GenerateLatexExpeneseReport.pl121COMMENT
LOW.github/FUNDING.yml1# These are supported funding model platformsCOMMENT
LOW.github/workflows/nix-flake.yml21 - uses: actions/checkout@v7COMMENT
LOWlib/utfcpp/v4/source/utf8/core.h41#endifCOMMENT
LOWlib/utfcpp/v4/tests/noexceptionstests.cpp1#include "ftest.h"COMMENT
LOWlib/utfcpp/v4/tests/ftest.h221 std::cout << __FILE__ << ":" << __LINE__ << ": Failure\n"; \COMMENT
LOWlib/utfcpp/v4/tests/apitests.cpp1#include "ftest.h"COMMENT
LOWsrc/amount.h721#define AMOUNT_PRINT_COLORIZE 0x02COMMENT
LOWsrc/commodity.h121#define COMMODITY_NOMARKET 0x010 ///< Exclude from market-price valuations (-V/-X).COMMENT
LOWsrc/error.h101/// are separated by newlines. The parser calls this as it entersCOMMENT
LOWsrc/utils.h181std::size_t current_memory_size();COMMENT
LOWsrc/utils.h401#define SHOW_ERROR() \COMMENT
LOWsrc/utils.h461 } \COMMENT
LOWsrc/utils.h481#define DEBUG_STOP_(name) DEBUG_STOP_(name, _this_category)COMMENT
LOWsrc/utils.h501} // namespace ledgerCOMMENT
LOWsrc/post.h101public:COMMENT
LOWsrc/post.h281 * through the filter chain: running totals, display totals, sort keys,COMMENT
LOWsrc/op.h341 /// Compilation resolves identifiers (IDENT) to their definitions inCOMMENT
LOWsrc/op.h361 /// @param scope The runtime scope providing variable/function bindings.COMMENT
LOWsrc/op.h441 temp->set_function(fobj);COMMENT
LOWsrc/pool.h141 static std::shared_ptr<commodity_pool_t> current_pool;COMMENT
LOWsrc/pool.h161 commodity_t* find(const string& name);COMMENT
LOWsrc/pool.h181 /// @}COMMENT
LOWsrc/pool.h201 /// @brief Look up an annotated commodity by base commodity reference,COMMENT
LOWsrc/query.h341 /// @brief Scan a quoted or delimited pattern (`'...'`, `"..."`, `/.../`).COMMENT
LOWsrc/times.h121/// year for dates whose format lacks a year component (e.g., `01/15`).COMMENT
LOWsrc/times.h141/// Configurable so that `weekly` reports can begin on Monday, etc.COMMENT
13 more matches not shown…
Hyper-Verbose Identifiers44 hits · 44 pts
SeverityFileLineSnippetContext
LOW⚡test/python/PostingTest.py50 def test_posting_amount_value(self):CODE
LOW⚡test/python/PostingTest.py56 def test_posting_amount_with_cost(self):CODE
LOW⚡test/python/PostingTest.py65 def test_posting_account_name(self):CODE
LOW⚡test/python/PostingTest.py73 def test_posting_account_hierarchy(self):CODE
LOW⚡test/python/PostingTest.py111 def test_posting_given_cost_none(self):CODE
LOW⚡test/python/PostingTest.py116 def test_posting_has_tag_string(self):CODE
LOW⚡test/python/PostingTest.py124 def test_posting_get_tag_string(self):CODE
LOW⚡test/python/PostingTest.py132 def test_posting_get_tag_missing(self):CODE
LOW⚡test/python/PostingTest.py139 def test_posting_tag_inheritance(self):CODE
LOW⚡test/python/PostingTest.py172 def test_must_balance_regular(self):CODE
LOW⚡test/python/PostingTest.py177 def test_must_balance_virtual_balanced(self):CODE
LOW⚡test/python/PostingTest.py184 def test_must_balance_virtual_unbalanced(self):CODE
LOW⚡test/python/PostingTest.py203 def test_is_virtual_true_for_balanced_virtual(self):CODE
LOW⚡test/python/PostingTest.py210 def test_is_virtual_true_for_unbalanced_virtual(self):CODE
LOW⚡test/python/PostingTest.py249 def test_posting_state_cleared(self):CODE
LOW⚡test/python/PostingTest.py256 def test_posting_state_uncleared(self):CODE
LOW⚡test/python/PostingTest.py262 def test_posting_state_pending(self):CODE
LOW⚡test/python/PostingTest.py276 def test_posting_xact_reference(self):CODE
LOW⚡test/python/PostingTest.py284 def test_posting_xact_payee_different_transactions(self):CODE
LOW⚡test/python/PostingTest.py292 def test_posting_xdata_lifecycle(self):CODE
LOW⚡test/python/PostingTest.py343 def test_posting_iterator_on_xact(self):CODE
LOW⚡test/python/PostingTest.py353 def test_posting_iterator_counts(self):CODE
LOW⚡test/python/PostingTest.py363 def test_posting_balancing_amount(self):CODE
LOW⚡test/python/PostingTest.py369 def test_multiple_queries_xdata_stability(self):CODE
LOW⚡test/python/PostingTest.py539 def test_posting_no_assigned_amount(self):CODE
LOWtest/python/PostingTest.py155 def test_reported_account_default(self):CODE
LOWtest/python/PostingTest.py161 def test_set_reported_account(self):CODE
LOWtest/python/PostingTest.py304 def test_posting_xdata_create_after_clear(self):CODE
LOWtest/python/PostingTest.py382 def test_query_then_iterate_stability(self):CODE
LOWtest/python/PostingTest.py396 def test_sequential_queries_different_accounts(self):CODE
LOWtest/python/PostingTest.py410 def test_multiple_postings_same_query(self):CODE
LOWtest/python/PostingTest.py417 def test_posting_assigned_amount_none(self):CODE
LOWtest/python/PostingTest.py430 def test_posting_account_identity(self):CODE
LOWtest/python/PostingTest.py570 def test_transaction_level_tag_inherited(self):CODE
LOWtest/python/PostingTest.py578 def test_multiple_tags_on_posting(self):CODE
LOWtest/python/PostingTest.py604 def test_get_tag_value_content(self):CODE
LOWtest/python/PostingTest.py612 def test_get_tag_txn_value_content(self):CODE
LOW⚡test/python/PostingTest.py40 def test_basic_posting_access(self):STRING
LOW⚡test/python/PostingTest.py197 def test_is_virtual_false_for_real_posting(self):STRING
LOW⚡test/python/PostingTest.py531 def test_posting_assigned_amount(self):STRING
LOWtest/python/PostingTest.py223 def test_has_flags_post_virtual(self):STRING
LOWcmake/strip_pch_flags.py22def get_compiler_implicit_flags(compiler: str) -> list[str]:CODE
LOWcontrib/non-profit-audit-reports/ooolib2/__init__.py1067 def parse_content_start_element(self, name, attrs):CODE
LOWcontrib/non-profit-audit-reports/ooolib2/__init__.py1152 def parse_content_end_element(self, name):CODE
Empty Error Handlers6 hits · 30 pts
SeverityFileLineSnippetContext
HIGHtest/DocTests.py94except KeyError:CODE
HIGHtest/DocTests.py66except IndexError:CODE
HIGHtest/DocTests.py192except ValueError:CODE
HIGHtest/regress/819.py18except ImportError:CODE
HIGHpython/demo.py149except ArithmeticError:CODE
HIGHcontrib/getquote-uk.py24except: passCODE
Deep Nesting23 hits · 22 pts
SeverityFileLineSnippetContext
LOWtest/DocTests.py47CODE
LOWtest/DocTests.py142CODE
LOWtest/CheckTexinfo.py20CODE
LOWtest/CheckTexinfo.py60CODE
LOWtest/RegressTests.py31CODE
LOWtest/RegressTests.py101CODE
LOWtest/snapshot.py356CODE
LOWtest/snapshot.py438CODE
LOWtest/snapshot.py837CODE
LOWtest/semantic/check_all.py63CODE
LOWtest/semantic/check_all.py133CODE
LOWtest/semantic/check_all.py159CODE
LOWtest/semantic/sweep.py154CODE
LOWcmake/strip_pch_flags.py22CODE
LOWcmake/strip_pch_flags.py94CODE
LOWcontrib/non-profit-audit-reports/csv2ods.py67CODE
LOWcontrib/non-profit-audit-reports/ooolib2/__init__.py420CODE
LOWcontrib/non-profit-audit-reports/ooolib2/__init__.py527CODE
LOWcontrib/non-profit-audit-reports/ooolib2/__init__.py542CODE
LOWcontrib/non-profit-audit-reports/ooolib2/__init__.py787CODE
LOWcontrib/non-profit-audit-reports/ooolib2/__init__.py1173CODE
LOWscripts/orchestrator.py98CODE
LOWscripts/orchestrator.py229CODE
Cross-Language Confusion2 hits · 12 pts
SeverityFileLineSnippetContext
HIGHtest/semantic/check_all.py196 " 'lake exe cache get && lake build'\n"CODE
HIGHpython/demo.py79# There are a few built-in commodities: null, %, h, m and s. Normally youCOMMENT
Excessive Try-Catch Wrapping8 hits · 11 pts
SeverityFileLineSnippetContext
MEDIUMbenchmark/compare_benchmarks.py34 print("Error: baseline has no benchmark results", file=sys.stderr)CODE
MEDIUMbenchmark/compare_benchmarks.py105 print(f"Error: baseline file not found: {args.baseline}", file=sys.stderr)CODE
MEDIUMbenchmark/compare_benchmarks.py108 print(f"Error: candidate file not found: {args.candidate}", file=sys.stderr)CODE
MEDIUMtest/snapshot.py843 print(f"Error: ledger binary not found: {args.ledger_binary}", file=sys.stderr)CODE
MEDIUMtest/snapshot.py846 print(f"Error: data file not found: {args.data_file}", file=sys.stderr)CODE
MEDIUMtest/snapshot.py875 print(f"Error: no combos found for command '{args.only_command}'", file=sys.stderr)CODE
LOWscripts/orchestrator.py196 except Exception as e:CODE
LOWscripts/orchestrator.py354 except Exception as e:CODE
Unused Imports13 hits · 11 pts
SeverityFileLineSnippetContext
LOWtest/CheckOptions.py5CODE
LOWtest/snapshot.py4CODE
LOWtest/python/PostingTest.py4CODE
LOWtest/python/PostingTest.py6CODE
LOWtest/python/PostingTest.py7CODE
LOWtest/python/JournalTest.py5CODE
LOWtest/python/TransactionTest.py4CODE
LOWtest/python/TransactionTest.py6CODE
LOWtest/python/TransactionTest.py7CODE
LOWtest/python/ValueTest.py6CODE
LOWtest/regress/1205.py9CODE
LOWtest/regress/B21BF389.py3CODE
LOWtest/regress/819.py17CODE
AI Slop Vocabulary3 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUMtest/CheckEnvVars.py8# The standard test harness uses --args-only which skips env var processing,COMMENT
MEDIUM⚡test/python/PostingTest.py547 """Dedicated test case for comprehensive tag operations."""STRING
MEDIUMtest/semantic/check_all.py255 # absence is a harness error, not a quiet omission.COMMENT
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOWbenchmark/compare_benchmarks.py68 # Print results tableCOMMENT
LOWscripts/orchestrator.py155 # Check if test file was createdCOMMENT
LOWscripts/orchestrator.py184 # Check if a test file was partially created before timeoutCOMMENT
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMpython/demo.py50# commodity without parsing an amount, you can use the methodCOMMENT
AI Structural Patterns2 hits · 2 pts
SeverityFileLineSnippetContext
LOWcontrib/getquote-uk.py13CODE
LOWcontrib/non-profit-audit-reports/ooolib2/__init__.py51CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWbenchmark/profile.sh4# Usage:COMMENT
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWbenchmark/gen_benchmark.py35 "Acme Corp", "Freelance Client", "Bank Interest",CODE