{"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-8c88ec66bf166852", "name": "Stray `console.log` in TS/JS \u2014 scripts/convert-icon.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-icon.js:7"}, "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-7f945d65fbf0601a", "name": "Stray `console.log` in TS/JS \u2014 scripts/setup-python.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-python.js:49"}, "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-9ea86394670f52b7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/AgentActivity.tsx:375", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AgentActivity.tsx:375"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-497d913a8a9540c2", "name": "TODO/FIXME marker in shipping code \u2014 src/components/AgentActivity.tsx:96", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/AgentActivity.tsx:96"}, "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-549b7161a1b83d3b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SpotlightBar.tsx:442", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SpotlightBar.tsx:442"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fb870656e4bdd59", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SearchResults.tsx:198", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SearchResults.tsx:198"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfffe6b156a4fd14", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ToolStatusIndicator.tsx:69", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ToolStatusIndicator.tsx:69"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4c2b6cfafaa0d0f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/SkillsPanel.tsx:783", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/SkillsPanel.tsx:783"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3bc67e80b4a9145b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/GeneralSettings.tsx:325", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/GeneralSettings.tsx:325"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49ceaf4ada0e6606", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TasksPanel.tsx:298", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TasksPanel.tsx:298"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a27b881a10f561f3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/ModelProviderList.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/ModelProviderList.tsx:151"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-038a1dfd79ea3765", "name": "Stray `console.log` in TS/JS \u2014 electron/main.ts:532", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/main.ts:532"}, "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-ab08daefc2240faf", "name": "Stray `console.log` in TS/JS \u2014 electron/configManager.ts:466", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/configManager.ts:466"}, "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-7681b15b47edbd31", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/commandRunner.ts:192", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/commandRunner.ts:192"}, "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-e09f96911bd91131", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/skillService.ts:266", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/skillService.ts:266"}, "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-dc0462ce2d0f52ee", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/taskManager.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/taskManager.ts:79"}, "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-5f365bbf9dfc6457", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/mcpService.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/mcpService.ts:117"}, "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-1fc9bb27ddc6ac7f", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/todoManager.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/todoManager.ts:64"}, "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-998fc10e06f1e303", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/fileManager.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/fileManager.ts:67"}, "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-79be98394a7598f2", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/documentGenerator.ts:415", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/documentGenerator.ts:415"}, "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-5ecce882c07aea23", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/subAgentService.ts:183", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/subAgentService.ts:183"}, "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-44d61b8b87acd0cc", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/pythonHelper.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/pythonHelper.ts:69"}, "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-de4f1dd83dc6f800", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/everythingSearch.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/everythingSearch.ts:101"}, "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-21ce7ae473461305", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/cityLookup.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/cityLookup.ts:49"}, "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-6d7e4c804a4f9448", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/fileTools.ts:167", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/fileTools.ts:167"}, "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-740ca7d1314f71e8", "name": "Stray `console.log` in TS/JS \u2014 electron/tools/chatService.ts:1014", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/chatService.ts:1014"}, "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-2b7bf6b29ce257a5", "name": "Insecure pattern 'node_child_process' in scripts/setup-python.js:23", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/setup-python.js:23"}, "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-a213ac42cc3620a7", "name": "Insecure pattern 'node_child_process' in electron/tools/commandRunner.ts:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in electron/tools/commandRunner.ts:7"}, "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-5698d2004252e488", "name": "Insecure pattern 'node_child_process' in electron/tools/fileManager.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in electron/tools/fileManager.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-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-00a4b023fb9c22d9", "name": "Very large file: electron/tools/chatService.ts (1722 lines)", "shortDescription": {"text": "Very large file: electron/tools/chatService.ts (1722 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "5 test file(s) for 64 source file(s) (ratio 0.08). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 84 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 53 placeholder/mock markers across 9 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-93c32a5c7d83189c", "name": "Commented-code block (6 lines) in vite.config.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in vite.config.ts:7"}, "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-4497c0e5e698c3ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/ModelProviderForm.tsx:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/ModelProviderForm.tsx:89"}, "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-4537585072a21fde", "name": "Commented-code block (6 lines) in electron/main.ts:24", "shortDescription": {"text": "Commented-code block (6 lines) in electron/main.ts:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0afd6f942f5ccee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/skillService.ts:208", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/skillService.ts:208"}, "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-2ae2b97385a005b2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/mcpService.ts:292", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/mcpService.ts:292"}, "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-b42b69aa2f7a3414", "name": "Commented-code block (5 lines) in electron/tools/documentGenerator.ts:427", "shortDescription": {"text": "Commented-code block (5 lines) in electron/tools/documentGenerator.ts:427"}, "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-c8a78fd3de970dd6", "name": "Commented-code block (5 lines) in electron/tools/chatService.ts:1221", "shortDescription": {"text": "Commented-code block (5 lines) in electron/tools/chatService.ts:1221"}, "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-efd42bc673620da7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/adapters/googleAdapter.ts:332", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/adapters/googleAdapter.ts:332"}, "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-8d435059affb6e5f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/adapters/openaiAdapter.ts:129", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/adapters/openaiAdapter.ts:129"}, "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-a3e0328c11130992", "name": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/adapters/anthropicAdapter.ts:276", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/adapters/anthropicAdapter.ts:276"}, "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}}]}}, "automationDetails": {"id": "repobility/23809"}, "properties": {"repository": "642463401/EverythingAgent", "repoUrl": "https://github.com/642463401/EverythingAgent", "branch": "main"}, "results": [{"ruleId": "scanner-8c88ec66bf166852", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-icon.js:7"}, "properties": {"repobilityId": "e2b5c72a54cd10ba", "scanner": "scanner-primary", "fingerprint": "8c88ec66bf166852", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f945d65fbf0601a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-python.js:49"}, "properties": {"repobilityId": "1412843a36074805", "scanner": "scanner-primary", "fingerprint": "7f945d65fbf0601a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ea86394670f52b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AgentActivity.tsx:375"}, "properties": {"repobilityId": "416eaedcb92dde93", "scanner": "scanner-primary", "fingerprint": "9ea86394670f52b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-497d913a8a9540c2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/AgentActivity.tsx:96"}, "properties": {"repobilityId": "cce79ac72512f384", "scanner": "scanner-primary", "fingerprint": "497d913a8a9540c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-549b7161a1b83d3b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SpotlightBar.tsx:442"}, "properties": {"repobilityId": "7f19a9aa4897d546", "scanner": "scanner-primary", "fingerprint": "549b7161a1b83d3b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0fb870656e4bdd59", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SearchResults.tsx:198"}, "properties": {"repobilityId": "a5cb56071224c5ea", "scanner": "scanner-primary", "fingerprint": "0fb870656e4bdd59", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cfffe6b156a4fd14", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ToolStatusIndicator.tsx:69"}, "properties": {"repobilityId": "31ef88e9744fa3b4", "scanner": "scanner-primary", "fingerprint": "cfffe6b156a4fd14", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e4c2b6cfafaa0d0f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/SkillsPanel.tsx:783"}, "properties": {"repobilityId": "b3265f8514b60a7a", "scanner": "scanner-primary", "fingerprint": "e4c2b6cfafaa0d0f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3bc67e80b4a9145b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/GeneralSettings.tsx:325"}, "properties": {"repobilityId": "8555ad1447e6c7b4", "scanner": "scanner-primary", "fingerprint": "3bc67e80b4a9145b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-49ceaf4ada0e6606", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TasksPanel.tsx:298"}, "properties": {"repobilityId": "aedfa2fd2eb2bf26", "scanner": "scanner-primary", "fingerprint": "49ceaf4ada0e6606", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a27b881a10f561f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/ModelProviderList.tsx:151"}, "properties": {"repobilityId": "9dc5c308de74b9c6", "scanner": "scanner-primary", "fingerprint": "a27b881a10f561f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-038a1dfd79ea3765", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/main.ts:532"}, "properties": {"repobilityId": "2d2efb6cb297cadd", "scanner": "scanner-primary", "fingerprint": "038a1dfd79ea3765", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ab08daefc2240faf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/configManager.ts:466"}, "properties": {"repobilityId": "7a9bf23e875370a6", "scanner": "scanner-primary", "fingerprint": "ab08daefc2240faf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7681b15b47edbd31", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/commandRunner.ts:192"}, "properties": {"repobilityId": "d2def603fb0a6b1b", "scanner": "scanner-primary", "fingerprint": "7681b15b47edbd31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e09f96911bd91131", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/skillService.ts:266"}, "properties": {"repobilityId": "965032e312d64183", "scanner": "scanner-primary", "fingerprint": "e09f96911bd91131", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc0462ce2d0f52ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/taskManager.ts:79"}, "properties": {"repobilityId": "0850a17839e9f66e", "scanner": "scanner-primary", "fingerprint": "dc0462ce2d0f52ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f365bbf9dfc6457", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/mcpService.ts:117"}, "properties": {"repobilityId": "4f566cd9b9547620", "scanner": "scanner-primary", "fingerprint": "5f365bbf9dfc6457", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fc9bb27ddc6ac7f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/todoManager.ts:64"}, "properties": {"repobilityId": "907fcf5de8038038", "scanner": "scanner-primary", "fingerprint": "1fc9bb27ddc6ac7f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-998fc10e06f1e303", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/fileManager.ts:67"}, "properties": {"repobilityId": "24cddcbc2a1f1d1d", "scanner": "scanner-primary", "fingerprint": "998fc10e06f1e303", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79be98394a7598f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/documentGenerator.ts:415"}, "properties": {"repobilityId": "34a90efa0db956af", "scanner": "scanner-primary", "fingerprint": "79be98394a7598f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ecce882c07aea23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/subAgentService.ts:183"}, "properties": {"repobilityId": "e188bec79d6211bc", "scanner": "scanner-primary", "fingerprint": "5ecce882c07aea23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44d61b8b87acd0cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/pythonHelper.ts:69"}, "properties": {"repobilityId": "b0a503badb53159f", "scanner": "scanner-primary", "fingerprint": "44d61b8b87acd0cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de4f1dd83dc6f800", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/everythingSearch.ts:101"}, "properties": {"repobilityId": "96ecefaa9b2d1944", "scanner": "scanner-primary", "fingerprint": "de4f1dd83dc6f800", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-21ce7ae473461305", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/cityLookup.ts:49"}, "properties": {"repobilityId": "399527c97b0fef4d", "scanner": "scanner-primary", "fingerprint": "21ce7ae473461305", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d7e4c804a4f9448", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/fileTools.ts:167"}, "properties": {"repobilityId": "2bcb899798bd460c", "scanner": "scanner-primary", "fingerprint": "6d7e4c804a4f9448", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-740ca7d1314f71e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 electron/tools/chatService.ts:1014"}, "properties": {"repobilityId": "6232dee31f0b9d24", "scanner": "scanner-primary", "fingerprint": "740ca7d1314f71e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b7bf6b29ce257a5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/setup-python.js:23"}, "properties": {"repobilityId": "ec735e45e15e7396", "scanner": "scanner-primary", "fingerprint": "2b7bf6b29ce257a5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/setup-python.js"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-a213ac42cc3620a7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in electron/tools/commandRunner.ts:7"}, "properties": {"repobilityId": "80de591a9feda685", "scanner": "scanner-primary", "fingerprint": "a213ac42cc3620a7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "electron/tools/commandRunner.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-5698d2004252e488", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in electron/tools/fileManager.ts:9"}, "properties": {"repobilityId": "bc7d1cdaeecfb44f", "scanner": "scanner-primary", "fingerprint": "5698d2004252e488", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "electron/tools/fileManager.ts"}, "region": {"startLine": 9}}}]}, {"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-00a4b023fb9c22d9", "level": "note", "message": {"text": "Very large file: electron/tools/chatService.ts (1722 lines)"}, "properties": {"repobilityId": "444ba25392b30863", "scanner": "scanner-primary", "fingerprint": "00a4b023fb9c22d9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "93a1eae8f48e0b0e", "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": "593d8c17ba20c4bf", "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": "abf79bb3e2b341a0", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-93c32a5c7d83189c", "level": "none", "message": {"text": "Commented-code block (6 lines) in vite.config.ts:7"}, "properties": {"repobilityId": "e6dc47536ac15f58", "scanner": "scanner-primary", "fingerprint": "93c32a5c7d83189c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4497c0e5e698c3ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/ModelProviderForm.tsx:89"}, "properties": {"repobilityId": "d6633054635e2f8b", "scanner": "scanner-primary", "fingerprint": "4497c0e5e698c3ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4537585072a21fde", "level": "none", "message": {"text": "Commented-code block (6 lines) in electron/main.ts:24"}, "properties": {"repobilityId": "089f98e70d842ed5", "scanner": "scanner-primary", "fingerprint": "4537585072a21fde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0afd6f942f5ccee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/skillService.ts:208"}, "properties": {"repobilityId": "6b81578cb773ff98", "scanner": "scanner-primary", "fingerprint": "d0afd6f942f5ccee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ae2b97385a005b2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/mcpService.ts:292"}, "properties": {"repobilityId": "5be38d88959564e7", "scanner": "scanner-primary", "fingerprint": "2ae2b97385a005b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b42b69aa2f7a3414", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/tools/documentGenerator.ts:427"}, "properties": {"repobilityId": "7b78cc52229238e9", "scanner": "scanner-primary", "fingerprint": "b42b69aa2f7a3414", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8a78fd3de970dd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/tools/chatService.ts:1221"}, "properties": {"repobilityId": "1d8a0515bd177401", "scanner": "scanner-primary", "fingerprint": "c8a78fd3de970dd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efd42bc673620da7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/adapters/googleAdapter.ts:332"}, "properties": {"repobilityId": "6f0a5fd514317e06", "scanner": "scanner-primary", "fingerprint": "efd42bc673620da7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8d435059affb6e5f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/adapters/openaiAdapter.ts:129"}, "properties": {"repobilityId": "334c92c43ea26371", "scanner": "scanner-primary", "fingerprint": "8d435059affb6e5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3e0328c11130992", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/tools/adapters/anthropicAdapter.ts:276"}, "properties": {"repobilityId": "ff01556c561d13ea", "scanner": "scanner-primary", "fingerprint": "a3e0328c11130992", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}