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

Scan timing: clone 8.73s · analysis 10.02s · 28.8 MB · GitHub API rate-limit (preflight)

unclecode/crawl4ai

https://github.com/unclecode/crawl4ai · scanned 2026-06-05 08:43 UTC (5 days, 19 hours ago) · 10 languages

861 raw signals (257 security + 604 graph) 11/13 scanners ran 82nd percentile · Python · large (100-500K LoC) System graph score 62 (higher by 23)

UNIFIED Repobility · multi-layer engine · AI coders

Complete repo analysis

Last scanned 5 days, 19 hours ago · v2 · 407 actionable findings from 2 signal sources. 152 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 60.0 0.15 9.00
security_score 100.0 0.25 25.00
testing_score 97.0 0.20 19.40
documentation_score 100.0 0.15 15.00
practices_score 83.0 0.15 12.45
code_quality 45.0 0.10 4.50
Overall 1.00 85.3
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
Scan summary Quality grade A- (85/100). Dimensions: security 100, maintainability 60. 257 findings (31 security). 166,985 lines analyzed.

Showing 279 of 407 actionable findings. 559 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.

critical 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.
docs/md_v2/marketplace/backend/database.py:61
critical 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.
crawl4ai/legacy/database.py:40
high Security checks quality Quality conf 1.00 ✓ Repobility 9 occurrences [MINED107] Missing import: `html` used but not imported: The file uses `html.something(...)` but never imports `html`. This raises NameError at runtime the first time the line executes.
Add `import html` at the top of the file.
9 files, 9 locations
crawl4ai/antibot_detector.py:123
crawl4ai/async_url_seeder.py:529
crawl4ai/cache_validator.py:249
crawl4ai/crawlers/amazon_product/crawler.py:17
crawl4ai/deep_crawling/bff_strategy.py:228
crawl4ai/extraction_strategy.py:605
deploy/docker/utils.py:496
tests/memory/benchmark_report.py:460
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: DELETE /admin/apps/{app_id}: Handler `delete_app` serves an /admin path (/admin/apps/{app_id}) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:334
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: DELETE /admin/articles/{article_id}: Handler `delete_article` serves an /admin path (/admin/articles/{article_id}) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:378
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: DELETE /admin/categories/{cat_id}: Handler `delete_category` serves an /admin path (/admin/categories/{cat_id}) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:422
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: DELETE /admin/sponsors/{sponsor_id}: Handler `delete_sponsor` serves an /admin path (/admin/sponsors/{sponsor_id}) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:462
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: POST /admin/apps: Handler `create_app` serves an /admin path (/admin/apps) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:297
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: POST /admin/articles: Handler `create_article` serves an /admin path (/admin/articles) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:343
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: POST /admin/categories: Handler `create_category` serves an /admin path (/admin/categories) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:387
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: POST /admin/login: Handler `admin_login` serves an /admin path (/admin/login) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:256
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: POST /admin/sponsors: Handler `create_sponsor` serves an /admin path (/admin/sponsors) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:434
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: POST /admin/upload-image: Handler `upload_image` serves an /admin path (/admin/upload-image) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:232
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: PUT /admin/apps/{app_id}: Handler `update_app` serves an /admin path (/admin/apps/{app_id}) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:316
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: PUT /admin/articles/{article_id}: Handler `update_article` serves an /admin path (/admin/articles/{article_id}) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:361
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: PUT /admin/categories/{cat_id}: Handler `update_category` serves an /admin path (/admin/categories/{cat_id}) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:404
critical Security checks quality Quality conf 0.80 ✓ Repobility [MINED114] Admin endpoint without auth: PUT /admin/sponsors/{sponsor_id}: Handler `update_sponsor` serves an /admin path (/admin/sponsors/{sponsor_id}) and the function has no Depends/Security parameter and no auth marker in its body. Admin without auth = full takeover.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
docs/md_v2/marketplace/backend/server.py:448
low Security checks cicd CI/CD security conf 0.35 ✓ Repobility 4 occurrences Workflow references repository secrets in a pull_request workflow
Fork pull_request runs do not receive normal repository secrets on GitHub Actions. Review this as a reliability/intent signal, not as direct fork-secret exfiltration. Raise severity only for pull_request_target or another trusted-context path that runs untrusted PR code with secrets.
lines 22, 29, 31, 33
.github/workflows/main.yml:22, 29, 31, 33 (4 hits)
CI/CD securityworkflow secretsGitHub Actions
critical System graph security Secrets conf 1.00 Possible secret in docs/releases_review/demo_v0.7.8.py
Detected pattern matching password_literal. Rotate the credential and move to a secret manager.
docs/releases_review/demo_v0.7.8.py:93
high Security checks quality Quality conf 1.00 ✓ Repobility 25 occurrences [MINED108] `self._crawl_result_to_dict` used but never assigned in __init__: Method `save` of class `CrawlState` reads `self._crawl_result_to_dict`, but no assignment to it exists in __init__ (and no class-level fallback). This raises AttributeError the first time the method runs against an instance.
Initialize `self._crawl_result_to_dict = <default>` in __init__, or add a class-level default.
2 files, 25 locations
crawl4ai/adaptive_crawler copy.py:61, 136, 140, 141, 142, 143, 287, 288, +12 more (20 hits)
crawl4ai/docker_client.py:159, 161, 183, 194, 206 (5 hits)
high Security checks quality Quality conf 1.00 ✓ Repobility 16 occurrences [MINED110] Blocking call `input` inside async function `_listen_fallback`: `input` is a synchronous (blocking) call. When invoked inside an `async def` it stalls the event loop, preventing every other coroutine in the process from making progress.
Use the async equivalent: `aiohttp` instead of `requests`, `asyncio.sleep` instead of `time.sleep`, `aiofiles` instead of `open`.
2 files, 16 locations
docs/releases_review/crawl4ai_v0_7_0_showcase.py:166, 275, 448, 496, 702, 744, 864, 892, +1 more (9 hits)
crawl4ai/browser_profiler.py:338, 854, 859, 893, 905, 932, 941 (7 hits)
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /actions/cleanup has no auth: Handler `force_cleanup` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
deploy/docker/monitor_routes.py:157
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /actions/kill_browser has no auth: Handler `kill_browser` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
deploy/docker/monitor_routes.py:188
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /actions/restart_browser has no auth: Handler `restart_browser` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
deploy/docker/monitor_routes.py:257
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /stats/reset has no auth: Handler `reset_stats` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
deploy/docker/monitor_routes.py:340
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /token has no auth: Handler `get_token` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
deploy/docker/server.py:314
high Security checks software dependencies conf 0.90 ✓ Repobility [MINED118] Dockerfile FROM `python:3.12-slim-bookworm` not pinned by digest: `FROM python:3.12-slim-bookworm` 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 python:3.12-slim-bookworm@sha256:<digest>`. Get the digest from `docker manifest inspect`. Re-pin via a scheduled bot (Renovate, Dependabot).
Dockerfile:1
high Security checks security Injection conf 0.85 [SEC004] SQL Injection Risk: String interpolation in SQL execution. Allows SQL injection.
Use parameterized queries: cursor.execute('SELECT * FROM t WHERE id = ?', [id]). For dynamic table or column names, choose identifiers from a hard-coded allowlist and keep values in parameters.
docs/md_v2/marketplace/backend/database.py:82
high Security checks security Injection conf 1.00 [SEC004] SQL Injection Risk: String interpolation in SQL execution. Allows SQL injection.
Use parameterized queries: cursor.execute('SELECT * FROM t WHERE id = ?', [id]). For dynamic table or column names, choose identifiers from a hard-coded allowlist and keep values in parameters.
crawl4ai/legacy/database.py:166
high Security checks security path traversal conf 0.80 [SEC013] Path Traversal — User Input in File Path: User-controlled input used in file path without sanitization. Allows reading arbitrary files.
Use os.path.realpath() and verify the path starts with your expected base directory. Use secure_filename() for uploads.
crawl4ai/crawlers/google_search/crawler.py:114
high Security checks software File upload conf 1.00 [SEC032] Unrestricted File Upload — no extension/MIME validation: File upload accepts the user's filename without validating extension, content-type, or magic bytes. Attackers upload `.php`, `.jsp`, or executable files to a web-served directory, then visit the URL to trigger RCE. CWE-434. Examples: Apache Struts (CVE-2017-9805), countless WordPress plugin RCEs.
Validate THREE things server-side: 1. Extension allowlist: ALLOWED = {'.png', '.jpg', '.pdf'} ext = Path(file.filename).suffix.lower() if ext not in ALLOWED: abort(400) 2. Magic-byte check (don't trust the extension): import magic mime = magic.from_buffer(file…
crawl4ai/html2text/cli.py:277
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.
Dockerfile:138 CI/CD securitycontainers
low Security checks cicd CI/CD security conf 0.90 ✓ Repobility 6 occurrences GitHub Action is tag-pinned rather than SHA-pinned
[MINED115] Action `actions/checkout` pinned to mutable ref `@v6`: `uses: actions/checkout@v6` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-actions/changed-files compromise (2025) instantly affect ~23K repos. Pin to a 40-char commit SHA + lo…
2 files, 6 locations
.github/workflows/release.yml:16, 19 (4 hits)
.github/workflows/docker-release.yml:34 (2 hits)
CI/CD securitySupply chainGitHub Actions
high Security checks cicd CI/CD security conf 0.90 ✓ Repobility GitHub Action is tag-pinned rather than SHA-pinned
[MINED115] Action `Ilshidur/action-discord` pinned to mutable ref `@master`: `uses: Ilshidur/action-discord@master` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-actions/changed-files compromise (2025) instantly affect ~23K repos. Pin to a 4…
.github/workflows/main.yml:37 CI/CD securitySupply chainGitHub Actions
high System graph quality Integrity conf 1.00 Blocking `requests.get(...)` inside `async def demo_1_docker_hooks_system` — docs/releases_review/demo_v0.7.5.py:47
Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused — silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_th…
docs/releases_review/demo_v0.7.5.py:47 Sync io in asyncPerformance
high System graph quality Integrity conf 1.00 Blocking `requests.get(...)` inside `async def fetch_docs` — crawl4ai/legacy/docs_manager.py:41
Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused — silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_th…
crawl4ai/legacy/docs_manager.py:41 Sync io in asyncPerformance
high System graph quality Integrity conf 1.00 Blocking `requests.get(...)` inside `async def fetch_docs` — crawl4ai/legacy/docs_manager.py:49
Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused — silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_th…
crawl4ai/legacy/docs_manager.py:49 Sync io in asyncPerformance
high System graph quality Integrity conf 1.00 Blocking `requests.post(...)` inside `async def demo_2_enhanced_llm_integration` — docs/releases_review/demo_v0.7.5.py:210
Sync I/O inside an async function blocks the event loop. While `requests.post(...)` is running, *all* other coroutines on this loop are paused — silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_t…
docs/releases_review/demo_v0.7.5.py:210 Sync io in asyncPerformance
high System graph api Wiring conf 1.00 Dangling fetch: DELETE /admin/${type}/${id} (docs/md_v2/marketplace/admin/admin.js:818)
`docs/md_v2/marketplace/admin/admin.js:818` calls `DELETE /admin/${type}/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen. Tool: helper:apiCall Normalized path used for matching: `/admin/<p>/<p>` If this points at an external API, prefix it with `https://` so …
Dangling fetchHelper:apicall
high System graph api Wiring conf 1.00 Dangling fetch: GET https://api.github.com/repos/unclecode/crawl4ai (docs/md_v2/apps/crawl4ai-assistant/popup/popup.js:41)
`docs/md_v2/apps/crawl4ai-assistant/popup/popup.js:41` calls `GET https://api.github.com/repos/unclecode/crawl4ai` but no backend route matches that path. This is a runtime 404 waiting to happen. Tool: fetch Normalized path used for matching: `/https:/api.github.com/repos/unclecode/crawl4ai` If th…
Dangling fetchFetch
high System graph api Wiring conf 1.00 Dangling fetch: POST /admin/${type} (docs/md_v2/marketplace/admin/admin.js:692)
`docs/md_v2/marketplace/admin/admin.js:692` calls `POST /admin/${type}` but no backend route matches that path. This is a runtime 404 waiting to happen. Tool: helper:apiCall Normalized path used for matching: `/admin/<p>` If this points at an external API, prefix it with `https://` so the matcher …
Dangling fetchHelper:apicall
high System graph api Wiring conf 1.00 Dangling fetch: POST https://api.openai.com/v1/chat/completions (docs/apps/linkdin/templates/ai.js:19)
`docs/apps/linkdin/templates/ai.js:19` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen. Tool: fetch Normalized path used for matching: `/https:/api.openai.com/v1/chat/completions` If this points at an external …
Dangling fetchFetch
high System graph api Wiring conf 1.00 Dangling fetch: PUT /admin/${type}/${this.editingItem.id} (docs/md_v2/marketplace/admin/admin.js:687)
`docs/md_v2/marketplace/admin/admin.js:687` calls `PUT /admin/${type}/${this.editingItem.id}` but no backend route matches that path. This is a runtime 404 waiting to happen. Tool: helper:apiCall Normalized path used for matching: `/admin/<p>/<p>` If this points at an external API, prefix it with …
Dangling fetchHelper:apicall
high System graph security auth conf 1.00 FastAPI POST `admin_login` without auth dependency — docs/md_v2/marketplace/backend/server.py:255
`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public.
docs/md_v2/marketplace/backend/server.py:255 securityAuth fastapi unauth mutation
high System graph security auth conf 1.00 FastAPI POST `crawl_job_enqueue` without auth dependency — deploy/docker/job.py:96
`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public.
deploy/docker/job.py:96 securityAuth fastapi unauth mutation
high System graph security auth conf 1.00 FastAPI POST `force_cleanup` without auth dependency — deploy/docker/monitor_routes.py:156
`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public.
deploy/docker/monitor_routes.py:156 securityAuth fastapi unauth mutation
high System graph security auth conf 1.00 FastAPI POST `get_token` without auth dependency — deploy/docker/server.py:313
`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public.
deploy/docker/server.py:313 securityAuth fastapi unauth mutation
high System graph security auth conf 1.00 FastAPI POST `kill_browser` without auth dependency — deploy/docker/monitor_routes.py:187
`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public.
deploy/docker/monitor_routes.py:187 securityAuth fastapi unauth mutation
high System graph security auth conf 1.00 FastAPI POST `llm_job_enqueue` without auth dependency — deploy/docker/job.py:54
`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public.
deploy/docker/job.py:54 securityAuth fastapi unauth mutation
high System graph security auth conf 1.00 FastAPI POST `reset_stats` without auth dependency — deploy/docker/monitor_routes.py:339
`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public.
deploy/docker/monitor_routes.py:339 securityAuth fastapi unauth mutation
high System graph security auth conf 1.00 FastAPI POST `restart_browser` without auth dependency — deploy/docker/monitor_routes.py:256
`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public.
deploy/docker/monitor_routes.py:256 securityAuth fastapi unauth mutation
high System graph security auth conf 1.00 Flask mutation route `compile_endpoint` without `@login_required` — docs/md_v2/apps/c4a-script/server.py:44
Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent.
docs/md_v2/apps/c4a-script/server.py:44 securityAuth flask unauth route
high System graph security auth conf 1.00 Flask mutation route `webhook_handler` without `@login_required` — docs/releases_review/demo_v0.7.6.py:42
Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent.
docs/releases_review/demo_v0.7.6.py:42 securityAuth flask unauth route
high System graph cicd CI/CD security conf 1.00 GitHub Action tracks a moving branch
Ilshidur/action-discord@master can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA.
.github/workflows/main.yml:37 CI/CD securitySupply chainGithub actions
high System graph security security conf 1.00 Insecure pattern 'eval_used' in crawl4ai/extraction_strategy.py:247
Found a known-risky pattern (eval_used). Review and replace if possible.
crawl4ai/extraction_strategy.py:247 Eval used
high System graph security security conf 1.00 Insecure pattern 'eval_used' in crawl4ai/model_loader.py:80
Found a known-risky pattern (eval_used). Review and replace if possible.
crawl4ai/model_loader.py:80 Eval used
high System graph security security conf 1.00 Insecure pattern 'eval_used' in docs/md_v2/apps/c4a-script/assets/app.js:883
Found a known-risky pattern (eval_used). Review and replace if possible.
docs/md_v2/apps/c4a-script/assets/app.js:883 Eval used
high System graph security security conf 1.00 Insecure pattern 'exec_used' in deploy/docker/hook_manager.py:186
Found a known-risky pattern (exec_used). Review and replace if possible.
deploy/docker/hook_manager.py:186 Exec used
medium Security checks security auth conf 0.92 [AUC001] No Repobility access matrix policy found: The repository uses web/API frameworks but does not define .repobility/access.yml or equivalent authorization documentation.
Add .repobility/access.yml mapping routes to anonymous, authenticated, owner, admin, and super_admin. Keep business-specific rules in the repo so CI can enforce them.
low Security checks quality Error handling conf 1.00 [ERR001] Silent Exception Swallowing: Silently swallowing all exceptions hides bugs. Even in cleanup code, log at DEBUG level.
Log the error: `except Exception: logger.debug('cleanup failed', exc_info=True)`. Or handle specific exception types.
setup.py:40
low Security checks quality Error handling conf 1.00 [ERR001] Silent Exception Swallowing: Silently swallowing all exceptions hides bugs. Even in cleanup code, log at DEBUG level.
Log the error: `except Exception: logger.debug('cleanup failed', exc_info=True)`. Or handle specific exception types.
deploy/docker/crawler_pool.py:97
medium Security checks quality Quality conf 1.00 ✓ Repobility 3 occurrences [MINED109] Mutable default argument in `__init__` (dict): `def __init__(... = []/{}/set())` — Python's default value is constructed ONCE at function definition time and shared across all calls. Mutating it in one call mutates it for every future call too.
Use None as the default and create the collection inside the function: `def __init__(x=None): x = x or []`
2 files, 3 locations
crawl4ai/async_configs.py:604, 1399 (2 hits)
crawl4ai/content_filter_strategy.py:973
medium Security checks software dependencies conf 0.90 ✓ Repobility 10 occurrences [MINED124] requirements.txt: `crawl4ai` has no version pin: Unpinned pip requirement means every fresh install may resolve a different version. Newer releases can introduce malicious code (typosquats, account compromises). Reproducible installs need exact pins.
Replace `crawl4ai` with `crawl4ai==<version>` and manage upgrades through PRs / Dependabot.
2 files, 10 locations
docs/examples/website-to-api/requirements.txt:1, 2, 3, 4, 5 (5 hits)
docs/md_v2/marketplace/backend/requirements.txt:1, 2, 3, 4, 5 (5 hits)
medium Security checks software Open redirect conf 1.00 [SEC046] Client-side open redirect — window.location = server-supplied URL: Assigning window.location from a server-supplied URL trusts the server endpoint to never return a hostile destination. If that endpoint is ever subverted (compromised admin, JSON injection, MITM on a webhook), users get redirected to a phishing site they trust because the original page is yours. CWE-601 (server-side OR client-side). Complement to server-side SEC030.
Validate the URL is same-origin or on an explicit allowlist before assignment: const u = new URL(serverUrl, location.href); if (u.origin !== location.origin && !ALLOWED.includes(u.host)) return; location.assign(u); Even better: have the server return a path (/checkout/done) instead of a full …
docs/md_v2/assets/selection_ask_ai.js:120
medium Security checks quality Quality conf 1.00 [SEC123] Production stack trace / debug output exposed: Debug mode left on in production exposes stack traces, environment variables, framework internals — sometimes triggers RCE (Django debug page with arbitrary template eval).
Set DEBUG=False / APP_DEBUG=false in production. Provide a generic 500 handler that logs to backend but returns a sanitized page to clients.
docs/md_v2/apps/c4a-script/server.py:304
low Security checks quality Quality conf 1.00 [SEC136] AI-typical over-broad exception handler swallowing all errors: Catch-all exception block that silently returns success or no-ops. AI agents reach for this pattern when a flaky test or an unfamiliar API throws — wrap, swallow, return success. Real bugs are masked, observability is destroyed, and callers think the operation worked. CWE-396 (improperly-generalized exception). Distinct from intentional fallback because there's no log line and the success value is fabricated.
Catch the specific exception type, log at error level with full exception info, and return a failure-shaped result. If the operation is genuinely best-effort, log at warning and document why in a comment so the next reader (or scanner) knows.
crawl4ai/proxy_strategy.py:37
low Security checks quality Quality conf 1.00 [SEC136] AI-typical over-broad exception handler swallowing all errors: Catch-all exception block that silently returns success or no-ops. AI agents reach for this pattern when a flaky test or an unfamiliar API throws — wrap, swallow, return success. Real bugs are masked, observability is destroyed, and callers think the operation worked. CWE-396 (improperly-generalized exception). Distinct from intentional fallback because there's no log line and the success value is fabricated.
Catch the specific exception type, log at error level with full exception info, and return a failure-shaped result. If the operation is genuinely best-effort, log at warning and document why in a comment so the next reader (or scanner) knows.
crawl4ai/legacy/version_manager.py:18
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.
docs/md_v2/marketplace/frontend/app-detail.js:4
low Security checks quality Error handling conf 0.55 ✓ Repobility 11 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.
5 files, 11 locations
crawl4ai/markdown_generation_strategy.py:211, 225, 240, 251 (4 hits)
crawl4ai/adaptive_crawler copy.py:753, 1426 (2 hits)
crawl4ai/async_configs.py:399, 465 (2 hits)
crawl4ai/browser_profiler.py:124, 777 (2 hits)
crawl4ai/content_filter_strategy.py:377
Error handlingquality
high Security checks security auth conf 0.82 2 occurrences 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.
lines 50, 108
docs/md_v2/marketplace/admin/admin.js:50, 108 (2 hits)
medium Security checks cicd CI/CD security conf 0.86 Database dump or local database file is included in Docker build context
Move database dumps outside the Docker build context or exclude them with .dockerignore. Keep backup and restore artifacts in private object storage or a dedicated backup workflow.
.dockerignore CI/CD securitycontainers
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
medium Security checks cicd CI/CD security conf 0.90 Dockerfile installs dependencies after copying the full source tree
Copy dependency manifests first, install dependencies in a cached layer, then copy the rest of the source tree.
Dockerfile:144 CI/CD securitycontainers
medium Security checks cicd CI/CD security conf 0.86 Dockerfile separates apt update from install
Combine update and install in the same RUN instruction and clean package indexes in that layer.
Dockerfile:89 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.
docs/md_v2/marketplace/admin/admin.js:18
medium 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.
crawl4ai/adaptive_crawler copy.py:1
medium System graph quality Integrity conf 1.00 `fetch()` without try/.catch or AbortSignal — docs/apps/linkdin/templates/ai.js:19
Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 `fetch()` without try/.catch or AbortSignal — docs/md_v2/assets/page_actions.js:78
Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 `fetch()` without try/.catch or AbortSignal — docs/md_v2/marketplace/admin/admin.js:201
Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 `fetch()` without try/.catch or AbortSignal — docs/md_v2/marketplace/frontend/marketplace.js:65
Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 `fetch()` without try/.catch or AbortSignal — docs/md_v2/marketplace/marketplace.js:81
Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout.
runtime safetyRobustness
medium System graph cicd CI/CD security conf 1.00 5 occurrences GitHub Action is tag-pinned rather than SHA-pinned
docker/setup-buildx-action@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA.
2 files, 5 locations
.github/workflows/docker-release.yml:61, 64, 70 (3 hits)
.github/workflows/release.yml:70 (2 hits)
CI/CD securitySupply chainGitHub Actions
medium System graph cicd CI/CD security conf 1.00 GitHub Actions workflow grants broad write permissions
CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions.
.github/workflows/release.yml CI/CD securitySupply chainGithub actions
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — crawl4ai/legacy/crawler_strategy.py:73
`requests.post(...)` 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 — crawl4ai/legacy/docs_manager.py:41
`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 quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — crawl4ai/utils.py:580
`subprocess.check_output(...)` 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 — docs/examples/docker_example.py:18
`requests.post(...)` 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 — docs/examples/docker_hooks_examples.py:490
`requests.post(...)` 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 — docs/examples/docker_webhook_example.py:75
`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 quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — docs/examples/research_assistant.py:44
`requests.post(...)` 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 — docs/examples/rest_call.py:8
`requests.post(...)` 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 — docs/releases_review/demo_v0.7.6.py:103
`requests.post(...)` 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
low Security checks software Race condition conf 1.00 [SEC124] TOCTOU file access (os.access then open): Check-then-use file pattern (access/exists then open) lets an attacker swap the file between check and use (symlink attack). `mktemp` is deprecated for the same reason.
Use `os.open(path, os.O_CREAT | os.O_EXCL | os.O_WRONLY)` for atomic create-only. Use `tempfile.NamedTemporaryFile()` (not `mktemp`). For locking, use `fcntl.flock`.
crawl4ai/migrations.py:53
high Security checks cicd CI/CD security conf 0.62 Compose service lacks no-new-privileges hardening
Add `security_opt: ["no-new-privileges:true"]` unless the service has a documented need for privilege escalation.
docker-compose.yml:36 CI/CD securitycontainers
high Security checks cicd CI/CD security conf 0.72 Dockerfile keeps pip download cache
Use `pip install --no-cache-dir ...` in container builds.
Dockerfile:158 CI/CD securitycontainers
low Security checks quality Quality conf 0.64 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.
crawl4ai/adaptive_crawler copy.py:1
low Security checks quality Quality conf 0.60 4 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.
4 files, 4 locations
crawl4ai/deep_crawling/bfs_strategy.py:20
crawl4ai/deep_crawling/dfs_strategy.py:104
deploy/docker/server.py:380
setup.py:7
duplicationquality
low Security checks quality Quality conf 0.64 Public docs site has no llms.txt
Add llms.txt with the product summary, canonical docs, API endpoints, security guidance, and preferred CLI workflow for AI agents.
llms.txt
low System graph quality Integrity conf 1.00 29 env vars used in code but missing from .env.example
Drift between code and config docs. The first few: `ANTHROPIC_API_KEY`, `BASE_URL`, `C4AI_DEMO_DEBUG`, `C4AI_SCHEMA_PROVIDER`, `CRAWL4AI_ALLOW_INTERNAL_URLS`, `CRAWL4AI_API_TOKEN`, `CRAWL4AI_EXECUTE_JS_ENABLED`, `CRAWL4AI_HOOKS_ENABLED` + 21 more. Add them (with a placeholder/comment) to .env.examp…
config drift
low System graph hardware Coverage conf 1.00 Containers defined but no K8s/orchestration manifest found
Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo.
Deployment
low System graph hardware Supply chain conf 1.00 Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bookworm
Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter.
Dockerfile:1 containersPinned dependencies
low System graph software Dead code candidate conf 1.00 File has no detected symbols: crawl4ai/__version__.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: crawl4ai/config.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: crawl4ai/html2text/__main__.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: crawl4ai/html2text/config.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: crawl4ai/js_snippet/navigator_overrider.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: crawl4ai/prompts.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/examples/c4a_script/amazon_example/generated_search_script.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/examples/c4a_script/c4a_script_hello_world.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/examples/c4a_script/c4a_script_hello_world_error.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/examples/c4a_script/tutorial/assets/c4a-blocks.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/examples/c4a_script/tutorial/assets/c4a-generator.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/examples/rest_call.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/examples/serp_api_project_11_feb.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/md_v2/apps/c4a-script/assets/c4a-blocks.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/md_v2/apps/c4a-script/assets/c4a-generator.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/md_v2/apps/crawl4ai-assistant/background/service-worker.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/md_v2/apps/crawl4ai-assistant/content/content.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/md_v2/assets/floating_ask_ai_button.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/md_v2/assets/github_stats.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: docs/md_v2/assets/highlight_init.js
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: setup.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: tests/async/test_error_handling.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: tests/memory/test_docker_config_gen.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: tests/profiler/test_create_profile.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph frontend Frontend quality conf 1.00 Icon-only button without accessible name — docs/md_v2/apps/crawl4ai-assistant/content/click2crawl.js:129
A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work. Why: P3 in CHECKLIST.md — icon-only buttons skipped a title. Rule id: fq.button.no-label
Fq button no label
low System graph frontend Frontend quality conf 1.00 Icon-only button without accessible name — docs/md_v2/apps/crawl4ai-assistant/content/markdownExtraction.js:376
A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work. Why: P3 in CHECKLIST.md — icon-only buttons skipped a title. Rule id: fq.button.no-label
Fq button no label
low System graph frontend Frontend quality conf 1.00 Icon-only button without accessible name — docs/md_v2/apps/crawl4ai-assistant/content/markdownPreviewModal.js:51
A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work. Why: P3 in CHECKLIST.md — icon-only buttons skipped a title. Rule id: fq.button.no-label
Fq button no label
low System graph frontend Frontend quality conf 1.00 Icon-only button without accessible name — docs/md_v2/apps/crawl4ai-assistant/content/scriptBuilder.js:832
A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work. Why: P3 in CHECKLIST.md — icon-only buttons skipped a title. Rule id: fq.button.no-label
Fq button no label
low System graph security security conf 1.00 Insecure pattern 'debug_true' in docs/md_v2/apps/c4a-script/server.py:304
Found a known-risky pattern (debug_true). Review and replace if possible.
docs/md_v2/apps/c4a-script/server.py:304 Debug true
low System graph quality Integrity conf 1.00 18 occurrences Near-duplicate function bodies in 2 places
Functions with the same first-5-line body hash: docs/releases_review/v0.7.5_docker_hooks_demo.py:print_section, docs/examples/docker_hooks_examples.py:print_section This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or doc…
18 occurrences
repo-level (18 hits)
duplicatesduplication
low System graph quality Integrity conf 1.00 2 occurrences Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: docs/releases_review/demo_v0.8.0.py:print_header, docs/releases_review/demo_v0.8.5.py:print_header, docs/releases_review/demo_v0.7.8.py:print_header This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-c…
2 occurrences
repo-level (2 hits)
duplicatesduplication
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `aiAssistantChatIndex_v1` in docs/md_v2/ask_ai/ask-ai.js:15
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `api_old` in tests/general/test_url_pattern.py:51
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `extract_pipeline_v2` in tests/async_assistant/test_extract_pipeline_v2.py:19
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `extract_xml_data_legacy` in crawl4ai/utils.py:1680
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `extract_xml_data_legacy` in tests/regression/test_reg_utils.py:12
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `load_onnx_all_MiniLM_l6_v2` in crawl4ai/extraction_strategy.py:240
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `load_onnx_all_MiniLM_l6_v2` in crawl4ai/model_loader.py:272
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `markdown_v2` in crawl4ai/models.py:173
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `markdown_v2` in docs/releases_review/v0.3.74.overview.py:115
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `markdown_v2` in docs/releases_review/v0_4_3b2_features_demo.py:194
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `md_v2` in docs/md_v2/assets/page_actions.js:9
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `md_v2` in scripts/update_stats.py:6
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `page_v1` in tests/async/test_browser_lifecycle.py:645
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `r_copy` in crawl4ai/domain_mapper.py:975
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `remaining_old` in crawl4ai/browser_manager.py:1936
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `sess_v1` in tests/async/test_browser_memory.py:1045
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `sig_old` in tests/browser/test_context_leak_fix.py:183
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `sig_v1` in tests/async/test_browser_recycle_v2.py:120
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `test_get_defaults_returns_copy` in tests/regression/test_reg_config.py:185
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `test_get_defaults_returns_copy` in tests/test_config_defaults.py:26
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph software Dead code conf 1.00 Possibly dead Python function: adaptive_crawling_demo
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/crawl4ai_v0_7_0_showcase.py:334
low System graph software Dead code conf 1.00 Possibly dead Python function: after_goto_hook
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:476
low System graph software Dead code conf 1.00 Possibly dead Python function: authentication_headers_hook
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:97
low System graph software Dead code conf 1.00 Possibly dead Python function: before_goto_func
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/demo_v0.7.5.py:128
low System graph software Dead code conf 1.00 Possibly dead Python function: before_goto_hook
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:471
low System graph software Dead code conf 1.00 Possibly dead Python function: before_retrieve_html_func
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/demo_v0.7.5.py:137
low System graph software Dead code conf 1.00 Possibly dead Python function: before_retrieve_html_hook
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:487
low System graph software Dead code conf 1.00 Possibly dead Python function: before_return_html_hook
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:493
low System graph software Dead code conf 1.00 Possibly dead Python function: demo_1_docker_hooks_system
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/demo_v0.7.5.py:37
low System graph software Dead code conf 1.00 Possibly dead Python function: demo_1_string_based_hooks
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:164
low System graph software Dead code conf 1.00 Possibly dead Python function: demo_2_enhanced_llm_integration
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/demo_v0.7.5.py:192
low System graph software Dead code conf 1.00 Possibly dead Python function: demo_2_hooks_to_string_utility
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:272
low System graph software Dead code conf 1.00 Possibly dead Python function: demo_3_docker_client_auto_conversion
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:353
low System graph software Dead code conf 1.00 Possibly dead Python function: demo_3_https_preservation
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/demo_v0.7.5.py:229
low System graph software Dead code conf 1.00 Possibly dead Python function: demo_4_complete_hook_pipeline
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:445
low System graph software Dead code conf 1.00 Possibly dead Python function: demo_input_formats
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0_4_24_walkthrough.py:288
low System graph software Dead code conf 1.00 Possibly dead Python function: download_example
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.3.74.overview.py:19
low System graph software Dead code conf 1.00 Possibly dead Python function: lazy_loading_handler_hook
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:114
low System graph software Dead code conf 1.00 Possibly dead Python function: local_and_raw_html_example
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.3.74.overview.py:57
low System graph software Dead code conf 1.00 Possibly dead Python function: markdown_generation_example
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.3.74.overview.py:92
low System graph software Dead code conf 1.00 Possibly dead Python function: page_analytics_hook
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:136
low System graph software Dead code conf 1.00 Possibly dead Python function: performance_optimization_hook
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:66
low System graph software Dead code conf 1.00 Possibly dead Python function: start_webhook_server
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/demo_v0.7.6.py:77
low System graph software Dead code conf 1.00 Possibly dead Python function: test_crash_recovery_state_capture
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/demo_v0.8.0.py:71
low System graph software Dead code conf 1.00 Possibly dead Python function: viewport_setup_hook
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
docs/releases_review/v0.7.5_docker_hooks_demo.py:87
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — crawl4ai/js_snippet/remove_overlay_elements.js:46
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/apps/linkdin/templates/ai.js:6
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/examples/c4a_script/tutorial/assets/app.js:243
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/examples/c4a_script/tutorial/assets/blockly-manager.js:122
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/examples/c4a_script/tutorial/assets/c4a-blocks.js:492
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/examples/c4a_script/tutorial/playground/app.js:36
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/apps/c4a-script/assets/app.js:243
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/apps/c4a-script/assets/blockly-manager.js:122
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/apps/c4a-script/assets/c4a-blocks.js:492
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/apps/c4a-script/playground/app.js:36
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/apps/crawl4ai-assistant/background/service-worker.js:20
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/apps/crawl4ai-assistant/content/content.js:10
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/apps/crawl4ai-assistant/content/markdownExtraction.js:698
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/ask_ai/ask-ai.js:4
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/assets/copy_code.js:61
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/assets/floating_ask_ai_button.js:16
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/assets/highlight.min.js:107
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/assets/mobile_menu.js:105
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/assets/page_actions.js:425
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/assets/selection_ask_ai.js:114
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/marketplace/frontend/marketplace.js:387
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph frontend Frontend quality conf 1.00 Stray `console.log` in TS/JS — docs/md_v2/marketplace/marketplace.js:404
Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable. Why: Hygiene — easy to leak debug output. Rule id: fq.console-leak
Fq console leak
low System graph quality Integrity conf 1.00 Stub function `apply` (body is just `pass`/`return`) — crawl4ai/deep_crawling/filters.py:59
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `close` (body is just `pass`/`return`) — crawl4ai/processors/pdf/__init__.py:22
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `crawl_url` (body is just `pass`/`return`) — crawl4ai/async_dispatcher.py:128
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `crawl` (body is just `pass`/`return`) — crawl4ai/legacy/crawler_strategy.py:44
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `debug` (body is just `pass`/`return`) — crawl4ai/async_logger.py:52
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `generate` (body is just `pass`/`return`) — crawl4ai/user_agent_generator.py:14
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `main` (body is just `pass`/`return`) — docs/releases_review/demo_v0.7.8.py:724
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `process` (body is just `pass`/`return`) — crawl4ai/processors/pdf/processor.py:54
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `scrap` (body is just `pass`/`return`) — crawl4ai/content_scraping_strategy.py:93
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph api Wiring conf 1.00 Unused endpoint: ANY /
`docs/md_v2/apps/c4a-script/server.py` declares `ANY /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: ANY /api/examples
`docs/md_v2/apps/c4a-script/server.py` declares `ANY /api/examples` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: ANY /assets/<path:path>
`docs/md_v2/apps/c4a-script/server.py` declares `ANY /assets/<path:path>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: ANY /playground/
`docs/md_v2/apps/c4a-script/server.py` declares `ANY /playground/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: ANY /playground/<path:path>
`docs/md_v2/apps/c4a-script/server.py` declares `ANY /playground/<path:path>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: ANY /webhook
`docs/releases_review/demo_v0.7.6.py` declares `ANY /webhook` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: ANY /webhooks/crawl-complete
`docs/examples/docker_webhook_example.py` declares `ANY /webhooks/crawl-complete` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes …
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: ANY /webhooks/llm-complete
`docs/examples/docker_webhook_example.py` declares `ANY /webhooks/llm-complete` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: DELETE /admin/apps/{app_id}
`docs/md_v2/marketplace/backend/server.py` declares `DELETE /admin/apps/{app_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes …
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: DELETE /admin/articles/{article_id}
`docs/md_v2/marketplace/backend/server.py` declares `DELETE /admin/articles/{article_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who c…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: DELETE /admin/categories/{cat_id}
`docs/md_v2/marketplace/backend/server.py` declares `DELETE /admin/categories/{cat_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who con…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: DELETE /admin/sponsors/{sponsor_id}
`docs/md_v2/marketplace/backend/server.py` declares `DELETE /admin/sponsors/{sponsor_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who c…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: DELETE /models/{model_name}
`docs/examples/website-to-api/api_server.py` declares `DELETE /models/{model_name}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consume…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: DELETE /saved-requests/{request_id}
`docs/examples/website-to-api/api_server.py` declares `DELETE /saved-requests/{request_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /
`docs/md_v2/marketplace/backend/server.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /apps/{slug}
`docs/md_v2/marketplace/backend/server.py` declares `GET /apps/{slug}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /articles/{slug}
`docs/md_v2/marketplace/backend/server.py` declares `GET /articles/{slug}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /crawl/job/{task_id}
`deploy/docker/job.py` declares `GET /crawl/job/{task_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /hooks/info
`deploy/docker/server.py` declares `GET /hooks/info` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /llm/job/{task_id}
`deploy/docker/job.py` declares `GET /llm/job/{task_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /llm/{url:path}
`deploy/docker/server.py` declares `GET /llm/{url:path}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /models
`docs/examples/website-to-api/api_server.py` declares `GET /models` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /saved-requests
`docs/examples/website-to-api/api_server.py` declares `GET /saved-requests` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /schema
`deploy/docker/server.py` declares `GET /schema` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /schemas
`docs/examples/website-to-api/api_server.py` declares `GET /schemas` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /search
`docs/md_v2/marketplace/backend/server.py` declares `GET /search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /admin/apps
`docs/md_v2/marketplace/backend/server.py` declares `POST /admin/apps` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /admin/articles
`docs/md_v2/marketplace/backend/server.py` declares `POST /admin/articles` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /admin/categories
`docs/md_v2/marketplace/backend/server.py` declares `POST /admin/categories` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /admin/login
`docs/md_v2/marketplace/backend/server.py` declares `POST /admin/login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /admin/sponsors
`docs/md_v2/marketplace/backend/server.py` declares `POST /admin/sponsors` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /clear-cache
`docs/examples/website-to-api/api_server.py` declares `POST /clear-cache` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /config/dump
`deploy/docker/server.py` declares `POST /config/dump` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /crawl
`deploy/docker/server.py` declares `POST /crawl` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /crawl/job
`deploy/docker/job.py` declares `POST /crawl/job` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /crawl/stream
`deploy/docker/server.py` declares `POST /crawl/stream` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /execute_js
`deploy/docker/server.py` declares `POST /execute_js` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /html
`deploy/docker/server.py` declares `POST /html` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /llm/job
`deploy/docker/job.py` declares `POST /llm/job` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /md
`deploy/docker/server.py` declares `POST /md` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /models
`docs/examples/website-to-api/api_server.py` declares `POST /models` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /pdf
`deploy/docker/server.py` declares `POST /pdf` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /scrape
`docs/examples/website-to-api/api_server.py` declares `POST /scrape` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /scrape-with-llm
`docs/examples/website-to-api/api_server.py` declares `POST /scrape-with-llm` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /screenshot
`deploy/docker/server.py` declares `POST /screenshot` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /token
`deploy/docker/server.py` declares `POST /token` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: PUT /admin/apps/{app_id}
`docs/md_v2/marketplace/backend/server.py` declares `PUT /admin/apps/{app_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: PUT /admin/articles/{article_id}
`docs/md_v2/marketplace/backend/server.py` declares `PUT /admin/articles/{article_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who cons…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: PUT /admin/categories/{cat_id}
`docs/md_v2/marketplace/backend/server.py` declares `PUT /admin/categories/{cat_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consum…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: PUT /admin/sponsors/{sponsor_id}
`docs/md_v2/marketplace/backend/server.py` declares `PUT /admin/sponsors/{sponsor_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who cons…
Unused endpoint
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/adaptive_crawler copy.py (1846 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/adaptive_crawler.py (1922 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/async_configs.py (2343 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/async_crawler_strategy.back.py (2449 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/async_crawler_strategy.py (2795 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/async_url_seeder.py (1794 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/async_webcrawler.py (1248 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/browser_manager.py (2092 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/browser_profiler.py (1402 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/cli.py (1653 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/extraction_strategy.py (2827 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/prompts.py (1693 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/table_extraction.py (1401 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: crawl4ai/utils.py (3794 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: docs/examples/c4a_script/tutorial/assets/app.js (1484 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: docs/examples/docker/demo_docker_api.py (1317 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: docs/md_v2/apps/c4a-script/assets/app.js (1484 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: docs/md_v2/apps/crawl4ai-assistant/content/click2crawl.js (1967 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: docs/md_v2/apps/crawl4ai-assistant/content/scriptBuilder.js (2515 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: docs/md_v2/assets/highlight.min.js (1212 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: docs/releases_review/crawl4ai_v0_7_0_showcase.py (1583 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/dfd63be9-051b-41fa-be97-0e1a8a59c2d1/

To check status programmatically (no auth required):

curl -s https://repobility.com/api/v1/public/scan/dfd63be9-051b-41fa-be97-0e1a8a59c2d1/

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.