RepoTrust

Leaderboard github.com

BCUninstaller/Bulk-Crap-Uninstaller

Remove large amounts of unwanted applications quickly.

  • View repository ↗
  • C#
  • ★ 22,478
  • commit 30da609384c9
  • scored 2026-11-14
  • scoring prov-5+qual-2+sec-2

AI provenance

0%

possible

Confidence
65%
Coverage
100%

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

Code quality

67/100

adequate

Confidence
90%
Coverage
100%

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

Security

80/100

adequate

Confidence
85%
Coverage
100%

Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.

AI provenance

0% possible

Weak signals consistent with AI-assisted development. 2 commit(s) carry explicit AI attribution, too few to characterize the codebase.

How the score is built

  • Explicitly attributed share0%
  • Unattributed share in AI-pace bursts10%
  • Estimated AI-generated share0%
  • AI tool configuration files0
  • Work sessions at AI pace3
  • Releases at AI pace1
  • Coding-style index (1.0+ means possible)0.04

Attributed AI tools

ToolCommitsLines addedFirst seenLast seen
OpenAI Codex2872026-06-082026-06-09

Lines added per month all AI-attributed share

  1. 2015-0830,653 · 0% AI
  2. 2015-0916,115 · 0% AI
  3. 2015-101,040 · 0% AI
  4. 2015-123,223 · 0% AI
  5. 2016-012,382 · 0% AI
  6. 2016-023,714 · 0% AI
  7. 2016-031,255 · 0% AI
  8. 2016-04227 · 0% AI
  9. 2016-071,676 · 0% AI
  10. 2016-08416 · 0% AI
  11. 2016-1099 · 0% AI
  12. 2016-121,118 · 0% AI
  13. 2017-0151,287 · 0% AI
  14. 2017-027,312 · 0% AI
  15. 2017-03632 · 0% AI
  16. 2017-041,152 · 0% AI
  17. 2017-051,027 · 0% AI
  18. 2017-061,072 · 0% AI
  19. 2017-071,081 · 0% AI
  20. 2017-08352 · 0% AI
  21. 2017-094,626 · 0% AI
  22. 2017-10845 · 0% AI
  23. 2017-11710 · 0% AI
  24. 2017-125,557 · 0% AI
  25. 2018-01504 · 0% AI
  26. 2018-02470 · 0% AI
  27. 2018-0346 · 0% AI
  28. 2018-0472 · 0% AI
  29. 2018-06579 · 0% AI
  30. 2018-071,748 · 0% AI
  31. 2018-082,043 · 0% AI
  32. 2018-091,382 · 0% AI
  33. 2018-10862 · 0% AI
  34. 2018-11292 · 0% AI
  35. 2019-01149 · 0% AI
  36. 2019-021 · 0% AI
  37. 2019-03395 · 0% AI
  38. 2019-040 · 0% AI
  39. 2019-053,392 · 0% AI
  40. 2019-06507 · 0% AI
  41. 2019-0855 · 0% AI
  42. 2019-09196 · 0% AI
  43. 2020-01286 · 0% AI
  44. 2021-0522,540 · 0% AI
  45. 2021-0769 · 0% AI
  46. 2021-082 · 0% AI
  47. 2021-1014 · 0% AI
  48. 2021-1217 · 0% AI
  49. 2022-02748 · 0% AI
  50. 2022-05320 · 0% AI
  51. 2022-060 · 0% AI
  52. 2022-083,960 · 0% AI
  53. 2022-09299 · 0% AI
  54. 2023-010 · 0% AI
  55. 2023-03335 · 0% AI
  56. 2023-05128 · 0% AI
  57. 2023-060 · 0% AI
  58. 2023-0753 · 0% AI
  59. 2023-0915 · 0% AI
  60. 2023-1041 · 0% AI
  61. 2023-120 · 0% AI
  62. 2024-014 · 0% AI
  63. 2024-020 · 0% AI
  64. 2024-030 · 0% AI
  65. 2024-05108 · 0% AI
  66. 2024-060 · 0% AI
  67. 2024-0848 · 0% AI
  68. 2024-090 · 0% AI
  69. 2024-11953 · 0% AI
  70. 2024-120 · 0% AI
  71. 2025-02213 · 0% AI
  72. 2025-0421 · 0% AI
  73. 2025-06664 · 0% AI
  74. 2025-07118 · 0% AI
  75. 2025-0844 · 0% AI
  76. 2026-0316,614 · 0% AI
  77. 2026-061,485 · 6% AI
  78. 2026-0847 · 0% AI
  79. 2026-09339 · 0% AI

Findings in AI-attributed lines vs the rest

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

Findings per 1,000 linesAI-attributedOtherRatio
Code quality0.000.00—
Security0.000.04—

Evidence by analyzer

Explicit AI attributionok3 items
attributed_commit_share
0.1%
attributed_commits
2
attributed_loc
87
attributed_loc_share
0.0%
commits
1,650
effective_loc
199,749
tools_detected
1
AI tool configurationok
artifacts
0
tools_configured
0
workflow_agents
0
Commit velocityok3 items
excluded_import_loc
96,275
flagged_loc
19,243
flagged_loc_share
18.6%
flagged_units
3
max_loc_per_hour
24,500
measured_loc
103,474
median_loc_per_hour
72.41
pr_timed_units
70
pre_ai_era_burst_loc
18,385
pre_ai_era_bursts
5
pre_ai_era_measured_loc
76,815
work_units
553
Release velocityok1 item
flagged_releases
1
max_loc_per_day
4,896
releases
72
Coding styleok4 items
count:assistant_voice
0
count:emoji_in_code
0
count:narrated_steps
4
count:placeholder
0
files:assistant_voice
0
files:emoji_in_code
0
files:narrated_steps
3
files:placeholder
0
index
0.04
lines_scanned
106,558
per_kloc:assistant_voice
0
per_kloc:emoji_in_code
0
per_kloc:narrated_steps
0.04
per_kloc:placeholder
0
Findings in AI-written linesok
ai_lines
87
blame_failures
0
files_blamed
559
other_lines
130,438
quality:ai_findings
0
quality:ai_per_kloc
0
quality:other_findings
0
quality:other_per_kloc
0
security:ai_findings
0
security:ai_per_kloc
0
security:other_findings
5
security:other_per_kloc
0.04

Code quality

67 adequate

Code quality is adequate: test-to-source ratio 0.01, CI runs tests; 20% of function code in complex or long functions; 9% duplicated lines. Weakest area: complexity.

How the score is built

  • Complexity55
  • Duplication59
  • Lint and smells100
  • Tests and CI57
  • Documentation80
  • Type safetynot measured
  • Review processnot measured

Evidence by analyzer

Complexity (lizard)ok10 items
complex_functions
44
function_nloc
49,997
functions
3,699
long_functions
33
many_param_functions
2
mean_ccn
2.96
p90_ccn
6
risky_nloc_share
19.7%
Duplication (jscpd)ok10 items
compared_lines
89,903
duplicated_lines
7,936
duplicated_share
8.8%
files
559
Lintok
findings
0
scanned_lines
130,525
weighted_findings
0
Tests and CIok3 items
  • CI config: .github/workflows/ci.yaml .github/workflows/ci.yaml
  • CI config: .github/workflows/winget.yml .github/workflows/winget.yml
  • CI runs tests (dotnet 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
no
ci_files
2
cochange_commits
183
cochange_share
4.4%
source_lines
130,525
test_lines
714
test_ratio
0.01
Documentationok3 items
  • README.md README.md
  • Licence.txt Licence.txt
  • CONTRIBUTING.md CONTRIBUTING.md
check:changelog
no
check:contributing
yes
check:license
yes
check:readme
yes
readme_lines
46
Type safetyskipped

Security

80 adequate

Security posture is adequate: 2 high-severity SAST findings; 2 high-severity workflow issues. Weakest area: posture.

How the score is built

  • Secrets97
  • Static analysis (SAST)99
  • Vulnerable dependenciesnot measured
  • CI workflows66
  • Security posture20
  • OpenSSF Scorecardnot measured

Evidence by analyzer

OpenSSF Scorecardskipped

no published OpenSSF Scorecard result for this repo

Package registriesskipped

no registry dependencies declared

Secrets (gitleaks)ok
secrets_current
0
secrets_history
0
secrets_low_confidence
1
secrets_nonprod
0
Static analysis (opengrep)ok
findings
4
findings_high
2
findings_low
0
findings_medium
2
parse_errors
1
scanned_lines
130,525
weighted_findings
2.70
Dependencies (osv-scanner)skipped
CI workflows (zizmor)ok
findings
3
findings_high
2
findings_low
0
findings_medium
1
penalty
25.20
workflows
2
Security postureok
check:dependency_updates
no
check:lockfiles
yes
check:security_policy
no
check:signed_commits
yes
signed_commit_share
55.0%
unpinned_manifests
0
Release downloadsok5 items
binary_assets
36
signals
1
suspicious
0

Findings

4 high3 medium1 low

SeverityRuleLocationMessageTool
high zizmor/template-injection .github/workflows/winget.yml:17 code injection via template expansion [confidence high] CI workflows (zizmor)
high zizmor/template-injection .github/workflows/winget.yml:19 code injection via template expansion [confidence high] CI workflows (zizmor)
high opengrep/csharp.lang.security.injections.os-command-injection source/KlocTools/Extensions/ProcessExtensions.cs:116 The software constructs all or part of an OS command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended OS command when it... Static analysis (opengrep)
high opengrep/csharp.lang.security.injections.os-command-injection source/KlocTools/Extensions/ProcessExtensions.cs:126 The software constructs all or part of an OS command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended OS command when it... Static analysis (opengrep)
medium zizmor/artipacked .github/workflows/ci.yaml:18 credential persistence through GitHub Actions artifacts [confidence low] CI workflows (zizmor)
medium opengrep/csharp.lang.security.filesystem.unsafe-path-combine source/UninstallTools/Startup/Normal/StartupEntryManager.cs:177 String argument backupPath is used to read or write data from a file via Path.Combine without direct sanitization via Path.GetFileName. If the path is user-supplied data this can lead to path traversal. [confidence medium] Static analysis (opengrep)
medium opengrep/csharp.lang.security.filesystem.unsafe-path-combine source/UninstallTools/Startup/Task/TaskEntry.cs:74 String argument backupPath is used to read or write data from a file via Path.Combine without direct sanitization via Path.GetFileName. If the path is user-supplied data this can lead to path traversal. [confidence medium] Static analysis (opengrep)
low gitleaks/generic-api-key source/KlocTools/Extensions/FormsExtensions.cs:234 Possible generic-api-key secret in the current tree Secrets (gitleaks)

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-50
Coding styleAI provenanceok—0
Commit velocityAI provenanceokprov-50
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 f1d2b562b4140
Tests and CICode qualityok—0
Type safetyCode qualityskipped—0
CI workflows (zizmor)Securityokzizmor 1.32.03
Dependencies (osv-scanner)Securityskipped—0
Release downloadsSecurityok—0
Security postureSecurityok—0
Package registriesSecurityskipped—0no registry dependencies declared
Static analysis (opengrep)Securityokopengrep 1.33.1; rules f1d2b562b4144
OpenSSF ScorecardSecurityskipped—0no published OpenSSF Scorecard result for this repo
Secrets (gitleaks)Securityokgitleaks 8.30.11

Score history

ScoredCommitScoringAI provenanceQualitySecurity
2026-11-1430da609384c9prov-5+qual-2+sec-20%6780

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/BCUninstaller/Bulk-Crap-Uninstaller/ai.svg)](https://repotrust.synapticcyber.com/r/github.com/BCUninstaller/Bulk-Crap-Uninstaller/)
[![RepoTrust quality](https://repotrust.synapticcyber.com/badge/github.com/BCUninstaller/Bulk-Crap-Uninstaller/quality.svg)](https://repotrust.synapticcyber.com/r/github.com/BCUninstaller/Bulk-Crap-Uninstaller/)
[![RepoTrust security](https://repotrust.synapticcyber.com/badge/github.com/BCUninstaller/Bulk-Crap-Uninstaller/security.svg)](https://repotrust.synapticcyber.com/r/github.com/BCUninstaller/Bulk-Crap-Uninstaller/)
Full text report

Scores

Pillar Score Signal Confidence Coverage
AI provenance (estimated AI-generated share) 0 possible 65% 100%
Code quality 67 adequate 90% 100%
Security 80 adequate 85% 100%

AI provenance

Weak signals consistent with AI-assisted development. 2 commit(s) carry explicit AI attribution, too few to characterize the codebase.

  • Explicitly attributed share (lower bound): 0.0%
  • Unattributed share in AI-consistent velocity bursts: 9.6%
  • Estimated AI-generated share: 0.0%
AI tool Attributed commits Lines added
OpenAI Codex 2 87

Current source lines last changed by AI-attributed commits: 87 of 130,525.

Too few lines in one group to compare finding densities.

  • Stylometry index: 0.04 per 1,000 lines (narrated steps 4, placeholders 0, assistant phrasing 0, emoji 0). Reported as a signal, not scored.
Month Lines added Attributed to AI
2024-05 108 0%
2024-08 48 0%
2024-11 953 0%
2025-02 213 0%
2025-04 21 0%
2025-06 664 0%
2025-07 118 0%
2025-08 44 0%
2026-03 16,614 0%
2026-06 1,485 6%
2026-08 47 0%
2026-09 339 0%

Evidence

  • OpenAI Codex: PR branch 'codex/fix-self-uninstall-cleanup' (51d6ca7728ff)
  • OpenAI Codex: PR branch 'codex/scoop-custom-paths' (2dcf118aa2d2)
  • 12,250 lines of first-party code in ~0.5h (24,500 lines/hour, 2 commit session) (3c9b0d81b13f)
  • 3,181 lines of first-party code in ~0.8h (4,118 lines/hour, 2 commit session) (541f8af7fd4a)
  • v6.0 → v6.1: 13,081 lines in 2.67 days (4,896.0 lines/day) (v6.0...v6.1)
  • 3,812 lines of first-party code in ~4.7h (815 lines/hour, 4 commit session) (bd2b9910241f)
  • step-by-step narration comment: // Finally, draw the images (source/BulkC)
  • step-by-step narration comment: // Finally, draw all the images in their correct location (source/Objec)
  • step-by-step narration comment: // Finally, draw the images (source/Objec)
  • step-by-step narration comment: // Finally, select the row (source/Objec)

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.01, CI runs tests; 20% of function code in complex or long functions; 9% duplicated lines. Weakest area: complexity.

Area Score
Complexity (lizard) 55
Duplication 59
Code smells (Opengrep) 100
Tests and CI 57
Documentation 80
Type safety n/a
Process (Scorecard review/maintenance) n/a
  • Functions: 3,699; mean complexity 3.0, 90th percentile 6; 44 complex and 33 long functions
  • Duplicated lines: 8.8% of 89,903 compared
  • Tests: 714 test lines for 130,525 source lines (ratio 0.01); CI test commands: dotnet test; 4% of recent source commits also change tests
  • Docs missing or thin: changelog

Most complex functions:

Security

Security posture is adequate: 2 high-severity SAST findings; 2 high-severity workflow issues. Weakest area: posture.

Area Score
Secrets (gitleaks, tree + history) 97
Static analysis (Opengrep) 99
Vulnerable dependencies (OSV) n/a
CI workflows (zizmor) 66
Posture (policy, updates, signing, lockfiles) 20
OpenSSF Scorecard n/a
  • Posture checks passed: signed commits, lockfiles; missing: security policy, dependency updates

Top findings

Severity Finding Location
high opengrep/csharp.lang.security.injections.os-command-injection: The software constructs all or part of an OS command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended OS command when it is sent to a downstream component. [confidence low] source/KlocTools/Extensions/ProcessExtensions.cs:116
high opengrep/csharp.lang.security.injections.os-command-injection: The software constructs all or part of an OS command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended OS command when it is sent to a downstream component. [confidence low] source/KlocTools/Extensions/ProcessExtensions.cs:126
high zizmor/template-injection: code injection via template expansion [confidence high] .github/workflows/winget.yml:17
high zizmor/template-injection: code injection via template expansion [confidence high] .github/workflows/winget.yml:19
medium opengrep/csharp.lang.security.filesystem.unsafe-path-combine: String argument backupPath is used to read or write data from a file via Path.Combine without direct sanitization via Path.GetFileName. If the path is user-supplied data this can lead to path traversal. [confidence medium] source/UninstallTools/Startup/Normal/StartupEntryManager.cs:177
medium opengrep/csharp.lang.security.filesystem.unsafe-path-combine: String argument backupPath is used to read or write data from a file via Path.Combine without direct sanitization via Path.GetFileName. If the path is user-supplied data this can lead to path traversal. [confidence medium] source/UninstallTools/Startup/Task/TaskEntry.cs:74
medium zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] .github/workflows/ci.yaml:18
low gitleaks/generic-api-key: Possible generic-api-key secret in the current tree source/KlocTools/Extensions/FormsExtensions.cs:234

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

  • Source lines: 130,525; test lines: 714
Language Lines
C# 131,046
C++ 177
C 16