{"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-acb738993684d32a", "name": "Possibly dead Python function: run_holehe", "shortDescription": {"text": "Possibly dead Python function: run_holehe"}, "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-db1a728774c5b471", "name": "Possibly dead Python function: write_credential", "shortDescription": {"text": "Possibly dead Python function: write_credential"}, "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-5bc959f44332cdd4", "name": "Possibly dead Python function: embed", "shortDescription": {"text": "Possibly dead Python function: embed"}, "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-11bd91793369f6a7", "name": "Possibly dead Python function: require_api_key", "shortDescription": {"text": "Possibly dead Python function: require_api_key"}, "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-13f130c3d292f2fa", "name": "Possibly dead Python function: list_silver_specs", "shortDescription": {"text": "Possibly dead Python function: list_silver_specs"}, "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-a0b4575fd645dae6", "name": "Possibly dead Python function: run_gold_bootstrap", "shortDescription": {"text": "Possibly dead Python function: run_gold_bootstrap"}, "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-47a0d6fa00e5dbae", "name": "Possibly dead Python function: run_gold_refresh", "shortDescription": {"text": "Possibly dead Python function: run_gold_refresh"}, "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-6fd6a468fdb2c659", "name": "Possibly dead Python function: run_gold_maintainer", "shortDescription": {"text": "Possibly dead Python function: run_gold_maintainer"}, "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-ae89777f92893638", "name": "Possibly dead Python function: run_silver_bootstrap", "shortDescription": {"text": "Possibly dead Python function: run_silver_bootstrap"}, "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-45901150e53df75b", "name": "Possibly dead Python function: run_silver_refresh", "shortDescription": {"text": "Possibly dead Python function: run_silver_refresh"}, "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-4df8baff7287765d", "name": "Possibly dead Python function: run_silver_maintainer", "shortDescription": {"text": "Possibly dead Python function: run_silver_maintainer"}, "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-6e88967267776e9e", "name": "Possibly dead Python function: count_opendatasoft", "shortDescription": {"text": "Possibly dead Python function: count_opendatasoft"}, "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-0429a8d0681987ef", "name": "Possibly dead Python function: count_via_header", "shortDescription": {"text": "Possibly dead Python function: count_via_header"}, "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-e5b3fc6a22f3e2c5", "name": "Possibly dead Python function: run_osint_enrichment_nightly", "shortDescription": {"text": "Possibly dead Python function: run_osint_enrichment_nightly"}, "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-5da6b7a48da03e6f", "name": "Possibly dead Python function: run_daily_supervisor_report", "shortDescription": {"text": "Possibly dead Python function: run_daily_supervisor_report"}, "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-8840894f0364c945", "name": "Possibly dead Python function: run_completeness_check", "shortDescription": {"text": "Possibly dead Python function: run_completeness_check"}, "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-08551316360884f7", "name": "Possibly dead Python function: run_maintainer_check", "shortDescription": {"text": "Possibly dead Python function: run_maintainer_check"}, "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-e8a724d4b40915a1", "name": "Possibly dead Python function: run_neo4j_rebuild", "shortDescription": {"text": "Possibly dead Python function: run_neo4j_rebuild"}, "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-74084e5a86b43014", "name": "Possibly dead Python function: list_gold_specs", "shortDescription": {"text": "Possibly dead Python function: list_gold_specs"}, "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-b3ddd63ea4ef2e74", "name": "Possibly dead Python function: fetch_eurostat_delta", "shortDescription": {"text": "Possibly dead Python function: fetch_eurostat_delta"}, "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-19e2ce0b5e5852d0", "name": "Possibly dead Python function: fetch_urssaf_opendata_delta", "shortDescription": {"text": "Possibly dead Python function: fetch_urssaf_opendata_delta"}, "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-50278f09b653e357", "name": "Possibly dead Python function: fetch_esane_delta", "shortDescription": {"text": "Possibly dead Python function: fetch_esane_delta"}, "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-42c5f2af30f3fb2e", "name": "Possibly dead Python function: fetch_opensanctions_delta", "shortDescription": {"text": "Possibly dead Python function: fetch_opensanctions_delta"}, "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-400e15505cb852cb", "name": "Possibly dead Python function: fetch_dvf_delta", "shortDescription": {"text": "Possibly dead Python function: fetch_dvf_delta"}, "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-991ebc80b81f0e7f", "name": "Possibly dead Python function: fetch_bdpm_medicaments_delta", "shortDescription": {"text": "Possibly dead Python function: fetch_bdpm_medicaments_delta"}, "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-23ec7a6f88e5ab5a", "name": "Possibly dead Python function: fetch_inpi_brevets_delta", "shortDescription": {"text": "Possibly dead Python function: fetch_inpi_brevets_delta"}, "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-ffab60ee3dba6897", "name": "Possibly dead Python function: fetch_recherche_entreprises_delta", "shortDescription": {"text": "Possibly dead Python function: fetch_recherche_entreprises_delta"}, "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-eaf6701886bc163a", "name": "Possibly dead Python function: fetch_basol_delta", "shortDescription": {"text": "Possibly dead Python function: fetch_basol_delta"}, "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-f1ef46532d0f2170", "name": "TODO/FIXME marker in shipping code \u2014 frontend/next.config.ts:24", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/next.config.ts:24"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5a53edb69b34e5a", "name": "Stray `console.log` in TS/JS \u2014 frontend/tests/e2e/clickables-exhaustive.spec.ts:187", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/tests/e2e/clickables-exhaustive.spec.ts:187"}, "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-551bbfe4064272fc", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/GlobalCopilot.tsx:318", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/GlobalCopilot.tsx:318"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa56ed183aaaa96e", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/explorer/TableTreeSidebar.tsx:159", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/explorer/TableTreeSidebar.tsx:159"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68450270b521833a", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ui/InstallPrompt.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ui/InstallPrompt.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3db798c8aae7272f", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/copilot/TargetCard.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/copilot/TargetCard.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89aef070d5d20aa4", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/copilot/ConversationsSidebar.tsx:68", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/copilot/ConversationsSidebar.tsx:68"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1fd43c8e2fd9cfe", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/app/page.tsx:122", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/app/page.tsx:122"}, "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-b42e3d17a0df9da7", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/targets/page.tsx:758", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/targets/page.tsx:758"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97beaea827fdd02d", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/targets/[id]/page.tsx:158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/targets/[id]/page.tsx:158"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ce10b123c9988b2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/explorer/page.tsx:295", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/explorer/page.tsx:295"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a825bac573028c1", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/signals/page.tsx:411", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/signals/page.tsx:411"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a0d17adb20e885a", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/app/copilot/page.tsx:302", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/app/copilot/page.tsx:302"}, "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-a8b2f67ae0c7ca50", "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-e520b9ea12c4ff5a", "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-6ba08099d5e5a174", "name": "Privileged port 143 in use", "shortDescription": {"text": "Privileged port 143 in use"}, "fullDescription": {"text": "Port 143 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-bff25d90285179e0", "name": "Privileged port 5 in use", "shortDescription": {"text": "Privileged port 5 in use"}, "fullDescription": {"text": "Port 5 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-a7f39cdd5fa21931", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "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-87e2744ab6317c8e", "name": "Docker base image is tag-pinned but not digest-pinned: mcr.microsoft.com/playwright/python:v1.48.0-jammy", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: mcr.microsoft.com/playwright/python:v1.48.0-jammy"}, "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-74b8060e8717a61c", "name": "Dockerfile runs as root: infrastructure/agents/platform/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: infrastructure/agents/platform/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-c2b33af0c98a8482", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-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-1f66ad88286ca30a", "name": "Dockerfile runs as root: backend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: backend/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-714c31ca9f474ae6", "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-43d9fde05a18bb84", "name": "Possible secret in .gitleaks.toml", "shortDescription": {"text": "Possible secret in .gitleaks.toml"}, "fullDescription": {"text": "Detected pattern matching openai_or_anthropic_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-3cb4864c76bbf680", "name": "Insecure pattern 'eval_used' in backend/pyproject.toml:32", "shortDescription": {"text": "Insecure pattern 'eval_used' in backend/pyproject.toml:32"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-407bb3d07a3154c0", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-709f135d391a82d8", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba3cdaeb39bded0e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69c477935667f7ed", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77252c7eda829888", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "webfactory/ssh-agent@v0.9.0 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aef9427310ddf6a2", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-097746c536956398", "name": "Very large file: frontend/src/components/dem/TargetSheet.tsx (1614 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/dem/TargetSheet.tsx (1614 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95454b927f6697c8", "name": "Very large file: frontend/src/components/dem/ChatPanel.tsx (1166 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/dem/ChatPanel.tsx (1166 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce8b0113f940ff61", "name": "Very large file: infrastructure/agents/platform/ingestion/silver_codegen.py (1209 lines)", "shortDescription": {"text": "Very large file: infrastructure/agents/platform/ingestion/silver_codegen.py (1209 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ad5189d0422f63b", "name": "Very large file: backend/main.py (3046 lines)", "shortDescription": {"text": "Very large file: backend/main.py (3046 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24da02e90df51082", "name": "Very large file: backend/clients/deepseek.py (1641 lines)", "shortDescription": {"text": "Very large file: backend/clients/deepseek.py (1641 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18651f81c5524f9b", "name": "Very large file: backend/routers/datalake.py (5297 lines)", "shortDescription": {"text": "Very large file: backend/routers/datalake.py (5297 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "47 tests / 271 src (ratio 0.17)."}, "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 450 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-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 58 placeholder/mock markers across 26 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46bdfee1f83de315", "name": "Commented-code block (5 lines) in frontend/next.config.ts:24", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/next.config.ts:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5fd0413f25f8a6a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/public/sw.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/public/sw.js:1"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aac3a5e9e296591b", "name": "Commented-code block (6 lines) in frontend/src/sw.ts:18", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/sw.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9293a5df0ee6848", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/CommandPalette.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/CommandPalette.tsx:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c55975170f7871ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/dem/TargetSheet.tsx:308", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/dem/TargetSheet.tsx:308"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8aafaad6ce96db69", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/dem/TopHeader.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/dem/TopHeader.tsx:44"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-260af3b35d486968", "name": "Commented-code block (5 lines) in frontend/src/components/dem/CompliancePanel.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/dem/CompliancePanel.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-753871d4a5e1c41d", "name": "Commented-code block (5 lines) in frontend/src/components/dem/ChatPanel.tsx:27", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/dem/ChatPanel.tsx:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab6f70440b17c413", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/app/targets/[id]/page.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/app/targets/[id]/page.tsx:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac4077ba4b208f91", "name": "Commented-code block (5 lines) in frontend/src/lib/api.ts:232", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/api.ts:232"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f5e12a49b438777", "name": "Commented-code block (6 lines) in frontend/src/lib/dem/adapter.ts:71", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/dem/adapter.ts:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54d5284ca96a58df", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/usePipeline.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/usePipeline.ts:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6c5ee58ead724966", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useSignals.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useSignals.ts:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-86713237880da673", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useGraph.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useGraph.ts:48"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d7ecd87ed84a11ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useTarget.ts:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useTarget.ts:8"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e7b575a89a9e979", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useTargets.ts:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useTargets.ts:8"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed209e5bbf843452", "name": "Commented-code block (5 lines) in infrastructure/agents/scripts/neo4j/neo4j_loader.py:29", "shortDescription": {"text": "Commented-code block (5 lines) in infrastructure/agents/scripts/neo4j/neo4j_loader.py:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f623e7a9a9f16ce3", "name": "Commented-code block (6 lines) in infrastructure/agents/platform/config.py:36", "shortDescription": {"text": "Commented-code block (6 lines) in infrastructure/agents/platform/config.py:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7c89b61b5c20065", "name": "Commented-code block (5 lines) in infrastructure/agents/platform/tests/test_first_run_coverage.py:56", "shortDescription": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/tests/test_first_run_coverage.py:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74c22b043990ecd7", "name": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/silver_codegen.py:138", "shortDescription": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/silver_codegen.py:138"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0db042a39025bfe", "name": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/silver_engine.py:300", "shortDescription": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/silver_engine.py:300"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1a5802457520a70", "name": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/codegen.py:211", "shortDescription": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/codegen.py:211"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a3a90822e10a7ad", "name": "Commented-code block (6 lines) in infrastructure/agents/platform/ingestion/engine.py:117", "shortDescription": {"text": "Commented-code block (6 lines) in infrastructure/agents/platform/ingestion/engine.py:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57c3614f11ad5c4f", "name": "Commented-code block (6 lines) in infrastructure/agents/platform/ingestion/neo4j_sync.py:159", "shortDescription": {"text": "Commented-code block (6 lines) in infrastructure/agents/platform/ingestion/neo4j_sync.py:159"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95076bf18c2e1d35", "name": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/sources/sec_edgar.py:60", "shortDescription": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/sources/sec_edgar.py:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75a7763a1fe701fb", "name": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/sources/crt_sh.py:55", "shortDescription": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/sources/crt_sh.py:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a231d3148df73ad7", "name": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/sources/gleif.py:93", "shortDescription": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/sources/gleif.py:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d34332ff46e67003", "name": "Legacy-named symbol `recaptcha_v2` in infrastructure/agents/platform/tools/captcha.py:79", "shortDescription": {"text": "Legacy-named symbol `recaptcha_v2` in infrastructure/agents/platform/tools/captcha.py:79"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8572af50ffa46682", "name": "Commented-code block (6 lines) in backend/main.py:239", "shortDescription": {"text": "Commented-code block (6 lines) in backend/main.py:239"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52ce49700b5c931f", "name": "Commented-code block (5 lines) in backend/clients/llm_validator.py:94", "shortDescription": {"text": "Commented-code block (5 lines) in backend/clients/llm_validator.py:94"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d7b41b54c6b86aa", "name": "Commented-code block (5 lines) in backend/clients/deepseek.py:18", "shortDescription": {"text": "Commented-code block (5 lines) in backend/clients/deepseek.py:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd6119755ec2f303", "name": "Legacy-named symbol `_scoring_detail_legacy` in backend/routers/datalake.py:2826", "shortDescription": {"text": "Legacy-named symbol `_scoring_detail_legacy` in backend/routers/datalake.py:2826"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-03891d9f4eff9279", "name": "Commented-code block (6 lines) in backend/routers/datalake.py:188", "shortDescription": {"text": "Commented-code block (6 lines) in backend/routers/datalake.py:188"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c41bb1a1f430bd6", "name": "39 env vars used in code but missing from .env.example", "shortDescription": {"text": "39 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AGENTS_PLATFORM_URL`, `BACKEND_INTERNAL_URL`, `BACKEND_URL`, `BUILD_TARGET`, `CI`, `CODEGEN_USE_TOOLS`, `CORS_ORIGIN_REGEX`, `CRON_SECRET` + 31 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ninfrastructure/agents/signup/signup_agent/flows/france_travail.py:run, infrastructure/agents/signup/signup_agent/flows/inpi_rne.py:run, infrastructure/agents/signup/signup_agent/flows/piste_gouv.py:run\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:\ninfrastructure/agents/platform/main.py:stream, infrastructure/agents/platform/main.py:stream\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-a82831f76222791f", "name": "FastAPI POST `copilot_redteam` without auth dependency \u2014 backend/main.py:1860", "shortDescription": {"text": "FastAPI POST `copilot_redteam` without auth dependency \u2014 backend/main.py:1860"}, "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-21aab7a056e57a43", "name": "FastAPI POST `refresh_targets` without auth dependency \u2014 backend/main.py:2670", "shortDescription": {"text": "FastAPI POST `refresh_targets` without auth dependency \u2014 backend/main.py:2670"}, "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-a3fa5cb05b89401a", "name": "FastAPI POST `update_scoring_config` without auth dependency \u2014 backend/routers/scoring.py:23", "shortDescription": {"text": "FastAPI POST `update_scoring_config` without auth dependency \u2014 backend/routers/scoring.py:23"}, "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-df4f42a6369115a5", "name": "FastAPI POST `move_pipeline_card` without auth dependency \u2014 backend/routers/pipeline.py:47", "shortDescription": {"text": "FastAPI POST `move_pipeline_card` without auth dependency \u2014 backend/routers/pipeline.py:47"}, "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-c7152121938bddff", "name": "Dangling fetch: POST /api/datalake/agent-retry/${a.source_id} (frontend/src/components/dem/AuditView.tsx:159)", "shortDescription": {"text": "Dangling fetch: POST /api/datalake/agent-retry/${a.source_id} (frontend/src/components/dem/AuditView.tsx:159)"}, "fullDescription": {"text": "`frontend/src/components/dem/AuditView.tsx:159` calls `POST /api/datalake/agent-retry/${a.source_id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/datalake/agent-retry/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80667cefe18c4e6c", "name": "Dangling fetch: GET /api/datalake/fiche/${siren} (frontend/src/components/dem/CompareView.tsx:173)", "shortDescription": {"text": "Dangling fetch: GET /api/datalake/fiche/${siren} (frontend/src/components/dem/CompareView.tsx:173)"}, "fullDescription": {"text": "`frontend/src/components/dem/CompareView.tsx:173` calls `GET /api/datalake/fiche/${siren}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/datalake/fiche/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-18b7c258d5b4ecd6", "name": "Dangling fetch: GET /api/datalake/dashboard (frontend/src/components/dem/TopHeader.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/datalake/dashboard (frontend/src/components/dem/TopHeader.tsx:44)"}, "fullDescription": {"text": "`frontend/src/components/dem/TopHeader.tsx:44` calls `GET /api/datalake/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/datalake/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc01127dcffe3ae8", "name": "Dangling fetch: GET /api/scoring/config (frontend/src/app/targets/page.tsx:104)", "shortDescription": {"text": "Dangling fetch: GET /api/scoring/config (frontend/src/app/targets/page.tsx:104)"}, "fullDescription": {"text": "`frontend/src/app/targets/page.tsx:104` calls `GET /api/scoring/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scoring/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ce3dac23211bfdb", "name": "Dangling fetch: POST /api/scoring/config (frontend/src/app/targets/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: POST /api/scoring/config (frontend/src/app/targets/page.tsx:155)"}, "fullDescription": {"text": "`frontend/src/app/targets/page.tsx:155` calls `POST /api/scoring/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scoring/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-558b61402813bb75", "name": "Dangling fetch: GET /api/datalake/entreprise/search?q=${encodeURIComponent(q)}&limit=${limit} (frontend/src/lib/dem/adap", "shortDescription": {"text": "Dangling fetch: GET /api/datalake/entreprise/search?q=${encodeURIComponent(q)}&limit=${limit} (frontend/src/lib/dem/adapter.ts:277)"}, "fullDescription": {"text": "`frontend/src/lib/dem/adapter.ts:277` calls `GET /api/datalake/entreprise/search?q=${encodeURIComponent(q)}&limit=${limit}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/datalake/entreprise/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ad2315babddce25", "name": "Dangling fetch: POST /api/pipeline/move (frontend/src/lib/queries/usePipeline.ts:42)", "shortDescription": {"text": "Dangling fetch: POST /api/pipeline/move (frontend/src/lib/queries/usePipeline.ts:42)"}, "fullDescription": {"text": "`frontend/src/lib/queries/usePipeline.ts:42` calls `POST /api/pipeline/move` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pipeline/move`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-529f90a31c4e5e62", "name": "Dangling fetch: GET /api/datalake/graph (frontend/src/lib/queries/useGraph.ts:48)", "shortDescription": {"text": "Dangling fetch: GET /api/datalake/graph (frontend/src/lib/queries/useGraph.ts:48)"}, "fullDescription": {"text": "`frontend/src/lib/queries/useGraph.ts:48` calls `GET /api/datalake/graph` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/datalake/graph`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3140e61d7cac5091", "name": "Unused endpoint: GET /agents", "shortDescription": {"text": "Unused endpoint: GET /agents"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `GET /agents` 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-90fabf3759d68967", "name": "Unused endpoint: GET /agents/{name}", "shortDescription": {"text": "Unused endpoint: GET /agents/{name}"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `GET /agents/{name}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ab9bf5db6820af4", "name": "Unused endpoint: GET /models", "shortDescription": {"text": "Unused endpoint: GET /models"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `GET /models` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-433af3cc42046e9f", "name": "Unused endpoint: POST /models/{name:path}/pull", "shortDescription": {"text": "Unused endpoint: POST /models/{name:path}/pull"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `POST /models/{name:path}/pull` 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-c2e0403bcc53989f", "name": "Unused endpoint: POST /agents/{name}/invoke", "shortDescription": {"text": "Unused endpoint: POST /agents/{name}/invoke"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `POST /agents/{name}/invoke` 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-a6108904bc84e76e", "name": "Unused endpoint: POST /agents/reload", "shortDescription": {"text": "Unused endpoint: POST /agents/reload"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `POST /agents/reload` 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-bf4a8487241c9946", "name": "Unused endpoint: GET /ingestion/sources", "shortDescription": {"text": "Unused endpoint: GET /ingestion/sources"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `GET /ingestion/sources` 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-0b4088a105587f3d", "name": "Unused endpoint: POST /ingestion/run/{source_id}", "shortDescription": {"text": "Unused endpoint: POST /ingestion/run/{source_id}"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `POST /ingestion/run/{source_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-46270c684d22df01", "name": "Unused endpoint: GET /ingestion/freshness", "shortDescription": {"text": "Unused endpoint: GET /ingestion/freshness"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `GET /ingestion/freshness` 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-913f4bfd8842f58c", "name": "Unused endpoint: GET /ingestion/specs", "shortDescription": {"text": "Unused endpoint: GET /ingestion/specs"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `GET /ingestion/specs` 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-3e2f58e6a965a073", "name": "Unused endpoint: GET /ingestion/specs/{source_id}", "shortDescription": {"text": "Unused endpoint: GET /ingestion/specs/{source_id}"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `GET /ingestion/specs/{source_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-42a5701f097e6bea", "name": "Unused endpoint: POST /ingestion/generate/{source_id}", "shortDescription": {"text": "Unused endpoint: POST /ingestion/generate/{source_id}"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `POST /ingestion/generate/{source_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-e970d9ee4ac8d7ca", "name": "Unused endpoint: POST /ingestion/discover/{source_id}", "shortDescription": {"text": "Unused endpoint: POST /ingestion/discover/{source_id}"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `POST /ingestion/discover/{source_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-e6966b05a02e5042", "name": "Unused endpoint: POST /agents/openclaw/run", "shortDescription": {"text": "Unused endpoint: POST /agents/openclaw/run"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `POST /agents/openclaw/run` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-caefc7b8ae755c5e", "name": "Unused endpoint: POST /agents/source-hunter/hunt/{source_id}", "shortDescription": {"text": "Unused endpoint: POST /agents/source-hunter/hunt/{source_id}"}, "fullDescription": {"text": "`infrastructure/agents/platform/main.py` declares `POST /agents/source-hunter/hunt/{source_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-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/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-938db3367539adcc", "name": "Unused endpoint: GET /api/targets/search-pappers", "shortDescription": {"text": "Unused endpoint: GET /api/targets/search-pappers"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/targets/search-pappers` 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-2f48754aefc17956", "name": "Unused endpoint: GET /api/pappers/search-edrcf", "shortDescription": {"text": "Unused endpoint: GET /api/pappers/search-edrcf"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pappers/search-edrcf` 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-fd26948757fffac2", "name": "Unused endpoint: GET /api/pappers/company/{siren}", "shortDescription": {"text": "Unused endpoint: GET /api/pappers/company/{siren}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pappers/company/{siren}` 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-919f587534330116", "name": "Unused endpoint: GET /api/pappers/dirigeants/{siren}", "shortDescription": {"text": "Unused endpoint: GET /api/pappers/dirigeants/{siren}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pappers/dirigeants/{siren}` 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-9cc7b22f7c179a20", "name": "Unused endpoint: GET /api/pappers/siren/{siren}", "shortDescription": {"text": "Unused endpoint: GET /api/pappers/siren/{siren}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pappers/siren/{siren}` 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-a26b008ecf780095", "name": "Unused endpoint: GET /api/pappers/statut/{siren}", "shortDescription": {"text": "Unused endpoint: GET /api/pappers/statut/{siren}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pappers/statut/{siren}` 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-8b946baa5b7eb418", "name": "Unused endpoint: GET /api/pappers/bodacc/{siren}", "shortDescription": {"text": "Unused endpoint: GET /api/pappers/bodacc/{siren}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pappers/bodacc/{siren}` 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-07fb837b77b5d1a7", "name": "Unused endpoint: GET /api/pappers/dirigeant/search", "shortDescription": {"text": "Unused endpoint: GET /api/pappers/dirigeant/search"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pappers/dirigeant/search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d91de7c66968948", "name": "Unused endpoint: GET /api/pappers/procedures/{siren}", "shortDescription": {"text": "Unused endpoint: GET /api/pappers/procedures/{siren}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pappers/procedures/{siren}` 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-5b3c4dfe0c183af8", "name": "Unused endpoint: GET /api/pappers/concurrents/{siren}", "shortDescription": {"text": "Unused endpoint: GET /api/pappers/concurrents/{siren}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pappers/concurrents/{siren}` 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-f0891895b1a3778f", "name": "Unused endpoint: GET /api/pappers/score/{siren}", "shortDescription": {"text": "Unused endpoint: GET /api/pappers/score/{siren}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pappers/score/{siren}` 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-57e3a551e3718182", "name": "Unused endpoint: POST /api/copilot/redteam", "shortDescription": {"text": "Unused endpoint: POST /api/copilot/redteam"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/copilot/redteam` 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-9185678549c1ef6d", "name": "Unused endpoint: GET /api/graph", "shortDescription": {"text": "Unused endpoint: GET /api/graph"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/graph` 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-e2103dbc81e9235c", "name": "Unused endpoint: GET /api/sectors", "shortDescription": {"text": "Unused endpoint: GET /api/sectors"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/sectors` 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-21ce19858248be7a", "name": "Unused endpoint: POST /api/refresh-targets", "shortDescription": {"text": "Unused endpoint: POST /api/refresh-targets"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/refresh-targets` 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-e86da4a89fa9e3f1", "name": "Unused endpoint: GET /api/admin/refresh-db", "shortDescription": {"text": "Unused endpoint: GET /api/admin/refresh-db"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/refresh-db` 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-67b6f7db369bc057", "name": "Unused endpoint: GET /api/admin/index-stats", "shortDescription": {"text": "Unused endpoint: GET /api/admin/index-stats"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/index-stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f3559fcf4a07584b", "name": "Unused endpoint: GET /api/admin/rebuild-index", "shortDescription": {"text": "Unused endpoint: GET /api/admin/rebuild-index"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/rebuild-index` 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-8aef40f99f8197f3", "name": "Unused endpoint: GET /api/admin/enrich-batch", "shortDescription": {"text": "Unused endpoint: GET /api/admin/enrich-batch"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/enrich-batch` 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-0f9be7742f00a351", "name": "Unused endpoint: GET /_introspect", "shortDescription": {"text": "Unused endpoint: GET /_introspect"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /_introspect` 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-57d57804b276920c", "name": "Unused endpoint: GET /tables", "shortDescription": {"text": "Unused endpoint: GET /tables"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /tables` 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-4b0444438d5b865e", "name": "Unused endpoint: GET /fiche/{siren}", "shortDescription": {"text": "Unused endpoint: GET /fiche/{siren}"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /fiche/{siren}` 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-9052649322d99497", "name": "Unused endpoint: GET /scoring/{siren}", "shortDescription": {"text": "Unused endpoint: GET /scoring/{siren}"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /scoring/{siren}` 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-05f8ef97277e44bf", "name": "Unused endpoint: GET /_scoring_detail_legacy/{siren}", "shortDescription": {"text": "Unused endpoint: GET /_scoring_detail_legacy/{siren}"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /_scoring_detail_legacy/{siren}` 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-60b45835fe3da1d1", "name": "Unused endpoint: GET /dirigeant/{nom}/{prenom}/{date_naissance}", "shortDescription": {"text": "Unused endpoint: GET /dirigeant/{nom}/{prenom}/{date_naissance}"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /dirigeant/{nom}/{prenom}/{date_naissance}` 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-83c4b9e6ed6b3aec", "name": "Unused endpoint: GET /dirigeant/{nom}/{prenom}", "shortDescription": {"text": "Unused endpoint: GET /dirigeant/{nom}/{prenom}"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /dirigeant/{nom}/{prenom}` 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-420d3c724c4e2cdf", "name": "Unused endpoint: GET /groupe/{siren}", "shortDescription": {"text": "Unused endpoint: GET /groupe/{siren}"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /groupe/{siren}` 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-070540251dfd4f45", "name": "Unused endpoint: GET /groupe-filiation/{siren}", "shortDescription": {"text": "Unused endpoint: GET /groupe-filiation/{siren}"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /groupe-filiation/{siren}` 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-f8021e6b271e44dc", "name": "Unused endpoint: GET /pitch/{siren}", "shortDescription": {"text": "Unused endpoint: GET /pitch/{siren}"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /pitch/{siren}` 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-10576aea564bf835", "name": "Unused endpoint: GET /pitch-pdf/{siren}", "shortDescription": {"text": "Unused endpoint: GET /pitch-pdf/{siren}"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /pitch-pdf/{siren}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d504b80adc9409ec", "name": "Unused endpoint: GET /dashboard", "shortDescription": {"text": "Unused endpoint: GET /dashboard"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /dashboard` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-59b2727837364407", "name": "Unused endpoint: GET /agent-actions", "shortDescription": {"text": "Unused endpoint: GET /agent-actions"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /agent-actions` 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-7f550c2f5da77b83", "name": "Unused endpoint: GET /graph/{siren}", "shortDescription": {"text": "Unused endpoint: GET /graph/{siren}"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /graph/{siren}` 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-c0ac2ef565a5459b", "name": "Unused endpoint: GET /graph", "shortDescription": {"text": "Unused endpoint: GET /graph"}, "fullDescription": {"text": "`backend/routers/datalake.py` declares `GET /graph` 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/23530"}, "properties": {"repository": "Zakariakhchiche/DEMOEMA", "repoUrl": "https://github.com/Zakariakhchiche/DEMOEMA", "branch": "main"}, "results": [{"ruleId": "scanner-acb738993684d32a", "level": "note", "message": {"text": "Possibly dead Python function: run_holehe"}, "properties": {"repobilityId": "3ee8db0c2c4aa09d", "scanner": "scanner-primary", "fingerprint": "acb738993684d32a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/scripts/osint/osint_orchestrator.py:118"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-db1a728774c5b471", "level": "note", "message": {"text": "Possibly dead Python function: write_credential"}, "properties": {"repobilityId": "637900212335337b", "scanner": "scanner-primary", "fingerprint": "db1a728774c5b471", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/signup/signup_agent/main.py:69"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5bc959f44332cdd4", "level": "note", "message": {"text": "Possibly dead Python function: embed"}, "properties": {"repobilityId": "03db77c91b518a90", "scanner": "scanner-primary", "fingerprint": "5bc959f44332cdd4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ollama_client.py:77"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-11bd91793369f6a7", "level": "note", "message": {"text": "Possibly dead Python function: require_api_key"}, "properties": {"repobilityId": "44e8e9840fc57179", "scanner": "scanner-primary", "fingerprint": "11bd91793369f6a7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/main.py:80"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-13f130c3d292f2fa", "level": "note", "message": {"text": "Possibly dead Python function: list_silver_specs"}, "properties": {"repobilityId": "5552c6f47a796a5b", "scanner": "scanner-primary", "fingerprint": "13f130c3d292f2fa", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/silver_codegen.py:915"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a0b4575fd645dae6", "level": "note", "message": {"text": "Possibly dead Python function: run_gold_bootstrap"}, "properties": {"repobilityId": "5b778e1e11879267", "scanner": "scanner-primary", "fingerprint": "a0b4575fd645dae6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/gold_engine.py:90"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-47a0d6fa00e5dbae", "level": "note", "message": {"text": "Possibly dead Python function: run_gold_refresh"}, "properties": {"repobilityId": "4ecfe3622e1cb260", "scanner": "scanner-primary", "fingerprint": "47a0d6fa00e5dbae", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/gold_engine.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6fd6a468fdb2c659", "level": "note", "message": {"text": "Possibly dead Python function: run_gold_maintainer"}, "properties": {"repobilityId": "15cc395c32b435a8", "scanner": "scanner-primary", "fingerprint": "6fd6a468fdb2c659", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/gold_engine.py:181"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ae89777f92893638", "level": "note", "message": {"text": "Possibly dead Python function: run_silver_bootstrap"}, "properties": {"repobilityId": "efcf458093f1797d", "scanner": "scanner-primary", "fingerprint": "ae89777f92893638", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/silver_engine.py:126"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-45901150e53df75b", "level": "note", "message": {"text": "Possibly dead Python function: run_silver_refresh"}, "properties": {"repobilityId": "625d072fb1042016", "scanner": "scanner-primary", "fingerprint": "45901150e53df75b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/silver_engine.py:142"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4df8baff7287765d", "level": "note", "message": {"text": "Possibly dead Python function: run_silver_maintainer"}, "properties": {"repobilityId": "e5d3a59ccd6cac2a", "scanner": "scanner-primary", "fingerprint": "4df8baff7287765d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/silver_engine.py:315"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6e88967267776e9e", "level": "note", "message": {"text": "Possibly dead Python function: count_opendatasoft"}, "properties": {"repobilityId": "8532072967d9513a", "scanner": "scanner-primary", "fingerprint": "6e88967267776e9e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/counters.py:88"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0429a8d0681987ef", "level": "note", "message": {"text": "Possibly dead Python function: count_via_header"}, "properties": {"repobilityId": "f78d114012e912e6", "scanner": "scanner-primary", "fingerprint": "0429a8d0681987ef", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/counters.py:93"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e5b3fc6a22f3e2c5", "level": "note", "message": {"text": "Possibly dead Python function: run_osint_enrichment_nightly"}, "properties": {"repobilityId": "0096446b3defae25", "scanner": "scanner-primary", "fingerprint": "e5b3fc6a22f3e2c5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/engine.py:312"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5da6b7a48da03e6f", "level": "note", "message": {"text": "Possibly dead Python function: run_daily_supervisor_report"}, "properties": {"repobilityId": "f340ed4be83e7cbf", "scanner": "scanner-primary", "fingerprint": "5da6b7a48da03e6f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/engine.py:406"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8840894f0364c945", "level": "note", "message": {"text": "Possibly dead Python function: run_completeness_check"}, "properties": {"repobilityId": "cb3cee33dd66bc1d", "scanner": "scanner-primary", "fingerprint": "8840894f0364c945", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/engine.py:466"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-08551316360884f7", "level": "note", "message": {"text": "Possibly dead Python function: run_maintainer_check"}, "properties": {"repobilityId": "393d62b8841dadb6", "scanner": "scanner-primary", "fingerprint": "08551316360884f7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/engine.py:548"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e8a724d4b40915a1", "level": "note", "message": {"text": "Possibly dead Python function: run_neo4j_rebuild"}, "properties": {"repobilityId": "1990d9491dd7e0cf", "scanner": "scanner-primary", "fingerprint": "e8a724d4b40915a1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/neo4j_sync.py:249"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-74084e5a86b43014", "level": "note", "message": {"text": "Possibly dead Python function: list_gold_specs"}, "properties": {"repobilityId": "1eb05eaa0c688aa1", "scanner": "scanner-primary", "fingerprint": "74084e5a86b43014", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/gold_codegen.py:115"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b3ddd63ea4ef2e74", "level": "note", "message": {"text": "Possibly dead Python function: fetch_eurostat_delta"}, "properties": {"repobilityId": "5de71ce06efdb083", "scanner": "scanner-primary", "fingerprint": "b3ddd63ea4ef2e74", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/sources/eurostat.py:29"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19e2ce0b5e5852d0", "level": "note", "message": {"text": "Possibly dead Python function: fetch_urssaf_opendata_delta"}, "properties": {"repobilityId": "e58ea7100ff2398f", "scanner": "scanner-primary", "fingerprint": "19e2ce0b5e5852d0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/sources/urssaf_opendata.py:44"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50278f09b653e357", "level": "note", "message": {"text": "Possibly dead Python function: fetch_esane_delta"}, "properties": {"repobilityId": "37a3fd3215616ea6", "scanner": "scanner-primary", "fingerprint": "50278f09b653e357", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/sources/esane.py:29"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-42c5f2af30f3fb2e", "level": "note", "message": {"text": "Possibly dead Python function: fetch_opensanctions_delta"}, "properties": {"repobilityId": "c7d04c0949663994", "scanner": "scanner-primary", "fingerprint": "42c5f2af30f3fb2e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/sources/opensanctions.py:27"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-400e15505cb852cb", "level": "note", "message": {"text": "Possibly dead Python function: fetch_dvf_delta"}, "properties": {"repobilityId": "5e000955bc384057", "scanner": "scanner-primary", "fingerprint": "400e15505cb852cb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/sources/dvf.py:32"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-991ebc80b81f0e7f", "level": "note", "message": {"text": "Possibly dead Python function: fetch_bdpm_medicaments_delta"}, "properties": {"repobilityId": "e485ff9cd5e06f88", "scanner": "scanner-primary", "fingerprint": "991ebc80b81f0e7f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/sources/bdpm_medicaments.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-23ec7a6f88e5ab5a", "level": "note", "message": {"text": "Possibly dead Python function: fetch_inpi_brevets_delta"}, "properties": {"repobilityId": "635650b66edb67e0", "scanner": "scanner-primary", "fingerprint": "23ec7a6f88e5ab5a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/sources/inpi_brevets.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ffab60ee3dba6897", "level": "note", "message": {"text": "Possibly dead Python function: fetch_recherche_entreprises_delta"}, "properties": {"repobilityId": "764b94c34b040962", "scanner": "scanner-primary", "fingerprint": "ffab60ee3dba6897", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/sources/recherche_entreprises.py:30"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eaf6701886bc163a", "level": "note", "message": {"text": "Possibly dead Python function: fetch_basol_delta"}, "properties": {"repobilityId": "8efedd42da0d6ca3", "scanner": "scanner-primary", "fingerprint": "eaf6701886bc163a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/ingestion/sources/basol.py:29"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f1ef46532d0f2170", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/next.config.ts:24"}, "properties": {"repobilityId": "3068c85a7f6af7b6", "scanner": "scanner-primary", "fingerprint": "f1ef46532d0f2170", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a5a53edb69b34e5a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/tests/e2e/clickables-exhaustive.spec.ts:187"}, "properties": {"repobilityId": "8f52bc1d082384de", "scanner": "scanner-primary", "fingerprint": "a5a53edb69b34e5a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-551bbfe4064272fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/GlobalCopilot.tsx:318"}, "properties": {"repobilityId": "7c2b3bd96849c5a8", "scanner": "scanner-primary", "fingerprint": "551bbfe4064272fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa56ed183aaaa96e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/explorer/TableTreeSidebar.tsx:159"}, "properties": {"repobilityId": "3df247f4935b41f0", "scanner": "scanner-primary", "fingerprint": "fa56ed183aaaa96e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68450270b521833a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ui/InstallPrompt.tsx:79"}, "properties": {"repobilityId": "715708916d88c2d3", "scanner": "scanner-primary", "fingerprint": "68450270b521833a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3db798c8aae7272f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/copilot/TargetCard.tsx:63"}, "properties": {"repobilityId": "038a6188fc44053d", "scanner": "scanner-primary", "fingerprint": "3db798c8aae7272f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-89aef070d5d20aa4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/copilot/ConversationsSidebar.tsx:68"}, "properties": {"repobilityId": "145b84f4b712bae8", "scanner": "scanner-primary", "fingerprint": "89aef070d5d20aa4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b1fd43c8e2fd9cfe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/app/page.tsx:122"}, "properties": {"repobilityId": "416a75fc522df897", "scanner": "scanner-primary", "fingerprint": "b1fd43c8e2fd9cfe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b42e3d17a0df9da7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/targets/page.tsx:758"}, "properties": {"repobilityId": "0f56b47c66c3f634", "scanner": "scanner-primary", "fingerprint": "b42e3d17a0df9da7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-97beaea827fdd02d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/targets/[id]/page.tsx:158"}, "properties": {"repobilityId": "5d06dd15767e2379", "scanner": "scanner-primary", "fingerprint": "97beaea827fdd02d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ce10b123c9988b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/explorer/page.tsx:295"}, "properties": {"repobilityId": "8300a1d43263fe3a", "scanner": "scanner-primary", "fingerprint": "8ce10b123c9988b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a825bac573028c1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/signals/page.tsx:411"}, "properties": {"repobilityId": "310280135351e6d1", "scanner": "scanner-primary", "fingerprint": "3a825bac573028c1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a0d17adb20e885a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/app/copilot/page.tsx:302"}, "properties": {"repobilityId": "32dfc95a82acd0ef", "scanner": "scanner-primary", "fingerprint": "1a0d17adb20e885a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8b2f67ae0c7ca50", "level": "warning", "message": {"text": "Privileged port 2 in use"}, "properties": {"repobilityId": "755b04866010e843", "scanner": "scanner-primary", "fingerprint": "a8b2f67ae0c7ca50", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/scripts/bootstrap-vps.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e520b9ea12c4ff5a", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "e520b9ea12c4ff5a", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/scripts/bootstrap-vps.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6ba08099d5e5a174", "level": "warning", "message": {"text": "Privileged port 143 in use"}, "properties": {"repobilityId": "6c7e204c24478bfe", "scanner": "scanner-primary", "fingerprint": "6ba08099d5e5a174", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/signup/setup-postfix.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bff25d90285179e0", "level": "warning", "message": {"text": "Privileged port 5 in use"}, "properties": {"repobilityId": "a8f80b4866464301", "scanner": "scanner-primary", "fingerprint": "bff25d90285179e0", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-security.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a7f39cdd5fa21931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "522d53ad0f6d9e11", "scanner": "scanner-primary", "fingerprint": "a7f39cdd5fa21931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-a7f39cdd5fa21931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "3893a7685d3e305b", "scanner": "scanner-primary", "fingerprint": "a7f39cdd5fa21931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-a7f39cdd5fa21931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "f0fc0fa77a744148", "scanner": "scanner-primary", "fingerprint": "a7f39cdd5fa21931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-87e2744ab6317c8e", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: mcr.microsoft.com/playwright/python:v1.48.0-jammy"}, "properties": {"repobilityId": "72b68f68a6ad53b8", "scanner": "scanner-primary", "fingerprint": "87e2744ab6317c8e", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/signup/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-74b8060e8717a61c", "level": "warning", "message": {"text": "Dockerfile runs as root: infrastructure/agents/platform/Dockerfile"}, "properties": {"repobilityId": "c2ae87a5a77552b4", "scanner": "scanner-primary", "fingerprint": "74b8060e8717a61c", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-c2b33af0c98a8482", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "85370c8818edc9b5", "scanner": "scanner-primary", "fingerprint": "c2b33af0c98a8482", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infrastructure/agents/platform/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f66ad88286ca30a", "level": "warning", "message": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "properties": {"repobilityId": "7afd2b0e8a8c9eeb", "scanner": "scanner-primary", "fingerprint": "1f66ad88286ca30a", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-714c31ca9f474ae6", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "f614a1e41f331b37", "scanner": "scanner-primary", "fingerprint": "714c31ca9f474ae6", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"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-43d9fde05a18bb84", "level": "error", "message": {"text": "Possible secret in .gitleaks.toml"}, "properties": {"repobilityId": "940077cd69816ee7", "scanner": "scanner-primary", "fingerprint": "43d9fde05a18bb84", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".gitleaks.toml"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-3cb4864c76bbf680", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in backend/pyproject.toml:32"}, "properties": {"repobilityId": "3b87849a50065388", "scanner": "scanner-primary", "fingerprint": "3cb4864c76bbf680", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/pyproject.toml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-407bb3d07a3154c0", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "095ff756101b4fce", "scanner": "scanner-primary", "fingerprint": "407bb3d07a3154c0", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-qcs-tracker.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-407bb3d07a3154c0", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c9aa06181ed81195", "scanner": "scanner-primary", "fingerprint": "407bb3d07a3154c0", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-qcs-tracker.yml"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-407bb3d07a3154c0", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b9120143d6aab277", "scanner": "scanner-primary", "fingerprint": "407bb3d07a3154c0", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-qcs-tracker.yml"}, "region": {"startLine": 179}}}]}, {"ruleId": "scanner-709f135d391a82d8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7ff47c62b94de90e", "scanner": "scanner-primary", "fingerprint": "709f135d391a82d8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-security.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-709f135d391a82d8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bcae86ea80db8046", "scanner": "scanner-primary", "fingerprint": "709f135d391a82d8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-security.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-709f135d391a82d8", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a64c5b259663791", "scanner": "scanner-primary", "fingerprint": "709f135d391a82d8", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-security.yml"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-709f135d391a82d8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e1acf603f80f9b56", "scanner": "scanner-primary", "fingerprint": "709f135d391a82d8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-security.yml"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-ba3cdaeb39bded0e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "71fd881c82f46135", "scanner": "scanner-primary", "fingerprint": "ba3cdaeb39bded0e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-mutation-testing.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-ba3cdaeb39bded0e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "02b48cc3d2c430d0", "scanner": "scanner-primary", "fingerprint": "ba3cdaeb39bded0e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-mutation-testing.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-ba3cdaeb39bded0e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f5cf03cb9d0da4e1", "scanner": "scanner-primary", "fingerprint": "ba3cdaeb39bded0e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-mutation-testing.yml"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-69c477935667f7ed", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8eeb41f5ae928655", "scanner": "scanner-primary", "fingerprint": "69c477935667f7ed", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-redteam.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-69c477935667f7ed", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4b29eaa3199592d5", "scanner": "scanner-primary", "fingerprint": "69c477935667f7ed", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-redteam.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-69c477935667f7ed", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "18311f87b37d5eac", "scanner": "scanner-primary", "fingerprint": "69c477935667f7ed", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-redteam.yml"}, "region": {"startLine": 154}}}]}, {"ruleId": "scanner-69c477935667f7ed", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d0f53a617d93dc59", "scanner": "scanner-primary", "fingerprint": "69c477935667f7ed", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-redteam.yml"}, "region": {"startLine": 165}}}]}, {"ruleId": "scanner-77252c7eda829888", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54596f25a56ebd16", "scanner": "scanner-primary", "fingerprint": "77252c7eda829888", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-ionos.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-77252c7eda829888", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d47347d030d7ec2f", "scanner": "scanner-primary", "fingerprint": "77252c7eda829888", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-ionos.yml"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-aef9427310ddf6a2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a6e6288c9eccbbfd", "scanner": "scanner-primary", "fingerprint": "aef9427310ddf6a2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-data-quality.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-aef9427310ddf6a2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3bcfbc47630472ef", "scanner": "scanner-primary", "fingerprint": "aef9427310ddf6a2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-data-quality.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-aef9427310ddf6a2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0dcdff3096644894", "scanner": "scanner-primary", "fingerprint": "aef9427310ddf6a2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa-data-quality.yml"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-097746c536956398", "level": "note", "message": {"text": "Very large file: frontend/src/components/dem/TargetSheet.tsx (1614 lines)"}, "properties": {"repobilityId": "2e1ec9e786134e5c", "scanner": "scanner-primary", "fingerprint": "097746c536956398", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-95454b927f6697c8", "level": "note", "message": {"text": "Very large file: frontend/src/components/dem/ChatPanel.tsx (1166 lines)"}, "properties": {"repobilityId": "6c27f431d154ee35", "scanner": "scanner-primary", "fingerprint": "95454b927f6697c8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ce8b0113f940ff61", "level": "note", "message": {"text": "Very large file: infrastructure/agents/platform/ingestion/silver_codegen.py (1209 lines)"}, "properties": {"repobilityId": "5674c1447fe254cc", "scanner": "scanner-primary", "fingerprint": "ce8b0113f940ff61", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ad5189d0422f63b", "level": "note", "message": {"text": "Very large file: backend/main.py (3046 lines)"}, "properties": {"repobilityId": "fb764a5c13811891", "scanner": "scanner-primary", "fingerprint": "3ad5189d0422f63b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-24da02e90df51082", "level": "note", "message": {"text": "Very large file: backend/clients/deepseek.py (1641 lines)"}, "properties": {"repobilityId": "c2050725060bc161", "scanner": "scanner-primary", "fingerprint": "24da02e90df51082", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-18651f81c5524f9b", "level": "note", "message": {"text": "Very large file: backend/routers/datalake.py (5297 lines)"}, "properties": {"repobilityId": "83cdcac5c8c874cf", "scanner": "scanner-primary", "fingerprint": "18651f81c5524f9b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"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-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "a974a6c116eaa067", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "9812f24bbcad34e6", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "4e6ee6487df3cd1a", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "a118d1b8fa3bbf6d", "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": "f1e29cac0a52dc29", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-46bdfee1f83de315", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/next.config.ts:24"}, "properties": {"repobilityId": "72560c689809bfcc", "scanner": "scanner-primary", "fingerprint": "46bdfee1f83de315", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5fd0413f25f8a6a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/public/sw.js:1"}, "properties": {"repobilityId": "25573668fec7e156", "scanner": "scanner-primary", "fingerprint": "d5fd0413f25f8a6a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aac3a5e9e296591b", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/sw.ts:18"}, "properties": {"repobilityId": "2ec07d93843a3699", "scanner": "scanner-primary", "fingerprint": "aac3a5e9e296591b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9293a5df0ee6848", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/CommandPalette.tsx:60"}, "properties": {"repobilityId": "37ff98d51b0e1756", "scanner": "scanner-primary", "fingerprint": "e9293a5df0ee6848", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c55975170f7871ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/dem/TargetSheet.tsx:308"}, "properties": {"repobilityId": "017b597783ceda9e", "scanner": "scanner-primary", "fingerprint": "c55975170f7871ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8aafaad6ce96db69", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/dem/TopHeader.tsx:44"}, "properties": {"repobilityId": "65faafd2209c2ac7", "scanner": "scanner-primary", "fingerprint": "8aafaad6ce96db69", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-260af3b35d486968", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/dem/CompliancePanel.tsx:5"}, "properties": {"repobilityId": "977d47aa202b01ff", "scanner": "scanner-primary", "fingerprint": "260af3b35d486968", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-753871d4a5e1c41d", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/dem/ChatPanel.tsx:27"}, "properties": {"repobilityId": "a389ab7bde14e5be", "scanner": "scanner-primary", "fingerprint": "753871d4a5e1c41d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab6f70440b17c413", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/app/targets/[id]/page.tsx:60"}, "properties": {"repobilityId": "3bfc942d5b66f823", "scanner": "scanner-primary", "fingerprint": "ab6f70440b17c413", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ac4077ba4b208f91", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/api.ts:232"}, "properties": {"repobilityId": "4ee31bea718352f9", "scanner": "scanner-primary", "fingerprint": "ac4077ba4b208f91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f5e12a49b438777", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/dem/adapter.ts:71"}, "properties": {"repobilityId": "fc5af1b7b68c279f", "scanner": "scanner-primary", "fingerprint": "8f5e12a49b438777", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54d5284ca96a58df", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/usePipeline.ts:30"}, "properties": {"repobilityId": "cc3c9b3bd15997d6", "scanner": "scanner-primary", "fingerprint": "54d5284ca96a58df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6c5ee58ead724966", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useSignals.ts:31"}, "properties": {"repobilityId": "4cbeb4c7be1a6bd0", "scanner": "scanner-primary", "fingerprint": "6c5ee58ead724966", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-86713237880da673", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useGraph.ts:48"}, "properties": {"repobilityId": "fdd1b04af6386aea", "scanner": "scanner-primary", "fingerprint": "86713237880da673", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d7ecd87ed84a11ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useTarget.ts:8"}, "properties": {"repobilityId": "f2069cf67db93de6", "scanner": "scanner-primary", "fingerprint": "d7ecd87ed84a11ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e7b575a89a9e979", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/lib/queries/useTargets.ts:8"}, "properties": {"repobilityId": "c4de52c735986c3a", "scanner": "scanner-primary", "fingerprint": "9e7b575a89a9e979", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed209e5bbf843452", "level": "none", "message": {"text": "Commented-code block (5 lines) in infrastructure/agents/scripts/neo4j/neo4j_loader.py:29"}, "properties": {"repobilityId": "2c61c3ec1603a43a", "scanner": "scanner-primary", "fingerprint": "ed209e5bbf843452", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f623e7a9a9f16ce3", "level": "none", "message": {"text": "Commented-code block (6 lines) in infrastructure/agents/platform/config.py:36"}, "properties": {"repobilityId": "70b6ae2caf01aca8", "scanner": "scanner-primary", "fingerprint": "f623e7a9a9f16ce3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7c89b61b5c20065", "level": "none", "message": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/tests/test_first_run_coverage.py:56"}, "properties": {"repobilityId": "a55bed5e5253fb34", "scanner": "scanner-primary", "fingerprint": "f7c89b61b5c20065", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74c22b043990ecd7", "level": "none", "message": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/silver_codegen.py:138"}, "properties": {"repobilityId": "7eaf918a83d933ea", "scanner": "scanner-primary", "fingerprint": "74c22b043990ecd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0db042a39025bfe", "level": "none", "message": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/silver_engine.py:300"}, "properties": {"repobilityId": "07976ecf6543c34e", "scanner": "scanner-primary", "fingerprint": "d0db042a39025bfe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1a5802457520a70", "level": "none", "message": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/codegen.py:211"}, "properties": {"repobilityId": "66e8fc1dc7b30ab1", "scanner": "scanner-primary", "fingerprint": "d1a5802457520a70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a3a90822e10a7ad", "level": "none", "message": {"text": "Commented-code block (6 lines) in infrastructure/agents/platform/ingestion/engine.py:117"}, "properties": {"repobilityId": "619a8045cb67a969", "scanner": "scanner-primary", "fingerprint": "9a3a90822e10a7ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57c3614f11ad5c4f", "level": "none", "message": {"text": "Commented-code block (6 lines) in infrastructure/agents/platform/ingestion/neo4j_sync.py:159"}, "properties": {"repobilityId": "e147e9d54b839062", "scanner": "scanner-primary", "fingerprint": "57c3614f11ad5c4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95076bf18c2e1d35", "level": "none", "message": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/sources/sec_edgar.py:60"}, "properties": {"repobilityId": "a6bc492cf2492dd6", "scanner": "scanner-primary", "fingerprint": "95076bf18c2e1d35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75a7763a1fe701fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/sources/crt_sh.py:55"}, "properties": {"repobilityId": "f8d4519b6c5a9e3d", "scanner": "scanner-primary", "fingerprint": "75a7763a1fe701fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a231d3148df73ad7", "level": "none", "message": {"text": "Commented-code block (5 lines) in infrastructure/agents/platform/ingestion/sources/gleif.py:93"}, "properties": {"repobilityId": "32c8a0482158fadf", "scanner": "scanner-primary", "fingerprint": "a231d3148df73ad7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d34332ff46e67003", "level": "note", "message": {"text": "Legacy-named symbol `recaptcha_v2` in infrastructure/agents/platform/tools/captcha.py:79"}, "properties": {"repobilityId": "7047d5db99899015", "scanner": "scanner-primary", "fingerprint": "d34332ff46e67003", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8572af50ffa46682", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/main.py:239"}, "properties": {"repobilityId": "3f42e7f1f2e57486", "scanner": "scanner-primary", "fingerprint": "8572af50ffa46682", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52ce49700b5c931f", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/clients/llm_validator.py:94"}, "properties": {"repobilityId": "af722a671fc481b1", "scanner": "scanner-primary", "fingerprint": "52ce49700b5c931f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d7b41b54c6b86aa", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/clients/deepseek.py:18"}, "properties": {"repobilityId": "3f7a5cd1dcf4805f", "scanner": "scanner-primary", "fingerprint": "4d7b41b54c6b86aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd6119755ec2f303", "level": "note", "message": {"text": "Legacy-named symbol `_scoring_detail_legacy` in backend/routers/datalake.py:2826"}, "properties": {"repobilityId": "13bbdd142e0a721c", "scanner": "scanner-primary", "fingerprint": "cd6119755ec2f303", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-03891d9f4eff9279", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/routers/datalake.py:188"}, "properties": {"repobilityId": "198531e98b8ab1de", "scanner": "scanner-primary", "fingerprint": "03891d9f4eff9279", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c41bb1a1f430bd6", "level": "note", "message": {"text": "39 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "4a6a9acd19ef8277", "scanner": "scanner-primary", "fingerprint": "5c41bb1a1f430bd6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "8dd5e0e2f9c34101", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "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": "8af0d684b0293380", "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": "997e525c94488efa", "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": "9b4c69b6875cb19b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-a82831f76222791f", "level": "error", "message": {"text": "FastAPI POST `copilot_redteam` without auth dependency \u2014 backend/main.py:1860"}, "properties": {"repobilityId": "f3db3ab6512ffd82", "scanner": "scanner-primary", "fingerprint": "a82831f76222791f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 1860}}}]}, {"ruleId": "scanner-21aab7a056e57a43", "level": "error", "message": {"text": "FastAPI POST `refresh_targets` without auth dependency \u2014 backend/main.py:2670"}, "properties": {"repobilityId": "6d76e5049283ab57", "scanner": "scanner-primary", "fingerprint": "21aab7a056e57a43", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 2670}}}]}, {"ruleId": "scanner-a3fa5cb05b89401a", "level": "error", "message": {"text": "FastAPI POST `update_scoring_config` without auth dependency \u2014 backend/routers/scoring.py:23"}, "properties": {"repobilityId": "6bc2c60c44d36951", "scanner": "scanner-primary", "fingerprint": "a3fa5cb05b89401a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routers/scoring.py"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-df4f42a6369115a5", "level": "error", "message": {"text": "FastAPI POST `move_pipeline_card` without auth dependency \u2014 backend/routers/pipeline.py:47"}, "properties": {"repobilityId": "a17ec03803e230b6", "scanner": "scanner-primary", "fingerprint": "df4f42a6369115a5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routers/pipeline.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-c7152121938bddff", "level": "error", "message": {"text": "Dangling fetch: POST /api/datalake/agent-retry/${a.source_id} (frontend/src/components/dem/AuditView.tsx:159)"}, "properties": {"repobilityId": "fe904efaae702511", "scanner": "scanner-primary", "fingerprint": "c7152121938bddff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80667cefe18c4e6c", "level": "error", "message": {"text": "Dangling fetch: GET /api/datalake/fiche/${siren} (frontend/src/components/dem/CompareView.tsx:173)"}, "properties": {"repobilityId": "a461ae9786717684", "scanner": "scanner-primary", "fingerprint": "80667cefe18c4e6c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18b7c258d5b4ecd6", "level": "error", "message": {"text": "Dangling fetch: GET /api/datalake/dashboard (frontend/src/components/dem/TopHeader.tsx:44)"}, "properties": {"repobilityId": "3e23b64ed914195e", "scanner": "scanner-primary", "fingerprint": "18b7c258d5b4ecd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc01127dcffe3ae8", "level": "error", "message": {"text": "Dangling fetch: GET /api/scoring/config (frontend/src/app/targets/page.tsx:104)"}, "properties": {"repobilityId": "3af93725de7eeb46", "scanner": "scanner-primary", "fingerprint": "cc01127dcffe3ae8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ce3dac23211bfdb", "level": "error", "message": {"text": "Dangling fetch: POST /api/scoring/config (frontend/src/app/targets/page.tsx:155)"}, "properties": {"repobilityId": "45a86112dbf923a6", "scanner": "scanner-primary", "fingerprint": "7ce3dac23211bfdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-558b61402813bb75", "level": "error", "message": {"text": "Dangling fetch: GET /api/datalake/entreprise/search?q=${encodeURIComponent(q)}&limit=${limit} (frontend/src/lib/dem/adapter.ts:277)"}, "properties": {"repobilityId": "f97277661493365a", "scanner": "scanner-primary", "fingerprint": "558b61402813bb75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ad2315babddce25", "level": "error", "message": {"text": "Dangling fetch: POST /api/pipeline/move (frontend/src/lib/queries/usePipeline.ts:42)"}, "properties": {"repobilityId": "309233af869965d1", "scanner": "scanner-primary", "fingerprint": "3ad2315babddce25", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-529f90a31c4e5e62", "level": "error", "message": {"text": "Dangling fetch: GET /api/datalake/graph (frontend/src/lib/queries/useGraph.ts:48)"}, "properties": {"repobilityId": "0c7cdae78f583f70", "scanner": "scanner-primary", "fingerprint": "529f90a31c4e5e62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3140e61d7cac5091", "level": "note", "message": {"text": "Unused endpoint: GET /agents"}, "properties": {"repobilityId": "8b0174cc3e0763d0", "scanner": "scanner-primary", "fingerprint": "3140e61d7cac5091", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90fabf3759d68967", "level": "note", "message": {"text": "Unused endpoint: GET /agents/{name}"}, "properties": {"repobilityId": "0ba47de066e85611", "scanner": "scanner-primary", "fingerprint": "90fabf3759d68967", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ab9bf5db6820af4", "level": "note", "message": {"text": "Unused endpoint: GET /models"}, "properties": {"repobilityId": "616fcbf45a170756", "scanner": "scanner-primary", "fingerprint": "2ab9bf5db6820af4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-433af3cc42046e9f", "level": "note", "message": {"text": "Unused endpoint: POST /models/{name:path}/pull"}, "properties": {"repobilityId": "5437ba36f6998165", "scanner": "scanner-primary", "fingerprint": "433af3cc42046e9f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c2e0403bcc53989f", "level": "note", "message": {"text": "Unused endpoint: POST /agents/{name}/invoke"}, "properties": {"repobilityId": "a2819556a4a16799", "scanner": "scanner-primary", "fingerprint": "c2e0403bcc53989f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6108904bc84e76e", "level": "note", "message": {"text": "Unused endpoint: POST /agents/reload"}, "properties": {"repobilityId": "d5bfc1b8bac698c2", "scanner": "scanner-primary", "fingerprint": "a6108904bc84e76e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bf4a8487241c9946", "level": "note", "message": {"text": "Unused endpoint: GET /ingestion/sources"}, "properties": {"repobilityId": "1b6f8274117cb67b", "scanner": "scanner-primary", "fingerprint": "bf4a8487241c9946", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0b4088a105587f3d", "level": "note", "message": {"text": "Unused endpoint: POST /ingestion/run/{source_id}"}, "properties": {"repobilityId": "ebb1133523e7cb2e", "scanner": "scanner-primary", "fingerprint": "0b4088a105587f3d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-46270c684d22df01", "level": "note", "message": {"text": "Unused endpoint: GET /ingestion/freshness"}, "properties": {"repobilityId": "4bf8e908f6aa2f1f", "scanner": "scanner-primary", "fingerprint": "46270c684d22df01", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-913f4bfd8842f58c", "level": "note", "message": {"text": "Unused endpoint: GET /ingestion/specs"}, "properties": {"repobilityId": "85f5a04c8c4ed9e7", "scanner": "scanner-primary", "fingerprint": "913f4bfd8842f58c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e2f58e6a965a073", "level": "note", "message": {"text": "Unused endpoint: GET /ingestion/specs/{source_id}"}, "properties": {"repobilityId": "99ca397a65ea1560", "scanner": "scanner-primary", "fingerprint": "3e2f58e6a965a073", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-42a5701f097e6bea", "level": "note", "message": {"text": "Unused endpoint: POST /ingestion/generate/{source_id}"}, "properties": {"repobilityId": "0dfe37a0c497dc6e", "scanner": "scanner-primary", "fingerprint": "42a5701f097e6bea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e970d9ee4ac8d7ca", "level": "note", "message": {"text": "Unused endpoint: POST /ingestion/discover/{source_id}"}, "properties": {"repobilityId": "24df8f7bf427d1ce", "scanner": "scanner-primary", "fingerprint": "e970d9ee4ac8d7ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6966b05a02e5042", "level": "note", "message": {"text": "Unused endpoint: POST /agents/openclaw/run"}, "properties": {"repobilityId": "8f7b22e271616e11", "scanner": "scanner-primary", "fingerprint": "e6966b05a02e5042", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-caefc7b8ae755c5e", "level": "note", "message": {"text": "Unused endpoint: POST /agents/source-hunter/hunt/{source_id}"}, "properties": {"repobilityId": "1aea8e45bb90689a", "scanner": "scanner-primary", "fingerprint": "caefc7b8ae755c5e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "3c95aa69206af894", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-938db3367539adcc", "level": "note", "message": {"text": "Unused endpoint: GET /api/targets/search-pappers"}, "properties": {"repobilityId": "07c80a0470f8f32e", "scanner": "scanner-primary", "fingerprint": "938db3367539adcc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f48754aefc17956", "level": "note", "message": {"text": "Unused endpoint: GET /api/pappers/search-edrcf"}, "properties": {"repobilityId": "a83f7b152f63bd6c", "scanner": "scanner-primary", "fingerprint": "2f48754aefc17956", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd26948757fffac2", "level": "note", "message": {"text": "Unused endpoint: GET /api/pappers/company/{siren}"}, "properties": {"repobilityId": "44279767301be34e", "scanner": "scanner-primary", "fingerprint": "fd26948757fffac2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-919f587534330116", "level": "note", "message": {"text": "Unused endpoint: GET /api/pappers/dirigeants/{siren}"}, "properties": {"repobilityId": "064d4a70d1c38525", "scanner": "scanner-primary", "fingerprint": "919f587534330116", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9cc7b22f7c179a20", "level": "note", "message": {"text": "Unused endpoint: GET /api/pappers/siren/{siren}"}, "properties": {"repobilityId": "c4119a71bae5f1e1", "scanner": "scanner-primary", "fingerprint": "9cc7b22f7c179a20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a26b008ecf780095", "level": "note", "message": {"text": "Unused endpoint: GET /api/pappers/statut/{siren}"}, "properties": {"repobilityId": "25a5ee9a498dd93e", "scanner": "scanner-primary", "fingerprint": "a26b008ecf780095", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b946baa5b7eb418", "level": "note", "message": {"text": "Unused endpoint: GET /api/pappers/bodacc/{siren}"}, "properties": {"repobilityId": "b874503950085b38", "scanner": "scanner-primary", "fingerprint": "8b946baa5b7eb418", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-07fb837b77b5d1a7", "level": "note", "message": {"text": "Unused endpoint: GET /api/pappers/dirigeant/search"}, "properties": {"repobilityId": "e3e58e7dee26fa37", "scanner": "scanner-primary", "fingerprint": "07fb837b77b5d1a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1d91de7c66968948", "level": "note", "message": {"text": "Unused endpoint: GET /api/pappers/procedures/{siren}"}, "properties": {"repobilityId": "4ef14be2fb888240", "scanner": "scanner-primary", "fingerprint": "1d91de7c66968948", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b3c4dfe0c183af8", "level": "note", "message": {"text": "Unused endpoint: GET /api/pappers/concurrents/{siren}"}, "properties": {"repobilityId": "d75ecbbac4cf4418", "scanner": "scanner-primary", "fingerprint": "5b3c4dfe0c183af8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0891895b1a3778f", "level": "note", "message": {"text": "Unused endpoint: GET /api/pappers/score/{siren}"}, "properties": {"repobilityId": "8994116c18fde4dc", "scanner": "scanner-primary", "fingerprint": "f0891895b1a3778f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-57e3a551e3718182", "level": "note", "message": {"text": "Unused endpoint: POST /api/copilot/redteam"}, "properties": {"repobilityId": "50b4254341be6a89", "scanner": "scanner-primary", "fingerprint": "57e3a551e3718182", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9185678549c1ef6d", "level": "note", "message": {"text": "Unused endpoint: GET /api/graph"}, "properties": {"repobilityId": "4a8b9fb380e00a40", "scanner": "scanner-primary", "fingerprint": "9185678549c1ef6d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e2103dbc81e9235c", "level": "note", "message": {"text": "Unused endpoint: GET /api/sectors"}, "properties": {"repobilityId": "339969bd83590fc0", "scanner": "scanner-primary", "fingerprint": "e2103dbc81e9235c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-21ce19858248be7a", "level": "note", "message": {"text": "Unused endpoint: POST /api/refresh-targets"}, "properties": {"repobilityId": "11e6c4877e7edcd8", "scanner": "scanner-primary", "fingerprint": "21ce19858248be7a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e86da4a89fa9e3f1", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/refresh-db"}, "properties": {"repobilityId": "cc3179e10815b2ea", "scanner": "scanner-primary", "fingerprint": "e86da4a89fa9e3f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67b6f7db369bc057", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/index-stats"}, "properties": {"repobilityId": "c5da6fdfeae8285c", "scanner": "scanner-primary", "fingerprint": "67b6f7db369bc057", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f3559fcf4a07584b", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/rebuild-index"}, "properties": {"repobilityId": "909aa356939c2552", "scanner": "scanner-primary", "fingerprint": "f3559fcf4a07584b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8aef40f99f8197f3", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/enrich-batch"}, "properties": {"repobilityId": "1bd42a23881062fe", "scanner": "scanner-primary", "fingerprint": "8aef40f99f8197f3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f9be7742f00a351", "level": "note", "message": {"text": "Unused endpoint: GET /_introspect"}, "properties": {"repobilityId": "5ee434014f8dce0e", "scanner": "scanner-primary", "fingerprint": "0f9be7742f00a351", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-57d57804b276920c", "level": "note", "message": {"text": "Unused endpoint: GET /tables"}, "properties": {"repobilityId": "5c4b186c715caa97", "scanner": "scanner-primary", "fingerprint": "57d57804b276920c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b0444438d5b865e", "level": "note", "message": {"text": "Unused endpoint: GET /fiche/{siren}"}, "properties": {"repobilityId": "cfcf701238692b91", "scanner": "scanner-primary", "fingerprint": "4b0444438d5b865e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9052649322d99497", "level": "note", "message": {"text": "Unused endpoint: GET /scoring/{siren}"}, "properties": {"repobilityId": "2f5d7ae2e0eb24fd", "scanner": "scanner-primary", "fingerprint": "9052649322d99497", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05f8ef97277e44bf", "level": "note", "message": {"text": "Unused endpoint: GET /_scoring_detail_legacy/{siren}"}, "properties": {"repobilityId": "0813c250cd175181", "scanner": "scanner-primary", "fingerprint": "05f8ef97277e44bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-60b45835fe3da1d1", "level": "note", "message": {"text": "Unused endpoint: GET /dirigeant/{nom}/{prenom}/{date_naissance}"}, "properties": {"repobilityId": "eb703a69cf0f646a", "scanner": "scanner-primary", "fingerprint": "60b45835fe3da1d1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-83c4b9e6ed6b3aec", "level": "note", "message": {"text": "Unused endpoint: GET /dirigeant/{nom}/{prenom}"}, "properties": {"repobilityId": "a854817267e4f1ee", "scanner": "scanner-primary", "fingerprint": "83c4b9e6ed6b3aec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-420d3c724c4e2cdf", "level": "note", "message": {"text": "Unused endpoint: GET /groupe/{siren}"}, "properties": {"repobilityId": "73f547add396c80f", "scanner": "scanner-primary", "fingerprint": "420d3c724c4e2cdf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-070540251dfd4f45", "level": "note", "message": {"text": "Unused endpoint: GET /groupe-filiation/{siren}"}, "properties": {"repobilityId": "c2748c00d9dc6a8f", "scanner": "scanner-primary", "fingerprint": "070540251dfd4f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f8021e6b271e44dc", "level": "note", "message": {"text": "Unused endpoint: GET /pitch/{siren}"}, "properties": {"repobilityId": "90ef1ecbc9e98ff9", "scanner": "scanner-primary", "fingerprint": "f8021e6b271e44dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10576aea564bf835", "level": "note", "message": {"text": "Unused endpoint: GET /pitch-pdf/{siren}"}, "properties": {"repobilityId": "8dfef88536786d1f", "scanner": "scanner-primary", "fingerprint": "10576aea564bf835", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d504b80adc9409ec", "level": "note", "message": {"text": "Unused endpoint: GET /dashboard"}, "properties": {"repobilityId": "027a7ede506fa5ff", "scanner": "scanner-primary", "fingerprint": "d504b80adc9409ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-59b2727837364407", "level": "note", "message": {"text": "Unused endpoint: GET /agent-actions"}, "properties": {"repobilityId": "ad38bb56b9abc383", "scanner": "scanner-primary", "fingerprint": "59b2727837364407", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f550c2f5da77b83", "level": "note", "message": {"text": "Unused endpoint: GET /graph/{siren}"}, "properties": {"repobilityId": "02196c3b92c495d4", "scanner": "scanner-primary", "fingerprint": "7f550c2f5da77b83", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c0ac2ef565a5459b", "level": "note", "message": {"text": "Unused endpoint: GET /graph"}, "properties": {"repobilityId": "609c22f1196587d8", "scanner": "scanner-primary", "fingerprint": "c0ac2ef565a5459b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}