AI Slop Code RIsk Monitor

magic-wormhole/magic-wormhole

get things from one computer to another, safely

12.2 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for magic-wormhole/magic-wormhole, a Python project with 22,980 GitHub stars. SynthScan examined 29,626 lines of code across 115 source files, recording 259 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 12.2 (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.

12.2
Adjusted Signal
12.2
Raw Pattern Score
100%
Time Factor
2026-09-23
Last Push
23.0K
Stars
Python
Language
29.6K
Lines of Code
115
Files
259
Pattern Hits
2026-10-12
Scan Date
0.16
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 32.2/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 3.6/100 · LOW

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

Agent Over-Engineering Ratio 35.2/100 · MEDIUM

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

PR Review Velocity Impact 46.9/100 · MEDIUM

Which changes need focused human review? 259 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 1HIGH 17MEDIUM 11LOW 230

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

Hyper-Verbose Identifiers138 hits · 144 pts
SeverityFileLineSnippetContext
LOWversioneer.py691def git_versions_from_keywords(CODE
LOWversioneer.py1222def git_versions_from_keywords(STRING
LOW⚡misc/demo-journal.py217 def wormhole_dispatch_got_code(self, code, iid):CODE
LOW⚡misc/demo-journal.py225 def wormhole_dispatch_got_verifier(self, verifier, iid):CODE
LOW⚡misc/demo-journal.py228 def wormhole_dispatch_verified(self, _, iid):CODE
LOW⚡misc/demo-journal.py231 def wormhole_dispatch_got_data(self, data, iid):CODE
LOWsrc/wormhole/_rlcompleter.py67 def _commit_and_build_completions(self, text):CODE
LOWsrc/wormhole/_rlcompleter.py153def _input_code_with_completion(prompt, input_helper, reactor):CODE
LOWsrc/wormhole/transit.py83def build_sided_relay_handshake(key, side):CODE
LOWsrc/wormhole/_version.py184def git_versions_from_keywords(CODE
LOWsrc/wormhole/_nameplate.py164 def send_status_code_allocated(self):CODE
LOWsrc/wormhole/_nameplate.py170 def send_status_code_consumed(self):CODE
LOWsrc/wormhole/_interfaces.py389 def get_nameplate_completions(prefix):CODE
LOWsrc/wormhole/_interfaces.py424 def when_wordlist_is_available():CODE
LOWsrc/wormhole/_rendezvous.py178 def _initial_connection_failed(self, f):CODE
LOWsrc/wormhole/_rendezvous.py287 def _response_handle_allocated(self, msg):CODE
LOWsrc/wormhole/_rendezvous.py292 def _response_handle_nameplates(self, msg):CODE
LOWsrc/wormhole/_rendezvous.py332 def _response_handle_released(self, msg):CODE
LOWsrc/wormhole/_key.py120 def deliver_code_and_stashed_pake(self, code):CODE
LOWsrc/wormhole/_boss.py415 def send_status_confirmed_key(self, plaintext):CODE
LOWsrc/wormhole/_input.py46 def when_wordlist_is_available(self):CODE
LOWsrc/wormhole/_input.py94 def get_nameplate_completions(self, prefix):CODE
LOWsrc/wormhole/_input.py129 def _get_nameplate_completions(self, prefix):CODE
LOWsrc/wormhole/_input.py316 def get_nameplate_completions(self, prefix):CODE
LOWsrc/wormhole/_input.py326 def when_wordlist_is_available(self):CODE
LOW⚡src/wormhole/test/test_machines.py822def test_close_while_idle_nameplate():CODE
LOW⚡src/wormhole/test/test_machines.py828def test_close_while_idle_connected():CODE
LOW⚡src/wormhole/test/test_machines.py836def test_close_while_unclaimed():CODE
LOW⚡src/wormhole/test/test_machines.py842def test_close_while_claiming():CODE
LOW⚡src/wormhole/test/test_machines.py1201def test_close_while_idle_but_connected():CODE
LOW⚡src/wormhole/test/test_machines.py1207def test_close_while_mailbox_disconnected():CODE
LOW⚡src/wormhole/test/test_machines.py1213def test_close_while_reconnecting():CODE
LOWsrc/wormhole/test/test_machines.py504def test_connect_first_lister():CODE
LOWsrc/wormhole/test/test_machines.py531def test_connect_first_ask_twice():CODE
LOWsrc/wormhole/test/test_machines.py627def test_connect_first_allocator():CODE
LOWsrc/wormhole/test/test_machines.py700def test_connect_first_nameplate():CODE
LOWsrc/wormhole/test/test_machines.py726def test_reconnect_while_claiming():CODE
LOWsrc/wormhole/test/test_machines.py740def test_reconnect_while_claimed():CODE
LOWsrc/wormhole/test/test_machines.py763def test_reconnect_while_releasing():CODE
LOWsrc/wormhole/test/test_machines.py790def test_reconnect_while_done():CODE
LOWsrc/wormhole/test/test_machines.py857def test_close_while_claiming_but_disconnected():CODE
LOWsrc/wormhole/test/test_machines.py901def test_close_while_claimed_but_disconnected():CODE
LOWsrc/wormhole/test/test_machines.py928def test_close_while_releasing():CODE
LOWsrc/wormhole/test/test_machines.py954def test_close_while_releasing_but_disconnecteda():CODE
LOWsrc/wormhole/test/test_machines.py1017def test_close_while_done_but_disconnected():CODE
LOWsrc/wormhole/test/test_machines.py1070def test_connect_first_mailbox(): # connect before got_mailboxCODE
LOWsrc/wormhole/test/test_transit.py39async def test_there_might_also_be_none():CODE
LOWsrc/wormhole/test/test_transit.py74async def test_cancel_after_one_failure():CODE
LOWsrc/wormhole/test/test_transit.py124async def test_not_forever_cancel_early(forever):CODE
LOWsrc/wormhole/test/test_transit.py152def test_allocate_port_no_reuseaddr():CODE
LOWsrc/wormhole/test/test_transit.py204async def test_ignore_localhost_hint_orig():CODE
LOWsrc/wormhole/test/test_transit.py219async def test_ignore_localhost_hint():CODE
LOWsrc/wormhole/test/test_transit.py234async def test_keep_only_localhost_hint():CODE
LOWsrc/wormhole/test/test_transit.py270async def test_transit_key_already_set():CODE
LOWsrc/wormhole/test/test_transit.py464async def test_one_fail_one_success():CODE
LOWsrc/wormhole/test/test_transit.py669async def test_handshake_other_error():CODE
LOWsrc/wormhole/test/test_transit.py812async def test_receiver_rejected_politely():CODE
LOWsrc/wormhole/test/test_transit.py844async def test_receiver_rejected_rudely():CODE
LOWsrc/wormhole/test/test_transit.py875async def test_cancel_during_negotiation():CODE
LOWsrc/wormhole/test/test_transit.py1434async def test_success_direct_tor_relay():CODE
78 more matches not shown…
Empty Error Handlers17 hits · 85 pts
SeverityFileLineSnippetContext
HIGHversioneer.py388except NameError:CODE
HIGHversioneer.py1216except OSError:CODE
HIGHversioneer.py1456except OSError:CODE
HIGHversioneer.py1837except NotThisMethod:CODE
HIGHversioneer.py1857except NotThisMethod:CODE
HIGHversioneer.py1829except NotThisMethod:CODE
HIGHversioneer.py1848except NotThisMethod:CODE
HIGHsrc/wormhole/_version.py178except OSError:CODE
HIGHsrc/wormhole/_version.py651except NotThisMethod:CODE
HIGHsrc/wormhole/_version.py670except NotThisMethod:CODE
HIGHsrc/wormhole/_version.py676except NotThisMethod:CODE
HIGHsrc/wormhole/test/test_util.py56except AttributeError: # raised by mock.get_original()CODE
HIGHsrc/wormhole/test/test_cli.py1461except CancelledError:CODE
HIGHsrc/wormhole/test/test_cli.py1479except CancelledError:CODE
HIGHsrc/wormhole/test/dilate/test_api.py116except LonelyError:CODE
HIGHsrc/wormhole/cli/cmd_receive.py121except Exception:CODE
HIGHsrc/wormhole/cli/cmd_send.py96except Exception:CODE
Over-Commented Block37 hits · 37 pts
SeverityFileLineSnippetContext
LOW.appveyor.yml41after_test:COMMENT
LOWversioneer.py1881 # this fixes the "python setup.py develop" case (also 'install' andCOMMENT
LOWversioneer.py1921 #COMMENT
LOWmisc/demo-journal.py201 return b"ok"COMMENT
LOWmisc/web/timeline.js101 // [id], details={} }COMMENT
LOWdocs/conf.py1COMMENT
LOWdocs/conf.py141 # The paper size ('letterpaper' or 'a4paper').COMMENT
LOWsrc/wormhole/_rlcompleter.py101 if not self._committed_nameplate:COMMENT
LOWsrc/wormhole/_rlcompleter.py181 # user into satisfying the blocking read so we can exit.COMMENT
LOWsrc/wormhole/transit.py41COMMENT
LOWsrc/wormhole/transit.py281COMMENT
LOWsrc/wormhole/transit.py921# how should the Listener be managed? we want to shut it down when theCOMMENT
LOWsrc/wormhole/_rendezvous.py241 # CLOSE_STATUS_CODE_ABNORMAL_CLOSE, and delivers onClose() withoutCOMMENT
LOWsrc/wormhole/_boss.py201 # from the WormholeCOMMENT
LOWsrc/wormhole/wormhole.py21COMMENT
LOWsrc/wormhole/wormhole.py301 return wCOMMENT
LOWsrc/wormhole/test/test_cli.py241 f.write(b"fail")COMMENT
LOWsrc/wormhole/test/test_cli.py321 return pytest.skip(COMMENT
LOWsrc/wormhole/test/dilate/test_record.py141 assert n.mock_calls == [mock.call.start_handshake(),COMMENT
LOWsrc/wormhole/test/dilate/test_record.py161 # | 3 | | write_message | handshake | |COMMENT
LOWsrc/wormhole/cli/cmd_send.py181 # sit quietly until the receiver has typed in the code andCOMMENT
LOWsrc/wormhole/cli/cmd_send.py201 self._cancel_on_slow_verification_timer()COMMENT
LOWsrc/wormhole/cli/cmd_send.py321 # os.path.joined with the unicode args.what .COMMENT
LOWsrc/wormhole/cli/cmd_send.py341 # * we're running on windowsCOMMENT
LOWsrc/wormhole/_dilation/inbound.py141COMMENT
LOWsrc/wormhole/_dilation/connection.py21# The next object up knows whether it's expecting a Handshake or a message. ItCOMMENT
LOWsrc/wormhole/_dilation/connection.py61# * send "sided relay handshake": "please relay TOKEN for side SIDE\n"COMMENT
LOWsrc/wormhole/_dilation/outbound.py21# to reestablish a new one), registered subchannels will be paused, butCOMMENT
LOWsrc/wormhole/_dilation/outbound.py41# unusual because we have multiple Subchannels that get merged into theCOMMENT
LOWsrc/wormhole/_dilation/outbound.py61# Producers will be paused, and others will be resumedCOMMENT
LOWsrc/wormhole/_dilation/outbound.py81# queues some data on the TCP connection (and then might callCOMMENT
LOWsrc/wormhole/_dilation/outbound.py101#COMMENT
LOWsrc/wormhole/_dilation/outbound.py121# * keep a set of IPushProducers which are paused, a second set ofCOMMENT
LOWsrc/wormhole/_dilation/outbound.py141#COMMENT
LOWsrc/wormhole/_dilation/subchannel.py21# length prefix itself), so the padded message must be less than 2**32 bytesCOMMENT
LOWsrc/wormhole/_dilation/connector.py341 made_direct = TrueCOMMENT
LOWsrc/wormhole/_dilation/manager.py141# in WANTING, then we process all previously-queued inbound DILATE-nCOMMENT
Excessive Try-Catch Wrapping18 hits · 22 pts
SeverityFileLineSnippetContext
LOWsrc/wormhole/_rlcompleter.py43 except Exception as e:CODE
MEDIUMsrc/wormhole/_rlcompleter.py40def completer(self, text, state):CODE
LOWsrc/wormhole/transit.py138 except Exception as e:CODE
MEDIUMsrc/wormhole/transit.py135def dataReceived(self, data):CODE
LOWsrc/wormhole/_rendezvous.py32 except Exception:CODE
LOWsrc/wormhole/_rendezvous.py204 except Exception as e:CODE
LOWsrc/wormhole/_rendezvous.py231 except Exception as e:CODE
LOWsrc/wormhole/tor_manager.py107 except Exception:CODE
LOWsrc/wormhole/eventual.py32 except Exception:CODE
LOWsrc/wormhole/ipaddrs.py60 except Exception:CODE
LOWsrc/wormhole/cli/cmd_receive.py121 except Exception:CODE
MEDIUMsrc/wormhole/cli/cmd_receive.py118def _bad(f):CODE
LOWsrc/wormhole/cli/cmd_ssh.py52 except Exception:CODE
LOWsrc/wormhole/cli/cmd_send.py96 except Exception:CODE
MEDIUMsrc/wormhole/cli/cmd_send.py93def _bad(f):CODE
LOWsrc/wormhole/cli/cli.py179 except Exception as e:CODE
LOWsrc/wormhole/_dilation/outbound.py353 except Exception:CODE
LOWsrc/wormhole/_dilation/outbound.py360 except Exception:CODE
Deep Nesting18 hits · 18 pts
SeverityFileLineSnippetContext
LOWversioneer.py1194CODE
LOWversioneer.py1427CODE
LOWversioneer.py1752CODE
LOWversioneer.py2172CODE
LOWsrc/wormhole/transit.py681CODE
LOWsrc/wormhole/_version.py156CODE
LOWsrc/wormhole/_version.py602CODE
LOWsrc/wormhole/tor_manager.py32CODE
LOWsrc/wormhole/test/test_ssh.py44CODE
LOWsrc/wormhole/test/test_cli.py416CODE
LOWsrc/wormhole/test/test_cli.py803CODE
LOWsrc/wormhole/cli/cmd_receive.py434CODE
LOWsrc/wormhole/cli/cmd_ssh.py15CODE
LOWsrc/wormhole/cli/cmd_send.py293CODE
LOWsrc/wormhole/_dilation/connection.py213CODE
LOWsrc/wormhole/_dilation/connection.py635CODE
LOWsrc/wormhole/_dilation/manager.py460CODE
LOWsrc/wormhole/_dilation/manager.py583CODE
AI Slop Vocabulary7 hits · 15 pts
SeverityFileLineSnippetContext
LOWversioneer.py533 # each be defined on a line of their own. _version.py will just callCOMMENT
LOWsrc/wormhole/transit.py483 # close-on-exec because we close it right away. So just add SO_REUSEADDR.COMMENT
MEDIUMsrc/wormhole/_status.py108# note that the tests (e.g. test_api.py) leverage the order of theseCOMMENT
LOWsrc/wormhole/_version.py26 # each be defined on a line of their own. _version.py will just callCOMMENT
MEDIUMsrc/wormhole/test/dilate/test_record.py302 # structures can be set up and paired properly. EssentiallyCOMMENT
MEDIUMsrc/wormhole/_dilation/manager.py29# note that these are strings, not numbers, to facilitateCOMMENT
LOWsrc/wormhole/_dilation/manager.py975 # invoked; upstream calls are basically just call-through -- soCOMMENT
Unused Imports12 hits · 12 pts
SeverityFileLineSnippetContext
LOWversioneer.py318CODE
LOWversioneer.py318CODE
LOWversioneer.py318CODE
LOWmisc/dump-timing.py5CODE
LOWmisc/dump-timing.py5CODE
LOWsrc/wormhole/__init__.py1CODE
LOWsrc/wormhole/__init__.py2CODE
LOWsrc/wormhole/__init__.py3CODE
LOWsrc/wormhole/__init__.py3CODE
LOWsrc/wormhole/__init__.py4CODE
LOWsrc/wormhole/_dilation/_noise.py5CODE
LOWsrc/wormhole/_dilation/_noise.py11CODE
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALsrc/wormhole/test/test_wormhole.py699 w1._boss._RC._ws.transport.loseConnection()CODE
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMversioneer.py514# This file is released into the public domain.COMMENT
MEDIUMdocs/conf.py5# This file is execfile()d with the current directory set to itsCOMMENT
MEDIUMsrc/wormhole/_version.py7# This file is released into the public domain.COMMENT
AI Structural Patterns5 hits · 4 pts
SeverityFileLineSnippetContext
LOWmisc/demo-journal.py114CODE
LOWsrc/wormhole/_key.py46CODE
LOWsrc/wormhole/wormhole.py259CODE
LOWsrc/wormhole/test/test_ipaddrs.py111CODE
LOWsrc/wormhole/test/test_cli.py416CODE
Modern AI Meta-Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/wormhole/_dilation/connection.py560 # when we move to the sans-io event-driven scheme, this queueCOMMENT
Modern Structural Boilerplate2 hits · 2 pts
SeverityFileLineSnippetContext
LOWsrc/wormhole/__init__.py9__all__ = [CODE
LOWsrc/wormhole/_key.py17__all__ = ["derive_key", "derive_phase_key", "CryptoError", "Key"]CODE