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.
59 of your 151 findings came from Repobility's proprietary detections. ✓ Repobility tags below mark them.

Scan timing: clone 13.72s · analysis 9.04s · 235.8 MB · GitHub API rate-limit (preflight)

Draigus/NBIAI-TEAM

https://github.com/Draigus/NBIAI-TEAM · scanned 2026-06-16 04:21 UTC (2 months ago) · 10 languages

136 raw signals (132 security + 4 graph) 11/13 scanners ran 22nd percentile · Javascript · large (100-500K LoC) System graph score 82 (lower by 19)

UNIFIED Repobility · multi-layer engine · AI coders

Complete repo analysis

Last scanned 2 months ago · v1 · 87 actionable findings from 2 signal sources. 49 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 40.0 0.15 6.00
security_score 100.0 0.25 25.00
testing_score 68.0 0.20 13.60
documentation_score 56.0 0.15 8.40
practices_score 40.0 0.15 6.00
code_quality 46.0 0.10 4.60
Overall 1.00 63.6
security_score may be inflated — optional security scanners were skipped on this fast scan
Severity distribution — click a segment to filter
Active filters: excluding tests × Reset all
Corpus Intelligence Cross-corpus context (cohort percentile, top patterns, fix plan) is shown only on repositories you own. Sign up and connect your repo to view it.
Scan summary Repository scanned at 82.4/100 with 55.6% coverage. It contains 22 nodes across 0 cross-layer flows, written primarily in mixed languages. Engine surfaced 4 findings — concentrated in quality (3), security (1). Risk profile is low: 0 critical, 0 high, 3 medium. Recommended next step: open the quality layer findings first — that's where the highest-impact wins live.

Showing 55 of 87 actionable findings. 136 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.

low Security checks quality Quality conf 1.00 ✓ Repobility [MINED007] Sql String Concat: cursor.execute(f"... {user_input} ...") — SQL injection.
Review and fix per the pattern semantics. See CWE-89 / A03:2021 for context.
projects/news-aggregator/src/llm/client.ts:126
high Security checks quality Quality conf 1.00 ✓ Repobility [MINED107] Missing import: `gc` used but not imported: The file uses `gc.something(...)` but never imports `gc`. This raises NameError at runtime the first time the line executes.
Add `import gc` at the top of the file.
Clients/Couch Heroes/production/consolidate_template_style.py:406
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: POST /api/admin/cleanse: Express route on /admin path (/api/admin/cleanse) with no auth middleware.
Add an auth middleware: app.post('/api/admin/cleanse', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/admin.js:709
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: POST /api/admin/granola-sync: Express route on /admin path (/api/admin/granola-sync) with no auth middleware.
Add an auth middleware: app.post('/api/admin/granola-sync', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/admin.js:923
low Security checks quality Quality conf 1.00 ✓ Repobility [MINED021] Path Traversal Os Join: os.path.join(user_dir, filename) where filename can contain "../" — directory escape.
Review and fix per the pattern semantics. See CWE-22 / A01:2021 for context.
_archive/nbiai_app/scripts/fix_dispatcher.py:5
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express DELETE /api/expenses/categories/:id has no auth: Express route DELETE /api/expenses/categories/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.delete('/api/expenses/categories/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/expenses.js:43
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express DELETE /api/leads/:id has no auth: Express route DELETE /api/leads/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.delete('/api/leads/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:550
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express DELETE /api/leads/field-options/:id has no auth: Express route DELETE /api/leads/field-options/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.delete('/api/leads/field-options/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:134
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express DELETE /api/leads/resource-types/:id has no auth: Express route DELETE /api/leads/resource-types/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.delete('/api/leads/resource-types/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:98
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express DELETE /api/leads/stages/:id has no auth: Express route DELETE /api/leads/stages/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.delete('/api/leads/stages/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:65
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express DELETE /api/teams/:id has no auth: Express route DELETE /api/teams/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.delete('/api/teams/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/teams.js:170
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express DELETE /api/teams/:id/members/:user_id has no auth: Express route DELETE /api/teams/:id/members/:user_id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.delete('/api/teams/:id/members/:user_id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/teams.js:236
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express PATCH /api/leads/:id has no auth: Express route PATCH /api/leads/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.patch('/api/leads/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:442
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express PATCH /api/leads/field-options/:id has no auth: Express route PATCH /api/leads/field-options/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.patch('/api/leads/field-options/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:124
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express PATCH /api/leads/resource-types/:id has no auth: Express route PATCH /api/leads/resource-types/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.patch('/api/leads/resource-types/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:88
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express PATCH /api/leads/stages/:id has no auth: Express route PATCH /api/leads/stages/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.patch('/api/leads/stages/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:53
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express PATCH /api/teams/:id has no auth: Express route PATCH /api/teams/:id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.patch('/api/teams/:id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/teams.js:134
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express PATCH /api/teams/:id/members/:user_id has no auth: Express route PATCH /api/teams/:id/members/:user_id declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.patch('/api/teams/:id/members/:user_id', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/teams.js:214
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express POST /api/expenses has no auth: Express route POST /api/expenses declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.post('/api/expenses', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/expenses.js:147
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express POST /api/expenses/categories has no auth: Express route POST /api/expenses/categories declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.post('/api/expenses/categories', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/expenses.js:34
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express POST /api/internal/notifications has no auth: Express route POST /api/internal/notifications declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.post('/api/internal/notifications', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/server.js:296
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express POST /api/leads has no auth: Express route POST /api/leads declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.post('/api/leads', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:363
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express POST /api/leads/:id/activities has no auth: Express route POST /api/leads/:id/activities declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.post('/api/leads/:id/activities', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:604
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express POST /api/leads/field-options has no auth: Express route POST /api/leads/field-options declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.post('/api/leads/field-options', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:111
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express POST /api/leads/resource-types has no auth: Express route POST /api/leads/resource-types declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.post('/api/leads/resource-types', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:75
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express POST /api/leads/stages has no auth: Express route POST /api/leads/stages declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.post('/api/leads/stages', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:40
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express POST /api/teams has no auth: Express route POST /api/teams declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.post('/api/teams', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/teams.js:105
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express POST /api/teams/:id/members has no auth: Express route POST /api/teams/:id/members declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.post('/api/teams/:id/members', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/teams.js:187
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express PUT /api/leads/:id/resources has no auth: Express route PUT /api/leads/:id/resources declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.put('/api/leads/:id/resources', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/leads.js:565
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED113] Express PUT /api/settings/:key has no auth: Express route PUT /api/settings/:key declared without an auth middleware in its handler chain. Destructive methods (POST/PUT/DELETE/PATCH) on unauthenticated routes are OWASP A01:2021 broken access control.
Add an auth middleware: app.put('/api/settings/:key', requireAuth, handler) — or mount the router under app.use('/api', authMiddleware) and ensure the path is covered. If truly public, mark with a comment.
dashboard-server/routes/settings.js:25
high Security checks software dependencies conf 0.90 ✓ Repobility [MINED118] Dockerfile FROM `node:20-alpine` not pinned by digest: `FROM node:20-alpine` resolves the tag at build time. The registry CAN re-push a different image for the same tag, so every build is potentially different. Production images should pin to `image@sha256:...` for reproducibility + supply-chain integrity.
Replace with: `FROM node:20-alpine@sha256:<digest>`. Get the digest from `docker manifest inspect`. Re-pin via a scheduled bot (Renovate, Dependabot).
_archive/nbiai_app/app/Dockerfile:1
high Security checks software dependencies conf 0.90 ✓ Repobility [MINED134] Binary file `Clients/Couch Heroes/build_inputs/__pycache__/classify.cpython-312.pyc` committed in source repo: `Clients/Couch Heroes/build_inputs/__pycache__/classify.cpython-312.pyc` is a .pyc binary (16,208 bytes) committed to a repo that otherwise has 374 source files. Trojan binaries inside otherwise-normal source repos are a known supply-chain attack: a compromised dependency or PR slips in a binary that gets executed by build scripts.
Audit the binary's provenance. If it's vendored library code, document it in a VENDORED.md. If it's a build artifact, add the extension to .gitignore and rebuild from source.
Clients/Couch Heroes/build_inputs/__pycache__/classify.cpython-312.pyc:1
high Security checks software dependencies conf 0.90 ✓ Repobility [MINED134] Binary file `Clients/Couch Heroes/production/__pycache__/build_v12_clean.cpython-312.pyc` committed in source repo: `Clients/Couch Heroes/production/__pycache__/build_v12_clean.cpython-312.pyc` is a .pyc binary (82,580 bytes) committed to a repo that otherwise has 374 source files. Trojan binaries inside otherwise-normal source repos are a known supply-chain attack: a compromised dependency or PR slips in a binary that gets executed by build scripts.
Audit the binary's provenance. If it's vendored library code, document it in a VENDORED.md. If it's a build artifact, add the extension to .gitignore and rebuild from source.
Clients/Couch Heroes/production/__pycache__/build_v12_clean.cpython-312.pyc:1
high Security checks cicd CI/CD security conf 0.92 Dockerfile copies the entire context without .dockerignore
Create .dockerignore before using broad context copies, or copy only the required files and directories.
_archive/nbiai_app/app/Dockerfile:13 CI/CD securitycontainers
high Security checks security auth conf 0.83 Secret-like setting is echoed into a password input value
Never prefill secret fields with stored values. Show a masked status such as configured/not configured, require explicit rotation to replace the value, and return the raw key only once at creation time.
_archive/nbiai_app/app/client/src/pages/SettingsPage.tsx:380
low Security checks quality Error handling conf 1.00 [ERR002] Empty Catch Block: Empty catch blocks hide errors.
Log the error or rethrow it. Use console.error() at minimum.
dashboard-server/public/js/nbi-idb.js:39
low Security checks quality Error handling conf 1.00 [ERR002] Empty Catch Block: Empty catch blocks hide errors.
Log the error or rethrow it. Use console.error() at minimum.
dashboard-server/cron/dreaming/index.js:101
high Security checks quality Quality conf 0.72 Agent control bridge may listen on a network interface without visible auth
Bind local agent bridges to 127.0.0.1 by default. If remote access is required, require a bearer token or mTLS, enforce origin/CSRF checks for browser clients, and document the threat model.
.claude/skills/brainstorming/scripts/start-server.sh:12
high Security checks quality Quality conf 0.72 Agent control bridge may listen on a network interface without visible auth
Bind local agent bridges to 127.0.0.1 by default. If remote access is required, require a bearer token or mTLS, enforce origin/CSRF checks for browser clients, and document the threat model.
.agents/skills/brainstorming/scripts/start-server.sh:12
high Security checks security auth conf 0.82 Browser storage is used for session token material
Prefer httpOnly, Secure, SameSite cookies or short-lived in-memory tokens. Avoid persistent browser storage for access, refresh, ID, or partner session tokens.
_archive/nbiai_app/app/client/src/lib/websocket.ts:36
medium Security checks quality Quality conf 0.76 Compliance or security claim is near a placeholder link
Link trust claims to current evidence, downgrade unverifiable wording, and replace placeholder footer/legal/security links with real destinations.
company/knowledge/design-templates/web-prototype-taste-soft/example.html:529
medium Security checks cicd CI/CD security conf 0.90 Docker build context has no .dockerignore
Add .dockerignore with at least .git, .env, private keys, dependency folders, build outputs, and local databases.
.dockerignore CI/CD securitycontainers
high Security checks cicd CI/CD security conf 0.82 Docker final stage has no non-root USER
Add a non-root USER in the final runtime stage after files and permissions are prepared.
_archive/nbiai_app/app/Dockerfile:30 CI/CD securitycontainers
high Security checks quality Quality conf 0.80 localStorage write failures are swallowed silently
Handle QuotaExceededError explicitly, show a toast or error state, and guide the user to export/clear old local data. Log non-quota failures for diagnostics.
_archive/nbiai_app/app/client/src/components/layout/AppShell.tsx:204
high Security checks quality Quality conf 0.82 Parallel implementation file sits beside a canonical file
Merge the intended change into the canonical file, update tests/imports, and delete the parallel implementation if it is not the active entry point.
Clients/Couch Heroes/production/build_v12_clean.py:1
medium Security checks quality Quality conf 0.78 3 occurrences Suspicious implementation file appears unreferenced
Confirm whether this file is reachable. If not, delete it; if yes, wire it through explicit imports, routes, or entry points and add a test that proves the path executes.
3 files, 3 locations
Clients/Couch Heroes/production/_miro_stories_new.py:1
Clients/Couch Heroes/scripts/audit_and_fix.py:1
dashboard-server/fix_usd_final.py:1
medium System graph quality Agent instructions conf 1.00 Agent authority lacks a verifier contract: CLAUDE.md
This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes.
CLAUDE.md VerificationClaude instruction
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — fix_goals_acronyms.py:163
`requests.get(...)` 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 security Coverage conf 1.00 No auth library detected
The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing.
auth
low Security checks quality Quality conf 0.68 Archive or legacy directory is mixed into the active repository root
Move archived code out of the active repository, mark it with .repobilityignore, or document exactly why it must stay and how scanners should treat it.
_archive:1
low Security checks quality Quality conf 0.64 3 occurrences Duplicate top-level symbol appears in a patch-style file
Keep one authoritative implementation, update imports to point at it, and remove or rename the duplicate symbol.
3 files, 3 locations
Clients/Couch Heroes/production/build_final.py:1
Clients/Couch Heroes/scripts/audit_and_fix.py:1
dashboard-server/fix_usd_final.py:1
low Security checks quality Quality conf 0.60 23 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.
12 files, 16 locations
Clients/Couch Heroes/scripts/save_glen_answers.py:1, 56 (2 hits)
Clients/Couch Heroes/scripts/write_excel.py:2, 145 (2 hits)
dashboard-server/redact_pdfs_v2.py:11, 92 (2 hits)
dashboard-server/verify_expenses.py:2, 10 (2 hits)
.claude/harness/lib/write-guard.js:55
Clients/Couch Heroes/production/consolidate_template_style.py:458
Clients/Couch Heroes/production/qa_strict.py:6
Clients/Couch Heroes/save_glen_answers.py:1
duplicationquality
low Security checks quality Documentation No LICENSE file
Add a LICENSE file to your repository. Use choosealicense.com to pick the right license (MIT for permissive, Apache 2.0 for patent protection, GPL for copyleft).
high Security checks quality Quality conf 0.62 4 occurrences Source file name looks like an AI patch artifact
Rename it to the domain concept it implements or merge it into the existing module it was meant to change.
4 files, 4 locations
Clients/Couch Heroes/production/_miro_stories_new.py:1
Clients/Couch Heroes/production/build_final.py:1
Clients/Couch Heroes/scripts/audit_and_fix.py:1
dashboard-server/fix_usd_final.py:1
low System graph quality Debug conf 1.00 Debug logging residue appears in source files
Found 18 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup.
CleanupRepo hardeningGenerated repo pattern
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/b4c7e08e-a031-4687-978b-7c5a2cef4cef/

To check status programmatically (no auth required):

curl -s https://repobility.com/api/v1/public/scan/b4c7e08e-a031-4687-978b-7c5a2cef4cef/

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.