RepoTrust

Leaderboard github.com

aileo/pensa

Organize family gifts without carrying it all in your head. Everyone's wishes, the dates coming up and who gives what live in one place — and nobody ever sees what is meant for them.

  • View repository ↗
  • TypeScript
  • ★ 0
  • commit f10cc33fc364
  • scored 2026-11-14
  • scoring prov-5+qual-2+sec-2

AI provenance

100%

explicit

Confidence
85%
Coverage
100%

Estimated share of AI-generated code. Explicit attribution is a lower bound.

Code quality

80/100

strong

Confidence
90%
Coverage
100%

Complexity, duplication, lint density, tests, CI, docs and review process.

Security

55/100

weak

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 files0
  • Work sessions at AI pace1
  • Releases at AI pace0
  • Coding-style index (1.0+ means possible)0.08

Attributed AI tools

ToolCommitsLines addedFirst seenLast seen
GitHub Copilot coding agent6111,4042026-09-292026-10-31

Lines added per month all AI-attributed share

  1. 2026-095,437 · 100% AI
  2. 2026-105,967 · 100% AI

Findings in AI-attributed lines vs the rest

From git blame: 6,247 lines trace to AI-attributed commits, 0 to others. Too few lines in one group for a fair comparison. Reported, not scored.

Findings per 1,000 linesAI-attributedOtherRatio
Code quality1.12——
Security0.32——

Evidence by analyzer

Explicit AI attributionok26 items
attributed_commit_share
98.4%
attributed_commits
61
attributed_loc
11,404
attributed_loc_share
100.0%
commits
62
effective_loc
11,404
tools_detected
1
AI tool configurationok
artifacts
0
tools_configured
0
workflow_agents
0
Commit velocityok1 item
excluded_import_loc
0
flagged_loc
2,265
flagged_loc_share
19.9%
flagged_units
1
max_loc_per_hour
770
measured_loc
11,404
median_loc_per_hour
226.11
pr_timed_units
14
pre_ai_era_burst_loc
0
pre_ai_era_bursts
0
pre_ai_era_measured_loc
0
work_units
25
Release velocityok
flagged_releases
0
max_loc_per_day
11,760
releases
10
Coding styleok
count:assistant_voice
0
count:emoji_in_code
1
count:narrated_steps
0
count:placeholder
0
files:assistant_voice
0
files:emoji_in_code
1
files:narrated_steps
0
files:placeholder
0
index
0.08
lines_scanned
6,247
per_kloc:assistant_voice
0
per_kloc:emoji_in_code
0.16
per_kloc:narrated_steps
0
per_kloc:placeholder
0
Findings in AI-written linesok
ai_lines
6,247
blame_failures
0
files_blamed
65
other_lines
0
quality:ai_findings
7
quality:ai_per_kloc
1.12
quality:other_findings
0
security:ai_findings
2
security:ai_per_kloc
0.32
security:other_findings
0

Code quality

80 strong

Code quality is strong: test-to-source ratio 0.30, CI runs tests; 16% of function code in complex or long functions; 2% duplicated lines. Weakest area: complexity.

How the score is built

  • Complexity62
  • Duplication88
  • Lint and smells80
  • Tests and CI80
  • Documentation100
  • Type safety100
  • Review processnot measured

Evidence by analyzer

Complexity (lizard)ok10 items
complex_functions
16
function_nloc
4,772
functions
895
long_functions
2
many_param_functions
0
mean_ccn
2.59
p90_ccn
5
risky_nloc_share
16.2%
Duplication (jscpd)ok4 items
compared_lines
5,107
duplicated_lines
106
duplicated_share
2.1%
files
65
Lintok
category:best-practice
5
category:correctness
2
findings
7
scanned_lines
6,077
weighted_findings
5.50
Tests and CIok4 items
  • CI config: .github/workflows/ci.yml .github/workflows/ci.yml
  • CI config: .github/workflows/pages.yml .github/workflows/pages.yml
  • CI config: .github/workflows/release.yml .github/workflows/release.yml
  • CI runs tests (npm test)
check:ci_present
yes
check:ci_runs_lint
no
check:ci_runs_tests
yes
check:has_tests
yes
check:test_ratio
no
check:tests_cochange
yes
ci_files
3
cochange_commits
45
cochange_share
64.4%
source_lines
6,247
test_lines
1,867
test_ratio
0.30
Documentationok4 items
  • README.md README.md
  • LICENSE LICENSE
  • docs/CONTRIBUTING.md docs/CONTRIBUTING.md
  • CHANGELOG.md CHANGELOG.md
check:changelog
yes
check:contributing
yes
check:license
yes
check:readme
yes
readme_lines
97
Type safetyok1 item
  • TypeScript strict type checking: apps/api/tsconfig.json apps/api/tsconfig.json
check:low_escape_density
yes
check:strict_config
yes
escapes
0
escapes_per_kloc
0

Security

55 weak

Security posture is weak: 31 known vulnerabilities in 11 dependencies; 1 high-severity SAST findings; 18 high-severity workflow issues. Weakest area: posture.

How the score is built

  • Secrets100
  • Static analysis (SAST)88
  • Vulnerable dependencies35
  • CI workflows2
  • Security posture0
  • OpenSSF Scorecardnot measured

Evidence by analyzer

OpenSSF Scorecardskipped

no published OpenSSF Scorecard result for this repo

Package registriesok
checked
30
declared
30
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
3
findings_high
1
findings_low
0
findings_medium
2
parse_errors
2
scanned_lines
6,077
weighted_findings
2.30
Dependencies (osv-scanner)ok
penalty
63
vulnerabilities
31
vulnerable_packages
11
vulns_critical
0
vulns_high
9
vulns_low
2
vulns_medium
20
vulns_unknown
0
CI workflows (zizmor)ok
findings
27
findings_high
18
findings_low
0
findings_medium
9
penalty
231.60
workflows
3
Security postureok1 item
  • package.json has no lockfile alongside it (unpinned dependencies) package.json
check:dependency_updates
no
check:lockfiles
no
check:security_policy
no
check:signed_commits
no
signed_commit_share
40.3%
unpinned_manifests
1
Release downloadsok
binary_assets
0
signals
0
suspicious
0

Findings

28 high36 medium4 low

SeverityRuleLocationMessageTool
high zizmor/unpinned-uses .github/workflows/ci.yml:21 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/ci.yml:22 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/ci.yml:61 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/ci.yml:62 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/ci.yml:83 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/ci.yml:84 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/ci.yml:85 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/pages.yml:23 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/pages.yml:24 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/pages.yml:43 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/pages.yml:45 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/pages.yml:63 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/release.yml:31 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/release.yml:33 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/release.yml:35 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/release.yml:37 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/release.yml:44 unpinned action reference [confidence high] CI workflows (zizmor)
high zizmor/unpinned-uses .github/workflows/release.yml:56 unpinned action reference [confidence high] CI workflows (zizmor)
high osv/GHSA-27r3-jxmh-p828 apps/api/package-lock.json [email protected] (npm) is affected by GHSA-27r3-jxmh-p828 Dependencies (osv-scanner)
high osv/GHSA-2m5v-pch6-74hx apps/api/package-lock.json [email protected] (npm) is affected by GHSA-2m5v-pch6-74hx Dependencies (osv-scanner)
high osv/GHSA-4w7w-5xrc-9h26 apps/api/package-lock.json [email protected] (npm) is affected by GHSA-4w7w-5xrc-9h26 Dependencies (osv-scanner)
high osv/GHSA-587h-7wmj-h5pm apps/api/package-lock.json [email protected] (npm) is affected by GHSA-587h-7wmj-h5pm; also in apps/web/package-lock.json Dependencies (osv-scanner)
high osv/GHSA-68fv-2mgg-jv7q apps/api/package-lock.json [email protected] (npm) is affected by GHSA-68fv-2mgg-jv7q; also in apps/web/package-lock.json Dependencies (osv-scanner)
high osv/GHSA-mrhx-c7xc-m3w5 apps/api/package-lock.json [email protected] (npm) is affected by GHSA-mrhx-c7xc-m3w5 Dependencies (osv-scanner)
high osv/GHSA-qrxm-fqhp-jwvm apps/api/package-lock.json [email protected] (npm) is affected by GHSA-qrxm-fqhp-jwvm Dependencies (osv-scanner)
high osv/GHSA-xjj6-f33q-929c apps/api/package-lock.json [email protected] (npm) is affected by GHSA-xjj6-f33q-929c Dependencies (osv-scanner)
high opengrep/dockerfile.security.missing-user apps/web/Dockerfile:18 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 osv/GHSA-587h-7wmj-h5pm site/package-lock.json [email protected] (npm) is affected by GHSA-587h-7wmj-h5pm Dependencies (osv-scanner)
medium opengrep/typescript.react.best-practice.react-props-spreading apps/web/src/components/atoms/FormLabel.tsx:4 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/typescript.react.best-practice.react-props-spreading apps/web/src/components/atoms/SelectInput.tsx:4 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/typescript.react.best-practice.react-props-spreading apps/web/src/components/atoms/TextArea.tsx:4 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/typescript.react.best-practice.react-props-spreading apps/web/src/components/atoms/TextInput.tsx:4 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/typescript.react.best-practice.react-props-in-state apps/web/src/reorder.ts:88 Copying a prop into state in React -- this is bad practice as all updates to it are ignored. Instead, read props directly in your component and avoid copying props into state. Lint
medium zizmor/excessive-permissions .github/workflows/ci.yml:1 overly broad permissions [confidence medium] CI workflows (zizmor)
medium zizmor/excessive-permissions .github/workflows/ci.yml:14 overly broad permissions [confidence medium] CI workflows (zizmor)
medium zizmor/artipacked .github/workflows/ci.yml:21 credential persistence through GitHub Actions artifacts [confidence low] CI workflows (zizmor)
medium zizmor/excessive-permissions .github/workflows/ci.yml:34 overly broad permissions [confidence medium] CI workflows (zizmor)
medium zizmor/artipacked .github/workflows/ci.yml:61 credential persistence through GitHub Actions artifacts [confidence low] CI workflows (zizmor)
medium zizmor/excessive-permissions .github/workflows/ci.yml:76 overly broad permissions [confidence medium] CI workflows (zizmor)
medium zizmor/artipacked .github/workflows/ci.yml:83 credential persistence through GitHub Actions artifacts [confidence low] CI workflows (zizmor)
medium zizmor/artipacked .github/workflows/pages.yml:23 credential persistence through GitHub Actions artifacts [confidence low] CI workflows (zizmor)
medium zizmor/artipacked .github/workflows/release.yml:31 credential persistence through GitHub Actions artifacts [confidence low] CI workflows (zizmor)
medium osv/GHSA-4qv8-2p9j-2685 apps/api/package-lock.json [email protected] (npm) is affected by GHSA-4qv8-2p9j-2685 Dependencies (osv-scanner)
medium osv/GHSA-55wc-3pg8-jfw6 apps/api/package-lock.json [email protected] (npm) is affected by GHSA-55wc-3pg8-jfw6 Dependencies (osv-scanner)
medium osv/GHSA-698v-4r3x-3vcv apps/api/package-lock.json [email protected] (npm) is affected by GHSA-698v-4r3x-3vcv; also in apps/web/package-lock.json Dependencies (osv-scanner)
medium osv/GHSA-6pq8-jhm2-2vcw apps/api/package-lock.json [email protected] (npm) is affected by GHSA-6pq8-jhm2-2vcw Dependencies (osv-scanner)
medium osv/GHSA-9fm3-97px-rjf6 apps/api/package-lock.json [email protected] (npm) is affected by GHSA-9fm3-97px-rjf6 Dependencies (osv-scanner)
medium osv/GHSA-f72v-6w45-q472 apps/api/package-lock.json [email protected] (npm) is affected by GHSA-f72v-6w45-q472 Dependencies (osv-scanner)
medium osv/GHSA-g3hv-75wg-m249 apps/api/package-lock.json [email protected] (npm) is affected by GHSA-g3hv-75wg-m249 Dependencies (osv-scanner)
medium osv/GHSA-qxg6-89mg-rqv8 apps/api/package-lock.json @vitest/[email protected] (npm) is affected by GHSA-qxg6-89mg-rqv8 Dependencies (osv-scanner)
medium osv/GHSA-r825-w8mm-5pxw apps/api/package-lock.json [email protected] (npm) is affected by GHSA-r825-w8mm-5pxw; also in apps/web/package-lock.json Dependencies (osv-scanner)
medium osv/GHSA-rq7h-c2jc-7f22 apps/api/package-lock.json [email protected] (npm) is affected by GHSA-rq7h-c2jc-7f22; also in apps/web/package-lock.json Dependencies (osv-scanner)
medium osv/GHSA-rxp7-6hxx-x8q5 apps/api/package-lock.json [email protected] (npm) is affected by GHSA-rxp7-6hxx-x8q5 Dependencies (osv-scanner)
medium osv/GHSA-vfpm-58rq-9qcg apps/api/package-lock.json [email protected] (npm) is affected by GHSA-vfpm-58rq-9qcg; also in apps/web/package-lock.json Dependencies (osv-scanner)
medium osv/GHSA-xp26-3454-mjgp apps/api/package-lock.json @vitest/[email protected] (npm) is affected by GHSA-xp26-3454-mjgp Dependencies (osv-scanner)
medium opengrep/javascript.jquery.security.audit.jquery-insecure-selector apps/api/src/metadata.ts:311 User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string site/.vitepress/config.ts:76 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 osv/GHSA-4w7w-66w2-5vf9 site/package-lock.json [email protected] (npm) is affected by GHSA-4w7w-66w2-5vf9 Dependencies (osv-scanner)
medium osv/GHSA-67mh-4wv8-2f99 site/package-lock.json [email protected] (npm) is affected by GHSA-67mh-4wv8-2f99 Dependencies (osv-scanner)
medium osv/GHSA-698v-4r3x-3vcv site/package-lock.json [email protected] (npm) is affected by GHSA-698v-4r3x-3vcv Dependencies (osv-scanner)
medium osv/GHSA-fx2h-pf6j-xcff site/package-lock.json [email protected] (npm) is affected by GHSA-fx2h-pf6j-xcff Dependencies (osv-scanner)
medium osv/GHSA-r825-w8mm-5pxw site/package-lock.json [email protected] (npm) is affected by GHSA-r825-w8mm-5pxw Dependencies (osv-scanner)
medium osv/GHSA-rq7h-c2jc-7f22 site/package-lock.json [email protected] (npm) is affected by GHSA-rq7h-c2jc-7f22 Dependencies (osv-scanner)
medium osv/GHSA-v6wh-96g9-6wx3 site/package-lock.json [email protected] (npm) is affected by GHSA-v6wh-96g9-6wx3 Dependencies (osv-scanner)
low opengrep/javascript.lang.correctness.missing-template-string-indicator apps/web/src/routes.ts:53 This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? Lint
low opengrep/javascript.lang.correctness.missing-template-string-indicator apps/web/src/routes.ts:53 This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? Lint
low osv/GHSA-9jrq-w75r-8gcw apps/api/package-lock.json [email protected] (npm) is affected by GHSA-9jrq-w75r-8gcw; also in apps/web/package-lock.json Dependencies (osv-scanner)
low osv/GHSA-9jrq-w75r-8gcw site/package-lock.json [email protected] (npm) is affected by GHSA-9jrq-w75r-8gcw Dependencies (osv-scanner)

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.

AnalyzerPillarStatusVersionFindingsNote
AI tool configurationAI provenanceoksignatures-v10
Explicit AI attributionAI provenanceoksignatures-v10
Release velocityAI provenanceokprov-40
Coding styleAI provenanceok—0
Commit velocityAI provenanceokprov-40
Findings in AI-written linesAI provenanceokgit-blame0
Complexity (lizard)Code qualityoklizard 1.25.10
DocumentationCode qualityok—0
Duplication (jscpd)Code qualityokrepotrust-dup-w60
LintCode qualityokopengrep 1.33.1; rules f1d2b562b4147
Tests and CICode qualityok—0
Type safetyCode qualityok—0
CI workflows (zizmor)Securityokzizmor 1.32.027
Dependencies (osv-scanner)Securityokosv-scanner version: 2.7.131
Release downloadsSecurityok—0
Security postureSecurityok—0
Package registriesSecurityok—0
Static analysis (opengrep)Securityokopengrep 1.33.1; rules f1d2b562b4143
OpenSSF ScorecardSecurityskipped—0no published OpenSSF Scorecard result for this repo
Secrets (gitleaks)Securityokgitleaks 8.30.10

Score history

Scores from different scoring versions aren't directly comparable.

ScoredCommitScoringAI provenanceQualitySecurity
2026-11-14f10cc33fc364prov-5+qual-2+sec-2100%8055
2026-11-14f10cc33fc364prov-4+qual-2+sec-2100%8055

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/aileo/pensa/ai.svg)](https://repotrust.synapticcyber.com/r/github.com/aileo/pensa/)
[![RepoTrust quality](https://repotrust.synapticcyber.com/badge/github.com/aileo/pensa/quality.svg)](https://repotrust.synapticcyber.com/r/github.com/aileo/pensa/)
[![RepoTrust security](https://repotrust.synapticcyber.com/badge/github.com/aileo/pensa/security.svg)](https://repotrust.synapticcyber.com/r/github.com/aileo/pensa/)
Full text report
  • Repository: https://github.com/aileo/pensa
  • Commit: f10cc33fc364c99149236d17184a4acf18e452de
  • Generated: 2026-11-14T14:52:02+00:00
  • Scorer 0.1.0, scoring prov-5+qual-2+sec-2, report schema v2

Scores

Pillar Score Signal Confidence Coverage
AI provenance (estimated AI-generated share) 100 explicit 85% 100%
Code quality 80 strong 90% 100%
Security 55 weak 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): 100.0%
  • Unattributed share in AI-consistent velocity bursts: 0.0%
  • Estimated AI-generated share: 100.0%
AI tool Attributed commits Lines added
GitHub Copilot coding agent 61 11,404

Current source lines last changed by AI-attributed commits: 6,247 of 6,247.

Too few lines in one group to compare finding densities.

  • Stylometry index: 0.08 per 1,000 lines (narrated steps 0, placeholders 0, assistant phrasing 0, emoji 1). Reported as a signal, not scored.
Month Lines added Attributed to AI
2026-09 5,437 100%
2026-10 5,967 100%

Evidence

  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (f10cc33fc364)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (6eee32e8380f)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (682fce4cfb44)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (a53d036c1cbb)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (ebe6fcba28e1)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (6becadea6cee)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (4fad5342db8c)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (00659c203982)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (f7ab5405c065)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (bf7a9d18a414)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (b1cbf34a535f)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (a520caa0d862)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (3684084f457a)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (cf5d282ca66e)
  • GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (e6f72aac3127)

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 strong: test-to-source ratio 0.30, CI runs tests; 16% of function code in complex or long functions; 2% duplicated lines. Weakest area: complexity.

Area Score
Complexity (lizard) 62
Duplication 88
Code smells (Opengrep) 80
Tests and CI 80
Documentation 100
Type safety 100
Process (Scorecard review/maintenance) n/a
  • Functions: 895; mean complexity 2.6, 90th percentile 5; 16 complex and 2 long functions
  • Duplicated lines: 2.1% of 5,107 compared
  • Tests: 1,867 test lines for 6,247 source lines (ratio 0.30); CI test commands: npm test; 64% of recent source commits also change tests
  • Docs missing or thin: none

Most complex functions:

Security

Security posture is weak: 31 known vulnerabilities in 11 dependencies; 1 high-severity SAST findings; 18 high-severity workflow issues. Weakest area: posture.

Area Score
Secrets (gitleaks, tree + history) 100
Static analysis (Opengrep) 88
Vulnerable dependencies (OSV) 35
CI workflows (zizmor) 2
Posture (policy, updates, signing, lockfiles) 0
OpenSSF Scorecard n/a
  • Known vulnerabilities: 31 in 11 packages (critical 0, high 9, medium 20, low 2)

  • Posture checks passed: none; missing: security policy, dependency updates, signed commits, lockfiles

Top findings

Severity Finding Location
high opengrep/dockerfile.security.missing-user: 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] apps/web/Dockerfile:18
high osv/GHSA-27r3-jxmh-p828: [email protected] (npm) is affected by GHSA-27r3-jxmh-p828 apps/api/package-lock.json
high osv/GHSA-68fv-2mgg-jv7q: [email protected] (npm) is affected by GHSA-68fv-2mgg-jv7q; also in apps/web/package-lock.json apps/api/package-lock.json
high osv/GHSA-2m5v-pch6-74hx: [email protected] (npm) is affected by GHSA-2m5v-pch6-74hx apps/api/package-lock.json
high osv/GHSA-4w7w-5xrc-9h26: [email protected] (npm) is affected by GHSA-4w7w-5xrc-9h26 apps/api/package-lock.json
high osv/GHSA-qrxm-fqhp-jwvm: [email protected] (npm) is affected by GHSA-qrxm-fqhp-jwvm apps/api/package-lock.json
high osv/GHSA-xjj6-f33q-929c: [email protected] (npm) is affected by GHSA-xjj6-f33q-929c apps/api/package-lock.json
high osv/GHSA-587h-7wmj-h5pm: [email protected] (npm) is affected by GHSA-587h-7wmj-h5pm; also in apps/web/package-lock.json apps/api/package-lock.json
high osv/GHSA-mrhx-c7xc-m3w5: [email protected] (npm) is affected by GHSA-mrhx-c7xc-m3w5 apps/api/package-lock.json
high osv/GHSA-587h-7wmj-h5pm: [email protected] (npm) is affected by GHSA-587h-7wmj-h5pm site/package-lock.json
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/ci.yml:21
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/ci.yml:22
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/ci.yml:61
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/ci.yml:62
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/ci.yml:83
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/ci.yml:84
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/ci.yml:85
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/pages.yml:23
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/pages.yml:24
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/pages.yml:43
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/pages.yml:45
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/pages.yml:63
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/release.yml:31
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/release.yml:33
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/release.yml:35

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: 6,247; test lines: 1,867
Language Lines
TypeScript 7,615
JavaScript 329
SQL 170