{"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-181b7378053a49e3", "name": "Possibly dead Python function: handle", "shortDescription": {"text": "Possibly dead Python function: handle"}, "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-e953049c1e5ada95", "name": "Possibly dead Python function: process_result_value", "shortDescription": {"text": "Possibly dead Python function: process_result_value"}, "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-727dd4f296ba73a1", "name": "Possibly dead Python function: decorate", "shortDescription": {"text": "Possibly dead Python function: decorate"}, "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-5437bf9be9164c07", "name": "Stray `console.log` in TS/JS \u2014 src/angarion/adapters/http/static/htmx.min.js:1", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/angarion/adapters/http/static/htmx.min.js:1"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "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-110ce507cedb4535", "name": "Insecure pattern 'new_function_used' in src/angarion/adapters/http/static/htmx.min.js:1", "shortDescription": {"text": "Insecure pattern 'new_function_used' in src/angarion/adapters/http/static/htmx.min.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94bee781af5167c7", "name": "Insecure pattern 'insert_adjacent_html' in src/angarion/adapters/http/static/htmx.min.js:1", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in src/angarion/adapters/http/static/htmx.min.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a62f43bede1d800f", "name": "Insecure pattern 'domparser_html_parse' in src/angarion/adapters/http/static/htmx.min.js:1", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in src/angarion/adapters/http/static/htmx.min.js:1"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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-f754e46b32c85e00", "name": "Legacy-named symbol `model_copy` in tests/unit/test_bootstrap.py:403", "shortDescription": {"text": "Legacy-named symbol `model_copy` in tests/unit/test_bootstrap.py:403"}, "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-5285bbdbe9ef0924", "name": "Legacy-named symbol `model_copy` in tests/unit/adapters/http/test_api_v1.py:81", "shortDescription": {"text": "Legacy-named symbol `model_copy` in tests/unit/adapters/http/test_api_v1.py:81"}, "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-b9e138f3a19c8cf4", "name": "Legacy-named symbol `test_retry_copy` in tests/unit/domain/test_models.py:198", "shortDescription": {"text": "Legacy-named symbol `test_retry_copy` in tests/unit/domain/test_models.py:198"}, "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-7d0126a2521c883b", "name": "Legacy-named symbol `key_v1` in tests/unit/domain/test_keys.py:91", "shortDescription": {"text": "Legacy-named symbol `key_v1` in tests/unit/domain/test_keys.py:91"}, "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-69a789c3b156c418", "name": "Legacy-named symbol `model_copy` in src/angarion/adapters/telegram/catchup.py:191", "shortDescription": {"text": "Legacy-named symbol `model_copy` in src/angarion/adapters/telegram/catchup.py:191"}, "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-7192d98c4fa94b74", "name": "Legacy-named symbol `model_copy` in src/angarion/adapters/http/ops.py:170", "shortDescription": {"text": "Legacy-named symbol `model_copy` in src/angarion/adapters/http/ops.py:170"}, "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-790cf54ac40c2263", "name": "Legacy-named symbol `model_copy` in src/angarion/adapters/memory/storage.py:112", "shortDescription": {"text": "Legacy-named symbol `model_copy` in src/angarion/adapters/memory/storage.py:112"}, "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-6f3bdba458c0e45f", "name": "Commented-code block (6 lines) in src/angarion/adapters/storage/engine.py:49", "shortDescription": {"text": "Commented-code block (6 lines) in src/angarion/adapters/storage/engine.py:49"}, "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-eac0c7309ab7c0cc", "name": "Commented-code block (11 lines) in src/angarion/adapters/storage/orm.py:233", "shortDescription": {"text": "Commented-code block (11 lines) in src/angarion/adapters/storage/orm.py:233"}, "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-e6a75817a86fed16", "name": "Legacy-named symbol `model_copy` in src/angarion/application/worker.py:236", "shortDescription": {"text": "Legacy-named symbol `model_copy` in src/angarion/application/worker.py:236"}, "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-78600ee845ba241a", "name": "Legacy-named symbol `model_copy` in src/angarion/application/ingest.py:116", "shortDescription": {"text": "Legacy-named symbol `model_copy` in src/angarion/application/ingest.py:116"}, "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:\nscripts/seed_session.py:load_secrets, scripts/tg_login.py:load_secrets\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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nexamples/digest/processor.py:process, src/angarion/application/llm.py:process, src/angarion/application/processors.py:process, src/angarion/application/processors.py:process\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-33a6b62e30ce7ab4", "name": "Near-duplicate function bodies in 6 places", "shortDescription": {"text": "Near-duplicate function bodies in 6 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/angarion/adapters/memory/storage.py:put, src/angarion/adapters/memory/storage.py:put, src/angarion/adapters/memory/storage.py:put, src/angarion/adapters/storage/stores.py:put\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-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/angarion/adapters/memory/storage.py:get, src/angarion/adapters/memory/storage.py:get, src/angarion/adapters/memory/storage.py:get, src/angarion/adapters/memory/storage.py:get\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-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/angarion/adapters/memory/storage.py:load, src/angarion/adapters/memory/storage.py:load, src/angarion/adapters/memory/storage.py:load\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-ca4911c2c2398a02", "name": "FastAPI PUT `put_settings` without auth dependency \u2014 src/angarion/adapters/http/ops.py:259", "shortDescription": {"text": "FastAPI PUT `put_settings` without auth dependency \u2014 src/angarion/adapters/http/ops.py:259"}, "fullDescription": {"text": "`@router.put` 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-d2281d0726a393e7", "name": "FastAPI DELETE `delete_setting` without auth dependency \u2014 src/angarion/adapters/http/ops.py:274", "shortDescription": {"text": "FastAPI DELETE `delete_setting` without auth dependency \u2014 src/angarion/adapters/http/ops.py:274"}, "fullDescription": {"text": "`@router.delete` 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-8f457a0193c60f65", "name": "FastAPI POST `pause` without auth dependency \u2014 src/angarion/adapters/http/ops.py:289", "shortDescription": {"text": "FastAPI POST `pause` without auth dependency \u2014 src/angarion/adapters/http/ops.py:289"}, "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-055aca760acbf3f9", "name": "FastAPI POST `resume` without auth dependency \u2014 src/angarion/adapters/http/ops.py:308", "shortDescription": {"text": "FastAPI POST `resume` without auth dependency \u2014 src/angarion/adapters/http/ops.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-836c62ea86c65171", "name": "FastAPI POST `requeue` without auth dependency \u2014 src/angarion/adapters/http/ops.py:327", "shortDescription": {"text": "FastAPI POST `requeue` without auth dependency \u2014 src/angarion/adapters/http/ops.py:327"}, "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-c221e7eafb58e62d", "name": "FastAPI POST `restart` without auth dependency \u2014 src/angarion/adapters/http/ops.py:339", "shortDescription": {"text": "FastAPI POST `restart` without auth dependency \u2014 src/angarion/adapters/http/ops.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-e25ca82f7f67a991", "name": "FastAPI POST `catchup` without auth dependency \u2014 src/angarion/adapters/http/ops.py:351", "shortDescription": {"text": "FastAPI POST `catchup` without auth dependency \u2014 src/angarion/adapters/http/ops.py:351"}, "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-cd8dc4599ec52a08", "name": "Unused endpoint: GET /stats", "shortDescription": {"text": "Unused endpoint: GET /stats"}, "fullDescription": {"text": "`examples/web/ext.py` declares `GET /stats` 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-f05febf481988bc5", "name": "Unused endpoint: GET /ui/ext", "shortDescription": {"text": "Unused endpoint: GET /ui/ext"}, "fullDescription": {"text": "`examples/web/ext.py` declares `GET /ui/ext` 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-b437172024d687ff", "name": "Unused endpoint: GET /diagnostics", "shortDescription": {"text": "Unused endpoint: GET /diagnostics"}, "fullDescription": {"text": "`src/angarion/adapters/http/routes.py` declares `GET /diagnostics` 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-43269e4e79c2e69e", "name": "Unused endpoint: GET /events", "shortDescription": {"text": "Unused endpoint: GET /events"}, "fullDescription": {"text": "`src/angarion/adapters/http/routes.py` declares `GET /events` 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-512ccb0fd0b230ba", "name": "Unused endpoint: GET /settings", "shortDescription": {"text": "Unused endpoint: GET /settings"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops_pages.py` declares `GET /settings` 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-d9fbbfd361e91f1e", "name": "Unused endpoint: POST /settings", "shortDescription": {"text": "Unused endpoint: POST /settings"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops_pages.py` declares `POST /settings` 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-69d26c2f8e2ba3a8", "name": "Unused endpoint: POST /settings/{key}/reset", "shortDescription": {"text": "Unused endpoint: POST /settings/{key}/reset"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops_pages.py` declares `POST /settings/{key}/reset` 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-0da42eb3f762b008", "name": "Unused endpoint: POST /pipelines/{pipeline}/pause", "shortDescription": {"text": "Unused endpoint: POST /pipelines/{pipeline}/pause"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops_pages.py` declares `POST /pipelines/{pipeline}/pause` 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-e36970261528f7e1", "name": "Unused endpoint: POST /pipelines/{pipeline}/resume", "shortDescription": {"text": "Unused endpoint: POST /pipelines/{pipeline}/resume"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops_pages.py` declares `POST /pipelines/{pipeline}/resume` 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-cfea1130c34bf33b", "name": "Unused endpoint: POST /restart", "shortDescription": {"text": "Unused endpoint: POST /restart"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops_pages.py` declares `POST /restart` 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-61e423dc028f1211", "name": "Unused endpoint: POST /catchup", "shortDescription": {"text": "Unused endpoint: POST /catchup"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops_pages.py` declares `POST /catchup` 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-d932bba6e7b5b573", "name": "Unused endpoint: GET /dlq", "shortDescription": {"text": "Unused endpoint: GET /dlq"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops_pages.py` declares `GET /dlq` 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-4eb125dd78085840", "name": "Unused endpoint: POST /dlq/{uid}/requeue", "shortDescription": {"text": "Unused endpoint: POST /dlq/{uid}/requeue"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops_pages.py` declares `POST /dlq/{uid}/requeue` 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-1cf2ed60cbbf2375", "name": "Unused endpoint: PUT /settings", "shortDescription": {"text": "Unused endpoint: PUT /settings"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops.py` declares `PUT /settings` 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-1282963fa5c2d3b6", "name": "Unused endpoint: DELETE /settings/{key}", "shortDescription": {"text": "Unused endpoint: DELETE /settings/{key}"}, "fullDescription": {"text": "`src/angarion/adapters/http/ops.py` declares `DELETE /settings/{key}` 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": "`src/angarion/adapters/http/ui.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-2748808021f259ec", "name": "Unused endpoint: GET /pipelines", "shortDescription": {"text": "Unused endpoint: GET /pipelines"}, "fullDescription": {"text": "`src/angarion/adapters/http/ui.py` declares `GET /pipelines` 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-2b0702657af7457b", "name": "Unused endpoint: GET /fragments/pipelines", "shortDescription": {"text": "Unused endpoint: GET /fragments/pipelines"}, "fullDescription": {"text": "`src/angarion/adapters/http/ui.py` declares `GET /fragments/pipelines` 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-127ac5c06955a4c3", "name": "Unused endpoint: GET /fragments/queue", "shortDescription": {"text": "Unused endpoint: GET /fragments/queue"}, "fullDescription": {"text": "`src/angarion/adapters/http/ui.py` declares `GET /fragments/queue` 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-7956b96b0e5d48c5", "name": "Unused endpoint: GET /fragments/event-counts", "shortDescription": {"text": "Unused endpoint: GET /fragments/event-counts"}, "fullDescription": {"text": "`src/angarion/adapters/http/ui.py` declares `GET /fragments/event-counts` 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-33aa7fed607f9571", "name": "Unused endpoint: GET /fragments/cursors", "shortDescription": {"text": "Unused endpoint: GET /fragments/cursors"}, "fullDescription": {"text": "`src/angarion/adapters/http/ui.py` declares `GET /fragments/cursors` 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-fc3d357f01600926", "name": "Unused endpoint: GET /fragments/events-table", "shortDescription": {"text": "Unused endpoint: GET /fragments/events-table"}, "fullDescription": {"text": "`src/angarion/adapters/http/ui.py` declares `GET /fragments/events-table` 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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/admin.py` declares `POST /` 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-646905f54906a60a", "name": "Unused endpoint: PATCH /{user_id}", "shortDescription": {"text": "Unused endpoint: PATCH /{user_id}"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/admin.py` declares `PATCH /{user_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-55c93ee7e031a509", "name": "Unused endpoint: DELETE /{user_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{user_id}"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/admin.py` declares `DELETE /{user_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-304b6f2b403d93f7", "name": "Unused endpoint: POST /register", "shortDescription": {"text": "Unused endpoint: POST /register"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/users.py` declares `POST /register` 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": "`src/angarion/adapters/http/auth/pages.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": "`src/angarion/adapters/http/auth/pages.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-5ca735a2e6e3646c", "name": "Unused endpoint: GET /logout", "shortDescription": {"text": "Unused endpoint: GET /logout"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/pages.py` declares `GET /logout` 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-cc9225ca1870d2b9", "name": "Unused endpoint: GET /register", "shortDescription": {"text": "Unused endpoint: GET /register"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/pages.py` declares `GET /register` 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-841e50bf821e4158", "name": "Unused endpoint: GET /users", "shortDescription": {"text": "Unused endpoint: GET /users"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/pages.py` declares `GET /users` 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-86575157e656642a", "name": "Unused endpoint: POST /users/{user_id}/approve", "shortDescription": {"text": "Unused endpoint: POST /users/{user_id}/approve"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/pages.py` declares `POST /users/{user_id}/approve` 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-198ef79ffbc04112", "name": "Unused endpoint: POST /users/{user_id}/deactivate", "shortDescription": {"text": "Unused endpoint: POST /users/{user_id}/deactivate"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/pages.py` declares `POST /users/{user_id}/deactivate` 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-224a679af22fc8f3", "name": "Unused endpoint: POST /users/{user_id}/delete", "shortDescription": {"text": "Unused endpoint: POST /users/{user_id}/delete"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/pages.py` declares `POST /users/{user_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-59b0ab9ab930dd40", "name": "Unused endpoint: POST /users/create", "shortDescription": {"text": "Unused endpoint: POST /users/create"}, "fullDescription": {"text": "`src/angarion/adapters/http/auth/pages.py` declares `POST /users/create` 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/22380"}, "properties": {"repository": "vlakir/angarion", "repoUrl": "https://github.com/vlakir/angarion", "branch": "main"}, "results": [{"ruleId": "scanner-181b7378053a49e3", "level": "note", "message": {"text": "Possibly dead Python function: handle"}, "properties": {"repobilityId": "fc5b886fd2624c94", "scanner": "scanner-primary", "fingerprint": "181b7378053a49e3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/telegram/listener.py:203"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e953049c1e5ada95", "level": "note", "message": {"text": "Possibly dead Python function: process_result_value"}, "properties": {"repobilityId": "2b4ef95eaf3928de", "scanner": "scanner-primary", "fingerprint": "e953049c1e5ada95", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/storage/orm.py:59"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-727dd4f296ba73a1", "level": "note", "message": {"text": "Possibly dead Python function: decorate"}, "properties": {"repobilityId": "8ce426a62fb4ae76", "scanner": "scanner-primary", "fingerprint": "727dd4f296ba73a1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/application/processors.py:82"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5437bf9be9164c07", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/angarion/adapters/http/static/htmx.min.js:1"}, "properties": {"repobilityId": "d74150300513f304", "scanner": "scanner-primary", "fingerprint": "5437bf9be9164c07", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"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-110ce507cedb4535", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in src/angarion/adapters/http/static/htmx.min.js:1"}, "properties": {"repobilityId": "26376552859816bb", "scanner": "scanner-primary", "fingerprint": "110ce507cedb4535", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/http/static/htmx.min.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-94bee781af5167c7", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in src/angarion/adapters/http/static/htmx.min.js:1"}, "properties": {"repobilityId": "bf54179931748767", "scanner": "scanner-primary", "fingerprint": "94bee781af5167c7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/http/static/htmx.min.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a62f43bede1d800f", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in src/angarion/adapters/http/static/htmx.min.js:1"}, "properties": {"repobilityId": "9483035b74aaba33", "scanner": "scanner-primary", "fingerprint": "a62f43bede1d800f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/http/static/htmx.min.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "02519bfbc5ef580d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "cc877b620b362744", "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": "f5f2c1676fe87431", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-f754e46b32c85e00", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in tests/unit/test_bootstrap.py:403"}, "properties": {"repobilityId": "249751e5f5dc74d8", "scanner": "scanner-primary", "fingerprint": "f754e46b32c85e00", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5285bbdbe9ef0924", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in tests/unit/adapters/http/test_api_v1.py:81"}, "properties": {"repobilityId": "ad9c90909d309038", "scanner": "scanner-primary", "fingerprint": "5285bbdbe9ef0924", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b9e138f3a19c8cf4", "level": "note", "message": {"text": "Legacy-named symbol `test_retry_copy` in tests/unit/domain/test_models.py:198"}, "properties": {"repobilityId": "04325ac8f0afc0d3", "scanner": "scanner-primary", "fingerprint": "b9e138f3a19c8cf4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7d0126a2521c883b", "level": "note", "message": {"text": "Legacy-named symbol `key_v1` in tests/unit/domain/test_keys.py:91"}, "properties": {"repobilityId": "b40aa2064bfbecc6", "scanner": "scanner-primary", "fingerprint": "7d0126a2521c883b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-69a789c3b156c418", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in src/angarion/adapters/telegram/catchup.py:191"}, "properties": {"repobilityId": "140a6cc162e40bf8", "scanner": "scanner-primary", "fingerprint": "69a789c3b156c418", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7192d98c4fa94b74", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in src/angarion/adapters/http/ops.py:170"}, "properties": {"repobilityId": "e8401c708f0b873f", "scanner": "scanner-primary", "fingerprint": "7192d98c4fa94b74", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-790cf54ac40c2263", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in src/angarion/adapters/memory/storage.py:112"}, "properties": {"repobilityId": "707bb25697d4e486", "scanner": "scanner-primary", "fingerprint": "790cf54ac40c2263", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6f3bdba458c0e45f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/angarion/adapters/storage/engine.py:49"}, "properties": {"repobilityId": "a9fe88113c147ec9", "scanner": "scanner-primary", "fingerprint": "6f3bdba458c0e45f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eac0c7309ab7c0cc", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/angarion/adapters/storage/orm.py:233"}, "properties": {"repobilityId": "3b8459d83b6efedd", "scanner": "scanner-primary", "fingerprint": "eac0c7309ab7c0cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6a75817a86fed16", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in src/angarion/application/worker.py:236"}, "properties": {"repobilityId": "c4be1817cc7386bd", "scanner": "scanner-primary", "fingerprint": "e6a75817a86fed16", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-78600ee845ba241a", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in src/angarion/application/ingest.py:116"}, "properties": {"repobilityId": "520d0dd3924b3ab9", "scanner": "scanner-primary", "fingerprint": "78600ee845ba241a", "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": "bf2fd09b785962d9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "fbdb8adfd630afe2", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "abac66c02aaf4b6b", "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": "d1b27ad3615ef8cb", "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": "7c3e7745b2cdcce1", "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": "dd34dec6a8ad2e61", "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": "42c240de28611c29", "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": "573aa825402855f6", "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": "972f5f97293582ff", "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": "30d96480c496923c", "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": "462ebd77cb15adfb", "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": "cab40f82f38b2e47", "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": "8305c95ddaad01fa", "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": "db1e1f3df1d21023", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "2bdf6b04315fca5a", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "fdca8316293bb985", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "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": "cc69f6ef8d8c1c82", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "2dcd22b4f3fdff6b", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "c0f903738c2dfecd", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "52c50f3b11b594bb", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-ca4911c2c2398a02", "level": "error", "message": {"text": "FastAPI PUT `put_settings` without auth dependency \u2014 src/angarion/adapters/http/ops.py:259"}, "properties": {"repobilityId": "7553cd18ccfc73b6", "scanner": "scanner-primary", "fingerprint": "ca4911c2c2398a02", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/http/ops.py"}, "region": {"startLine": 259}}}]}, {"ruleId": "scanner-d2281d0726a393e7", "level": "error", "message": {"text": "FastAPI DELETE `delete_setting` without auth dependency \u2014 src/angarion/adapters/http/ops.py:274"}, "properties": {"repobilityId": "8f44d7c2dbb6e6e7", "scanner": "scanner-primary", "fingerprint": "d2281d0726a393e7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/http/ops.py"}, "region": {"startLine": 274}}}]}, {"ruleId": "scanner-8f457a0193c60f65", "level": "error", "message": {"text": "FastAPI POST `pause` without auth dependency \u2014 src/angarion/adapters/http/ops.py:289"}, "properties": {"repobilityId": "c979d1b8d06eb7c7", "scanner": "scanner-primary", "fingerprint": "8f457a0193c60f65", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/http/ops.py"}, "region": {"startLine": 289}}}]}, {"ruleId": "scanner-055aca760acbf3f9", "level": "error", "message": {"text": "FastAPI POST `resume` without auth dependency \u2014 src/angarion/adapters/http/ops.py:308"}, "properties": {"repobilityId": "a16cfe1e88003b22", "scanner": "scanner-primary", "fingerprint": "055aca760acbf3f9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/http/ops.py"}, "region": {"startLine": 308}}}]}, {"ruleId": "scanner-836c62ea86c65171", "level": "error", "message": {"text": "FastAPI POST `requeue` without auth dependency \u2014 src/angarion/adapters/http/ops.py:327"}, "properties": {"repobilityId": "21550d4551f160ca", "scanner": "scanner-primary", "fingerprint": "836c62ea86c65171", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/http/ops.py"}, "region": {"startLine": 327}}}]}, {"ruleId": "scanner-c221e7eafb58e62d", "level": "error", "message": {"text": "FastAPI POST `restart` without auth dependency \u2014 src/angarion/adapters/http/ops.py:339"}, "properties": {"repobilityId": "4e43f221f5cbd2a7", "scanner": "scanner-primary", "fingerprint": "c221e7eafb58e62d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/http/ops.py"}, "region": {"startLine": 339}}}]}, {"ruleId": "scanner-e25ca82f7f67a991", "level": "error", "message": {"text": "FastAPI POST `catchup` without auth dependency \u2014 src/angarion/adapters/http/ops.py:351"}, "properties": {"repobilityId": "628e553f4e602057", "scanner": "scanner-primary", "fingerprint": "e25ca82f7f67a991", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/angarion/adapters/http/ops.py"}, "region": {"startLine": 351}}}]}, {"ruleId": "scanner-cd8dc4599ec52a08", "level": "note", "message": {"text": "Unused endpoint: GET /stats"}, "properties": {"repobilityId": "ff604dc3505f765e", "scanner": "scanner-primary", "fingerprint": "cd8dc4599ec52a08", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f05febf481988bc5", "level": "note", "message": {"text": "Unused endpoint: GET /ui/ext"}, "properties": {"repobilityId": "a2373bb0c4ec1b2c", "scanner": "scanner-primary", "fingerprint": "f05febf481988bc5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b437172024d687ff", "level": "note", "message": {"text": "Unused endpoint: GET /diagnostics"}, "properties": {"repobilityId": "59a1c12c255c4e00", "scanner": "scanner-primary", "fingerprint": "b437172024d687ff", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-43269e4e79c2e69e", "level": "note", "message": {"text": "Unused endpoint: GET /events"}, "properties": {"repobilityId": "05674fdbfe30ab82", "scanner": "scanner-primary", "fingerprint": "43269e4e79c2e69e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-512ccb0fd0b230ba", "level": "note", "message": {"text": "Unused endpoint: GET /settings"}, "properties": {"repobilityId": "1edb39a5606730a7", "scanner": "scanner-primary", "fingerprint": "512ccb0fd0b230ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d9fbbfd361e91f1e", "level": "note", "message": {"text": "Unused endpoint: POST /settings"}, "properties": {"repobilityId": "fbfdec766cf01cbd", "scanner": "scanner-primary", "fingerprint": "d9fbbfd361e91f1e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69d26c2f8e2ba3a8", "level": "note", "message": {"text": "Unused endpoint: POST /settings/{key}/reset"}, "properties": {"repobilityId": "29fe482611d55cb8", "scanner": "scanner-primary", "fingerprint": "69d26c2f8e2ba3a8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0da42eb3f762b008", "level": "note", "message": {"text": "Unused endpoint: POST /pipelines/{pipeline}/pause"}, "properties": {"repobilityId": "edc03604c44f1a37", "scanner": "scanner-primary", "fingerprint": "0da42eb3f762b008", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e36970261528f7e1", "level": "note", "message": {"text": "Unused endpoint: POST /pipelines/{pipeline}/resume"}, "properties": {"repobilityId": "08c31ca1dbd3e401", "scanner": "scanner-primary", "fingerprint": "e36970261528f7e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cfea1130c34bf33b", "level": "note", "message": {"text": "Unused endpoint: POST /restart"}, "properties": {"repobilityId": "bbc1fe331d152c94", "scanner": "scanner-primary", "fingerprint": "cfea1130c34bf33b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-61e423dc028f1211", "level": "note", "message": {"text": "Unused endpoint: POST /catchup"}, "properties": {"repobilityId": "6367be78d84f3b72", "scanner": "scanner-primary", "fingerprint": "61e423dc028f1211", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d932bba6e7b5b573", "level": "note", "message": {"text": "Unused endpoint: GET /dlq"}, "properties": {"repobilityId": "edce184c38418327", "scanner": "scanner-primary", "fingerprint": "d932bba6e7b5b573", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4eb125dd78085840", "level": "note", "message": {"text": "Unused endpoint: POST /dlq/{uid}/requeue"}, "properties": {"repobilityId": "f88d189ec0b0eb62", "scanner": "scanner-primary", "fingerprint": "4eb125dd78085840", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cf2ed60cbbf2375", "level": "note", "message": {"text": "Unused endpoint: PUT /settings"}, "properties": {"repobilityId": "f922addaee54620f", "scanner": "scanner-primary", "fingerprint": "1cf2ed60cbbf2375", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1282963fa5c2d3b6", "level": "note", "message": {"text": "Unused endpoint: DELETE /settings/{key}"}, "properties": {"repobilityId": "b04ae99d0ac7630b", "scanner": "scanner-primary", "fingerprint": "1282963fa5c2d3b6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "2e8f8621bba8f432", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2748808021f259ec", "level": "note", "message": {"text": "Unused endpoint: GET /pipelines"}, "properties": {"repobilityId": "2474c4f545bb1580", "scanner": "scanner-primary", "fingerprint": "2748808021f259ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2b0702657af7457b", "level": "note", "message": {"text": "Unused endpoint: GET /fragments/pipelines"}, "properties": {"repobilityId": "7beccd674fd93007", "scanner": "scanner-primary", "fingerprint": "2b0702657af7457b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-127ac5c06955a4c3", "level": "note", "message": {"text": "Unused endpoint: GET /fragments/queue"}, "properties": {"repobilityId": "abafef675f8f0f4d", "scanner": "scanner-primary", "fingerprint": "127ac5c06955a4c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7956b96b0e5d48c5", "level": "note", "message": {"text": "Unused endpoint: GET /fragments/event-counts"}, "properties": {"repobilityId": "5397d96958a4320f", "scanner": "scanner-primary", "fingerprint": "7956b96b0e5d48c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33aa7fed607f9571", "level": "note", "message": {"text": "Unused endpoint: GET /fragments/cursors"}, "properties": {"repobilityId": "bc787c50f99c1cb6", "scanner": "scanner-primary", "fingerprint": "33aa7fed607f9571", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fc3d357f01600926", "level": "note", "message": {"text": "Unused endpoint: GET /fragments/events-table"}, "properties": {"repobilityId": "4c7a4127c5ff220c", "scanner": "scanner-primary", "fingerprint": "fc3d357f01600926", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "a0fce40ac53a7a7e", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-646905f54906a60a", "level": "note", "message": {"text": "Unused endpoint: PATCH /{user_id}"}, "properties": {"repobilityId": "fd2b4443b2b2049c", "scanner": "scanner-primary", "fingerprint": "646905f54906a60a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-55c93ee7e031a509", "level": "note", "message": {"text": "Unused endpoint: DELETE /{user_id}"}, "properties": {"repobilityId": "6a2b12903c6bad9e", "scanner": "scanner-primary", "fingerprint": "55c93ee7e031a509", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-304b6f2b403d93f7", "level": "note", "message": {"text": "Unused endpoint: POST /register"}, "properties": {"repobilityId": "8c5fa9107616bda9", "scanner": "scanner-primary", "fingerprint": "304b6f2b403d93f7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a4dfcad3eb1618a", "level": "note", "message": {"text": "Unused endpoint: GET /login"}, "properties": {"repobilityId": "e0179ea1c40a8957", "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": "fcb8e359544e775b", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5ca735a2e6e3646c", "level": "note", "message": {"text": "Unused endpoint: GET /logout"}, "properties": {"repobilityId": "592c44f5a99c8db3", "scanner": "scanner-primary", "fingerprint": "5ca735a2e6e3646c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cc9225ca1870d2b9", "level": "note", "message": {"text": "Unused endpoint: GET /register"}, "properties": {"repobilityId": "37c4ebc5ed02f92e", "scanner": "scanner-primary", "fingerprint": "cc9225ca1870d2b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-841e50bf821e4158", "level": "note", "message": {"text": "Unused endpoint: GET /users"}, "properties": {"repobilityId": "bce22f5a8e17c775", "scanner": "scanner-primary", "fingerprint": "841e50bf821e4158", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-86575157e656642a", "level": "note", "message": {"text": "Unused endpoint: POST /users/{user_id}/approve"}, "properties": {"repobilityId": "70ac4577f289392d", "scanner": "scanner-primary", "fingerprint": "86575157e656642a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-198ef79ffbc04112", "level": "note", "message": {"text": "Unused endpoint: POST /users/{user_id}/deactivate"}, "properties": {"repobilityId": "85a327ed72e30f7f", "scanner": "scanner-primary", "fingerprint": "198ef79ffbc04112", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-224a679af22fc8f3", "level": "note", "message": {"text": "Unused endpoint: POST /users/{user_id}/delete"}, "properties": {"repobilityId": "413d8db7927921a0", "scanner": "scanner-primary", "fingerprint": "224a679af22fc8f3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-59b0ab9ab930dd40", "level": "note", "message": {"text": "Unused endpoint: POST /users/create"}, "properties": {"repobilityId": "350cc4f7ec7f9fb0", "scanner": "scanner-primary", "fingerprint": "59b0ab9ab930dd40", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}