{"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-849ad0e891777102", "name": "Possibly dead Python function: do_run_migrations", "shortDescription": {"text": "Possibly dead Python function: do_run_migrations"}, "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-958f5c97a47dab75", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-fcb49b48bed515f1", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-61853a2374b7cc80", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-c2bc636a86839835", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-9c05119e27da30e7", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-ffe9c26240883136", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-f329e0ef5f07c412", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-ea9f01fafbbb3d48", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-8379849938b85115", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-abfaf210aeedae8f", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-49df2ab0378ffcbb", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-a367a3ce72569aef", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-16190c3eca96d60a", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-87ff6ada304f4d96", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-6a2bdb0fc17fdbb1", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-070994620875731d", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-65247b4d1060336a", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-9526f21d81e70b8c", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-8494ea0e8b173e22", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-152e4303217f2f62", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-fec137f5257f45ec", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-2168735ddcef0ff7", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-ddad995ed7ec6ae2", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-e4aa379968805d07", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-bb6e5ee8b2df096c", "name": "Possibly dead Python function: transcribe_stream", "shortDescription": {"text": "Possibly dead Python function: transcribe_stream"}, "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-1e4f85e7f3fe909a", "name": "Possibly dead Python function: store_compacted_summary", "shortDescription": {"text": "Possibly dead Python function: store_compacted_summary"}, "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-a587bf6d9a7fc7c0", "name": "Possibly dead Python function: unregister", "shortDescription": {"text": "Possibly dead Python function: unregister"}, "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-9a9251b8ab68813f", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/app/_client.tsx:346", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/app/_client.tsx:346"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef466aa1b8218374", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/[username]/admin/observatory/_client.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/[username]/admin/observatory/_client.tsx:66"}, "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-53ef5462c082c17f", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/[username]/admin/analytics/_client.tsx:590", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/[username]/admin/analytics/_client.tsx:590"}, "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-2653a6ad2b2dd362", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/[username]/admin/assets/_client.tsx:288", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/[username]/admin/assets/_client.tsx:288"}, "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-432112866a5249d6", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/SubGoalBar.tsx:34", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/SubGoalBar.tsx:34"}, "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-93252c8f1bb3d534", "name": "TODO/FIXME marker in shipping code \u2014 frontend/src/components/ViewerStage.tsx:83", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/components/ViewerStage.tsx:83"}, "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-3b3bc5480bd05c4c", "name": "TODO/FIXME marker in shipping code \u2014 frontend/src/components/ChatFeed.tsx:79", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/components/ChatFeed.tsx:79"}, "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-b6b6c4c25183a82d", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/AdminModal.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/AdminModal.tsx:168"}, "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-6d0c26ef2bbe9c85", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/SupportersRail.tsx:31", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/SupportersRail.tsx:31"}, "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-c4fad40df6ea7070", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/admin/AdminShell.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/admin/AdminShell.tsx:114"}, "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-d169864216f78a7e", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/features/liquid-glass/dataviz.tsx:53", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/features/liquid-glass/dataviz.tsx:53"}, "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-bea772d9b54ecb61", "name": "TODO/FIXME marker in shipping code \u2014 frontend/src/features/creator-home/CreatorHomeShell.tsx:38", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/features/creator-home/CreatorHomeShell.tsx:38"}, "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-368d588b3343f771", "name": "TODO/FIXME marker in shipping code \u2014 frontend/src/features/viewer/ViewerEventsProvider.tsx:184", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/features/viewer/ViewerEventsProvider.tsx:184"}, "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-6793111d0c1185f6", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/features/emoteController/expressionController.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/features/emoteController/expressionController.ts:55"}, "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-28e07bd0b8984f28", "name": "TODO/FIXME marker in shipping code \u2014 frontend/src/features/scene-editor-v2/command-palette/CommandPalette.tsx:28", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/features/scene-editor-v2/command-palette/CommandPalette.tsx:28"}, "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-7826964b5425c4c8", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/lib/editorWebSocket.ts:171", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/lib/editorWebSocket.ts:171"}, "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-0cf17c5709fbc3c3", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.13-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.13-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-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-9bb4481b60c78381", "name": "Possible secret in backend/tests/unit/test_director_llm_client.py", "shortDescription": {"text": "Possible secret in backend/tests/unit/test_director_llm_client.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d31be3f6685c8220", "name": "Possible secret in backend/tests/unit/test_director_anthropic_brain.py", "shortDescription": {"text": "Possible secret in backend/tests/unit/test_director_anthropic_brain.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f73e2de6c6c7b41a", "name": "Possible secret in ops/scripts/init-postgres.sh", "shortDescription": {"text": "Possible secret in ops/scripts/init-postgres.sh"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "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-99ebe7a77bd1631e", "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@v3 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-0acf113a26d5eebe", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9015d2e97322ea38", "name": "Very large file: backend/tests/unit/voice/test_livekit_agent.py (2288 lines)", "shortDescription": {"text": "Very large file: backend/tests/unit/voice/test_livekit_agent.py (2288 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-8b71293f62f30484", "name": "Very large file: backend/shugu/voice/livekit_agent.py (1361 lines)", "shortDescription": {"text": "Very large file: backend/shugu/voice/livekit_agent.py (1361 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 35 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 110 placeholder/mock markers across 48 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-d966e7eed83ae82b", "name": "Commented-code block (6 lines) in backend/tests/unit/test_director_vip_and_silence.py:143", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/unit/test_director_vip_and_silence.py:143"}, "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-82ef4dbce215824c", "name": "Legacy-named symbol `forged_old` in backend/tests/unit/test_viewer_token.py:320", "shortDescription": {"text": "Legacy-named symbol `forged_old` in backend/tests/unit/test_viewer_token.py:320"}, "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-11280df9a071f499", "name": "Commented-code block (5 lines) in backend/tests/unit/test_director_workers.py:514", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/unit/test_director_workers.py:514"}, "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-8e2c4a870413b916", "name": "Commented-code block (6 lines) in backend/tests/unit/test_arch_memory_isolation.py:217", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/unit/test_arch_memory_isolation.py:217"}, "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-19794ebafccdb983", "name": "Commented-code block (5 lines) in backend/tests/unit/test_editor_ws.py:274", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/unit/test_editor_ws.py:274"}, "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-0394f9db681db510", "name": "Commented-code block (6 lines) in backend/tests/unit/test_director_orchestrator.py:477", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/unit/test_director_orchestrator.py:477"}, "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-db263004a31ea46b", "name": "Legacy-named symbol `model_copy` in backend/tests/unit/test_viewer_routes.py:358", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/tests/unit/test_viewer_routes.py:358"}, "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-028ed95be9f8c670", "name": "Commented-code block (5 lines) in backend/tests/unit/voice/test_livekit_agent.py:1594", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/unit/voice/test_livekit_agent.py:1594"}, "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-0872cda673919604", "name": "Legacy-named symbol `settings_no_legacy` in backend/tests/integration/test_auth_unification.py:179", "shortDescription": {"text": "Legacy-named symbol `settings_no_legacy` in backend/tests/integration/test_auth_unification.py:179"}, "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-e72b825bf0a560b6", "name": "Commented-code block (11 lines) in backend/tests/integration/test_agent_runner_lifespan.py:125", "shortDescription": {"text": "Commented-code block (11 lines) in backend/tests/integration/test_agent_runner_lifespan.py:125"}, "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-290942b220332758", "name": "Commented-code block (6 lines) in backend/tests/integration/voice/test_audio_clock_wiring.py:148", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/integration/voice/test_audio_clock_wiring.py:148"}, "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-0b7ae5a6aed35139", "name": "Commented-code block (5 lines) in backend/alembic/versions/0011_compactor_fields_memory_facts.py:102", "shortDescription": {"text": "Commented-code block (5 lines) in backend/alembic/versions/0011_compactor_fields_memory_facts.py:102"}, "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-7041365e6479e5d3", "name": "Commented-code block (5 lines) in backend/alembic/versions/0007_scene_editor_tables.py:83", "shortDescription": {"text": "Commented-code block (5 lines) in backend/alembic/versions/0007_scene_editor_tables.py:83"}, "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-1357a603bb66c02b", "name": "Commented-code block (5 lines) in backend/alembic/versions/0006_memory_facts_hnsw.py:50", "shortDescription": {"text": "Commented-code block (5 lines) in backend/alembic/versions/0006_memory_facts_hnsw.py:50"}, "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-657934b34f6f3006", "name": "Commented-code block (6 lines) in backend/alembic/versions/0002_asset_registry.py:72", "shortDescription": {"text": "Commented-code block (6 lines) in backend/alembic/versions/0002_asset_registry.py:72"}, "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-c5b32381ba9b2d96", "name": "Legacy-named symbol `eleven_multilingual_v2` in backend/shugu/config.py:299", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in backend/shugu/config.py:299"}, "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-9e292c14eacc79ad", "name": "Commented-code block (5 lines) in backend/shugu/config.py:71", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/config.py: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-e80406b2f5eda60c", "name": "Commented-code block (5 lines) in backend/shugu/app.py:126", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/app.py:126"}, "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-b33713ff7252fc4e", "name": "Commented-code block (5 lines) in backend/shugu/voice/livekit_agent.py:154", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/voice/livekit_agent.py:154"}, "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-dd00ec5d0ce9d3bc", "name": "Stub function `cancel` (body is just `pass`/`return`) \u2014 backend/shugu/voice/filler_bank.py:63", "shortDescription": {"text": "Stub function `cancel` (body is just `pass`/`return`) \u2014 backend/shugu/voice/filler_bank.py:63"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b2e0b8504ea8026e", "name": "Stub function `record_publisher_drop` (body is just `pass`/`return`) \u2014 backend/shugu/voice/pipeline_metrics.py:264", "shortDescription": {"text": "Stub function `record_publisher_drop` (body is just `pass`/`return`) \u2014 backend/shugu/voice/pipeline_metrics.py:264"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5dd64e8df6a47634", "name": "Commented-code block (8 lines) in backend/shugu/voice/livekit_publisher.py:55", "shortDescription": {"text": "Commented-code block (8 lines) in backend/shugu/voice/livekit_publisher.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-3bd55eed5653bb0a", "name": "Commented-code block (5 lines) in backend/shugu/voice/audio_bridge.py:174", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/voice/audio_bridge.py:174"}, "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-4aa95ede42638c6a", "name": "Commented-code block (6 lines) in backend/shugu/memory/maintenance.py:165", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/memory/maintenance.py:165"}, "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-6a2bbf4317f6d063", "name": "Legacy-named symbol `cleaned_copy` in backend/shugu/memory/agent.py:812", "shortDescription": {"text": "Legacy-named symbol `cleaned_copy` in backend/shugu/memory/agent.py:812"}, "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-ade588b17dff60e6", "name": "Commented-code block (5 lines) in backend/shugu/memory/agent.py:100", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/memory/agent.py:100"}, "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-3d21aa51b1db1e90", "name": "Commented-code block (10 lines) in backend/shugu/memory/episodes.py:27", "shortDescription": {"text": "Commented-code block (10 lines) in backend/shugu/memory/episodes.py: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-cb592ee6dd398430", "name": "Commented-code block (5 lines) in backend/shugu/memory/embedder.py:188", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/memory/embedder.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-490aac6723d7da0d", "name": "Commented-code block (5 lines) in backend/shugu/memory/extractors/patterns.py:60", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/memory/extractors/patterns.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-3fc564a364119408", "name": "Legacy-named symbol `t2a_v2` in backend/shugu/adapters/tts_minimax.py:4", "shortDescription": {"text": "Legacy-named symbol `t2a_v2` in backend/shugu/adapters/tts_minimax.py:4"}, "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-bcf28c8caf0c80d1", "name": "Commented-code block (6 lines) in backend/shugu/adapters/smtp_resend.py:31", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/adapters/smtp_resend.py:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a609a9164958848c", "name": "Stub function `record_tick` (body is just `pass`/`return`) \u2014 backend/shugu/observability/metrics.py:136", "shortDescription": {"text": "Stub function `record_tick` (body is just `pass`/`return`) \u2014 backend/shugu/observability/metrics.py:136"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4825f4ad1197b445", "name": "Commented-code block (5 lines) in backend/shugu/observability/log_config.py:65", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/observability/log_config.py:65"}, "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-652d1d1475afeec7", "name": "Commented-code block (6 lines) in backend/shugu/agent/runner.py:100", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/agent/runner.py:100"}, "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-cefbc952000a325d", "name": "Commented-code block (6 lines) in backend/shugu/agent/action_parser.py:61", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/agent/action_parser.py:61"}, "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-1db685def59244bf", "name": "Commented-code block (7 lines) in backend/shugu/agent/tool_call_parser.py:41", "shortDescription": {"text": "Commented-code block (7 lines) in backend/shugu/agent/tool_call_parser.py:41"}, "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-d868983494cf3e26", "name": "Commented-code block (5 lines) in backend/shugu/auth/viewer_token.py:232", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/auth/viewer_token.py: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-6ee52d0bad1c9a41", "name": "Commented-code block (15 lines) in backend/shugu/policy/matrix.py:107", "shortDescription": {"text": "Commented-code block (15 lines) in backend/shugu/policy/matrix.py:107"}, "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-4cc34f4726a808b7", "name": "Commented-code block (6 lines) in backend/shugu/scene_composer/player.py:228", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/scene_composer/player.py:228"}, "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-2198466af6b220ff", "name": "Commented-code block (6 lines) in backend/shugu/pipeline/picker.py:191", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/pipeline/picker.py:191"}, "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-6d0250e4a8fbbf5a", "name": "Commented-code block (7 lines) in backend/shugu/pipeline/workers.py:71", "shortDescription": {"text": "Commented-code block (7 lines) in backend/shugu/pipeline/workers.py: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-1cbc647a6ac0b867", "name": "Commented-code block (5 lines) in backend/shugu/world/types.py:33", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/world/types.py:33"}, "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-1dd043be2dc9560a", "name": "Commented-code block (8 lines) in backend/shugu/world/state_store.py:167", "shortDescription": {"text": "Commented-code block (8 lines) in backend/shugu/world/state_store.py:167"}, "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-3001aed4ab8ba552", "name": "Commented-code block (5 lines) in backend/shugu/db/models.py:25", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/db/models.py:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f038ecac4f7049af", "name": "Commented-code block (7 lines) in backend/shugu/core/identity.py:36", "shortDescription": {"text": "Commented-code block (7 lines) in backend/shugu/core/identity.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-b441ca3d91994721", "name": "Commented-code block (5 lines) in backend/shugu/core/event_bus_factory.py:43", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/core/event_bus_factory.py:43"}, "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-ca713af980c505e8", "name": "Commented-code block (6 lines) in backend/shugu/director/background.py:254", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/director/background.py:254"}, "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-41ef480318b3a023", "name": "Commented-code block (6 lines) in backend/shugu/director/state_store.py:83", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/director/state_store.py:83"}, "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-5fe8048bc2167a24", "name": "Commented-code block (5 lines) in backend/shugu/director/triggers.py:121", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/director/triggers.py:121"}, "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-02fbcc1c06cad33d", "name": "Commented-code block (6 lines) in backend/shugu/director/workers/vfx.py:59", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/director/workers/vfx.py:59"}, "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-3d4fd9e268c2649a", "name": "Commented-code block (6 lines) in backend/shugu/director/workers/base.py:29", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/director/workers/base.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-4d5a6278554f1bcf", "name": "Commented-code block (5 lines) in backend/shugu/senses/types.py:54", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/senses/types.py:54"}, "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-c8ccab6fdafd9ef3", "name": "Commented-code block (5 lines) in backend/shugu/middleware/security_headers.py:119", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/middleware/security_headers.py:119"}, "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-2d61e90102f984d2", "name": "Commented-code block (11 lines) in backend/shugu/routes/world_ws.py:170", "shortDescription": {"text": "Commented-code block (11 lines) in backend/shugu/routes/world_ws.py:170"}, "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-f3905ab749c4cf76", "name": "Commented-code block (5 lines) in backend/shugu/routes/scene_composer_api.py:377", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/routes/scene_composer_api.py:377"}, "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-58a445d18e6bb8cf", "name": "Commented-code block (5 lines) in backend/shugu/routes/test_director_api.py:65", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/routes/test_director_api.py:65"}, "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-d3d02d35d6ea39ab", "name": "Commented-code block (7 lines) in backend/shugu/routes/visitor_ws.py:47", "shortDescription": {"text": "Commented-code block (7 lines) in backend/shugu/routes/visitor_ws.py:47"}, "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-35e6bfc8b7571e1c", "name": "Commented-code block (7 lines) in backend/shugu/routes/viewer.py:293", "shortDescription": {"text": "Commented-code block (7 lines) in backend/shugu/routes/viewer.py:293"}, "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-5a76c9f42be262fa", "name": "Commented-code block (5 lines) in backend/shugu/routes/editor_ws.py:272", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/routes/editor_ws.py:272"}, "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-93b89f5e17707377", "name": "Commented-code block (6 lines) in backend/shugu/routes/observatory.py:226", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/routes/observatory.py:226"}, "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-691325aea53b2ead", "name": "Commented-code block (5 lines) in backend/shugu/routes/auth.py:176", "shortDescription": {"text": "Commented-code block (5 lines) in backend/shugu/routes/auth.py:176"}, "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-2e91d599b8a2b787", "name": "Commented-code block (6 lines) in backend/shugu/routes/operator_ws.py:154", "shortDescription": {"text": "Commented-code block (6 lines) in backend/shugu/routes/operator_ws.py:154"}, "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-1133469b9dfe47bf", "name": "Legacy-named symbol `shugu_fr_v1` in tools/voice_clone/upload_clone.py:9", "shortDescription": {"text": "Legacy-named symbol `shugu_fr_v1` in tools/voice_clone/upload_clone.py:9"}, "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-3ae9ded042bcaffd", "name": "Commented-code block (5 lines) in frontend/next.config.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/next.config.js:4"}, "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-a11c49b70ed11a12", "name": "Commented-code block (7 lines) in frontend/eslint.config.mjs:5", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/eslint.config.mjs: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-e718085de7e6fc0f", "name": "Commented-code block (7 lines) in frontend/playwright.config.ts:24", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/playwright.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-6cb3487034180e3c", "name": "Commented-code block (5 lines) in frontend/tailwind.config.js:33", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/tailwind.config.js:33"}, "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-4786abe3b037c5eb", "name": "Commented-code block (5 lines) in frontend/src/app/_client.tsx:438", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/app/_client.tsx:438"}, "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-486bf6adee05a4e5", "name": "Commented-code block (6 lines) in frontend/src/app/vip/room/_client.tsx:33", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/app/vip/room/_client.tsx:33"}, "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-11de5aa88e9315bb", "name": "Commented-code block (5 lines) in frontend/src/app/[username]/admin/observatory/_client.tsx:111", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/app/[username]/admin/observatory/_client.tsx:111"}, "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-0be93b2563c981a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/utils/auth.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/utils/auth.ts:7"}, "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-ae0230ae9ed5f2bd", "name": "Commented-code block (8 lines) in frontend/src/stores/useSceneEditorStore.ts:489", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/stores/useSceneEditorStore.ts:489"}, "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-7839f247057447d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/AdminModal.tsx:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/AdminModal.tsx:55"}, "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-62fcb076bd7af67c", "name": "Commented-code block (7 lines) in frontend/src/components/admin/AdminAuthGuard.tsx:125", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/components/admin/AdminAuthGuard.tsx:125"}, "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-761d1c4d9b5c6d59", "name": "Commented-code block (5 lines) in frontend/src/features/liquid-glass/__tests__/toast.test.tsx:70", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/features/liquid-glass/__tests__/toast.test.tsx:70"}, "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-a00eb07743e0d27a", "name": "Commented-code block (5 lines) in frontend/src/features/viewer/useViewerToken.ts:129", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/features/viewer/useViewerToken.ts:129"}, "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-30310fb0da73db57", "name": "Commented-code block (5 lines) in frontend/src/features/viewer/ViewerEventsProvider.tsx:121", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/features/viewer/ViewerEventsProvider.tsx:121"}, "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-d19e53de5ed90527", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/features/viewer/__tests__/useViewerToken.test.tsx:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/features/viewer/__tests__/useViewerToken.test.tsx:96"}, "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-507abeb02984c779", "name": "Commented-code block (6 lines) in frontend/src/features/viewer/__tests__/ViewerEventsProvider.test.tsx:243", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/features/viewer/__tests__/ViewerEventsProvider.test.tsx:243"}, "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-7f6a13c1737318c4", "name": "Legacy-named symbol `aura_v2` in frontend/src/features/editor-shared/mock-data.ts:165", "shortDescription": {"text": "Legacy-named symbol `aura_v2` in frontend/src/features/editor-shared/mock-data.ts:165"}, "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-ca15d5c1cdebad86", "name": "Commented-code block (5 lines) in frontend/src/features/livekit/LiveKitProvider.tsx:211", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/features/livekit/LiveKitProvider.tsx: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-8239b14ec5508e5a", "name": "Commented-code block (5 lines) in frontend/src/features/livekit/__tests__/LiveKitClient.test.ts:24", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/features/livekit/__tests__/LiveKitClient.test.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-3c27c529e894cf2b", "name": "Commented-code block (5 lines) in frontend/src/features/vrmViewer/viewer.ts:41", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/features/vrmViewer/viewer.ts:41"}, "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-0d8ba047b1515c2b", "name": "Commented-code block (8 lines) in frontend/src/features/vrmViewer/model.ts:132", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/features/vrmViewer/model.ts:132"}, "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-4a43fdd35cee05e9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/features/scene-composer/api/httpClient.ts:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/features/scene-composer/api/httpClient.ts:4"}, "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-88d3c21b03ba5f12", "name": "Commented-code block (5 lines) in frontend/src/features/scene-composer/viewer/SceneComposerViewer.tsx:112", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/features/scene-composer/viewer/SceneComposerViewer.tsx:112"}, "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-38b87cecfb2b2490", "name": "Commented-code block (8 lines) in frontend/src/features/scene-composer/viewer/three-stage/transform-controls.ts:97", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/features/scene-composer/viewer/three-stage/transform-controls.ts:97"}, "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-29082c6606d8ee24", "name": "Commented-code block (6 lines) in frontend/src/features/scene-editor-v2/world/useApplyWorldStateToViewer.ts:60", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/features/scene-editor-v2/world/useApplyWorldStateToViewer.ts: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-335881995f17240f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/features/lipSync/lipSync.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/features/lipSync/lipSync.ts:52"}, "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-fdc56a3d4e9569ce", "name": "Commented-code block (5 lines) in frontend/src/lib/useEditorWebSocket.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/useEditorWebSocket.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5f9d1b2bc0b2d13", "name": "Commented-code block (5 lines) in frontend/src/lib/__tests__/editorPopout.test.ts:142", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/__tests__/editorPopout.test.ts:142"}, "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-cf57e7cf32301676", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/adminObservatoryMissionsClient.ts:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/adminObservatoryMissionsClient.ts:90"}, "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-a51520c13eb323a4", "name": "Commented-code block (5 lines) in frontend/e2e/scene-editor-store.spec.ts:50", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/e2e/scene-editor-store.spec.ts:50"}, "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-44b2bfa9bbe107ba", "name": "Commented-code block (5 lines) in frontend/e2e/scene-editor-viewer.spec.ts:52", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/e2e/scene-editor-viewer.spec.ts:52"}, "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-24b14bbd6bc2076a", "name": "Commented-code block (7 lines) in frontend/e2e/scene-editor-popout.spec.ts:118", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/e2e/scene-editor-popout.spec.ts:118"}, "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-cd3db30c347562f5", "name": "Commented-code block (5 lines) in frontend/e2e/voice-body-pipeline.spec.ts:226", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/e2e/voice-body-pipeline.spec.ts:226"}, "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-b0b5e7cb1208a7cd", "name": "13 env vars used in code but missing from .env.example", "shortDescription": {"text": "13 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CI`, `NEXT_PUBLIC_BASE_PATH`, `NEXT_PUBLIC_E2E`, `NEXT_PUBLIC_SITE_URL`, `NODE_ENV`, `PLAYWRIGHT_BACKEND_URL`, `PLAYWRIGHT_BASE_URL`, `PORT` + 5 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-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:\nbackend/shugu/voice/filler_bank.py:preload, backend/shugu/voice/filler_bank.py:preload\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/shugu/voice/metrics.py:record_turn, backend/shugu/voice/metrics.py:record_turn, backend/shugu/voice/metrics.py:record_turn\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-4e181e7568ce1ea1", "name": "FastAPI POST `voice_token_bootstrap` without auth dependency \u2014 backend/shugu/routes/viewer.py:494", "shortDescription": {"text": "FastAPI POST `voice_token_bootstrap` without auth dependency \u2014 backend/shugu/routes/viewer.py:494"}, "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-e2bb21b815a6c3f6", "name": "FastAPI POST `voice_token_refresh` without auth dependency \u2014 backend/shugu/routes/viewer.py:569", "shortDescription": {"text": "FastAPI POST `voice_token_refresh` without auth dependency \u2014 backend/shugu/routes/viewer.py:569"}, "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-212adc69c54bc813", "name": "FastAPI POST `refresh` without auth dependency \u2014 backend/shugu/routes/auth.py:305", "shortDescription": {"text": "FastAPI POST `refresh` without auth dependency \u2014 backend/shugu/routes/auth.py:305"}, "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-54900a22bdddaf96", "name": "FastAPI POST `verify_email` without auth dependency \u2014 backend/shugu/routes/account.py:262", "shortDescription": {"text": "FastAPI POST `verify_email` without auth dependency \u2014 backend/shugu/routes/account.py:262"}, "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-8fc4bd3a8596a862", "name": "FastAPI POST `resend_verify` without auth dependency \u2014 backend/shugu/routes/account.py:287", "shortDescription": {"text": "FastAPI POST `resend_verify` without auth dependency \u2014 backend/shugu/routes/account.py:287"}, "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-a021ce18601eff01", "name": "FastAPI POST `refresh` without auth dependency \u2014 backend/shugu/routes/account.py:396", "shortDescription": {"text": "FastAPI POST `refresh` without auth dependency \u2014 backend/shugu/routes/account.py:396"}, "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-a65cbf27965f4756", "name": "Dangling fetch: POST /api/account/resend-verify (frontend/src/app/account/login/_client.tsx:69)", "shortDescription": {"text": "Dangling fetch: POST /api/account/resend-verify (frontend/src/app/account/login/_client.tsx:69)"}, "fullDescription": {"text": "`frontend/src/app/account/login/_client.tsx:69` calls `POST /api/account/resend-verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/resend-verify`\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-18975a2d907cbfb4", "name": "Dangling fetch: POST /api/refresh-token (frontend/src/utils/auth.ts:7)", "shortDescription": {"text": "Dangling fetch: POST /api/refresh-token (frontend/src/utils/auth.ts:7)"}, "fullDescription": {"text": "`frontend/src/utils/auth.ts:7` calls `POST /api/refresh-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/refresh-token`\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-20d8330ae2d28bbb", "name": "Dangling fetch: DELETE /api/admin/bans/${ip} (frontend/src/components/AdminModal.tsx:92)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/bans/${ip} (frontend/src/components/AdminModal.tsx:92)"}, "fullDescription": {"text": "`frontend/src/components/AdminModal.tsx:92` calls `DELETE /api/admin/bans/${ip}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/bans/<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-fa2785ddfb7208d0", "name": "Dangling fetch: GET /api/registry/${encodeURIComponent(kind)} (frontend/src/features/registry/registryClient.ts:42)", "shortDescription": {"text": "Dangling fetch: GET /api/registry/${encodeURIComponent(kind)} (frontend/src/features/registry/registryClient.ts:42)"}, "fullDescription": {"text": "`frontend/src/features/registry/registryClient.ts:42` calls `GET /api/registry/${encodeURIComponent(kind)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/registry/<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-e5173e605b738eed", "name": "Dangling fetch: GET /api/registry/gesture (frontend/src/features/animations/animationPack.ts:76)", "shortDescription": {"text": "Dangling fetch: GET /api/registry/gesture (frontend/src/features/animations/animationPack.ts:76)"}, "fullDescription": {"text": "`frontend/src/features/animations/animationPack.ts:76` calls `GET /api/registry/gesture` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/registry/gesture`\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-83dacd0a9eec7a82", "name": "Dangling fetch: GET /api/assets/catalog (frontend/src/features/scene-composer/api/catalogClient.ts:90)", "shortDescription": {"text": "Dangling fetch: GET /api/assets/catalog (frontend/src/features/scene-composer/api/catalogClient.ts:90)"}, "fullDescription": {"text": "`frontend/src/features/scene-composer/api/catalogClient.ts:90` calls `GET /api/assets/catalog` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/assets/catalog`\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-6a019d7ab6a66e49", "name": "Dangling fetch: GET /api/test (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:78)", "shortDescription": {"text": "Dangling fetch: GET /api/test (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:78)"}, "fullDescription": {"text": "`frontend/src/features/scene-composer/__tests__/httpClient.test.ts:78` calls `GET /api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/test`\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-33dd58c319bf466b", "name": "Dangling fetch: GET /api/test (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:84)", "shortDescription": {"text": "Dangling fetch: GET /api/test (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:84)"}, "fullDescription": {"text": "`frontend/src/features/scene-composer/__tests__/httpClient.test.ts:84` calls `GET /api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/test`\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-7927807ccd4c7e99", "name": "Dangling fetch: GET /api/test (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:93)", "shortDescription": {"text": "Dangling fetch: GET /api/test (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:93)"}, "fullDescription": {"text": "`frontend/src/features/scene-composer/__tests__/httpClient.test.ts:93` calls `GET /api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/test`\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-9e1cc9c837c0028f", "name": "Dangling fetch: DELETE /api/delete (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:107)", "shortDescription": {"text": "Dangling fetch: DELETE /api/delete (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:107)"}, "fullDescription": {"text": "`frontend/src/features/scene-composer/__tests__/httpClient.test.ts:107` calls `DELETE /api/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/delete`\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-68527fdb31dd7658", "name": "Dangling fetch: GET /api/protected (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:115)", "shortDescription": {"text": "Dangling fetch: GET /api/protected (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:115)"}, "fullDescription": {"text": "`frontend/src/features/scene-composer/__tests__/httpClient.test.ts:115` calls `GET /api/protected` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/protected`\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-6d951563da2b4fa8", "name": "Dangling fetch: GET /api/protected (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:122)", "shortDescription": {"text": "Dangling fetch: GET /api/protected (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:122)"}, "fullDescription": {"text": "`frontend/src/features/scene-composer/__tests__/httpClient.test.ts:122` calls `GET /api/protected` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/protected`\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-875a613edbb532f7", "name": "Dangling fetch: GET /api/scenes/missing (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:143)", "shortDescription": {"text": "Dangling fetch: GET /api/scenes/missing (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:143)"}, "fullDescription": {"text": "`frontend/src/features/scene-composer/__tests__/httpClient.test.ts:143` calls `GET /api/scenes/missing` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/scenes/missing`\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-09900e7f747346d3", "name": "Dangling fetch: GET /api/boom (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:158)", "shortDescription": {"text": "Dangling fetch: GET /api/boom (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:158)"}, "fullDescription": {"text": "`frontend/src/features/scene-composer/__tests__/httpClient.test.ts:158` calls `GET /api/boom` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/boom`\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-fe1009e75e3baed2", "name": "Dangling fetch: GET /api/proxy (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:172)", "shortDescription": {"text": "Dangling fetch: GET /api/proxy (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:172)"}, "fullDescription": {"text": "`frontend/src/features/scene-composer/__tests__/httpClient.test.ts:172` calls `GET /api/proxy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/proxy`\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-fa73997ce83e5748", "name": "Dangling fetch: POST /api/livekit/token (frontend/src/services/livekitClient.ts:22)", "shortDescription": {"text": "Dangling fetch: POST /api/livekit/token (frontend/src/services/livekitClient.ts:22)"}, "fullDescription": {"text": "`frontend/src/services/livekitClient.ts:22` calls `POST /api/livekit/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/livekit/token`\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-714d597bca687fdb", "name": "Dangling fetch: GET /auth/me (frontend/src/services/shuguClient.ts:143)", "shortDescription": {"text": "Dangling fetch: GET /auth/me (frontend/src/services/shuguClient.ts:143)"}, "fullDescription": {"text": "`frontend/src/services/shuguClient.ts:143` calls `GET /auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\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-dcbec6b99e69c0fd", "name": "Dangling fetch: POST /auth/login (frontend/src/services/shuguClient.ts:161)", "shortDescription": {"text": "Dangling fetch: POST /auth/login (frontend/src/services/shuguClient.ts:161)"}, "fullDescription": {"text": "`frontend/src/services/shuguClient.ts:161` calls `POST /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/login`\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-ff0b0f506d11160a", "name": "Dangling fetch: POST /auth/logout (frontend/src/services/shuguClient.ts:177)", "shortDescription": {"text": "Dangling fetch: POST /auth/logout (frontend/src/services/shuguClient.ts:177)"}, "fullDescription": {"text": "`frontend/src/services/shuguClient.ts:177` calls `POST /auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/logout`\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-78a4943d76406ce3", "name": "Dangling fetch: POST /api/account/register (frontend/src/services/accountClient.ts:58)", "shortDescription": {"text": "Dangling fetch: POST /api/account/register (frontend/src/services/accountClient.ts:58)"}, "fullDescription": {"text": "`frontend/src/services/accountClient.ts:58` calls `POST /api/account/register` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/account/register`\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-5f08fe9a98689c2f", "name": "Dangling fetch: POST /api/account/login (frontend/src/services/accountClient.ts:64)", "shortDescription": {"text": "Dangling fetch: POST /api/account/login (frontend/src/services/accountClient.ts:64)"}, "fullDescription": {"text": "`frontend/src/services/accountClient.ts:64` calls `POST /api/account/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/account/login`\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-329e4aeb758130d8", "name": "Dangling fetch: POST /api/account/logout (frontend/src/services/accountClient.ts:68)", "shortDescription": {"text": "Dangling fetch: POST /api/account/logout (frontend/src/services/accountClient.ts:68)"}, "fullDescription": {"text": "`frontend/src/services/accountClient.ts:68` calls `POST /api/account/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/account/logout`\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-9d3f2aac1457c394", "name": "Dangling fetch: POST /api/account/refresh (frontend/src/services/accountClient.ts:72)", "shortDescription": {"text": "Dangling fetch: POST /api/account/refresh (frontend/src/services/accountClient.ts:72)"}, "fullDescription": {"text": "`frontend/src/services/accountClient.ts:72` calls `POST /api/account/refresh` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/account/refresh`\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-5cc0e7675fffb935", "name": "Dangling fetch: GET /api/account/me (frontend/src/services/accountClient.ts:77)", "shortDescription": {"text": "Dangling fetch: GET /api/account/me (frontend/src/services/accountClient.ts:77)"}, "fullDescription": {"text": "`frontend/src/services/accountClient.ts:77` calls `GET /api/account/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/account/me`\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-38882a4f06591e6a", "name": "Dangling fetch: POST /api/account/verify-email (frontend/src/services/accountClient.ts:85)", "shortDescription": {"text": "Dangling fetch: POST /api/account/verify-email (frontend/src/services/accountClient.ts:85)"}, "fullDescription": {"text": "`frontend/src/services/accountClient.ts:85` calls `POST /api/account/verify-email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/account/verify-email`\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-2fa3dbad91995472", "name": "Dangling fetch: POST /api/account/resend-verify (frontend/src/services/accountClient.ts:92)", "shortDescription": {"text": "Dangling fetch: POST /api/account/resend-verify (frontend/src/services/accountClient.ts:92)"}, "fullDescription": {"text": "`frontend/src/services/accountClient.ts:92` calls `POST /api/account/resend-verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/account/resend-verify`\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-5765cac084ef6f1c", "name": "Dangling fetch: POST /api/admin/users/${user_id}/vip (frontend/src/services/adminUsersClient.ts:74)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/users/${user_id}/vip (frontend/src/services/adminUsersClient.ts:74)"}, "fullDescription": {"text": "`frontend/src/services/adminUsersClient.ts:74` calls `POST /api/admin/users/${user_id}/vip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/users/<p>/vip`\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-e4ef146d2c48e2e6", "name": "Dangling fetch: POST /api/admin/users/${user_id}/deactivate (frontend/src/services/adminUsersClient.ts:81)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/users/${user_id}/deactivate (frontend/src/services/adminUsersClient.ts:81)"}, "fullDescription": {"text": "`frontend/src/services/adminUsersClient.ts:81` calls `POST /api/admin/users/${user_id}/deactivate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/users/<p>/deactivate`\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-905adbd96184ef82", "name": "Dangling fetch: GET /api/admin/analytics/funnel (frontend/src/services/adminAnalyticsClient.ts:226)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/analytics/funnel (frontend/src/services/adminAnalyticsClient.ts:226)"}, "fullDescription": {"text": "`frontend/src/services/adminAnalyticsClient.ts:226` calls `GET /api/admin/analytics/funnel` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/analytics/funnel`\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-267312894ffe01b4", "name": "Dangling fetch: GET /api/admin/registry?${qs.toString()} (frontend/src/services/adminAssetsClient.ts:68)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/registry?${qs.toString()} (frontend/src/services/adminAssetsClient.ts:68)"}, "fullDescription": {"text": "`frontend/src/services/adminAssetsClient.ts:68` calls `GET /api/admin/registry?${qs.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/registry`\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-d3ea604a6bfdb016", "name": "Dangling fetch: POST /api/admin/registry (frontend/src/services/adminAssetsClient.ts:72)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/registry (frontend/src/services/adminAssetsClient.ts:72)"}, "fullDescription": {"text": "`frontend/src/services/adminAssetsClient.ts:72` calls `POST /api/admin/registry` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/registry`\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-ae989df86b5ded87", "name": "Dangling fetch: PATCH /api/admin/registry/${id} (frontend/src/services/adminAssetsClient.ts:79)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/registry/${id} (frontend/src/services/adminAssetsClient.ts:79)"}, "fullDescription": {"text": "`frontend/src/services/adminAssetsClient.ts:79` calls `PATCH /api/admin/registry/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/registry/<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-ee330c6cc8f20b4b", "name": "Dangling fetch: DELETE /api/admin/registry/${id} (frontend/src/services/adminAssetsClient.ts:86)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/registry/${id} (frontend/src/services/adminAssetsClient.ts:86)"}, "fullDescription": {"text": "`frontend/src/services/adminAssetsClient.ts:86` calls `DELETE /api/admin/registry/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/registry/<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-56f3f53f260fae2c", "name": "Dangling fetch: GET /api/admin/moderation/bans (frontend/src/services/adminModerationClient.ts:103)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/moderation/bans (frontend/src/services/adminModerationClient.ts:103)"}, "fullDescription": {"text": "`frontend/src/services/adminModerationClient.ts:103` calls `GET /api/admin/moderation/bans` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/moderation/bans`\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-04f29db48466297c", "name": "Dangling fetch: HEAD /ws/editor (frontend/e2e/scene-editor-multi-operator.spec.ts:49)", "shortDescription": {"text": "Dangling fetch: HEAD /ws/editor (frontend/e2e/scene-editor-multi-operator.spec.ts:49)"}, "fullDescription": {"text": "`frontend/e2e/scene-editor-multi-operator.spec.ts:49` calls `HEAD /ws/editor` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ws/editor`\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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`backend/shugu/routes/admin_users.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee78c269a07ef341", "name": "Unused endpoint: POST /{user_id}/vip", "shortDescription": {"text": "Unused endpoint: POST /{user_id}/vip"}, "fullDescription": {"text": "`backend/shugu/routes/admin_users.py` declares `POST /{user_id}/vip` 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-c062ad48fea710f1", "name": "Unused endpoint: POST /{user_id}/deactivate", "shortDescription": {"text": "Unused endpoint: POST /{user_id}/deactivate"}, "fullDescription": {"text": "`backend/shugu/routes/admin_users.py` declares `POST /{user_id}/deactivate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a758c97595233d27", "name": "Unused endpoint: GET /performances", "shortDescription": {"text": "Unused endpoint: GET /performances"}, "fullDescription": {"text": "`backend/shugu/routes/admin.py` declares `GET /performances` 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-469d120c51ab3a02", "name": "Unused endpoint: GET /bans", "shortDescription": {"text": "Unused endpoint: GET /bans"}, "fullDescription": {"text": "`backend/shugu/routes/admin.py` declares `GET /bans` 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-fecae233e730da01", "name": "Unused endpoint: POST /bans", "shortDescription": {"text": "Unused endpoint: POST /bans"}, "fullDescription": {"text": "`backend/shugu/routes/admin.py` declares `POST /bans` 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-c6c2c5de4f16cceb", "name": "Unused endpoint: DELETE /bans/{ip_hash}", "shortDescription": {"text": "Unused endpoint: DELETE /bans/{ip_hash}"}, "fullDescription": {"text": "`backend/shugu/routes/admin.py` declares `DELETE /bans/{ip_hash}` 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-cd8dc4599ec52a08", "name": "Unused endpoint: GET /stats", "shortDescription": {"text": "Unused endpoint: GET /stats"}, "fullDescription": {"text": "`backend/shugu/routes/admin.py` declares `GET /stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-93cbe9356b385a92", "name": "Unused endpoint: GET /quota", "shortDescription": {"text": "Unused endpoint: GET /quota"}, "fullDescription": {"text": "`backend/shugu/routes/admin.py` declares `GET /quota` 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-3929f317ee2031d0", "name": "Unused endpoint: GET /kpis", "shortDescription": {"text": "Unused endpoint: GET /kpis"}, "fullDescription": {"text": "`backend/shugu/routes/admin_analytics.py` declares `GET /kpis` 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-bf8708f93c5621bc", "name": "Unused endpoint: GET /timeline", "shortDescription": {"text": "Unused endpoint: GET /timeline"}, "fullDescription": {"text": "`backend/shugu/routes/admin_analytics.py` declares `GET /timeline` 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-2e0f6a6907dacde3", "name": "Unused endpoint: GET /top-routes", "shortDescription": {"text": "Unused endpoint: GET /top-routes"}, "fullDescription": {"text": "`backend/shugu/routes/admin_analytics.py` declares `GET /top-routes` 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-b2407aa8d3d2fa97", "name": "Unused endpoint: GET /top-visitors", "shortDescription": {"text": "Unused endpoint: GET /top-visitors"}, "fullDescription": {"text": "`backend/shugu/routes/admin_analytics.py` declares `GET /top-visitors` 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-8445b057f72d6ece", "name": "Unused endpoint: GET /heatmap", "shortDescription": {"text": "Unused endpoint: GET /heatmap"}, "fullDescription": {"text": "`backend/shugu/routes/admin_analytics.py` declares `GET /heatmap` 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-3e03a6de6e7f5fe8", "name": "Unused endpoint: GET /funnel", "shortDescription": {"text": "Unused endpoint: GET /funnel"}, "fullDescription": {"text": "`backend/shugu/routes/admin_analytics.py` declares `GET /funnel` 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-4621904ad42efc7f", "name": "Unused endpoint: GET /performances/{performance_id}", "shortDescription": {"text": "Unused endpoint: GET /performances/{performance_id}"}, "fullDescription": {"text": "`backend/shugu/routes/admin_analytics.py` declares `GET /performances/{performance_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-e686634beeea0bb8", "name": "Unused endpoint: GET /export", "shortDescription": {"text": "Unused endpoint: GET /export"}, "fullDescription": {"text": "`backend/shugu/routes/admin_analytics.py` declares `GET /export` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`backend/shugu/routes/health.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-785f13671a3d7c09", "name": "Unused endpoint: GET /missions", "shortDescription": {"text": "Unused endpoint: GET /missions"}, "fullDescription": {"text": "`backend/shugu/routes/observatory_missions.py` declares `GET /missions` 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-ea361d4cc9633291", "name": "Unused endpoint: GET /scenes", "shortDescription": {"text": "Unused endpoint: GET /scenes"}, "fullDescription": {"text": "`backend/shugu/routes/scene_composer_api.py` declares `GET /scenes` 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-cbe29aca6caa9f99", "name": "Unused endpoint: GET /scenes/{scene_id}", "shortDescription": {"text": "Unused endpoint: GET /scenes/{scene_id}"}, "fullDescription": {"text": "`backend/shugu/routes/scene_composer_api.py` declares `GET /scenes/{scene_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-f4230b44965cfb21", "name": "Unused endpoint: POST /scenes", "shortDescription": {"text": "Unused endpoint: POST /scenes"}, "fullDescription": {"text": "`backend/shugu/routes/scene_composer_api.py` declares `POST /scenes` 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-1b24bf3328a99ae9", "name": "Unused endpoint: PUT /scenes/{scene_id}", "shortDescription": {"text": "Unused endpoint: PUT /scenes/{scene_id}"}, "fullDescription": {"text": "`backend/shugu/routes/scene_composer_api.py` declares `PUT /scenes/{scene_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-5dedb8a353ef432e", "name": "Unused endpoint: DELETE /scenes/{scene_id}", "shortDescription": {"text": "Unused endpoint: DELETE /scenes/{scene_id}"}, "fullDescription": {"text": "`backend/shugu/routes/scene_composer_api.py` declares `DELETE /scenes/{scene_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-bc9c455517cad61d", "name": "Unused endpoint: POST /scenes/{scene_id}/play", "shortDescription": {"text": "Unused endpoint: POST /scenes/{scene_id}/play"}, "fullDescription": {"text": "`backend/shugu/routes/scene_composer_api.py` declares `POST /scenes/{scene_id}/play` 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-34a0d470c601d97f", "name": "Unused endpoint: GET /catalog", "shortDescription": {"text": "Unused endpoint: GET /catalog"}, "fullDescription": {"text": "`backend/shugu/routes/assets_catalog_api.py` declares `GET /catalog` 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-7b5910c2c48ef7df", "name": "Unused endpoint: GET /{kind}", "shortDescription": {"text": "Unused endpoint: GET /{kind}"}, "fullDescription": {"text": "`backend/shugu/routes/registry_api.py` declares `GET /{kind}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`backend/shugu/routes/registry_api.py` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02e6a5ae44548add", "name": "Unused endpoint: PATCH /{row_id}", "shortDescription": {"text": "Unused endpoint: PATCH /{row_id}"}, "fullDescription": {"text": "`backend/shugu/routes/registry_api.py` declares `PATCH /{row_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-6551d660e48fe6b0", "name": "Unused endpoint: DELETE /{row_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{row_id}"}, "fullDescription": {"text": "`backend/shugu/routes/registry_api.py` declares `DELETE /{row_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-46bc849e2dfb53e7", "name": "Unused endpoint: POST /{row_id}/preview", "shortDescription": {"text": "Unused endpoint: POST /{row_id}/preview"}, "fullDescription": {"text": "`backend/shugu/routes/registry_api.py` declares `POST /{row_id}/preview` 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-9280037776f2c0c3", "name": "Unused endpoint: POST /api/voice/token", "shortDescription": {"text": "Unused endpoint: POST /api/voice/token"}, "fullDescription": {"text": "`backend/shugu/routes/viewer.py` declares `POST /api/voice/token` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a1a92b245fce1e9", "name": "Unused endpoint: POST /api/voice/token/refresh", "shortDescription": {"text": "Unused endpoint: POST /api/voice/token/refresh"}, "fullDescription": {"text": "`backend/shugu/routes/viewer.py` declares `POST /api/voice/token/refresh` 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-d477716ba309450a", "name": "Unused endpoint: GET /api/viewer/state", "shortDescription": {"text": "Unused endpoint: GET /api/viewer/state"}, "fullDescription": {"text": "`backend/shugu/routes/viewer.py` declares `GET /api/viewer/state` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43269e4e79c2e69e", "name": "Unused endpoint: GET /events", "shortDescription": {"text": "Unused endpoint: GET /events"}, "fullDescription": {"text": "`backend/shugu/routes/observatory.py` declares `GET /events` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`backend/shugu/routes/auth.py` declares `POST /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ce17d6b092a81ca", "name": "Unused endpoint: POST /refresh", "shortDescription": {"text": "Unused endpoint: POST /refresh"}, "fullDescription": {"text": "`backend/shugu/routes/auth.py` declares `POST /refresh` 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-99fc36db98c134ce", "name": "Unused endpoint: POST /logout", "shortDescription": {"text": "Unused endpoint: POST /logout"}, "fullDescription": {"text": "`backend/shugu/routes/auth.py` declares `POST /logout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`backend/shugu/routes/auth.py` declares `GET /me` 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-d21384b205d42a85", "name": "Unused endpoint: POST /admin/promote-operator", "shortDescription": {"text": "Unused endpoint: POST /admin/promote-operator"}, "fullDescription": {"text": "`backend/shugu/routes/auth.py` declares `POST /admin/promote-operator` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-304b6f2b403d93f7", "name": "Unused endpoint: POST /register", "shortDescription": {"text": "Unused endpoint: POST /register"}, "fullDescription": {"text": "`backend/shugu/routes/account.py` declares `POST /register` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0c3bb6af93b4422a", "name": "Unused endpoint: POST /verify-email", "shortDescription": {"text": "Unused endpoint: POST /verify-email"}, "fullDescription": {"text": "`backend/shugu/routes/account.py` declares `POST /verify-email` 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-01dc0a93e0b0b0b0", "name": "Unused endpoint: POST /resend-verify", "shortDescription": {"text": "Unused endpoint: POST /resend-verify"}, "fullDescription": {"text": "`backend/shugu/routes/account.py` declares `POST /resend-verify` 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-8160f3a584180f28", "name": "Unused endpoint: GET /scenes/{scene_id}/drafts", "shortDescription": {"text": "Unused endpoint: GET /scenes/{scene_id}/drafts"}, "fullDescription": {"text": "`backend/shugu/routes/scene_editor_api.py` declares `GET /scenes/{scene_id}/drafts` 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-ccb9e4cffa6ec218", "name": "Unused endpoint: GET /scenes/{scene_id}/drafts/latest", "shortDescription": {"text": "Unused endpoint: GET /scenes/{scene_id}/drafts/latest"}, "fullDescription": {"text": "`backend/shugu/routes/scene_editor_api.py` declares `GET /scenes/{scene_id}/drafts/latest` 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-5af4243b2dfcf266", "name": "Unused endpoint: POST /scenes/{scene_id}/drafts", "shortDescription": {"text": "Unused endpoint: POST /scenes/{scene_id}/drafts"}, "fullDescription": {"text": "`backend/shugu/routes/scene_editor_api.py` declares `POST /scenes/{scene_id}/drafts` 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-5327638847562450", "name": "Unused endpoint: DELETE /scenes/{scene_id}/drafts/{version}", "shortDescription": {"text": "Unused endpoint: DELETE /scenes/{scene_id}/drafts/{version}"}, "fullDescription": {"text": "`backend/shugu/routes/scene_editor_api.py` declares `DELETE /scenes/{scene_id}/drafts/{version}` 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-7aedeadc7f98b772", "name": "Unused endpoint: GET /patterns", "shortDescription": {"text": "Unused endpoint: GET /patterns"}, "fullDescription": {"text": "`backend/shugu/routes/scene_editor_api.py` declares `GET /patterns` 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-1f51028ccc3e5e0d", "name": "Unused endpoint: POST /patterns", "shortDescription": {"text": "Unused endpoint: POST /patterns"}, "fullDescription": {"text": "`backend/shugu/routes/scene_editor_api.py` declares `POST /patterns` 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-a59a81d509f95662", "name": "Unused endpoint: DELETE /patterns/{pattern_id}", "shortDescription": {"text": "Unused endpoint: DELETE /patterns/{pattern_id}"}, "fullDescription": {"text": "`backend/shugu/routes/scene_editor_api.py` declares `DELETE /patterns/{pattern_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}}]}}, "automationDetails": {"id": "repobility/24366"}, "properties": {"repository": "Asurelia/Shugu_stream", "repoUrl": "https://github.com/Asurelia/Shugu_stream", "branch": "main"}, "results": [{"ruleId": "scanner-849ad0e891777102", "level": "note", "message": {"text": "Possibly dead Python function: do_run_migrations"}, "properties": {"repobilityId": "087acb17722cfd2f", "scanner": "scanner-primary", "fingerprint": "849ad0e891777102", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/env.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-958f5c97a47dab75", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "958f5c97a47dab75", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0004_user_accounts.py:32"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fcb49b48bed515f1", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "fcb49b48bed515f1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0004_user_accounts.py:102"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-61853a2374b7cc80", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "61853a2374b7cc80", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0003_seed_registry_kinds.py:108"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c2bc636a86839835", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "c2bc636a86839835", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0003_seed_registry_kinds.py:134"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c05119e27da30e7", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "9c05119e27da30e7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0008_director_tick_cache.py:64"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ffe9c26240883136", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "ffe9c26240883136", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0008_director_tick_cache.py:104"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f329e0ef5f07c412", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "f329e0ef5f07c412", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/2b7bf3181178_initial_schema.py:22"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ea9f01fafbbb3d48", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "ea9f01fafbbb3d48", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/2b7bf3181178_initial_schema.py:73"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8379849938b85115", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "8379849938b85115", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0011_compactor_fields_memory_facts.py:67"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-abfaf210aeedae8f", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "abfaf210aeedae8f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0011_compactor_fields_memory_facts.py:114"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-49df2ab0378ffcbb", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "49df2ab0378ffcbb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0007_scene_editor_tables.py:52"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a367a3ce72569aef", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "a367a3ce72569aef", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0007_scene_editor_tables.py:208"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-16190c3eca96d60a", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "16190c3eca96d60a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0006_memory_facts_hnsw.py:58"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-87ff6ada304f4d96", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "87ff6ada304f4d96", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0006_memory_facts_hnsw.py:72"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a2bdb0fc17fdbb1", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "6a2bdb0fc17fdbb1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0005_memory_agent.py:44"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-070994620875731d", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "070994620875731d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0005_memory_agent.py:126"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-65247b4d1060336a", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "65247b4d1060336a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0009_memory_episodes.py:70"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9526f21d81e70b8c", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "9526f21d81e70b8c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0009_memory_episodes.py:125"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8494ea0e8b173e22", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "8494ea0e8b173e22", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0010_authored_scenes.py:69"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-152e4303217f2f62", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "152e4303217f2f62", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0010_authored_scenes.py:143"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fec137f5257f45ec", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "fec137f5257f45ec", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0012_user_accounts_operator_flag.py:65"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2168735ddcef0ff7", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "2168735ddcef0ff7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0012_user_accounts_operator_flag.py:88"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ddad995ed7ec6ae2", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "ddad995ed7ec6ae2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0002_asset_registry.py:49"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e4aa379968805d07", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "e4aa379968805d07", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0002_asset_registry.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb6e5ee8b2df096c", "level": "note", "message": {"text": "Possibly dead Python function: transcribe_stream"}, "properties": {"repobilityId": "de824c60c89f788f", "scanner": "scanner-primary", "fingerprint": "bb6e5ee8b2df096c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/shugu/voice/stt_local.py:156"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1e4f85e7f3fe909a", "level": "note", "message": {"text": "Possibly dead Python function: store_compacted_summary"}, "properties": {"repobilityId": "2e2b57ead8f85c94", "scanner": "scanner-primary", "fingerprint": "1e4f85e7f3fe909a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/shugu/memory/agent.py:561"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a587bf6d9a7fc7c0", "level": "note", "message": {"text": "Possibly dead Python function: unregister"}, "properties": {"repobilityId": "bd9ffae9093d0ce8", "scanner": "scanner-primary", "fingerprint": "a587bf6d9a7fc7c0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/shugu/agent/tools.py:103"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9a9251b8ab68813f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/app/_client.tsx:346"}, "properties": {"repobilityId": "2a5594eb508a8042", "scanner": "scanner-primary", "fingerprint": "9a9251b8ab68813f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef466aa1b8218374", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/[username]/admin/observatory/_client.tsx:66"}, "properties": {"repobilityId": "7fef7b12b1fc3988", "scanner": "scanner-primary", "fingerprint": "ef466aa1b8218374", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53ef5462c082c17f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/[username]/admin/analytics/_client.tsx:590"}, "properties": {"repobilityId": "c71e971a24e4bc43", "scanner": "scanner-primary", "fingerprint": "53ef5462c082c17f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2653a6ad2b2dd362", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/[username]/admin/assets/_client.tsx:288"}, "properties": {"repobilityId": "cb95be516e623e45", "scanner": "scanner-primary", "fingerprint": "2653a6ad2b2dd362", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-432112866a5249d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/SubGoalBar.tsx:34"}, "properties": {"repobilityId": "b7c533619437375c", "scanner": "scanner-primary", "fingerprint": "432112866a5249d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-93252c8f1bb3d534", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/components/ViewerStage.tsx:83"}, "properties": {"repobilityId": "aa01c4eac41c1701", "scanner": "scanner-primary", "fingerprint": "93252c8f1bb3d534", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3b3bc5480bd05c4c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/components/ChatFeed.tsx:79"}, "properties": {"repobilityId": "f3dc7ebacd48dbcb", "scanner": "scanner-primary", "fingerprint": "3b3bc5480bd05c4c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b6b6c4c25183a82d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/AdminModal.tsx:168"}, "properties": {"repobilityId": "5cfd0e833585ccbf", "scanner": "scanner-primary", "fingerprint": "b6b6c4c25183a82d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d0c26ef2bbe9c85", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/SupportersRail.tsx:31"}, "properties": {"repobilityId": "d5c6005a3570c2f5", "scanner": "scanner-primary", "fingerprint": "6d0c26ef2bbe9c85", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4fad40df6ea7070", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/admin/AdminShell.tsx:114"}, "properties": {"repobilityId": "42712b789c272079", "scanner": "scanner-primary", "fingerprint": "c4fad40df6ea7070", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d169864216f78a7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/features/liquid-glass/dataviz.tsx:53"}, "properties": {"repobilityId": "114185bbb3eb106c", "scanner": "scanner-primary", "fingerprint": "d169864216f78a7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bea772d9b54ecb61", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/features/creator-home/CreatorHomeShell.tsx:38"}, "properties": {"repobilityId": "d88faf4d7f631d58", "scanner": "scanner-primary", "fingerprint": "bea772d9b54ecb61", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-368d588b3343f771", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/features/viewer/ViewerEventsProvider.tsx:184"}, "properties": {"repobilityId": "af5cdd2d81bfb659", "scanner": "scanner-primary", "fingerprint": "368d588b3343f771", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6793111d0c1185f6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/features/emoteController/expressionController.ts:55"}, "properties": {"repobilityId": "b40b632ece90b6c8", "scanner": "scanner-primary", "fingerprint": "6793111d0c1185f6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-28e07bd0b8984f28", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/features/scene-editor-v2/command-palette/CommandPalette.tsx:28"}, "properties": {"repobilityId": "6a9343e81eee80c0", "scanner": "scanner-primary", "fingerprint": "28e07bd0b8984f28", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7826964b5425c4c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/lib/editorWebSocket.ts:171"}, "properties": {"repobilityId": "a9f8b6ac94a537ac", "scanner": "scanner-primary", "fingerprint": "7826964b5425c4c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0cf17c5709fbc3c3", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.13-slim"}, "properties": {"repobilityId": "0a1c92b44ade824a", "scanner": "scanner-primary", "fingerprint": "0cf17c5709fbc3c3", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-0cf17c5709fbc3c3", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.13-slim"}, "properties": {"repobilityId": "654b1f1b860cd3bf", "scanner": "scanner-primary", "fingerprint": "0cf17c5709fbc3c3", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-a7f39cdd5fa21931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "895fb487aa04988c", "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": 5}}}]}, {"ruleId": "scanner-a7f39cdd5fa21931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "65a2cfd845f2e093", "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": 18}}}]}, {"ruleId": "scanner-9bb4481b60c78381", "level": "error", "message": {"text": "Possible secret in backend/tests/unit/test_director_llm_client.py"}, "properties": {"repobilityId": "35085f01b832a045", "scanner": "scanner-primary", "fingerprint": "9bb4481b60c78381", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/tests/unit/test_director_llm_client.py"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-d31be3f6685c8220", "level": "error", "message": {"text": "Possible secret in backend/tests/unit/test_director_anthropic_brain.py"}, "properties": {"repobilityId": "8e7928e7a280aa11", "scanner": "scanner-primary", "fingerprint": "d31be3f6685c8220", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/tests/unit/test_director_anthropic_brain.py"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-f73e2de6c6c7b41a", "level": "error", "message": {"text": "Possible secret in ops/scripts/init-postgres.sh"}, "properties": {"repobilityId": "5d3718ddad21f009", "scanner": "scanner-primary", "fingerprint": "f73e2de6c6c7b41a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ops/scripts/init-postgres.sh"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-f73e2de6c6c7b41a", "level": "error", "message": {"text": "Possible secret in ops/scripts/init-postgres.sh"}, "properties": {"repobilityId": "5d3718ddad21f009", "scanner": "scanner-primary", "fingerprint": "f73e2de6c6c7b41a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ops/scripts/init-postgres.sh"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f57d208548fcef", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 152}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-99ebe7a77bd1631e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f4f7fd74b8bcb63b", "scanner": "scanner-primary", "fingerprint": "99ebe7a77bd1631e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/.github/workflows/nextjs.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-99ebe7a77bd1631e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "29e2006f869b5243", "scanner": "scanner-primary", "fingerprint": "99ebe7a77bd1631e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/.github/workflows/nextjs.yml"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-99ebe7a77bd1631e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "632512a1314de7f2", "scanner": "scanner-primary", "fingerprint": "99ebe7a77bd1631e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/.github/workflows/nextjs.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-99ebe7a77bd1631e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8fc0082a2f288dc0", "scanner": "scanner-primary", "fingerprint": "99ebe7a77bd1631e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/.github/workflows/nextjs.yml"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-99ebe7a77bd1631e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "811060d3df2ada85", "scanner": "scanner-primary", "fingerprint": "99ebe7a77bd1631e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/.github/workflows/nextjs.yml"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-99ebe7a77bd1631e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "050188a0ea6099bc", "scanner": "scanner-primary", "fingerprint": "99ebe7a77bd1631e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/.github/workflows/nextjs.yml"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-0acf113a26d5eebe", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "ef6ca62669ea940d", "scanner": "scanner-primary", "fingerprint": "0acf113a26d5eebe", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/.github/workflows/nextjs.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9015d2e97322ea38", "level": "note", "message": {"text": "Very large file: backend/tests/unit/voice/test_livekit_agent.py (2288 lines)"}, "properties": {"repobilityId": "4fd716ee363a514d", "scanner": "scanner-primary", "fingerprint": "9015d2e97322ea38", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8b71293f62f30484", "level": "note", "message": {"text": "Very large file: backend/shugu/voice/livekit_agent.py (1361 lines)"}, "properties": {"repobilityId": "37ecc898f6c7dcbd", "scanner": "scanner-primary", "fingerprint": "8b71293f62f30484", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "f8c1e2e1faf52ceb", "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": "be11d86b4c12db65", "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": "c12915f5d1dde30a", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-d966e7eed83ae82b", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/unit/test_director_vip_and_silence.py:143"}, "properties": {"repobilityId": "2b98e4e527584ad1", "scanner": "scanner-primary", "fingerprint": "d966e7eed83ae82b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82ef4dbce215824c", "level": "note", "message": {"text": "Legacy-named symbol `forged_old` in backend/tests/unit/test_viewer_token.py:320"}, "properties": {"repobilityId": "8155859b15ab4003", "scanner": "scanner-primary", "fingerprint": "82ef4dbce215824c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-11280df9a071f499", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/unit/test_director_workers.py:514"}, "properties": {"repobilityId": "53ba63b708c855ae", "scanner": "scanner-primary", "fingerprint": "11280df9a071f499", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e2c4a870413b916", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/unit/test_arch_memory_isolation.py:217"}, "properties": {"repobilityId": "c920a391cff5173c", "scanner": "scanner-primary", "fingerprint": "8e2c4a870413b916", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19794ebafccdb983", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/unit/test_editor_ws.py:274"}, "properties": {"repobilityId": "80b9f077ebaffaa8", "scanner": "scanner-primary", "fingerprint": "19794ebafccdb983", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0394f9db681db510", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/unit/test_director_orchestrator.py:477"}, "properties": {"repobilityId": "c3f784b70a32360a", "scanner": "scanner-primary", "fingerprint": "0394f9db681db510", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db263004a31ea46b", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/tests/unit/test_viewer_routes.py:358"}, "properties": {"repobilityId": "5a5c84a301ba1116", "scanner": "scanner-primary", "fingerprint": "db263004a31ea46b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-028ed95be9f8c670", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/unit/voice/test_livekit_agent.py:1594"}, "properties": {"repobilityId": "5640344405f3f866", "scanner": "scanner-primary", "fingerprint": "028ed95be9f8c670", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0872cda673919604", "level": "note", "message": {"text": "Legacy-named symbol `settings_no_legacy` in backend/tests/integration/test_auth_unification.py:179"}, "properties": {"repobilityId": "b439b88b535304f0", "scanner": "scanner-primary", "fingerprint": "0872cda673919604", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e72b825bf0a560b6", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/tests/integration/test_agent_runner_lifespan.py:125"}, "properties": {"repobilityId": "29f4cf7c5f039258", "scanner": "scanner-primary", "fingerprint": "e72b825bf0a560b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-290942b220332758", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/integration/voice/test_audio_clock_wiring.py:148"}, "properties": {"repobilityId": "8dc416928d534512", "scanner": "scanner-primary", "fingerprint": "290942b220332758", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b7ae5a6aed35139", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/alembic/versions/0011_compactor_fields_memory_facts.py:102"}, "properties": {"repobilityId": "26f8f7eb98c4a981", "scanner": "scanner-primary", "fingerprint": "0b7ae5a6aed35139", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7041365e6479e5d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/alembic/versions/0007_scene_editor_tables.py:83"}, "properties": {"repobilityId": "ee3f3619751478b1", "scanner": "scanner-primary", "fingerprint": "7041365e6479e5d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1357a603bb66c02b", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/alembic/versions/0006_memory_facts_hnsw.py:50"}, "properties": {"repobilityId": "94872bd4b1728acb", "scanner": "scanner-primary", "fingerprint": "1357a603bb66c02b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-657934b34f6f3006", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/alembic/versions/0002_asset_registry.py:72"}, "properties": {"repobilityId": "174d5bb65c66f0e6", "scanner": "scanner-primary", "fingerprint": "657934b34f6f3006", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5b32381ba9b2d96", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in backend/shugu/config.py:299"}, "properties": {"repobilityId": "d616719f6378b135", "scanner": "scanner-primary", "fingerprint": "c5b32381ba9b2d96", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9e292c14eacc79ad", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/config.py:71"}, "properties": {"repobilityId": "30b3164bd6b6f94d", "scanner": "scanner-primary", "fingerprint": "9e292c14eacc79ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e80406b2f5eda60c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/app.py:126"}, "properties": {"repobilityId": "c788d6723f5602c6", "scanner": "scanner-primary", "fingerprint": "e80406b2f5eda60c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b33713ff7252fc4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/voice/livekit_agent.py:154"}, "properties": {"repobilityId": "d49fb793e8a78a0e", "scanner": "scanner-primary", "fingerprint": "b33713ff7252fc4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd00ec5d0ce9d3bc", "level": "note", "message": {"text": "Stub function `cancel` (body is just `pass`/`return`) \u2014 backend/shugu/voice/filler_bank.py:63"}, "properties": {"repobilityId": "d27f70f02c169632", "scanner": "scanner-primary", "fingerprint": "dd00ec5d0ce9d3bc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-b2e0b8504ea8026e", "level": "note", "message": {"text": "Stub function `record_publisher_drop` (body is just `pass`/`return`) \u2014 backend/shugu/voice/pipeline_metrics.py:264"}, "properties": {"repobilityId": "94a2213741bdd56c", "scanner": "scanner-primary", "fingerprint": "b2e0b8504ea8026e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-5dd64e8df6a47634", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/shugu/voice/livekit_publisher.py:55"}, "properties": {"repobilityId": "8356e4cbd7f5dcc4", "scanner": "scanner-primary", "fingerprint": "5dd64e8df6a47634", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bd55eed5653bb0a", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/voice/audio_bridge.py:174"}, "properties": {"repobilityId": "228f0c61d96d2ad0", "scanner": "scanner-primary", "fingerprint": "3bd55eed5653bb0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4aa95ede42638c6a", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/memory/maintenance.py:165"}, "properties": {"repobilityId": "53e49dc07185e2d2", "scanner": "scanner-primary", "fingerprint": "4aa95ede42638c6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a2bbf4317f6d063", "level": "note", "message": {"text": "Legacy-named symbol `cleaned_copy` in backend/shugu/memory/agent.py:812"}, "properties": {"repobilityId": "4a6e111f4532525a", "scanner": "scanner-primary", "fingerprint": "6a2bbf4317f6d063", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ade588b17dff60e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/memory/agent.py:100"}, "properties": {"repobilityId": "b5be87437254542a", "scanner": "scanner-primary", "fingerprint": "ade588b17dff60e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d21aa51b1db1e90", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/shugu/memory/episodes.py:27"}, "properties": {"repobilityId": "cdc24f8be3777afe", "scanner": "scanner-primary", "fingerprint": "3d21aa51b1db1e90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb592ee6dd398430", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/memory/embedder.py:188"}, "properties": {"repobilityId": "3951b84c193e3151", "scanner": "scanner-primary", "fingerprint": "cb592ee6dd398430", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-490aac6723d7da0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/memory/extractors/patterns.py:60"}, "properties": {"repobilityId": "57366a525d3a2f23", "scanner": "scanner-primary", "fingerprint": "490aac6723d7da0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fc564a364119408", "level": "note", "message": {"text": "Legacy-named symbol `t2a_v2` in backend/shugu/adapters/tts_minimax.py:4"}, "properties": {"repobilityId": "0d6c02bdafb3318a", "scanner": "scanner-primary", "fingerprint": "3fc564a364119408", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bcf28c8caf0c80d1", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/adapters/smtp_resend.py:31"}, "properties": {"repobilityId": "76e8ba51f6a2b7b7", "scanner": "scanner-primary", "fingerprint": "bcf28c8caf0c80d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a609a9164958848c", "level": "note", "message": {"text": "Stub function `record_tick` (body is just `pass`/`return`) \u2014 backend/shugu/observability/metrics.py:136"}, "properties": {"repobilityId": "76f676e22d001334", "scanner": "scanner-primary", "fingerprint": "a609a9164958848c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-4825f4ad1197b445", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/observability/log_config.py:65"}, "properties": {"repobilityId": "d36ed5082177eddb", "scanner": "scanner-primary", "fingerprint": "4825f4ad1197b445", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-652d1d1475afeec7", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/agent/runner.py:100"}, "properties": {"repobilityId": "3530e4db86b054a9", "scanner": "scanner-primary", "fingerprint": "652d1d1475afeec7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cefbc952000a325d", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/agent/action_parser.py:61"}, "properties": {"repobilityId": "684a4e8e7d1a893b", "scanner": "scanner-primary", "fingerprint": "cefbc952000a325d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1db685def59244bf", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/shugu/agent/tool_call_parser.py:41"}, "properties": {"repobilityId": "19c8fe2945830282", "scanner": "scanner-primary", "fingerprint": "1db685def59244bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d868983494cf3e26", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/auth/viewer_token.py:232"}, "properties": {"repobilityId": "4d265f68cae472ca", "scanner": "scanner-primary", "fingerprint": "d868983494cf3e26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ee52d0bad1c9a41", "level": "none", "message": {"text": "Commented-code block (15 lines) in backend/shugu/policy/matrix.py:107"}, "properties": {"repobilityId": "f828687d8c942ce2", "scanner": "scanner-primary", "fingerprint": "6ee52d0bad1c9a41", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4cc34f4726a808b7", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/scene_composer/player.py:228"}, "properties": {"repobilityId": "924243e2fbde034d", "scanner": "scanner-primary", "fingerprint": "4cc34f4726a808b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2198466af6b220ff", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/pipeline/picker.py:191"}, "properties": {"repobilityId": "31c9a836efb7b977", "scanner": "scanner-primary", "fingerprint": "2198466af6b220ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d0250e4a8fbbf5a", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/shugu/pipeline/workers.py:71"}, "properties": {"repobilityId": "ac1a141cd3092190", "scanner": "scanner-primary", "fingerprint": "6d0250e4a8fbbf5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1cbc647a6ac0b867", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/world/types.py:33"}, "properties": {"repobilityId": "977308a1c1d0f9cc", "scanner": "scanner-primary", "fingerprint": "1cbc647a6ac0b867", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1dd043be2dc9560a", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/shugu/world/state_store.py:167"}, "properties": {"repobilityId": "1a5ca3986585b3b7", "scanner": "scanner-primary", "fingerprint": "1dd043be2dc9560a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3001aed4ab8ba552", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/db/models.py:25"}, "properties": {"repobilityId": "d6d414d5c97b79db", "scanner": "scanner-primary", "fingerprint": "3001aed4ab8ba552", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f038ecac4f7049af", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/shugu/core/identity.py:36"}, "properties": {"repobilityId": "4fd20d7d9bb9d250", "scanner": "scanner-primary", "fingerprint": "f038ecac4f7049af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b441ca3d91994721", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/core/event_bus_factory.py:43"}, "properties": {"repobilityId": "011640c7c3d56d44", "scanner": "scanner-primary", "fingerprint": "b441ca3d91994721", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca713af980c505e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/director/background.py:254"}, "properties": {"repobilityId": "b4c5688b9bb75a96", "scanner": "scanner-primary", "fingerprint": "ca713af980c505e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41ef480318b3a023", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/director/state_store.py:83"}, "properties": {"repobilityId": "2fd9a89fd048af92", "scanner": "scanner-primary", "fingerprint": "41ef480318b3a023", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fe8048bc2167a24", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/director/triggers.py:121"}, "properties": {"repobilityId": "1766f0e8c00472dd", "scanner": "scanner-primary", "fingerprint": "5fe8048bc2167a24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02fbcc1c06cad33d", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/director/workers/vfx.py:59"}, "properties": {"repobilityId": "d529501896898f61", "scanner": "scanner-primary", "fingerprint": "02fbcc1c06cad33d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d4fd9e268c2649a", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/director/workers/base.py:29"}, "properties": {"repobilityId": "9bd755baca507ed6", "scanner": "scanner-primary", "fingerprint": "3d4fd9e268c2649a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d5a6278554f1bcf", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/senses/types.py:54"}, "properties": {"repobilityId": "1452a6b0766fdd96", "scanner": "scanner-primary", "fingerprint": "4d5a6278554f1bcf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8ccab6fdafd9ef3", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/middleware/security_headers.py:119"}, "properties": {"repobilityId": "6d9c446cfce43b45", "scanner": "scanner-primary", "fingerprint": "c8ccab6fdafd9ef3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d61e90102f984d2", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/shugu/routes/world_ws.py:170"}, "properties": {"repobilityId": "28bf6d209fb15f17", "scanner": "scanner-primary", "fingerprint": "2d61e90102f984d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3905ab749c4cf76", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/routes/scene_composer_api.py:377"}, "properties": {"repobilityId": "c428b4e72d5f5e87", "scanner": "scanner-primary", "fingerprint": "f3905ab749c4cf76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58a445d18e6bb8cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/routes/test_director_api.py:65"}, "properties": {"repobilityId": "7a709a7e75f7afc2", "scanner": "scanner-primary", "fingerprint": "58a445d18e6bb8cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3d02d35d6ea39ab", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/shugu/routes/visitor_ws.py:47"}, "properties": {"repobilityId": "df85426de0e00663", "scanner": "scanner-primary", "fingerprint": "d3d02d35d6ea39ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35e6bfc8b7571e1c", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/shugu/routes/viewer.py:293"}, "properties": {"repobilityId": "ed08f7f3b5bed813", "scanner": "scanner-primary", "fingerprint": "35e6bfc8b7571e1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a76c9f42be262fa", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/routes/editor_ws.py:272"}, "properties": {"repobilityId": "6d4df17874891a5f", "scanner": "scanner-primary", "fingerprint": "5a76c9f42be262fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93b89f5e17707377", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/routes/observatory.py:226"}, "properties": {"repobilityId": "19519cc68ca37d10", "scanner": "scanner-primary", "fingerprint": "93b89f5e17707377", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-691325aea53b2ead", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/shugu/routes/auth.py:176"}, "properties": {"repobilityId": "6be00f4a4a622038", "scanner": "scanner-primary", "fingerprint": "691325aea53b2ead", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e91d599b8a2b787", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/shugu/routes/operator_ws.py:154"}, "properties": {"repobilityId": "3ee481a8f3c3e674", "scanner": "scanner-primary", "fingerprint": "2e91d599b8a2b787", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1133469b9dfe47bf", "level": "note", "message": {"text": "Legacy-named symbol `shugu_fr_v1` in tools/voice_clone/upload_clone.py:9"}, "properties": {"repobilityId": "716b86fe381e9e80", "scanner": "scanner-primary", "fingerprint": "1133469b9dfe47bf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3ae9ded042bcaffd", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/next.config.js:4"}, "properties": {"repobilityId": "0bf82ec915f8f73d", "scanner": "scanner-primary", "fingerprint": "3ae9ded042bcaffd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a11c49b70ed11a12", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/eslint.config.mjs:5"}, "properties": {"repobilityId": "f2927c4dfeda01ad", "scanner": "scanner-primary", "fingerprint": "a11c49b70ed11a12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e718085de7e6fc0f", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/playwright.config.ts:24"}, "properties": {"repobilityId": "d31f9213580961a5", "scanner": "scanner-primary", "fingerprint": "e718085de7e6fc0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cb3487034180e3c", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/tailwind.config.js:33"}, "properties": {"repobilityId": "402af87a9baf7e6b", "scanner": "scanner-primary", "fingerprint": "6cb3487034180e3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4786abe3b037c5eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/app/_client.tsx:438"}, "properties": {"repobilityId": "b6cd3d2f59a6aad9", "scanner": "scanner-primary", "fingerprint": "4786abe3b037c5eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-486bf6adee05a4e5", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/app/vip/room/_client.tsx:33"}, "properties": {"repobilityId": "e703ef2cb052ed45", "scanner": "scanner-primary", "fingerprint": "486bf6adee05a4e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11de5aa88e9315bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/app/[username]/admin/observatory/_client.tsx:111"}, "properties": {"repobilityId": "cbef296e0dbc7e1f", "scanner": "scanner-primary", "fingerprint": "11de5aa88e9315bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0be93b2563c981a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/utils/auth.ts:7"}, "properties": {"repobilityId": "48e1a23fb9e21436", "scanner": "scanner-primary", "fingerprint": "0be93b2563c981a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae0230ae9ed5f2bd", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/stores/useSceneEditorStore.ts:489"}, "properties": {"repobilityId": "ab1765d3916653b4", "scanner": "scanner-primary", "fingerprint": "ae0230ae9ed5f2bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7839f247057447d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/AdminModal.tsx:55"}, "properties": {"repobilityId": "e2a0396a56aac7f3", "scanner": "scanner-primary", "fingerprint": "7839f247057447d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-62fcb076bd7af67c", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/components/admin/AdminAuthGuard.tsx:125"}, "properties": {"repobilityId": "b9481066b17a25ed", "scanner": "scanner-primary", "fingerprint": "62fcb076bd7af67c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-761d1c4d9b5c6d59", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/features/liquid-glass/__tests__/toast.test.tsx:70"}, "properties": {"repobilityId": "d814d0c292e6dbc5", "scanner": "scanner-primary", "fingerprint": "761d1c4d9b5c6d59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a00eb07743e0d27a", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/features/viewer/useViewerToken.ts:129"}, "properties": {"repobilityId": "7190b2fb4d4ca2f0", "scanner": "scanner-primary", "fingerprint": "a00eb07743e0d27a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30310fb0da73db57", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/features/viewer/ViewerEventsProvider.tsx:121"}, "properties": {"repobilityId": "5487f7973ed0f4a8", "scanner": "scanner-primary", "fingerprint": "30310fb0da73db57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d19e53de5ed90527", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/features/viewer/__tests__/useViewerToken.test.tsx:96"}, "properties": {"repobilityId": "e19b00790e486157", "scanner": "scanner-primary", "fingerprint": "d19e53de5ed90527", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-507abeb02984c779", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/features/viewer/__tests__/ViewerEventsProvider.test.tsx:243"}, "properties": {"repobilityId": "bb0f023fa64cb09d", "scanner": "scanner-primary", "fingerprint": "507abeb02984c779", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f6a13c1737318c4", "level": "note", "message": {"text": "Legacy-named symbol `aura_v2` in frontend/src/features/editor-shared/mock-data.ts:165"}, "properties": {"repobilityId": "bb01099a005782c4", "scanner": "scanner-primary", "fingerprint": "7f6a13c1737318c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ca15d5c1cdebad86", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/features/livekit/LiveKitProvider.tsx:211"}, "properties": {"repobilityId": "1a1900083ab3132b", "scanner": "scanner-primary", "fingerprint": "ca15d5c1cdebad86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8239b14ec5508e5a", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/features/livekit/__tests__/LiveKitClient.test.ts:24"}, "properties": {"repobilityId": "67c356f373f1ca69", "scanner": "scanner-primary", "fingerprint": "8239b14ec5508e5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c27c529e894cf2b", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/features/vrmViewer/viewer.ts:41"}, "properties": {"repobilityId": "822d78a2b85664ab", "scanner": "scanner-primary", "fingerprint": "3c27c529e894cf2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d8ba047b1515c2b", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/features/vrmViewer/model.ts:132"}, "properties": {"repobilityId": "170ab8e7c23262b7", "scanner": "scanner-primary", "fingerprint": "0d8ba047b1515c2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a43fdd35cee05e9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/features/scene-composer/api/httpClient.ts:4"}, "properties": {"repobilityId": "b991877566af069c", "scanner": "scanner-primary", "fingerprint": "4a43fdd35cee05e9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-88d3c21b03ba5f12", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/features/scene-composer/viewer/SceneComposerViewer.tsx:112"}, "properties": {"repobilityId": "4433aa600340e5d6", "scanner": "scanner-primary", "fingerprint": "88d3c21b03ba5f12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38b87cecfb2b2490", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/features/scene-composer/viewer/three-stage/transform-controls.ts:97"}, "properties": {"repobilityId": "cac31b0bdea43e34", "scanner": "scanner-primary", "fingerprint": "38b87cecfb2b2490", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29082c6606d8ee24", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/features/scene-editor-v2/world/useApplyWorldStateToViewer.ts:60"}, "properties": {"repobilityId": "bd8f25340e49c22f", "scanner": "scanner-primary", "fingerprint": "29082c6606d8ee24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-335881995f17240f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/features/lipSync/lipSync.ts:52"}, "properties": {"repobilityId": "f1e3b90455debe2b", "scanner": "scanner-primary", "fingerprint": "335881995f17240f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fdc56a3d4e9569ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/useEditorWebSocket.ts:31"}, "properties": {"repobilityId": "a6a6068cb8fbb79b", "scanner": "scanner-primary", "fingerprint": "fdc56a3d4e9569ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5f9d1b2bc0b2d13", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/__tests__/editorPopout.test.ts:142"}, "properties": {"repobilityId": "432a1e2d0dc7a5e8", "scanner": "scanner-primary", "fingerprint": "c5f9d1b2bc0b2d13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf57e7cf32301676", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/adminObservatoryMissionsClient.ts:90"}, "properties": {"repobilityId": "f1b5bea99b16840f", "scanner": "scanner-primary", "fingerprint": "cf57e7cf32301676", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a51520c13eb323a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/e2e/scene-editor-store.spec.ts:50"}, "properties": {"repobilityId": "01d3262043134c60", "scanner": "scanner-primary", "fingerprint": "a51520c13eb323a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44b2bfa9bbe107ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/e2e/scene-editor-viewer.spec.ts:52"}, "properties": {"repobilityId": "c6d3e4beabb45093", "scanner": "scanner-primary", "fingerprint": "44b2bfa9bbe107ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24b14bbd6bc2076a", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/e2e/scene-editor-popout.spec.ts:118"}, "properties": {"repobilityId": "ea7f386ca2a90a55", "scanner": "scanner-primary", "fingerprint": "24b14bbd6bc2076a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd3db30c347562f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/e2e/voice-body-pipeline.spec.ts:226"}, "properties": {"repobilityId": "b4dcf4837759da51", "scanner": "scanner-primary", "fingerprint": "cd3db30c347562f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0b5e7cb1208a7cd", "level": "note", "message": {"text": "13 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "2737b8666c1f7eeb", "scanner": "scanner-primary", "fingerprint": "b0b5e7cb1208a7cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "579c1e3873be9be4", "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": "6c2a86231c50240b", "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": "c6609f03d7cfb8b6", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "6b2c05509afd6637", "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": "38009a798b7b3e4f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "a8aa1496329c2b1a", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "6484d0cecdbc492d", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "b8f468e217e08f6e", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "313902802a3b5863", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "39150e9446ab3c0e", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "79aae4d745a61279", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "e3ac47d6b64a710f", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "810fa1d49371ffbb", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "23741a8cd28c3d45", "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": "67463ee58c1b94a5", "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": "30ccdcedc218deae", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "150cb6507bbdb863", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "dc5458bc407e8156", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "b35b6b3dd2ce3728", "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": "d8ebed060b32fd47", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-4e181e7568ce1ea1", "level": "error", "message": {"text": "FastAPI POST `voice_token_bootstrap` without auth dependency \u2014 backend/shugu/routes/viewer.py:494"}, "properties": {"repobilityId": "b1332b0559ae194d", "scanner": "scanner-primary", "fingerprint": "4e181e7568ce1ea1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/shugu/routes/viewer.py"}, "region": {"startLine": 494}}}]}, {"ruleId": "scanner-e2bb21b815a6c3f6", "level": "error", "message": {"text": "FastAPI POST `voice_token_refresh` without auth dependency \u2014 backend/shugu/routes/viewer.py:569"}, "properties": {"repobilityId": "a975c5bdec49f28d", "scanner": "scanner-primary", "fingerprint": "e2bb21b815a6c3f6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/shugu/routes/viewer.py"}, "region": {"startLine": 569}}}]}, {"ruleId": "scanner-212adc69c54bc813", "level": "error", "message": {"text": "FastAPI POST `refresh` without auth dependency \u2014 backend/shugu/routes/auth.py:305"}, "properties": {"repobilityId": "07796464c182d080", "scanner": "scanner-primary", "fingerprint": "212adc69c54bc813", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/shugu/routes/auth.py"}, "region": {"startLine": 305}}}]}, {"ruleId": "scanner-54900a22bdddaf96", "level": "error", "message": {"text": "FastAPI POST `verify_email` without auth dependency \u2014 backend/shugu/routes/account.py:262"}, "properties": {"repobilityId": "c400d09d5e1d27ee", "scanner": "scanner-primary", "fingerprint": "54900a22bdddaf96", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/shugu/routes/account.py"}, "region": {"startLine": 262}}}]}, {"ruleId": "scanner-8fc4bd3a8596a862", "level": "error", "message": {"text": "FastAPI POST `resend_verify` without auth dependency \u2014 backend/shugu/routes/account.py:287"}, "properties": {"repobilityId": "d1f068d2f7fcb748", "scanner": "scanner-primary", "fingerprint": "8fc4bd3a8596a862", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/shugu/routes/account.py"}, "region": {"startLine": 287}}}]}, {"ruleId": "scanner-a021ce18601eff01", "level": "error", "message": {"text": "FastAPI POST `refresh` without auth dependency \u2014 backend/shugu/routes/account.py:396"}, "properties": {"repobilityId": "9b124a0f79f936ac", "scanner": "scanner-primary", "fingerprint": "a021ce18601eff01", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/shugu/routes/account.py"}, "region": {"startLine": 396}}}]}, {"ruleId": "scanner-a65cbf27965f4756", "level": "error", "message": {"text": "Dangling fetch: POST /api/account/resend-verify (frontend/src/app/account/login/_client.tsx:69)"}, "properties": {"repobilityId": "21c3ccae18f8fb0a", "scanner": "scanner-primary", "fingerprint": "a65cbf27965f4756", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18975a2d907cbfb4", "level": "error", "message": {"text": "Dangling fetch: POST /api/refresh-token (frontend/src/utils/auth.ts:7)"}, "properties": {"repobilityId": "93d643a2f3ec791b", "scanner": "scanner-primary", "fingerprint": "18975a2d907cbfb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20d8330ae2d28bbb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/bans/${ip} (frontend/src/components/AdminModal.tsx:92)"}, "properties": {"repobilityId": "7e316e083ea114e1", "scanner": "scanner-primary", "fingerprint": "20d8330ae2d28bbb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa2785ddfb7208d0", "level": "error", "message": {"text": "Dangling fetch: GET /api/registry/${encodeURIComponent(kind)} (frontend/src/features/registry/registryClient.ts:42)"}, "properties": {"repobilityId": "611adec5c4a58fa4", "scanner": "scanner-primary", "fingerprint": "fa2785ddfb7208d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e5173e605b738eed", "level": "error", "message": {"text": "Dangling fetch: GET /api/registry/gesture (frontend/src/features/animations/animationPack.ts:76)"}, "properties": {"repobilityId": "8af4986fc6ffd9fa", "scanner": "scanner-primary", "fingerprint": "e5173e605b738eed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83dacd0a9eec7a82", "level": "error", "message": {"text": "Dangling fetch: GET /api/assets/catalog (frontend/src/features/scene-composer/api/catalogClient.ts:90)"}, "properties": {"repobilityId": "d04fa083d71a30ba", "scanner": "scanner-primary", "fingerprint": "83dacd0a9eec7a82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6a019d7ab6a66e49", "level": "error", "message": {"text": "Dangling fetch: GET /api/test (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:78)"}, "properties": {"repobilityId": "6e29b5a5093c1199", "scanner": "scanner-primary", "fingerprint": "6a019d7ab6a66e49", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-33dd58c319bf466b", "level": "error", "message": {"text": "Dangling fetch: GET /api/test (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:84)"}, "properties": {"repobilityId": "77433abbd1279ef7", "scanner": "scanner-primary", "fingerprint": "33dd58c319bf466b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7927807ccd4c7e99", "level": "error", "message": {"text": "Dangling fetch: GET /api/test (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:93)"}, "properties": {"repobilityId": "07d4dc070d705721", "scanner": "scanner-primary", "fingerprint": "7927807ccd4c7e99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9e1cc9c837c0028f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/delete (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:107)"}, "properties": {"repobilityId": "694553477f2242b8", "scanner": "scanner-primary", "fingerprint": "9e1cc9c837c0028f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-68527fdb31dd7658", "level": "error", "message": {"text": "Dangling fetch: GET /api/protected (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:115)"}, "properties": {"repobilityId": "0eb4146f7d68b816", "scanner": "scanner-primary", "fingerprint": "68527fdb31dd7658", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6d951563da2b4fa8", "level": "error", "message": {"text": "Dangling fetch: GET /api/protected (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:122)"}, "properties": {"repobilityId": "b7cb4603efcd2d92", "scanner": "scanner-primary", "fingerprint": "6d951563da2b4fa8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-875a613edbb532f7", "level": "error", "message": {"text": "Dangling fetch: GET /api/scenes/missing (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:143)"}, "properties": {"repobilityId": "59efe3672b6dcfc3", "scanner": "scanner-primary", "fingerprint": "875a613edbb532f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-09900e7f747346d3", "level": "error", "message": {"text": "Dangling fetch: GET /api/boom (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:158)"}, "properties": {"repobilityId": "4abe470d97dd0718", "scanner": "scanner-primary", "fingerprint": "09900e7f747346d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fe1009e75e3baed2", "level": "error", "message": {"text": "Dangling fetch: GET /api/proxy (frontend/src/features/scene-composer/__tests__/httpClient.test.ts:172)"}, "properties": {"repobilityId": "6859525ad4527ca5", "scanner": "scanner-primary", "fingerprint": "fe1009e75e3baed2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fa73997ce83e5748", "level": "error", "message": {"text": "Dangling fetch: POST /api/livekit/token (frontend/src/services/livekitClient.ts:22)"}, "properties": {"repobilityId": "3bfe184987c1e416", "scanner": "scanner-primary", "fingerprint": "fa73997ce83e5748", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-714d597bca687fdb", "level": "error", "message": {"text": "Dangling fetch: GET /auth/me (frontend/src/services/shuguClient.ts:143)"}, "properties": {"repobilityId": "81f14871a22a3eeb", "scanner": "scanner-primary", "fingerprint": "714d597bca687fdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dcbec6b99e69c0fd", "level": "error", "message": {"text": "Dangling fetch: POST /auth/login (frontend/src/services/shuguClient.ts:161)"}, "properties": {"repobilityId": "4887e614715aef2e", "scanner": "scanner-primary", "fingerprint": "dcbec6b99e69c0fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff0b0f506d11160a", "level": "error", "message": {"text": "Dangling fetch: POST /auth/logout (frontend/src/services/shuguClient.ts:177)"}, "properties": {"repobilityId": "7e60727c6b9c66bc", "scanner": "scanner-primary", "fingerprint": "ff0b0f506d11160a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78a4943d76406ce3", "level": "error", "message": {"text": "Dangling fetch: POST /api/account/register (frontend/src/services/accountClient.ts:58)"}, "properties": {"repobilityId": "ef5fa2328b158655", "scanner": "scanner-primary", "fingerprint": "78a4943d76406ce3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5f08fe9a98689c2f", "level": "error", "message": {"text": "Dangling fetch: POST /api/account/login (frontend/src/services/accountClient.ts:64)"}, "properties": {"repobilityId": "c589696b1f6a984c", "scanner": "scanner-primary", "fingerprint": "5f08fe9a98689c2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-329e4aeb758130d8", "level": "error", "message": {"text": "Dangling fetch: POST /api/account/logout (frontend/src/services/accountClient.ts:68)"}, "properties": {"repobilityId": "b0bb3caf6f4ed46a", "scanner": "scanner-primary", "fingerprint": "329e4aeb758130d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9d3f2aac1457c394", "level": "error", "message": {"text": "Dangling fetch: POST /api/account/refresh (frontend/src/services/accountClient.ts:72)"}, "properties": {"repobilityId": "e5bee2e73abbaa2e", "scanner": "scanner-primary", "fingerprint": "9d3f2aac1457c394", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5cc0e7675fffb935", "level": "error", "message": {"text": "Dangling fetch: GET /api/account/me (frontend/src/services/accountClient.ts:77)"}, "properties": {"repobilityId": "4c7568f791d09e0a", "scanner": "scanner-primary", "fingerprint": "5cc0e7675fffb935", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-38882a4f06591e6a", "level": "error", "message": {"text": "Dangling fetch: POST /api/account/verify-email (frontend/src/services/accountClient.ts:85)"}, "properties": {"repobilityId": "d2b7a47d83b40d5b", "scanner": "scanner-primary", "fingerprint": "38882a4f06591e6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2fa3dbad91995472", "level": "error", "message": {"text": "Dangling fetch: POST /api/account/resend-verify (frontend/src/services/accountClient.ts:92)"}, "properties": {"repobilityId": "51d8973b1d1e3bb5", "scanner": "scanner-primary", "fingerprint": "2fa3dbad91995472", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5765cac084ef6f1c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/users/${user_id}/vip (frontend/src/services/adminUsersClient.ts:74)"}, "properties": {"repobilityId": "a920dcc9c76aa45c", "scanner": "scanner-primary", "fingerprint": "5765cac084ef6f1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e4ef146d2c48e2e6", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/users/${user_id}/deactivate (frontend/src/services/adminUsersClient.ts:81)"}, "properties": {"repobilityId": "a88f3f9393c84651", "scanner": "scanner-primary", "fingerprint": "e4ef146d2c48e2e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-905adbd96184ef82", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/analytics/funnel (frontend/src/services/adminAnalyticsClient.ts:226)"}, "properties": {"repobilityId": "cdd5e8815cdf299a", "scanner": "scanner-primary", "fingerprint": "905adbd96184ef82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-267312894ffe01b4", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/registry?${qs.toString()} (frontend/src/services/adminAssetsClient.ts:68)"}, "properties": {"repobilityId": "d3478402d2d8a0ce", "scanner": "scanner-primary", "fingerprint": "267312894ffe01b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d3ea604a6bfdb016", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/registry (frontend/src/services/adminAssetsClient.ts:72)"}, "properties": {"repobilityId": "efeda3bbc58a418b", "scanner": "scanner-primary", "fingerprint": "d3ea604a6bfdb016", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ae989df86b5ded87", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/registry/${id} (frontend/src/services/adminAssetsClient.ts:79)"}, "properties": {"repobilityId": "fcd9f190807f20f0", "scanner": "scanner-primary", "fingerprint": "ae989df86b5ded87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ee330c6cc8f20b4b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/registry/${id} (frontend/src/services/adminAssetsClient.ts:86)"}, "properties": {"repobilityId": "4700960b0b997eeb", "scanner": "scanner-primary", "fingerprint": "ee330c6cc8f20b4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-56f3f53f260fae2c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/moderation/bans (frontend/src/services/adminModerationClient.ts:103)"}, "properties": {"repobilityId": "02ce2543ebee9ea4", "scanner": "scanner-primary", "fingerprint": "56f3f53f260fae2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-04f29db48466297c", "level": "error", "message": {"text": "Dangling fetch: HEAD /ws/editor (frontend/e2e/scene-editor-multi-operator.spec.ts:49)"}, "properties": {"repobilityId": "ea20c75ac8d045c9", "scanner": "scanner-primary", "fingerprint": "04f29db48466297c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "341faec992e43ced", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee78c269a07ef341", "level": "note", "message": {"text": "Unused endpoint: POST /{user_id}/vip"}, "properties": {"repobilityId": "79a4cdae5a653864", "scanner": "scanner-primary", "fingerprint": "ee78c269a07ef341", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c062ad48fea710f1", "level": "note", "message": {"text": "Unused endpoint: POST /{user_id}/deactivate"}, "properties": {"repobilityId": "1753e413c377b301", "scanner": "scanner-primary", "fingerprint": "c062ad48fea710f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a758c97595233d27", "level": "note", "message": {"text": "Unused endpoint: GET /performances"}, "properties": {"repobilityId": "685a958137b9d61b", "scanner": "scanner-primary", "fingerprint": "a758c97595233d27", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-469d120c51ab3a02", "level": "note", "message": {"text": "Unused endpoint: GET /bans"}, "properties": {"repobilityId": "9b3e372c097477d5", "scanner": "scanner-primary", "fingerprint": "469d120c51ab3a02", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fecae233e730da01", "level": "note", "message": {"text": "Unused endpoint: POST /bans"}, "properties": {"repobilityId": "695b7118ac3a184d", "scanner": "scanner-primary", "fingerprint": "fecae233e730da01", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c6c2c5de4f16cceb", "level": "note", "message": {"text": "Unused endpoint: DELETE /bans/{ip_hash}"}, "properties": {"repobilityId": "9a4d71603ec3e3e1", "scanner": "scanner-primary", "fingerprint": "c6c2c5de4f16cceb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd8dc4599ec52a08", "level": "note", "message": {"text": "Unused endpoint: GET /stats"}, "properties": {"repobilityId": "416bf08ad6fc95b5", "scanner": "scanner-primary", "fingerprint": "cd8dc4599ec52a08", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-93cbe9356b385a92", "level": "note", "message": {"text": "Unused endpoint: GET /quota"}, "properties": {"repobilityId": "3fbb4d83a5810baf", "scanner": "scanner-primary", "fingerprint": "93cbe9356b385a92", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3929f317ee2031d0", "level": "note", "message": {"text": "Unused endpoint: GET /kpis"}, "properties": {"repobilityId": "51c1893983d6c786", "scanner": "scanner-primary", "fingerprint": "3929f317ee2031d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bf8708f93c5621bc", "level": "note", "message": {"text": "Unused endpoint: GET /timeline"}, "properties": {"repobilityId": "84985830f62156b7", "scanner": "scanner-primary", "fingerprint": "bf8708f93c5621bc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e0f6a6907dacde3", "level": "note", "message": {"text": "Unused endpoint: GET /top-routes"}, "properties": {"repobilityId": "e888159bf959ab2d", "scanner": "scanner-primary", "fingerprint": "2e0f6a6907dacde3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b2407aa8d3d2fa97", "level": "note", "message": {"text": "Unused endpoint: GET /top-visitors"}, "properties": {"repobilityId": "97703fdfd043bddc", "scanner": "scanner-primary", "fingerprint": "b2407aa8d3d2fa97", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8445b057f72d6ece", "level": "note", "message": {"text": "Unused endpoint: GET /heatmap"}, "properties": {"repobilityId": "eaad286597a78593", "scanner": "scanner-primary", "fingerprint": "8445b057f72d6ece", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e03a6de6e7f5fe8", "level": "note", "message": {"text": "Unused endpoint: GET /funnel"}, "properties": {"repobilityId": "1e93b78a93a76b34", "scanner": "scanner-primary", "fingerprint": "3e03a6de6e7f5fe8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4621904ad42efc7f", "level": "note", "message": {"text": "Unused endpoint: GET /performances/{performance_id}"}, "properties": {"repobilityId": "c028ab5049e68ba9", "scanner": "scanner-primary", "fingerprint": "4621904ad42efc7f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e686634beeea0bb8", "level": "note", "message": {"text": "Unused endpoint: GET /export"}, "properties": {"repobilityId": "666602261f9d18c3", "scanner": "scanner-primary", "fingerprint": "e686634beeea0bb8", "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": "6f94b8aa2011981e", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-785f13671a3d7c09", "level": "note", "message": {"text": "Unused endpoint: GET /missions"}, "properties": {"repobilityId": "cc0d6cdf7d1a8d31", "scanner": "scanner-primary", "fingerprint": "785f13671a3d7c09", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea361d4cc9633291", "level": "note", "message": {"text": "Unused endpoint: GET /scenes"}, "properties": {"repobilityId": "61c3c727541b1ef0", "scanner": "scanner-primary", "fingerprint": "ea361d4cc9633291", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cbe29aca6caa9f99", "level": "note", "message": {"text": "Unused endpoint: GET /scenes/{scene_id}"}, "properties": {"repobilityId": "39773f4281fcd952", "scanner": "scanner-primary", "fingerprint": "cbe29aca6caa9f99", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f4230b44965cfb21", "level": "note", "message": {"text": "Unused endpoint: POST /scenes"}, "properties": {"repobilityId": "3bd41a872cc2c74d", "scanner": "scanner-primary", "fingerprint": "f4230b44965cfb21", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b24bf3328a99ae9", "level": "note", "message": {"text": "Unused endpoint: PUT /scenes/{scene_id}"}, "properties": {"repobilityId": "99bbfb9e197bc61a", "scanner": "scanner-primary", "fingerprint": "1b24bf3328a99ae9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5dedb8a353ef432e", "level": "note", "message": {"text": "Unused endpoint: DELETE /scenes/{scene_id}"}, "properties": {"repobilityId": "f136cdf193f0060f", "scanner": "scanner-primary", "fingerprint": "5dedb8a353ef432e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bc9c455517cad61d", "level": "note", "message": {"text": "Unused endpoint: POST /scenes/{scene_id}/play"}, "properties": {"repobilityId": "7d0249a3db15bd70", "scanner": "scanner-primary", "fingerprint": "bc9c455517cad61d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-34a0d470c601d97f", "level": "note", "message": {"text": "Unused endpoint: GET /catalog"}, "properties": {"repobilityId": "f96aa7b72e44be45", "scanner": "scanner-primary", "fingerprint": "34a0d470c601d97f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b5910c2c48ef7df", "level": "note", "message": {"text": "Unused endpoint: GET /{kind}"}, "properties": {"repobilityId": "eb5e40c45785874d", "scanner": "scanner-primary", "fingerprint": "7b5910c2c48ef7df", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "bc348ce07bd0d18d", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-02e6a5ae44548add", "level": "note", "message": {"text": "Unused endpoint: PATCH /{row_id}"}, "properties": {"repobilityId": "9b8aeb11ff451f65", "scanner": "scanner-primary", "fingerprint": "02e6a5ae44548add", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6551d660e48fe6b0", "level": "note", "message": {"text": "Unused endpoint: DELETE /{row_id}"}, "properties": {"repobilityId": "988d91b252ca2fed", "scanner": "scanner-primary", "fingerprint": "6551d660e48fe6b0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-46bc849e2dfb53e7", "level": "note", "message": {"text": "Unused endpoint: POST /{row_id}/preview"}, "properties": {"repobilityId": "35f97a4bb7c022a3", "scanner": "scanner-primary", "fingerprint": "46bc849e2dfb53e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9280037776f2c0c3", "level": "note", "message": {"text": "Unused endpoint: POST /api/voice/token"}, "properties": {"repobilityId": "b95d8761b3bcfab4", "scanner": "scanner-primary", "fingerprint": "9280037776f2c0c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0a1a92b245fce1e9", "level": "note", "message": {"text": "Unused endpoint: POST /api/voice/token/refresh"}, "properties": {"repobilityId": "ca7107d08862fd2f", "scanner": "scanner-primary", "fingerprint": "0a1a92b245fce1e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d477716ba309450a", "level": "note", "message": {"text": "Unused endpoint: GET /api/viewer/state"}, "properties": {"repobilityId": "47cdd4c26a4c55a3", "scanner": "scanner-primary", "fingerprint": "d477716ba309450a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-43269e4e79c2e69e", "level": "note", "message": {"text": "Unused endpoint: GET /events"}, "properties": {"repobilityId": "bb01d923520e790a", "scanner": "scanner-primary", "fingerprint": "43269e4e79c2e69e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "44400e9a82a1dae0", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ce17d6b092a81ca", "level": "note", "message": {"text": "Unused endpoint: POST /refresh"}, "properties": {"repobilityId": "34a70a3e9c5926eb", "scanner": "scanner-primary", "fingerprint": "7ce17d6b092a81ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99fc36db98c134ce", "level": "note", "message": {"text": "Unused endpoint: POST /logout"}, "properties": {"repobilityId": "b5bb7fe6fbef074a", "scanner": "scanner-primary", "fingerprint": "99fc36db98c134ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "e3a346fce07ae78c", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d21384b205d42a85", "level": "note", "message": {"text": "Unused endpoint: POST /admin/promote-operator"}, "properties": {"repobilityId": "083a2338096d2fb5", "scanner": "scanner-primary", "fingerprint": "d21384b205d42a85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-304b6f2b403d93f7", "level": "note", "message": {"text": "Unused endpoint: POST /register"}, "properties": {"repobilityId": "f69dac2332f29352", "scanner": "scanner-primary", "fingerprint": "304b6f2b403d93f7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c3bb6af93b4422a", "level": "note", "message": {"text": "Unused endpoint: POST /verify-email"}, "properties": {"repobilityId": "d77df47509608a89", "scanner": "scanner-primary", "fingerprint": "0c3bb6af93b4422a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-01dc0a93e0b0b0b0", "level": "note", "message": {"text": "Unused endpoint: POST /resend-verify"}, "properties": {"repobilityId": "537729be7e248e39", "scanner": "scanner-primary", "fingerprint": "01dc0a93e0b0b0b0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8160f3a584180f28", "level": "note", "message": {"text": "Unused endpoint: GET /scenes/{scene_id}/drafts"}, "properties": {"repobilityId": "566ceec224ba9a68", "scanner": "scanner-primary", "fingerprint": "8160f3a584180f28", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ccb9e4cffa6ec218", "level": "note", "message": {"text": "Unused endpoint: GET /scenes/{scene_id}/drafts/latest"}, "properties": {"repobilityId": "c3306a91579fe129", "scanner": "scanner-primary", "fingerprint": "ccb9e4cffa6ec218", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5af4243b2dfcf266", "level": "note", "message": {"text": "Unused endpoint: POST /scenes/{scene_id}/drafts"}, "properties": {"repobilityId": "b797aec6605b4d0c", "scanner": "scanner-primary", "fingerprint": "5af4243b2dfcf266", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5327638847562450", "level": "note", "message": {"text": "Unused endpoint: DELETE /scenes/{scene_id}/drafts/{version}"}, "properties": {"repobilityId": "8598bd75c15a406d", "scanner": "scanner-primary", "fingerprint": "5327638847562450", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7aedeadc7f98b772", "level": "note", "message": {"text": "Unused endpoint: GET /patterns"}, "properties": {"repobilityId": "9f018c52409927fe", "scanner": "scanner-primary", "fingerprint": "7aedeadc7f98b772", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f51028ccc3e5e0d", "level": "note", "message": {"text": "Unused endpoint: POST /patterns"}, "properties": {"repobilityId": "b4ceda6bfc363569", "scanner": "scanner-primary", "fingerprint": "1f51028ccc3e5e0d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a59a81d509f95662", "level": "note", "message": {"text": "Unused endpoint: DELETE /patterns/{pattern_id}"}, "properties": {"repobilityId": "4cacbfce70da8b6e", "scanner": "scanner-primary", "fingerprint": "a59a81d509f95662", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}