{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-6c78d86b6be732fb", "name": "Possibly dead Python function: repl", "shortDescription": {"text": "Possibly dead Python function: repl"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-93a638f593238033", "name": "Possibly dead Python function: emit", "shortDescription": {"text": "Possibly dead Python function: emit"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e092f9ef21ac5eec", "name": "Docker base image is tag-pinned but not digest-pinned: ghcr.io/astral-sh/uv:python3.12-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: ghcr.io/astral-sh/uv:python3.12-bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77a464701f01cedf", "name": "Possible secret in README.md", "shortDescription": {"text": "Possible secret in README.md"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-7f0f9976570faa6d", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/login-action@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-68a2b8f5c8cd6b53", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "astral-sh/setup-uv@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46c644c6227e4d4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1838a141491ce38c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2674709794ce02ca", "name": "Very large file: chunchugwan/db.py (2850 lines)", "shortDescription": {"text": "Very large file: chunchugwan/db.py (2850 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1485f275ce1c081b", "name": "Very large file: chunchugwan/web/i18n.py (909 lines)", "shortDescription": {"text": "Very large file: chunchugwan/web/i18n.py (909 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f70e9c625afa001b", "name": "Very large file: chunchugwan/web/app.py (1863 lines)", "shortDescription": {"text": "Very large file: chunchugwan/web/app.py (1863 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d268b1a96902c54", "name": "Legacy-named symbol `create_backup` in tests/test_backup.py:86", "shortDescription": {"text": "Legacy-named symbol `create_backup` in tests/test_backup.py:86"}, "fullDescription": {"text": "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."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f1d4aa7a90e3478", "name": "Legacy-named symbol `_consistent_db_copy` in chunchugwan/backup.py:73", "shortDescription": {"text": "Legacy-named symbol `_consistent_db_copy` in chunchugwan/backup.py:73"}, "fullDescription": {"text": "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."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2304c6793b94330", "name": "Commented-code block (7 lines) in chunchugwan/backup.py:31", "shortDescription": {"text": "Commented-code block (7 lines) in chunchugwan/backup.py:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-323a1d0e748738c8", "name": "Commented-code block (12 lines) in chunchugwan/capture.py:25", "shortDescription": {"text": "Commented-code block (12 lines) in chunchugwan/capture.py:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a845838dcefd0c7", "name": "Legacy-named symbol `create_backup` in chunchugwan/cli.py:617", "shortDescription": {"text": "Legacy-named symbol `create_backup` in chunchugwan/cli.py:617"}, "fullDescription": {"text": "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."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b291d0da4ecf87a", "name": "Commented-code block (5 lines) in chunchugwan/pipeline.py:411", "shortDescription": {"text": "Commented-code block (5 lines) in chunchugwan/pipeline.py:411"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f739d53e314076b", "name": "Commented-code block (6 lines) in chunchugwan/web/app.py:188", "shortDescription": {"text": "Commented-code block (6 lines) in chunchugwan/web/app.py:188"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b40595a04322cae", "name": "Legacy-named symbol `system_backup` in chunchugwan/web/system_routes.py:180", "shortDescription": {"text": "Legacy-named symbol `system_backup` in chunchugwan/web/system_routes.py:180"}, "fullDescription": {"text": "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."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nchunchugwan/db.py:list_archive_logs, chunchugwan/db.py:count_archive_logs\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c9bd31e7b92a7f3", "name": "FastAPI POST `api_archive` without auth dependency \u2014 chunchugwan/web/api_routes.py:167", "shortDescription": {"text": "FastAPI POST `api_archive` without auth dependency \u2014 chunchugwan/web/api_routes.py:167"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5511874d7dd6604e", "name": "FastAPI POST `site_failed_retry` without auth dependency \u2014 chunchugwan/web/app.py:507", "shortDescription": {"text": "FastAPI POST `site_failed_retry` without auth dependency \u2014 chunchugwan/web/app.py:507"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39672ca41e87d78e", "name": "FastAPI POST `site_crawl_failed_retry` without auth dependency \u2014 chunchugwan/web/app.py:528", "shortDescription": {"text": "FastAPI POST `site_crawl_failed_retry` without auth dependency \u2014 chunchugwan/web/app.py:528"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-488015b42fc417d0", "name": "FastAPI POST `site_export` without auth dependency \u2014 chunchugwan/web/app.py:559", "shortDescription": {"text": "FastAPI POST `site_export` without auth dependency \u2014 chunchugwan/web/app.py:559"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-063623209690bbba", "name": "FastAPI POST `site_delete` without auth dependency \u2014 chunchugwan/web/app.py:577", "shortDescription": {"text": "FastAPI POST `site_delete` without auth dependency \u2014 chunchugwan/web/app.py:577"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d89b6977424229d4", "name": "FastAPI POST `schedule_set` without auth dependency \u2014 chunchugwan/web/app.py:788", "shortDescription": {"text": "FastAPI POST `schedule_set` without auth dependency \u2014 chunchugwan/web/app.py:788"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74e47d1bb01c6cf3", "name": "FastAPI POST `schedule_next_run` without auth dependency \u2014 chunchugwan/web/app.py:816", "shortDescription": {"text": "FastAPI POST `schedule_next_run` without auth dependency \u2014 chunchugwan/web/app.py:816"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37133a5a01045e6d", "name": "FastAPI POST `schedule_delete` without auth dependency \u2014 chunchugwan/web/app.py:856", "shortDescription": {"text": "FastAPI POST `schedule_delete` without auth dependency \u2014 chunchugwan/web/app.py:856"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05816356d229729b", "name": "FastAPI POST `archive_new` without auth dependency \u2014 chunchugwan/web/app.py:1486", "shortDescription": {"text": "FastAPI POST `archive_new` without auth dependency \u2014 chunchugwan/web/app.py:1486"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3783058d1965305", "name": "FastAPI POST `rearchive` without auth dependency \u2014 chunchugwan/web/app.py:1540", "shortDescription": {"text": "FastAPI POST `rearchive` without auth dependency \u2014 chunchugwan/web/app.py:1540"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0dfee889a7223b0f", "name": "FastAPI POST `log_retry` without auth dependency \u2014 chunchugwan/web/app.py:1560", "shortDescription": {"text": "FastAPI POST `log_retry` without auth dependency \u2014 chunchugwan/web/app.py:1560"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-db838d6c7c6a7d19", "name": "FastAPI POST `page_delete` without auth dependency \u2014 chunchugwan/web/app.py:1595", "shortDescription": {"text": "FastAPI POST `page_delete` without auth dependency \u2014 chunchugwan/web/app.py:1595"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b67b21f666fe022a", "name": "FastAPI POST `snapshot_delete` without auth dependency \u2014 chunchugwan/web/app.py:1620", "shortDescription": {"text": "FastAPI POST `snapshot_delete` without auth dependency \u2014 chunchugwan/web/app.py:1620"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a43f3c1177763e1", "name": "FastAPI POST `crawl_cancel` without auth dependency \u2014 chunchugwan/web/app.py:1709", "shortDescription": {"text": "FastAPI POST `crawl_cancel` without auth dependency \u2014 chunchugwan/web/app.py:1709"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ed68bcf55501a06", "name": "FastAPI POST `crawl_retry` without auth dependency \u2014 chunchugwan/web/app.py:1720", "shortDescription": {"text": "FastAPI POST `crawl_retry` without auth dependency \u2014 chunchugwan/web/app.py:1720"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e5f0f6f51c05775f", "name": "FastAPI POST `crawl_page_retry` without auth dependency \u2014 chunchugwan/web/app.py:1734", "shortDescription": {"text": "FastAPI POST `crawl_page_retry` without auth dependency \u2014 chunchugwan/web/app.py:1734"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6a2bafa34c2a4a3", "name": "FastAPI POST `crawl_schedule_set` without auth dependency \u2014 chunchugwan/web/app.py:1767", "shortDescription": {"text": "FastAPI POST `crawl_schedule_set` without auth dependency \u2014 chunchugwan/web/app.py:1767"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-230587a452211e3d", "name": "FastAPI POST `crawl_schedule_next_run` without auth dependency \u2014 chunchugwan/web/app.py:1795", "shortDescription": {"text": "FastAPI POST `crawl_schedule_next_run` without auth dependency \u2014 chunchugwan/web/app.py:1795"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c56f0b56775eabd", "name": "FastAPI POST `crawl_schedule_delete` without auth dependency \u2014 chunchugwan/web/app.py:1827", "shortDescription": {"text": "FastAPI POST `crawl_schedule_delete` without auth dependency \u2014 chunchugwan/web/app.py:1827"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcd2e602a0944af2", "name": "FastAPI POST `setup` without auth dependency \u2014 chunchugwan/web/auth_routes.py:133", "shortDescription": {"text": "FastAPI POST `setup` without auth dependency \u2014 chunchugwan/web/auth_routes.py:133"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5a5a7c7ac2b4f86", "name": "FastAPI POST `totp_login` without auth dependency \u2014 chunchugwan/web/auth_routes.py:261", "shortDescription": {"text": "FastAPI POST `totp_login` without auth dependency \u2014 chunchugwan/web/auth_routes.py:261"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f186166452a15e7", "name": "FastAPI POST `passkey_login_options` without auth dependency \u2014 chunchugwan/web/auth_routes.py:284", "shortDescription": {"text": "FastAPI POST `passkey_login_options` without auth dependency \u2014 chunchugwan/web/auth_routes.py:284"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f29d965a183ee772", "name": "FastAPI POST `passkey_login` without auth dependency \u2014 chunchugwan/web/auth_routes.py:301", "shortDescription": {"text": "FastAPI POST `passkey_login` without auth dependency \u2014 chunchugwan/web/auth_routes.py:301"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e920ef420738b18", "name": "FastAPI POST `totp_confirm` without auth dependency \u2014 chunchugwan/web/auth_routes.py:352", "shortDescription": {"text": "FastAPI POST `totp_confirm` without auth dependency \u2014 chunchugwan/web/auth_routes.py:352"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bedf39ea09540d6c", "name": "FastAPI POST `totp_disable` without auth dependency \u2014 chunchugwan/web/auth_routes.py:373", "shortDescription": {"text": "FastAPI POST `totp_disable` without auth dependency \u2014 chunchugwan/web/auth_routes.py:373"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ef7be84856042ac", "name": "FastAPI POST `passkey_register_options` without auth dependency \u2014 chunchugwan/web/auth_routes.py:411", "shortDescription": {"text": "FastAPI POST `passkey_register_options` without auth dependency \u2014 chunchugwan/web/auth_routes.py:411"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-025dbfd889177f1b", "name": "FastAPI POST `passkey_register` without auth dependency \u2014 chunchugwan/web/auth_routes.py:428", "shortDescription": {"text": "FastAPI POST `passkey_register` without auth dependency \u2014 chunchugwan/web/auth_routes.py:428"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-87b097e5cb1e647d", "name": "FastAPI POST `passkey_delete` without auth dependency \u2014 chunchugwan/web/auth_routes.py:455", "shortDescription": {"text": "FastAPI POST `passkey_delete` without auth dependency \u2014 chunchugwan/web/auth_routes.py:455"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9ac4bf2e3d1f174", "name": "FastAPI POST `change_language` without auth dependency \u2014 chunchugwan/web/auth_routes.py:515", "shortDescription": {"text": "FastAPI POST `change_language` without auth dependency \u2014 chunchugwan/web/auth_routes.py:515"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-366f98dbc68f49d3", "name": "FastAPI POST `change_timezone` without auth dependency \u2014 chunchugwan/web/auth_routes.py:527", "shortDescription": {"text": "FastAPI POST `change_timezone` without auth dependency \u2014 chunchugwan/web/auth_routes.py:527"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3aca73c7c710b449", "name": "FastAPI POST `change_display_name` without auth dependency \u2014 chunchugwan/web/auth_routes.py:539", "shortDescription": {"text": "FastAPI POST `change_display_name` without auth dependency \u2014 chunchugwan/web/auth_routes.py:539"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8767654fdc611b2f", "name": "FastAPI POST `change_password` without auth dependency \u2014 chunchugwan/web/auth_routes.py:556", "shortDescription": {"text": "FastAPI POST `change_password` without auth dependency \u2014 chunchugwan/web/auth_routes.py:556"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4aa9c05a8c9f1c9e", "name": "FastAPI POST `withdraw_account` without auth dependency \u2014 chunchugwan/web/auth_routes.py:590", "shortDescription": {"text": "FastAPI POST `withdraw_account` without auth dependency \u2014 chunchugwan/web/auth_routes.py:590"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c161c35487558525", "name": "FastAPI POST `invite_accept` without auth dependency \u2014 chunchugwan/web/auth_routes.py:789", "shortDescription": {"text": "FastAPI POST `invite_accept` without auth dependency \u2014 chunchugwan/web/auth_routes.py:789"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c710d2993f06ca5", "name": "FastAPI POST `system_backup` without auth dependency \u2014 chunchugwan/web/system_routes.py:179", "shortDescription": {"text": "FastAPI POST `system_backup` without auth dependency \u2014 chunchugwan/web/system_routes.py:179"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5fd516844be13507", "name": "FastAPI POST `system_export` without auth dependency \u2014 chunchugwan/web/system_routes.py:186", "shortDescription": {"text": "FastAPI POST `system_export` without auth dependency \u2014 chunchugwan/web/system_routes.py:186"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd6c6b57c7b1d604", "name": "FastAPI POST `system_compact` without auth dependency \u2014 chunchugwan/web/system_routes.py:205", "shortDescription": {"text": "FastAPI POST `system_compact` without auth dependency \u2014 chunchugwan/web/system_routes.py:205"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d663aebd46b4389b", "name": "FastAPI POST `system_settings` without auth dependency \u2014 chunchugwan/web/system_routes.py:241", "shortDescription": {"text": "FastAPI POST `system_settings` without auth dependency \u2014 chunchugwan/web/system_routes.py:241"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31d4cb4d90e3a7da", "name": "FastAPI POST `system_crawl_settings` without auth dependency \u2014 chunchugwan/web/system_routes.py:265", "shortDescription": {"text": "FastAPI POST `system_crawl_settings` without auth dependency \u2014 chunchugwan/web/system_routes.py:265"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-671bba8fad78ea9a", "name": "FastAPI POST `network_tags_create` without auth dependency \u2014 chunchugwan/web/system_routes.py:308", "shortDescription": {"text": "FastAPI POST `network_tags_create` without auth dependency \u2014 chunchugwan/web/system_routes.py:308"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4024fb119c67ef88", "name": "FastAPI POST `network_tags_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:339", "shortDescription": {"text": "FastAPI POST `network_tags_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:339"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-737911930ee317a4", "name": "FastAPI POST `system_restore` without auth dependency \u2014 chunchugwan/web/system_routes.py:361", "shortDescription": {"text": "FastAPI POST `system_restore` without auth dependency \u2014 chunchugwan/web/system_routes.py:361"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7409a0112a0a37b6", "name": "FastAPI POST `users_set_role` without auth dependency \u2014 chunchugwan/web/system_routes.py:420", "shortDescription": {"text": "FastAPI POST `users_set_role` without auth dependency \u2014 chunchugwan/web/system_routes.py:420"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c6c56a5a54de952", "name": "FastAPI POST `users_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:455", "shortDescription": {"text": "FastAPI POST `users_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:455"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9794410e026967d", "name": "FastAPI POST `users_set_name` without auth dependency \u2014 chunchugwan/web/system_routes.py:488", "shortDescription": {"text": "FastAPI POST `users_set_name` without auth dependency \u2014 chunchugwan/web/system_routes.py:488"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35ed7369cdea4f63", "name": "FastAPI POST `users_force_logout` without auth dependency \u2014 chunchugwan/web/system_routes.py:515", "shortDescription": {"text": "FastAPI POST `users_force_logout` without auth dependency \u2014 chunchugwan/web/system_routes.py:515"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8dc8c5c0e244033b", "name": "FastAPI POST `users_invite` without auth dependency \u2014 chunchugwan/web/system_routes.py:535", "shortDescription": {"text": "FastAPI POST `users_invite` without auth dependency \u2014 chunchugwan/web/system_routes.py:535"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-495868d0c09b7de3", "name": "FastAPI POST `users_invite_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:585", "shortDescription": {"text": "FastAPI POST `users_invite_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:585"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1218115961285760", "name": "FastAPI POST `api_keys_create` without auth dependency \u2014 chunchugwan/web/system_routes.py:661", "shortDescription": {"text": "FastAPI POST `api_keys_create` without auth dependency \u2014 chunchugwan/web/system_routes.py:661"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-174bd7ff36235395", "name": "FastAPI POST `api_keys_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:701", "shortDescription": {"text": "FastAPI POST `api_keys_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:701"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-604877ac5e1073eb", "name": "FastAPI POST `system_import` without auth dependency \u2014 chunchugwan/web/system_routes.py:716", "shortDescription": {"text": "FastAPI POST `system_import` without auth dependency \u2014 chunchugwan/web/system_routes.py:716"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-abdfb7ca067f44c1", "name": "Unused endpoint: GET /pages", "shortDescription": {"text": "Unused endpoint: GET /pages"}, "fullDescription": {"text": "`chunchugwan/web/api_routes.py` declares `GET /pages` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-789b05c0f423fd52", "name": "Unused endpoint: GET /pages/{page_id}", "shortDescription": {"text": "Unused endpoint: GET /pages/{page_id}"}, "fullDescription": {"text": "`chunchugwan/web/api_routes.py` declares `GET /pages/{page_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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4223ec6452e1f15", "name": "Unused endpoint: GET /snapshots/{snapshot_id}", "shortDescription": {"text": "Unused endpoint: GET /snapshots/{snapshot_id}"}, "fullDescription": {"text": "`chunchugwan/web/api_routes.py` declares `GET /snapshots/{snapshot_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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-da54918e4b4c4930", "name": "Unused endpoint: GET /snapshots/{snapshot_id}/file/{name}", "shortDescription": {"text": "Unused endpoint: GET /snapshots/{snapshot_id}/file/{name}"}, "fullDescription": {"text": "`chunchugwan/web/api_routes.py` declares `GET /snapshots/{snapshot_id}/file/{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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1dc077c868017d1f", "name": "Unused endpoint: POST /archive", "shortDescription": {"text": "Unused endpoint: POST /archive"}, "fullDescription": {"text": "`chunchugwan/web/api_routes.py` declares `POST /archive` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c063354a4d178f9", "name": "Unused endpoint: GET /favicon.svg", "shortDescription": {"text": "Unused endpoint: GET /favicon.svg"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /favicon.svg` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e47024499b57b7e", "name": "Unused endpoint: GET /archives", "shortDescription": {"text": "Unused endpoint: GET /archives"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /archives` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-801dbb9e6f6cee79", "name": "Unused endpoint: GET /sites/{site_id}", "shortDescription": {"text": "Unused endpoint: GET /sites/{site_id}"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /sites/{site_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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff8c9cbbf2a7acbb", "name": "Unused endpoint: POST /sites/{site_id}/failed/{log_id}/retry", "shortDescription": {"text": "Unused endpoint: POST /sites/{site_id}/failed/{log_id}/retry"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /sites/{site_id}/failed/{log_id}/retry` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f29adbda96c1e1c0", "name": "Unused endpoint: POST /sites/{site_id}/crawl-failed/{crawl_page_id}/retry", "shortDescription": {"text": "Unused endpoint: POST /sites/{site_id}/crawl-failed/{crawl_page_id}/retry"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /sites/{site_id}/crawl-failed/{crawl_page_id}/retry` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2cec9543a69bafd7", "name": "Unused endpoint: GET /sites/{site_id}/certificates/{cert_id}.pem", "shortDescription": {"text": "Unused endpoint: GET /sites/{site_id}/certificates/{cert_id}.pem"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /sites/{site_id}/certificates/{cert_id}.pem` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-97a99f5e0f11c504", "name": "Unused endpoint: POST /sites/{site_id}/export", "shortDescription": {"text": "Unused endpoint: POST /sites/{site_id}/export"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /sites/{site_id}/export` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f4a47e2051952d7", "name": "Unused endpoint: POST /sites/{site_id}/delete", "shortDescription": {"text": "Unused endpoint: POST /sites/{site_id}/delete"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /sites/{site_id}/delete` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3fc0a91f8ebfbc4", "name": "Unused endpoint: GET /archive/active", "shortDescription": {"text": "Unused endpoint: GET /archive/active"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /archive/active` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`chunchugwan/web/app.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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d504b80adc9409ec", "name": "Unused endpoint: GET /dashboard", "shortDescription": {"text": "Unused endpoint: GET /dashboard"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /dashboard` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b30f40dc92a8387", "name": "Unused endpoint: GET /page/{page_id}", "shortDescription": {"text": "Unused endpoint: GET /page/{page_id}"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /page/{page_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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e7034a8ba75cb9b", "name": "Unused endpoint: POST /page/{page_id}/schedule", "shortDescription": {"text": "Unused endpoint: POST /page/{page_id}/schedule"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /page/{page_id}/schedule` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd71a7cc7111f4d4", "name": "Unused endpoint: POST /page/{page_id}/schedule/next-run", "shortDescription": {"text": "Unused endpoint: POST /page/{page_id}/schedule/next-run"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /page/{page_id}/schedule/next-run` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15639391c6e355fe", "name": "Unused endpoint: POST /page/{page_id}/schedule/delete", "shortDescription": {"text": "Unused endpoint: POST /page/{page_id}/schedule/delete"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /page/{page_id}/schedule/delete` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d9abfdbc1cc9788", "name": "Unused endpoint: GET /schedules", "shortDescription": {"text": "Unused endpoint: GET /schedules"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /schedules` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a037b3a125500239", "name": "Unused endpoint: GET /snapshot/{snapshot_id}", "shortDescription": {"text": "Unused endpoint: GET /snapshot/{snapshot_id}"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /snapshot/{snapshot_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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70f4fe0fbc43773c", "name": "Unused endpoint: GET /snapshot/{snapshot_id}/file/{name}", "shortDescription": {"text": "Unused endpoint: GET /snapshot/{snapshot_id}/file/{name}"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /snapshot/{snapshot_id}/file/{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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-da9e954a7339d7e2", "name": "Unused endpoint: GET /snapshot/{snapshot_id}/doc/{name}", "shortDescription": {"text": "Unused endpoint: GET /snapshot/{snapshot_id}/doc/{name}"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /snapshot/{snapshot_id}/doc/{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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffc9ad08ed6cdd74", "name": "Unused endpoint: GET /documents", "shortDescription": {"text": "Unused endpoint: GET /documents"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /documents` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f22a194af4b46bcc", "name": "Unused endpoint: GET /document/{sha256}/{name}", "shortDescription": {"text": "Unused endpoint: GET /document/{sha256}/{name}"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /document/{sha256}/{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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d2b0a2c5d93e892", "name": "Unused endpoint: GET /resource/{name}", "shortDescription": {"text": "Unused endpoint: GET /resource/{name}"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /resource/{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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-93616753e3839d7f", "name": "Unused endpoint: GET /diff/{page_id}", "shortDescription": {"text": "Unused endpoint: GET /diff/{page_id}"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /diff/{page_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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-930bcbb24877c650", "name": "Unused endpoint: GET /diff/{page_id}/shotdiff", "shortDescription": {"text": "Unused endpoint: GET /diff/{page_id}/shotdiff"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /diff/{page_id}/shotdiff` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72f99d58636b648b", "name": "Unused endpoint: GET /logs", "shortDescription": {"text": "Unused endpoint: GET /logs"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /logs` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-23c2cc49b2fea1db", "name": "Unused endpoint: GET /archive/new", "shortDescription": {"text": "Unused endpoint: GET /archive/new"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /archive/new` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b0dd4bec11301a82", "name": "Unused endpoint: POST /page/{page_id}/rearchive", "shortDescription": {"text": "Unused endpoint: POST /page/{page_id}/rearchive"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /page/{page_id}/rearchive` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68e0f658a040b18f", "name": "Unused endpoint: POST /logs/{log_id}/retry", "shortDescription": {"text": "Unused endpoint: POST /logs/{log_id}/retry"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /logs/{log_id}/retry` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9f14f0288abf35c", "name": "Unused endpoint: POST /page/{page_id}/delete", "shortDescription": {"text": "Unused endpoint: POST /page/{page_id}/delete"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /page/{page_id}/delete` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e1efe9c96706bc92", "name": "Unused endpoint: POST /snapshot/{snapshot_id}/delete", "shortDescription": {"text": "Unused endpoint: POST /snapshot/{snapshot_id}/delete"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /snapshot/{snapshot_id}/delete` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e9f111d87df75b5", "name": "Unused endpoint: GET /crawls", "shortDescription": {"text": "Unused endpoint: GET /crawls"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /crawls` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-883bf6e097869370", "name": "Unused endpoint: GET /crawls/{crawl_id}", "shortDescription": {"text": "Unused endpoint: GET /crawls/{crawl_id}"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /crawls/{crawl_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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad7ba45f718918ed", "name": "Unused endpoint: GET /crawls/{crawl_id}/status", "shortDescription": {"text": "Unused endpoint: GET /crawls/{crawl_id}/status"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /crawls/{crawl_id}/status` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f7e919da44d17b64", "name": "Unused endpoint: POST /crawls/{crawl_id}/cancel", "shortDescription": {"text": "Unused endpoint: POST /crawls/{crawl_id}/cancel"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /crawls/{crawl_id}/cancel` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf05a5f3ac9438dc", "name": "Unused endpoint: POST /crawls/{crawl_id}/retry", "shortDescription": {"text": "Unused endpoint: POST /crawls/{crawl_id}/retry"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /crawls/{crawl_id}/retry` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ec144d1e3e2db20", "name": "Unused endpoint: POST /crawls/{crawl_id}/pages/{crawl_page_id}/retry", "shortDescription": {"text": "Unused endpoint: POST /crawls/{crawl_id}/pages/{crawl_page_id}/retry"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /crawls/{crawl_id}/pages/{crawl_page_id}/retry` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc213f80ee0a8c09", "name": "Unused endpoint: POST /crawl-schedules/{schedule_id}", "shortDescription": {"text": "Unused endpoint: POST /crawl-schedules/{schedule_id}"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /crawl-schedules/{schedule_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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15c31e937fdf4994", "name": "Unused endpoint: POST /crawl-schedules/{schedule_id}/next-run", "shortDescription": {"text": "Unused endpoint: POST /crawl-schedules/{schedule_id}/next-run"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /crawl-schedules/{schedule_id}/next-run` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8aaed72741a56c61", "name": "Unused endpoint: POST /crawl-schedules/{schedule_id}/delete", "shortDescription": {"text": "Unused endpoint: POST /crawl-schedules/{schedule_id}/delete"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `POST /crawl-schedules/{schedule_id}/delete` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d372d86af9afd88", "name": "Unused endpoint: GET /crawl/{crawl_id}/goto", "shortDescription": {"text": "Unused endpoint: GET /crawl/{crawl_id}/goto"}, "fullDescription": {"text": "`chunchugwan/web/app.py` declares `GET /crawl/{crawl_id}/goto` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d86afd7dd2beb431", "name": "Unused endpoint: GET /setup", "shortDescription": {"text": "Unused endpoint: GET /setup"}, "fullDescription": {"text": "`chunchugwan/web/auth_routes.py` declares `GET /setup` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb757797f6bd3444", "name": "Unused endpoint: POST /setup", "shortDescription": {"text": "Unused endpoint: POST /setup"}, "fullDescription": {"text": "`chunchugwan/web/auth_routes.py` declares `POST /setup` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a4dfcad3eb1618a", "name": "Unused endpoint: GET /login", "shortDescription": {"text": "Unused endpoint: GET /login"}, "fullDescription": {"text": "`chunchugwan/web/auth_routes.py` declares `GET /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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`chunchugwan/web/auth_routes.py` declares `POST /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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-57e7bd2d17b88c85", "name": "Unused endpoint: GET /login/totp", "shortDescription": {"text": "Unused endpoint: GET /login/totp"}, "fullDescription": {"text": "`chunchugwan/web/auth_routes.py` declares `GET /login/totp` 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 \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/21800"}, "properties": {"repository": "TylorSTYLE/ChunChuGwan", "repoUrl": "https://github.com/TylorSTYLE/ChunChuGwan", "branch": "main"}, "results": [{"ruleId": "scanner-6c78d86b6be732fb", "level": "note", "message": {"text": "Possibly dead Python function: repl"}, "properties": {"repobilityId": "6f5d3779bbb8be8b", "scanner": "scanner-primary", "fingerprint": "6c78d86b6be732fb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/capture.py:698"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-93a638f593238033", "level": "note", "message": {"text": "Possibly dead Python function: emit"}, "properties": {"repobilityId": "fecc700ec874b669", "scanner": "scanner-primary", "fingerprint": "93a638f593238033", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/system_log.py:48"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e092f9ef21ac5eec", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: ghcr.io/astral-sh/uv:python3.12-bookworm-slim"}, "properties": {"repobilityId": "ef8ff6643f151fe1", "scanner": "scanner-primary", "fingerprint": "e092f9ef21ac5eec", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-77a464701f01cedf", "level": "error", "message": {"text": "Possible secret in README.md"}, "properties": {"repobilityId": "03df1be0543b7759", "scanner": "scanner-primary", "fingerprint": "77a464701f01cedf", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "README.md"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "144f516496668fb7", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2d714eaacdb9a135", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ba2f9c341e13ca52", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "144f516496668fb7", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "19a3e05b43a287b5", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-68a2b8f5c8cd6b53", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "0036b33690fe05ae", "scanner": "scanner-primary", "fingerprint": "68a2b8f5c8cd6b53", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9847e08b01c7192f", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a22664b58dca3181", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f6c832d67a7838", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2a1615baa644f72e", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 89}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2674709794ce02ca", "level": "note", "message": {"text": "Very large file: chunchugwan/db.py (2850 lines)"}, "properties": {"repobilityId": "78d014fae810a070", "scanner": "scanner-primary", "fingerprint": "2674709794ce02ca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1485f275ce1c081b", "level": "note", "message": {"text": "Very large file: chunchugwan/web/i18n.py (909 lines)"}, "properties": {"repobilityId": "de849417f4213ce2", "scanner": "scanner-primary", "fingerprint": "1485f275ce1c081b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f70e9c625afa001b", "level": "note", "message": {"text": "Very large file: chunchugwan/web/app.py (1863 lines)"}, "properties": {"repobilityId": "dcf62c14ea9f0114", "scanner": "scanner-primary", "fingerprint": "f70e9c625afa001b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "72abb8282a7f27b3", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "8d92ea9b7234b76c", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-5d268b1a96902c54", "level": "note", "message": {"text": "Legacy-named symbol `create_backup` in tests/test_backup.py:86"}, "properties": {"repobilityId": "8c4f148531223ba1", "scanner": "scanner-primary", "fingerprint": "5d268b1a96902c54", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4f1d4aa7a90e3478", "level": "note", "message": {"text": "Legacy-named symbol `_consistent_db_copy` in chunchugwan/backup.py:73"}, "properties": {"repobilityId": "7725964478d27438", "scanner": "scanner-primary", "fingerprint": "4f1d4aa7a90e3478", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d2304c6793b94330", "level": "none", "message": {"text": "Commented-code block (7 lines) in chunchugwan/backup.py:31"}, "properties": {"repobilityId": "12039b0adf232b63", "scanner": "scanner-primary", "fingerprint": "d2304c6793b94330", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-323a1d0e748738c8", "level": "none", "message": {"text": "Commented-code block (12 lines) in chunchugwan/capture.py:25"}, "properties": {"repobilityId": "367d1d0fff93b71e", "scanner": "scanner-primary", "fingerprint": "323a1d0e748738c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a845838dcefd0c7", "level": "note", "message": {"text": "Legacy-named symbol `create_backup` in chunchugwan/cli.py:617"}, "properties": {"repobilityId": "931869c28ab27870", "scanner": "scanner-primary", "fingerprint": "0a845838dcefd0c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7b291d0da4ecf87a", "level": "none", "message": {"text": "Commented-code block (5 lines) in chunchugwan/pipeline.py:411"}, "properties": {"repobilityId": "998a9959eb0b8c28", "scanner": "scanner-primary", "fingerprint": "7b291d0da4ecf87a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f739d53e314076b", "level": "none", "message": {"text": "Commented-code block (6 lines) in chunchugwan/web/app.py:188"}, "properties": {"repobilityId": "2a289d5c90ae44fd", "scanner": "scanner-primary", "fingerprint": "6f739d53e314076b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b40595a04322cae", "level": "note", "message": {"text": "Legacy-named symbol `system_backup` in chunchugwan/web/system_routes.py:180"}, "properties": {"repobilityId": "23b66c71ea966553", "scanner": "scanner-primary", "fingerprint": "3b40595a04322cae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "164aff0099832543", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6ddeaa7dec1bbfc5", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "62eb1c58e8c15aa4", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "79cd0b2003731a03", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "7607e7f599df455e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5dd44dc9430d4b3a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "cff3cf2fdf8765a0", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1a5d028ad5e25142", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f82416566c11c6ad", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "cdab385d0cdaa704", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "bc58667315a26061", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "96fe548878ade706", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e1f54511edc8f26a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8c476b1a087b6cf2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "d7336a912593793a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-1c9bd31e7b92a7f3", "level": "error", "message": {"text": "FastAPI POST `api_archive` without auth dependency \u2014 chunchugwan/web/api_routes.py:167"}, "properties": {"repobilityId": "e042c2a794d1c44b", "scanner": "scanner-primary", "fingerprint": "1c9bd31e7b92a7f3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/api_routes.py"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-5511874d7dd6604e", "level": "error", "message": {"text": "FastAPI POST `site_failed_retry` without auth dependency \u2014 chunchugwan/web/app.py:507"}, "properties": {"repobilityId": "9d401456474e81e8", "scanner": "scanner-primary", "fingerprint": "5511874d7dd6604e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 507}}}]}, {"ruleId": "scanner-39672ca41e87d78e", "level": "error", "message": {"text": "FastAPI POST `site_crawl_failed_retry` without auth dependency \u2014 chunchugwan/web/app.py:528"}, "properties": {"repobilityId": "b6493ef5b2283ac5", "scanner": "scanner-primary", "fingerprint": "39672ca41e87d78e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 528}}}]}, {"ruleId": "scanner-488015b42fc417d0", "level": "error", "message": {"text": "FastAPI POST `site_export` without auth dependency \u2014 chunchugwan/web/app.py:559"}, "properties": {"repobilityId": "3a66ab52e2a15998", "scanner": "scanner-primary", "fingerprint": "488015b42fc417d0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 559}}}]}, {"ruleId": "scanner-063623209690bbba", "level": "error", "message": {"text": "FastAPI POST `site_delete` without auth dependency \u2014 chunchugwan/web/app.py:577"}, "properties": {"repobilityId": "e55243ab402e553c", "scanner": "scanner-primary", "fingerprint": "063623209690bbba", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 577}}}]}, {"ruleId": "scanner-d89b6977424229d4", "level": "error", "message": {"text": "FastAPI POST `schedule_set` without auth dependency \u2014 chunchugwan/web/app.py:788"}, "properties": {"repobilityId": "52b8b36e362b26cf", "scanner": "scanner-primary", "fingerprint": "d89b6977424229d4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 788}}}]}, {"ruleId": "scanner-74e47d1bb01c6cf3", "level": "error", "message": {"text": "FastAPI POST `schedule_next_run` without auth dependency \u2014 chunchugwan/web/app.py:816"}, "properties": {"repobilityId": "d05c61ec5c05d0f5", "scanner": "scanner-primary", "fingerprint": "74e47d1bb01c6cf3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 816}}}]}, {"ruleId": "scanner-37133a5a01045e6d", "level": "error", "message": {"text": "FastAPI POST `schedule_delete` without auth dependency \u2014 chunchugwan/web/app.py:856"}, "properties": {"repobilityId": "3357f726608e9b0e", "scanner": "scanner-primary", "fingerprint": "37133a5a01045e6d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 856}}}]}, {"ruleId": "scanner-05816356d229729b", "level": "error", "message": {"text": "FastAPI POST `archive_new` without auth dependency \u2014 chunchugwan/web/app.py:1486"}, "properties": {"repobilityId": "dc6305cae2ca18d4", "scanner": "scanner-primary", "fingerprint": "05816356d229729b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1486}}}]}, {"ruleId": "scanner-a3783058d1965305", "level": "error", "message": {"text": "FastAPI POST `rearchive` without auth dependency \u2014 chunchugwan/web/app.py:1540"}, "properties": {"repobilityId": "39d4947525475a48", "scanner": "scanner-primary", "fingerprint": "a3783058d1965305", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1540}}}]}, {"ruleId": "scanner-0dfee889a7223b0f", "level": "error", "message": {"text": "FastAPI POST `log_retry` without auth dependency \u2014 chunchugwan/web/app.py:1560"}, "properties": {"repobilityId": "6e5aed753297451f", "scanner": "scanner-primary", "fingerprint": "0dfee889a7223b0f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1560}}}]}, {"ruleId": "scanner-db838d6c7c6a7d19", "level": "error", "message": {"text": "FastAPI POST `page_delete` without auth dependency \u2014 chunchugwan/web/app.py:1595"}, "properties": {"repobilityId": "c4d1c2e30fd9dd6c", "scanner": "scanner-primary", "fingerprint": "db838d6c7c6a7d19", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1595}}}]}, {"ruleId": "scanner-b67b21f666fe022a", "level": "error", "message": {"text": "FastAPI POST `snapshot_delete` without auth dependency \u2014 chunchugwan/web/app.py:1620"}, "properties": {"repobilityId": "16bad8423bad694f", "scanner": "scanner-primary", "fingerprint": "b67b21f666fe022a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1620}}}]}, {"ruleId": "scanner-6a43f3c1177763e1", "level": "error", "message": {"text": "FastAPI POST `crawl_cancel` without auth dependency \u2014 chunchugwan/web/app.py:1709"}, "properties": {"repobilityId": "7214a6317d44ba5a", "scanner": "scanner-primary", "fingerprint": "6a43f3c1177763e1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1709}}}]}, {"ruleId": "scanner-5ed68bcf55501a06", "level": "error", "message": {"text": "FastAPI POST `crawl_retry` without auth dependency \u2014 chunchugwan/web/app.py:1720"}, "properties": {"repobilityId": "77a2168878ce3900", "scanner": "scanner-primary", "fingerprint": "5ed68bcf55501a06", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1720}}}]}, {"ruleId": "scanner-e5f0f6f51c05775f", "level": "error", "message": {"text": "FastAPI POST `crawl_page_retry` without auth dependency \u2014 chunchugwan/web/app.py:1734"}, "properties": {"repobilityId": "cae4f87fb210d30a", "scanner": "scanner-primary", "fingerprint": "e5f0f6f51c05775f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1734}}}]}, {"ruleId": "scanner-a6a2bafa34c2a4a3", "level": "error", "message": {"text": "FastAPI POST `crawl_schedule_set` without auth dependency \u2014 chunchugwan/web/app.py:1767"}, "properties": {"repobilityId": "9b72bdf7df733785", "scanner": "scanner-primary", "fingerprint": "a6a2bafa34c2a4a3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1767}}}]}, {"ruleId": "scanner-230587a452211e3d", "level": "error", "message": {"text": "FastAPI POST `crawl_schedule_next_run` without auth dependency \u2014 chunchugwan/web/app.py:1795"}, "properties": {"repobilityId": "25073660b92d67bf", "scanner": "scanner-primary", "fingerprint": "230587a452211e3d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1795}}}]}, {"ruleId": "scanner-8c56f0b56775eabd", "level": "error", "message": {"text": "FastAPI POST `crawl_schedule_delete` without auth dependency \u2014 chunchugwan/web/app.py:1827"}, "properties": {"repobilityId": "0477e71f692d2eaa", "scanner": "scanner-primary", "fingerprint": "8c56f0b56775eabd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/app.py"}, "region": {"startLine": 1827}}}]}, {"ruleId": "scanner-fcd2e602a0944af2", "level": "error", "message": {"text": "FastAPI POST `setup` without auth dependency \u2014 chunchugwan/web/auth_routes.py:133"}, "properties": {"repobilityId": "732321f7d95ac4a4", "scanner": "scanner-primary", "fingerprint": "fcd2e602a0944af2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 133}}}]}, {"ruleId": "scanner-c5a5a7c7ac2b4f86", "level": "error", "message": {"text": "FastAPI POST `totp_login` without auth dependency \u2014 chunchugwan/web/auth_routes.py:261"}, "properties": {"repobilityId": "70440fbcf4dce28d", "scanner": "scanner-primary", "fingerprint": "c5a5a7c7ac2b4f86", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 261}}}]}, {"ruleId": "scanner-1f186166452a15e7", "level": "error", "message": {"text": "FastAPI POST `passkey_login_options` without auth dependency \u2014 chunchugwan/web/auth_routes.py:284"}, "properties": {"repobilityId": "8b1c067add643fb1", "scanner": "scanner-primary", "fingerprint": "1f186166452a15e7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 284}}}]}, {"ruleId": "scanner-f29d965a183ee772", "level": "error", "message": {"text": "FastAPI POST `passkey_login` without auth dependency \u2014 chunchugwan/web/auth_routes.py:301"}, "properties": {"repobilityId": "7a0d2a4bda8cec38", "scanner": "scanner-primary", "fingerprint": "f29d965a183ee772", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 301}}}]}, {"ruleId": "scanner-1e920ef420738b18", "level": "error", "message": {"text": "FastAPI POST `totp_confirm` without auth dependency \u2014 chunchugwan/web/auth_routes.py:352"}, "properties": {"repobilityId": "ee60489e71a71e36", "scanner": "scanner-primary", "fingerprint": "1e920ef420738b18", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 352}}}]}, {"ruleId": "scanner-bedf39ea09540d6c", "level": "error", "message": {"text": "FastAPI POST `totp_disable` without auth dependency \u2014 chunchugwan/web/auth_routes.py:373"}, "properties": {"repobilityId": "57300e0795360709", "scanner": "scanner-primary", "fingerprint": "bedf39ea09540d6c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 373}}}]}, {"ruleId": "scanner-6ef7be84856042ac", "level": "error", "message": {"text": "FastAPI POST `passkey_register_options` without auth dependency \u2014 chunchugwan/web/auth_routes.py:411"}, "properties": {"repobilityId": "0f5292ae5f23162f", "scanner": "scanner-primary", "fingerprint": "6ef7be84856042ac", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 411}}}]}, {"ruleId": "scanner-025dbfd889177f1b", "level": "error", "message": {"text": "FastAPI POST `passkey_register` without auth dependency \u2014 chunchugwan/web/auth_routes.py:428"}, "properties": {"repobilityId": "b87b99d3e1a1a4a1", "scanner": "scanner-primary", "fingerprint": "025dbfd889177f1b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 428}}}]}, {"ruleId": "scanner-87b097e5cb1e647d", "level": "error", "message": {"text": "FastAPI POST `passkey_delete` without auth dependency \u2014 chunchugwan/web/auth_routes.py:455"}, "properties": {"repobilityId": "cea604c42eeb0d3e", "scanner": "scanner-primary", "fingerprint": "87b097e5cb1e647d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 455}}}]}, {"ruleId": "scanner-a9ac4bf2e3d1f174", "level": "error", "message": {"text": "FastAPI POST `change_language` without auth dependency \u2014 chunchugwan/web/auth_routes.py:515"}, "properties": {"repobilityId": "c7cfd0aab6f163e5", "scanner": "scanner-primary", "fingerprint": "a9ac4bf2e3d1f174", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 515}}}]}, {"ruleId": "scanner-366f98dbc68f49d3", "level": "error", "message": {"text": "FastAPI POST `change_timezone` without auth dependency \u2014 chunchugwan/web/auth_routes.py:527"}, "properties": {"repobilityId": "fc192a7cff2d94fc", "scanner": "scanner-primary", "fingerprint": "366f98dbc68f49d3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 527}}}]}, {"ruleId": "scanner-3aca73c7c710b449", "level": "error", "message": {"text": "FastAPI POST `change_display_name` without auth dependency \u2014 chunchugwan/web/auth_routes.py:539"}, "properties": {"repobilityId": "ebbe4bba681b9473", "scanner": "scanner-primary", "fingerprint": "3aca73c7c710b449", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 539}}}]}, {"ruleId": "scanner-8767654fdc611b2f", "level": "error", "message": {"text": "FastAPI POST `change_password` without auth dependency \u2014 chunchugwan/web/auth_routes.py:556"}, "properties": {"repobilityId": "fcb8cbb07f10d16c", "scanner": "scanner-primary", "fingerprint": "8767654fdc611b2f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 556}}}]}, {"ruleId": "scanner-4aa9c05a8c9f1c9e", "level": "error", "message": {"text": "FastAPI POST `withdraw_account` without auth dependency \u2014 chunchugwan/web/auth_routes.py:590"}, "properties": {"repobilityId": "0d7b0361a318023d", "scanner": "scanner-primary", "fingerprint": "4aa9c05a8c9f1c9e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 590}}}]}, {"ruleId": "scanner-c161c35487558525", "level": "error", "message": {"text": "FastAPI POST `invite_accept` without auth dependency \u2014 chunchugwan/web/auth_routes.py:789"}, "properties": {"repobilityId": "c838198dc29057d5", "scanner": "scanner-primary", "fingerprint": "c161c35487558525", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/auth_routes.py"}, "region": {"startLine": 789}}}]}, {"ruleId": "scanner-8c710d2993f06ca5", "level": "error", "message": {"text": "FastAPI POST `system_backup` without auth dependency \u2014 chunchugwan/web/system_routes.py:179"}, "properties": {"repobilityId": "81838111fbec4973", "scanner": "scanner-primary", "fingerprint": "8c710d2993f06ca5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 179}}}]}, {"ruleId": "scanner-5fd516844be13507", "level": "error", "message": {"text": "FastAPI POST `system_export` without auth dependency \u2014 chunchugwan/web/system_routes.py:186"}, "properties": {"repobilityId": "a8a59c51e3ee5aef", "scanner": "scanner-primary", "fingerprint": "5fd516844be13507", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-cd6c6b57c7b1d604", "level": "error", "message": {"text": "FastAPI POST `system_compact` without auth dependency \u2014 chunchugwan/web/system_routes.py:205"}, "properties": {"repobilityId": "2fa82f6839be1850", "scanner": "scanner-primary", "fingerprint": "cd6c6b57c7b1d604", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 205}}}]}, {"ruleId": "scanner-d663aebd46b4389b", "level": "error", "message": {"text": "FastAPI POST `system_settings` without auth dependency \u2014 chunchugwan/web/system_routes.py:241"}, "properties": {"repobilityId": "62a55cadf457c2d2", "scanner": "scanner-primary", "fingerprint": "d663aebd46b4389b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 241}}}]}, {"ruleId": "scanner-31d4cb4d90e3a7da", "level": "error", "message": {"text": "FastAPI POST `system_crawl_settings` without auth dependency \u2014 chunchugwan/web/system_routes.py:265"}, "properties": {"repobilityId": "73e3510e4be1d07a", "scanner": "scanner-primary", "fingerprint": "31d4cb4d90e3a7da", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 265}}}]}, {"ruleId": "scanner-671bba8fad78ea9a", "level": "error", "message": {"text": "FastAPI POST `network_tags_create` without auth dependency \u2014 chunchugwan/web/system_routes.py:308"}, "properties": {"repobilityId": "9abae0b16e05c5c0", "scanner": "scanner-primary", "fingerprint": "671bba8fad78ea9a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 308}}}]}, {"ruleId": "scanner-4024fb119c67ef88", "level": "error", "message": {"text": "FastAPI POST `network_tags_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:339"}, "properties": {"repobilityId": "abc7556e49615564", "scanner": "scanner-primary", "fingerprint": "4024fb119c67ef88", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 339}}}]}, {"ruleId": "scanner-737911930ee317a4", "level": "error", "message": {"text": "FastAPI POST `system_restore` without auth dependency \u2014 chunchugwan/web/system_routes.py:361"}, "properties": {"repobilityId": "0a6a4158d533d876", "scanner": "scanner-primary", "fingerprint": "737911930ee317a4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 361}}}]}, {"ruleId": "scanner-7409a0112a0a37b6", "level": "error", "message": {"text": "FastAPI POST `users_set_role` without auth dependency \u2014 chunchugwan/web/system_routes.py:420"}, "properties": {"repobilityId": "7a92d3fb48661b85", "scanner": "scanner-primary", "fingerprint": "7409a0112a0a37b6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 420}}}]}, {"ruleId": "scanner-4c6c56a5a54de952", "level": "error", "message": {"text": "FastAPI POST `users_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:455"}, "properties": {"repobilityId": "4f1d74deab739a3b", "scanner": "scanner-primary", "fingerprint": "4c6c56a5a54de952", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 455}}}]}, {"ruleId": "scanner-f9794410e026967d", "level": "error", "message": {"text": "FastAPI POST `users_set_name` without auth dependency \u2014 chunchugwan/web/system_routes.py:488"}, "properties": {"repobilityId": "3605508e3c9f1d0a", "scanner": "scanner-primary", "fingerprint": "f9794410e026967d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 488}}}]}, {"ruleId": "scanner-35ed7369cdea4f63", "level": "error", "message": {"text": "FastAPI POST `users_force_logout` without auth dependency \u2014 chunchugwan/web/system_routes.py:515"}, "properties": {"repobilityId": "414f400c9bd5a6ad", "scanner": "scanner-primary", "fingerprint": "35ed7369cdea4f63", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 515}}}]}, {"ruleId": "scanner-8dc8c5c0e244033b", "level": "error", "message": {"text": "FastAPI POST `users_invite` without auth dependency \u2014 chunchugwan/web/system_routes.py:535"}, "properties": {"repobilityId": "f95b7dc457ff9852", "scanner": "scanner-primary", "fingerprint": "8dc8c5c0e244033b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 535}}}]}, {"ruleId": "scanner-495868d0c09b7de3", "level": "error", "message": {"text": "FastAPI POST `users_invite_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:585"}, "properties": {"repobilityId": "8587e8a266c893fe", "scanner": "scanner-primary", "fingerprint": "495868d0c09b7de3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 585}}}]}, {"ruleId": "scanner-1218115961285760", "level": "error", "message": {"text": "FastAPI POST `api_keys_create` without auth dependency \u2014 chunchugwan/web/system_routes.py:661"}, "properties": {"repobilityId": "0491b91739a2766e", "scanner": "scanner-primary", "fingerprint": "1218115961285760", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 661}}}]}, {"ruleId": "scanner-174bd7ff36235395", "level": "error", "message": {"text": "FastAPI POST `api_keys_delete` without auth dependency \u2014 chunchugwan/web/system_routes.py:701"}, "properties": {"repobilityId": "04218b5611ed438c", "scanner": "scanner-primary", "fingerprint": "174bd7ff36235395", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 701}}}]}, {"ruleId": "scanner-604877ac5e1073eb", "level": "error", "message": {"text": "FastAPI POST `system_import` without auth dependency \u2014 chunchugwan/web/system_routes.py:716"}, "properties": {"repobilityId": "15e2dd4dd4a8f80e", "scanner": "scanner-primary", "fingerprint": "604877ac5e1073eb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chunchugwan/web/system_routes.py"}, "region": {"startLine": 716}}}]}, {"ruleId": "scanner-abdfb7ca067f44c1", "level": "note", "message": {"text": "Unused endpoint: GET /pages"}, "properties": {"repobilityId": "cca20e8ca0f5957a", "scanner": "scanner-primary", "fingerprint": "abdfb7ca067f44c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-789b05c0f423fd52", "level": "note", "message": {"text": "Unused endpoint: GET /pages/{page_id}"}, "properties": {"repobilityId": "bd5f5366428747e5", "scanner": "scanner-primary", "fingerprint": "789b05c0f423fd52", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b4223ec6452e1f15", "level": "note", "message": {"text": "Unused endpoint: GET /snapshots/{snapshot_id}"}, "properties": {"repobilityId": "5f8ade412129b00f", "scanner": "scanner-primary", "fingerprint": "b4223ec6452e1f15", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-da54918e4b4c4930", "level": "note", "message": {"text": "Unused endpoint: GET /snapshots/{snapshot_id}/file/{name}"}, "properties": {"repobilityId": "e2e6388e29a17a18", "scanner": "scanner-primary", "fingerprint": "da54918e4b4c4930", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1dc077c868017d1f", "level": "note", "message": {"text": "Unused endpoint: POST /archive"}, "properties": {"repobilityId": "b7d2b2cfe13f0f1a", "scanner": "scanner-primary", "fingerprint": "1dc077c868017d1f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c063354a4d178f9", "level": "note", "message": {"text": "Unused endpoint: GET /favicon.svg"}, "properties": {"repobilityId": "dc8c04108c93ccc0", "scanner": "scanner-primary", "fingerprint": "4c063354a4d178f9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8e47024499b57b7e", "level": "note", "message": {"text": "Unused endpoint: GET /archives"}, "properties": {"repobilityId": "3e542f822cf5325e", "scanner": "scanner-primary", "fingerprint": "8e47024499b57b7e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-801dbb9e6f6cee79", "level": "note", "message": {"text": "Unused endpoint: GET /sites/{site_id}"}, "properties": {"repobilityId": "b7168fd3704c88b8", "scanner": "scanner-primary", "fingerprint": "801dbb9e6f6cee79", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ff8c9cbbf2a7acbb", "level": "note", "message": {"text": "Unused endpoint: POST /sites/{site_id}/failed/{log_id}/retry"}, "properties": {"repobilityId": "fd2801760729bca7", "scanner": "scanner-primary", "fingerprint": "ff8c9cbbf2a7acbb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f29adbda96c1e1c0", "level": "note", "message": {"text": "Unused endpoint: POST /sites/{site_id}/crawl-failed/{crawl_page_id}/retry"}, "properties": {"repobilityId": "a149e099c8df47bb", "scanner": "scanner-primary", "fingerprint": "f29adbda96c1e1c0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2cec9543a69bafd7", "level": "note", "message": {"text": "Unused endpoint: GET /sites/{site_id}/certificates/{cert_id}.pem"}, "properties": {"repobilityId": "8b4109e42331c23c", "scanner": "scanner-primary", "fingerprint": "2cec9543a69bafd7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-97a99f5e0f11c504", "level": "note", "message": {"text": "Unused endpoint: POST /sites/{site_id}/export"}, "properties": {"repobilityId": "797144d0750cb5fe", "scanner": "scanner-primary", "fingerprint": "97a99f5e0f11c504", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f4a47e2051952d7", "level": "note", "message": {"text": "Unused endpoint: POST /sites/{site_id}/delete"}, "properties": {"repobilityId": "3e312287e55e2013", "scanner": "scanner-primary", "fingerprint": "3f4a47e2051952d7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b3fc0a91f8ebfbc4", "level": "note", "message": {"text": "Unused endpoint: GET /archive/active"}, "properties": {"repobilityId": "c264d8964ed69381", "scanner": "scanner-primary", "fingerprint": "b3fc0a91f8ebfbc4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "13b716b31d1a8823", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d504b80adc9409ec", "level": "note", "message": {"text": "Unused endpoint: GET /dashboard"}, "properties": {"repobilityId": "6dd53c9e5bea81d0", "scanner": "scanner-primary", "fingerprint": "d504b80adc9409ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b30f40dc92a8387", "level": "note", "message": {"text": "Unused endpoint: GET /page/{page_id}"}, "properties": {"repobilityId": "39be637d75a73af6", "scanner": "scanner-primary", "fingerprint": "9b30f40dc92a8387", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e7034a8ba75cb9b", "level": "note", "message": {"text": "Unused endpoint: POST /page/{page_id}/schedule"}, "properties": {"repobilityId": "ef326d750719a8a4", "scanner": "scanner-primary", "fingerprint": "3e7034a8ba75cb9b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd71a7cc7111f4d4", "level": "note", "message": {"text": "Unused endpoint: POST /page/{page_id}/schedule/next-run"}, "properties": {"repobilityId": "6f9bf76b26c6bdac", "scanner": "scanner-primary", "fingerprint": "dd71a7cc7111f4d4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-15639391c6e355fe", "level": "note", "message": {"text": "Unused endpoint: POST /page/{page_id}/schedule/delete"}, "properties": {"repobilityId": "dc237f73b12577ac", "scanner": "scanner-primary", "fingerprint": "15639391c6e355fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d9abfdbc1cc9788", "level": "note", "message": {"text": "Unused endpoint: GET /schedules"}, "properties": {"repobilityId": "72c67665cbf90ba1", "scanner": "scanner-primary", "fingerprint": "0d9abfdbc1cc9788", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a037b3a125500239", "level": "note", "message": {"text": "Unused endpoint: GET /snapshot/{snapshot_id}"}, "properties": {"repobilityId": "d2258ba6fcaf4732", "scanner": "scanner-primary", "fingerprint": "a037b3a125500239", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-70f4fe0fbc43773c", "level": "note", "message": {"text": "Unused endpoint: GET /snapshot/{snapshot_id}/file/{name}"}, "properties": {"repobilityId": "ab6663d99a0e4b5e", "scanner": "scanner-primary", "fingerprint": "70f4fe0fbc43773c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-da9e954a7339d7e2", "level": "note", "message": {"text": "Unused endpoint: GET /snapshot/{snapshot_id}/doc/{name}"}, "properties": {"repobilityId": "6c4605ecd2450502", "scanner": "scanner-primary", "fingerprint": "da9e954a7339d7e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ffc9ad08ed6cdd74", "level": "note", "message": {"text": "Unused endpoint: GET /documents"}, "properties": {"repobilityId": "0ad1508154fb598b", "scanner": "scanner-primary", "fingerprint": "ffc9ad08ed6cdd74", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f22a194af4b46bcc", "level": "note", "message": {"text": "Unused endpoint: GET /document/{sha256}/{name}"}, "properties": {"repobilityId": "394715018a00e3e3", "scanner": "scanner-primary", "fingerprint": "f22a194af4b46bcc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d2b0a2c5d93e892", "level": "note", "message": {"text": "Unused endpoint: GET /resource/{name}"}, "properties": {"repobilityId": "6c2afdad9d8a98c0", "scanner": "scanner-primary", "fingerprint": "9d2b0a2c5d93e892", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-93616753e3839d7f", "level": "note", "message": {"text": "Unused endpoint: GET /diff/{page_id}"}, "properties": {"repobilityId": "5690554771b73cf7", "scanner": "scanner-primary", "fingerprint": "93616753e3839d7f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-930bcbb24877c650", "level": "note", "message": {"text": "Unused endpoint: GET /diff/{page_id}/shotdiff"}, "properties": {"repobilityId": "89128777453e4ee7", "scanner": "scanner-primary", "fingerprint": "930bcbb24877c650", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72f99d58636b648b", "level": "note", "message": {"text": "Unused endpoint: GET /logs"}, "properties": {"repobilityId": "219bd9642553e9d5", "scanner": "scanner-primary", "fingerprint": "72f99d58636b648b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-23c2cc49b2fea1db", "level": "note", "message": {"text": "Unused endpoint: GET /archive/new"}, "properties": {"repobilityId": "6ee8d170d5953bad", "scanner": "scanner-primary", "fingerprint": "23c2cc49b2fea1db", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b0dd4bec11301a82", "level": "note", "message": {"text": "Unused endpoint: POST /page/{page_id}/rearchive"}, "properties": {"repobilityId": "371c1d0ec35f49f8", "scanner": "scanner-primary", "fingerprint": "b0dd4bec11301a82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68e0f658a040b18f", "level": "note", "message": {"text": "Unused endpoint: POST /logs/{log_id}/retry"}, "properties": {"repobilityId": "f3638439f90cfba4", "scanner": "scanner-primary", "fingerprint": "68e0f658a040b18f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9f14f0288abf35c", "level": "note", "message": {"text": "Unused endpoint: POST /page/{page_id}/delete"}, "properties": {"repobilityId": "f6ae0d7cb692d5dc", "scanner": "scanner-primary", "fingerprint": "b9f14f0288abf35c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1efe9c96706bc92", "level": "note", "message": {"text": "Unused endpoint: POST /snapshot/{snapshot_id}/delete"}, "properties": {"repobilityId": "6829027b5cdf24dc", "scanner": "scanner-primary", "fingerprint": "e1efe9c96706bc92", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e9f111d87df75b5", "level": "note", "message": {"text": "Unused endpoint: GET /crawls"}, "properties": {"repobilityId": "2a16375e0670a91e", "scanner": "scanner-primary", "fingerprint": "2e9f111d87df75b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-883bf6e097869370", "level": "note", "message": {"text": "Unused endpoint: GET /crawls/{crawl_id}"}, "properties": {"repobilityId": "902a6784309586e8", "scanner": "scanner-primary", "fingerprint": "883bf6e097869370", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ad7ba45f718918ed", "level": "note", "message": {"text": "Unused endpoint: GET /crawls/{crawl_id}/status"}, "properties": {"repobilityId": "eaeffd0acf050ce8", "scanner": "scanner-primary", "fingerprint": "ad7ba45f718918ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f7e919da44d17b64", "level": "note", "message": {"text": "Unused endpoint: POST /crawls/{crawl_id}/cancel"}, "properties": {"repobilityId": "0c0613da20928918", "scanner": "scanner-primary", "fingerprint": "f7e919da44d17b64", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf05a5f3ac9438dc", "level": "note", "message": {"text": "Unused endpoint: POST /crawls/{crawl_id}/retry"}, "properties": {"repobilityId": "099aa26eb0daf051", "scanner": "scanner-primary", "fingerprint": "cf05a5f3ac9438dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5ec144d1e3e2db20", "level": "note", "message": {"text": "Unused endpoint: POST /crawls/{crawl_id}/pages/{crawl_page_id}/retry"}, "properties": {"repobilityId": "44e4175af460d752", "scanner": "scanner-primary", "fingerprint": "5ec144d1e3e2db20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dc213f80ee0a8c09", "level": "note", "message": {"text": "Unused endpoint: POST /crawl-schedules/{schedule_id}"}, "properties": {"repobilityId": "113dfe4706c5f722", "scanner": "scanner-primary", "fingerprint": "dc213f80ee0a8c09", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-15c31e937fdf4994", "level": "note", "message": {"text": "Unused endpoint: POST /crawl-schedules/{schedule_id}/next-run"}, "properties": {"repobilityId": "3186a18ed31d8413", "scanner": "scanner-primary", "fingerprint": "15c31e937fdf4994", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8aaed72741a56c61", "level": "note", "message": {"text": "Unused endpoint: POST /crawl-schedules/{schedule_id}/delete"}, "properties": {"repobilityId": "efb3dd9aa5349863", "scanner": "scanner-primary", "fingerprint": "8aaed72741a56c61", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d372d86af9afd88", "level": "note", "message": {"text": "Unused endpoint: GET /crawl/{crawl_id}/goto"}, "properties": {"repobilityId": "21378f66e6931865", "scanner": "scanner-primary", "fingerprint": "2d372d86af9afd88", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d86afd7dd2beb431", "level": "note", "message": {"text": "Unused endpoint: GET /setup"}, "properties": {"repobilityId": "b4bb768b67b0584b", "scanner": "scanner-primary", "fingerprint": "d86afd7dd2beb431", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eb757797f6bd3444", "level": "note", "message": {"text": "Unused endpoint: POST /setup"}, "properties": {"repobilityId": "3d0d3dd6282af63f", "scanner": "scanner-primary", "fingerprint": "eb757797f6bd3444", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a4dfcad3eb1618a", "level": "note", "message": {"text": "Unused endpoint: GET /login"}, "properties": {"repobilityId": "bbdc0456294e8c79", "scanner": "scanner-primary", "fingerprint": "6a4dfcad3eb1618a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "60b09a66ab5fd543", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-57e7bd2d17b88c85", "level": "note", "message": {"text": "Unused endpoint: GET /login/totp"}, "properties": {"repobilityId": "4f9ceb7c069b1e10", "scanner": "scanner-primary", "fingerprint": "57e7bd2d17b88c85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}