AI Slop Code Risk Monitor

GAM-team/GAM

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

command line management for Google Workspace

2.5 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for GAM-team/GAM, a Python project with 4,369 GitHub stars. SynthScan examined 123,026 lines of code across 292 source files, recording 181 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 2.5 (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.5
Adjusted Signal
2.5
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
4.4K
Stars
Python
Language
123.0K
Lines of Code
292
Files
181
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 8.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.4/100 · LOW

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

Agent Over-Engineering Ratio 4.1/100 · LOW

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

PR Review Velocity Impact 11.9/100 · LOW

Which changes need focused human review? 181 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 20MEDIUM 16LOW 145

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 181 distinct pattern matches across 16 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.

Over-Commented Block49 hits · 49 pts
SeverityFileLineSnippetContext
LOWwiki/Basic-Items.md101 ms|microsoft|openoffice|COMMENT
LOWwiki/Users-Gmail-Labels.md21 See: https://docs.python.org/3/library/re.htmlCOMMENT
LOWwiki/legacy/l-GAM-Discussion-Group.md1# [GAM Discussion Group](https://groups.google.com/forum/#!forum/google-apps-manager)COMMENT
LOW.github/stale.yml41# Comment to post when closing a stale Issue or Pull Request.COMMENT
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOWsrc/GamUpdate.txt6581COMMENT
LOWsrc/GamCommands.txt101<EventColorName> ::=COMMENT
LOWsrc/tools/mkGamRef.py1#!/usr/bin/env python3COMMENT
LOWsrc/tools/mkGamRef.py21# commands and RHS of parameter productions are links pointing to theCOMMENT
LOWsrc/tools/mkGamRef.py181# Input Token Start gam <BNF>COMMENT
LOWsrc/tools/hooks/hook-httplib2.py1# ------------------------------------------------------------------COMMENT
LOWsrc/tools/hooks/hook-googleapiclient.model.py1# ------------------------------------------------------------------COMMENT
LOWsrc/gam/__main__.py1#!/usr/bin/env python3COMMENT
LOWsrc/gam/gamlib/glgapi.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glapi.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glapi.py661 'scope': 'https://www.googleapis.com/auth/classroom.rosters'},COMMENT
LOWsrc/gam/gamlib/glglobals.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glglobals.py21# The following GM_XXX constants are arbitrary but must be uniqueCOMMENT
LOWsrc/gam/gamlib/glskus.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glclargs.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glaction.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/gluprop.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/gluprop.py21# notesCOMMENT
LOWsrc/gam/gamlib/gluprop.py41# getChoice([CUSTOM_TYPE_CUSTOM[PTKW_CL_TYPE_KEYWORD]], defaultChoice=None)COMMENT
LOWsrc/gam/gamlib/gluprop.py61# getKeywordAttribute(CUSTOM_TYPE_DIFFERENT_KEYWORD, attrdict)COMMENT
LOWsrc/gam/gamlib/yubikey.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/__init__.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glmsgs.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glentity.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glcfg.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glcfg.py201# CI API Group members max page size when view=FULLCOMMENT
LOWsrc/gam/gamlib/glverlibs.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glindent.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/gamlib/glgdata.py1# -*- coding: utf-8 -*-COMMENT
LOWsrc/gam/atom/auth.py1#!/usr/bin/env pythonCOMMENT
LOWsrc/gam/atom/http_core.py1#!/usr/bin/env pythonCOMMENT
LOWsrc/gam/atom/core.py1#!/usr/bin/env pythonCOMMENT
LOWsrc/gam/atom/core.py121 """COMMENT
LOWsrc/gam/gdata/service.py1#!/usr/bin/pythonCOMMENT
LOWsrc/gam/gdata/urlfetch.py1#!/usr/bin/pythonCOMMENT
LOWsrc/gam/gdata/__init__.py1#!/usr/bin/pythonCOMMENT
LOWsrc/gam/gdata/apps/service.py1#!/usr/bin/pythonCOMMENT
LOWsrc/gam/gdata/apps/__init__.py1#!/usr/bin/pythonCOMMENT
LOWsrc/gam/gdata/apps/contacts/service.py1#!/usr/bin/env pythonCOMMENT
LOWsrc/gam/gdata/apps/contacts/__init__.py1#!/usr/bin/env pythonCOMMENT
LOWsrc/gam/gdata/apps/audit/service.py1#!/usr/bin/env pythonCOMMENT
LOWsrc/gam/gdata/alt/app_engine.py1#!/usr/bin/pythonCOMMENT
LOWsrc/gam/gdata/alt/__init__.py1#!/usr/bin/pythonCOMMENT
LOWsrc/gam/gdata/alt/appengine.py1#!/usr/bin/pythonCOMMENT
Docstring Block Structure9 hits · 45 pts
SeverityFileLineSnippetContext
HIGHsrc/gam/atom/service.py514Convert a dictionary of URL arguments into a URL parameter string. This function is deprcated, use atom.url.Url insSTRING
HIGHsrc/gam/atom/service.py541Converts a uri string and a collection of parameters into a URI. This function is deprcated, use atom.url.Url insteSTRING
HIGHsrc/gam/gdata/service.py363Fetches and sets the OAuth request token and returns it. Args: scopes: string or list of string base URL(s) oSTRING
HIGHsrc/gam/gdata/service.py441Generates URL at which user will login to authorize the request token. Args: request_token: gdata.auth.OASTRING
HIGHsrc/gam/gdata/service.py496Upgrades the authorized request token to an access token and returns it Args: authorized_request_token: gSTRING
HIGHsrc/gam/gdata/service.py874Upgrades a single use AuthSub token to a session token. Args: token: A gdata.auth.AuthSubToken or gdata.auth.STRING
HIGHsrc/gam/gdata/__init__.py622Logic for populating members of a BatchEntry and adding to the feed. If the entry is not a BatchEntry, it is conveSTRING
HIGHsrc/gam/gdata/__init__.py718Adds a delete request to the batch request feed. This method takes either the url_string which is the atom id of thSTRING
HIGHsrc/gam/gdata/alt/app_engine.py62Saves the serialized auth token in the datastore. The token is also stored in memcache to speed up retrieval on a cacSTRING
Deep Nesting33 hits · 33 pts
SeverityFileLineSnippetContext
LOWsrc/tools/mkGamRef.py105CODE
LOWsrc/gam/gamlib/glapi.py861CODE
LOWsrc/gam/gamlib/yubikey.py93CODE
LOWsrc/gam/gamlib/yubikey.py117CODE
LOWsrc/gam/gamlib/yubikey.py175CODE
LOWsrc/gam/atom/service.py351CODE
LOWsrc/gam/atom/service.py674CODE
LOWsrc/gam/atom/service.py699CODE
LOWsrc/gam/atom/service.py134CODE
LOWsrc/gam/atom/service.py329CODE
LOWsrc/gam/atom/http_core.py503CODE
LOWsrc/gam/atom/http_core.py326CODE
LOWsrc/gam/atom/__init__.py204CODE
LOWsrc/gam/atom/__init__.py294CODE
LOWsrc/gam/atom/__init__.py1381CODE
LOWsrc/gam/atom/core.py94CODE
LOWsrc/gam/atom/core.py180CODE
LOWsrc/gam/atom/core.py225CODE
LOWsrc/gam/atom/core.py262CODE
LOWsrc/gam/atom/core.py294CODE
LOWsrc/gam/atom/mock_http_core.py169CODE
LOWsrc/gam/atom/url.py19CODE
LOWsrc/gam/atom/http.py277CODE
LOWsrc/gam/atom/http.py337CODE
LOWsrc/gam/gdata/service.py436CODE
LOWsrc/gam/gdata/service.py492CODE
LOWsrc/gam/gdata/service.py723CODE
LOWsrc/gam/gdata/service.py1006CODE
LOWsrc/gam/gdata/service.py1235CODE
LOWsrc/gam/gdata/service.py1393CODE
LOWsrc/gam/gdata/urlfetch.py125CODE
LOWsrc/gam/gdata/urlfetch.py62CODE
LOWsrc/gam/gdata/alt/appengine.py90CODE
Self-Referential Comments12 hits · 33 pts
SeverityFileLineSnippetContext
MEDIUM⚡src/tools/hooks/hook-httplib2.py4# This file is distributed under the terms of the GNU General PublicCOMMENT
MEDIUM⚡src/tools/hooks/hook-googleapiclient.model.py4# This file is distributed under the terms of the GNU General PublicCOMMENT
MEDIUMsrc/gam/atom/auth.py18# This module is used for version 2 of the Google Data APIs.COMMENT
MEDIUMsrc/gam/atom/service.py531 # Create a list of tuples containing the escaped version of theCOMMENT
MEDIUMsrc/gam/atom/service.py675 """This method is deprecated, use atom.http._send_data_part"""STRING
MEDIUMsrc/gam/atom/http_core.py18# This module is used for version 2 of the Google Data APIs.COMMENT
MEDIUMsrc/gam/atom/token_store.py7"""This module provides a TokenStore class which is designed to manageSTRING
MEDIUMsrc/gam/atom/core.py18# This module is used for version 2 of the Google Data APIs.COMMENT
MEDIUMsrc/gam/atom/mock_http_core.py9# This module is used for version 2 of the Google Data APIs.COMMENT
MEDIUMsrc/gam/atom/http_interface.py7"""This module provides a common interface for all HTTP requests.STRING
MEDIUMsrc/gam/atom/data.py9# This module is used for version 2 of the Google Data APIs.COMMENT
MEDIUMsrc/gam/gdata/service.py1184 # Create a closure which will convert an XML string to the class ofCOMMENT
Cross-File Repetition6 hits · 30 pts
SeverityFileLineSnippetContext
HIGHsrc/gam/atom/__init__.py0an "interface" providing methods to find link elements gdata entry elements often contain multiple links which differ inSTRING
HIGHsrc/gam/atom/data.py0an "interface" providing methods to find link elements gdata entry elements often contain multiple links which differ inSTRING
HIGHsrc/gam/gdata/__init__.py0an "interface" providing methods to find link elements gdata entry elements often contain multiple links which differ inSTRING
HIGHsrc/gam/atom/http.py0performs an http call to the server, supports get, post, put, and delete. usage example, perform and http get on http://STRING
HIGHsrc/gam/gdata/urlfetch.py0performs an http call to the server, supports get, post, put, and delete. usage example, perform and http get on http://STRING
HIGHsrc/gam/gdata/alt/appengine.py0performs an http call to the server, supports get, post, put, and delete. usage example, perform and http get on http://STRING
AI Structural Patterns27 hits · 27 pts
SeverityFileLineSnippetContext
LOWsrc/gam/atom/mock_service.py122CODE
LOWsrc/gam/atom/__init__.py563CODE
LOWsrc/gam/atom/__init__.py1112CODE
LOWsrc/gam/atom/__init__.py1140CODE
LOWsrc/gam/atom/__init__.py1203CODE
LOWsrc/gam/atom/__init__.py1265CODE
LOWsrc/gam/gdata/service.py186CODE
LOWsrc/gam/gdata/service.py939CODE
LOWsrc/gam/gdata/__init__.py401CODE
LOWsrc/gam/gdata/__init__.py541CODE
LOWsrc/gam/gdata/__init__.py602CODE
LOWsrc/gam/gdata/__init__.py811CODE
LOWsrc/gam/gdata/apps/__init__.py89CODE
LOWsrc/gam/gdata/apps/__init__.py186CODE
LOWsrc/gam/gdata/apps/__init__.py218CODE
LOWsrc/gam/gdata/apps/__init__.py256CODE
LOWsrc/gam/gdata/apps/__init__.py291CODE
LOWsrc/gam/gdata/apps/__init__.py326CODE
LOWsrc/gam/gdata/apps/__init__.py358CODE
LOWsrc/gam/gdata/apps/__init__.py390CODE
LOWsrc/gam/gdata/apps/__init__.py422CODE
LOWsrc/gam/gdata/apps/__init__.py477CODE
LOWsrc/gam/gdata/apps/__init__.py507CODE
LOWsrc/gam/gdata/apps/contacts/__init__.py392CODE
LOWsrc/gam/gdata/apps/contacts/__init__.py533CODE
LOWsrc/gam/gdata/apps/contacts/__init__.py633CODE
LOWsrc/gam/gdata/apps/contacts/__init__.py735CODE
Structural Annotation Overuse17 hits · 26 pts
SeverityFileLineSnippetContext
LOWwiki/WhatIsDPoP.md90#### Step 1: Create the Secure Enclave KeyCOMMENT
LOWwiki/WhatIsDPoP.md104#### Step 2: Verify the Key ExistsCOMMENT
LOWwiki/WhatIsDPoP.md112#### Step 3: Configure GAMCOMMENT
LOWwiki/WhatIsDPoP.md133#### Step 1: Generate a TPM-Backed KeyCOMMENT
LOWwiki/WhatIsDPoP.md157#### Step 2: Verify the KeyCOMMENT
LOWwiki/WhatIsDPoP.md165#### Step 3: Configure GAMCOMMENT
LOWwiki/WhatIsDPoP.md189#### Step 1: Install System PackagesCOMMENT
LOWwiki/WhatIsDPoP.md201#### Step 2: Create and Persist a Signing KeyCOMMENT
LOWwiki/WhatIsDPoP.md225#### Step 3: Verify the KeyCOMMENT
LOWwiki/WhatIsDPoP.md233#### Step 4: Configure GAMCOMMENT
LOWwiki/WhatIsDPoP.md264#### Step 1: Generate a Key on the YubiKeyCOMMENT
LOWwiki/WhatIsDPoP.md282#### Step 2: VerifyCOMMENT
LOWwiki/WhatIsDPoP.md288#### Step 3: Configure GAMCOMMENT
LOWwiki/WhatIsDPoP.md322#### Step 1: Generate a PEM KeyCOMMENT
LOWwiki/WhatIsDPoP.md329#### Step 2: Configure GAMCOMMENT
LOWwiki/WhatIsDPoP.md343### Step 1: Test Your ConfigurationCOMMENT
LOWwiki/WhatIsDPoP.md388### Step 2: Create DPoP-Bound OAuth CredentialsCOMMENT
Empty Error Handlers5 hits · 25 pts
SeverityFileLineSnippetContext
HIGHsrc/gam/__main__.py36except (IOError, ValueError):CODE
HIGHsrc/gam/atom/http_core.py34except ImportError:CODE
HIGHsrc/gam/atom/http_core.py486except ValueError: # header_line missing from connection._bufferCODE
HIGHsrc/gam/atom/http.py41except ImportError:CODE
HIGHsrc/gam/atom/http.py145except ValueError: # header_line missing from connection._bufferCODE
Decorative Section Separators4 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUM⚡src/tools/hooks/hook-httplib2.py1# ------------------------------------------------------------------COMMENT
MEDIUM⚡src/tools/hooks/hook-httplib2.py11# ------------------------------------------------------------------COMMENT
MEDIUM⚡src/tools/hooks/hook-googleapiclient.model.py1# ------------------------------------------------------------------COMMENT
MEDIUM⚡src/tools/hooks/hook-googleapiclient.model.py11# ------------------------------------------------------------------COMMENT
Unused Imports7 hits · 7 pts
SeverityFileLineSnippetContext
LOWsrc/tools/hooks/hook-googleapiclient.model.py14CODE
LOWsrc/gam/__main__.py27CODE
LOWsrc/gam/gdata/apps/service.py20CODE
LOWsrc/gam/gdata/apps/service.py20CODE
LOWsrc/gam/gdata/apps/service.py20CODE
LOWsrc/gam/gdata/apps/service.py22CODE
LOWsrc/gam/gdata/apps/service.py25CODE
Redundant / Tautological Comments4 hits · 6 pts
SeverityFileLineSnippetContext
LOWsrc/gam/gamlib/glcfg.py50# Check if API calls rate exceeds limitCOMMENT
LOWsrc/gam/atom/service.py686 # Read the file and send it a chunk at a time.COMMENT
LOWsrc/gam/atom/http_core.py509 # Read the file and send it a chunk at a time.COMMENT
LOWsrc/gam/atom/http.py343 # Read the file and send it a chunk at a time.COMMENT
Fake / Example Data3 hits · 4 pts
SeverityFileLineSnippetContext
LOWwiki/Resources.md386* Enter a single-line address as `address "123 Main Street"`COMMENT
LOWwiki/legacy/l-ResellerCommands.md25gam create resoldcustomer acme.com alternateemail acmecorp@gmail.com phone 123-456-7890 address1 "10 Main St." contact "CODE
LOWsrc/GamUpdate.txt16665The `<RegularExpression>` can be used to match a specific address "foo@bar.com", a pattern ".*test.*" or the special valCODE
Hyper-Verbose Identifiers2 hits · 2 pts
SeverityFileLineSnippetContext
LOWsrc/gam/atom/core.py371 def __get_extension_attributes(self):CODE
LOWsrc/gam/atom/core.py374 def __set_extension_attributes(self, attributes):CODE
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
LOW.github/workflows/build.yml390 # Apple wants some kind of "package" submitted so just add gam to a .zipCOMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsrc/gam/gamlib/glaction.py140 # Usage:COMMENT
Excessive Try-Catch Wrapping1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsrc/gam/gdata/service.py993 except Exception as e:CODE