Leaderboard github.com
nreed97/EzFD
Real-time multi-op ARRL Field Day logger — web-based logger with offline support, band activity, map, ADIF/Cabrillo export
unreviewed-ai-risk
AI provenance
100%
explicit
- Confidence
- 95%
- Coverage
- 100%
Estimated share of AI-generated code. Explicit attribution is a lower bound.
Code quality
52/100
weak
- Confidence
- 90%
- Coverage
- 100%
Complexity, duplication, lint density, tests, CI, docs and review process.
Security
70/100
adequate
- Confidence
- 85%
- Coverage
- 100%
Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.
AI provenance
100% explicit
Explicit AI attribution on 100% of first-party code added; an estimated 100% including velocity signals.
How the score is built
- Explicitly attributed share100%
- Unattributed share in AI-pace bursts0%
- Estimated AI-generated share100%
- AI tool configuration files2
- Work sessions at AI pace5
- Releases at AI pacenot measured
- Coding-style index (1.0+ means possible)0.11
Attributed AI tools
| Tool | Commits | Lines added | First seen | Last seen |
|---|---|---|---|---|
| Claude Code | 220 | 37,878 | 2026-06-28 | 2026-11-13 |
Lines added per month all AI-attributed share
- 2026-068,278 · 98% AI
- 2026-073,946 · 100% AI
- 2026-0813,616 · 100% AI
- 2026-099,355 · 100% AI
- 2026-102,811 · 100% AI
- 2026-112 · 100% AI
Findings in AI-attributed lines vs the rest
From git blame: 31,713 lines trace to AI-attributed commits, 51 to others. Too few lines in one group for a fair comparison. Reported, not scored.
| Findings per 1,000 lines | AI-attributed | Other | Ratio |
|---|---|---|---|
| Code quality | 1.51 | 0.00 | — |
| Security | 2.27 | 0.00 | — |
Evidence by analyzer
Explicit AI attributionok26 items
- Claude Code: 220 attributed commits, 37,878 lines added
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- Claude Code: author email [email protected]
- attributed_commit_share
- 96.9%
- attributed_commits
- 220
- attributed_loc
- 37,878
- attributed_loc_share
- 99.7%
- commits
- 227
- effective_loc
- 38,008
- tools_detected
- 1
AI tool configurationok2 items
- artifacts
- 2
- earliest_adoption
- 2026-06-28
- tools_configured
- 2
- workflow_agents
- 0
Commit velocityok5 items
- 1,128 lines of first-party code in ~1.4h (791 lines/hour, 3 commit session)
- 3,370 lines of first-party code in ~4.5h (742 lines/hour, 6 commit session)
- 1,731 lines of first-party code in ~2.6h (672 lines/hour, 5 commit session)
- 3,492 lines of first-party code in ~5.3h (662 lines/hour, 5 commit session)
- 2,875 lines of first-party code in ~5.1h (569 lines/hour, 10 commit session)
- excluded_import_loc
- 0
- flagged_loc
- 12,596
- flagged_loc_share
- 33.1%
- flagged_units
- 5
- max_loc_per_hour
- 790.81
- measured_loc
- 38,008
- median_loc_per_hour
- 191.50
- pr_timed_units
- 0
- pre_ai_era_burst_loc
- 0
- pre_ai_era_bursts
- 0
- pre_ai_era_measured_loc
- 0
- work_units
- 53
Release velocityskipped
Coding styleok1 item
- count:assistant_voice
- 0
- count:emoji_in_code
- 5
- count:narrated_steps
- 1
- count:placeholder
- 0
- files:assistant_voice
- 0
- files:emoji_in_code
- 4
- files:narrated_steps
- 1
- files:placeholder
- 0
- index
- 0.11
- lines_scanned
- 31,764
- per_kloc:assistant_voice
- 0
- per_kloc:emoji_in_code
- 0.16
- per_kloc:narrated_steps
- 0.03
- per_kloc:placeholder
- 0
Findings in AI-written linesok
- ai_lines
- 31,713
- blame_failures
- 0
- files_blamed
- 148
- other_lines
- 51
- quality:ai_findings
- 48
- quality:ai_per_kloc
- 1.51
- quality:other_findings
- 0
- quality:other_per_kloc
- 0
- security:ai_findings
- 72
- security:ai_per_kloc
- 2.27
- security:other_findings
- 0
- security:other_per_kloc
- 0
Code quality
52 weak
Code quality is weak: test-to-source ratio 0.00, no CI test run detected; 34% of function code in complex or long functions; 8% duplicated lines. Weakest area: testing.
How the score is built
- Complexity36
- Duplication61
- Lint and smells75
- Tests and CI25
- Documentation85
- Type safety95
- Review processnot measured
Evidence by analyzer
Complexity (lizard)ok10 items
- QSOForm in components/QSOForm.tsx: complexity 59, 277 lines
- LoggingClient in components/LoggingClient.tsx: complexity 46, 297 lines
- POST in app/api/qso/route.ts: complexity 45, 116 lines
- preflight in lib/preflight.ts: complexity 44, 197 lines
- POST in app/api/events/route.ts: complexity 38, 99 lines
- DashboardClient in components/DashboardClient.tsx: complexity 36, 234 lines
- parseAdif in lib/adif.ts: complexity 33, 55 lines
- mhzToBand in lib/adif.ts: complexity 29, 18 lines
- SlotCoordination in components/SlotCoordination.tsx: complexity 27, 168 lines
- (anonymous) in scripts/test-queries.cjs: complexity 26, 241 lines
- complex_functions
- 37
- function_nloc
- 14,134
- functions
- 1,541
- long_functions
- 19
- many_param_functions
- 0
- mean_ccn
- 2.84
- p90_ccn
- 6
- risky_nloc_share
- 34.4%
Duplication (jscpd)ok10 items
- 6+ duplicated lines: app/api/callhistory/route.ts:7 and app/api/qrz/route.ts:5
- 6+ duplicated lines: app/api/download/relay/route.ts:152 and app/api/download/relay/route.ts:196
- 6+ duplicated lines: app/api/import/adif/route.ts:73 and scripts/test-queries.cjs:225
- 6+ duplicated lines: app/api/presence/route.ts:56 and app/api/ses/operators/route.ts:14
- 6+ duplicated lines: app/api/qso/route.ts:165 and lib/callHistory.ts:124
- 6+ duplicated lines: app/event/[code]/cw/page.tsx:15 and app/event/[code]/log/page.tsx:15
- 6+ duplicated lines: app/event/new/page.tsx:211 and app/event/new/page.tsx:526
- 6+ duplicated lines: components/BandActivity.tsx:93 and components/DashboardClient.tsx:135
- 6+ duplicated lines: components/CheckoutBoard.tsx:48 and components/SlotCoordination.tsx:87
- 6+ duplicated lines: components/CheckoutBoard.tsx:99 and components/CheckoutBoard.tsx:148
- compared_lines
- 25,002
- duplicated_lines
- 2,030
- duplicated_share
- 8.1%
- files
- 148
Lintok
- category:best-practice
- 5
- category:correctness
- 41
- category:maintainability
- 2
- findings
- 48
- scanned_lines
- 30,585
- weighted_findings
- 35
Tests and CIok3 items
- CI config: .github/workflows/ci.yml
.github/workflows/ci.yml - CI config: .github/workflows/pages.yml
.github/workflows/pages.yml - CI runs linters (tsc --noEmit, shellcheck)
- check:ci_present
- yes
- check:ci_runs_lint
- yes
- check:ci_runs_tests
- no
- check:has_tests
- no
- check:test_ratio
- no
- check:tests_cochange
- no
- ci_files
- 2
- cochange_commits
- 189
- cochange_share
- 0.0%
- source_lines
- 31,764
- test_lines
- 0
- test_ratio
- 0
Documentationok3 items
- README.md
README.md - LICENSE
LICENSE - docs/changelog.md
docs/changelog.md
- check:changelog
- yes
- check:contributing
- no
- check:license
- yes
- check:readme
- yes
- readme_lines
- 195
Type safetyok1 item
- TypeScript strict type checking: tsconfig.json
tsconfig.json
- check:low_escape_density
- yes
- check:strict_config
- no
- escapes
- 0
- escapes_per_kloc
- 0
Security
70 adequate
Security posture is adequate: 2 known vulnerabilities in 2 dependencies; 12 high-severity SAST findings; 12 high-severity workflow issues. Weakest area: ci actions.
How the score is built
- Secrets100
- Static analysis (SAST)74
- Vulnerable dependencies83
- CI workflows6
- Security posture60
- OpenSSF Scorecardnot measured
Evidence by analyzer
OpenSSF Scorecardskipped
no published OpenSSF Scorecard result for this repo
Package registriesok
- checked
- 25
- declared
- 25
- lookup_errors
- 0
- missing
- 0
- recent
- 0
Secrets (gitleaks)ok
- secrets_current
- 0
- secrets_history
- 0
- secrets_low_confidence
- 0
- secrets_nonprod
- 0
Static analysis (opengrep)ok
- findings
- 73
- findings_high
- 12
- findings_low
- 0
- findings_medium
- 61
- parse_errors
- 2
- scanned_lines
- 30,585
- weighted_findings
- 26.70
Dependencies (osv-scanner)ok
- penalty
- 11
- vulnerabilities
- 2
- vulnerable_packages
- 2
- vulns_critical
- 0
- vulns_high
- 1
- vulns_low
- 0
- vulns_medium
- 1
- vulns_unknown
- 0
CI workflows (zizmor)ok
- findings
- 24
- findings_high
- 12
- findings_low
- 5
- findings_medium
- 7
- penalty
- 165.50
- workflows
- 2
Security postureok1 item
- Dependency updates: .github/dependabot.yml
.github/dependabot.yml
- check:dependency_updates
- yes
- check:lockfiles
- yes
- check:security_policy
- no
- check:signed_commits
- yes
- signed_commit_share
- 60.5%
- unpinned_manifests
- 0
Release downloadsok
- binary_assets
- 0
- signals
- 0
- suspicious
- 0
Findings
29 high85 medium33 low
| Severity | Rule | Location | Message | Tool |
|---|---|---|---|---|
| high | opengrep/python.lang.best-practice.arbitrary-sleep |
ezfd-rig-bridge.py:487 | time.sleep() call; did you mean to leave this in? | Lint |
| high | opengrep/python.lang.maintainability.useless-inner-function |
ezfd-rig-bridge.py:795 | function `handler` is defined inside a function but never used | Lint |
| high | opengrep/python.lang.best-practice.arbitrary-sleep |
public/ezfd-rig-bridge.py:487 | time.sleep() call; did you mean to leave this in? | Lint |
| high | opengrep/python.lang.maintainability.useless-inner-function |
public/ezfd-rig-bridge.py:795 | function `handler` is defined inside a function but never used | Lint |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:228 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:230 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:269 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:332 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:41 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:43 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/excessive-permissions |
.github/workflows/pages.yml:19 | overly broad permissions [confidence high] | CI workflows (zizmor) |
| high | zizmor/excessive-permissions |
.github/workflows/pages.yml:20 | overly broad permissions [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/pages.yml:32 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/pages.yml:34 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/pages.yml:44 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/pages.yml:56 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | opengrep/dockerfile.security.missing-user-entrypoint |
Dockerfile:30 | By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
ezfd-rig-bridge.py:310 | Detected subprocess function 'check_call' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
ezfd-rig-bridge.py:486 | Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
ezfd-rig-bridge.py:66 | Detected subprocess function 'call' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-os-exec-audit |
ezfd-rig-bridge.py:69 | Found dynamic content when spawning a process. This is dangerous if external data can reach this function call because it allows a malicious actor to execute commands. Ensure no external data reaches here. [confidence low] | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
ezfd-rig-bridge.py:73 | Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| high | opengrep/javascript.node-crypto.security.gcm-no-tag-length |
lib/crypto.ts:30 | The call to 'createDecipheriv' with the Galois Counter Mode (GCM) mode of operation is missing an expected authentication tag length. If the expected authentication tag length is not specified or otherwise checked, the application might... | Static analysis (opengrep) |
| high | osv/GHSA-mrhx-c7xc-m3w5 |
package-lock.json | [email protected] (npm) is affected by GHSA-mrhx-c7xc-m3w5 | Dependencies (osv-scanner) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
public/ezfd-rig-bridge.py:310 | Detected subprocess function 'check_call' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
public/ezfd-rig-bridge.py:486 | Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
public/ezfd-rig-bridge.py:66 | Detected subprocess function 'call' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-os-exec-audit |
public/ezfd-rig-bridge.py:69 | Found dynamic content when spawning a process. This is dangerous if external data can reach this function call because it allows a malicious actor to execute commands. Ensure no external data reaches here. [confidence low] | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
public/ezfd-rig-bridge.py:73 | Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.correctness.no-stringify-keys |
app/api/events/[code]/bonuses/route.ts:20 | JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. | Lint |
| medium | opengrep/javascript.lang.correctness.no-stringify-keys |
app/api/events/[code]/bonuses/route.ts:21 | JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. | Lint |
| medium | opengrep/javascript.lang.correctness.no-stringify-keys |
app/api/export/[code]/route.ts:71 | JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. | Lint |
| medium | opengrep/javascript.lang.correctness.no-stringify-keys |
app/api/import/event/route.ts:77 | JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. | Lint |
| medium | opengrep/javascript.lang.correctness.no-stringify-keys |
app/page.tsx:41 | JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. | Lint |
| medium | opengrep/typescript.react.best-practice.react-props-spreading |
components/NavDrawer.tsx:175 | It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious... | Lint |
| medium | opengrep/javascript.lang.best-practice.javascript-confirm |
components/QSOTable.tsx:321 | found confirm() call; should this be in production code? | Lint |
| medium | opengrep/python.lang.correctness.unchecked-subprocess-call |
ezfd-rig-bridge.py:271 | This is not checking the return value of this subprocess call; if it fails no exception will be raised. Consider subprocess.check_call() instead | Lint |
| medium | opengrep/python.lang.correctness.unchecked-subprocess-call |
ezfd-rig-bridge.py:66 | This is not checking the return value of this subprocess call; if it fails no exception will be raised. Consider subprocess.check_call() instead | Lint |
| medium | opengrep/javascript.lang.correctness.no-stringify-keys |
lib/realtime.ts:115 | JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. | Lint |
| medium | opengrep/python.lang.correctness.unchecked-subprocess-call |
public/ezfd-rig-bridge.py:271 | This is not checking the return value of this subprocess call; if it fails no exception will be raised. Consider subprocess.check_call() instead | Lint |
| medium | opengrep/python.lang.correctness.unchecked-subprocess-call |
public/ezfd-rig-bridge.py:66 | This is not checking the return value of this subprocess call; if it fails no exception will be raised. Consider subprocess.check_call() instead | Lint |
| medium | opengrep/javascript.lang.best-practice.lazy-load-module |
scripts/_compile-ts.cjs:59 | Lazy loading can complicate code bundling if care is not taken, also `require`s are run synchronously by Node.js. If they are called from within a function, it may block other requests from being handled at a more critical time. The... | Lint |
| medium | opengrep/javascript.lang.correctness.no-stringify-keys |
scripts/test-merge.cjs:135 | JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. | Lint |
| medium | opengrep/javascript.lang.correctness.no-stringify-keys |
scripts/test-merge.cjs:136 | JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. | Lint |
| medium | opengrep/javascript.lang.correctness.no-stringify-keys |
scripts/test-merge.cjs:137 | JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. | Lint |
| medium | zizmor/dependabot-cooldown |
.github/dependabot.yml:26 | insufficient cooldown in Dependabot updates [confidence high] | CI workflows (zizmor) |
| medium | zizmor/dependabot-cooldown |
.github/dependabot.yml:8 | insufficient cooldown in Dependabot updates [confidence high] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:15 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:213 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:26 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:266 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:329 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | opengrep/typescript.react.security.audit.react-dangerouslysetinnerhtml |
components/DocBody.tsx:12 | Detection of dangerouslySetInnerHTML from non-constant definition. This can inadvertently expose users to cross-site scripting (XSS) attacks if this comes from user-provided input. If you have to use dangerouslySetInnerHTML, consider... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
components/MapView.tsx:167 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/bash.lang.security.ifs-tampering |
deploy.sh:21 | The special variable IFS affects how splitting takes place when expanding unquoted variables. Don't set it globally. Prefer a dedicated utility such as 'cut' or 'awk' if you need to split input data. If you must use 'read', set IFS... | Static analysis (opengrep) |
| medium | opengrep/bash.curl.security.curl-pipe-bash |
deploy.sh:289 | Data is being piped into `bash` from a `curl` command. An attacker with control of the server in the `curl` command could inject malicious code into the pipe, resulting in a system compromise. Avoid piping untrusted data into `bash` or... | Static analysis (opengrep) |
| medium | opengrep/bash.lang.security.ifs-tampering |
ezfd-admin.sh:15 | The special variable IFS affects how splitting takes place when expanding unquoted variables. Don't set it globally. Prefer a dedicated utility such as 'cut' or 'awk' if you need to split input data. If you must use 'read', set IFS... | Static analysis (opengrep) |
| medium | opengrep/python.lang.security.audit.dynamic-urllib-use-detected |
ezfd-rig-bridge.py:201 | Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control... | Static analysis (opengrep) |
| medium | opengrep/python.lang.security.audit.dynamic-urllib-use-detected |
ezfd-rig-bridge.py:231 | Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-regexp |
lib/clockSource.ts:75 | RegExp() called with a `k` function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
lib/docs.ts:204 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
lib/docs.ts:209 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
lib/docs.ts:238 | Detected that function argument `name` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
lib/docs.ts:238 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
lib/docs.ts:52 | Detected that function argument `slug` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
lib/docs.ts:52 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | osv/GHSA-g3hv-75wg-m249 |
package-lock.json | [email protected] (npm) is affected by GHSA-g3hv-75wg-m249 | Dependencies (osv-scanner) |
| medium | opengrep/python.lang.security.audit.dynamic-urllib-use-detected |
public/ezfd-rig-bridge.py:201 | Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control... | Static analysis (opengrep) |
| medium | opengrep/python.lang.security.audit.dynamic-urllib-use-detected |
public/ezfd-rig-bridge.py:231 | Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-require |
scripts/_compile-ts.cjs:59 | Detected the use of require(variable). Calling require with a non-literal argument might allow an attacker to load and run arbitrary code, or access arbitrary files. [confidence low] | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/_compile-ts.cjs:59 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:120 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:122 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:187 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:200 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:367 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:368 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/build-site.cjs:370 | Detected that function argument `d` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/build-site.cjs:370 | Detected that function argument `d` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:370 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:372 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:377 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:392 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/build-site.cjs:393 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/build-site.cjs:422 | Detected that function argument `rel` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/build-site.cjs:422 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/build-site.cjs:445 | Detected that function argument `dir` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/build-site.cjs:446 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/build-site.cjs:446 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/build-site.cjs:455 | Detected that function argument `file` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.playwright.security.audit.playwright-goto-injection |
scripts/record-gifs.cjs:139 | If unverified user data can reach the `goto` method it can result in Server-Side Request Forgery vulnerabilities [confidence low] | Static analysis (opengrep) |
| medium | opengrep/javascript.playwright.security.audit.playwright-goto-injection |
scripts/record-gifs.cjs:57 | If unverified user data can reach the `goto` method it can result in Server-Side Request Forgery vulnerabilities [confidence low] | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/record-gifs.cjs:97 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/record-gifs.cjs:99 | Detected that function argument `out` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/record-gifs.cjs:99 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/test-changelog-links.cjs:38 | Detected that function argument `file` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-regexp |
scripts/test-nav.cjs:209 | RegExp() called with a `a` function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-regexp |
scripts/test-nav.cjs:244 | RegExp() called with a `l` function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
scripts/test-nav.cjs:383 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/test-nav.cjs:39 | Detected that function argument `f` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/test-nav.cjs:39 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/test-nav.cjs:402 | Detected that function argument `dir` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/test-nav.cjs:402 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/test-nav.cjs:406 | Detected that function argument `dir` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/test-nav.cjs:406 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/test-nav.cjs:43 | Detected that function argument `f` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/test-nav.cjs:460 | Detected that function argument `dir` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/test-nav.cjs:460 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/test-nav.cjs:464 | Detected that function argument `dir` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/test-nav.cjs:464 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/test-sections.cjs:137 | Detected that function argument `dir` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/test-sections.cjs:137 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename |
scripts/test-sections.cjs:26 | Detected that function argument `f` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal |
scripts/test-sections.cjs:26 | Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... | Static analysis (opengrep) |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
app/layout.tsx:20 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
app/layout.tsx:20 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
components/CheckoutBoard.tsx:55 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
components/CheckoutBoard.tsx:55 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
components/SlotCoordination.tsx:94 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
components/SlotCoordination.tsx:94 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
components/SummarySheet.tsx:59 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
components/SummarySheet.tsx:59 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
ezfd-admin.sh:1128 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
ezfd-admin.sh:1131 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
ezfd-admin.sh:1138 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
ezfd-admin.sh:1168 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
ezfd-admin.sh:1180 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
ezfd-admin.sh:1190 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
ezfd-admin.sh:1204 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
ezfd-admin.sh:1205 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
ezfd-admin.sh:1207 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
ezfd-admin.sh:1231 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
ezfd-admin.sh:1299 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
ezfd-admin.sh:1301 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
ezfd-admin.sh:1324 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/javascript.lang.correctness.useless-assignment |
scripts/record-gifs.cjs:18 | `const` is assigned twice; the first assignment is useless | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
scripts/test-docker.sh:149 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
scripts/test-docker.sh:167 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-command-substitution-in-command |
scripts/test-e2e.sh:349 | The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result. | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
scripts/test-restore.sh:26 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
scripts/test-restore.sh:43 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
scripts/test-restore.sh:53 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | zizmor/artipacked |
.github/workflows/ci.yml:228 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| low | zizmor/artipacked |
.github/workflows/ci.yml:269 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| low | zizmor/artipacked |
.github/workflows/ci.yml:332 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| low | zizmor/artipacked |
.github/workflows/ci.yml:41 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| low | zizmor/artipacked |
.github/workflows/pages.yml:32 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
Tools and coverage
Every analyzer that ran on this commit. A failed or skipped tool is a coverage gap: its share of the score is left out and the coverage figure drops.
| Analyzer | Pillar | Status | Version | Findings | Note |
|---|---|---|---|---|---|
| AI tool configuration | AI provenance | ok | signatures-v1 | 0 | |
| Explicit AI attribution | AI provenance | ok | signatures-v1 | 0 | |
| Release velocity | AI provenance | skipped | — | 0 | |
| Coding style | AI provenance | ok | — | 0 | |
| Commit velocity | AI provenance | ok | prov-4 | 0 | |
| Findings in AI-written lines | AI provenance | ok | git-blame | 0 | |
| Complexity (lizard) | Code quality | ok | lizard 1.25.1 | 0 | |
| Documentation | Code quality | ok | — | 0 | |
| Duplication (jscpd) | Code quality | ok | repotrust-dup-w6 | 0 | |
| Lint | Code quality | ok | opengrep 1.33.1; rules f1d2b562b414 | 48 | |
| Tests and CI | Code quality | ok | — | 0 | |
| Type safety | Code quality | ok | — | 0 | |
| CI workflows (zizmor) | Security | ok | zizmor 1.32.0 | 24 | |
| Dependencies (osv-scanner) | Security | ok | osv-scanner version: 2.7.1 | 2 | |
| Release downloads | Security | ok | — | 0 | |
| Security posture | Security | ok | — | 0 | |
| Package registries | Security | ok | — | 0 | |
| Static analysis (opengrep) | Security | ok | opengrep 1.33.1; rules f1d2b562b414 | 73 | |
| OpenSSF Scorecard | Security | skipped | — | 0 | no published OpenSSF Scorecard result for this repo |
| Secrets (gitleaks) | Security | ok | gitleaks 8.30.1 | 0 |
Score history
Scores from different scoring versions aren't directly comparable.
| Scored | Commit | Scoring | AI provenance | Quality | Security |
|---|---|---|---|---|---|
| 2026-11-14 | 72083165c9b3 | prov-5+qual-2+sec-2 | 100% | 52 | 70 |
| 2026-11-14 | 72083165c9b3 | prov-4+qual-2+sec-2 | 100% | 52 | 70 |
Full text report
- Repository: https://github.com/nreed97/EzFD
- Commit:
72083165c9b33312033df3af08970cdafbf00a4d - Generated: 2026-11-14T14:52:06+00:00
- Scorer 0.1.0, scoring prov-5+qual-2+sec-2, report schema v2
Scores
Unreviewed AI code risk: a large share of this code is explicitly AI-attributed, and its tests or review process are weak while quality or security scores are low.
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 100 | explicit | 95% | 100% |
| Code quality | 52 | weak | 90% | 100% |
| Security | 70 | adequate | 85% | 100% |
AI provenance
Explicit AI attribution on 100% of first-party code added; an estimated 100% including velocity signals.
- Explicitly attributed share (lower bound): 99.7%
- Unattributed share in AI-consistent velocity bursts: 0.3%
- Estimated AI-generated share: 99.7%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| Claude Code | 220 | 37,878 |
- AI tooling configured in repo: claude-code, generic-agent
Current source lines last changed by AI-attributed commits: 31,713 of 31,764.
Too few lines in one group to compare finding densities.
- Stylometry index: 0.11 per 1,000 lines (narrated steps 1, placeholders 0, assistant phrasing 0, emoji 5). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2026-06 | 8,278 | 98% |
| 2026-07 | 3,946 | 100% |
| 2026-08 | 13,616 | 100% |
| 2026-09 | 9,355 | 100% |
| 2026-10 | 2,811 | 100% |
| 2026-11 | 2 | 100% |
Evidence
- Claude Code: author email [email protected] (01f4d8767862)
- Claude Code: author email [email protected] (41d51dfc989a)
- Claude Code: author email [email protected] (ac59fe84d747)
- Claude Code: author email [email protected] (5f2bbf3fe342)
- Claude Code: author email [email protected] (f0be4418a9dc)
- Claude Code: author email [email protected] (c854e2d213c6)
- Claude Code: author email [email protected] (076dd86586e5)
- Claude Code: author email [email protected] (17a11902cdaa)
- Claude Code: author email [email protected] (955d4191df4c)
- Claude Code: author email [email protected] (9fb502dcf1a9)
- Claude Code: author email [email protected] (dd52704ab6e9)
- Claude Code: author email [email protected] (36b2225d2a8d)
- Claude Code: author email [email protected] (6b6f2566603d)
- Claude Code: author email [email protected] (750f7b45c5c5)
- Claude Code: author email [email protected] (60ab7a046d4f)
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 0.00, no CI test run detected; 34% of function code in complex or long functions; 8% duplicated lines. Weakest area: testing.
| Area | Score |
|---|---|
| Complexity (lizard) | 36 |
| Duplication | 61 |
| Code smells (Opengrep) | 75 |
| Tests and CI | 25 |
| Documentation | 85 |
| Type safety | 95 |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 1,541; mean complexity 2.8, 90th percentile 6; 37 complex and 19 long functions
- Duplicated lines: 8.1% of 25,002 compared
- Tests: 0 test lines for 31,764 source lines (ratio 0.00); CI test commands: none detected; 0% of recent source commits also change tests
- Docs missing or thin: contributing
Most complex functions:
- QSOForm in components/QSOForm.tsx: complexity 59, 277 lines
- LoggingClient in components/LoggingClient.tsx: complexity 46, 297 lines
- POST in app/api/qso/route.ts: complexity 45, 116 lines
- preflight in lib/preflight.ts: complexity 44, 197 lines
- POST in app/api/events/route.ts: complexity 38, 99 lines
Security
Security posture is adequate: 2 known vulnerabilities in 2 dependencies; 12 high-severity SAST findings; 12 high-severity workflow issues. Weakest area: ci actions.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 74 |
| Vulnerable dependencies (OSV) | 83 |
| CI workflows (zizmor) | 6 |
| Posture (policy, updates, signing, lockfiles) | 60 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 2 in 2 packages (critical 0, high 1, medium 1, low 0)
-
Posture checks passed: dependency updates, signed commits, lockfiles; missing: security policy
Top findings
| Severity | Finding | Location |
|---|---|---|
| high | opengrep/dockerfile.security.missing-user-entrypoint: By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium] |
Dockerfile:30 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'call' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
ezfd-rig-bridge.py:66 |
| high | opengrep/python.lang.security.audit.dangerous-os-exec-audit: Found dynamic content when spawning a process. This is dangerous if external data can reach this function call because it allows a malicious actor to execute commands. Ensure no external data reaches here. [confidence low] |
ezfd-rig-bridge.py:69 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
ezfd-rig-bridge.py:73 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'check_call' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
ezfd-rig-bridge.py:310 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
ezfd-rig-bridge.py:486 |
| high | opengrep/javascript.node-crypto.security.gcm-no-tag-length: The call to 'createDecipheriv' with the Galois Counter Mode (GCM) mode of operation is missing an expected authentication tag length. If the expected authentication tag length is not specified or otherwise checked, the application might be tricked into verifying a shorter-than-expected authenticatio [confidence medium] |
lib/crypto.ts:30 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'call' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
public/ezfd-rig-bridge.py:66 |
| high | opengrep/python.lang.security.audit.dangerous-os-exec-audit: Found dynamic content when spawning a process. This is dangerous if external data can reach this function call because it allows a malicious actor to execute commands. Ensure no external data reaches here. [confidence low] |
public/ezfd-rig-bridge.py:69 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
public/ezfd-rig-bridge.py:73 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'check_call' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
public/ezfd-rig-bridge.py:310 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
public/ezfd-rig-bridge.py:486 |
| high | osv/GHSA-mrhx-c7xc-m3w5: [email protected] (npm) is affected by GHSA-mrhx-c7xc-m3w5 |
package-lock.json |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:41 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:43 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:228 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:230 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:269 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:332 |
| high | zizmor/excessive-permissions: overly broad permissions [confidence high] |
.github/workflows/pages.yml:19 |
| high | zizmor/excessive-permissions: overly broad permissions [confidence high] |
.github/workflows/pages.yml:20 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/pages.yml:32 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/pages.yml:34 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/pages.yml:44 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/pages.yml:56 |
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
- Source lines: 31,764; test lines: 0
| Language | Lines |
|---|---|
| TypeScript | 17,982 |
| JavaScript | 7,026 |
| Shell | 3,867 |
| Python | 1,710 |
| SQL | 1,179 |