RepoTrust

ezyang/scubaduck

https://github.com/ezyang/scubaduck · commit 00a2a565b7eb · scored 2026-11-13 · scoring prov-4+qual-2+sec-2

RepoTrust ai badge RepoTrust quality badge RepoTrust security badge

Dispute this score or request a re-score Full report JSON

Scores

Pillar Score Signal Confidence Coverage
AI provenance (estimated AI-generated share) 98 explicit 95% 100%
Code quality 60 weak 90% 100%
Security 50 poor 85% 100%

AI provenance

Explicit AI attribution on 98% of first-party code added; an estimated 98% including velocity signals.

AI tool Attributed commits Lines added
OpenAI Codex 139 7,454

Current source lines last changed by AI-attributed commits: 2,658 of 2,673.

Too few lines in one group to compare finding densities.

Month Lines added Attributed to AI
2025-05 7,601 98%

Evidence

AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.

Code quality

Code quality is weak: test-to-source ratio 1.08, CI runs tests; 39% of function code in complex or long functions; 2% duplicated lines. Weakest area: lint.

Area Score
Complexity (lizard) 31
Duplication 89
Code smells (Opengrep) 13
Tests and CI 100
Documentation 40
Type safety 60
Process (Scorecard review/maintenance) n/a

Most complex functions:

Security

Security posture is poor: 18 known vulnerabilities in 7 dependencies; 20 high-severity SAST findings; 4 high-severity workflow issues. Weakest area: sast.

Area Score
Secrets (gitleaks, tree + history) 100
Static analysis (Opengrep) 6
Vulnerable dependencies (OSV) 53
CI workflows (zizmor) 40
Posture (policy, updates, signing, lockfiles) 20
OpenSSF Scorecard n/a

Top findings

Severity Finding Location
critical osv/GHSA-6q48-6c7w-9gw2: certifi@2025.4.26 (PyPI) is affected by PYSEC-2026-4320, GHSA-6q48-6c7w-9gw2 uv.lock
high opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query: Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low] scubaduck/server.py:62
high opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query: Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low] scubaduck/server.py:67
high opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query: Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low] scubaduck/server.py:73
high opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query: Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low] scubaduck/server.py:81
high opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query: Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low] scubaduck/server.py:439
high opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query: Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low] scubaduck/server.py:467
high opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query: Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low] scubaduck/server.py:503
high opengrep/python.django.security.injection.tainted-sql-string: Detected user input used to manually construct a SQL string. This is usually bad practice because manual construction could accidentally result in a SQL injection. An attacker could use a SQL injection to steal or modify contents of the database. Instead, use a parameterized query which is available [confidence low] scubaduck/server.py:504
high opengrep/python.flask.security.injection.tainted-sql-string: Detected user input used to manually construct a SQL string. This is usually bad practice because manual construction could accidentally result in a SQL injection. An attacker could use a SQL injection to steal or modify contents of the database. Instead, use a parameterized query which is available [confidence medium] scubaduck/server.py:504
high opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query: Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low] scubaduck/server.py:656
high opengrep/python.django.security.injection.tainted-sql-string: Detected user input used to manually construct a SQL string. This is usually bad practice because manual construction could accidentally result in a SQL injection. An attacker could use a SQL injection to steal or modify contents of the database. Instead, use a parameterized query which is available [confidence low] scubaduck/server.py:657
high opengrep/python.flask.security.injection.tainted-sql-string: Detected user input used to manually construct a SQL string. This is usually bad practice because manual construction could accidentally result in a SQL injection. An attacker could use a SQL injection to steal or modify contents of the database. Instead, use a parameterized query which is available [confidence medium] scubaduck/server.py:657
high opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] scubaduck/static/js/table_view.js:173
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a view.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] scubaduck/static/js/table_view.js:173
high opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] scubaduck/static/js/view_settings.js:115
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a div.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] scubaduck/static/js/view_settings.js:115
high opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] scubaduck/static/js/view_settings.js:540
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a colSel.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] scubaduck/static/js/view_settings.js:540
high opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] scubaduck/static/js/view_settings.js:564
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a opSel.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] scubaduck/static/js/view_settings.js:564
high osv/GHSA-qccp-gfcp-xxvc: urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-141, GHSA-qccp-gfcp-xxvc uv.lock
high osv/GHSA-2xpw-w6gg-jr37: urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-1994, GHSA-2xpw-w6gg-jr37 uv.lock
high osv/GHSA-38jv-5279-wg99: urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-1996, GHSA-38jv-5279-wg99 uv.lock
high osv/GHSA-gm62-xv2j-4w53: urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-1998, GHSA-gm62-xv2j-4w53 uv.lock

Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.

Repository profile

Language Lines
Python 3,660
JavaScript 1,884
Shell 5

Embed a badge

Maintainers can show these in a README. Badges update when the repository is re-scored.

[![RepoTrust ai](https://repotrust.synapticcyber.com/badge/github.com/ezyang/scubaduck/ai.svg)](https://repotrust.synapticcyber.com/r/github.com/ezyang/scubaduck/)
[![RepoTrust quality](https://repotrust.synapticcyber.com/badge/github.com/ezyang/scubaduck/quality.svg)](https://repotrust.synapticcyber.com/r/github.com/ezyang/scubaduck/)
[![RepoTrust security](https://repotrust.synapticcyber.com/badge/github.com/ezyang/scubaduck/security.svg)](https://repotrust.synapticcyber.com/r/github.com/ezyang/scubaduck/)