{"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-5367a62e5eb7d76f", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-katex-css.js:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-katex-css.js:30"}, "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-50cd195b0caf41ba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/StatusBar.tsx:172", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/StatusBar.tsx:172"}, "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-33a2279f087147fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/common/EmojiInputDialog.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/common/EmojiInputDialog.tsx:102"}, "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-86d651ce7b7b17d0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/common/DirectoryPickerDialog.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/common/DirectoryPickerDialog.tsx:61"}, "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-f6d7e7b62634f5fa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/filetree/FileTreeItem.tsx:247", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/filetree/FileTreeItem.tsx:247"}, "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-902675a47b882823", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/CommandPalette.tsx:224", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/CommandPalette.tsx:224"}, "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-d9e12eb13cb37724", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/slide/SlidePreview.tsx:37", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/slide/SlidePreview.tsx:37"}, "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-913e8191c6b36852", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/conflict/ConflictFileList.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/conflict/ConflictFileList.tsx:42"}, "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-86bf273d123cd400", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/editor/MermaidEditorDialog.tsx:101", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/editor/MermaidEditorDialog.tsx:101"}, "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-b9379487c6102348", "name": "Stray `console.log` in TS/JS \u2014 src/lib/scripta-config.ts:249", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/scripta-config.ts:249"}, "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-46ed6ba5fd18fe46", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/slide/SlidePreview.tsx:37", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/slide/SlidePreview.tsx:37"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-97131330b7496d91", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/editor/MermaidEditorDialog.tsx:101", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/editor/MermaidEditorDialog.tsx:101"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-db2dbd0fed66b73e", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/editor/MermaidEditorDialog.test.tsx:208", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/editor/MermaidEditorDialog.test.tsx:208"}, "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-d3c23fd866e460dc", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/editor/live-preview/code-block-copy.ts:53", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/editor/live-preview/code-block-copy.ts:53"}, "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-ff6fc34f174041b0", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/editor/live-preview/mermaid.ts:117", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/editor/live-preview/mermaid.ts:117"}, "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-922e94d925071ca8", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/mermaid.ts:154", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/mermaid.ts:154"}, "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-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-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50a448cd7805535d", "name": "Very large file: src/components/common/emoji-data.ts (2914 lines)", "shortDescription": {"text": "Very large file: src/components/common/emoji-data.ts (2914 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-cd7f156e8e9d906e", "name": "Very large file: src/components/editor/live-preview/table-decoration.ts (1891 lines)", "shortDescription": {"text": "Very large file: src/components/editor/live-preview/table-decoration.ts (1891 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-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 68 placeholder/mock markers across 19 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-7f4fb3db63c3c3ae", "name": "Commented-code block (13 lines) in electron.vite.config.ts:18", "shortDescription": {"text": "Commented-code block (13 lines) in electron.vite.config.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b97af298b81fd4f9", "name": "Commented-code block (5 lines) in electron/preload/ipc-error-decode.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in electron/preload/ipc-error-decode.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-ef3c9c957a850e68", "name": "Commented-code block (6 lines) in electron/preload/index.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in electron/preload/index.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c18e81d5b6935ef5", "name": "Commented-code block (5 lines) in electron/main/index.ts:28", "shortDescription": {"text": "Commented-code block (5 lines) in electron/main/index.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a94c3ddb0dc637c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 electron/main/index.ts:213", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/main/index.ts:213"}, "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-6bd68de927d52ff7", "name": "Commented-code block (5 lines) in electron/main/menu.ts:18", "shortDescription": {"text": "Commented-code block (5 lines) in electron/main/menu.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9379d82615a20ff8", "name": "Commented-code block (5 lines) in electron/main/ipc/pdf.test.ts:182", "shortDescription": {"text": "Commented-code block (5 lines) in electron/main/ipc/pdf.test.ts:182"}, "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-8a3de35c8118c218", "name": "Commented-code block (5 lines) in electron/main/ipc/window.test.ts:70", "shortDescription": {"text": "Commented-code block (5 lines) in electron/main/ipc/window.test.ts: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-e4b4669c68b15969", "name": "Commented-code block (9 lines) in electron/main/ipc/git.ts:19", "shortDescription": {"text": "Commented-code block (9 lines) in electron/main/ipc/git.ts:19"}, "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-43433631a376d15c", "name": "Commented-code block (16 lines) in electron/main/ipc/pdf.ts:15", "shortDescription": {"text": "Commented-code block (16 lines) in electron/main/ipc/pdf.ts:15"}, "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-7dcf0a0979291e23", "name": "Commented-code block (5 lines) in electron/main/ipc/git.test.ts:453", "shortDescription": {"text": "Commented-code block (5 lines) in electron/main/ipc/git.test.ts:453"}, "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-b3b39d72cf578ee7", "name": "Commented-code block (9 lines) in electron/main/ipc/ogp.test.ts:20", "shortDescription": {"text": "Commented-code block (9 lines) in electron/main/ipc/ogp.test.ts:20"}, "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-e4c08b23a890bedf", "name": "Commented-code block (9 lines) in electron/main/ipc/fs.ts:43", "shortDescription": {"text": "Commented-code block (9 lines) in electron/main/ipc/fs.ts:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-528b0c20088c5991", "name": "Commented-code block (8 lines) in electron/main/ipc/search.ts:58", "shortDescription": {"text": "Commented-code block (8 lines) in electron/main/ipc/search.ts: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-7cba9c47f0023b56", "name": "Commented-code block (7 lines) in electron/main/ipc/ogp.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in electron/main/ipc/ogp.ts:9"}, "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-d298ac3c2a4af97a", "name": "Commented-code block (5 lines) in electron/main/ipc/workspace.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in electron/main/ipc/workspace.ts:11"}, "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-92fcce6c1c0e355e", "name": "Commented-code block (5 lines) in electron/main/ipc/window.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in electron/main/ipc/window.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-94c4904b6c3ee622", "name": "Commented-code block (5 lines) in electron/main/utils/path-guard.ts:134", "shortDescription": {"text": "Commented-code block (5 lines) in electron/main/utils/path-guard.ts:134"}, "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-17a52aad03790ecd", "name": "Commented-code block (6 lines) in electron/main/utils/git-env.ts:41", "shortDescription": {"text": "Commented-code block (6 lines) in electron/main/utils/git-env.ts:41"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a6849b3b1663f40", "name": "Commented-code block (6 lines) in electron/main/utils/structured-error.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in electron/main/utils/structured-error.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-4196422844ba77e5", "name": "Commented-code block (8 lines) in electron/main/utils/ssrf-guard.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in electron/main/utils/ssrf-guard.ts:9"}, "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-34a75232533a5b0e", "name": "Commented-code block (6 lines) in electron/main/utils/http-fetch.ts:63", "shortDescription": {"text": "Commented-code block (6 lines) in electron/main/utils/http-fetch.ts:63"}, "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-160717a627aa580c", "name": "Commented-code block (5 lines) in electron/main/utils/entry-filter.ts:83", "shortDescription": {"text": "Commented-code block (5 lines) in electron/main/utils/entry-filter.ts:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c7e44896dd4ece6c", "name": "Commented-code block (5 lines) in electron/main/utils/ogp-parser.ts:160", "shortDescription": {"text": "Commented-code block (5 lines) in electron/main/utils/ogp-parser.ts:160"}, "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-9d2979686bff06cc", "name": "Commented-code block (7 lines) in electron/main/utils/semver-lite.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in electron/main/utils/semver-lite.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-721f5a17fc5ece94", "name": "Commented-code block (8 lines) in electron/main/utils/http-fetch.test.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in electron/main/utils/http-fetch.test.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-35b004352279ff68", "name": "Commented-code block (5 lines) in src/types/errors.ts:79", "shortDescription": {"text": "Commented-code block (5 lines) in src/types/errors.ts:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c1e0d41d7355bc2", "name": "Legacy-named symbol `resolveOld` in src/stores/wikilink.test.ts:154", "shortDescription": {"text": "Legacy-named symbol `resolveOld` in src/stores/wikilink.test.ts:154"}, "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-7a498e5fd4dc2579", "name": "Commented-code block (6 lines) in src/components/layout/Sidebar.tsx:67", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/layout/Sidebar.tsx:67"}, "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-f595eaeb354df40e", "name": "Commented-code block (6 lines) in src/components/common/EmojiInputDialog.test.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/common/EmojiInputDialog.test.tsx:11"}, "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-f6bbcf87172dde2b", "name": "Commented-code block (7 lines) in src/components/common/Tooltip.test.tsx:13", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/common/Tooltip.test.tsx:13"}, "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-15ffb562bf1fcaab", "name": "Commented-code block (6 lines) in src/components/editor/ScratchpadPanel.tsx:131", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/editor/ScratchpadPanel.tsx:131"}, "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-68edb874b7210a5a", "name": "Commented-code block (8 lines) in src/components/editor/editor-theme.ts:36", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/editor/editor-theme.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9eaf1b80fc239767", "name": "Commented-code block (6 lines) in src/components/editor/live-preview/math.ts:25", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/editor/live-preview/math.ts:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c2da30c9a3d219e3", "name": "Commented-code block (6 lines) in src/components/editor/live-preview/lists.test.ts:751", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/editor/live-preview/lists.test.ts:751"}, "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-42c7084970bc8b92", "name": "Commented-code block (6 lines) in src/components/editor/live-preview/lists.ts:657", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/editor/live-preview/lists.ts:657"}, "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-a55d9d5b8375bca2", "name": "Commented-code block (6 lines) in src/components/editor/live-preview/link-cards.ts:70", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/editor/live-preview/link-cards.ts: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-e1314e99e5315799", "name": "Commented-code block (5 lines) in src/components/editor/live-preview/link-cards.test.ts:446", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/link-cards.test.ts:446"}, "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-7f3dbc7804e5283c", "name": "Commented-code block (5 lines) in src/components/editor/live-preview/mermaid.ts:120", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/mermaid.ts:120"}, "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-4e4d373628c96d24", "name": "Commented-code block (5 lines) in src/components/editor/live-preview/table-decoration.ts:780", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/table-decoration.ts:780"}, "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-25d3774dd4a238f8", "name": "Commented-code block (5 lines) in src/components/editor/live-preview/tables.ts:227", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/tables.ts:227"}, "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-2e1de9b8180ecfb6", "name": "Commented-code block (5 lines) in src/components/editor/live-preview/test-helper.ts:23", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/test-helper.ts:23"}, "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-6cd1a1e914e46b9d", "name": "Commented-code block (5 lines) in src/components/editor/live-preview/horizontal-rules.test.ts:98", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/horizontal-rules.test.ts:98"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-747fad1f8a4fe1b2", "name": "Commented-code block (6 lines) in src/lib/markdown-to-html.ts:67", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/markdown-to-html.ts:67"}, "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-59dd4fe2b5321882", "name": "Commented-code block (7 lines) in src/lib/export.ts:286", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/export.ts:286"}, "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-0003a500bdedbe1a", "name": "Commented-code block (5 lines) in src/hooks/useGitSync.test.ts:241", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useGitSync.test.ts:241"}, "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-a6655041622f981f", "name": "Commented-code block (5 lines) in src/hooks/useFileWatcher.ts:75", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useFileWatcher.ts:75"}, "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-e9b34156c1b149a4", "name": "Commented-code block (7 lines) in e2e/electron/pdf-pagebreak.electron.spec.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in e2e/electron/pdf-pagebreak.electron.spec.ts:9"}, "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-c79ec8e8ab8a83cd", "name": "Commented-code block (5 lines) in e2e/electron/helpers/launch.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/electron/helpers/launch.ts:11"}, "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-814c00e8cead6e2a", "name": "Commented-code block (5 lines) in e2e/helpers/electron-api-mock.ts:363", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/helpers/electron-api-mock.ts:363"}, "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/23261"}, "properties": {"repository": "ymnao/scripta", "repoUrl": "https://github.com/ymnao/scripta", "branch": "main"}, "results": [{"ruleId": "scanner-5367a62e5eb7d76f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-katex-css.js:30"}, "properties": {"repobilityId": "6d0b41eb81f60fcc", "scanner": "scanner-primary", "fingerprint": "5367a62e5eb7d76f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50cd195b0caf41ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/StatusBar.tsx:172"}, "properties": {"repobilityId": "a1f927a7e97c78a3", "scanner": "scanner-primary", "fingerprint": "50cd195b0caf41ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-33a2279f087147fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/common/EmojiInputDialog.tsx:102"}, "properties": {"repobilityId": "4163e638d8e545a9", "scanner": "scanner-primary", "fingerprint": "33a2279f087147fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86d651ce7b7b17d0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/common/DirectoryPickerDialog.tsx:61"}, "properties": {"repobilityId": "4e5125e2d2315693", "scanner": "scanner-primary", "fingerprint": "86d651ce7b7b17d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f6d7e7b62634f5fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/filetree/FileTreeItem.tsx:247"}, "properties": {"repobilityId": "d1a98b5eeb050e1f", "scanner": "scanner-primary", "fingerprint": "f6d7e7b62634f5fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-902675a47b882823", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/CommandPalette.tsx:224"}, "properties": {"repobilityId": "c4eeb69c88b0c31a", "scanner": "scanner-primary", "fingerprint": "902675a47b882823", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9e12eb13cb37724", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/slide/SlidePreview.tsx:37"}, "properties": {"repobilityId": "c4e32e1987d73535", "scanner": "scanner-primary", "fingerprint": "d9e12eb13cb37724", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-913e8191c6b36852", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/conflict/ConflictFileList.tsx:42"}, "properties": {"repobilityId": "1d52013ddd050e05", "scanner": "scanner-primary", "fingerprint": "913e8191c6b36852", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86bf273d123cd400", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/editor/MermaidEditorDialog.tsx:101"}, "properties": {"repobilityId": "20b765d5d5a5ec5d", "scanner": "scanner-primary", "fingerprint": "86bf273d123cd400", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b9379487c6102348", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/scripta-config.ts:249"}, "properties": {"repobilityId": "db4b65ff925e19da", "scanner": "scanner-primary", "fingerprint": "b9379487c6102348", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46ed6ba5fd18fe46", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/slide/SlidePreview.tsx:37"}, "properties": {"repobilityId": "8078598101b21b12", "scanner": "scanner-primary", "fingerprint": "46ed6ba5fd18fe46", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/slide/SlidePreview.tsx"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-97131330b7496d91", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/editor/MermaidEditorDialog.tsx:101"}, "properties": {"repobilityId": "7be2b9c0366d492b", "scanner": "scanner-primary", "fingerprint": "97131330b7496d91", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/editor/MermaidEditorDialog.tsx"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-db2dbd0fed66b73e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/editor/MermaidEditorDialog.test.tsx:208"}, "properties": {"repobilityId": "9a0280e748c99289", "scanner": "scanner-primary", "fingerprint": "db2dbd0fed66b73e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/editor/MermaidEditorDialog.test.tsx"}, "region": {"startLine": 208}}}]}, {"ruleId": "scanner-d3c23fd866e460dc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/editor/live-preview/code-block-copy.ts:53"}, "properties": {"repobilityId": "b27f0d043256411c", "scanner": "scanner-primary", "fingerprint": "d3c23fd866e460dc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/editor/live-preview/code-block-copy.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-ff6fc34f174041b0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/editor/live-preview/mermaid.ts:117"}, "properties": {"repobilityId": "e3344079156931e6", "scanner": "scanner-primary", "fingerprint": "ff6fc34f174041b0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/editor/live-preview/mermaid.ts"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-922e94d925071ca8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/mermaid.ts:154"}, "properties": {"repobilityId": "b76bae2983f40de4", "scanner": "scanner-primary", "fingerprint": "922e94d925071ca8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/mermaid.ts"}, "region": {"startLine": 154}}}]}, {"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-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50a448cd7805535d", "level": "note", "message": {"text": "Very large file: src/components/common/emoji-data.ts (2914 lines)"}, "properties": {"repobilityId": "31d414228d0a78d1", "scanner": "scanner-primary", "fingerprint": "50a448cd7805535d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cd7f156e8e9d906e", "level": "note", "message": {"text": "Very large file: src/components/editor/live-preview/table-decoration.ts (1891 lines)"}, "properties": {"repobilityId": "4c960e9f5e17b663", "scanner": "scanner-primary", "fingerprint": "cd7f156e8e9d906e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "55c5683c1afcfbf6", "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": "44eca262c370766d", "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": "d1547d2d0d1b5497", "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": "a05ba3cfa56f78e1", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-7f4fb3db63c3c3ae", "level": "none", "message": {"text": "Commented-code block (13 lines) in electron.vite.config.ts:18"}, "properties": {"repobilityId": "d30e50fa965ff5de", "scanner": "scanner-primary", "fingerprint": "7f4fb3db63c3c3ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b97af298b81fd4f9", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/preload/ipc-error-decode.ts:5"}, "properties": {"repobilityId": "2a2d2096c48922cb", "scanner": "scanner-primary", "fingerprint": "b97af298b81fd4f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef3c9c957a850e68", "level": "none", "message": {"text": "Commented-code block (6 lines) in electron/preload/index.ts:7"}, "properties": {"repobilityId": "f55d6ed53b2a5053", "scanner": "scanner-primary", "fingerprint": "ef3c9c957a850e68", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c18e81d5b6935ef5", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/main/index.ts:28"}, "properties": {"repobilityId": "6d3f96e8e8651c25", "scanner": "scanner-primary", "fingerprint": "c18e81d5b6935ef5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a94c3ddb0dc637c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 electron/main/index.ts:213"}, "properties": {"repobilityId": "2597119570b8ef71", "scanner": "scanner-primary", "fingerprint": "5a94c3ddb0dc637c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6bd68de927d52ff7", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/main/menu.ts:18"}, "properties": {"repobilityId": "5c92978a48c246e3", "scanner": "scanner-primary", "fingerprint": "6bd68de927d52ff7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9379d82615a20ff8", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/main/ipc/pdf.test.ts:182"}, "properties": {"repobilityId": "3ce6114e61c303ef", "scanner": "scanner-primary", "fingerprint": "9379d82615a20ff8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a3de35c8118c218", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/main/ipc/window.test.ts:70"}, "properties": {"repobilityId": "1496e30f21294310", "scanner": "scanner-primary", "fingerprint": "8a3de35c8118c218", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4b4669c68b15969", "level": "none", "message": {"text": "Commented-code block (9 lines) in electron/main/ipc/git.ts:19"}, "properties": {"repobilityId": "b357c2e3a29c2776", "scanner": "scanner-primary", "fingerprint": "e4b4669c68b15969", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43433631a376d15c", "level": "none", "message": {"text": "Commented-code block (16 lines) in electron/main/ipc/pdf.ts:15"}, "properties": {"repobilityId": "c0c4c887ea97e514", "scanner": "scanner-primary", "fingerprint": "43433631a376d15c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7dcf0a0979291e23", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/main/ipc/git.test.ts:453"}, "properties": {"repobilityId": "2781451964b05f42", "scanner": "scanner-primary", "fingerprint": "7dcf0a0979291e23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3b39d72cf578ee7", "level": "none", "message": {"text": "Commented-code block (9 lines) in electron/main/ipc/ogp.test.ts:20"}, "properties": {"repobilityId": "47e9d268462ec19f", "scanner": "scanner-primary", "fingerprint": "b3b39d72cf578ee7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4c08b23a890bedf", "level": "none", "message": {"text": "Commented-code block (9 lines) in electron/main/ipc/fs.ts:43"}, "properties": {"repobilityId": "78d0a9130e348b26", "scanner": "scanner-primary", "fingerprint": "e4c08b23a890bedf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-528b0c20088c5991", "level": "none", "message": {"text": "Commented-code block (8 lines) in electron/main/ipc/search.ts:58"}, "properties": {"repobilityId": "5671158b3c5252c4", "scanner": "scanner-primary", "fingerprint": "528b0c20088c5991", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cba9c47f0023b56", "level": "none", "message": {"text": "Commented-code block (7 lines) in electron/main/ipc/ogp.ts:9"}, "properties": {"repobilityId": "3188303861862e4b", "scanner": "scanner-primary", "fingerprint": "7cba9c47f0023b56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d298ac3c2a4af97a", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/main/ipc/workspace.ts:11"}, "properties": {"repobilityId": "57c60f22ec438d98", "scanner": "scanner-primary", "fingerprint": "d298ac3c2a4af97a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92fcce6c1c0e355e", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/main/ipc/window.ts:29"}, "properties": {"repobilityId": "f651f445d1e53acd", "scanner": "scanner-primary", "fingerprint": "92fcce6c1c0e355e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94c4904b6c3ee622", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/main/utils/path-guard.ts:134"}, "properties": {"repobilityId": "4ab4d1e22b2005e9", "scanner": "scanner-primary", "fingerprint": "94c4904b6c3ee622", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17a52aad03790ecd", "level": "none", "message": {"text": "Commented-code block (6 lines) in electron/main/utils/git-env.ts:41"}, "properties": {"repobilityId": "c01664b678a2b19a", "scanner": "scanner-primary", "fingerprint": "17a52aad03790ecd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a6849b3b1663f40", "level": "none", "message": {"text": "Commented-code block (6 lines) in electron/main/utils/structured-error.ts:10"}, "properties": {"repobilityId": "7f7f027f1fc2d5bf", "scanner": "scanner-primary", "fingerprint": "4a6849b3b1663f40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4196422844ba77e5", "level": "none", "message": {"text": "Commented-code block (8 lines) in electron/main/utils/ssrf-guard.ts:9"}, "properties": {"repobilityId": "655a07fd60e9d570", "scanner": "scanner-primary", "fingerprint": "4196422844ba77e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34a75232533a5b0e", "level": "none", "message": {"text": "Commented-code block (6 lines) in electron/main/utils/http-fetch.ts:63"}, "properties": {"repobilityId": "d49ec66d6be50229", "scanner": "scanner-primary", "fingerprint": "34a75232533a5b0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-160717a627aa580c", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/main/utils/entry-filter.ts:83"}, "properties": {"repobilityId": "d69664cc5fb9795f", "scanner": "scanner-primary", "fingerprint": "160717a627aa580c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7e44896dd4ece6c", "level": "none", "message": {"text": "Commented-code block (5 lines) in electron/main/utils/ogp-parser.ts:160"}, "properties": {"repobilityId": "f8d168a10c8afb19", "scanner": "scanner-primary", "fingerprint": "c7e44896dd4ece6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d2979686bff06cc", "level": "none", "message": {"text": "Commented-code block (7 lines) in electron/main/utils/semver-lite.ts:1"}, "properties": {"repobilityId": "8b30ef80a6215c83", "scanner": "scanner-primary", "fingerprint": "9d2979686bff06cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-721f5a17fc5ece94", "level": "none", "message": {"text": "Commented-code block (8 lines) in electron/main/utils/http-fetch.test.ts:5"}, "properties": {"repobilityId": "c6b00c0e938f891c", "scanner": "scanner-primary", "fingerprint": "721f5a17fc5ece94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35b004352279ff68", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/types/errors.ts:79"}, "properties": {"repobilityId": "ff12b331d4f8558e", "scanner": "scanner-primary", "fingerprint": "35b004352279ff68", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c1e0d41d7355bc2", "level": "note", "message": {"text": "Legacy-named symbol `resolveOld` in src/stores/wikilink.test.ts:154"}, "properties": {"repobilityId": "9657123763213974", "scanner": "scanner-primary", "fingerprint": "1c1e0d41d7355bc2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7a498e5fd4dc2579", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/layout/Sidebar.tsx:67"}, "properties": {"repobilityId": "5de64b29175a4b2d", "scanner": "scanner-primary", "fingerprint": "7a498e5fd4dc2579", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f595eaeb354df40e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/common/EmojiInputDialog.test.tsx:11"}, "properties": {"repobilityId": "5e29403a0bce7abe", "scanner": "scanner-primary", "fingerprint": "f595eaeb354df40e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6bbcf87172dde2b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/common/Tooltip.test.tsx:13"}, "properties": {"repobilityId": "7ed16f9f2dc93926", "scanner": "scanner-primary", "fingerprint": "f6bbcf87172dde2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15ffb562bf1fcaab", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/editor/ScratchpadPanel.tsx:131"}, "properties": {"repobilityId": "54171ac3ebd13de1", "scanner": "scanner-primary", "fingerprint": "15ffb562bf1fcaab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68edb874b7210a5a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/editor/editor-theme.ts:36"}, "properties": {"repobilityId": "d1e0026b3c83b5d4", "scanner": "scanner-primary", "fingerprint": "68edb874b7210a5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9eaf1b80fc239767", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/editor/live-preview/math.ts:25"}, "properties": {"repobilityId": "e26169ec61c0fbeb", "scanner": "scanner-primary", "fingerprint": "9eaf1b80fc239767", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2da30c9a3d219e3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/editor/live-preview/lists.test.ts:751"}, "properties": {"repobilityId": "2745feb1c9ad7d2a", "scanner": "scanner-primary", "fingerprint": "c2da30c9a3d219e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42c7084970bc8b92", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/editor/live-preview/lists.ts:657"}, "properties": {"repobilityId": "1e662532a2f48a80", "scanner": "scanner-primary", "fingerprint": "42c7084970bc8b92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a55d9d5b8375bca2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/editor/live-preview/link-cards.ts:70"}, "properties": {"repobilityId": "3e0d2c44e136e4d0", "scanner": "scanner-primary", "fingerprint": "a55d9d5b8375bca2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1314e99e5315799", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/link-cards.test.ts:446"}, "properties": {"repobilityId": "9c32c9e8220786d3", "scanner": "scanner-primary", "fingerprint": "e1314e99e5315799", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f3dbc7804e5283c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/mermaid.ts:120"}, "properties": {"repobilityId": "abd408fb50565bf6", "scanner": "scanner-primary", "fingerprint": "7f3dbc7804e5283c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e4d373628c96d24", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/table-decoration.ts:780"}, "properties": {"repobilityId": "42efa755708f6908", "scanner": "scanner-primary", "fingerprint": "4e4d373628c96d24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25d3774dd4a238f8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/tables.ts:227"}, "properties": {"repobilityId": "c47e2610b120f529", "scanner": "scanner-primary", "fingerprint": "25d3774dd4a238f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e1de9b8180ecfb6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/test-helper.ts:23"}, "properties": {"repobilityId": "a1072c562e25f4a8", "scanner": "scanner-primary", "fingerprint": "2e1de9b8180ecfb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cd1a1e914e46b9d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/editor/live-preview/horizontal-rules.test.ts:98"}, "properties": {"repobilityId": "378b63394deb7dd5", "scanner": "scanner-primary", "fingerprint": "6cd1a1e914e46b9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-747fad1f8a4fe1b2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/markdown-to-html.ts:67"}, "properties": {"repobilityId": "5378835d84fc977d", "scanner": "scanner-primary", "fingerprint": "747fad1f8a4fe1b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59dd4fe2b5321882", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/export.ts:286"}, "properties": {"repobilityId": "9ae20309d464442c", "scanner": "scanner-primary", "fingerprint": "59dd4fe2b5321882", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0003a500bdedbe1a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useGitSync.test.ts:241"}, "properties": {"repobilityId": "ef62452e21d702ba", "scanner": "scanner-primary", "fingerprint": "0003a500bdedbe1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6655041622f981f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useFileWatcher.ts:75"}, "properties": {"repobilityId": "616955deac302f18", "scanner": "scanner-primary", "fingerprint": "a6655041622f981f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9b34156c1b149a4", "level": "none", "message": {"text": "Commented-code block (7 lines) in e2e/electron/pdf-pagebreak.electron.spec.ts:9"}, "properties": {"repobilityId": "30d11b4ae70e1bd0", "scanner": "scanner-primary", "fingerprint": "e9b34156c1b149a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c79ec8e8ab8a83cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/electron/helpers/launch.ts:11"}, "properties": {"repobilityId": "2903eadaf5750e35", "scanner": "scanner-primary", "fingerprint": "c79ec8e8ab8a83cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-814c00e8cead6e2a", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/helpers/electron-api-mock.ts:363"}, "properties": {"repobilityId": "0b07488a215bc5bb", "scanner": "scanner-primary", "fingerprint": "814c00e8cead6e2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}