Repository Analysis

warp-tech/warpgate

Fully transparent SSH, HTTPS, Kubernetes, MySQL and Postgres bastion/PAM that doesn't need additional client-side software

3.1 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of warp-tech/warpgate, a Rust project with 7,353 GitHub stars. SynthScan v2.0 examined 107,631 lines of code across 678 source files, recording 214 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 3.1 places this repository in the Likely human-written band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

3.1
Adjusted Score
3.1
Raw Score
100%
Time Factor
2026-07-14
Last Push
7.4K
Stars
Rust
Language
107.6K
Lines of Code
678
Files
214
Pattern Hits
2026-07-14
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 0MEDIUM 44LOW 170

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 214 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Decorative Section Separators35 hits · 130 pts
SeverityFileLineSnippetContext
MEDIUMdocker/local-testing/login-protection/seed.sh11# ── colour helpers ────────────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/seed.sh20# ── helpers ───────────────────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/seed.sh29# ── check if already seeded ───────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/seed.sh44# ── create role ───────────────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/seed.sh49# ── create user ───────────────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/seed.sh54# ── add password credential ───────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/seed.sh58# ── assign user to role ───────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/seed.sh62# ── create SSH target ─────────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/seed.sh79# ── assign target to role ─────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh17# ── colours ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh24# ── preflight ────────────────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh29# ── kill any previous instance ───────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh40# ── pull + start Docker targets ───────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh47# ── wait for SSH target to accept connections ─────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh56# ── prepare data directory ───────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh69# ── unattended-setup (only if not already initialised) ───────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh94# ── start warpgate ────────────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh104# ── wait for warpgate HTTP ────────────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh116# ── seed users / targets / roles ─────────────────────────────────────────────COMMENT
MEDIUMdocker/local-testing/login-protection/start.sh120# ── done ──────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_login_protection.py88# ── test class ─────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_login_protection.py94 # ── endpoint smoke tests ────────────────────────────────────────────────COMMENT
MEDIUMtests/test_login_protection.py124 # ── failure recording ───────────────────────────────────────────────────COMMENT
MEDIUMtests/test_login_protection.py12# ── shared helpers ─────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_login_protection.py160 # ── IP blocking ─────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_login_protection.py192 # ── user lockout ────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_login_protection.py245 # ── hot-reload ──────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_login_protection.py340 # ── SSH protocol ─────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_login_protection.py497 # ── admin exemption ──────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_http_user_auth_oidc.py223# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_http_user_auth_oidc.py225# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_http_user_auth_oidc.py986# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_http_user_auth_oidc.py990# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_kubernetes_integration.py31# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_kubernetes_integration.py33# ---------------------------------------------------------------------------COMMENT
Hyper-Verbose Identifiers95 hits · 88 pts
SeverityFileLineSnippetContext
LOWtests/test_rdp_user_auth_otp.py58 def test_otp_required_not_authorized_without_second_factor(CODE
LOWtests/test_role_expiry.py98 def test_grant_role_with_future_expiry_allows_access(CODE
LOWtests/test_role_expiry.py126 def test_expired_role_denies_access(CODE
LOWtests/test_role_expiry.py159 def test_reenable_expired_role_restores_access(CODE
LOWtests/test_role_expiry.py209 def test_remove_expiry_makes_permanent(CODE
LOWtests/test_role_expiry.py250 def test_revoked_role_denies_access(CODE
LOWtests/test_role_expiry.py276 def test_reactivate_revoked_role_via_update_expiry(CODE
LOWtests/test_role_expiry.py311 def test_reactivate_revoked_role_via_remove_expiry(CODE
LOWtests/test_role_expiry.py342 def test_get_user_roles_returns_all_states(CODE
LOWtests/conftest.py982def wait_rdp_session_authorized(api, username, timeout):STRING
LOWtests/test_ssh_proto.py186 def test_agent_forwarding_parallel(CODE
LOWtests/test_login_protection.py96 def test_security_status_endpoint(CODE
LOWtests/test_login_protection.py110 def test_list_blocked_ips_endpoint(CODE
LOWtests/test_login_protection.py117 def test_list_locked_users_endpoint(CODE
LOWtests/test_login_protection.py126 def test_failed_attempts_recorded(CODE
LOWtests/test_login_protection.py297 def test_config_hot_reload_raising_threshold(CODE
LOWtests/test_login_protection.py140 def test_successful_login_after_failed_attempts(CODE
LOWtests/test_login_protection.py162 def test_ip_blocking_triggers_and_blocks_correct_password(CODE
LOWtests/test_login_protection.py194 def test_user_lockout_triggers_and_blocks_correct_password(CODE
LOWtests/test_login_protection.py224 def test_user_lockout_auto_unlock(CODE
LOWtests/test_login_protection.py247 def test_config_hot_reload_without_restart(CODE
LOWtests/test_login_protection.py342 def test_ip_blocking_over_ssh(CODE
LOWtests/test_login_protection.py425 def test_ip_blocking_over_ssh_unknown_username(CODE
LOWtests/test_login_protection.py499 def test_admin_exempt_from_lockout(CODE
LOWtests/test_http_user_auth_ticket.py10 def test_auth_password_success(CODE
LOWtests/test_http_user_auth_oidc.py21def _resolve_hosts_to_localhost(*hosts):CODE
LOWtests/test_http_user_auth_oidc.py37def _make_sso_provider_config(CODE
LOWtests/test_http_user_auth_oidc.py205def _follow_oidc_login_redirects(CODE
LOWtests/test_http_user_auth_oidc.py254 def test_oidc_cross_domain_cookie_and_return_url_domain(CODE
LOWtests/test_http_user_auth_oidc.py370 def test_oidc_cookie_domain_flows(CODE
LOWtests/test_http_user_auth_oidc.py512 def test_oidc_auth_rejects_invalid_state(CODE
LOWtests/test_http_user_auth_oidc.py560 def test_oidc_auth_wrong_credentials(CODE
LOWtests/test_http_user_auth_oidc.py599 def test_oidc_auto_create_user(CODE
LOWtests/test_http_user_auth_oidc.py639 def test_oidc_auto_create_user_disabled(CODE
LOWtests/test_http_user_auth_oidc.py661 def test_oidc_group_sync_with_role_mappings(CODE
LOWtests/test_http_user_auth_oidc.py754 def test_oidc_group_sync_without_mappings(CODE
LOWtests/test_http_user_auth_oidc.py833 def test_oidc_group_sync_removes_stale_roles(CODE
LOWtests/test_http_user_auth_oidc.py1088 def test_combined_access_and_admin(CODE
LOWtests/test_http_user_auth_oidc.py1101 def test_group_name_with_spaces(CODE
LOWtests/test_http_user_auth_oidc.py1112 def test_duplicate_group_names_dedup(CODE
LOWtests/test_http_user_auth_oidc.py1124 def test_multiple_groups_some_unmapped(CODE
LOWtests/test_http_user_auth_oidc.py1137 def test_mapping_by_group_id_object(CODE
LOWtests/test_http_user_auth_oidc.py1149 def test_mapping_by_id_and_name_mixed(CODE
LOWtests/test_http_user_auth_oidc.py1167 def test_complex_objects_cross_dedup_and_spaces(CODE
LOWtests/test_ticket_requests.py69 def test_self_service_disabled_by_default(CODE
LOWtests/test_ticket_requests.py89 def test_self_service_auto_approve(CODE
LOWtests/test_ticket_requests.py145 def test_self_service_pending_approval(CODE
LOWtests/test_ticket_requests.py203 def test_activate_double_rejected(CODE
LOWtests/test_ticket_requests.py246 def test_activate_pending_rejected(CODE
LOWtests/test_ticket_requests.py280 def test_activate_target_gone(CODE
LOWtests/test_ticket_requests.py364 def test_description_required(CODE
LOWtests/test_ticket_requests.py420 def test_revoke_self_service_ticket(CODE
LOWtests/test_ticket_requests.py470 def test_negative_duration_rejected(CODE
LOWtests/test_ticket_requests.py522 def test_unsupported_uses_field_is_ignored(CODE
LOWtests/test_http_websocket.py69 def test_logout_closes_connection(CODE
LOWtests/test_http_user_auth_password.py10 def test_auth_password_success(CODE
LOWtests/test_api.py38def make_limited_admin_role_payload(**overrides):CODE
LOWtests/test_api.py851def _verify_all_openapi_ops_are_covered():CODE
LOWtests/test_api.py1038def test_admin_api_permission_enforcement(CODE
LOWtests/test_vnc_user_auth_otp.py84 def test_too_many_otp_disconnects(CODE
35 more matches not shown…
Over-Commented Block37 hits · 37 pts
SeverityFileLineSnippetContext
LOWdeny.toml1# This template contains all of the possible sections and their default valuesCOMMENT
LOWdeny.toml21# `target_family = "unix"` configuration, that only having windows targets inCOMMENT
LOWdeny.toml41# is recommended to pass `--all-features` on the cmd line insteadCOMMENT
LOWdeny.toml81# If this is true, then cargo deny will use the git executable to fetch advisory database.COMMENT
LOWdeny.toml101# * all - Both lowest-version and simplest-path are usedCOMMENT
LOWdeny.toml121 # Wrapper crates can optionally be specified to allow the crate when itCOMMENT
LOWdeny.toml141# "rustls-tls-webpki-roots",COMMENT
LOWdeny.toml161# ]COMMENT
LOWwarpgate-rdp-ipc/src/lib.rs1//! Stdio IPC message types shared between Warpgate (`warpgate-protocol-rdp`) and itsCOMMENT
LOWwarpgate-db-entities/src/Parameters.rs21pub enum PasswordLoginMode {COMMENT
LOWwarpgate-database-protocols/src/error.rs21#[error("unexpected null; try decoding as an `Option`")]COMMENT
LOWwarpgate-database-protocols/src/error.rs41 #[error("error occurred while attempting to establish a TLS connection: {0}")]COMMENT
LOWwarpgate-database-protocols/src/error.rs81 /// because another task encountered too many errors while trying to open a new connection.COMMENT
LOWwarpgate-database-protocols/src/lib.rs1#![allow(clippy::pedantic)]COMMENT
LOWwarpgate-protocol-vnc/src/server/rfb.rs1//! Low-level RFB (VNC) and VeNCrypt handshake helpers.COMMENT
LOWwarpgate-protocol-rdp/src/server/mod.rs1//! Native RDP server endpoint.COMMENT
LOWtests/test_mysql_user_auth_password.py1# import subprocessCOMMENT
LOWtests/test_mysql_user_auth_password.py21# timeout,COMMENT
LOWtests/test_mysql_user_auth_password.py41# api_add_role_to_user(url, session, user["id"], role["id"])COMMENT
LOWtests/test_mysql_user_auth_password.py61COMMENT
LOWtests/test_mysql_user_auth_password.py81# stdin=subprocess.PIPE,COMMENT
LOWtests/test_mysql_user_auth_password.py101# stdin=subprocess.PIPE,COMMENT
LOWtests/api_sdk/pyproject.toml61COMMENT
LOWwarpgate-core/src/recordings/desktop.rs141/// it never grows per-event in the recorder's RAM. The full input events (and all pixels)COMMENT
LOWwarpgate-core/src/rate_limiting/mod.rs1//! ## HierarchyCOMMENT
LOW.github/workflows/cargo-deny.yml21 # The RDP helper has its own lockfile outside of cargo workspaceCOMMENT
LOW.github/workflows/codeql.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW.github/workflows/scorecard.yml41 - name: "Run analysis"COMMENT
LOWwarpgate-rdp-helper/src/client.rs1//! Standalone RDP client helper for Warpgate.COMMENT
LOWwarpgate-rdp-helper/src/server.rs1//! Standalone RDP **server** (viewer-facing) helper for Warpgate.COMMENT
LOWwarpgate-rdp-helper/src/main.rs1//! Warpgate's standalone RDP helper — a single binary with two subcommands:COMMENT
LOWwarpgate-protocol-http/src/lib.rs121 // Set cookie domain to base host (e.g., ".warp.tavahealth.com") so it works forCOMMENT
LOWwarpgate-protocol-http/src/middleware/cookie_host.rs61 // `Some(None)` → remove Domain attribute (localhost / IP)COMMENT
LOWhelm/warpgate/Chart.yaml1apiVersion: v2COMMENT
LOWhelm/warpgate/Chart.yaml21# This is the version number of the application being deployed. This version number should beCOMMENT
LOWhelm/warpgate/values.yaml21fullnameOverride: ""COMMENT
LOWhelm/warpgate/values.yaml161# kind: ServersTransportCOMMENT
Self-Referential Comments5 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_role_expiry.py352 # Create a second roleCOMMENT
MEDIUMtests/test_web_ssh.py66 # Create a web SSH sessionCOMMENT
MEDIUMtests/test_ticket_requests.py437 # Create a ticketCOMMENT
MEDIUMtests/test_json_logs.py28 # Create a temporary file to capture log outputCOMMENT
MEDIUMtests/test_json_logs.py120 # Create a temporary file to capture log outputCOMMENT
Verbosity Indicators7 hits · 15 pts
SeverityFileLineSnippetContext
LOWtests/test_login_protection.py269 # Step 1: 3 failures below initial threshold of 5 → no lockoutCOMMENT
LOWtests/test_login_protection.py278 # Step 2: lower threshold to 2 via admin API (no restart)COMMENT
LOWtests/test_login_protection.py282 # Step 3: attempt N — total=4 in window, new threshold=2.COMMENT
LOWtests/test_login_protection.py288 # Step 4: attempt N+1 — check_user_locked now finds the lockout.COMMENT
LOWtests/test_login_protection.py315 # Step 1: 2 failuresCOMMENT
LOWtests/test_login_protection.py320 # Step 2: raise threshold to 10COMMENT
LOWtests/test_login_protection.py324 # Step 3: 2 more failures (total 4 in window, threshold now 10) — must NOT lockCOMMENT
Structural Annotation Overuse7 hits · 13 pts
SeverityFileLineSnippetContext
LOWtests/test_login_protection.py269 # Step 1: 3 failures below initial threshold of 5 → no lockoutCOMMENT
LOWtests/test_login_protection.py278 # Step 2: lower threshold to 2 via admin API (no restart)COMMENT
LOWtests/test_login_protection.py282 # Step 3: attempt N — total=4 in window, new threshold=2.COMMENT
LOWtests/test_login_protection.py288 # Step 4: attempt N+1 — check_user_locked now finds the lockout.COMMENT
LOWtests/test_login_protection.py315 # Step 1: 2 failuresCOMMENT
LOWtests/test_login_protection.py320 # Step 2: raise threshold to 10COMMENT
LOWtests/test_login_protection.py324 # Step 3: 2 more failures (total 4 in window, threshold now 10) — must NOT lockCOMMENT
Unused Imports14 hits · 13 pts
SeverityFileLineSnippetContext
LOWtests/test_role_expiry.py18CODE
LOWtests/conftest.py29CODE
LOWtests/test_http_proto.py6CODE
LOWtests/test_http_user_auth_otp.py8CODE
LOWtests/test_http_basic.py8CODE
LOWtests/test_login_protection.py9CODE
LOWtests/test_http_user_auth_ticket.py6CODE
LOWtests/test_http_user_auth_logout.py6CODE
LOWtests/test_http_user_auth_oidc.py13CODE
LOWtests/test_ticket_requests.py6CODE
LOWtests/test_http_websocket.py14CODE
LOWtests/test_http_user_auth_password.py6CODE
LOWtests/test_api.py19CODE
LOWtests/test_http_redirects.py6CODE
Slop Phrases2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMhelm/warpgate/values.yaml71# If you are using config_overrides, ca, ssh keyds form secrets and external databse you can use emptyDirCOMMENT
MEDIUMhelm/warpgate/values.yaml168# Alternatively, you can use strings, which lets you use additional templating features:COMMENT
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMwarpgate/src/listener_supervisor.rs267 /// Watch the parent directories of the desired cert/key files (robust toCOMMENT
MEDIUMwarpgate/src/listener_supervisor.rs306 /// Matched by file name to be robust across absolute/relative/symlinked pathsCOMMENT
Deep Nesting5 hits · 5 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py121CODE
LOWtests/test_rdp_web.py21CODE
LOWtests/util.py34CODE
LOWtests/util.py37CODE
LOWtests/test_web_ssh.py17CODE
Excessive Try-Catch Wrapping5 hits · 4 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py675 except Exception:STRING
LOWtests/test_vnc_user_auth_in_browser.py75 except Exception as error: # noqa: BLE001CODE
LOWtests/test_login_protection.py149 except Exception:CODE
LOWtests/test_vnc_user_auth_otp_and_web.py88 except Exception as error: # noqa: BLE001CODE
LOWtests/test_json_logs.py72 except Exception:CODE