{"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-20e350515df2debe", "name": "Possibly dead Python function: restart_stack", "shortDescription": {"text": "Possibly dead Python function: restart_stack"}, "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-2d56bc3c4a5d4b09", "name": "Possibly dead Python function: host_power", "shortDescription": {"text": "Possibly dead Python function: host_power"}, "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-febd37986efba552", "name": "Possibly dead Python function: warmup", "shortDescription": {"text": "Possibly dead Python function: warmup"}, "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-fb92017b702333b6", "name": "Possibly dead Python function: handle_starttag", "shortDescription": {"text": "Possibly dead Python function: handle_starttag"}, "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-93aff5b1b33813c3", "name": "Possibly dead Python function: handle_endtag", "shortDescription": {"text": "Possibly dead Python function: handle_endtag"}, "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-c208a0db6b46f7b3", "name": "Possibly dead Python function: handle_data", "shortDescription": {"text": "Possibly dead Python function: handle_data"}, "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-d51dd8de5f47c87b", "name": "Possibly dead Python function: pipes", "shortDescription": {"text": "Possibly dead Python function: pipes"}, "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-79fdd90f943bd8c4", "name": "Possibly dead Python function: pipe", "shortDescription": {"text": "Possibly dead Python function: pipe"}, "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-c817062e6fb8e021", "name": "Possibly dead Python function: pipes", "shortDescription": {"text": "Possibly dead Python function: pipes"}, "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-83f10132ef460e45", "name": "Possibly dead Python function: pipe", "shortDescription": {"text": "Possibly dead Python function: pipe"}, "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-a273192c484d2e65", "name": "Possibly dead Python function: pipes", "shortDescription": {"text": "Possibly dead Python function: pipes"}, "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-630b0db57c6fa553", "name": "Possibly dead Python function: pipe", "shortDescription": {"text": "Possibly dead Python function: pipe"}, "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-15fb2da8ba47702b", "name": "Stray `console.log` in TS/JS \u2014 docs/gen_installationsanleitung.js:831", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_installationsanleitung.js:831"}, "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-982e9ea42f9cb48e", "name": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_dgx_spark.js:454", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_dgx_spark.js:454"}, "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-e5d55bcef928161d", "name": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_mono.js:346", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_mono.js:346"}, "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-3911fa32567f444b", "name": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht.js:496", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht.js:496"}, "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-bd94b491a89af0a9", "name": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_cocreation.js:427", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_cocreation.js:427"}, "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-144782ab557ef912", "name": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_integration.js:519", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_integration.js:519"}, "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-97471c4c05f75b76", "name": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_rollen.js:552", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_rollen.js:552"}, "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-f2ecf4be50125841", "name": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_social.js:517", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_social.js:517"}, "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-1ac6446248be3825", "name": "Privileged port 2 in use", "shortDescription": {"text": "Privileged port 2 in use"}, "fullDescription": {"text": "Port 2 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8e93b44d0cc79c27", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81192ad9b9f06766", "name": "Dockerfile runs as root: services/admin-service/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/admin-service/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6386e89dc2dd2af7", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-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-301fe1a556f23a42", "name": "Dockerfile runs as root: services/llm-service/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/llm-service/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2b9e0fb5141593f", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-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-498bc05ad55f3d8e", "name": "Dockerfile runs as root: services/api-gateway/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/api-gateway/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b351c775cf280d38", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-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-3970b41083290b8d", "name": "Dockerfile runs as root: services/rag-service/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/rag-service/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff53b4bbd86df298", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-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-e1bc0aa4eb280999", "name": "Dockerfile runs as root: services/content-service/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/content-service/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44fa03a1da7f59b8", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-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-f2598c8aec414e62", "name": "Insecure pattern 'direct_innerhtml_assignment' in services/api-gateway/src/static/admin/index.html:541", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in services/api-gateway/src/static/admin/index.html:541"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "9 tests / 81 src (ratio 0.11)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 43 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "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-a63b36a20cf94a34", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/setup_keycloak.py:179", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/setup_keycloak.py:179"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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:\nservices/llm-service/src/db.py:init_pool, services/api-gateway/src/db.py:init_pool, services/rag-service/src/db.py:init_pool, services/content-service/src/db.py:init_pool\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-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:\nservices/api-gateway/src/db.py:tenant_connection, services/content-service/src/db.py:tenant_connection\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-43095fd66f8e4af5", "name": "FastAPI POST `generate` without auth dependency \u2014 services/llm-service/src/main.py:43", "shortDescription": {"text": "FastAPI POST `generate` without auth dependency \u2014 services/llm-service/src/main.py:43"}, "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-1a12db073cbdfc0d", "name": "FastAPI POST `create_kb` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:60", "shortDescription": {"text": "FastAPI POST `create_kb` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:60"}, "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-fe3ab2c2ecf4b114", "name": "FastAPI PUT `set_kb_acl` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:90", "shortDescription": {"text": "FastAPI PUT `set_kb_acl` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:90"}, "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-2cdd5a8ad06117a1", "name": "FastAPI PUT `rename_kb` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:115", "shortDescription": {"text": "FastAPI PUT `rename_kb` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:115"}, "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-62ce190fb3f33e55", "name": "FastAPI DELETE `delete_kb` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:138", "shortDescription": {"text": "FastAPI DELETE `delete_kb` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:138"}, "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-64c0294b21850017", "name": "FastAPI POST `create_user` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:80", "shortDescription": {"text": "FastAPI POST `create_user` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:80"}, "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-bc2148e2bd6a853d", "name": "FastAPI PUT `set_roles` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:98", "shortDescription": {"text": "FastAPI PUT `set_roles` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:98"}, "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-2e9adbaedca83c80", "name": "FastAPI PATCH `set_enabled` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:119", "shortDescription": {"text": "FastAPI PATCH `set_enabled` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:119"}, "fullDescription": {"text": "`@router.patch` 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-2dee3a7eaefc4d68", "name": "FastAPI POST `reset_password` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:137", "shortDescription": {"text": "FastAPI POST `reset_password` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:137"}, "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-01c1d7b0a4ebf4ab", "name": "FastAPI PUT `update_model` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/models.py:86", "shortDescription": {"text": "FastAPI PUT `update_model` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/models.py:86"}, "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-4c83b34c242e8970", "name": "FastAPI PUT `set_user_models` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/models.py:126", "shortDescription": {"text": "FastAPI PUT `set_user_models` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/models.py:126"}, "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-d13a1e96f3718de9", "name": "FastAPI POST `chat` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/chat.py:19", "shortDescription": {"text": "FastAPI POST `chat` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/chat.py:19"}, "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-e6553219d8ef1181", "name": "FastAPI PUT `set_hostname` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:44", "shortDescription": {"text": "FastAPI PUT `set_hostname` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:44"}, "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-d32118d19b193a96", "name": "FastAPI PUT `set_apikeys` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:97", "shortDescription": {"text": "FastAPI PUT `set_apikeys` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:97"}, "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-fabedbf451e49b2f", "name": "FastAPI PUT `set_smtp` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:161", "shortDescription": {"text": "FastAPI PUT `set_smtp` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:161"}, "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-df0147eef17b2061", "name": "FastAPI POST `smtp_test` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:198", "shortDescription": {"text": "FastAPI POST `smtp_test` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:198"}, "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-158398c22f95bfd9", "name": "FastAPI POST `upload_document` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:34", "shortDescription": {"text": "FastAPI POST `upload_document` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:34"}, "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-1667e5fd6d71b2ff", "name": "FastAPI POST `bulk_documents` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:71", "shortDescription": {"text": "FastAPI POST `bulk_documents` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:71"}, "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-e2fdde7cbed0dcbd", "name": "FastAPI PATCH `update_document_acl` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:88", "shortDescription": {"text": "FastAPI PATCH `update_document_acl` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:88"}, "fullDescription": {"text": "`@router.patch` 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-e79b8c7bd5a7e7c5", "name": "FastAPI DELETE `delete_document` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:103", "shortDescription": {"text": "FastAPI DELETE `delete_document` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:103"}, "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-5883a1a0de8f4ffd", "name": "FastAPI POST `rag_chat` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:129", "shortDescription": {"text": "FastAPI POST `rag_chat` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:129"}, "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-5f7630190155211d", "name": "FastAPI POST `restart_services` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/system.py:112", "shortDescription": {"text": "FastAPI POST `restart_services` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/system.py:112"}, "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-11b1d54d1cae62fe", "name": "FastAPI POST `reboot_host` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/system.py:124", "shortDescription": {"text": "FastAPI POST `reboot_host` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/system.py:124"}, "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-1d81a2a6a50fc4e8", "name": "FastAPI POST `shutdown_host` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/system.py:135", "shortDescription": {"text": "FastAPI POST `shutdown_host` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/system.py:135"}, "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-daabd75943977b8e", "name": "FastAPI POST `query` without auth dependency \u2014 services/rag-service/src/api/v1/routes/query.py:42", "shortDescription": {"text": "FastAPI POST `query` without auth dependency \u2014 services/rag-service/src/api/v1/routes/query.py:42"}, "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-7578fc14952bde38", "name": "FastAPI POST `upload_document` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:143", "shortDescription": {"text": "FastAPI POST `upload_document` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:143"}, "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-c0d98e1fa7e8abcc", "name": "FastAPI POST `bulk_action` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:290", "shortDescription": {"text": "FastAPI POST `bulk_action` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:290"}, "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-a2474513eb73efa2", "name": "FastAPI PATCH `update_acl` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:360", "shortDescription": {"text": "FastAPI PATCH `update_acl` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:360"}, "fullDescription": {"text": "`@router.patch` 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-dc11889c80cd0953", "name": "FastAPI DELETE `delete_document` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:399", "shortDescription": {"text": "FastAPI DELETE `delete_document` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:399"}, "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-d309cb4f1bdaa779", "name": "FastAPI POST `create_draft` without auth dependency \u2014 services/content-service/src/api/v1/routes/drafts.py:72", "shortDescription": {"text": "FastAPI POST `create_draft` without auth dependency \u2014 services/content-service/src/api/v1/routes/drafts.py:72"}, "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-d49d09c83c88d7aa", "name": "FastAPI PUT `update_draft` without auth dependency \u2014 services/content-service/src/api/v1/routes/drafts.py:153", "shortDescription": {"text": "FastAPI PUT `update_draft` without auth dependency \u2014 services/content-service/src/api/v1/routes/drafts.py:153"}, "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-706e0f25dd17dfa6", "name": "FastAPI POST `transition_draft` without auth dependency \u2014 services/content-service/src/api/v1/routes/drafts.py:191", "shortDescription": {"text": "FastAPI POST `transition_draft` without auth dependency \u2014 services/content-service/src/api/v1/routes/drafts.py:191"}, "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-a436691337284d03", "name": "Unused endpoint: GET /api/v1/health", "shortDescription": {"text": "Unused endpoint: GET /api/v1/health"}, "fullDescription": {"text": "`services/admin-service/src/main.py` declares `GET /api/v1/health` 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-7a9c6af00e8496f8", "name": "Unused endpoint: POST /api/v1/generate", "shortDescription": {"text": "Unused endpoint: POST /api/v1/generate"}, "fullDescription": {"text": "`services/llm-service/src/main.py` declares `POST /api/v1/generate` 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-61cd4b6640013078", "name": "Unused endpoint: GET /admin/config.js", "shortDescription": {"text": "Unused endpoint: GET /admin/config.js"}, "fullDescription": {"text": "`services/api-gateway/src/main.py` declares `GET /admin/config.js` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-512aa553c8b130bf", "name": "Unused endpoint: GET /api/v1/public", "shortDescription": {"text": "Unused endpoint: GET /api/v1/public"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/kbs.py` declares `GET /api/v1/public` 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-04d6df2c4120c194", "name": "Unused endpoint: GET /api/v1/", "shortDescription": {"text": "Unused endpoint: GET /api/v1/"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/kbs.py` declares `GET /api/v1/` 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-379ebde7d53c0f5d", "name": "Unused endpoint: POST /api/v1/", "shortDescription": {"text": "Unused endpoint: POST /api/v1/"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/kbs.py` declares `POST /api/v1/` 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-e66e2cd0d9a0181d", "name": "Unused endpoint: PUT /api/v1/{kb_id}/acl", "shortDescription": {"text": "Unused endpoint: PUT /api/v1/{kb_id}/acl"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/kbs.py` declares `PUT /api/v1/{kb_id}/acl` 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-9e9f0e6900b4acc3", "name": "Unused endpoint: PUT /api/v1/{kb_id}", "shortDescription": {"text": "Unused endpoint: PUT /api/v1/{kb_id}"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/kbs.py` declares `PUT /api/v1/{kb_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-918c80547b554a38", "name": "Unused endpoint: DELETE /api/v1/{kb_id}", "shortDescription": {"text": "Unused endpoint: DELETE /api/v1/{kb_id}"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/kbs.py` declares `DELETE /api/v1/{kb_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-776c2efb8572f653", "name": "Unused endpoint: GET /api/v1/roles", "shortDescription": {"text": "Unused endpoint: GET /api/v1/roles"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/users.py` declares `GET /api/v1/roles` 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-287313a82bf30f60", "name": "Unused endpoint: PUT /api/v1/{user_id}/roles", "shortDescription": {"text": "Unused endpoint: PUT /api/v1/{user_id}/roles"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/users.py` declares `PUT /api/v1/{user_id}/roles` 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-03cf951fac2925be", "name": "Unused endpoint: PATCH /api/v1/{user_id}", "shortDescription": {"text": "Unused endpoint: PATCH /api/v1/{user_id}"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/users.py` declares `PATCH /api/v1/{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-4e0b93c41cfdd32a", "name": "Unused endpoint: POST /api/v1/{user_id}/reset-password", "shortDescription": {"text": "Unused endpoint: POST /api/v1/{user_id}/reset-password"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/users.py` declares `POST /api/v1/{user_id}/reset-password` 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-b1a7f7f4613b7d79", "name": "Unused endpoint: GET /api/v1/models", "shortDescription": {"text": "Unused endpoint: GET /api/v1/models"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/models.py` declares `GET /api/v1/models` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d6b98591699b26c", "name": "Unused endpoint: GET /api/v1/models/public", "shortDescription": {"text": "Unused endpoint: GET /api/v1/models/public"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/models.py` declares `GET /api/v1/models/public` 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-a1ae58c95fa296bd", "name": "Unused endpoint: GET /api/v1/models/admin", "shortDescription": {"text": "Unused endpoint: GET /api/v1/models/admin"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/models.py` declares `GET /api/v1/models/admin` 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-e703f60e05dad9c0", "name": "Unused endpoint: PUT /api/v1/models/{model_id}", "shortDescription": {"text": "Unused endpoint: PUT /api/v1/models/{model_id}"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/models.py` declares `PUT /api/v1/models/{model_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-e044e8dd67c3ae14", "name": "Unused endpoint: GET /api/v1/users/{user_id}/models", "shortDescription": {"text": "Unused endpoint: GET /api/v1/users/{user_id}/models"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/models.py` declares `GET /api/v1/users/{user_id}/models` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0951d07c99b25d75", "name": "Unused endpoint: PUT /api/v1/users/{user_id}/models", "shortDescription": {"text": "Unused endpoint: PUT /api/v1/users/{user_id}/models"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/models.py` declares `PUT /api/v1/users/{user_id}/models` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44d69b33c506b6c3", "name": "Unused endpoint: ANY /api/v1/{path:path}", "shortDescription": {"text": "Unused endpoint: ANY /api/v1/{path:path}"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/content.py` declares `ANY /api/v1/{path:path}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e351abd293f4c32", "name": "Unused endpoint: GET /api/v1/settings/hostname", "shortDescription": {"text": "Unused endpoint: GET /api/v1/settings/hostname"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/settings_routes.py` declares `GET /api/v1/settings/hostname` 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-1cb9a123b8d51b24", "name": "Unused endpoint: PUT /api/v1/settings/hostname", "shortDescription": {"text": "Unused endpoint: PUT /api/v1/settings/hostname"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/settings_routes.py` declares `PUT /api/v1/settings/hostname` 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-a6f2b1657b42711e", "name": "Unused endpoint: GET /api/v1/settings/apikeys", "shortDescription": {"text": "Unused endpoint: GET /api/v1/settings/apikeys"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/settings_routes.py` declares `GET /api/v1/settings/apikeys` 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-b9c5acedb3ff32a2", "name": "Unused endpoint: PUT /api/v1/settings/apikeys", "shortDescription": {"text": "Unused endpoint: PUT /api/v1/settings/apikeys"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/settings_routes.py` declares `PUT /api/v1/settings/apikeys` 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-abba3e1fd22f71ea", "name": "Unused endpoint: GET /api/v1/settings/smtp", "shortDescription": {"text": "Unused endpoint: GET /api/v1/settings/smtp"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/settings_routes.py` declares `GET /api/v1/settings/smtp` 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-ea0c0d5eade9fb8e", "name": "Unused endpoint: PUT /api/v1/settings/smtp", "shortDescription": {"text": "Unused endpoint: PUT /api/v1/settings/smtp"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/settings_routes.py` declares `PUT /api/v1/settings/smtp` 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-dd3aead9841361e4", "name": "Unused endpoint: POST /api/v1/settings/smtp/test", "shortDescription": {"text": "Unused endpoint: POST /api/v1/settings/smtp/test"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/settings_routes.py` declares `POST /api/v1/settings/smtp/test` 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-9f8729396a930e17", "name": "Unused endpoint: GET /api/v1/tls/check", "shortDescription": {"text": "Unused endpoint: GET /api/v1/tls/check"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/settings_routes.py` declares `GET /api/v1/tls/check` 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-63f13079ec09aa96", "name": "Unused endpoint: POST /api/v1/documents", "shortDescription": {"text": "Unused endpoint: POST /api/v1/documents"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/rag.py` declares `POST /api/v1/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-7bb1a2361d1163f7", "name": "Unused endpoint: GET /api/v1/documents", "shortDescription": {"text": "Unused endpoint: GET /api/v1/documents"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/rag.py` declares `GET /api/v1/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-e9a57a2c9dcd590d", "name": "Unused endpoint: POST /api/v1/documents/bulk", "shortDescription": {"text": "Unused endpoint: POST /api/v1/documents/bulk"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/rag.py` declares `POST /api/v1/documents/bulk` 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-1b0984fcd4e8372c", "name": "Unused endpoint: PATCH /api/v1/documents/{document_id}/acl", "shortDescription": {"text": "Unused endpoint: PATCH /api/v1/documents/{document_id}/acl"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/rag.py` declares `PATCH /api/v1/documents/{document_id}/acl` 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-c50b809abd812fdf", "name": "Unused endpoint: DELETE /api/v1/documents/{document_id}", "shortDescription": {"text": "Unused endpoint: DELETE /api/v1/documents/{document_id}"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/rag.py` declares `DELETE /api/v1/documents/{document_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-befc63c5d208456d", "name": "Unused endpoint: POST /api/v1/rag/chat", "shortDescription": {"text": "Unused endpoint: POST /api/v1/rag/chat"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/rag.py` declares `POST /api/v1/rag/chat` 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-e0055a89d5952f94", "name": "Unused endpoint: GET /api/v1/status", "shortDescription": {"text": "Unused endpoint: GET /api/v1/status"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/system.py` declares `GET /api/v1/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-7065cc8915a58291", "name": "Unused endpoint: POST /api/v1/restart-services", "shortDescription": {"text": "Unused endpoint: POST /api/v1/restart-services"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/system.py` declares `POST /api/v1/restart-services` 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-c22f553b311e2078", "name": "Unused endpoint: POST /api/v1/reboot", "shortDescription": {"text": "Unused endpoint: POST /api/v1/reboot"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/system.py` declares `POST /api/v1/reboot` 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-cb5a036c636233b9", "name": "Unused endpoint: POST /api/v1/shutdown", "shortDescription": {"text": "Unused endpoint: POST /api/v1/shutdown"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/system.py` declares `POST /api/v1/shutdown` 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-b56f40ecaadd672c", "name": "Unused endpoint: GET /api/v1/events", "shortDescription": {"text": "Unused endpoint: GET /api/v1/events"}, "fullDescription": {"text": "`services/api-gateway/src/api/v1/routes/system.py` declares `GET /api/v1/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-cf68b41c204abd9f", "name": "Unused endpoint: POST /api/v1/bulk", "shortDescription": {"text": "Unused endpoint: POST /api/v1/bulk"}, "fullDescription": {"text": "`services/rag-service/src/api/v1/routes/documents.py` declares `POST /api/v1/bulk` 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-df01090af74d2702", "name": "Unused endpoint: PATCH /api/v1/{document_id}/acl", "shortDescription": {"text": "Unused endpoint: PATCH /api/v1/{document_id}/acl"}, "fullDescription": {"text": "`services/rag-service/src/api/v1/routes/documents.py` declares `PATCH /api/v1/{document_id}/acl` 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-06c80c22a9ab1705", "name": "Unused endpoint: DELETE /api/v1/{document_id}", "shortDescription": {"text": "Unused endpoint: DELETE /api/v1/{document_id}"}, "fullDescription": {"text": "`services/rag-service/src/api/v1/routes/documents.py` declares `DELETE /api/v1/{document_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-48225b870972f510", "name": "Unused endpoint: GET /api/v1/channels", "shortDescription": {"text": "Unused endpoint: GET /api/v1/channels"}, "fullDescription": {"text": "`services/content-service/src/api/v1/routes/drafts.py` declares `GET /api/v1/channels` 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-a56813cf4f24a3ba", "name": "Unused endpoint: GET /api/v1/{draft_id}", "shortDescription": {"text": "Unused endpoint: GET /api/v1/{draft_id}"}, "fullDescription": {"text": "`services/content-service/src/api/v1/routes/drafts.py` declares `GET /api/v1/{draft_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-50371dd5ec127233", "name": "Unused endpoint: PUT /api/v1/{draft_id}", "shortDescription": {"text": "Unused endpoint: PUT /api/v1/{draft_id}"}, "fullDescription": {"text": "`services/content-service/src/api/v1/routes/drafts.py` declares `PUT /api/v1/{draft_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-01db03742a43e47d", "name": "Unused endpoint: POST /api/v1/{draft_id}/transition", "shortDescription": {"text": "Unused endpoint: POST /api/v1/{draft_id}/transition"}, "fullDescription": {"text": "`services/content-service/src/api/v1/routes/drafts.py` declares `POST /api/v1/{draft_id}/transition` 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/20601"}, "properties": {"repository": "sventruderung/drk-mv-ki-plattform", "repoUrl": "https://github.com/sventruderung/drk-mv-ki-plattform", "branch": "main"}, "results": [{"ruleId": "scanner-20e350515df2debe", "level": "note", "message": {"text": "Possibly dead Python function: restart_stack"}, "properties": {"repobilityId": "c26c224d125af586", "scanner": "scanner-primary", "fingerprint": "20e350515df2debe", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/docker_ctl.py:35"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2d56bc3c4a5d4b09", "level": "note", "message": {"text": "Possibly dead Python function: host_power"}, "properties": {"repobilityId": "a2f9ba685ae9d77f", "scanner": "scanner-primary", "fingerprint": "2d56bc3c4a5d4b09", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/docker_ctl.py:52"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-febd37986efba552", "level": "note", "message": {"text": "Possibly dead Python function: warmup"}, "properties": {"repobilityId": "bd781fc7723196a5", "scanner": "scanner-primary", "fingerprint": "febd37986efba552", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/rag-service/src/core/rerank.py:26"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fb92017b702333b6", "level": "note", "message": {"text": "Possibly dead Python function: handle_starttag"}, "properties": {"repobilityId": "3bf216d149959ebf", "scanner": "scanner-primary", "fingerprint": "fb92017b702333b6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/rag-service/src/core/extract.py:350"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-93aff5b1b33813c3", "level": "note", "message": {"text": "Possibly dead Python function: handle_endtag"}, "properties": {"repobilityId": "7eb6f3decafc1766", "scanner": "scanner-primary", "fingerprint": "93aff5b1b33813c3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/rag-service/src/core/extract.py:354"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c208a0db6b46f7b3", "level": "note", "message": {"text": "Possibly dead Python function: handle_data"}, "properties": {"repobilityId": "3a673a278f4fc1e6", "scanner": "scanner-primary", "fingerprint": "c208a0db6b46f7b3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/rag-service/src/core/extract.py:358"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d51dd8de5f47c87b", "level": "note", "message": {"text": "Possibly dead Python function: pipes"}, "properties": {"repobilityId": "bb78e14017752b7d", "scanner": "scanner-primary", "fingerprint": "d51dd8de5f47c87b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infra/openwebui/pipes/drk_content_pipe.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-79fdd90f943bd8c4", "level": "note", "message": {"text": "Possibly dead Python function: pipe"}, "properties": {"repobilityId": "898ed0e84e7d1cd8", "scanner": "scanner-primary", "fingerprint": "79fdd90f943bd8c4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infra/openwebui/pipes/drk_content_pipe.py:52"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c817062e6fb8e021", "level": "note", "message": {"text": "Possibly dead Python function: pipes"}, "properties": {"repobilityId": "bb78e14017752b7d", "scanner": "scanner-primary", "fingerprint": "c817062e6fb8e021", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infra/openwebui/pipes/drk_rag_pipe.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-83f10132ef460e45", "level": "note", "message": {"text": "Possibly dead Python function: pipe"}, "properties": {"repobilityId": "898ed0e84e7d1cd8", "scanner": "scanner-primary", "fingerprint": "83f10132ef460e45", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infra/openwebui/pipes/drk_rag_pipe.py:60"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a273192c484d2e65", "level": "note", "message": {"text": "Possibly dead Python function: pipes"}, "properties": {"repobilityId": "bb78e14017752b7d", "scanner": "scanner-primary", "fingerprint": "a273192c484d2e65", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infra/openwebui/pipes/drk_models_pipe.py:30"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-630b0db57c6fa553", "level": "note", "message": {"text": "Possibly dead Python function: pipe"}, "properties": {"repobilityId": "898ed0e84e7d1cd8", "scanner": "scanner-primary", "fingerprint": "630b0db57c6fa553", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infra/openwebui/pipes/drk_models_pipe.py:66"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-15fb2da8ba47702b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_installationsanleitung.js:831"}, "properties": {"repobilityId": "eec6cf12d3be9b8f", "scanner": "scanner-primary", "fingerprint": "15fb2da8ba47702b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-982e9ea42f9cb48e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_dgx_spark.js:454"}, "properties": {"repobilityId": "84cb61300329d2f8", "scanner": "scanner-primary", "fingerprint": "982e9ea42f9cb48e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5d55bcef928161d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_mono.js:346"}, "properties": {"repobilityId": "e1989577c349ccd7", "scanner": "scanner-primary", "fingerprint": "e5d55bcef928161d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3911fa32567f444b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht.js:496"}, "properties": {"repobilityId": "102b35f096d7a714", "scanner": "scanner-primary", "fingerprint": "3911fa32567f444b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd94b491a89af0a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_cocreation.js:427"}, "properties": {"repobilityId": "1c5eb2a9552dc0f5", "scanner": "scanner-primary", "fingerprint": "bd94b491a89af0a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-144782ab557ef912", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_integration.js:519"}, "properties": {"repobilityId": "04d44f81f1c5e6ae", "scanner": "scanner-primary", "fingerprint": "144782ab557ef912", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-97471c4c05f75b76", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_rollen.js:552"}, "properties": {"repobilityId": "8dda7742ba07ee82", "scanner": "scanner-primary", "fingerprint": "97471c4c05f75b76", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2ecf4be50125841", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/gen_systemuebersicht_social.js:517"}, "properties": {"repobilityId": "7bf5ac4c40c8ba0c", "scanner": "scanner-primary", "fingerprint": "f2ecf4be50125841", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ac6446248be3825", "level": "warning", "message": {"text": "Privileged port 2 in use"}, "properties": {"repobilityId": "755b04866010e843", "scanner": "scanner-primary", "fingerprint": "1ac6446248be3825", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/backup.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8e93b44d0cc79c27", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "8e93b44d0cc79c27", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/backup.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-81192ad9b9f06766", "level": "warning", "message": {"text": "Dockerfile runs as root: services/admin-service/Dockerfile"}, "properties": {"repobilityId": "39392e939b30c7b0", "scanner": "scanner-primary", "fingerprint": "81192ad9b9f06766", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-6386e89dc2dd2af7", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "965b6e089c0af2cc", "scanner": "scanner-primary", "fingerprint": "6386e89dc2dd2af7", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/admin-service/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-301fe1a556f23a42", "level": "warning", "message": {"text": "Dockerfile runs as root: services/llm-service/Dockerfile"}, "properties": {"repobilityId": "3af0bd5cdbbe92ca", "scanner": "scanner-primary", "fingerprint": "301fe1a556f23a42", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-e2b9e0fb5141593f", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "93a5ad0e303367e6", "scanner": "scanner-primary", "fingerprint": "e2b9e0fb5141593f", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/llm-service/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-498bc05ad55f3d8e", "level": "warning", "message": {"text": "Dockerfile runs as root: services/api-gateway/Dockerfile"}, "properties": {"repobilityId": "f138e3c59d9c722d", "scanner": "scanner-primary", "fingerprint": "498bc05ad55f3d8e", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-b351c775cf280d38", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "b9b2e9347e21f282", "scanner": "scanner-primary", "fingerprint": "b351c775cf280d38", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-3970b41083290b8d", "level": "warning", "message": {"text": "Dockerfile runs as root: services/rag-service/Dockerfile"}, "properties": {"repobilityId": "90d5761bd4a55019", "scanner": "scanner-primary", "fingerprint": "3970b41083290b8d", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-ff53b4bbd86df298", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "a12e36e02c567323", "scanner": "scanner-primary", "fingerprint": "ff53b4bbd86df298", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/rag-service/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-e1bc0aa4eb280999", "level": "warning", "message": {"text": "Dockerfile runs as root: services/content-service/Dockerfile"}, "properties": {"repobilityId": "a67ff74dc5522605", "scanner": "scanner-primary", "fingerprint": "e1bc0aa4eb280999", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-44fa03a1da7f59b8", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "ab988757ced1e8de", "scanner": "scanner-primary", "fingerprint": "44fa03a1da7f59b8", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/content-service/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-f2598c8aec414e62", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in services/api-gateway/src/static/admin/index.html:541"}, "properties": {"repobilityId": "a85ca12a594638da", "scanner": "scanner-primary", "fingerprint": "f2598c8aec414e62", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/static/admin/index.html"}, "region": {"startLine": 541}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "4894a57523fadd81", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "779bd1c99bb1df4a", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "d5adeab0f55254b2", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "2b3872509340ed43", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "35e189cd00ff3457", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "4a8713b389ab4fe0", "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": "46379e925bdf00f3", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-a63b36a20cf94a34", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/setup_keycloak.py:179"}, "properties": {"repobilityId": "623ae3bd08c9dddf", "scanner": "scanner-primary", "fingerprint": "a63b36a20cf94a34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "3a5831dc4c47b245", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "c359092c3f9df6e2", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "973f1697f521623c", "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": "b2fce0e571e758e3", "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": "3c3e00d5ab2ab2f4", "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": "a4418ce3cc7c8840", "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": "32bfdbf7f5c892a8", "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": "5fd3cdea97a88e92", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-43095fd66f8e4af5", "level": "error", "message": {"text": "FastAPI POST `generate` without auth dependency \u2014 services/llm-service/src/main.py:43"}, "properties": {"repobilityId": "3b5edab1b16f002c", "scanner": "scanner-primary", "fingerprint": "43095fd66f8e4af5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/llm-service/src/main.py"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-1a12db073cbdfc0d", "level": "error", "message": {"text": "FastAPI POST `create_kb` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:60"}, "properties": {"repobilityId": "ee93f340617656e0", "scanner": "scanner-primary", "fingerprint": "1a12db073cbdfc0d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/kbs.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-fe3ab2c2ecf4b114", "level": "error", "message": {"text": "FastAPI PUT `set_kb_acl` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:90"}, "properties": {"repobilityId": "ca1228cdd9ae0f7e", "scanner": "scanner-primary", "fingerprint": "fe3ab2c2ecf4b114", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/kbs.py"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-2cdd5a8ad06117a1", "level": "error", "message": {"text": "FastAPI PUT `rename_kb` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:115"}, "properties": {"repobilityId": "5c9f59dba15ba528", "scanner": "scanner-primary", "fingerprint": "2cdd5a8ad06117a1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/kbs.py"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-62ce190fb3f33e55", "level": "error", "message": {"text": "FastAPI DELETE `delete_kb` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/kbs.py:138"}, "properties": {"repobilityId": "4fcca37608039672", "scanner": "scanner-primary", "fingerprint": "62ce190fb3f33e55", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/kbs.py"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-64c0294b21850017", "level": "error", "message": {"text": "FastAPI POST `create_user` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:80"}, "properties": {"repobilityId": "f3930fd4d0cfa375", "scanner": "scanner-primary", "fingerprint": "64c0294b21850017", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/users.py"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-bc2148e2bd6a853d", "level": "error", "message": {"text": "FastAPI PUT `set_roles` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:98"}, "properties": {"repobilityId": "f11ade5ce2efbe08", "scanner": "scanner-primary", "fingerprint": "bc2148e2bd6a853d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/users.py"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-2e9adbaedca83c80", "level": "error", "message": {"text": "FastAPI PATCH `set_enabled` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:119"}, "properties": {"repobilityId": "98de2a1deaa7fb89", "scanner": "scanner-primary", "fingerprint": "2e9adbaedca83c80", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/users.py"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-2dee3a7eaefc4d68", "level": "error", "message": {"text": "FastAPI POST `reset_password` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/users.py:137"}, "properties": {"repobilityId": "665af6d4edb5dfe0", "scanner": "scanner-primary", "fingerprint": "2dee3a7eaefc4d68", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/users.py"}, "region": {"startLine": 137}}}]}, {"ruleId": "scanner-01c1d7b0a4ebf4ab", "level": "error", "message": {"text": "FastAPI PUT `update_model` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/models.py:86"}, "properties": {"repobilityId": "eca1c8c4208c7cc9", "scanner": "scanner-primary", "fingerprint": "01c1d7b0a4ebf4ab", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/models.py"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-4c83b34c242e8970", "level": "error", "message": {"text": "FastAPI PUT `set_user_models` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/models.py:126"}, "properties": {"repobilityId": "5370c741fe6ca249", "scanner": "scanner-primary", "fingerprint": "4c83b34c242e8970", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/models.py"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-d13a1e96f3718de9", "level": "error", "message": {"text": "FastAPI POST `chat` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/chat.py:19"}, "properties": {"repobilityId": "bfe41ebe9ddd4548", "scanner": "scanner-primary", "fingerprint": "d13a1e96f3718de9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/chat.py"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-e6553219d8ef1181", "level": "error", "message": {"text": "FastAPI PUT `set_hostname` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:44"}, "properties": {"repobilityId": "fb04f85bc7bcee46", "scanner": "scanner-primary", "fingerprint": "e6553219d8ef1181", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/settings_routes.py"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-d32118d19b193a96", "level": "error", "message": {"text": "FastAPI PUT `set_apikeys` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:97"}, "properties": {"repobilityId": "5cf7573edf094386", "scanner": "scanner-primary", "fingerprint": "d32118d19b193a96", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/settings_routes.py"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-fabedbf451e49b2f", "level": "error", "message": {"text": "FastAPI PUT `set_smtp` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:161"}, "properties": {"repobilityId": "bf74591951fd8d2d", "scanner": "scanner-primary", "fingerprint": "fabedbf451e49b2f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/settings_routes.py"}, "region": {"startLine": 161}}}]}, {"ruleId": "scanner-df0147eef17b2061", "level": "error", "message": {"text": "FastAPI POST `smtp_test` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/settings_routes.py:198"}, "properties": {"repobilityId": "71a0cbe768ed6928", "scanner": "scanner-primary", "fingerprint": "df0147eef17b2061", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/settings_routes.py"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-158398c22f95bfd9", "level": "error", "message": {"text": "FastAPI POST `upload_document` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:34"}, "properties": {"repobilityId": "bb24ecbe99bb3dca", "scanner": "scanner-primary", "fingerprint": "158398c22f95bfd9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/rag.py"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-1667e5fd6d71b2ff", "level": "error", "message": {"text": "FastAPI POST `bulk_documents` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:71"}, "properties": {"repobilityId": "bb24a6ca80181af6", "scanner": "scanner-primary", "fingerprint": "1667e5fd6d71b2ff", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/rag.py"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-e2fdde7cbed0dcbd", "level": "error", "message": {"text": "FastAPI PATCH `update_document_acl` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:88"}, "properties": {"repobilityId": "1555976f0a25af34", "scanner": "scanner-primary", "fingerprint": "e2fdde7cbed0dcbd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/rag.py"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-e79b8c7bd5a7e7c5", "level": "error", "message": {"text": "FastAPI DELETE `delete_document` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:103"}, "properties": {"repobilityId": "0f9d551bab24ece3", "scanner": "scanner-primary", "fingerprint": "e79b8c7bd5a7e7c5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/rag.py"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-5883a1a0de8f4ffd", "level": "error", "message": {"text": "FastAPI POST `rag_chat` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/rag.py:129"}, "properties": {"repobilityId": "8716abc254eceb01", "scanner": "scanner-primary", "fingerprint": "5883a1a0de8f4ffd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/rag.py"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-5f7630190155211d", "level": "error", "message": {"text": "FastAPI POST `restart_services` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/system.py:112"}, "properties": {"repobilityId": "82dde9363ef0bde9", "scanner": "scanner-primary", "fingerprint": "5f7630190155211d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/system.py"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-11b1d54d1cae62fe", "level": "error", "message": {"text": "FastAPI POST `reboot_host` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/system.py:124"}, "properties": {"repobilityId": "47598b75fc78af45", "scanner": "scanner-primary", "fingerprint": "11b1d54d1cae62fe", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/system.py"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-1d81a2a6a50fc4e8", "level": "error", "message": {"text": "FastAPI POST `shutdown_host` without auth dependency \u2014 services/api-gateway/src/api/v1/routes/system.py:135"}, "properties": {"repobilityId": "9ded2587047643c6", "scanner": "scanner-primary", "fingerprint": "1d81a2a6a50fc4e8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api-gateway/src/api/v1/routes/system.py"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-daabd75943977b8e", "level": "error", "message": {"text": "FastAPI POST `query` without auth dependency \u2014 services/rag-service/src/api/v1/routes/query.py:42"}, "properties": {"repobilityId": "8d0559419306ef7e", "scanner": "scanner-primary", "fingerprint": "daabd75943977b8e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/rag-service/src/api/v1/routes/query.py"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-7578fc14952bde38", "level": "error", "message": {"text": "FastAPI POST `upload_document` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:143"}, "properties": {"repobilityId": "91de15e67b31ba7f", "scanner": "scanner-primary", "fingerprint": "7578fc14952bde38", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/rag-service/src/api/v1/routes/documents.py"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-c0d98e1fa7e8abcc", "level": "error", "message": {"text": "FastAPI POST `bulk_action` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:290"}, "properties": {"repobilityId": "1bf5e3d3f535f366", "scanner": "scanner-primary", "fingerprint": "c0d98e1fa7e8abcc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/rag-service/src/api/v1/routes/documents.py"}, "region": {"startLine": 290}}}]}, {"ruleId": "scanner-a2474513eb73efa2", "level": "error", "message": {"text": "FastAPI PATCH `update_acl` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:360"}, "properties": {"repobilityId": "e9013415939d81ea", "scanner": "scanner-primary", "fingerprint": "a2474513eb73efa2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/rag-service/src/api/v1/routes/documents.py"}, "region": {"startLine": 360}}}]}, {"ruleId": "scanner-dc11889c80cd0953", "level": "error", "message": {"text": "FastAPI DELETE `delete_document` without auth dependency \u2014 services/rag-service/src/api/v1/routes/documents.py:399"}, "properties": {"repobilityId": "34d396163281d7a1", "scanner": "scanner-primary", "fingerprint": "dc11889c80cd0953", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/rag-service/src/api/v1/routes/documents.py"}, "region": {"startLine": 399}}}]}, {"ruleId": "scanner-d309cb4f1bdaa779", "level": "error", "message": {"text": "FastAPI POST `create_draft` without auth dependency \u2014 services/content-service/src/api/v1/routes/drafts.py:72"}, "properties": {"repobilityId": "4d0b8d13af55604e", "scanner": "scanner-primary", "fingerprint": "d309cb4f1bdaa779", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/content-service/src/api/v1/routes/drafts.py"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-d49d09c83c88d7aa", "level": "error", "message": {"text": "FastAPI PUT `update_draft` without auth dependency \u2014 services/content-service/src/api/v1/routes/drafts.py:153"}, "properties": {"repobilityId": "de098b2649470c88", "scanner": "scanner-primary", "fingerprint": "d49d09c83c88d7aa", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/content-service/src/api/v1/routes/drafts.py"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-706e0f25dd17dfa6", "level": "error", "message": {"text": "FastAPI POST `transition_draft` without auth dependency \u2014 services/content-service/src/api/v1/routes/drafts.py:191"}, "properties": {"repobilityId": "3d2d8e0ddffa8327", "scanner": "scanner-primary", "fingerprint": "706e0f25dd17dfa6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/content-service/src/api/v1/routes/drafts.py"}, "region": {"startLine": 191}}}]}, {"ruleId": "scanner-a436691337284d03", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/health"}, "properties": {"repobilityId": "133679528690e287", "scanner": "scanner-primary", "fingerprint": "a436691337284d03", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a9c6af00e8496f8", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/generate"}, "properties": {"repobilityId": "68a73dbc83e7cb25", "scanner": "scanner-primary", "fingerprint": "7a9c6af00e8496f8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-61cd4b6640013078", "level": "note", "message": {"text": "Unused endpoint: GET /admin/config.js"}, "properties": {"repobilityId": "2986f244f1d61078", "scanner": "scanner-primary", "fingerprint": "61cd4b6640013078", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-512aa553c8b130bf", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/public"}, "properties": {"repobilityId": "ddb8cab6aa85980c", "scanner": "scanner-primary", "fingerprint": "512aa553c8b130bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-04d6df2c4120c194", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/"}, "properties": {"repobilityId": "d02790fcac21dee4", "scanner": "scanner-primary", "fingerprint": "04d6df2c4120c194", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-379ebde7d53c0f5d", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/"}, "properties": {"repobilityId": "a81e8828a1c61e25", "scanner": "scanner-primary", "fingerprint": "379ebde7d53c0f5d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e66e2cd0d9a0181d", "level": "note", "message": {"text": "Unused endpoint: PUT /api/v1/{kb_id}/acl"}, "properties": {"repobilityId": "409f3a7ab179108c", "scanner": "scanner-primary", "fingerprint": "e66e2cd0d9a0181d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e9f0e6900b4acc3", "level": "note", "message": {"text": "Unused endpoint: PUT /api/v1/{kb_id}"}, "properties": {"repobilityId": "6f9e1ddc5eadb15f", "scanner": "scanner-primary", "fingerprint": "9e9f0e6900b4acc3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-918c80547b554a38", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/v1/{kb_id}"}, "properties": {"repobilityId": "82cdf3d52adacefe", "scanner": "scanner-primary", "fingerprint": "918c80547b554a38", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-776c2efb8572f653", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/roles"}, "properties": {"repobilityId": "8044153d96695fa1", "scanner": "scanner-primary", "fingerprint": "776c2efb8572f653", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-287313a82bf30f60", "level": "note", "message": {"text": "Unused endpoint: PUT /api/v1/{user_id}/roles"}, "properties": {"repobilityId": "fac5c57c1771d6d6", "scanner": "scanner-primary", "fingerprint": "287313a82bf30f60", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-03cf951fac2925be", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/v1/{user_id}"}, "properties": {"repobilityId": "12c96863c244eba0", "scanner": "scanner-primary", "fingerprint": "03cf951fac2925be", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4e0b93c41cfdd32a", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/{user_id}/reset-password"}, "properties": {"repobilityId": "c2da5d90c4000bca", "scanner": "scanner-primary", "fingerprint": "4e0b93c41cfdd32a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1a7f7f4613b7d79", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/models"}, "properties": {"repobilityId": "b8f0a25e1f52e320", "scanner": "scanner-primary", "fingerprint": "b1a7f7f4613b7d79", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d6b98591699b26c", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/models/public"}, "properties": {"repobilityId": "21d91029be7c9c39", "scanner": "scanner-primary", "fingerprint": "9d6b98591699b26c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a1ae58c95fa296bd", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/models/admin"}, "properties": {"repobilityId": "7d53305fe3efb4a7", "scanner": "scanner-primary", "fingerprint": "a1ae58c95fa296bd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e703f60e05dad9c0", "level": "note", "message": {"text": "Unused endpoint: PUT /api/v1/models/{model_id}"}, "properties": {"repobilityId": "b1436bb68449546e", "scanner": "scanner-primary", "fingerprint": "e703f60e05dad9c0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e044e8dd67c3ae14", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/users/{user_id}/models"}, "properties": {"repobilityId": "75e24d40f68b2963", "scanner": "scanner-primary", "fingerprint": "e044e8dd67c3ae14", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0951d07c99b25d75", "level": "note", "message": {"text": "Unused endpoint: PUT /api/v1/users/{user_id}/models"}, "properties": {"repobilityId": "e24cb5b2436ac6eb", "scanner": "scanner-primary", "fingerprint": "0951d07c99b25d75", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-44d69b33c506b6c3", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v1/{path:path}"}, "properties": {"repobilityId": "91c9b92dbba249a5", "scanner": "scanner-primary", "fingerprint": "44d69b33c506b6c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e351abd293f4c32", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/settings/hostname"}, "properties": {"repobilityId": "0ce37d12970d210f", "scanner": "scanner-primary", "fingerprint": "2e351abd293f4c32", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cb9a123b8d51b24", "level": "note", "message": {"text": "Unused endpoint: PUT /api/v1/settings/hostname"}, "properties": {"repobilityId": "89a0c9a5d63df8a7", "scanner": "scanner-primary", "fingerprint": "1cb9a123b8d51b24", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6f2b1657b42711e", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/settings/apikeys"}, "properties": {"repobilityId": "e0e2cd0116959764", "scanner": "scanner-primary", "fingerprint": "a6f2b1657b42711e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9c5acedb3ff32a2", "level": "note", "message": {"text": "Unused endpoint: PUT /api/v1/settings/apikeys"}, "properties": {"repobilityId": "d5ee9c73164683aa", "scanner": "scanner-primary", "fingerprint": "b9c5acedb3ff32a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abba3e1fd22f71ea", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/settings/smtp"}, "properties": {"repobilityId": "38295ed0b71cb33d", "scanner": "scanner-primary", "fingerprint": "abba3e1fd22f71ea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea0c0d5eade9fb8e", "level": "note", "message": {"text": "Unused endpoint: PUT /api/v1/settings/smtp"}, "properties": {"repobilityId": "d9c9b6092825d4fe", "scanner": "scanner-primary", "fingerprint": "ea0c0d5eade9fb8e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd3aead9841361e4", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/settings/smtp/test"}, "properties": {"repobilityId": "92dc56ed32d2050c", "scanner": "scanner-primary", "fingerprint": "dd3aead9841361e4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9f8729396a930e17", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/tls/check"}, "properties": {"repobilityId": "cd79f15ed7bfd87a", "scanner": "scanner-primary", "fingerprint": "9f8729396a930e17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-63f13079ec09aa96", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/documents"}, "properties": {"repobilityId": "49ffbbb038aeef32", "scanner": "scanner-primary", "fingerprint": "63f13079ec09aa96", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7bb1a2361d1163f7", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/documents"}, "properties": {"repobilityId": "1badf0e1bbbbfedd", "scanner": "scanner-primary", "fingerprint": "7bb1a2361d1163f7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e9a57a2c9dcd590d", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/documents/bulk"}, "properties": {"repobilityId": "8ee9e0be9510a9b4", "scanner": "scanner-primary", "fingerprint": "e9a57a2c9dcd590d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b0984fcd4e8372c", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/v1/documents/{document_id}/acl"}, "properties": {"repobilityId": "bba8aba85c674e85", "scanner": "scanner-primary", "fingerprint": "1b0984fcd4e8372c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c50b809abd812fdf", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/v1/documents/{document_id}"}, "properties": {"repobilityId": "9e03a0bc20457f27", "scanner": "scanner-primary", "fingerprint": "c50b809abd812fdf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-befc63c5d208456d", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/rag/chat"}, "properties": {"repobilityId": "e0573459c4181a58", "scanner": "scanner-primary", "fingerprint": "befc63c5d208456d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e0055a89d5952f94", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/status"}, "properties": {"repobilityId": "5cbc6a4d834c207e", "scanner": "scanner-primary", "fingerprint": "e0055a89d5952f94", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7065cc8915a58291", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/restart-services"}, "properties": {"repobilityId": "10aaf4573f29ed45", "scanner": "scanner-primary", "fingerprint": "7065cc8915a58291", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c22f553b311e2078", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/reboot"}, "properties": {"repobilityId": "4653647743b86817", "scanner": "scanner-primary", "fingerprint": "c22f553b311e2078", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb5a036c636233b9", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/shutdown"}, "properties": {"repobilityId": "c27042301aa7429f", "scanner": "scanner-primary", "fingerprint": "cb5a036c636233b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b56f40ecaadd672c", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/events"}, "properties": {"repobilityId": "1e7ba70930293238", "scanner": "scanner-primary", "fingerprint": "b56f40ecaadd672c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf68b41c204abd9f", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/bulk"}, "properties": {"repobilityId": "8576f32941b88bad", "scanner": "scanner-primary", "fingerprint": "cf68b41c204abd9f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-df01090af74d2702", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/v1/{document_id}/acl"}, "properties": {"repobilityId": "c291835753f58d05", "scanner": "scanner-primary", "fingerprint": "df01090af74d2702", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-06c80c22a9ab1705", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/v1/{document_id}"}, "properties": {"repobilityId": "2287dc842cc649d0", "scanner": "scanner-primary", "fingerprint": "06c80c22a9ab1705", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48225b870972f510", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/channels"}, "properties": {"repobilityId": "0d26b53b715bf898", "scanner": "scanner-primary", "fingerprint": "48225b870972f510", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a56813cf4f24a3ba", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/{draft_id}"}, "properties": {"repobilityId": "d648183082ab5143", "scanner": "scanner-primary", "fingerprint": "a56813cf4f24a3ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-50371dd5ec127233", "level": "note", "message": {"text": "Unused endpoint: PUT /api/v1/{draft_id}"}, "properties": {"repobilityId": "b7d1ad2220bec33c", "scanner": "scanner-primary", "fingerprint": "50371dd5ec127233", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-01db03742a43e47d", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/{draft_id}/transition"}, "properties": {"repobilityId": "9ea99e37e55e1e85", "scanner": "scanner-primary", "fingerprint": "01db03742a43e47d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}