shinshin86/mesh-avatar-studio
Turn one illustration into an animated 2D mesh avatar with a coding agent and a local editor
- Repository: https://github.com/shinshin86/mesh-avatar-studio
- Commit:
6d2817aa0869365a0a5634241bf50af6bfd78a2a - Generated: 2026-11-14T00:14:46+00:00
- Scorer 0.1.0, scoring prov-4+qual-2+sec-2, report schema v2
Scores
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 70 | explicit | 95% | 100% |
| Code quality | 70 | adequate | 90% | 100% |
| Security | 55 | weak | 85% | 100% |
AI provenance
Explicit AI attribution on 69% of first-party code added; an estimated 69% including velocity signals.
- Explicitly attributed share (lower bound): 69.5%
- Unattributed share in AI-consistent velocity bursts: 4.4%
- Estimated AI-generated share: 69.5%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| Claude Code | 130 | 31,681 |
| OpenAI Codex | 8 | 329 |
- AI tooling configured in repo: claude-code, generic-agent
Current source lines last changed by AI-attributed commits: 23,054 of 32,450.
| Findings per 1,000 lines | AI-attributed | Other | Ratio |
|---|---|---|---|
| Quality | 0.781 | 2.341 | 0.33x |
| Security | 2.125 | 0.319 | 6.66x |
- Stylometry index: 0.03 per 1,000 lines (narrated steps 0, placeholders 0, assistant phrasing 0, emoji 2). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2026-09 | 6,147 | 0% |
| 2026-10 | 35,096 | 77% |
| 2026-11 | 4,826 | 100% |
Evidence
- Claude Code: on merged branch (c220f4eb0a) (73d6531bca88)
- Claude Code: trailer 'Co-Authored-By: Claude' (4732e76fdb52)
- Claude Code: trailer 'Co-Authored-By: Claude' (afb3e6d7dc2f)
- Claude Code: trailer 'Co-Authored-By: Claude' (571566de024a)
- Claude Code: trailer 'Co-Authored-By: Claude' (01a34e8a7987)
- Claude Code: trailer 'Co-Authored-By: Claude' (3a2eed52b46f)
- OpenAI Codex: on merged branch (fceeced452) (8263722b9874)
- OpenAI Codex: on merged branch (3af275e0b1) (58f6598d78ad)
- OpenAI Codex: on merged branch (3af275e0b1) (bcaedfad55fa)
- OpenAI Codex: on merged branch (3af275e0b1) (2ee6dd29d88e)
- OpenAI Codex: on merged branch (3af275e0b1) (f7798fd037ec)
- OpenAI Codex: on merged branch (3af275e0b1) (4c5929fcd67d)
- Claude Code: trailer 'Co-Authored-By: Claude' (1b90af02aee7)
- Claude Code: trailer 'Co-Authored-By: Claude' (f9a1542b1ba6)
- Claude Code: trailer 'Co-Authored-By: Claude' (7566e98426f5)
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.33, CI runs tests; 30% of function code in complex or long functions; 11% duplicated lines. Weakest area: complexity.
| Area | Score |
|---|---|
| Complexity (lizard) | 41 |
| Duplication | 53 |
| Code smells (Opengrep) | 86 |
| Tests and CI | 92 |
| Documentation | 65 |
| Type safety | 86 |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 2,648; mean complexity 3.3, 90th percentile 7; 85 complex and 28 long functions
- Duplicated lines: 10.7% of 25,956 compared
- Tests: 10,731 test lines for 32,450 source lines (ratio 0.33); CI test commands: npm test, go test, cargo test; 75% of recent source commits also change tests
- Docs missing or thin: contributing, changelog
Most complex functions:
- (anonymous) in src/server/local-projects.ts: complexity 114, 155 lines
- Workspace in src/editor/App.tsx: complexity 105, 175 lines
- update in packages/runtime/src/engine/motion.js: complexity 89, 158 lines
- update in reference/engine/motion.js: complexity 76, 138 lines
- update in native/crates/mesh-avatar-core/src/engine/motion.rs: complexity 67, 262 lines
Security
Security posture is weak: 21 known vulnerabilities in 10 dependencies; 2 high-severity SAST findings; 15 high-severity workflow issues. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 85 |
| Vulnerable dependencies (OSV) | 34 |
| CI workflows (zizmor) | 4 |
| Posture (policy, updates, signing, lockfiles) | 0 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 21 in 10 packages (critical 4, high 4, medium 8, low 1)
-
Posture checks passed: none; missing: security policy, dependency updates, signed commits, lockfiles
Top findings
| Severity | Finding | Location |
|---|---|---|
| critical | osv/RUSTSEC-2026-0369: [email protected] (crates.io) is affected by RUSTSEC-2026-0369 |
native/Cargo.lock |
| critical | osv/GHSA-m665-v7pm-7grj: [email protected] (crates.io) is affected by GHSA-m665-v7pm-7grj |
native/Cargo.lock |
| critical | osv/GHSA-5gmw-xhrv-c9v3: [email protected] (npm) is affected by GHSA-5gmw-xhrv-c9v3 |
package-lock.json |
| critical | osv/GHSA-85c8-ppgw-ccpr: [email protected] (npm) is affected by GHSA-85c8-ppgw-ccpr |
package-lock.json |
| high | opengrep/javascript.lang.security.audit.spawn-shell-true: Found '$SPAWN' with '{shell: process.platform === 'win32' && command === 'npm'}'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use '{sh [confidence low] |
packages/create-mesh-avatar-studio/index.mjs:82 |
| high | opengrep/javascript.lang.security.audit.spawn-shell-true: Found '$SPAWN' with '{shell: process.platform === 'win32'}'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use '{shell: false}' instead. [confidence low] |
tools/prepack.mjs:11 |
| high | osv/RUSTSEC-2026-0367: [email protected] (crates.io) is affected by RUSTSEC-2026-0367 |
native/Cargo.lock |
| high | osv/GHSA-q7v9-x93c-xqv3: [email protected] (crates.io) is affected by RUSTSEC-2026-0429, GHSA-q7v9-x93c-xqv3 |
native/Cargo.lock |
| high | osv/GHSA-68fv-2mgg-jv7q: [email protected] (npm) is affected by GHSA-68fv-2mgg-jv7q |
package-lock.json |
| high | osv/GHSA-587h-7wmj-h5pm: [email protected] (npm) is affected by GHSA-587h-7wmj-h5pm |
package-lock.json |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:20 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:23 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:65 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:82 |
| 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/ci.yml:98 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:104 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/pages.yml:39 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/pages.yml:42 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/pages.yml:54 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/pages.yml:57 |
| 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:20 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:23 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:50 |
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
- star-burst: 2344 stars in 41 days (57/day)
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
- Source lines: 32,450; test lines: 10,731
| Language | Lines |
|---|---|
| Rust | 16,067 |
| TypeScript | 15,567 |
| JavaScript | 8,078 |
| Python | 2,651 |
| C | 798 |
| Shell | 20 |