RepoTrust

caru-ini/stack-diagram

Agent skill: describe your stack in a sentence, get an architecture diagram with official logos

https://github.com/caru-ini/stack-diagram · commit 9175bde8449c · scored 2026-11-14 · scoring prov-4+qual-2+sec-2

RepoTrust ai badge RepoTrust quality badge RepoTrust security badge

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

Scores

Pillar Score Signal Confidence Coverage
AI provenance (estimated AI-generated share) 98 explicit 78% 100%
Code quality 72 adequate 90% 100%
Security 74 adequate 85% 100%

AI provenance

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

AI tool Attributed commits Lines added
Claude Code 27 24,342

Current source lines last changed by AI-attributed commits: 22,566 of 22,952.

Too few lines in one group to compare finding densities.

Month Lines added Attributed to AI
2026-11 24,764 98%

Evidence

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

Code quality

Code quality is adequate: test-to-source ratio 0.07, CI runs tests; 4% of function code in complex or long functions; 13% duplicated lines. Weakest area: duplication.

Area Score
Complexity (lizard) 88
Duplication 45
Code smells (Opengrep) 88
Tests and CI 65
Documentation 65
Type safety 98
Process (Scorecard review/maintenance) n/a

Most complex functions:

Security

Security posture is adequate: 4 known vulnerabilities in 4 dependencies; 7 high-severity workflow issues. Weakest area: posture.

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

Top findings

Severity Finding Location
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/release.yml:14
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/site.yml:21
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/site.yml:22
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/site.yml:25
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/site.yml:46
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/site.yml:47
high zizmor/unpinned-uses: unpinned action reference [confidence high] .github/workflows/site.yml:50
medium opengrep/javascript.lang.security.audit.unsafe-dynamic-method: Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] site/src/features/admin/moderation.ts:21
medium opengrep/javascript.lang.security.audit.detect-non-literal-regexp: RegExp() called with a name 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 hardcoded regexes instead. If your regex is run on user-controlled [confidence low] site/src/features/submit/server/icons.ts:60
medium opengrep/python.lang.security.audit.dynamic-urllib-use-detected: 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 the URLs, or consider using the 'requests' library instead. [confidence low] skills/stack-diagram/scripts/fetch_icons.py:203
medium opengrep/python.lang.security.audit.dynamic-urllib-use-detected: 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 the URLs, or consider using the 'requests' library instead. [confidence low] skills/stack-diagram/scripts/share.py:41
medium osv/GHSA-67mh-4wv8-2f99: [email protected] (npm) is affected by GHSA-67mh-4wv8-2f99 site/pnpm-lock.yaml
medium osv/GHSA-3g3m-2fjr-6pw4: [email protected] (npm) is affected by GHSA-3g3m-2fjr-6pw4 site/pnpm-lock.yaml
medium osv/GHSA-g3hv-75wg-m249: [email protected] (npm) is affected by GHSA-g3hv-75wg-m249 site/pnpm-lock.yaml
medium osv/GHSA-wx4j-mvgx-mqwp: [email protected] (npm) is affected by GHSA-wx4j-mvgx-mqwp site/pnpm-lock.yaml
low zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] .github/workflows/release.yml:14
low zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] .github/workflows/site.yml:21
low zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] .github/workflows/site.yml:46

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.

Distribution signals

Signals consistent with a repository that exists to distribute a download. They are heuristics, not a verdict; release files were not downloaded or inspected.

Repository profile

Language Lines
TypeScript 23,574
Python 845
SQL 67

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/caru-ini/stack-diagram/ai.svg)](https://repotrust.synapticcyber.com/r/github.com/caru-ini/stack-diagram/)
[![RepoTrust quality](https://repotrust.synapticcyber.com/badge/github.com/caru-ini/stack-diagram/quality.svg)](https://repotrust.synapticcyber.com/r/github.com/caru-ini/stack-diagram/)
[![RepoTrust security](https://repotrust.synapticcyber.com/badge/github.com/caru-ini/stack-diagram/security.svg)](https://repotrust.synapticcyber.com/r/github.com/caru-ini/stack-diagram/)