AI Slop Code RIsk Monitor

matthart1983/netwatch

Real-time network diagnostics in your terminal. One command, zero config, instant visibility.

6.1 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for matthart1983/netwatch, a Rust project with 3,452 GitHub stars. SynthScan examined 127,840 lines of code across 230 source files, recording 453 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 6.1 (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.

6.1
Adjusted Signal
6.1
Raw Pattern Score
100%
Time Factor
2026-10-05
Last Push
3.5K
Stars
Rust
Language
127.8K
Lines of Code
230
Files
453
Pattern Hits
2026-10-12
Scan Date
0.01
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 11.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.2/100 · LOW

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

Agent Over-Engineering Ratio 17.3/100 · LOW

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

PR Review Velocity Impact 26.2/100 · MEDIUM

Which changes need focused human review? 453 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 3MEDIUM 154LOW 296

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

Decorative Section Separators149 hits · 458 pts
SeverityFileLineSnippetContext
MEDIUMCargo.toml139# ── Distro packages ───────────────────────────────────────────────────COMMENT
MEDIUMCargo.toml195# ── cargo-binstall ────────────────────────────────────────────────────COMMENT
MEDIUMdocs/ebpf-deep-dive.html730 <!-- 15 ─ #38 timeline (MARQUEE INTERACTIVE) ───────────────────────────── -->CODE
MEDIUMdocs/ebpf-deep-dive.html1294/* ── #38 timeline scrubber (slide 15) ────────────────────────────────────── */COMMENT
MEDIUMexamples/diagnose_demo.rs116// ── buffer export ───────────────────────────────────────────────────COMMENT
MEDIUMscripts/verify-tls12-decrypt.sh24# ── Resolve the capture interface ───────────────────────────────────────────COMMENT
MEDIUM⚡scripts/verify-tls12-decrypt.sh38# ── Preflight: python must be OpenSSL-backed ────────────────────────────────COMMENT
MEDIUM⚡scripts/verify-tls12-decrypt.sh48# ── Build the harness once ──────────────────────────────────────────────────COMMENT
MEDIUM⚡scripts/verify-tls12-decrypt.sh58# ── Run one scenario; classify the harness output ───────────────────────────COMMENT
MEDIUMsrc/graph.rs865// ── braille pixel-dot line plot ─────────────────────────────────────────────COMMENT
MEDIUMsrc/graph.rs914// ── fade helpers ────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/config.rs214// ── Defaults ───────────────────────────────────────────────COMMENT
MEDIUMsrc/config.rs263// ── Persistence ────────────────────────────────────────────COMMENT
MEDIUMsrc/config.rs328// ── Helpers to map string ↔ app types ──────────────────────COMMENT
MEDIUMsrc/config.rs360// ── Tests ──────────────────────────────────────────────────COMMENT
MEDIUM⚡src/theme.rs8 // ── Brand / chrome ──────────────────────────────────COMMENT
MEDIUM⚡src/theme.rs15 // ── Text ────────────────────────────────────────────COMMENT
MEDIUM⚡src/theme.rs21 // ── Status / semantic ───────────────────────────────COMMENT
MEDIUM⚡src/theme.rs27 // ── Data ────────────────────────────────────────────COMMENT
MEDIUM⚡src/theme.rs32 // ── Selection ───────────────────────────────────────COMMENT
MEDIUMsrc/theme.rs80// ── Built-in themes ────────────────────────────────────────COMMENT
MEDIUMsrc/app.rs2476// ── Key event handlers ─────────────────────────────────────────────────────COMMENT
MEDIUMsrc/app.rs4665 // ── RTT history cap tests ───────────────────────────────────────────COMMENT
MEDIUMsrc/ui/connections.rs543// ── Grouped tree ────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/connections.rs1965 // ── Grouped tree ────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/timeline.rs29// ── Event model ─────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/timeline.rs242// ── Filter chip row ─────────────────────────────────────────COMMENT
MEDIUMsrc/ui/timeline.rs311// ── Activity strip ──────────────────────────────────────────COMMENT
MEDIUMsrc/ui/timeline.rs470// ── Event log ───────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/timeline.rs594// ── helpers ─────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/interfaces.rs650// ── helpers ─────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/lite.rs30// ── The grid ────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/lite.rs45// ── Rows ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/lite.rs75// ── History ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/lite.rs116// ── Talker table ────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/lite.rs185// ── Footer ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/lite.rs219// ── Adaptive layout ─────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/lite.rs308// ── Talkers ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/lite.rs443// ── Formatting ──────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/lite.rs545// ── Drawing primitives ──────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/lite.rs618// ── Render ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/stats.rs95// ── Range chips row ─────────────────────────────────────────COMMENT
MEDIUMsrc/ui/stats.rs162// ── KPI tiles row ───────────────────────────────────────────COMMENT
MEDIUMsrc/ui/stats.rs314// ── Breakdowns row ──────────────────────────────────────────COMMENT
MEDIUMsrc/ui/stats.rs672// ── Throughput chart ────────────────────────────────────────COMMENT
MEDIUMsrc/ui/topology.rs30// ── Topology graph ──────────────────────────────────────────COMMENT
MEDIUMsrc/ui/topology.rs544// ── Hop detail table ────────────────────────────────────────COMMENT
MEDIUMsrc/ui/topology.rs740// ── helpers ─────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/processes.rs87// ── Sort chip row (reflects current sort state) ─────────────COMMENT
MEDIUMsrc/ui/processes.rs165// ── Table ───────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/processes.rs333// ── Drill-in panel ──────────────────────────────────────────COMMENT
MEDIUMsrc/ui/processes.rs632// ── helpers ─────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/dashboard.rs99// ── KPI strip ───────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/dashboard.rs402/// ╭ dns rtt ─────────────────────╮ <- title in the border, severity-colouredCOMMENT
MEDIUMsrc/ui/dashboard.rs406/// ╰──────────────────────────────╯COMMENT
MEDIUMsrc/ui/dashboard.rs547// ── Mid section: Active Interface + Throughput ──────────────COMMENT
MEDIUMsrc/ui/dashboard.rs1767// ── helpers ─────────────────────────────────────────────────COMMENT
MEDIUMsrc/ui/diagnose.rs651// ─────────────────────────────────────────────────── verdictCOMMENT
MEDIUMsrc/ui/diagnose.rs793// ────────────────────────────────────────────── engine stripCOMMENT
MEDIUMsrc/ui/diagnose.rs855// ──────────────────────────────────────────── issues + detailCOMMENT
89 more matches not shown…
Over-Commented Block273 hits · 268 pts
SeverityFileLineSnippetContext
LOWCargo.toml61dirs = "5"COMMENT
LOWCargo.toml81# per-(pid, comm, 5-tuple) connect events into a ring buffer forCOMMENT
LOWbuild.rs1fn main() {COMMENT
LOWtests/diagnose/health_lab.py61PROBE_SECS = 5COMMENT
LOWtests/diagnose/health_lab.py81# counted from its first healthy sample.COMMENT
LOWtests/diagnose/corpus/manifest.toml1# The pinned replay corpus. Each [[episode]] names <id>.json.gz andCOMMENT
LOWexamples/ebpf_v6_smoke.rs1//! Live smoke for eBPF Phase 2 IPv6 attribution (`tcp_v6_connect`).COMMENT
LOWexamples/ping_under_sandbox.rs1//! Verify native ICMP ping survives the sandbox.COMMENT
LOWexamples/tls12_decrypt_live.rs1//! Live end-to-end verification of TLS 1.2 Application-Data decryption.COMMENT
LOWexamples/diagnose_demo.rs1//! Renders the Diagnose tab from the demo fixture and writes a shareableCOMMENT
LOWexamples/ebpf_udp_v6_smoke.rs1//! Live smoke for eBPF Phase 2 **connected-UDP** IPv6 attributionCOMMENT
LOWexamples/diagnose_lab.rs1//! Headless lab driver: the real `App::tick` once a second, one line per tick.COMMENT
LOWexamples/tls_decrypt_live.rs1//! Live end-to-end verification of TLS 1.3 Application-Data decryption.COMMENT
LOWexamples/traceroute_under_sandbox.rs1//! Verify native UDP+TTL traceroute survives the sandbox.COMMENT
LOWexamples/pktap_probe.rs1// Manual validation tool for the macOS PKTAP attribution path.COMMENT
LOWscripts/verify-tls12-decrypt.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/demo-lite-traffic.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/demo-dense-traffic.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/demo-dense-traffic.sh21# SNI from partway through.COMMENT
LOWscripts/copr-setup.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/demo-egress-traffic.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/demo-egress-traffic.sh21# Destination names come from the TLS ClientHello, which means the handshakeCOMMENT
LOWscripts/demo-dense-env.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/release.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/demo-hero-env.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/release-guard.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/demo-lite-env.sh1#!/usr/bin/env bashCOMMENT
LOW.github/workflows/release.yml81 name: netwatch-windows-x86_64.exeCOMMENT
LOW.github/workflows/release.yml101 # tv_usec as `caplen` and segfault seconds into a capture.COMMENT
LOW.github/workflows/release.yml321 with:COMMENT
LOW.github/workflows/release.yml601COMMENT
LOW.github/workflows/ci.yml41 # not worth following are declared as `#![allow]` with a reason at theCOMMENT
LOW.github/workflows/ci.yml101 echo "CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_LINKER=arm-linux-gnueabi-gcc" >> $GITHUB_ENVCOMMENT
LOWsrc/graph.rs1//! Pluggable graph rendering for every chart in the app.COMMENT
LOWsrc/graph.rs61 /// line, which is the opposite of what a guide is for.COMMENT
LOWsrc/graph.rs101/// sitting on the baseline receives. 0.30 keeps a quiet series visible withoutCOMMENT
LOWsrc/graph.rs161/// Braille area plot at two samples per cell column.COMMENT
LOWsrc/graph.rs321/// time axis.COMMENT
LOWsrc/graph.rs381/// for latency: one 200ms spike against a 2ms baseline scales every normalCOMMENT
LOWsrc/graph.rs401 // p95 equals the median, every sample sits at the ceiling and the trackCOMMENT
LOWsrc/graph.rs481/// terminal — the series colour along the body of the plot, the brightCOMMENT
LOWsrc/graph.rs521/// the data is legible even where the fill is continuous. netwatch used to fadeCOMMENT
LOWsrc/config.rs61 /// Color theme (dark, light, ocean, solarized, dracula, nord)COMMENT
LOWsrc/config.rs81 /// The magnitude gradient. When `true`, every chart colours each cell byCOMMENT
LOWsrc/config.rs101COMMENT
LOWsrc/config.rs121COMMENT
LOWsrc/config.rs141 /// host = "api.staging.example.internal"COMMENT
LOWsrc/lib.rs1// Clippy lints deliberately allowed crate-wide. Each is a decision, not anCOMMENT
LOWsrc/lib.rs21// `too_many_arguments` — nine rendering and collection functions take 8–14COMMENT
LOWsrc/theme.rs41 /// active tab.COMMENT
LOWsrc/theme.rs121/// Defers entirely to the terminal's own palette: ANSI slots 0–15 forCOMMENT
LOWsrc/theme.rs421/// `inactive_tab` pass WCAG AA against the `#f5f5f2` panel fill whereCOMMENT
LOWsrc/logging.rs1//! File-only structured logging.COMMENT
LOWsrc/logging.rs21COMMENT
LOWsrc/owner_only.rs1//! Files and directories only their owner can open, for what netwatch saves:COMMENT
LOWsrc/metrics.rs1//! Prometheus `/metrics` + `/healthz` exporter (netwatch cloud Workstream C).COMMENT
LOWsrc/state.rs21use crate::ui::sort_picker::SortPickerState;COMMENT
LOWsrc/state.rs41 /// Rolling RX rate history per grouped (process, host) for the DashboardCOMMENT
LOWsrc/state.rs61/// Kept in its own substruct rather than scattered across [`AppUiState`] soCOMMENT
LOWsrc/state.rs81/// flags (help/settings/memory_stats/geo), transient status messages withCOMMENT
213 more matches not shown…
AI Slop Vocabulary5 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMscripts/verify-tls12-decrypt.sh7# harness against live traffic, across every AEAD suite we support, plus aCOMMENT
MEDIUM⚡scripts/verify-tls12-decrypt.sh48# ── Build the harness once ──────────────────────────────────────────────────COMMENT
MEDIUM⚡scripts/verify-tls12-decrypt.sh58# ── Run one scenario; classify the harness output ───────────────────────────COMMENT
MEDIUMsrc/collectors/incident.rs118 /// robust to `alert_history` being a bounded ring buffer: once it hitsCOMMENT
MEDIUMsrc/collectors/quic.rs292 // be robust to multi-frame layouts in the same packet.COMMENT
Empty Error Handlers3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHtests/diagnose/fault_lab.py131except OSError:passCODE
HIGHtests/diagnose/health_lab.py433except ProcessLookupError:CODE
HIGHscripts/demo/gen_tls12.py40except Exception:CODE
Unused Imports6 hits · 6 pts
SeverityFileLineSnippetContext
LOWtests/diagnose/fault_lab.py6CODE
LOWml/netwatch_ml/__init__.py7CODE
LOWml/netwatch_ml/__init__.py7CODE
LOWml/netwatch_ml/__init__.py7CODE
LOWml/netwatch_ml/load.py11CODE
LOWscripts/demo/gen_tls12.py9CODE
Excessive Try-Catch Wrapping6 hits · 6 pts
SeverityFileLineSnippetContext
LOWexamples/tls12_decrypt_live.rs93 except Exception:CODE
LOWexamples/tls12_decrypt_live.rs98except Exception: passCODE
LOWexamples/tls_decrypt_live.rs83 except Exception:CODE
LOWexamples/tls_decrypt_live.rs88except Exception: passCODE
LOWscripts/demo/gen_tls12.py34 except Exception as e:CODE
LOWscripts/demo/gen_tls12.py40except Exception:CODE
Example Usage Blocks4 hits · 6 pts
SeverityFileLineSnippetContext
LOWscripts/verify-tls12-decrypt.sh10# Usage:COMMENT
LOWscripts/demo-lite-traffic.sh21# Usage:COMMENT
LOWscripts/demo-dense-traffic.sh26# Usage:COMMENT
LOWscripts/demo-egress-traffic.sh27# Usage:COMMENT
Hyper-Verbose Identifiers3 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡ml/tests/test_load.py36 def test_loads_rows_with_nan_for_missing(self):CODE
LOW⚡ml/tests/test_load.py46 def test_refuses_a_header_that_does_not_match(self):CODE
LOW⚡ml/tests/test_load.py52 def test_refuses_a_tampered_schema_or_an_unexpected_one(self):CODE
Deep Nesting3 hits · 3 pts
SeverityFileLineSnippetContext
LOWtests/diagnose/health_lab.py629CODE
LOWtests/diagnose/health_lab.py714CODE
LOWtests/diagnose/health_lab.py414CODE
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWml/netwatch_ml/__init__.py9__all__ = ["Dataset", "SchemaMismatch", "load"]CODE