{"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-efb6ad488b36312b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/UnifiedBar.tsx:175", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/UnifiedBar.tsx:175"}, "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-a9aabf1e33a2d04c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/AgentsSection.tsx:456", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/AgentsSection.tsx:456"}, "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-3980cb8aea62a579", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/RepositorySection.tsx:917", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/RepositorySection.tsx:917"}, "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-96fdd3aa1cce5434", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/ShortcutsSection.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/ShortcutsSection.tsx:131"}, "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-f848f939385178ba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/Settings.tsx:133", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/Settings.tsx:133"}, "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-fa230801f2d2198e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/DiffPane.tsx:197", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/DiffPane.tsx:197"}, "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-78eb3e2b1abff98b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/workspace/MarkdownPreview.tsx:7", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/workspace/MarkdownPreview.tsx:7"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75e2be38a35e7bd2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/TerminalPane.tsx:1790", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/TerminalPane.tsx:1790"}, "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-360a9773c69b11ff", "name": "Stray `console.log` in TS/JS \u2014 src/components/workspace/TerminalPane.tsx:561", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/workspace/TerminalPane.tsx:561"}, "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-83da94c647594527", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/ReviewCommentsBar.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/ReviewCommentsBar.tsx:168"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4eeab5b5e45dcb8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/FileTree.tsx:221", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/FileTree.tsx:221"}, "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-d2c2f1d6f2594f6d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/MessageQueueButton.tsx:187", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/MessageQueueButton.tsx:187"}, "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-e5db8597f68baefc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/GitPanel.tsx:328", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/GitPanel.tsx:328"}, "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-893a1d5f6d52d8c1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sidebar/ProjectActionsMenuItems.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sidebar/ProjectActionsMenuItems.tsx:89"}, "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-0d27c9c030063208", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sidebar/Sidebar.tsx:506", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sidebar/Sidebar.tsx:506"}, "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-1a52c032849553bf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/Dashboard.tsx:121", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/Dashboard.tsx:121"}, "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-4e383db150a3c4be", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/FindInFilesDialog.tsx:358", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/FindInFilesDialog.tsx:358"}, "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-2b9393579ef10db0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/NewWorkspaceDialog.tsx:501", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/NewWorkspaceDialog.tsx:501"}, "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-d294529ff180c711", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/NewProjectDialog.tsx:280", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/NewProjectDialog.tsx:280"}, "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-5151f880bca1ce27", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/ShortcutsHelpDialog.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/ShortcutsHelpDialog.tsx:120"}, "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-c69c77aaf320a28c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/FileFinderDialog.tsx:270", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/FileFinderDialog.tsx:270"}, "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-255e1ff76b72cd4e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/WelcomeDialog.tsx:484", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/WelcomeDialog.tsx:484"}, "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-cb2ec592c8d4af9f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/BroadcastDialog.tsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/BroadcastDialog.tsx:132"}, "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-68b14b12ccab2841", "name": "Stray `console.log` in TS/JS \u2014 src/lib/terminalRenderer.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/terminalRenderer.ts:16"}, "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-549f4f40bca80bdc", "name": "Stray `console.log` in TS/JS \u2014 src/store/update.ts:256", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/store/update.ts:256"}, "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-ba736c2bb4f8ceb7", "name": "Insecure pattern 'node_child_process' in scripts/dev.mjs:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/dev.mjs:10"}, "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-b6dffef7ba0d7bf1", "name": "Insecure pattern 'node_child_process' in scripts/dev.signals.test.mjs:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/dev.signals.test.mjs:12"}, "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-c8f05ad211630893", "name": "Insecure pattern 'cors_wildcard' in .claude/skills/release/SKILL.md:178", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in .claude/skills/release/SKILL.md:178"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c30b8baef05e0f7", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/workspace/DiffPane.tsx:74", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/workspace/DiffPane.tsx:74"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27e3db4c5b3d7674", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/workspace/MarkdownPreview.tsx:46", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/workspace/MarkdownPreview.tsx:46"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-35988176d6a2c11a", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/workspace/reviewCommentsExt.ts:401", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/workspace/reviewCommentsExt.ts:401"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46c644c6227e4d4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1838a141491ce38c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dd66ffe937b3fa05", "name": "Very large file: src-tauri/src/sandbox.rs (2383 lines)", "shortDescription": {"text": "Very large file: src-tauri/src/sandbox.rs (2383 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-3ed494adac786535", "name": "Very large file: src-tauri/src/lib.rs (7193 lines)", "shortDescription": {"text": "Very large file: src-tauri/src/lib.rs (7193 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-530814e5772ddb51", "name": "Very large file: src/components/settings/RepositorySection.tsx (1096 lines)", "shortDescription": {"text": "Very large file: src/components/settings/RepositorySection.tsx (1096 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-98d6d479ea489b15", "name": "Very large file: src/components/workspace/TerminalPane.tsx (2589 lines)", "shortDescription": {"text": "Very large file: src/components/workspace/TerminalPane.tsx (2589 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-0beae6756acbf409", "name": "Very large file: src/components/workspace/RightPanel.tsx (1397 lines)", "shortDescription": {"text": "Very large file: src/components/workspace/RightPanel.tsx (1397 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-5c3548eaa5d1d20b", "name": "Very large file: src/components/sidebar/Sidebar.tsx (1501 lines)", "shortDescription": {"text": "Very large file: src/components/sidebar/Sidebar.tsx (1501 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-d7aaf5d253429d4b", "name": "Very large file: src/lib/explorer/fileIcons.ts (2681 lines)", "shortDescription": {"text": "Very large file: src/lib/explorer/fileIcons.ts (2681 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-726951af9f748a23", "name": "Very large file: src/store/app.ts (1389 lines)", "shortDescription": {"text": "Very large file: src/store/app.ts (1389 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": "10 test file(s) for 110 source file(s) (ratio 0.09). 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 9 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 119 placeholder/mock markers across 29 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1151e9141a00aeff", "name": "Commented-code block (5 lines) in vite.config.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in vite.config.ts:6"}, "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-0c9078e333050e33", "name": "Commented-code block (12 lines) in scripts/dev.mjs:28", "shortDescription": {"text": "Commented-code block (12 lines) in scripts/dev.mjs: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-45d68d29a6e0efc5", "name": "Commented-code block (5 lines) in scripts/dev.signals.test.mjs:2", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/dev.signals.test.mjs:2"}, "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-d5667aab130afa54", "name": "Commented-code block (5 lines) in src/main.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/main.tsx:8"}, "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-8cc3823ac3d0945e", "name": "Commented-code block (6 lines) in src/App.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/App.tsx:1"}, "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-7a97bc7cc810e325", "name": "Commented-code block (5 lines) in src/components/UpdaterBanner.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/UpdaterBanner.tsx:1"}, "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-c9d57e9138793c89", "name": "Commented-code block (6 lines) in src/components/UnifiedBar.tsx:78", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/UnifiedBar.tsx:78"}, "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-b9d800ddf004eef9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/AppearanceSection.tsx:327", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/AppearanceSection.tsx:327"}, "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-04165949906cd5de", "name": "Legacy-named symbol `files_to_copy` in src/components/settings/RepositorySection.tsx:98", "shortDescription": {"text": "Legacy-named symbol `files_to_copy` in src/components/settings/RepositorySection.tsx:98"}, "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-279d252e0778b4e3", "name": "Commented-code block (6 lines) in src/components/settings/RepositorySection.tsx:43", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/settings/RepositorySection.tsx: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-8bc93c3063c13271", "name": "Commented-code block (5 lines) in src/components/settings/ShortcutsSection.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/settings/ShortcutsSection.tsx:1"}, "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-d831f9129d5658ab", "name": "Commented-code block (6 lines) in src/components/settings/PromptLibrarySection.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/settings/PromptLibrarySection.tsx:1"}, "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-c1b5c4c1f3fd7507", "name": "Commented-code block (6 lines) in src/components/ui/Tooltip.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ui/Tooltip.tsx:10"}, "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-cb135b20a8b77373", "name": "Commented-code block (6 lines) in src/components/ui/Dropdown.tsx:42", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ui/Dropdown.tsx:42"}, "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-a13dfc72727bb369", "name": "Commented-code block (5 lines) in src/components/ui/Dialog.tsx:58", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/ui/Dialog.tsx:58"}, "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-cfa37c0cf7cea92b", "name": "Commented-code block (5 lines) in src/components/workspace/useTabStripDrag.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/workspace/useTabStripDrag.ts:1"}, "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-ca6a73f918738445", "name": "Commented-code block (5 lines) in src/components/workspace/MarkdownPane.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/workspace/MarkdownPane.tsx:1"}, "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-7a68714c5ab5f4ba", "name": "Commented-code block (6 lines) in src/components/workspace/WorkspaceView.tsx:199", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/workspace/WorkspaceView.tsx:199"}, "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-c4d90403dfcad0e3", "name": "Commented-code block (6 lines) in src/components/workspace/DiffPane.tsx:95", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/workspace/DiffPane.tsx:95"}, "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-22f285910325f7b1", "name": "Commented-code block (5 lines) in src/components/workspace/TabBar.tsx:70", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/workspace/TabBar.tsx:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-566b250de8211dd4", "name": "Commented-code block (5 lines) in src/components/workspace/MarkdownPreview.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/workspace/MarkdownPreview.tsx:6"}, "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-73466a2bce368759", "name": "Commented-code block (7 lines) in src/components/workspace/TerminalPane.tsx:35", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/workspace/TerminalPane.tsx:35"}, "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-36dd77ea84a6bd2b", "name": "Commented-code block (5 lines) in src/components/workspace/ReviewCommentsBar.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/workspace/ReviewCommentsBar.tsx:1"}, "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-46c8622ac5dd3515", "name": "Commented-code block (5 lines) in src/components/workspace/FileTree.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/workspace/FileTree.tsx:1"}, "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-8410ab8a4d9948df", "name": "Commented-code block (5 lines) in src/components/workspace/reviewCommentsExt.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/workspace/reviewCommentsExt.ts:1"}, "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-33ba23d3ac91fa66", "name": "Commented-code block (5 lines) in src/components/workspace/RightPanel.tsx:55", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/workspace/RightPanel.tsx:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9faed60d8fc60be7", "name": "Commented-code block (6 lines) in src/components/workspace/EditorPane.tsx:77", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/workspace/EditorPane.tsx:77"}, "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-5603bdad5e898233", "name": "Commented-code block (6 lines) in src/components/workspace/AuxTerminal.tsx:97", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/workspace/AuxTerminal.tsx:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-035e9875e2f43ec9", "name": "Commented-code block (10 lines) in src/components/workspace/GitPanel.tsx:3", "shortDescription": {"text": "Commented-code block (10 lines) in src/components/workspace/GitPanel.tsx:3"}, "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-6d1d3995b497b9dd", "name": "Commented-code block (5 lines) in src/components/sidebar/Sidebar.tsx:139", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/sidebar/Sidebar.tsx:139"}, "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-52b2ca5a1ac2f426", "name": "Commented-code block (6 lines) in src/components/views/Dashboard.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/views/Dashboard.tsx:10"}, "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-fca0ea667b68c5fa", "name": "Commented-code block (5 lines) in src/components/dialogs/WorkspaceSandboxDialog.tsx:66", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/dialogs/WorkspaceSandboxDialog.tsx:66"}, "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-4d3c0f2070e56bf8", "name": "Commented-code block (5 lines) in src/components/dialogs/ConfirmDialog.tsx:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/dialogs/ConfirmDialog.tsx:64"}, "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-80e1ff458319139d", "name": "Commented-code block (6 lines) in src/components/dialogs/CustomCommandDialog.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/dialogs/CustomCommandDialog.tsx:1"}, "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-4551817aa90de011", "name": "Commented-code block (5 lines) in src/components/dialogs/FindInFilesDialog.tsx:151", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/dialogs/FindInFilesDialog.tsx:151"}, "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-281c0dca7a95eac0", "name": "Commented-code block (8 lines) in src/components/dialogs/NewWorkspaceDialog.tsx:34", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/dialogs/NewWorkspaceDialog.tsx:34"}, "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-d64736e5b36695e3", "name": "Commented-code block (6 lines) in src/components/dialogs/EditCommandDialog.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/dialogs/EditCommandDialog.tsx:1"}, "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-857b34eed77b2c9c", "name": "Commented-code block (5 lines) in src/components/dialogs/NewProjectDialog.tsx:83", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/dialogs/NewProjectDialog.tsx: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-96b50182ca70c8b6", "name": "Commented-code block (9 lines) in src/components/dialogs/ResumeOverrideDialog.tsx:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/dialogs/ResumeOverrideDialog.tsx:1"}, "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-8fd77647c1b31e6e", "name": "Commented-code block (6 lines) in src/components/dialogs/WelcomeDialog.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/dialogs/WelcomeDialog.tsx:1"}, "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-a947e0cfbbd87579", "name": "Commented-code block (6 lines) in src/lib/excludePresets.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/excludePresets.ts:3"}, "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-1c45c536aa20e8d5", "name": "Commented-code block (6 lines) in src/lib/shortcuts.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/shortcuts.ts:3"}, "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-d28dfd3497898fcb", "name": "Commented-code block (5 lines) in src/lib/modKeyClass.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/modKeyClass.ts:1"}, "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-e1a5e2ef2f3afe43", "name": "Commented-code block (7 lines) in src/lib/editorTheme.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/editorTheme.ts:3"}, "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-3922071860d57616", "name": "Commented-code block (7 lines) in src/lib/loginShell.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/loginShell.ts:1"}, "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-900c0905e23dd0b2", "name": "Commented-code block (6 lines) in src/lib/notificationSounds.ts:64", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/notificationSounds.ts:64"}, "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-3e86c738d967876e", "name": "Commented-code block (6 lines) in src/lib/closeTab.ts:30", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/closeTab.ts:30"}, "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-aeda855dfd8adaed", "name": "Commented-code block (8 lines) in src/lib/terminalDrop.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/terminalDrop.ts:3"}, "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-9c2db7c17039ea77", "name": "Commented-code block (7 lines) in src/lib/archiveWorkspace.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/archiveWorkspace.ts: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-46d4e970c674d7e7", "name": "Commented-code block (5 lines) in src/lib/ipc.ts:507", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/ipc.ts:507"}, "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-87489ffd47196be0", "name": "Commented-code block (7 lines) in src/lib/tabFocus.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/tabFocus.ts:1"}, "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-5a1f731e946fe503", "name": "Commented-code block (5 lines) in src/lib/agents.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/agents.ts:1"}, "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-8bd4fe372c41e8d1", "name": "Commented-code block (8 lines) in src/lib/agentSend.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/agentSend.ts:6"}, "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-eb58e62856680349", "name": "Legacy-named symbol `files_to_copy` in src/lib/types.ts:29", "shortDescription": {"text": "Legacy-named symbol `files_to_copy` in src/lib/types.ts:29"}, "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-6036932abc7283a3", "name": "Commented-code block (5 lines) in src/lib/types.ts:396", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/types.ts:396"}, "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-a98a267bfba2a36d", "name": "Commented-code block (5 lines) in src/lib/terminalRenderer.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/terminalRenderer.ts:3"}, "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-f84d045dfd60d50a", "name": "Commented-code block (9 lines) in src/lib/runPrompt.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/runPrompt.ts:1"}, "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-fa44f8fc01e42fa8", "name": "Commented-code block (10 lines) in src/lib/ime.ts:8", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/ime.ts:8"}, "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-16abaa2542498248", "name": "Commented-code block (5 lines) in src/lib/review.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/review.ts:1"}, "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-a30fcd139983c077", "name": "Commented-code block (5 lines) in src/icons/cli.tsx:44", "shortDescription": {"text": "Commented-code block (5 lines) in src/icons/cli.tsx:44"}, "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-4d28300cb24b8fcb", "name": "Commented-code block (17 lines) in src/hooks/useShortcuts.ts:1", "shortDescription": {"text": "Commented-code block (17 lines) in src/hooks/useShortcuts.ts:1"}, "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-54a4ae7b9b3975fa", "name": "Commented-code block (7 lines) in src/hooks/useAttentionNotifier.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/hooks/useAttentionNotifier.ts: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-ccadca5c15e502ed", "name": "Commented-code block (9 lines) in src/store/prompts.ts:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/store/prompts.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29989abcad788bce", "name": "Commented-code block (6 lines) in src/store/update.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in src/store/update.ts:10"}, "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-dc0c88781c9f93aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/store/update.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/store/update.ts:21"}, "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-65fb8665221968eb", "name": "Commented-code block (5 lines) in src/store/app.ts:375", "shortDescription": {"text": "Commented-code block (5 lines) in src/store/app.ts:375"}, "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-8aa2e36d1510337e", "name": "Commented-code block (5 lines) in src/store/resume.integration.test.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/store/resume.integration.test.ts:3"}, "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-ac84023da8b00ad5", "name": "Commented-code block (5 lines) in src/store/prefs.ts:125", "shortDescription": {"text": "Commented-code block (5 lines) in src/store/prefs.ts:125"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58e07facc8fa1cc2", "name": "Commented-code block (6 lines) in src/store/reviewComments.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/store/reviewComments.ts:1"}, "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}}]}}, "automationDetails": {"id": "repobility/19662"}, "properties": {"repository": "simion/termic", "repoUrl": "https://github.com/simion/termic", "branch": "main"}, "results": [{"ruleId": "scanner-efb6ad488b36312b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/UnifiedBar.tsx:175"}, "properties": {"repobilityId": "e8a1857b10d6bb08", "scanner": "scanner-primary", "fingerprint": "efb6ad488b36312b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a9aabf1e33a2d04c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/AgentsSection.tsx:456"}, "properties": {"repobilityId": "2411f1367a6bc5cf", "scanner": "scanner-primary", "fingerprint": "a9aabf1e33a2d04c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3980cb8aea62a579", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/RepositorySection.tsx:917"}, "properties": {"repobilityId": "dc51e6e09bce3de8", "scanner": "scanner-primary", "fingerprint": "3980cb8aea62a579", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-96fdd3aa1cce5434", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/ShortcutsSection.tsx:131"}, "properties": {"repobilityId": "1078e0a6a49e533b", "scanner": "scanner-primary", "fingerprint": "96fdd3aa1cce5434", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f848f939385178ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/Settings.tsx:133"}, "properties": {"repobilityId": "6c12a7eb9e3e48f1", "scanner": "scanner-primary", "fingerprint": "f848f939385178ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa230801f2d2198e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/DiffPane.tsx:197"}, "properties": {"repobilityId": "0790b1790e9f8d9d", "scanner": "scanner-primary", "fingerprint": "fa230801f2d2198e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-78eb3e2b1abff98b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/workspace/MarkdownPreview.tsx:7"}, "properties": {"repobilityId": "6bd66689aadd9fe8", "scanner": "scanner-primary", "fingerprint": "78eb3e2b1abff98b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-75e2be38a35e7bd2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/TerminalPane.tsx:1790"}, "properties": {"repobilityId": "7c197b284ba25681", "scanner": "scanner-primary", "fingerprint": "75e2be38a35e7bd2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-360a9773c69b11ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/workspace/TerminalPane.tsx:561"}, "properties": {"repobilityId": "0d134ceb82904dfa", "scanner": "scanner-primary", "fingerprint": "360a9773c69b11ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83da94c647594527", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/ReviewCommentsBar.tsx:168"}, "properties": {"repobilityId": "4644ceca12ea09d8", "scanner": "scanner-primary", "fingerprint": "83da94c647594527", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4eeab5b5e45dcb8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/FileTree.tsx:221"}, "properties": {"repobilityId": "1f4b1f2496394ca3", "scanner": "scanner-primary", "fingerprint": "c4eeab5b5e45dcb8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2c2f1d6f2594f6d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/MessageQueueButton.tsx:187"}, "properties": {"repobilityId": "b50f65d255e9ab6f", "scanner": "scanner-primary", "fingerprint": "d2c2f1d6f2594f6d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e5db8597f68baefc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workspace/GitPanel.tsx:328"}, "properties": {"repobilityId": "410ac48e67646fa4", "scanner": "scanner-primary", "fingerprint": "e5db8597f68baefc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-893a1d5f6d52d8c1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sidebar/ProjectActionsMenuItems.tsx:89"}, "properties": {"repobilityId": "751d0cd288a04987", "scanner": "scanner-primary", "fingerprint": "893a1d5f6d52d8c1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d27c9c030063208", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sidebar/Sidebar.tsx:506"}, "properties": {"repobilityId": "91f4c9a271ec4ae1", "scanner": "scanner-primary", "fingerprint": "0d27c9c030063208", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a52c032849553bf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/Dashboard.tsx:121"}, "properties": {"repobilityId": "5cf227a0e71e2903", "scanner": "scanner-primary", "fingerprint": "1a52c032849553bf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e383db150a3c4be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/FindInFilesDialog.tsx:358"}, "properties": {"repobilityId": "22e3449217277600", "scanner": "scanner-primary", "fingerprint": "4e383db150a3c4be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2b9393579ef10db0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/NewWorkspaceDialog.tsx:501"}, "properties": {"repobilityId": "90b12dc4bc813c6d", "scanner": "scanner-primary", "fingerprint": "2b9393579ef10db0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d294529ff180c711", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/NewProjectDialog.tsx:280"}, "properties": {"repobilityId": "8dc5700543663b6f", "scanner": "scanner-primary", "fingerprint": "d294529ff180c711", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5151f880bca1ce27", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/ShortcutsHelpDialog.tsx:120"}, "properties": {"repobilityId": "f62c9ad449406732", "scanner": "scanner-primary", "fingerprint": "5151f880bca1ce27", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c69c77aaf320a28c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/FileFinderDialog.tsx:270"}, "properties": {"repobilityId": "6c98084ef81ecdb3", "scanner": "scanner-primary", "fingerprint": "c69c77aaf320a28c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-255e1ff76b72cd4e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/WelcomeDialog.tsx:484"}, "properties": {"repobilityId": "f2d534c767cf2b77", "scanner": "scanner-primary", "fingerprint": "255e1ff76b72cd4e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb2ec592c8d4af9f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dialogs/BroadcastDialog.tsx:132"}, "properties": {"repobilityId": "f4675df807f04614", "scanner": "scanner-primary", "fingerprint": "cb2ec592c8d4af9f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68b14b12ccab2841", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/terminalRenderer.ts:16"}, "properties": {"repobilityId": "f1f715d97555fae4", "scanner": "scanner-primary", "fingerprint": "68b14b12ccab2841", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-549f4f40bca80bdc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/store/update.ts:256"}, "properties": {"repobilityId": "bf9e186ac0dce736", "scanner": "scanner-primary", "fingerprint": "549f4f40bca80bdc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba736c2bb4f8ceb7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/dev.mjs:10"}, "properties": {"repobilityId": "ccf61f89afbd7b7b", "scanner": "scanner-primary", "fingerprint": "ba736c2bb4f8ceb7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dev.mjs"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-b6dffef7ba0d7bf1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/dev.signals.test.mjs:12"}, "properties": {"repobilityId": "884e82a7e9a698ee", "scanner": "scanner-primary", "fingerprint": "b6dffef7ba0d7bf1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dev.signals.test.mjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-c8f05ad211630893", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in .claude/skills/release/SKILL.md:178"}, "properties": {"repobilityId": "ee435cb47790c7a3", "scanner": "scanner-primary", "fingerprint": "c8f05ad211630893", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/release/SKILL.md"}, "region": {"startLine": 178}}}]}, {"ruleId": "scanner-0c30b8baef05e0f7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/workspace/DiffPane.tsx:74"}, "properties": {"repobilityId": "91ac5daae980c1e0", "scanner": "scanner-primary", "fingerprint": "0c30b8baef05e0f7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/workspace/DiffPane.tsx"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-27e3db4c5b3d7674", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/workspace/MarkdownPreview.tsx:46"}, "properties": {"repobilityId": "7310ac6e4a1ac5da", "scanner": "scanner-primary", "fingerprint": "27e3db4c5b3d7674", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/workspace/MarkdownPreview.tsx"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-35988176d6a2c11a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/workspace/reviewCommentsExt.ts:401"}, "properties": {"repobilityId": "f19113c2a7f14cd7", "scanner": "scanner-primary", "fingerprint": "35988176d6a2c11a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/workspace/reviewCommentsExt.ts"}, "region": {"startLine": 401}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e040b5c136c9f9b8", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e040b5c136c9f9b8", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 227}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dd66ffe937b3fa05", "level": "note", "message": {"text": "Very large file: src-tauri/src/sandbox.rs (2383 lines)"}, "properties": {"repobilityId": "aca17085c013c214", "scanner": "scanner-primary", "fingerprint": "dd66ffe937b3fa05", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ed494adac786535", "level": "note", "message": {"text": "Very large file: src-tauri/src/lib.rs (7193 lines)"}, "properties": {"repobilityId": "f072133525c0c23b", "scanner": "scanner-primary", "fingerprint": "3ed494adac786535", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-530814e5772ddb51", "level": "note", "message": {"text": "Very large file: src/components/settings/RepositorySection.tsx (1096 lines)"}, "properties": {"repobilityId": "88e76368c74d2a1d", "scanner": "scanner-primary", "fingerprint": "530814e5772ddb51", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-98d6d479ea489b15", "level": "note", "message": {"text": "Very large file: src/components/workspace/TerminalPane.tsx (2589 lines)"}, "properties": {"repobilityId": "696e72f3b2e802a0", "scanner": "scanner-primary", "fingerprint": "98d6d479ea489b15", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0beae6756acbf409", "level": "note", "message": {"text": "Very large file: src/components/workspace/RightPanel.tsx (1397 lines)"}, "properties": {"repobilityId": "36517541240ed2f2", "scanner": "scanner-primary", "fingerprint": "0beae6756acbf409", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5c3548eaa5d1d20b", "level": "note", "message": {"text": "Very large file: src/components/sidebar/Sidebar.tsx (1501 lines)"}, "properties": {"repobilityId": "a5535e5e15759bed", "scanner": "scanner-primary", "fingerprint": "5c3548eaa5d1d20b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d7aaf5d253429d4b", "level": "note", "message": {"text": "Very large file: src/lib/explorer/fileIcons.ts (2681 lines)"}, "properties": {"repobilityId": "e334624e7ea075c2", "scanner": "scanner-primary", "fingerprint": "d7aaf5d253429d4b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-726951af9f748a23", "level": "note", "message": {"text": "Very large file: src/store/app.ts (1389 lines)"}, "properties": {"repobilityId": "1f348672593d8526", "scanner": "scanner-primary", "fingerprint": "726951af9f748a23", "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": "1ed9bc4eb5198a10", "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": "1d523687b9ca6c35", "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": "f2c70e35393416e4", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "2ed86b07acb44152", "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": "fb15ca651454acc2", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-1151e9141a00aeff", "level": "none", "message": {"text": "Commented-code block (5 lines) in vite.config.ts:6"}, "properties": {"repobilityId": "b731e3c361cd61f4", "scanner": "scanner-primary", "fingerprint": "1151e9141a00aeff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c9078e333050e33", "level": "none", "message": {"text": "Commented-code block (12 lines) in scripts/dev.mjs:28"}, "properties": {"repobilityId": "cd59cbd9403ea1b5", "scanner": "scanner-primary", "fingerprint": "0c9078e333050e33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45d68d29a6e0efc5", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/dev.signals.test.mjs:2"}, "properties": {"repobilityId": "41b280acef3f6710", "scanner": "scanner-primary", "fingerprint": "45d68d29a6e0efc5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5667aab130afa54", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/main.tsx:8"}, "properties": {"repobilityId": "7de8c3f621dcee20", "scanner": "scanner-primary", "fingerprint": "d5667aab130afa54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8cc3823ac3d0945e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/App.tsx:1"}, "properties": {"repobilityId": "8781b55a838426a4", "scanner": "scanner-primary", "fingerprint": "8cc3823ac3d0945e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a97bc7cc810e325", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/UpdaterBanner.tsx:1"}, "properties": {"repobilityId": "3c0ef7de8c6f0c05", "scanner": "scanner-primary", "fingerprint": "7a97bc7cc810e325", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9d57e9138793c89", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/UnifiedBar.tsx:78"}, "properties": {"repobilityId": "50db955f68e5dbd4", "scanner": "scanner-primary", "fingerprint": "c9d57e9138793c89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9d800ddf004eef9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/AppearanceSection.tsx:327"}, "properties": {"repobilityId": "fc7f11301a390a71", "scanner": "scanner-primary", "fingerprint": "b9d800ddf004eef9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-04165949906cd5de", "level": "note", "message": {"text": "Legacy-named symbol `files_to_copy` in src/components/settings/RepositorySection.tsx:98"}, "properties": {"repobilityId": "e1b5f8800fb93791", "scanner": "scanner-primary", "fingerprint": "04165949906cd5de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-279d252e0778b4e3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/settings/RepositorySection.tsx:43"}, "properties": {"repobilityId": "8899f1c0dd9513bb", "scanner": "scanner-primary", "fingerprint": "279d252e0778b4e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bc93c3063c13271", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/settings/ShortcutsSection.tsx:1"}, "properties": {"repobilityId": "4f00b8e88e364feb", "scanner": "scanner-primary", "fingerprint": "8bc93c3063c13271", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d831f9129d5658ab", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/settings/PromptLibrarySection.tsx:1"}, "properties": {"repobilityId": "194dc61f014329dc", "scanner": "scanner-primary", "fingerprint": "d831f9129d5658ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1b5c4c1f3fd7507", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ui/Tooltip.tsx:10"}, "properties": {"repobilityId": "a22133dcef323634", "scanner": "scanner-primary", "fingerprint": "c1b5c4c1f3fd7507", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb135b20a8b77373", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ui/Dropdown.tsx:42"}, "properties": {"repobilityId": "961950308843ca50", "scanner": "scanner-primary", "fingerprint": "cb135b20a8b77373", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a13dfc72727bb369", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/ui/Dialog.tsx:58"}, "properties": {"repobilityId": "5dec140a464e0538", "scanner": "scanner-primary", "fingerprint": "a13dfc72727bb369", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfa37c0cf7cea92b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/workspace/useTabStripDrag.ts:1"}, "properties": {"repobilityId": "e4eef137bc518106", "scanner": "scanner-primary", "fingerprint": "cfa37c0cf7cea92b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca6a73f918738445", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/workspace/MarkdownPane.tsx:1"}, "properties": {"repobilityId": "fbecf656fe6e5198", "scanner": "scanner-primary", "fingerprint": "ca6a73f918738445", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a68714c5ab5f4ba", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/workspace/WorkspaceView.tsx:199"}, "properties": {"repobilityId": "919247fed1ed9d92", "scanner": "scanner-primary", "fingerprint": "7a68714c5ab5f4ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4d90403dfcad0e3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/workspace/DiffPane.tsx:95"}, "properties": {"repobilityId": "da0d3d4eacba05ef", "scanner": "scanner-primary", "fingerprint": "c4d90403dfcad0e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22f285910325f7b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/workspace/TabBar.tsx:70"}, "properties": {"repobilityId": "00fc23c6f3e872e8", "scanner": "scanner-primary", "fingerprint": "22f285910325f7b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-566b250de8211dd4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/workspace/MarkdownPreview.tsx:6"}, "properties": {"repobilityId": "b0577acf31cffeef", "scanner": "scanner-primary", "fingerprint": "566b250de8211dd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73466a2bce368759", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/workspace/TerminalPane.tsx:35"}, "properties": {"repobilityId": "96be44dca7d204fe", "scanner": "scanner-primary", "fingerprint": "73466a2bce368759", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36dd77ea84a6bd2b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/workspace/ReviewCommentsBar.tsx:1"}, "properties": {"repobilityId": "5c3aee089f271ab4", "scanner": "scanner-primary", "fingerprint": "36dd77ea84a6bd2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46c8622ac5dd3515", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/workspace/FileTree.tsx:1"}, "properties": {"repobilityId": "1c03100baa1ba0a5", "scanner": "scanner-primary", "fingerprint": "46c8622ac5dd3515", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8410ab8a4d9948df", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/workspace/reviewCommentsExt.ts:1"}, "properties": {"repobilityId": "54cba177af558c69", "scanner": "scanner-primary", "fingerprint": "8410ab8a4d9948df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33ba23d3ac91fa66", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/workspace/RightPanel.tsx:55"}, "properties": {"repobilityId": "77d747a7786b6c21", "scanner": "scanner-primary", "fingerprint": "33ba23d3ac91fa66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9faed60d8fc60be7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/workspace/EditorPane.tsx:77"}, "properties": {"repobilityId": "5862c274c493dcd8", "scanner": "scanner-primary", "fingerprint": "9faed60d8fc60be7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5603bdad5e898233", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/workspace/AuxTerminal.tsx:97"}, "properties": {"repobilityId": "635fcec444de4a05", "scanner": "scanner-primary", "fingerprint": "5603bdad5e898233", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-035e9875e2f43ec9", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/components/workspace/GitPanel.tsx:3"}, "properties": {"repobilityId": "e4b79a70cbebae39", "scanner": "scanner-primary", "fingerprint": "035e9875e2f43ec9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d1d3995b497b9dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/sidebar/Sidebar.tsx:139"}, "properties": {"repobilityId": "0e87c2dc5dbe98e1", "scanner": "scanner-primary", "fingerprint": "6d1d3995b497b9dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52b2ca5a1ac2f426", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/views/Dashboard.tsx:10"}, "properties": {"repobilityId": "f893a311533b5a26", "scanner": "scanner-primary", "fingerprint": "52b2ca5a1ac2f426", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fca0ea667b68c5fa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/dialogs/WorkspaceSandboxDialog.tsx:66"}, "properties": {"repobilityId": "9d6d8c9e2bd65194", "scanner": "scanner-primary", "fingerprint": "fca0ea667b68c5fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d3c0f2070e56bf8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/dialogs/ConfirmDialog.tsx:64"}, "properties": {"repobilityId": "7a958a29bf2687c5", "scanner": "scanner-primary", "fingerprint": "4d3c0f2070e56bf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80e1ff458319139d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/dialogs/CustomCommandDialog.tsx:1"}, "properties": {"repobilityId": "dca08a207fae8cf8", "scanner": "scanner-primary", "fingerprint": "80e1ff458319139d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4551817aa90de011", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/dialogs/FindInFilesDialog.tsx:151"}, "properties": {"repobilityId": "76a701c35f41f564", "scanner": "scanner-primary", "fingerprint": "4551817aa90de011", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-281c0dca7a95eac0", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/dialogs/NewWorkspaceDialog.tsx:34"}, "properties": {"repobilityId": "59c3acfeb7479659", "scanner": "scanner-primary", "fingerprint": "281c0dca7a95eac0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d64736e5b36695e3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/dialogs/EditCommandDialog.tsx:1"}, "properties": {"repobilityId": "532401b056c0615c", "scanner": "scanner-primary", "fingerprint": "d64736e5b36695e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-857b34eed77b2c9c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/dialogs/NewProjectDialog.tsx:83"}, "properties": {"repobilityId": "7c5ac895bef5a53c", "scanner": "scanner-primary", "fingerprint": "857b34eed77b2c9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96b50182ca70c8b6", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/dialogs/ResumeOverrideDialog.tsx:1"}, "properties": {"repobilityId": "cc0283f89daf8d51", "scanner": "scanner-primary", "fingerprint": "96b50182ca70c8b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fd77647c1b31e6e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/dialogs/WelcomeDialog.tsx:1"}, "properties": {"repobilityId": "8cc017e8db6ae529", "scanner": "scanner-primary", "fingerprint": "8fd77647c1b31e6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a947e0cfbbd87579", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/excludePresets.ts:3"}, "properties": {"repobilityId": "6a18f76dad304097", "scanner": "scanner-primary", "fingerprint": "a947e0cfbbd87579", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c45c536aa20e8d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/shortcuts.ts:3"}, "properties": {"repobilityId": "585e6c5a2893c568", "scanner": "scanner-primary", "fingerprint": "1c45c536aa20e8d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d28dfd3497898fcb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/modKeyClass.ts:1"}, "properties": {"repobilityId": "a52a3b58ea1b2a4f", "scanner": "scanner-primary", "fingerprint": "d28dfd3497898fcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1a5e2ef2f3afe43", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/editorTheme.ts:3"}, "properties": {"repobilityId": "e8428f0c469fabc6", "scanner": "scanner-primary", "fingerprint": "e1a5e2ef2f3afe43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3922071860d57616", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/loginShell.ts:1"}, "properties": {"repobilityId": "a68632490b268987", "scanner": "scanner-primary", "fingerprint": "3922071860d57616", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-900c0905e23dd0b2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/notificationSounds.ts:64"}, "properties": {"repobilityId": "e6245ee06b701e49", "scanner": "scanner-primary", "fingerprint": "900c0905e23dd0b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e86c738d967876e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/closeTab.ts:30"}, "properties": {"repobilityId": "5e108fbc8f7df83e", "scanner": "scanner-primary", "fingerprint": "3e86c738d967876e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aeda855dfd8adaed", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/terminalDrop.ts:3"}, "properties": {"repobilityId": "491fec58ef844b22", "scanner": "scanner-primary", "fingerprint": "aeda855dfd8adaed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c2db7c17039ea77", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/archiveWorkspace.ts:4"}, "properties": {"repobilityId": "b55bf9c0e5b0c86a", "scanner": "scanner-primary", "fingerprint": "9c2db7c17039ea77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46d4e970c674d7e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/ipc.ts:507"}, "properties": {"repobilityId": "d4ae3c2be97b6994", "scanner": "scanner-primary", "fingerprint": "46d4e970c674d7e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87489ffd47196be0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/tabFocus.ts:1"}, "properties": {"repobilityId": "b83107c304ea888a", "scanner": "scanner-primary", "fingerprint": "87489ffd47196be0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a1f731e946fe503", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/agents.ts:1"}, "properties": {"repobilityId": "4872982e81b72422", "scanner": "scanner-primary", "fingerprint": "5a1f731e946fe503", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bd4fe372c41e8d1", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/agentSend.ts:6"}, "properties": {"repobilityId": "367635712d9ecbb5", "scanner": "scanner-primary", "fingerprint": "8bd4fe372c41e8d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb58e62856680349", "level": "note", "message": {"text": "Legacy-named symbol `files_to_copy` in src/lib/types.ts:29"}, "properties": {"repobilityId": "a6503a89d89dbb8e", "scanner": "scanner-primary", "fingerprint": "eb58e62856680349", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6036932abc7283a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/types.ts:396"}, "properties": {"repobilityId": "fccd1119ae512187", "scanner": "scanner-primary", "fingerprint": "6036932abc7283a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a98a267bfba2a36d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/terminalRenderer.ts:3"}, "properties": {"repobilityId": "57b09c17a473917a", "scanner": "scanner-primary", "fingerprint": "a98a267bfba2a36d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f84d045dfd60d50a", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/runPrompt.ts:1"}, "properties": {"repobilityId": "f890fdf4232b96a8", "scanner": "scanner-primary", "fingerprint": "f84d045dfd60d50a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa44f8fc01e42fa8", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/ime.ts:8"}, "properties": {"repobilityId": "74d146fede899d85", "scanner": "scanner-primary", "fingerprint": "fa44f8fc01e42fa8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16abaa2542498248", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/review.ts:1"}, "properties": {"repobilityId": "a9f9264a3492b788", "scanner": "scanner-primary", "fingerprint": "16abaa2542498248", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a30fcd139983c077", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/icons/cli.tsx:44"}, "properties": {"repobilityId": "2ff150d96cd81412", "scanner": "scanner-primary", "fingerprint": "a30fcd139983c077", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d28300cb24b8fcb", "level": "none", "message": {"text": "Commented-code block (17 lines) in src/hooks/useShortcuts.ts:1"}, "properties": {"repobilityId": "62e3e1aa5304eb6a", "scanner": "scanner-primary", "fingerprint": "4d28300cb24b8fcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54a4ae7b9b3975fa", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/hooks/useAttentionNotifier.ts:4"}, "properties": {"repobilityId": "216d83d9cdb5fb8e", "scanner": "scanner-primary", "fingerprint": "54a4ae7b9b3975fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccadca5c15e502ed", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/store/prompts.ts:5"}, "properties": {"repobilityId": "544946386ebe33ff", "scanner": "scanner-primary", "fingerprint": "ccadca5c15e502ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29989abcad788bce", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/store/update.ts:10"}, "properties": {"repobilityId": "704406294090779e", "scanner": "scanner-primary", "fingerprint": "29989abcad788bce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc0c88781c9f93aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/store/update.ts:21"}, "properties": {"repobilityId": "97f13321a4bd002b", "scanner": "scanner-primary", "fingerprint": "dc0c88781c9f93aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65fb8665221968eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/store/app.ts:375"}, "properties": {"repobilityId": "5e5f69ad9d7c3681", "scanner": "scanner-primary", "fingerprint": "65fb8665221968eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8aa2e36d1510337e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/store/resume.integration.test.ts:3"}, "properties": {"repobilityId": "6b3c67e92eb19d4d", "scanner": "scanner-primary", "fingerprint": "8aa2e36d1510337e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac84023da8b00ad5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/store/prefs.ts:125"}, "properties": {"repobilityId": "0066ecefe2a9744b", "scanner": "scanner-primary", "fingerprint": "ac84023da8b00ad5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58e07facc8fa1cc2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/store/reviewComments.ts:1"}, "properties": {"repobilityId": "3b30252997a1b1a2", "scanner": "scanner-primary", "fingerprint": "58e07facc8fa1cc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}