AI Slop Code Risk Monitor

xroche/httrack

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

HTTrack Website Copier, copy websites to your computer (Official repository)

2.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for xroche/httrack, a C project with 4,812 GitHub stars. SynthScan examined 229,616 lines of code across 587 source files, recording 277 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 2.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.

2.0
Adjusted Signal
2.0
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
4.8K
Stars
C
Language
229.6K
Lines of Code
587
Files
277
Pattern Hits
2026-10-31
Scan Date
0.07
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 5.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 4.2/100 · LOW

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

PR Review Velocity Impact 10.9/100 · LOW

Which changes need focused human review? 277 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 41MEDIUM 25LOW 211

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 277 distinct pattern matches across 12 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.

Empty Error Handlers40 hits · 182 pts
SeverityFileLineSnippetContext
HIGHtests/ftp-server.py63except OSError:CODE
HIGHtests/ftp-server.py117except OSError:CODE
HIGHtests/socks5-server.py185except OSError:CODE
HIGHtests/postfile-server.py56except (OSError, socket.timeout):CODE
HIGHtests/postfile-server.py68except OSError:CODE
HIGHtests/postfile-server.py64except OSError:CODE
HIGHtests/local-server.py4571except KeyboardInterrupt:CODE
HIGHtests/local-server.py1137except OSError:CODE
HIGHtests/local-server.py1198except OSError:CODE
HIGHtests/local-server.py2408except OSError:CODE
HIGHtests/local-server.py2462except OSError:CODE
HIGHtests/local-server.py2481except OSError:CODE
HIGHtests/local-server.py2503except OSError:CODE
HIGHtests/local-server.py2559except OSError:CODE
HIGHtests/local-server.py2579except OSError:CODE
HIGHtests/local-server.py2609except OSError:CODE
HIGHtests/local-server.py2635except OSError:CODE
HIGHtests/local-server.py2715except OSError:CODE
HIGHtests/local-server.py3167except OSError:CODE
HIGHtests/local-server.py3201except OSError:CODE
HIGHtests/local-server.py3228except OSError:CODE
HIGHtests/local-server.py3297except OSError:CODE
HIGHtests/local-server.py3867except OSError:CODE
HIGHtests/local-server.py3897except OSError:CODE
HIGHtests/local-server.py1364except OSError:CODE
HIGHtests/local-server.py1972except OSError:CODE
HIGHtests/local-server.py2066except OSError:CODE
HIGHtests/local-server.py2251except OSError:CODE
HIGHtests/local-server.py1950except OSError:CODE
HIGHtests/local-server.py2004except OSError:CODE
HIGHtests/local-server.py2116except OSError:CODE
HIGHtests/local-server.py2168except OSError:CODE
HIGHtests/local-server.py2211except OSError:CODE
HIGHtests/header-injection-server.py140except (OSError, socket.timeout):CODE
HIGHtests/header-injection-server.py173except OSError:CODE
HIGHtests/header-injection-server.py169except OSError:CODE
HIGHtests/status-line-server.py78except (OSError, socket.timeout):CODE
HIGHtests/proxytestlib.py43except OSError:CODE
HIGHtests/proxytestlib.py112except OSError:CODE
HIGHtests/proxytestlib.py49except OSError:CODE
Over-Commented Block163 hits · 162 pts
SeverityFileLineSnippetContext
LOWbuild.sh1#!/bin/shCOMMENT
LOWman/makeman.sh1#!/bin/shCOMMENT
LOWtools/tsan-suppressions.txt1# Races ThreadSanitizer reports that are deliberate, so the leg stays green andCOMMENT
LOWtools/ci-sanitizer-report.sh1#!/bin/shCOMMENT
LOWtools/windows-kill-grade.sh1#!/bin/bashCOMMENT
LOWtools/parser-diff.sh1#!/bin/bashCOMMENT
LOWtools/buildroot-net.sh1#!/bin/bashCOMMENT
LOWtools/mkdeb.sh1#!/usr/bin/env bashCOMMENT
LOWtools/mkdeb.sh21# -k, --key KEYID GPG key for signing (default: $DEBSIGN_KEYID)COMMENT
LOWtools/mk-sbuild-chroot.sh1#!/usr/bin/env bashCOMMENT
LOWtools/downstream-drift.sh1#!/bin/bashCOMMENT
LOWtools/hurd-vm.sh1#!/bin/bashCOMMENT
LOWtools/hurd-vm.sh21VM_CPUS=1COMMENT
LOWtests/crawllib.sh1#!/bin/bashCOMMENT
LOWtests/wsl2-exe-shim.sh1#!/bin/bashCOMMENT
LOWtests/check-test-names.sh41[ "$count" -gt 0 ] || bad "no test matched [0-9]*_*.test under $testdir"COMMENT
LOWtests/ci-windows-suite.sh1#!/bin/bashCOMMENT
LOWtests/ci-windows-suite.sh141# clock, but every outcome writes a line, the per-test timeout included, so $4 pastCOMMENT
LOWtests/ci-windows-suite.sh281# badmtime needs a filesystem that stores an mtime past gmtime's range;COMMENT
LOWtests/ci-windows-suite.sh301# which MSYS has no equivalent for, and this job sets no interposer's path;COMMENT
LOWtests/ci-windows-suite.sh381# process: 294's wizard never reaches its feof||ferror arm on a stdin that shellCOMMENT
LOWtests/ci-windows-suite.sh501# Explicit now that this is a script; GitHub's "shell: bash" gave the step both.COMMENT
LOWtests/ci-windows-suite.sh541unset WATCHDOG_TOKENCOMMENT
LOWtests/ci-windows-suite.sh561 TMPDIR="$(cygpath -m "$RUNNER_TEMP")"COMMENT
LOWtests/ci-windows-suite.sh581# both. Left at the serial budget though the pool costs 4 min, because itCOMMENT
LOWtests/ci-suite-stage.sh1#!/bin/bashCOMMENT
LOWtests/local-crawl.sh1#!/bin/bashCOMMENT
LOWtests/local-crawl.sh21# --files-identical PATH PATH ... \COMMENT
LOWtests/local-crawl.sh41# --rerun-args runs a second pass (same server and mirror dir) with the givenCOMMENT
LOWtests/altstackprobe.c21COMMENT
LOWtests/local-server.py561 # record, so a test can drive the /sitemap.xml fallback instead.COMMENT
LOWtests/proclib.sh1#!/bin/bashCOMMENT
LOWtests/proclib.sh161}COMMENT
LOWtests/test-timeout.sh1#!/bin/bashCOMMENT
LOWtests/testlib.sh1#!/bin/bashCOMMENT
LOWtests/testlib.sh421 CLEANUP_FRAMES=()COMMENT
LOWtests/testlib.sh1161COMMENT
LOWtests/testlib.sh1301# reap a native Windows descendant -- the very case these watchdogs exist for --COMMENT
LOWtests/testlib.sh1441# macOS and its signals can't reap httrack.exe on Windows. We poll and kill_tree.COMMENT
LOWtests/warc-validate.py1#!/usr/bin/env python3COMMENT
LOWtests/warc-validate.py21# --same-resp-header SUBA=SUBB the response blocks targeting SUBA and SUBBCOMMENT
LOWtests/arclib.sh1#!/bin/bashCOMMENT
LOWhtml/fcguide.html261 e go everywhere on the webCOMMENT
LOWhtml/abuse.html461Example: (script &amp; php, Unix)<br>COMMENT
LOW.github/workflows/windows-build.yml341 key: wsl-rootfs-jammy-amd64-v1COMMENT
LOW.github/workflows/ci.yml361 # LSan only reports at a normal exit, so a test that kills the engine stillCOMMENT
LOW.github/workflows/ci.yml441 # this to the allocation-failure self-tests: allocator_may_return_null letsCOMMENT
LOW.github/workflows/ci.yml661 # --unsigned: CI has no GPG key (also skips the release sig/checksums).COMMENT
LOWfuzz/run-fuzzers.sh1#!/bin/bashCOMMENT
LOWsrc/htscore.c41/* File defs */COMMENT
LOWsrc/htscore.c61COMMENT
LOWsrc/htsparse.h41#ifndef HTS_DEF_FWSTRUCT_htsblkCOMMENT
LOWsrc/htscatchurl.c41#include "htsnet.h"COMMENT
LOWsrc/htscache.h41#include "htszlib.h" /* zipFile */COMMENT
LOWsrc/htshelp.c41#include "htscoremain.h"COMMENT
LOWsrc/htshelp.c61#define HTS_PLATFORM_NAME "windows-x64"COMMENT
LOWsrc/htshelp.c161COMMENT
LOWsrc/htsbacktrace.c41COMMENT
LOWsrc/htsbacktrace.c61#if (defined(__linux) && defined(HAVE_BACKTRACE))COMMENT
LOWsrc/htswin32.h41#ifdef _WIN32COMMENT
103 more matches not shown…
AI Slop Vocabulary20 hits · 58 pts
SeverityFileLineSnippetContext
MEDIUMman/makeman.sh17# makes it robust (no more prose turning into bogus options, see Debian #1061053):COMMENT
MEDIUMtools/emulated-suite.sh18# and the program one place right, which is what hid the engine from the harnessCOMMENT
MEDIUMtools/emulated-suite.sh21# same reason the harness sees the shift at all, and why a self-check here wouldCOMMENT
MEDIUMtools/ci-sanitizer-report.sh84# Only the harness logs: an in-tree build puts the .test sources here too, andCOMMENT
MEDIUMtools/parser-diff.sh174# TAP harness, so this waits longer than its 200 ticks suggest and strips the CRCOMMENT
MEDIUMtools/hurd-vm.sh253# -j2, not the harness default: the VM has one processor and 2G, and at -j4 itCOMMENT
MEDIUMtests/local-crawl.sh226 # without routing the harness-read hts-log.txt through a non-ASCII path.COMMENT
MEDIUMtests/local-crawl.sh232 # the logs (and the harness reads of them) go through the non-ASCII pathCOMMENT
MEDIUMtests/webhttracklib.sh229# A leaked htsserver wedges the parallel harness behind a green log. BoundedCOMMENT
MEDIUMtests/local-server.py1959 # Always-stall endpoint for 72_watchdog-crawl: never finishes, so the harnessCOMMENT
MEDIUMtests/proclib.sh153# harness script whose *path* contains "httrack" is not mistaken for the engine.COMMENT
MEDIUMtests/proclib.sh176# ptrace_scope=1, which is how a harness watchdog necessarily invokes it.COMMENT
MEDIUMtests/proclib.sh248# Report what a wedged test left behind, into the log the harness keeps: the testCOMMENT
MEDIUMtests/testlib.sh19# Headed and indented, so a dumped log cannot be read as the harness's ownCOMMENT
MEDIUMtests/testlib.sh743# Which harness drives the tests: `msys` for an MSYS/Git Bash shell, `wsl2` forCOMMENT
MEDIUMtests/testlib.sh811# is the harness's from here on; no test may hold it open across a poll.COMMENT
MEDIUMtests/testlib.sh864# trap, where a survivor would turn a passing test into a harness timeout.COMMENT
MEDIUMtests/testlib.sh1201 # possibly the harness's own, and the taskkill above already reaped it.COMMENT
MEDIUMtests/install-headers-sweep.sh248# and an emulated compiler needs more time for it than the harness allows a test (#1146).COMMENT
MEDIUMfuzz/run-fuzzers.sh2# Drive every built harness against its seed corpus.COMMENT
Deep Nesting24 hits · 19 pts
SeverityFileLineSnippetContext
LOWtools/check-includes.py72CODE
LOWtools/doc-links.py31CODE
LOWtools/gen-winprofile-keys.py31CODE
LOWtests/check-log-logins.py58CODE
LOWtests/check-log-logins.py73CODE
LOWtests/check-log-logins.py102CODE
LOWtests/png-colors.py24CODE
LOWtests/png-colors.py63CODE
LOWtests/ftp-server.py53CODE
LOWtests/ftp-server.py96CODE
LOWtests/ftp-server.py157CODE
LOWtests/ftp-server.py208CODE
LOWtests/check-subshell-errexit.py77CODE
LOWtests/local-server.py626CODE
LOWtests/local-server.py1931CODE
LOWtests/local-server.py1983CODE
LOWtests/local-server.py2094CODE
LOWtests/local-server.py2153CODE
LOWtests/local-server.py2196CODE
LOWtests/local-server.py3529CODE
LOWtests/local-server.py3758CODE
LOWtests/local-server.py4313CODE
LOWtests/local-server.py4449CODE
LOWtests/warc-validate.py143CODE
Self-Referential Comments4 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUMtests/testlib.sh634# Create the lock naming $1 as its owner, or fail because it exists. noclobber isCOMMENT
MEDIUMhtml/div/search.sh11# Create an index if necessaryCOMMENT
MEDIUMsrc/htscookie_selftest.c1971 ROW("# This file is generated by yt-dlp. Do not edit.\n", 0),CODE
MEDIUMsrc/htsbauth.c628 "# This file is generated by yt-dlp. Do not edit.",CODE
Hyper-Verbose Identifiers14 hits · 8 pts
SeverityFileLineSnippetContext
LOW⚡tests/local-server.py1370 def route_diskfull_splitindex(self):CODE
LOW⚡tests/local-server.py1373 def route_diskfull_splitsmallindex(self):CODE
LOW⚡tests/local-server.py1376 def route_diskfull_splitchunkedindex(self):CODE
LOW⚡tests/local-server.py1384 def route_diskfull_splitsmall(self):CODE
LOW⚡tests/local-server.py1389 def route_diskfull_splitchunked(self):CODE
LOWtests/local-server.py1306 def route_diskfull_smallindex(self):CODE
LOWtests/local-server.py1325 def route_diskfull_chunkedindex(self):CODE
LOWtests/local-server.py1346 def route_diskfull_stallindex(self):CODE
LOWtests/local-server.py1421 def route_diskfull_noclenindex(self):CODE
LOWtests/local-server.py1442 def route_diskfull_gzbadindex(self):CODE
LOWtests/local-server.py2432 def route_chunktrunc_alwaysbin(self):CODE
LOWtests/local-server.py3386 def route_changes_redirtarget(self):CODE
LOWtests/local-server.py3416 def route_changes_sizedtarget(self):CODE
LOWtests/local-server.py3429 def route_changes_coded_stable(self):CODE
Example Usage Blocks4 hits · 6 pts
SeverityFileLineSnippetContext
LOWman/makeman.sh5# Usage:COMMENT
LOWtools/mkdeb.sh17# Usage:COMMENT
LOWtools/mk-sbuild-chroot.sh9# Usage:COMMENT
LOWtests/local-crawl.sh14# Usage:COMMENT
Cross-Language Confusion1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHtests/check-subshell-errexit.py127 self.hit(left, "set -e is off inside a subshell left of && or ||")CODE
Excessive Try-Catch Wrapping4 hits · 4 pts
SeverityFileLineSnippetContext
LOWtests/wacz-validate.py81 except Exception:CODE
LOWtests/wacz-validate.py85 except Exception:CODE
LOWtests/local-crawl.sh135except Exception:CODE
LOWtests/warc-validate.py125 except Exception as exc:CODE
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMhtml/fcguide.html112great job. Here's a simple example:CODE
Unused Imports1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtests/wacz-validate.py80CODE
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsrc/htsparse.c860 "lazy", "placeholder", "none", "null", "undefined",CODE