Public scan — anyone with this URL can view this analysis. Sign up to track your own repos privately, run scheduled re-scans, and get AI fix prompts via your dashboard.
22 of your 33 findings came from Repobility's proprietary detections. ✓ Repobility tags below mark them.

Scan timing: clone 4.59s · analysis 5.84s · 3.3 MB · GitHub API rate-limit (preflight)

malbiruk/driftwm

https://github.com/malbiruk/driftwm · scanned 2026-06-06 00:53 UTC (4 days ago) · 10 languages

60 raw signals (30 security + 30 graph) 79th percentile · Rust · medium (20-100K LoC) System graph score 98 (lower by 19)

UNIFIED Repobility · multi-layer engine · AI coders

Complete repo analysis

Last scanned 4 days ago · v2 · 27 actionable findings from 2 signal sources. 18 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.

JSON
Score breakdown â 2026-05-18-v5
Component Sub-score Weight Contribution
structure_score 100.0 0.15 15.00
security_score 96.5 0.25 24.12
testing_score 36.0 0.20 7.20
documentation_score 100.0 0.15 15.00
practices_score 75.0 0.15 11.25
code_quality 66.1 0.10 6.61
Overall 1.00 79.2
Severity distribution — click a segment to filter
Active filters: excluding tests × Reset all
Scan summary Quality grade B+ (79/100). Dimensions: security 96, maintainability 100. 30 findings (10 security). 40,351 lines analyzed.

Showing 20 of 27 actionable findings. 45 raw detector signals were grouped into reader-sized issues. Click TP / FP to vote on a finding's accuracy — votes adjust the confidence weighting and improve detection across the platform.

medium Security checks cicd CI/CD security conf 0.90 ✓ Repobility 5 occurrences GitHub Action is tag-pinned rather than SHA-pinned
Action `dtolnay/rust-toolchain` pinned to mutable ref `@stable` uses a mutable tag or branch. Pin external actions to a reviewed full commit SHA when the workflow is security-sensitive.
lines 23, 40, 42, 64, 68
.github/workflows/ci.yml:23, 40, 42, 64, 68 (5 hits)
CI/CD securitySupply chainGitHub Actions
low Security checks cicd CI/CD security conf 0.90 ✓ Repobility 3 occurrences GitHub Action is tag-pinned rather than SHA-pinned
Action `actions/checkout` pinned to mutable ref `@v5` uses a mutable tag or branch. Pin external actions to a reviewed full commit SHA when the workflow is security-sensitive.
lines 22, 34, 58
.github/workflows/ci.yml:22, 34, 58 (3 hits)
CI/CD securitySupply chainGitHub Actions
high Security checks software dependencies conf 0.88 rand: RUSTSEC-2026-0097
Rand is unsound with a custom logger using `rand::rng()`
Cargo.lock
high Security checks software dependencies conf 0.90 ✓ Repobility Workflow container/services image `archlinux:base-devel` unpinned
`container/services image: archlinux:base-devel` without `@sha256:...` pulls a mutable tag at workflow-run time. Treat workflow container references with the same supply-chain discipline as Dockerfile FROM lines.
.github/workflows/aur-release.yml:19
low Security checks quality Error handling conf 0.55 ✓ Repobility 2 occurrences Broad exception handler needs review
This handler catches Exception/BaseException. It is actionable when it swallows errors without logging, re-raising, or returning a structured error. Handlers that intentionally convert exceptions into typed error results should not be treated as high risk.
lines 310, 396
extras/widgets/common.py:310, 396 (2 hits)
Error handlingquality
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — dev/scripts/tracy_analyze.py:53
`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — extras/widgets/notif_widget.py:47
`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — extras/widgets/power_menu.py:107
`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — extras/widgets/power_widget.py:27
`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — extras/widgets/stats_widget.py:90
`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries.
runtime safetyRobustness
medium System graph quality Tests conf 1.00 Very low test-to-source ratio
8 test file(s) for 95 source file(s) (ratio 0.08). Consider adding integration or unit tests for critical paths.
Coverage
low Security checks quality Quality conf 0.60 6 occurrences Duplicated implementation block across source files
Duplicate implementation blocks are maintenance debt. Keep them visible, but they are not a high-severity defect unless the duplicated logic is security-sensitive or drifting.
5 files, 6 locations
tests/config_toml_test.rs:4, 6 (2 hits)
src/grabs/resize_grab.rs:90
src/handlers/xdg_shell.rs:113
src/input/pointer.rs:379
tests/config_parse_test.rs:9
duplicationquality
low Security checks software dependencies conf 0.88 pygments: GHSA-5239-wwwm-4pmq
Pygments has Regular Expression Denial of Service (ReDoS) due to Inefficient Regex for GUID Matching
extras/widgets/uv.lock
low System graph quality Integrity conf 1.00 Near-duplicate function bodies in 2 places
Functions with the same first-5-line body hash: extras/widgets/canvas_widget.py:render, extras/widgets/notif_widget.py:render This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate.
duplicatesduplication
low System graph software Dead code conf 1.00 Possibly dead Python function: cycle_tuned_profile
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
extras/widgets/common.py:449
low System graph software Dead code conf 1.00 Possibly dead Python function: read_keyboard_layout
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
extras/widgets/common.py:584
low System graph quality Complexity conf 1.00 Very large file: src/backend/udev.rs (1802 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: src/render/mod.rs (1301 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: src/render/tile_chunks.rs (1337 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: src/state/mod.rs (1406 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
For AI agents: Voting guide (TP/FP) MCP manifest Stdio wrapper SARIF Integrate Findings queue Vote TP/FP on findings to calibrate the engine.
For AI agents + API integrations
Email me when this repo regresses
Free. We re-scan periodically; new criticals → your inbox. No signup required for the scan itself.
API access

This page is publicly accessible at: https://repobility.com/scan/c61dab33-1b8c-4b61-8088-1a251c7800b9/

To check status programmatically (no auth required):

curl -s https://repobility.com/api/v1/public/scan/c61dab33-1b8c-4b61-8088-1a251c7800b9/

Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.