{"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-ac0c97f7a345dd60", "name": "TODO/FIXME marker in shipping code \u2014 frontend/src/pages/Chat.tsx:1621", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/pages/Chat.tsx:1621"}, "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-4807ae0f5ce98cc2", "name": "Stray `console.log` in TS/JS \u2014 backend/src/swagger.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/swagger.ts:66"}, "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-bcdbf03561339981", "name": "TODO/FIXME marker in shipping code \u2014 backend/src/routes/chats.ts:136", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 backend/src/routes/chats.ts:136"}, "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-25c98db5ca6b0889", "name": "Insecure pattern 'node_child_process' in scripts/drawlatch-reload.cjs:37", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/drawlatch-reload.cjs:37"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-baa953b74aee2179", "name": "Insecure pattern 'node_child_process' in backend/src/index.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/index.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a654d6fb3d8a640a", "name": "Insecure pattern 'node_child_process' in backend/src/utils/git.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/utils/git.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-42ae24f50c71a983", "name": "Insecure pattern 'node_child_process' in backend/src/utils/paths.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/utils/paths.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f63b514036284eb", "name": "Insecure pattern 'node_child_process' in backend/src/utils/chat-search.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/utils/chat-search.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c56367a0c384fcb", "name": "Insecure pattern 'node_child_process' in backend/src/agents/adapters/claude-code/ClaudeCodeSessionProvider.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/agents/adapters/claude-code/ClaudeCodeSessionProvider.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f73936077567d27", "name": "Insecure pattern 'node_child_process' in backend/src/agents/adapters/openrouter/hookAdapter.ts:31", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/agents/adapters/openrouter/hookAdapter.ts:31"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-541bd2b225d13a38", "name": "Insecure pattern 'node_child_process' in backend/src/services/codex-models.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/services/codex-models.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d6719cf3767ca014", "name": "Insecure pattern 'node_child_process' in backend/src/services/claude.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/services/claude.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-97212a5ba2581ec9", "name": "Insecure pattern 'node_child_process' in backend/src/services/agent-settings.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/services/agent-settings.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7c89c1754c4e9be1", "name": "Very large file: frontend/src/api.ts (1690 lines)", "shortDescription": {"text": "Very large file: frontend/src/api.ts (1690 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-d2207a96289a0031", "name": "Very large file: frontend/src/components/ListenerConfigPanel.tsx (1672 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/ListenerConfigPanel.tsx (1672 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-1d71ad4a4e5e79cf", "name": "Very large file: frontend/src/pages/Chat.tsx (2974 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Chat.tsx (2974 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-f7c9480ac52ba5a3", "name": "Very large file: frontend/src/pages/settings/ApiSettings.tsx (1286 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/settings/ApiSettings.tsx (1286 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-f5cd068e009b77c9", "name": "Very large file: frontend/src/pages/settings/ConnectionsSettings.tsx (1465 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/settings/ConnectionsSettings.tsx (1465 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-f00178b84836de5a", "name": "Very large file: backend/src/services/claude.ts (1548 lines)", "shortDescription": {"text": "Very large file: backend/src/services/claude.ts (1548 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-7e1fb8e2da0807fe", "name": "Very large file: backend/src/services/callboard-tools.ts (1219 lines)", "shortDescription": {"text": "Very large file: backend/src/services/callboard-tools.ts (1219 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "36 tests / 244 src (ratio 0.15)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e8a76eb13fd3249", "name": "Node manifest has dependencies but no lockfile: frontend/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: frontend/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a092b5c39e242a1", "name": "Node manifest has dependencies but no lockfile: backend/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: backend/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 24 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 152 placeholder/mock markers across 41 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: ci, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing ci, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9d1559962ffb5fd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api.ts:141", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api.ts:141"}, "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-b61208329e981310", "name": "Commented-code block (5 lines) in frontend/src/components/NewChatPanel.tsx:154", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/NewChatPanel.tsx: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-fba8b402b844c760", "name": "Commented-code block (8 lines) in frontend/src/components/ChatDebugPanel.tsx:56", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/components/ChatDebugPanel.tsx:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2fe127c84b62592", "name": "Commented-code block (5 lines) in frontend/src/contexts/SessionContext.tsx:165", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/contexts/SessionContext.tsx: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-d7f50c9c2d5221ef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/contexts/SessionContext.tsx:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/contexts/SessionContext.tsx:100"}, "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-d5df30c46db4f095", "name": "Commented-code block (6 lines) in frontend/src/pages/Chat.tsx:219", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/Chat.tsx:219"}, "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-879fdc29c0c877ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Chat.tsx:1264", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Chat.tsx:1264"}, "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-8144151998e41766", "name": "Commented-code block (5 lines) in frontend/src/pages/settings/ApiSettings.tsx:400", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/settings/ApiSettings.tsx:400"}, "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-aa998b9edd6156eb", "name": "Commented-code block (5 lines) in shared/types/agentFeatures.ts:83", "shortDescription": {"text": "Commented-code block (5 lines) in shared/types/agentFeatures.ts: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-0368de2462b5aa72", "name": "Commented-code block (5 lines) in shared/types/agentSettings.ts:28", "shortDescription": {"text": "Commented-code block (5 lines) in shared/types/agentSettings.ts:28"}, "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-b9c0ac1600aee699", "name": "Commented-code block (5 lines) in scripts/rewrite-shared-imports.mjs:4", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/rewrite-shared-imports.mjs: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-4de4397af60a1384", "name": "Commented-code block (5 lines) in backend/src/index.ts:425", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/index.ts:425"}, "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-6034972703513ed7", "name": "Commented-code block (5 lines) in backend/src/utils/paths.test.ts:292", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/utils/paths.test.ts:292"}, "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-ae4b656a930ed045", "name": "Commented-code block (5 lines) in backend/src/utils/paths.ts:628", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/utils/paths.ts:628"}, "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-3b5e0cdaae29318f", "name": "Commented-code block (7 lines) in backend/src/routes/chats.ts:130", "shortDescription": {"text": "Commented-code block (7 lines) in backend/src/routes/chats.ts:130"}, "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-b4ca0984b396c41d", "name": "Commented-code block (5 lines) in backend/src/routes/stream.ts:289", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/routes/stream.ts:289"}, "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-55d2b8f7afb90756", "name": "Commented-code block (13 lines) in backend/src/agents/adapters/codex/sessionParser.ts:229", "shortDescription": {"text": "Commented-code block (13 lines) in backend/src/agents/adapters/codex/sessionParser.ts:229"}, "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-fb5f7ef16e1746a4", "name": "Commented-code block (8 lines) in backend/src/agents/adapters/codex/optionsAdapter.ts:347", "shortDescription": {"text": "Commented-code block (8 lines) in backend/src/agents/adapters/codex/optionsAdapter.ts:347"}, "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-9943865a7a83a2cd", "name": "Commented-code block (5 lines) in backend/src/agents/adapters/codex/CodexAdapter.ts:43", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/codex/CodexAdapter.ts: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-a1b738faf40c038d", "name": "Commented-code block (5 lines) in backend/src/agents/adapters/codex/CodexSessionProvider.ts:239", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/codex/CodexSessionProvider.ts:239"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe6d8cefa2a64d99", "name": "Commented-code block (5 lines) in backend/src/agents/adapters/codex/messageAdapter.ts:79", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/codex/messageAdapter.ts:79"}, "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-8b24b1585ae9a19b", "name": "Commented-code block (9 lines) in backend/src/agents/adapters/claude-code/sessionParser.ts:242", "shortDescription": {"text": "Commented-code block (9 lines) in backend/src/agents/adapters/claude-code/sessionParser.ts:242"}, "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-4ee565813c4f3a8f", "name": "Legacy-named symbol `sess_legacy` in backend/src/agents/adapters/openrouter/OpenRouterSessionProvider.test.ts:340", "shortDescription": {"text": "Legacy-named symbol `sess_legacy` in backend/src/agents/adapters/openrouter/OpenRouterSessionProvider.test.ts:340"}, "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-aa4cdeb8ac7884c5", "name": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/sessionParser.ts:110", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/sessionParser.ts:110"}, "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-3835a6e40be59e1f", "name": "Commented-code block (6 lines) in backend/src/agents/adapters/openrouter/optionsAdapter.ts:216", "shortDescription": {"text": "Commented-code block (6 lines) in backend/src/agents/adapters/openrouter/optionsAdapter.ts:216"}, "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-acc982c352812a8c", "name": "Commented-code block (7 lines) in backend/src/agents/adapters/openrouter/OpenRouterAdapter.ts:166", "shortDescription": {"text": "Commented-code block (7 lines) in backend/src/agents/adapters/openrouter/OpenRouterAdapter.ts:166"}, "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-7c72a16deffcd71a", "name": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/OpenRouterSessionProvider.ts:121", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/OpenRouterSessionProvider.ts: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-3e398ff4103ae679", "name": "Commented-code block (6 lines) in backend/src/agents/adapters/openrouter/messageAdapter.ts:138", "shortDescription": {"text": "Commented-code block (6 lines) in backend/src/agents/adapters/openrouter/messageAdapter.ts:138"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d9d0bafa28ba7e0", "name": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/hookAdapter.ts:143", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/hookAdapter.ts: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-6e81ea3a69f29687", "name": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/transcriptParser.ts:144", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/transcriptParser.ts:144"}, "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-69e2b038fffed99b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/proxy-client.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/proxy-client.ts:41"}, "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-587cb6e7e3212c55", "name": "Commented-code block (6 lines) in backend/src/services/claude.ts:778", "shortDescription": {"text": "Commented-code block (6 lines) in backend/src/services/claude.ts:778"}, "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-fa1f72a2737bea3e", "name": "Commented-code block (5 lines) in backend/src/services/agent-tools.ts:878", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/agent-tools.ts:878"}, "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-1489e7525fc60362", "name": "Commented-code block (5 lines) in backend/src/services/cli-watcher.ts:145", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/cli-watcher.ts:145"}, "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-f493500b17e39df5", "name": "Commented-code block (5 lines) in backend/src/services/callboard-tools.ts:1202", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/callboard-tools.ts:1202"}, "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-98922c992d1c8223", "name": "Commented-code block (5 lines) in backend/src/services/quick-completion.ts:204", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/quick-completion.ts:204"}, "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-20f1726f879eb2bf", "name": "Commented-code block (5 lines) in backend/src/services/agent-settings.ts:98", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/agent-settings.ts:98"}, "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-7c8b918e1fee9558", "name": "20 env vars used in code but missing from .env.example", "shortDescription": {"text": "20 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AUTH_PASSWORD_HASH`, `AUTH_PASSWORD_SALT`, `CALLBOARD_DATA_DIR`, `CALLBOARD_WORKSPACES_DIR`, `CCUI_AGENTS_DIR`, `CLAUDE_BINARY`, `CODEX_HOME`, `DEV_PORT_SERVER` + 12 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-96f3dde252267788", "name": "Frontend route `/chat/new` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/chat/new` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-793a42aa1946a0e8", "name": "Frontend route `/chat/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/chat/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b577acaa64d5fa05", "name": "Frontend route `/settings/:tab` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/settings/:tab` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-797698801071ca8c", "name": "Frontend route `/agents/:alias/*` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/agents/:alias/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1dd448f44a45cb99", "name": "Dangling fetch: GET /api/sessions/poll?${params} (frontend/src/contexts/SessionContext.tsx:100)", "shortDescription": {"text": "Dangling fetch: GET /api/sessions/poll?${params} (frontend/src/contexts/SessionContext.tsx:100)"}, "fullDescription": {"text": "`frontend/src/contexts/SessionContext.tsx:100` calls `GET /api/sessions/poll?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sessions/poll`\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-57f65a6969f1ec9c", "name": "Dangling fetch: GET /api/chats/${id}/stream (frontend/src/pages/Chat.tsx:779)", "shortDescription": {"text": "Dangling fetch: GET /api/chats/${id}/stream (frontend/src/pages/Chat.tsx:779)"}, "fullDescription": {"text": "`frontend/src/pages/Chat.tsx:779` calls `GET /api/chats/${id}/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chats/<p>/stream`\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-cf206e6e31935ca1", "name": "Dangling fetch: POST /api/chats/new/message (frontend/src/pages/Chat.tsx:1264)", "shortDescription": {"text": "Dangling fetch: POST /api/chats/new/message (frontend/src/pages/Chat.tsx:1264)"}, "fullDescription": {"text": "`frontend/src/pages/Chat.tsx:1264` calls `POST /api/chats/new/message` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chats/new/message`\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-6cffa66940c8f2a3", "name": "Dangling fetch: POST /api/chats/${id}/message (frontend/src/pages/Chat.tsx:1317)", "shortDescription": {"text": "Dangling fetch: POST /api/chats/${id}/message (frontend/src/pages/Chat.tsx:1317)"}, "fullDescription": {"text": "`frontend/src/pages/Chat.tsx:1317` calls `POST /api/chats/${id}/message` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chats/<p>/message`\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-e640f97b18e247ed", "name": "Dangling fetch: POST /api/chats/${id}/stop (frontend/src/pages/Chat.tsx:1469)", "shortDescription": {"text": "Dangling fetch: POST /api/chats/${id}/stop (frontend/src/pages/Chat.tsx:1469)"}, "fullDescription": {"text": "`frontend/src/pages/Chat.tsx:1469` calls `POST /api/chats/${id}/stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chats/<p>/stop`\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-b2a8197f635b7190", "name": "Dangling fetch: GET https://registry.npmjs.org/${pkgName}/latest (backend/src/index.ts:382)", "shortDescription": {"text": "Dangling fetch: GET https://registry.npmjs.org/${pkgName}/latest (backend/src/index.ts:382)"}, "fullDescription": {"text": "`backend/src/index.ts:382` calls `GET https://registry.npmjs.org/${pkgName}/latest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/registry.npmjs.org/<p>/latest`\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-1e05ba1cd37b6101", "name": "Unused endpoint: USE /webhooks", "shortDescription": {"text": "Unused endpoint: USE /webhooks"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /webhooks` 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-8bf2f7ca3faa1f1b", "name": "Unused endpoint: USE /api/auth/login", "shortDescription": {"text": "Unused endpoint: USE /api/auth/login"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/auth/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-d8120a45cb5ecfb2", "name": "Unused endpoint: USE /api/auth/logout", "shortDescription": {"text": "Unused endpoint: USE /api/auth/logout"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/auth/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-688beecf60157489", "name": "Unused endpoint: USE /api/auth/check", "shortDescription": {"text": "Unused endpoint: USE /api/auth/check"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/auth/check` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dde3adb27bf7eebe", "name": "Unused endpoint: USE /api", "shortDescription": {"text": "Unused endpoint: USE /api"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api` 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-a6c75407e0e70886", "name": "Unused endpoint: GET /api/docs", "shortDescription": {"text": "Unused endpoint: GET /api/docs"}, "fullDescription": {"text": "`backend/src/index.ts` declares `GET /api/docs` 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-1b179023c3a4f51f", "name": "Unused endpoint: USE /api/chats", "shortDescription": {"text": "Unused endpoint: USE /api/chats"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/chats` 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-5da77a419e1bf1c4", "name": "Unused endpoint: USE /api/images", "shortDescription": {"text": "Unused endpoint: USE /api/images"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/images` 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-206f7e8691829c7a", "name": "Unused endpoint: USE /api/queue", "shortDescription": {"text": "Unused endpoint: USE /api/queue"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/queue` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5ef4714c615abea", "name": "Unused endpoint: USE /api/folders", "shortDescription": {"text": "Unused endpoint: USE /api/folders"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/folders` 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-61f0530d078de560", "name": "Unused endpoint: USE /api/git", "shortDescription": {"text": "Unused endpoint: USE /api/git"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/git` 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-59451784ebed78ed", "name": "Unused endpoint: USE /api/app-plugins", "shortDescription": {"text": "Unused endpoint: USE /api/app-plugins"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/app-plugins` 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-094608bf688f5d04", "name": "Unused endpoint: USE /api/agents", "shortDescription": {"text": "Unused endpoint: USE /api/agents"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/agents` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-070a044c93a3083a", "name": "Unused endpoint: USE /api/agent-settings", "shortDescription": {"text": "Unused endpoint: USE /api/agent-settings"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/agent-settings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9ed50f6493a17dd", "name": "Unused endpoint: USE /api/proxy", "shortDescription": {"text": "Unused endpoint: USE /api/proxy"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/proxy` 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-b625bd59c0654e2f", "name": "Unused endpoint: USE /api/connections", "shortDescription": {"text": "Unused endpoint: USE /api/connections"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/connections` 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-8636dd48e48d1da9", "name": "Unused endpoint: USE /api/sessions", "shortDescription": {"text": "Unused endpoint: USE /api/sessions"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/sessions` 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-9a272ec55860c533", "name": "Unused endpoint: USE /api/themes", "shortDescription": {"text": "Unused endpoint: USE /api/themes"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/themes` 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-3ff03fe8d0c1c03e", "name": "Unused endpoint: USE /api/custom-skills", "shortDescription": {"text": "Unused endpoint: USE /api/custom-skills"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/custom-skills` 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-15662ab348abba6b", "name": "Unused endpoint: USE /api/files", "shortDescription": {"text": "Unused endpoint: USE /api/files"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/files` 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-934671af7c6a5d6b", "name": "Unused endpoint: USE /api/canvas", "shortDescription": {"text": "Unused endpoint: USE /api/canvas"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/canvas` 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-276211231070cffb", "name": "Unused endpoint: USE /api/mcp-tools", "shortDescription": {"text": "Unused endpoint: USE /api/mcp-tools"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/mcp-tools` 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-d2d040a93b2bf84d", "name": "Unused endpoint: USE /api/openrouter", "shortDescription": {"text": "Unused endpoint: USE /api/openrouter"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/openrouter` 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-faec32131abda26e", "name": "Unused endpoint: USE /api/codex", "shortDescription": {"text": "Unused endpoint: USE /api/codex"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/codex` 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-61519720bbf44ebe", "name": "Unused endpoint: USE /api/jobs", "shortDescription": {"text": "Unused endpoint: USE /api/jobs"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/jobs` 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-fcd1decfe64e7732", "name": "Unused endpoint: GET /api/instance-name", "shortDescription": {"text": "Unused endpoint: GET /api/instance-name"}, "fullDescription": {"text": "`backend/src/index.ts` declares `GET /api/instance-name` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-06542198663bf0e5", "name": "Unused endpoint: PUT /api/instance-name", "shortDescription": {"text": "Unused endpoint: PUT /api/instance-name"}, "fullDescription": {"text": "`backend/src/index.ts` declares `PUT /api/instance-name` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-458bc2918b3e2699", "name": "Unused endpoint: POST /api/instance-name/randomize", "shortDescription": {"text": "Unused endpoint: POST /api/instance-name/randomize"}, "fullDescription": {"text": "`backend/src/index.ts` declares `POST /api/instance-name/randomize` 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-de3fdc17aa0b117a", "name": "Unused endpoint: GET /api/ignored-project-dirs", "shortDescription": {"text": "Unused endpoint: GET /api/ignored-project-dirs"}, "fullDescription": {"text": "`backend/src/index.ts` declares `GET /api/ignored-project-dirs` 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-cb6e8b3d88ee73b1", "name": "Unused endpoint: PUT /api/ignored-project-dirs", "shortDescription": {"text": "Unused endpoint: PUT /api/ignored-project-dirs"}, "fullDescription": {"text": "`backend/src/index.ts` declares `PUT /api/ignored-project-dirs` 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-2a96f6f48d363848", "name": "Unused endpoint: GET /api/user-contact", "shortDescription": {"text": "Unused endpoint: GET /api/user-contact"}, "fullDescription": {"text": "`backend/src/index.ts` declares `GET /api/user-contact` 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-f2adc7326af42b7b", "name": "Unused endpoint: PUT /api/user-contact", "shortDescription": {"text": "Unused endpoint: PUT /api/user-contact"}, "fullDescription": {"text": "`backend/src/index.ts` declares `PUT /api/user-contact` 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-aeb7338d5ad720da", "name": "Unused endpoint: GET /api/auth/claude-status", "shortDescription": {"text": "Unused endpoint: GET /api/auth/claude-status"}, "fullDescription": {"text": "`backend/src/index.ts` declares `GET /api/auth/claude-status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4f2f93e7d27713d", "name": "Unused endpoint: GET /api/system-info", "shortDescription": {"text": "Unused endpoint: GET /api/system-info"}, "fullDescription": {"text": "`backend/src/index.ts` declares `GET /api/system-info` 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-866cfadefccd0b5c", "name": "Unused endpoint: POST /api/auth/change-password", "shortDescription": {"text": "Unused endpoint: POST /api/auth/change-password"}, "fullDescription": {"text": "`backend/src/index.ts` declares `POST /api/auth/change-password` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c423a4d8812f3d2", "name": "Unused endpoint: HEAD /webhooks/:path", "shortDescription": {"text": "Unused endpoint: HEAD /webhooks/:path"}, "fullDescription": {"text": "`backend/src/index.ts` declares `HEAD /webhooks/:path` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-522604c9a9460d86", "name": "Unused endpoint: POST /webhooks/:path", "shortDescription": {"text": "Unused endpoint: POST /webhooks/:path"}, "fullDescription": {"text": "`backend/src/index.ts` declares `POST /webhooks/:path` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25eeac6bcbd983d9", "name": "Unused endpoint: POST /api/restart", "shortDescription": {"text": "Unused endpoint: POST /api/restart"}, "fullDescription": {"text": "`backend/src/index.ts` declares `POST /api/restart` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5b4d8b5420aeee16", "name": "Unused endpoint: GET /branches", "shortDescription": {"text": "Unused endpoint: GET /branches"}, "fullDescription": {"text": "`backend/src/routes/git.ts` declares `GET /branches` 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-8b1b274b32469392", "name": "Unused endpoint: GET /diff", "shortDescription": {"text": "Unused endpoint: GET /diff"}, "fullDescription": {"text": "`backend/src/routes/git.ts` declares `GET /diff` 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-93dbdcc703274f43", "name": "Unused endpoint: GET /diff/file", "shortDescription": {"text": "Unused endpoint: GET /diff/file"}, "fullDescription": {"text": "`backend/src/routes/git.ts` declares `GET /diff/file` 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-c22d0bf4215aa5c9", "name": "Unused endpoint: GET /diff/file/raw", "shortDescription": {"text": "Unused endpoint: GET /diff/file/raw"}, "fullDescription": {"text": "`backend/src/routes/git.ts` declares `GET /diff/file/raw` 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-c94edd80ffd15695", "name": "Unused endpoint: POST /generate-branch-name", "shortDescription": {"text": "Unused endpoint: POST /generate-branch-name"}, "fullDescription": {"text": "`backend/src/routes/git.ts` declares `POST /generate-branch-name` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ab9bf5db6820af4", "name": "Unused endpoint: GET /models", "shortDescription": {"text": "Unused endpoint: GET /models"}, "fullDescription": {"text": "`backend/src/routes/codex.ts` declares `GET /models` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31ee7412e4cca1af", "name": "Unused endpoint: POST /:chatId/images", "shortDescription": {"text": "Unused endpoint: POST /:chatId/images"}, "fullDescription": {"text": "`backend/src/routes/images.ts` declares `POST /:chatId/images` 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-6236b283b79811b8", "name": "Unused endpoint: POST /upload", "shortDescription": {"text": "Unused endpoint: POST /upload"}, "fullDescription": {"text": "`backend/src/routes/images.ts` declares `POST /upload` 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-2c1cd7bb35ad519b", "name": "Unused endpoint: GET /:imageId", "shortDescription": {"text": "Unused endpoint: GET /:imageId"}, "fullDescription": {"text": "`backend/src/routes/images.ts` declares `GET /:imageId` 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-6a4b03cd0ee74c6e", "name": "Unused endpoint: DELETE /:imageId", "shortDescription": {"text": "Unused endpoint: DELETE /:imageId"}, "fullDescription": {"text": "`backend/src/routes/images.ts` declares `DELETE /:imageId` 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-8610a42d4d4cde1c", "name": "Unused endpoint: GET /:chatId/images", "shortDescription": {"text": "Unused endpoint: GET /:chatId/images"}, "fullDescription": {"text": "`backend/src/routes/images.ts` declares `GET /:chatId/images` 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-3be912c6187ea599", "name": "Unused endpoint: GET /runs", "shortDescription": {"text": "Unused endpoint: GET /runs"}, "fullDescription": {"text": "`backend/src/routes/jobs.ts` declares `GET /runs` 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/22841"}, "properties": {"repository": "WolpertingerLabs/callboard", "repoUrl": "https://github.com/WolpertingerLabs/callboard", "branch": "main"}, "results": [{"ruleId": "scanner-ac0c97f7a345dd60", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/pages/Chat.tsx:1621"}, "properties": {"repobilityId": "61b0af6d6fe8cb0a", "scanner": "scanner-primary", "fingerprint": "ac0c97f7a345dd60", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-4807ae0f5ce98cc2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/swagger.ts:66"}, "properties": {"repobilityId": "1b2fc954c0c508fb", "scanner": "scanner-primary", "fingerprint": "4807ae0f5ce98cc2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bcdbf03561339981", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 backend/src/routes/chats.ts:136"}, "properties": {"repobilityId": "b4359ed0879e47d5", "scanner": "scanner-primary", "fingerprint": "bcdbf03561339981", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-25c98db5ca6b0889", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/drawlatch-reload.cjs:37"}, "properties": {"repobilityId": "957a9be05de52bbc", "scanner": "scanner-primary", "fingerprint": "25c98db5ca6b0889", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/drawlatch-reload.cjs"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-baa953b74aee2179", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/index.ts:2"}, "properties": {"repobilityId": "3c85876037e58ef2", "scanner": "scanner-primary", "fingerprint": "baa953b74aee2179", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/index.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-a654d6fb3d8a640a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/utils/git.ts:1"}, "properties": {"repobilityId": "cc3f1a85b2e3afbf", "scanner": "scanner-primary", "fingerprint": "a654d6fb3d8a640a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/utils/git.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-42ae24f50c71a983", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/utils/paths.ts:2"}, "properties": {"repobilityId": "ca3caebda5f79e20", "scanner": "scanner-primary", "fingerprint": "42ae24f50c71a983", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/utils/paths.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-4f63b514036284eb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/utils/chat-search.ts:9"}, "properties": {"repobilityId": "8d53b21f7297b1a9", "scanner": "scanner-primary", "fingerprint": "4f63b514036284eb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/utils/chat-search.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-2c56367a0c384fcb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/agents/adapters/claude-code/ClaudeCodeSessionProvider.ts:14"}, "properties": {"repobilityId": "0a28c6b9cb0de480", "scanner": "scanner-primary", "fingerprint": "2c56367a0c384fcb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/agents/adapters/claude-code/ClaudeCodeSessionProvider.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-5f73936077567d27", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/agents/adapters/openrouter/hookAdapter.ts:31"}, "properties": {"repobilityId": "b7532640213fb9c1", "scanner": "scanner-primary", "fingerprint": "5f73936077567d27", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/agents/adapters/openrouter/hookAdapter.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-541bd2b225d13a38", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/services/codex-models.ts:11"}, "properties": {"repobilityId": "254834c5b265c14c", "scanner": "scanner-primary", "fingerprint": "541bd2b225d13a38", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/codex-models.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-d6719cf3767ca014", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/services/claude.ts:9"}, "properties": {"repobilityId": "88a727fabbfe8af5", "scanner": "scanner-primary", "fingerprint": "d6719cf3767ca014", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/claude.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-97212a5ba2581ec9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/services/agent-settings.ts:11"}, "properties": {"repobilityId": "656d3fe73152d1a2", "scanner": "scanner-primary", "fingerprint": "97212a5ba2581ec9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/agent-settings.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-7c89c1754c4e9be1", "level": "note", "message": {"text": "Very large file: frontend/src/api.ts (1690 lines)"}, "properties": {"repobilityId": "a6e255af7bb39102", "scanner": "scanner-primary", "fingerprint": "7c89c1754c4e9be1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d2207a96289a0031", "level": "note", "message": {"text": "Very large file: frontend/src/components/ListenerConfigPanel.tsx (1672 lines)"}, "properties": {"repobilityId": "27534b82d37281f1", "scanner": "scanner-primary", "fingerprint": "d2207a96289a0031", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1d71ad4a4e5e79cf", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Chat.tsx (2974 lines)"}, "properties": {"repobilityId": "a9c55a4c7a983771", "scanner": "scanner-primary", "fingerprint": "1d71ad4a4e5e79cf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f7c9480ac52ba5a3", "level": "note", "message": {"text": "Very large file: frontend/src/pages/settings/ApiSettings.tsx (1286 lines)"}, "properties": {"repobilityId": "d7acdb02307be888", "scanner": "scanner-primary", "fingerprint": "f7c9480ac52ba5a3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f5cd068e009b77c9", "level": "note", "message": {"text": "Very large file: frontend/src/pages/settings/ConnectionsSettings.tsx (1465 lines)"}, "properties": {"repobilityId": "fb828a8642e765c4", "scanner": "scanner-primary", "fingerprint": "f5cd068e009b77c9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f00178b84836de5a", "level": "note", "message": {"text": "Very large file: backend/src/services/claude.ts (1548 lines)"}, "properties": {"repobilityId": "2071d6107c474647", "scanner": "scanner-primary", "fingerprint": "f00178b84836de5a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7e1fb8e2da0807fe", "level": "note", "message": {"text": "Very large file: backend/src/services/callboard-tools.ts (1219 lines)"}, "properties": {"repobilityId": "4eb47f2830fbf15c", "scanner": "scanner-primary", "fingerprint": "7e1fb8e2da0807fe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-0e8a76eb13fd3249", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: frontend/package.json"}, "properties": {"repobilityId": "d8c65da5b68ee95b", "scanner": "scanner-primary", "fingerprint": "0e8a76eb13fd3249", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3a092b5c39e242a1", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: backend/package.json"}, "properties": {"repobilityId": "fc853e57ce7048c4", "scanner": "scanner-primary", "fingerprint": "3a092b5c39e242a1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "8b2d35407275eef6", "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": "a4c0b8e50b4c86d0", "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": "3dab34b8257b986e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "1dfb2d272ff74d9e", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "2722a4763361df71", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "ff7f16269f66907b", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "b7318c0d04253530", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-c9d1559962ffb5fd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api.ts:141"}, "properties": {"repobilityId": "8e98ab46c0267781", "scanner": "scanner-primary", "fingerprint": "c9d1559962ffb5fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b61208329e981310", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/NewChatPanel.tsx:154"}, "properties": {"repobilityId": "9995ba1ac86f0875", "scanner": "scanner-primary", "fingerprint": "b61208329e981310", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fba8b402b844c760", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/components/ChatDebugPanel.tsx:56"}, "properties": {"repobilityId": "8ce350ad4839efc8", "scanner": "scanner-primary", "fingerprint": "fba8b402b844c760", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2fe127c84b62592", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/contexts/SessionContext.tsx:165"}, "properties": {"repobilityId": "252a200be5311390", "scanner": "scanner-primary", "fingerprint": "d2fe127c84b62592", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7f50c9c2d5221ef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/contexts/SessionContext.tsx:100"}, "properties": {"repobilityId": "09962c059fa0c1b7", "scanner": "scanner-primary", "fingerprint": "d7f50c9c2d5221ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d5df30c46db4f095", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/Chat.tsx:219"}, "properties": {"repobilityId": "73e498efa9a8f6f6", "scanner": "scanner-primary", "fingerprint": "d5df30c46db4f095", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-879fdc29c0c877ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Chat.tsx:1264"}, "properties": {"repobilityId": "207fbbdac8f756de", "scanner": "scanner-primary", "fingerprint": "879fdc29c0c877ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8144151998e41766", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/settings/ApiSettings.tsx:400"}, "properties": {"repobilityId": "31d7998f739f48eb", "scanner": "scanner-primary", "fingerprint": "8144151998e41766", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa998b9edd6156eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/types/agentFeatures.ts:83"}, "properties": {"repobilityId": "cc35d75d95c568c2", "scanner": "scanner-primary", "fingerprint": "aa998b9edd6156eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0368de2462b5aa72", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/types/agentSettings.ts:28"}, "properties": {"repobilityId": "e5666ed9cf84966f", "scanner": "scanner-primary", "fingerprint": "0368de2462b5aa72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9c0ac1600aee699", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/rewrite-shared-imports.mjs:4"}, "properties": {"repobilityId": "6570789a5ec8f522", "scanner": "scanner-primary", "fingerprint": "b9c0ac1600aee699", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4de4397af60a1384", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/index.ts:425"}, "properties": {"repobilityId": "1fec689cd2aabb26", "scanner": "scanner-primary", "fingerprint": "4de4397af60a1384", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6034972703513ed7", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/utils/paths.test.ts:292"}, "properties": {"repobilityId": "cc812da9ec4d2309", "scanner": "scanner-primary", "fingerprint": "6034972703513ed7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae4b656a930ed045", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/utils/paths.ts:628"}, "properties": {"repobilityId": "da1c80b0f77faa93", "scanner": "scanner-primary", "fingerprint": "ae4b656a930ed045", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b5e0cdaae29318f", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/src/routes/chats.ts:130"}, "properties": {"repobilityId": "f90b3cfb90156ab2", "scanner": "scanner-primary", "fingerprint": "3b5e0cdaae29318f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4ca0984b396c41d", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/routes/stream.ts:289"}, "properties": {"repobilityId": "c210a9cf79f0f2fb", "scanner": "scanner-primary", "fingerprint": "b4ca0984b396c41d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55d2b8f7afb90756", "level": "none", "message": {"text": "Commented-code block (13 lines) in backend/src/agents/adapters/codex/sessionParser.ts:229"}, "properties": {"repobilityId": "ea8e2695cdac05e9", "scanner": "scanner-primary", "fingerprint": "55d2b8f7afb90756", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb5f7ef16e1746a4", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/src/agents/adapters/codex/optionsAdapter.ts:347"}, "properties": {"repobilityId": "5153b2ae09ebf74d", "scanner": "scanner-primary", "fingerprint": "fb5f7ef16e1746a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9943865a7a83a2cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/codex/CodexAdapter.ts:43"}, "properties": {"repobilityId": "4fb70025172825ff", "scanner": "scanner-primary", "fingerprint": "9943865a7a83a2cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1b738faf40c038d", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/codex/CodexSessionProvider.ts:239"}, "properties": {"repobilityId": "9f28e3d957f32276", "scanner": "scanner-primary", "fingerprint": "a1b738faf40c038d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe6d8cefa2a64d99", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/codex/messageAdapter.ts:79"}, "properties": {"repobilityId": "f7c4af0798f0e8b7", "scanner": "scanner-primary", "fingerprint": "fe6d8cefa2a64d99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b24b1585ae9a19b", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/src/agents/adapters/claude-code/sessionParser.ts:242"}, "properties": {"repobilityId": "0a20b2f641d1d65c", "scanner": "scanner-primary", "fingerprint": "8b24b1585ae9a19b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ee565813c4f3a8f", "level": "note", "message": {"text": "Legacy-named symbol `sess_legacy` in backend/src/agents/adapters/openrouter/OpenRouterSessionProvider.test.ts:340"}, "properties": {"repobilityId": "1edcb777479878b0", "scanner": "scanner-primary", "fingerprint": "4ee565813c4f3a8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-aa4cdeb8ac7884c5", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/sessionParser.ts:110"}, "properties": {"repobilityId": "e42a97c161ea35d0", "scanner": "scanner-primary", "fingerprint": "aa4cdeb8ac7884c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3835a6e40be59e1f", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/src/agents/adapters/openrouter/optionsAdapter.ts:216"}, "properties": {"repobilityId": "f9fe1dbcdc9f961c", "scanner": "scanner-primary", "fingerprint": "3835a6e40be59e1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-acc982c352812a8c", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/src/agents/adapters/openrouter/OpenRouterAdapter.ts:166"}, "properties": {"repobilityId": "9dc7a908290d7e5d", "scanner": "scanner-primary", "fingerprint": "acc982c352812a8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c72a16deffcd71a", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/OpenRouterSessionProvider.ts:121"}, "properties": {"repobilityId": "c5c14720531ee8c1", "scanner": "scanner-primary", "fingerprint": "7c72a16deffcd71a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e398ff4103ae679", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/src/agents/adapters/openrouter/messageAdapter.ts:138"}, "properties": {"repobilityId": "277e16154ee65978", "scanner": "scanner-primary", "fingerprint": "3e398ff4103ae679", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d9d0bafa28ba7e0", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/hookAdapter.ts:143"}, "properties": {"repobilityId": "fb6003bb09497d50", "scanner": "scanner-primary", "fingerprint": "0d9d0bafa28ba7e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e81ea3a69f29687", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/agents/adapters/openrouter/transcriptParser.ts:144"}, "properties": {"repobilityId": "2dcb0eb8bc2a19ec", "scanner": "scanner-primary", "fingerprint": "6e81ea3a69f29687", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69e2b038fffed99b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/proxy-client.ts:41"}, "properties": {"repobilityId": "ba47f6959b5f1b05", "scanner": "scanner-primary", "fingerprint": "69e2b038fffed99b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-587cb6e7e3212c55", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/src/services/claude.ts:778"}, "properties": {"repobilityId": "38d9e618c596d186", "scanner": "scanner-primary", "fingerprint": "587cb6e7e3212c55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa1f72a2737bea3e", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/agent-tools.ts:878"}, "properties": {"repobilityId": "b74f8a8bbbb03c61", "scanner": "scanner-primary", "fingerprint": "fa1f72a2737bea3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1489e7525fc60362", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/cli-watcher.ts:145"}, "properties": {"repobilityId": "a1683874df989640", "scanner": "scanner-primary", "fingerprint": "1489e7525fc60362", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f493500b17e39df5", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/callboard-tools.ts:1202"}, "properties": {"repobilityId": "3540e9f05cde657a", "scanner": "scanner-primary", "fingerprint": "f493500b17e39df5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98922c992d1c8223", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/quick-completion.ts:204"}, "properties": {"repobilityId": "b6018bf794895ce2", "scanner": "scanner-primary", "fingerprint": "98922c992d1c8223", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20f1726f879eb2bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/agent-settings.ts:98"}, "properties": {"repobilityId": "5e5c7b082eced516", "scanner": "scanner-primary", "fingerprint": "20f1726f879eb2bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c8b918e1fee9558", "level": "note", "message": {"text": "20 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "bd1f6d44917e8105", "scanner": "scanner-primary", "fingerprint": "7c8b918e1fee9558", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-96f3dde252267788", "level": "warning", "message": {"text": "Frontend route `/chat/new` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "19a0edd970fb554f", "scanner": "scanner-primary", "fingerprint": "96f3dde252267788", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-793a42aa1946a0e8", "level": "warning", "message": {"text": "Frontend route `/chat/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "852226c2955634a6", "scanner": "scanner-primary", "fingerprint": "793a42aa1946a0e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b577acaa64d5fa05", "level": "warning", "message": {"text": "Frontend route `/settings/:tab` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "5b86f5aafba0db5d", "scanner": "scanner-primary", "fingerprint": "b577acaa64d5fa05", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-797698801071ca8c", "level": "warning", "message": {"text": "Frontend route `/agents/:alias/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "6897960c2a08ab05", "scanner": "scanner-primary", "fingerprint": "797698801071ca8c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1dd448f44a45cb99", "level": "error", "message": {"text": "Dangling fetch: GET /api/sessions/poll?${params} (frontend/src/contexts/SessionContext.tsx:100)"}, "properties": {"repobilityId": "c91f7ea98b1afba5", "scanner": "scanner-primary", "fingerprint": "1dd448f44a45cb99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57f65a6969f1ec9c", "level": "error", "message": {"text": "Dangling fetch: GET /api/chats/${id}/stream (frontend/src/pages/Chat.tsx:779)"}, "properties": {"repobilityId": "1abe13cbb72d987d", "scanner": "scanner-primary", "fingerprint": "57f65a6969f1ec9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf206e6e31935ca1", "level": "error", "message": {"text": "Dangling fetch: POST /api/chats/new/message (frontend/src/pages/Chat.tsx:1264)"}, "properties": {"repobilityId": "d0ac082c42874014", "scanner": "scanner-primary", "fingerprint": "cf206e6e31935ca1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6cffa66940c8f2a3", "level": "error", "message": {"text": "Dangling fetch: POST /api/chats/${id}/message (frontend/src/pages/Chat.tsx:1317)"}, "properties": {"repobilityId": "60a2377d2168b5d3", "scanner": "scanner-primary", "fingerprint": "6cffa66940c8f2a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e640f97b18e247ed", "level": "error", "message": {"text": "Dangling fetch: POST /api/chats/${id}/stop (frontend/src/pages/Chat.tsx:1469)"}, "properties": {"repobilityId": "e2b11bc2e671358e", "scanner": "scanner-primary", "fingerprint": "e640f97b18e247ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2a8197f635b7190", "level": "error", "message": {"text": "Dangling fetch: GET https://registry.npmjs.org/${pkgName}/latest (backend/src/index.ts:382)"}, "properties": {"repobilityId": "ce544905442d8162", "scanner": "scanner-primary", "fingerprint": "b2a8197f635b7190", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e05ba1cd37b6101", "level": "note", "message": {"text": "Unused endpoint: USE /webhooks"}, "properties": {"repobilityId": "734a66f016f364d5", "scanner": "scanner-primary", "fingerprint": "1e05ba1cd37b6101", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8bf2f7ca3faa1f1b", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth/login"}, "properties": {"repobilityId": "f2362002714f6999", "scanner": "scanner-primary", "fingerprint": "8bf2f7ca3faa1f1b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d8120a45cb5ecfb2", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth/logout"}, "properties": {"repobilityId": "cb67f0d0bc05f3bd", "scanner": "scanner-primary", "fingerprint": "d8120a45cb5ecfb2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-688beecf60157489", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth/check"}, "properties": {"repobilityId": "a355de6cdd5cedd9", "scanner": "scanner-primary", "fingerprint": "688beecf60157489", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dde3adb27bf7eebe", "level": "note", "message": {"text": "Unused endpoint: USE /api"}, "properties": {"repobilityId": "e065f5f9c943f94a", "scanner": "scanner-primary", "fingerprint": "dde3adb27bf7eebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6c75407e0e70886", "level": "note", "message": {"text": "Unused endpoint: GET /api/docs"}, "properties": {"repobilityId": "d5061ec3ecb5f310", "scanner": "scanner-primary", "fingerprint": "a6c75407e0e70886", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b179023c3a4f51f", "level": "note", "message": {"text": "Unused endpoint: USE /api/chats"}, "properties": {"repobilityId": "1d72f6e5b88391fe", "scanner": "scanner-primary", "fingerprint": "1b179023c3a4f51f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5da77a419e1bf1c4", "level": "note", "message": {"text": "Unused endpoint: USE /api/images"}, "properties": {"repobilityId": "00de3def479a3018", "scanner": "scanner-primary", "fingerprint": "5da77a419e1bf1c4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-206f7e8691829c7a", "level": "note", "message": {"text": "Unused endpoint: USE /api/queue"}, "properties": {"repobilityId": "b072dfd16fa34c3e", "scanner": "scanner-primary", "fingerprint": "206f7e8691829c7a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b5ef4714c615abea", "level": "note", "message": {"text": "Unused endpoint: USE /api/folders"}, "properties": {"repobilityId": "e6ab89d8060973fe", "scanner": "scanner-primary", "fingerprint": "b5ef4714c615abea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-61f0530d078de560", "level": "note", "message": {"text": "Unused endpoint: USE /api/git"}, "properties": {"repobilityId": "fb1ca33ff47128b1", "scanner": "scanner-primary", "fingerprint": "61f0530d078de560", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-59451784ebed78ed", "level": "note", "message": {"text": "Unused endpoint: USE /api/app-plugins"}, "properties": {"repobilityId": "45b21bf53a828bb6", "scanner": "scanner-primary", "fingerprint": "59451784ebed78ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-094608bf688f5d04", "level": "note", "message": {"text": "Unused endpoint: USE /api/agents"}, "properties": {"repobilityId": "4c56865436970c5e", "scanner": "scanner-primary", "fingerprint": "094608bf688f5d04", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-070a044c93a3083a", "level": "note", "message": {"text": "Unused endpoint: USE /api/agent-settings"}, "properties": {"repobilityId": "6d2ec58c6e27879d", "scanner": "scanner-primary", "fingerprint": "070a044c93a3083a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9ed50f6493a17dd", "level": "note", "message": {"text": "Unused endpoint: USE /api/proxy"}, "properties": {"repobilityId": "319accd9bfdd9fc1", "scanner": "scanner-primary", "fingerprint": "b9ed50f6493a17dd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b625bd59c0654e2f", "level": "note", "message": {"text": "Unused endpoint: USE /api/connections"}, "properties": {"repobilityId": "96517eb8485568a2", "scanner": "scanner-primary", "fingerprint": "b625bd59c0654e2f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8636dd48e48d1da9", "level": "note", "message": {"text": "Unused endpoint: USE /api/sessions"}, "properties": {"repobilityId": "538c18b5ad6a20e7", "scanner": "scanner-primary", "fingerprint": "8636dd48e48d1da9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a272ec55860c533", "level": "note", "message": {"text": "Unused endpoint: USE /api/themes"}, "properties": {"repobilityId": "6f8937e4a0ccf0a6", "scanner": "scanner-primary", "fingerprint": "9a272ec55860c533", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3ff03fe8d0c1c03e", "level": "note", "message": {"text": "Unused endpoint: USE /api/custom-skills"}, "properties": {"repobilityId": "27d8c165285ceb30", "scanner": "scanner-primary", "fingerprint": "3ff03fe8d0c1c03e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-15662ab348abba6b", "level": "note", "message": {"text": "Unused endpoint: USE /api/files"}, "properties": {"repobilityId": "2f021780918bf320", "scanner": "scanner-primary", "fingerprint": "15662ab348abba6b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-934671af7c6a5d6b", "level": "note", "message": {"text": "Unused endpoint: USE /api/canvas"}, "properties": {"repobilityId": "d3d04df9b3a225ed", "scanner": "scanner-primary", "fingerprint": "934671af7c6a5d6b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-276211231070cffb", "level": "note", "message": {"text": "Unused endpoint: USE /api/mcp-tools"}, "properties": {"repobilityId": "4a63865644035516", "scanner": "scanner-primary", "fingerprint": "276211231070cffb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d2d040a93b2bf84d", "level": "note", "message": {"text": "Unused endpoint: USE /api/openrouter"}, "properties": {"repobilityId": "60c09be42fca5d99", "scanner": "scanner-primary", "fingerprint": "d2d040a93b2bf84d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-faec32131abda26e", "level": "note", "message": {"text": "Unused endpoint: USE /api/codex"}, "properties": {"repobilityId": "8bcd4b55b0c16a6e", "scanner": "scanner-primary", "fingerprint": "faec32131abda26e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-61519720bbf44ebe", "level": "note", "message": {"text": "Unused endpoint: USE /api/jobs"}, "properties": {"repobilityId": "2c6bfd321f7ad3b9", "scanner": "scanner-primary", "fingerprint": "61519720bbf44ebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fcd1decfe64e7732", "level": "note", "message": {"text": "Unused endpoint: GET /api/instance-name"}, "properties": {"repobilityId": "6e05478f8ace33da", "scanner": "scanner-primary", "fingerprint": "fcd1decfe64e7732", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-06542198663bf0e5", "level": "note", "message": {"text": "Unused endpoint: PUT /api/instance-name"}, "properties": {"repobilityId": "a551312c07d8d896", "scanner": "scanner-primary", "fingerprint": "06542198663bf0e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-458bc2918b3e2699", "level": "note", "message": {"text": "Unused endpoint: POST /api/instance-name/randomize"}, "properties": {"repobilityId": "b5d43782396cc17a", "scanner": "scanner-primary", "fingerprint": "458bc2918b3e2699", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-de3fdc17aa0b117a", "level": "note", "message": {"text": "Unused endpoint: GET /api/ignored-project-dirs"}, "properties": {"repobilityId": "bbb20286006a32f0", "scanner": "scanner-primary", "fingerprint": "de3fdc17aa0b117a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb6e8b3d88ee73b1", "level": "note", "message": {"text": "Unused endpoint: PUT /api/ignored-project-dirs"}, "properties": {"repobilityId": "2b55c23a14ea1f85", "scanner": "scanner-primary", "fingerprint": "cb6e8b3d88ee73b1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a96f6f48d363848", "level": "note", "message": {"text": "Unused endpoint: GET /api/user-contact"}, "properties": {"repobilityId": "ef81ff64981d93f2", "scanner": "scanner-primary", "fingerprint": "2a96f6f48d363848", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f2adc7326af42b7b", "level": "note", "message": {"text": "Unused endpoint: PUT /api/user-contact"}, "properties": {"repobilityId": "f043b897cc87518e", "scanner": "scanner-primary", "fingerprint": "f2adc7326af42b7b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aeb7338d5ad720da", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/claude-status"}, "properties": {"repobilityId": "a3c49700e485323f", "scanner": "scanner-primary", "fingerprint": "aeb7338d5ad720da", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a4f2f93e7d27713d", "level": "note", "message": {"text": "Unused endpoint: GET /api/system-info"}, "properties": {"repobilityId": "de2b38743aba3c24", "scanner": "scanner-primary", "fingerprint": "a4f2f93e7d27713d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-866cfadefccd0b5c", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/change-password"}, "properties": {"repobilityId": "bbb6a007d0eb0489", "scanner": "scanner-primary", "fingerprint": "866cfadefccd0b5c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c423a4d8812f3d2", "level": "note", "message": {"text": "Unused endpoint: HEAD /webhooks/:path"}, "properties": {"repobilityId": "857ceff1bea96e34", "scanner": "scanner-primary", "fingerprint": "2c423a4d8812f3d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-522604c9a9460d86", "level": "note", "message": {"text": "Unused endpoint: POST /webhooks/:path"}, "properties": {"repobilityId": "9dc8bdbe208887a5", "scanner": "scanner-primary", "fingerprint": "522604c9a9460d86", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-25eeac6bcbd983d9", "level": "note", "message": {"text": "Unused endpoint: POST /api/restart"}, "properties": {"repobilityId": "40a973d3634d5a0b", "scanner": "scanner-primary", "fingerprint": "25eeac6bcbd983d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b4d8b5420aeee16", "level": "note", "message": {"text": "Unused endpoint: GET /branches"}, "properties": {"repobilityId": "ae56cc0e7edc381e", "scanner": "scanner-primary", "fingerprint": "5b4d8b5420aeee16", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b1b274b32469392", "level": "note", "message": {"text": "Unused endpoint: GET /diff"}, "properties": {"repobilityId": "849db81c5f410db7", "scanner": "scanner-primary", "fingerprint": "8b1b274b32469392", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-93dbdcc703274f43", "level": "note", "message": {"text": "Unused endpoint: GET /diff/file"}, "properties": {"repobilityId": "26a129a7aa00adde", "scanner": "scanner-primary", "fingerprint": "93dbdcc703274f43", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c22d0bf4215aa5c9", "level": "note", "message": {"text": "Unused endpoint: GET /diff/file/raw"}, "properties": {"repobilityId": "eb48d04b0ef0822b", "scanner": "scanner-primary", "fingerprint": "c22d0bf4215aa5c9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c94edd80ffd15695", "level": "note", "message": {"text": "Unused endpoint: POST /generate-branch-name"}, "properties": {"repobilityId": "19533fd68415fb58", "scanner": "scanner-primary", "fingerprint": "c94edd80ffd15695", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ab9bf5db6820af4", "level": "note", "message": {"text": "Unused endpoint: GET /models"}, "properties": {"repobilityId": "4d28e0a3ad9ad967", "scanner": "scanner-primary", "fingerprint": "2ab9bf5db6820af4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-31ee7412e4cca1af", "level": "note", "message": {"text": "Unused endpoint: POST /:chatId/images"}, "properties": {"repobilityId": "0705153f6eee650c", "scanner": "scanner-primary", "fingerprint": "31ee7412e4cca1af", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6236b283b79811b8", "level": "note", "message": {"text": "Unused endpoint: POST /upload"}, "properties": {"repobilityId": "7ca7bf7b405fac42", "scanner": "scanner-primary", "fingerprint": "6236b283b79811b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c1cd7bb35ad519b", "level": "note", "message": {"text": "Unused endpoint: GET /:imageId"}, "properties": {"repobilityId": "143e1a53d5a69c59", "scanner": "scanner-primary", "fingerprint": "2c1cd7bb35ad519b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a4b03cd0ee74c6e", "level": "note", "message": {"text": "Unused endpoint: DELETE /:imageId"}, "properties": {"repobilityId": "6d2be2d16c10f7ad", "scanner": "scanner-primary", "fingerprint": "6a4b03cd0ee74c6e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8610a42d4d4cde1c", "level": "note", "message": {"text": "Unused endpoint: GET /:chatId/images"}, "properties": {"repobilityId": "34b1f1e13d35bfec", "scanner": "scanner-primary", "fingerprint": "8610a42d4d4cde1c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3be912c6187ea599", "level": "note", "message": {"text": "Unused endpoint: GET /runs"}, "properties": {"repobilityId": "ca43c01a1adffef6", "scanner": "scanner-primary", "fingerprint": "3be912c6187ea599", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}