AI Slop Code Risk Monitor

OI-wiki/OI-wiki

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

:star2: Wiki of OI / ICPC for everyone. (某大型游戏线上攻略,内含炫酷算术魔法)

1.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for OI-wiki/OI-wiki, a TypeScript project with 27,071 GitHub stars. SynthScan examined 174,771 lines of code across 1096 source files, recording 143 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.0 (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.0
Adjusted Signal
1.0
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
27.1K
Stars
TypeScript
Language
174.8K
Lines of Code
1.1K
Files
143
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 4.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.6/100 · LOW

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

Agent Over-Engineering Ratio 2.6/100 · LOW

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

PR Review Velocity Impact 4.8/100 · LOW

Which changes need focused human review? 143 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 5MEDIUM 2LOW 136

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 143 distinct pattern matches across 10 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 Identifiers70 hits · 82 pts
SeverityFileLineSnippetContext
LOW⚡test/test_linter_patch.py34 def test_preprocess_applies_indentation_fixes(self):CODE
LOW⚡test/test_linter_patch.py44 def test_postprocess_applies_fullstop_fixes(self):CODE
LOW⚡test/test_linter_patch.py54 def test_file_unchanged_when_no_fixes_needed(self):CODE
LOW⚡test/test_linter_patch.py63 def test_file_not_found_raises_error(self):CODE
LOWtest/test_linter_patch.py77 def test_skip_blocks_preserved(self):CODE
LOWtest/linter/test_utils.py14 def test_finds_first_different_element(self):CODE
LOWtest/linter/test_utils.py27 def test_raises_stop_iteration_when_not_found(self):CODE
LOW⚡test/linter/test_utils.py44 def test_logs_when_runner_debug_set(self, mock_print):CODE
LOW⚡test/linter/test_utils.py51 def test_silent_when_runner_debug_not_set(self, mock_print):CODE
LOW⚡test/linter/test_utils.py58 def test_non_debug_types_print_without_runner_debug(self, mock_print):CODE
LOW⚡test/linter/test_utils.py94 def test_grouping_with_runner_debug(self, mock_print):CODE
LOW⚡test/linter/test_utils.py104 def test_grouping_without_runner_debug_disabled(self, mock_print):CODE
LOW⚡test/linter/test_utils.py113 def test_grouping_force_enabled(self, mock_print):CODE
LOW⚡test/linter/test_utils.py122 def test_grouping_does_not_suppress_exceptions(self):CODE
LOWtest/linter/test_decorators.py22 def test_content_gets_trailing_newline(self):CODE
LOWtest/linter/test_decorators.py31 def test_tabs_replaced_with_spaces(self):CODE
LOWtest/linter/test_decorators.py83 def test_tabs_in_skip_blocks_preserved(self):CODE
LOW⚡test/linter/test_decorators.py102 def test_unclosed_skip_block_raises_error(self):CODE
LOW⚡test/linter/test_decorators.py110 def test_unopened_skip_block_raises_error(self):CODE
LOW⚡test/linter/test_decorators.py118 def test_content_modification_preserved(self):CODE
LOW⚡test/linter/test_decorators.py127 def test_skip_block_content_not_modified(self):CODE
LOW⚡test/linter/test_postprocess.py277 def test_curly_apostrophe_between_ascii_unchanged(self):CODE
LOW⚡test/linter/test_postprocess.py283 def test_left_single_as_apostrophe_between_ascii(self):CODE
LOW⚡test/linter/test_postprocess.py289 def test_left_single_with_space_not_apostrophe(self):CODE
LOW⚡test/linter/test_postprocess.py295 def test_left_single_at_line_end_converted_to_right(self):CODE
LOW⚡test/linter/test_postprocess.py301 def test_apostrophe_when_only_spaces_to_right_triggers_except(self):CODE
LOW⚡test/linter/test_postprocess.py307 def test_apostrophe_after_digit(self):CODE
LOW⚡test/linter/test_postprocess.py435 def test_single_quotes_after_non_alpha_ascii_not_apostrophe(self):CODE
LOW⚡test/linter/test_postprocess.py441 def test_single_quotes_after_non_alpha_ascii_is_apostrophe(self):CODE
LOW⚡test/linter/test_postprocess.py447 def test_deeply_nested_mixed_quotes(self):CODE
LOW⚡test/linter/test_postprocess.py453 def test_crossed_nested_mixed_quotes(self):CODE
LOW⚡test/linter/test_postprocess.py458 def test_extra_left_double_treated_as_right(self):CODE
LOW⚡test/linter/test_postprocess.py464 def test_extra_left_single_treated_as_right(self):CODE
LOW⚡test/linter/test_postprocess.py470 def test_extra_right_double_treated_as_left(self):CODE
LOW⚡test/linter/test_postprocess.py476 def test_extra_right_single_treated_as_left(self):CODE
LOWtest/linter/test_postprocess.py8 def test_replaces_chinese_fullstop(self):CODE
LOWtest/linter/test_postprocess.py38 def test_skip_block_content_not_modified(self):CODE
LOWtest/linter/test_postprocess.py89 def test_mixed_content_with_skip_blocks(self):CODE
LOWtest/linter/test_postprocess.py121 def test_replaces_left_double_quote(self):CODE
LOWtest/linter/test_postprocess.py127 def test_replaces_right_double_quote(self):CODE
LOWtest/linter/test_postprocess.py139 def test_mixed_quotes_in_sentence(self):CODE
LOWtest/linter/test_postprocess.py163 def test_quotes_in_code_block(self):CODE
LOWtest/linter/test_postprocess.py176 def test_skip_block_content_not_modified(self):CODE
LOWtest/linter/test_postprocess.py227 def test_mixed_content_with_skip_blocks(self):CODE
LOWtest/linter/test_postprocess.py255 def test_single_right_double_on_line_treated_as_left(self):CODE
LOWtest/linter/test_postprocess.py260 def test_single_right_single_on_line_treated_as_left(self):CODE
LOWtest/linter/test_postprocess.py319 def test_apostrophe_after_non_ascii_letter(self):CODE
LOWtest/linter/test_postprocess.py325 def test_cjk_prev_char_not_apostrophe(self):CODE
LOWtest/linter/test_postprocess.py355 def test_leading_curly_apostrophe(self):CODE
LOWtest/linter/test_skipblocks.py11 def test_multiple_skip_block_types_in_sequence(self):CODE
LOWtest/linter/test_skipblocks.py55 def test_interleaved_skip_blocks(self):CODE
LOWtest/linter/test_skipblocks.py99 def test_nested_different_skip_block_types(self):CODE
LOWtest/linter/test_skipblocks.py143 def test_all_three_skip_block_types(self):CODE
LOWtest/linter/test_skipblocks.py218 def test_single_quotes_with_skip_blocks(self):CODE
LOWtest/linter/test_skipblocks.py238 def test_mixed_quotes_with_skip_blocks(self):CODE
LOWtest/linter/test_skipblocks.py258 def test_adjacent_different_skip_blocks(self):CODE
LOWtest/linter/test_skipblocks.py293 def test_complex_real_world_markdown(self):CODE
LOWtest/linter/test_skipblocks.py396 def test_empty_skip_blocks_different_types(self):CODE
LOWtest/linter/test_skipblocks.py426 def test_same_content_multiple_skip_types(self):CODE
LOWtest/linter/test_skipblocks.py470 def test_deeply_nested_multiple_types_skip_blocks(self):CODE
10 more matches not shown…
Over-Commented Block41 hits · 41 pts
SeverityFileLineSnippetContext
LOWREADME.md41pip install uvCOMMENT
LOWdocs/misc/code/fsm/fsm_1.cpp1#include "dfa.hpp"COMMENT
LOWdocs/tools/editor/xcode.md121 COMMENT
LOWdocs/tools/editor/xcode.md141 COMMENT
LOWdocs/tools/editor/xcode.md161 #include <cwchar>COMMENT
LOWdocs/tools/editor/xcode.md181 #include <complex>COMMENT
LOWdocs/tools/editor/xcode.md201 #include <set>COMMENT
LOWdocs/tools/editor/xcode.md221 #include <mutex>COMMENT
LOWdocs/tools/editor/xcode.md241 #include <charconv>COMMENT
LOWdocs/ds/sbt.md241 node = nullptr;COMMENT
LOWdocs/ds/sbt.md261 node = node->right;COMMENT
LOWdocs/ds/sbt.md281 // Step 2. swap S and NCOMMENT
LOWdocs/ds/code/avl-tree/AvlTreeMap.hpp641 // Left-Right CaseCOMMENT
LOWdocs/ds/code/avl-tree/AvlTreeMap.hpp661 // ACOMMENT
LOWdocs/ds/code/avl-tree/AvlTreeMap.hpp801 if (node->isLeaf()) {COMMENT
LOWdocs/ds/code/avl-tree/AvlTreeMap.hpp841 // clang-format offCOMMENT
LOWdocs/ds/code/rbtree/rbtree.hpp301 // --8<-- [end:insert-fixup1]COMMENT
LOWdocs/ds/code/rbtree/rbtree.hpp321 // --8<-- [start:insert-case2]COMMENT
LOWdocs/ds/code/rbtree/rbtree.hpp381 // |n| [s] ==> [p] dCOMMENT
LOWdocs/ds/code/rbtree/rbtree.hpp401 // p will be colored black in the endCOMMENT
LOWdocs/ds/code/rbtree/rbtree.hpp421 }COMMENT
LOWdocs/ds/code/rbtree/rbtree.hpp441 // Post process: see case 2 & case 4COMMENT
LOWdocs/ds/code/size-balanced-tree/SizeBalancedTreeMap.hpp681COMMENT
LOWdocs/ds/code/size-balanced-tree/SizeBalancedTreeMap.hpp841 // / LCOMMENT
LOWdocs/ds/code/size-balanced-tree/SizeBalancedTreeMap.hpp861 // L R LCOMMENT
LOWdocs/graph/code/dsu-on-tree/dsu-on-tree_1.cpp1#include <cstdio>COMMENT
LOWdocs/graph/code/dsu-on-tree/dsu-on-tree_2.cpp1#include <cstdio>COMMENT
LOWdocs/basic/code/quick-sort/quick-sort_3.cpp1#include <algorithm>COMMENT
LOWdocs/basic/code/quick-sort/quick-sort_4.cpp1#include <algorithm>COMMENT
LOWdocs/math/code/bit/bit_2.cpp41COMMENT
LOWdocs/math/code/impartial-game/impartial-game-3.cpp21COMMENT
LOWdocs/math/code/prime-counting/lmo-offline.cpp1#include <algorithm>COMMENT
LOWdocs/math/code/prime-counting/lucy-opt.cpp1#include <algorithm>COMMENT
LOWdocs/math/code/prime-counting/lmo-online.cpp1#include <algorithm>COMMENT
LOWdocs/math/code/prime-counting/lucy.cpp1#include <cmath>COMMENT
LOWdocs/math/code/simplex/simplex_2.cpp1// Verified by https://uoj.ac/submission/779760COMMENT
LOWdocs/math/code/simplex/simplex_0.cpp1// --8<-- [start:full-text]COMMENT
LOWdocs/math/code/mod-arithmetic/i32-mul.cpp1#include <cstdint>COMMENT
LOWdocs/math/code/mod-arithmetic/i64-mul.cpp1#include <cfloat>COMMENT
LOWdocs/contest/interaction.md301 ```cppCOMMENT
LOWdocs/contest/code/io/io_2.cpp1#include <cctype>COMMENT
Cross-Language Confusion3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHdocs/graph/flow/images/max-flow-push-relabel.py135 if not network.push(u):CODE
HIGHdocs/graph/flow/images/max-flow-push-relabel.py175 network.push(u)CODE
HIGHscripts/ub-check.py169 sanitizers=[("-fsanitize=undefined,address", ".UBSAN-ASAN")],CODE
Deep Nesting12 hits · 12 pts
SeverityFileLineSnippetContext
LOWdocs/graph/flow/images/max-flow-push-relabel.py281CODE
LOWdocs/graph/flow/images/max-flow-push-relabel.py77CODE
LOWdocs/math/code/continued-fraction/sum-floor-axbc.py24CODE
LOWdocs/math/code/continued-fraction/gcj-2019.py67CODE
LOWdocs/math/code/continued-fraction/closest-dio.py25CODE
LOWdocs/geometry/images/andrew.py53CODE
LOWdocs/geometry/images/andrew.py254CODE
LOWscripts/ub-check.py69CODE
LOWscripts/get_files_to_test.py8CODE
LOWscripts/linter/decorators.py130CODE
LOWscripts/linter/decorators.py148CODE
LOWscripts/utils/find_jk.py41CODE
Redundant / Tautological Comments5 hits · 8 pts
SeverityFileLineSnippetContext
LOWdocs/math/code/continued-fraction/gcj-2019.py30# Check if a is smaller than b.COMMENT
LOWdocs/math/code/continued-fraction/inner-point.py30# Check if a is smaller than b.COMMENT
LOWdocs/math/code/continued-fraction/compare.py11# Check if a is smaller than b.COMMENT
LOWdocs/math/code/mobius/mobius-func-1.py8 # Check if square-freeCOMMENT
LOWscripts/linter/decorators.py152 # Read file contentCOMMENT
Unused Imports6 hits · 6 pts
SeverityFileLineSnippetContext
LOWdocs/math/images/linear-programming.py2CODE
LOWdocs/math/number-theory/images/dirichlet-hyperbola.py2CODE
LOWdocs/math/number-theory/images/sqrt-decomposition.py2CODE
LOWdocs/math/linear-algebra/images/basis.py2CODE
LOWdocs/math/linear-algebra/images/basis.py4CODE
LOWdocs/string/images/ac-automaton.py14CODE
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHdocs/geometry/images/andrew.py387except AttributeError:CODE
Docstring Block Structure1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHscripts/linter/utils.py9 Find the index of the first element in an iterable that is not equal to the given value. Args: l: The STRING
Excessive Try-Catch Wrapping3 hits · 4 pts
SeverityFileLineSnippetContext
LOWscripts/linter_patch.py135 except Exception as e:CODE
MEDIUMscripts/linter_patch.py136 print(f"Error processing {file}: {str(e)}")CODE
LOWscripts/linter/decorators.py169 except Exception as e:CODE
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMdocs/math/code/continued-fraction/flt-presum.cpp8// FLTs. Essentially 2x2 matrix.COMMENT