AI Slop Code Risk Monitor

tinode/chat

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

Instant messaging platform. Backend in Go. Clients: Swift iOS, Java Android, JS webapp, scriptable command line; chatbots

2.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for tinode/chat, a Go project with 13,546 GitHub stars. SynthScan examined 76,816 lines of code across 177 source files, recording 141 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 2.3 (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.3
Adjusted Signal
2.3
Raw Pattern Score
100%
Time Factor
2026-10-25
Last Push
13.5K
Stars
Go
Language
76.8K
Lines of Code
177
Files
141
Pattern Hits
2026-10-31
Scan Date
0.01
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? 76 finding(s).

Hallucinated Dependency & Supply Chain Risk 3.6/100 · LOW

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

Agent Over-Engineering Ratio 3.1/100 · LOW

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

PR Review Velocity Impact 10.2/100 · LOW

Which changes need focused human review? 141 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 2MEDIUM 7LOW 132

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 141 distinct pattern matches across 11 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.

Fake / Example Data35 hits · 46 pts
SeverityFileLineSnippetContext
LOWrest-auth/auth.py18 # here so authentication data can be compared with dummy_data values.COMMENT
LOW⚡rest-auth/auth.py49 if uname in dummy_data:CODE
LOW⚡rest-auth/auth.py50 if dummy_data[uname]['password'] != password:CODE
LOW⚡rest-auth/auth.py53 if 'uid' in dummy_data[uname]:CODE
LOW⚡rest-auth/auth.py57 'uid': dummy_data[uname]['uid'],CODE
LOW⚡rest-auth/auth.py58 'authlvl': dummy_data[uname]['authlvl'],CODE
LOW⚡rest-auth/auth.py59 'features': dummy_data[uname]['features']CODE
LOW⚡rest-auth/auth.py66 'authlvl': dummy_data[uname]['authlvl'],CODE
LOW⚡rest-auth/auth.py67 'tags': dummy_data[uname]['tags'],CODE
LOW⚡rest-auth/auth.py68 'features': dummy_data[uname]['features']CODE
LOW⚡rest-auth/auth.py71 'auth': dummy_data[uname]['auth'],CODE
LOW⚡rest-auth/auth.py72 'anon': dummy_data[uname]['anon'],CODE
LOW⚡rest-auth/auth.py73 'public': dummy_data[uname]['public'],CODE
LOW⚡rest-auth/auth.py74 'private': dummy_data[uname]['private']CODE
LOW⚡rest-auth/auth.py112 if uname not in dummy_data:CODE
LOW⚡rest-auth/auth.py115 if dummy_data[uname]['password'] != password:CODE
LOW⚡rest-auth/auth.py117 if 'uid' in dummy_data[uname]:CODE
LOW⚡rest-auth/auth.py122 dummy_data[uname]['uid'] = rec['uid']CODE
LOW⚡rest-auth/auth.py123 with open('dummy_data.json', 'w') as outfile:CODE
LOW⚡rest-auth/auth.py124 json.dump(dummy_data, outfile, indent=2, sort_keys=True)CODE
LOWrest-auth/auth.py11dummy_data = {}CODE
LOWrest-auth/auth.py151 with open('dummy_data.json') as infile:CODE
LOWrest-auth/auth.py152 dummy_data = json.load(infile)CODE
LOWrest-auth/test_auth.py13 self.original_dummy_data = auth.dummy_dataCODE
LOWrest-auth/test_auth.py16 auth.dummy_data = {CODE
LOW⚡rest-auth/test_auth.py31 auth.dummy_data = self.original_dummy_dataCODE
LOW⚡rest-auth/test_auth.py47 auth.dummy_data['alice']['uid'] = 'usrAlice'CODE
LOW⚡rest-auth/test_auth.py101 self.assertNotIn('uid', auth.dummy_data['alice'])CODE
LOW⚡rest-auth/test_auth.py111 self.assertEqual(auth.dummy_data['alice']['uid'], 'usrAlice')CODE
LOW⚡rest-auth/test_auth.py112 open_file.assert_called_once_with('dummy_data.json', 'w')CODE
LOWdocker/README.md218| `SMTP_SENDER` | string | | [RFC 5322](https://tools.ietf.org/html/rfc5322) email address to use in the `FROM` field oCODE
LOWserver/db/common/common_test.go295 "Name": "John Doe",CODE
LOWdocs/API.md616 content: "Lorem ipsum dolor sit amet, consectetur adipisci", // The first 80 characters of the message content as plaiCODE
LOWdocs/API.md616 content: "Lorem ipsum dolor sit amet, consectetur adipisci", // The first 80 characters of the message content as plaiCODE
LOWdocs/thecard.md11 fn: "John Doe", // string, formatted name of the person or topic.CODE
Over-Commented Block39 hits · 39 pts
SeverityFileLineSnippetContext
LOWdocker/docker-compose/single-instance.yml21 # "EXT_CONFIG": "/etc/tinode/tinode.conf"COMMENT
LOWdocker/docker-compose/cluster.yml21COMMENT
LOWtn-cli/sample-script.txt1# This script shows what can be done with tn-cli. Run it asCOMMENT
LOWtn-cli/sample-macro-script.txt1# This script shows what can be done with tn-cli macros. Run it asCOMMENT
LOWpbx/model_grpc.pb.go361// PluginServer is the server API for Plugin service.COMMENT
LOWserver/hub.go161 return hCOMMENT
LOWserver/hub.go381 return trueCOMMENT
LOWserver/pres.go81// This topic got a request from a 'me' topic to start/stop sending presence updates.COMMENT
LOWserver/pres.go301 RcptTo: subs[i].Topic,COMMENT
LOWserver/session.go121 // Synchronizes access to session store in cluster mode:COMMENT
LOWserver/topic.go121 proxy chan *ClusterRespCOMMENT
LOWserver/topic.go1601// asChan - true if the user is subscribing to a channel topicCOMMENT
LOWserver/init_topic.go221 // 'fnd' has no owner, t.owner = nilCOMMENT
LOWserver/api_key.go21//COMMENT
LOWserver/main.go101 // Mount point where static content is served, http://host-name<defaultStaticMount>COMMENT
LOWserver/main.go121// flag to compiler command line:COMMENT
LOWserver/main.go261type configType struct {COMMENT
LOWserver/main.go301 // URL path for exposing runtime stats. Disabled if the path is blank.COMMENT
LOWserver/validate/validator.go21 // IsInitialized returns true if the validator is initialized.COMMENT
LOWserver/auth/auth.go241 AddRecord(rec *Rec, secret []byte, remoteAddr string) (*Rec, error)COMMENT
LOWserver/push/common/typedef.go181COMMENT
LOWserver/push/common/typedef.go201 // to redeliver it.COMMENT
LOWserver/push/common/typedef.go241 ApnsPushTypeAlert ApnsPushTypeType = "alert"COMMENT
LOWserver/push/common/typedef.go301 ErrorUnspecified = "UNSPECIFIED_ERROR"COMMENT
LOWserver/push/common/typedef.go321 // App instance was unregistered from FCM (HTTP error code = 404). This usually means that the token used is noCOMMENT
LOWserver/push/common/typedef.go341 // Sending limit exceeded for the message target (HTTP error code = 429). An extension of type google.rpc.QuotaFailureCOMMENT
LOWserver/db/adapter.go41COMMENT
LOWserver/db/adapter.go101 // TopicGet loads a single topic by name, if it exists. If the topic does not exist the call returns (nil, nil)COMMENT
LOWserver/db/adapter.go141 SubsUpdate(topic string, user t.Uid, update map[string]any) errorCOMMENT
LOWserver/db/adapter.go181 // FileStartUpload initializes a file upload.COMMENT
LOWserver/db/rethinkdb/blank.go1//go:build !rethinkdbCOMMENT
LOWserver/db/mongodb/blank.go1//go:build !mongodbCOMMENT
LOWserver/db/postgres/schema.sql1# The MySQL and PostrgreSQL schemas are identical save for differences in SQL flavors.COMMENT
LOWserver/db/postgres/blank.go1//go:build !postgresCOMMENT
LOWserver/db/mysql/blank.go1//go:build !mysqlCOMMENT
LOWserver/ringhash/ringhash_test.go21 // B2 = 880502322 -> BCOMMENT
LOWserver/ringhash/ringhash_test.go81 // Collision test: these strings generate CRC32 collisionsCOMMENT
LOWdocs/API.md1281 // of a deleted message, optional.COMMENT
LOWmonitoring/exporter/main.go41}COMMENT
Excessive Try-Catch Wrapping18 hits · 22 pts
SeverityFileLineSnippetContext
LOWtn-cli/client.py67 except Exception as err:CODE
LOWtn-cli/client.py79 except Exception as err:CODE
LOWtn-cli/client.py193 except Exception as err:CODE
LOWtn-cli/client.py273 except Exception as ex:CODE
MEDIUMtn-cli/client.py72def read_cookie():CODE
LOWtn-cli/tn_globals.py100 except Exception as err:CODE
LOWtn-cli/input_handler.py62 except Exception as ex:CODE
LOWtn-cli/commands.py426 except Exception as ex:CODE
LOW⚡tn-cli/commands.py446 except Exception as ex:CODE
LOW⚡tn-cli/commands.py456 except Exception as ex:CODE
LOWtn-cli/commands.py595 except Exception:CODE
LOWtn-cli/commands.py606 except Exception as err:CODE
LOWtn-cli/commands.py790 except Exception as err:CODE
MEDIUMtn-cli/commands.py405def upload(id, cmd, args):CODE
LOWchatbot/python/chatbot.py91 except Exception as err:CODE
LOWchatbot/python/chatbot.py331 except Exception as err:CODE
LOWchatbot/python/chatbot.py362 except Exception as err:CODE
MEDIUMchatbot/python/chatbot.py252def client_message_loop(stream):CODE
Deep Nesting14 hits · 14 pts
SeverityFileLineSnippetContext
LOWtn-cli/client.py93CODE
LOWtn-cli/client.py198CODE
LOWtn-cli/utils.py44CODE
LOWtn-cli/input_handler.py28CODE
LOWtn-cli/commands.py50CODE
LOWtn-cli/commands.py258CODE
LOWtn-cli/commands.py366CODE
LOWtn-cli/commands.py432CODE
LOWtn-cli/commands.py485CODE
LOWtn-cli/commands.py602CODE
LOWtn-cli/commands.py702CODE
LOWtn-cli/commands.py433CODE
LOWchatbot/python/chatbot.py78CODE
LOWchatbot/python/chatbot.py252CODE
Self-Referential Comments4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMdocker/tinode/entrypoint.sh84 # Create an empty firebase-init.jsCOMMENT
MEDIUMtn-cli/utils.py126# Create a drafty message with an *in-band* attachment.COMMENT
MEDIUMpy_grpc/tinode_grpc/model_pb2_grpc.py84 # This class is part of an EXPERIMENTAL API.COMMENT
MEDIUMpy_grpc/tinode_grpc/model_pb2_grpc.py273 # This class is part of an EXPERIMENTAL API.COMMENT
Unused Imports10 hits · 10 pts
SeverityFileLineSnippetContext
LOWtn-cli/client.py3CODE
LOWtn-cli/client.py15CODE
LOWtn-cli/tn_globals.py3CODE
LOWtn-cli/tn-cli.py6CODE
LOWtn-cli/utils.py3CODE
LOWtn-cli/input_handler.py3CODE
LOWtn-cli/commands.py3CODE
LOWchatbot/python/chatbot.py4CODE
LOWpy_grpc/tinode_grpc/__init__.py1CODE
LOWpy_grpc/tinode_grpc/__init__.py2CODE
Empty Error Handlers2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHtn-cli/commands.py595except Exception:CODE
HIGHchatbot/python/chatbot.py175except queue.Empty:CODE
AI Structural Patterns9 hits · 9 pts
SeverityFileLineSnippetContext
LOWpy_grpc/tinode_grpc/model_pb2_grpc.py90CODE
LOWpy_grpc/tinode_grpc/model_pb2_grpc.py107CODE
LOWpy_grpc/tinode_grpc/model_pb2_grpc.py124CODE
LOWpy_grpc/tinode_grpc/model_pb2_grpc.py279CODE
LOWpy_grpc/tinode_grpc/model_pb2_grpc.py296CODE
LOWpy_grpc/tinode_grpc/model_pb2_grpc.py313CODE
LOWpy_grpc/tinode_grpc/model_pb2_grpc.py330CODE
LOWpy_grpc/tinode_grpc/model_pb2_grpc.py347CODE
LOWpy_grpc/tinode_grpc/model_pb2_grpc.py364CODE
Hyper-Verbose Identifiers5 hits · 7 pts
SeverityFileLineSnippetContext
LOW⚡rest-auth/test_auth.py39 def test_parse_secret_preserves_colons_in_password(self):CODE
LOW⚡rest-auth/test_auth.py46 def test_auth_returns_existing_account(self):CODE
LOWrest-auth/test_auth.py62 def test_malformed_requests_return_api_errors(self):CODE
LOW⚡rest-auth/test_auth.py94 def test_link_rejects_wrong_password_without_mutation(self):CODE
LOW⚡rest-auth/test_auth.py103 def test_link_persists_uid_after_valid_password(self):CODE
Redundant / Tautological Comments4 hits · 7 pts
SeverityFileLineSnippetContext
LOWdocker/exporter/entrypoint.sh3# Check if environment variables (provided as argument list) are set.COMMENT
LOWtn-cli/tn-cli.py111 # Check if background session is specified explicitly. If not set it toCOMMENT
LOWtn-cli/input_handler.py48 # Check if we have cached input from a previous multiline command.COMMENT
LOW⚡tn-cli/commands.py466 # Read file chunksCOMMENT
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWserver/main.go781 // TODO: implement serving large files over gRPC, then remove globals.servingAt.COMMENT