{"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-90929d52172b09f2", "name": "Possibly dead Python function: resolve_render", "shortDescription": {"text": "Possibly dead Python function: resolve_render"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffa0366f66bf0ec5", "name": "Possibly dead Python function: iter_records", "shortDescription": {"text": "Possibly dead Python function: iter_records"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc2a7875eaa0266d", "name": "Possibly dead Python function: file_progress", "shortDescription": {"text": "Possibly dead Python function: file_progress"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1417e30d5c96ca51", "name": "Stray `console.log` in TS/JS \u2014 data-uploader/scripts/build-icon.js:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 data-uploader/scripts/build-icon.js:46"}, "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-37c6e34f5bc4149d", "name": "Icon-only button without accessible name \u2014 src/app/hangar/hangar-item-picker.component.ts:50", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/hangar/hangar-item-picker.component.ts:50"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8b85fd13f5b8608", "name": "Icon-only button without accessible name \u2014 src/app/codex/blueprint-list.component.ts:67", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/codex/blueprint-list.component.ts:67"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7869fee51c4043c3", "name": "Icon-only button without accessible name \u2014 src/app/codex/codex-list.component.ts:81", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/codex/codex-list.component.ts:81"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9cc7f1331e15ab14", "name": "Icon-only button without accessible name \u2014 src/app/codex/codex-compare-tray.component.ts:48", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/codex/codex-compare-tray.component.ts:48"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d923329840a52bf3", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-23-p4k-phase-2-domain-logic.html:2053", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-23-p4k-phase-2-domain-logic.html:2053"}, "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-34e867640626f110", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-27-verse-news-test-findings.html:1087", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-27-verse-news-test-findings.html:1087"}, "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-60fcfcb46823b8d0", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-20-p4k-companion-desktop-tool.html:2109", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-20-p4k-companion-desktop-tool.html:2109"}, "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-af3168e7a1759c65", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-24-verse-news-redesign.html:1629", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-24-verse-news-redesign.html:1629"}, "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-7e63846aae912913", "name": "Insecure pattern 'node_child_process' in data-uploader/scripts/fetch-embedded-python.js:29", "shortDescription": {"text": "Insecure pattern 'node_child_process' in data-uploader/scripts/fetch-embedded-python.js:29"}, "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-52f2d23bcf02de41", "name": "Insecure pattern 'subprocess_shell_true' in data-uploader/python/sc_extract/hull3d.py:194", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in data-uploader/python/sc_extract/hull3d.py:194"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-afb27b1a6d28b278", "name": "Insecure pattern 'direct_innerhtml_assignment' in data-uploader/src/renderer/main.ts:368", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in data-uploader/src/renderer/main.ts:368"}, "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-8705c2f304ffd548", "name": "Insecure pattern 'node_child_process' in data-uploader/src/main/python-bridge.ts:18", "shortDescription": {"text": "Insecure pattern 'node_child_process' in data-uploader/src/main/python-bridge.ts:18"}, "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-f12dcf3ba89be1e5", "name": "Insecure pattern 'node_child_process' in data-uploader/src/main/skin-bridge.ts:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in data-uploader/src/main/skin-bridge.ts:13"}, "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-d1e345bd4e93d060", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-user/index.ts:23", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-user/index.ts:23"}, "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-f4e6e34bc3b91a3f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/ingest-catalog/index.ts:38", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ingest-catalog/index.ts:38"}, "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-9cddff28beb6d53f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/invite-user/index.ts:22", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/invite-user/index.ts:22"}, "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-a48d418d11d6125e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/process-p4k/index.ts:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-p4k/index.ts:25"}, "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-4f2b36a7614bc47c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-verse-news/index.ts:40", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-verse-news/index.ts:40"}, "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-c9cef176d04ec8e6", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/check-bundle/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/check-bundle/index.ts:16"}, "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-871897a8f66e7b37", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/ingest-skins/index.ts:33", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ingest-skins/index.ts:33"}, "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-222e4dfbd92208ae", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/ingest-bundle/index.ts:34", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ingest-bundle/index.ts:34"}, "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-626312d55af21705", "name": "Insecure pattern 'local_storage_auth_token' in src/app/auth/login.component.ts:209", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/app/auth/login.component.ts:209"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ee32e3423af610c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@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-0e106a4d60354b4a", "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-628023c69f8a7144", "name": "Very large file: data-uploader/python/sc_extract/dataforge_extract.py (1238 lines)", "shortDescription": {"text": "Very large file: data-uploader/python/sc_extract/dataforge_extract.py (1238 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "15 tests / 124 src (ratio 0.12)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 43 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 24 placeholder/mock markers across 15 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-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ebe5f4954b5e5bd", "name": "Commented-code block (5 lines) in data-uploader/electron.vite.config.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in data-uploader/electron.vite.config.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-9d94ad3ce609ff90", "name": "Commented-code block (13 lines) in data-uploader/scripts/fetch-embedded-python.js:35", "shortDescription": {"text": "Commented-code block (13 lines) in data-uploader/scripts/fetch-embedded-python.js: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-74ec3d2cb2684058", "name": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/scripts/fetch-embedded-python.js:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/scripts/fetch-embedded-python.js:73"}, "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-a44316caa2765cc5", "name": "Network/subprocess call without timeout or try/except \u2014 data-uploader/python/tools/fetch_tools.py:38", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 data-uploader/python/tools/fetch_tools.py:38"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebb5e0f1c38afe42", "name": "Commented-code block (5 lines) in data-uploader/python/sc_extract/dataforge_extract.py:31", "shortDescription": {"text": "Commented-code block (5 lines) in data-uploader/python/sc_extract/dataforge_extract.py:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e1dd13cd8d801d1", "name": "Commented-code block (5 lines) in data-uploader/python/sc_extract/images.py:19", "shortDescription": {"text": "Commented-code block (5 lines) in data-uploader/python/sc_extract/images.py: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-53c88ba003d8072a", "name": "Network/subprocess call without timeout or try/except \u2014 data-uploader/python/sc_extract/upload_skins.py:34", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 data-uploader/python/sc_extract/upload_skins.py:34"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2b7a04e5df21a516", "name": "Commented-code block (12 lines) in data-uploader/python/sc_extract/events.py:10", "shortDescription": {"text": "Commented-code block (12 lines) in data-uploader/python/sc_extract/events.py: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-c0a932bd8f6a2df1", "name": "Commented-code block (5 lines) in data-uploader/src/renderer/main.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in data-uploader/src/renderer/main.ts:45"}, "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-63fcc31a69de67d7", "name": "Commented-code block (6 lines) in data-uploader/src/lib/oauth.ts:94", "shortDescription": {"text": "Commented-code block (6 lines) in data-uploader/src/lib/oauth.ts:94"}, "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-cd6601c1c951f016", "name": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/src/lib/oauth.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/src/lib/oauth.ts:13"}, "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-e8938cc80e1fed34", "name": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/src/lib/i18n.ts:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/src/lib/i18n.ts:5"}, "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-f7075437e4c0b0e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/src/main/skin-ingest.ts:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/src/main/skin-ingest.ts:72"}, "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-387aaff465770102", "name": "Commented-code block (5 lines) in data-uploader/src/main/skin-bridge.ts:104", "shortDescription": {"text": "Commented-code block (5 lines) in data-uploader/src/main/skin-bridge.ts:104"}, "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-6beb7db21eab6960", "name": "Commented-code block (6 lines) in data-uploader/src/main/updater.ts:63", "shortDescription": {"text": "Commented-code block (6 lines) in data-uploader/src/main/updater.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-dac9c9a57407c62f", "name": "Commented-code block (6 lines) in supabase/functions/delete-user/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/delete-user/index.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-71cd2cbdec9029a9", "name": "Commented-code block (8 lines) in supabase/functions/ingest-catalog/index.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/ingest-catalog/index.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-2e3bb1c55c42e151", "name": "Commented-code block (13 lines) in supabase/functions/api/index.ts:4", "shortDescription": {"text": "Commented-code block (13 lines) in supabase/functions/api/index.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-93912ef99adda4c7", "name": "Commented-code block (6 lines) in supabase/functions/api/_router.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/api/_router.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-0684af396a6b89af", "name": "Commented-code block (5 lines) in supabase/functions/api/_rate-limit.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/api/_rate-limit.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-fd95836d7a5d65b3", "name": "Commented-code block (5 lines) in supabase/functions/api/_auth.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/api/_auth.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-6d90c960657e24a5", "name": "Commented-code block (5 lines) in supabase/functions/desktop-latest/index.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/desktop-latest/index.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-394e30e33d1d63e9", "name": "Commented-code block (5 lines) in supabase/functions/invite-user/index.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/invite-user/index.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-aa1c38089ed214fb", "name": "Commented-code block (5 lines) in supabase/functions/process-p4k/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/process-p4k/index.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-4d585482ad5ae86e", "name": "Commented-code block (6 lines) in supabase/functions/fetch-verse-news/index.ts:80", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/fetch-verse-news/index.ts:80"}, "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-9c5b2c61c14fafcb", "name": "Commented-code block (6 lines) in supabase/functions/check-bundle/index.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/check-bundle/index.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-682fc07e0a2e2b6b", "name": "Commented-code block (8 lines) in supabase/functions/ingest-skins/index.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/ingest-skins/index.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-0601cabc16e4d6c9", "name": "Commented-code block (5 lines) in supabase/functions/ingest-bundle/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/ingest-bundle/index.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-0fb900d54432b53a", "name": "Commented-code block (5 lines) in supabase/scripts/gen-codex-sql.mjs:5", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/scripts/gen-codex-sql.mjs:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6990215e9508d347", "name": "Commented-code block (5 lines) in supabase/scripts/seed-codex.mjs:5", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/scripts/seed-codex.mjs:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b71dfb10a2ffbd19", "name": "Commented-code block (8 lines) in src/app/hangar/loadout-stats.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/hangar/loadout-stats.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-1b0d0b70282dd745", "name": "Commented-code block (5 lines) in src/app/auth/login.component.ts:201", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/auth/login.component.ts:201"}, "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-bb60ca76e0072cf0", "name": "Commented-code block (7 lines) in src/app/desktop/desktop-auth.component.ts:172", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/desktop/desktop-auth.component.ts:172"}, "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-798b4a4348601c31", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/desktop/desktop-auth.component.ts:173", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/desktop/desktop-auth.component.ts:173"}, "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-891f4dbf2448ce9f", "name": "Commented-code block (5 lines) in src/app/codex/codex-detail.component.ts:514", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/codex/codex-detail.component.ts:514"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc09f79a9fbe968e", "name": "Commented-code block (6 lines) in src/app/codex/codex-format.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/codex/codex-format.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-12c03649ba678d0b", "name": "Commented-code block (6 lines) in src/app/codex/codex.types.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/codex/codex.types.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-afbbf785ad911407", "name": "Commented-code block (5 lines) in src/app/core/supabase.client.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/core/supabase.client.ts:17"}, "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-e5a40994c937d169", "name": "Commented-code block (5 lines) in src/app/news/news-thumb.component.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/news/news-thumb.component.ts: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-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ndata-uploader/python/sc_extract/cutlass_pilot.py:log, data-uploader/python/sc_extract/ship_export.py:log\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20246"}, "properties": {"repository": "StarOrga/Star-Citizen-Companion-Web", "repoUrl": "https://github.com/StarOrga/Star-Citizen-Companion-Web", "branch": "main"}, "results": [{"ruleId": "scanner-90929d52172b09f2", "level": "note", "message": {"text": "Possibly dead Python function: resolve_render"}, "properties": {"repobilityId": "a560cd3f3531d91c", "scanner": "scanner-primary", "fingerprint": "90929d52172b09f2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-uploader/python/sc_extract/images.py:90"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ffa0366f66bf0ec5", "level": "note", "message": {"text": "Possibly dead Python function: iter_records"}, "properties": {"repobilityId": "dbbf0fcaf38d4a47", "scanner": "scanner-primary", "fingerprint": "ffa0366f66bf0ec5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-uploader/python/sc_extract/dataforge.py:382"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fc2a7875eaa0266d", "level": "note", "message": {"text": "Possibly dead Python function: file_progress"}, "properties": {"repobilityId": "c2ffa3544c6ed5e3", "scanner": "scanner-primary", "fingerprint": "fc2a7875eaa0266d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-uploader/python/sc_extract/events.py:65"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-1417e30d5c96ca51", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 data-uploader/scripts/build-icon.js:46"}, "properties": {"repobilityId": "99cbf8530606a8dd", "scanner": "scanner-primary", "fingerprint": "1417e30d5c96ca51", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37c6e34f5bc4149d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/hangar/hangar-item-picker.component.ts:50"}, "properties": {"repobilityId": "84d01665429c531f", "scanner": "scanner-primary", "fingerprint": "37c6e34f5bc4149d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-c8b85fd13f5b8608", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/codex/blueprint-list.component.ts:67"}, "properties": {"repobilityId": "c3a0d13a0dc793db", "scanner": "scanner-primary", "fingerprint": "c8b85fd13f5b8608", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7869fee51c4043c3", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/codex/codex-list.component.ts:81"}, "properties": {"repobilityId": "5440b7296be0dee8", "scanner": "scanner-primary", "fingerprint": "7869fee51c4043c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9cc7f1331e15ab14", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/codex/codex-compare-tray.component.ts:48"}, "properties": {"repobilityId": "7a30dd70a12f7db8", "scanner": "scanner-primary", "fingerprint": "9cc7f1331e15ab14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-d923329840a52bf3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-23-p4k-phase-2-domain-logic.html:2053"}, "properties": {"repobilityId": "9928d11b92c3bbfa", "scanner": "scanner-primary", "fingerprint": "d923329840a52bf3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/concepts/2026-05-23-p4k-phase-2-domain-logic.html"}, "region": {"startLine": 2053}}}]}, {"ruleId": "scanner-34e867640626f110", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-27-verse-news-test-findings.html:1087"}, "properties": {"repobilityId": "fd4eef1403123ec0", "scanner": "scanner-primary", "fingerprint": "34e867640626f110", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/concepts/2026-05-27-verse-news-test-findings.html"}, "region": {"startLine": 1087}}}]}, {"ruleId": "scanner-60fcfcb46823b8d0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-20-p4k-companion-desktop-tool.html:2109"}, "properties": {"repobilityId": "a48e05b105ae849f", "scanner": "scanner-primary", "fingerprint": "60fcfcb46823b8d0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/concepts/2026-05-20-p4k-companion-desktop-tool.html"}, "region": {"startLine": 2109}}}]}, {"ruleId": "scanner-af3168e7a1759c65", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/concepts/2026-05-24-verse-news-redesign.html:1629"}, "properties": {"repobilityId": "da957f12061da50b", "scanner": "scanner-primary", "fingerprint": "af3168e7a1759c65", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/concepts/2026-05-24-verse-news-redesign.html"}, "region": {"startLine": 1629}}}]}, {"ruleId": "scanner-7e63846aae912913", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in data-uploader/scripts/fetch-embedded-python.js:29"}, "properties": {"repobilityId": "558764de5a35fd6b", "scanner": "scanner-primary", "fingerprint": "7e63846aae912913", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-uploader/scripts/fetch-embedded-python.js"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-52f2d23bcf02de41", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in data-uploader/python/sc_extract/hull3d.py:194"}, "properties": {"repobilityId": "f5fb6ae23a2c986d", "scanner": "scanner-primary", "fingerprint": "52f2d23bcf02de41", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-uploader/python/sc_extract/hull3d.py"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-afb27b1a6d28b278", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in data-uploader/src/renderer/main.ts:368"}, "properties": {"repobilityId": "efe685b67757b982", "scanner": "scanner-primary", "fingerprint": "afb27b1a6d28b278", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-uploader/src/renderer/main.ts"}, "region": {"startLine": 368}}}]}, {"ruleId": "scanner-8705c2f304ffd548", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in data-uploader/src/main/python-bridge.ts:18"}, "properties": {"repobilityId": "1a005f70fd3da586", "scanner": "scanner-primary", "fingerprint": "8705c2f304ffd548", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-uploader/src/main/python-bridge.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-f12dcf3ba89be1e5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in data-uploader/src/main/skin-bridge.ts:13"}, "properties": {"repobilityId": "81b2979f4ac17e12", "scanner": "scanner-primary", "fingerprint": "f12dcf3ba89be1e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "data-uploader/src/main/skin-bridge.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-d1e345bd4e93d060", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-user/index.ts:23"}, "properties": {"repobilityId": "c784695c877499b9", "scanner": "scanner-primary", "fingerprint": "d1e345bd4e93d060", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/delete-user/index.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-f4e6e34bc3b91a3f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ingest-catalog/index.ts:38"}, "properties": {"repobilityId": "eac3f87ba2a1d07e", "scanner": "scanner-primary", "fingerprint": "f4e6e34bc3b91a3f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ingest-catalog/index.ts"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-9cddff28beb6d53f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/invite-user/index.ts:22"}, "properties": {"repobilityId": "f1b1a21e6d6efd72", "scanner": "scanner-primary", "fingerprint": "9cddff28beb6d53f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/invite-user/index.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-a48d418d11d6125e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-p4k/index.ts:25"}, "properties": {"repobilityId": "88e1fa40e657cd68", "scanner": "scanner-primary", "fingerprint": "a48d418d11d6125e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/process-p4k/index.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-4f2b36a7614bc47c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-verse-news/index.ts:40"}, "properties": {"repobilityId": "f6076fd194e7a687", "scanner": "scanner-primary", "fingerprint": "4f2b36a7614bc47c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/fetch-verse-news/index.ts"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-c9cef176d04ec8e6", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/check-bundle/index.ts:16"}, "properties": {"repobilityId": "b0d1ab7400576e97", "scanner": "scanner-primary", "fingerprint": "c9cef176d04ec8e6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/check-bundle/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-871897a8f66e7b37", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ingest-skins/index.ts:33"}, "properties": {"repobilityId": "144334fe7ffad8ed", "scanner": "scanner-primary", "fingerprint": "871897a8f66e7b37", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ingest-skins/index.ts"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-222e4dfbd92208ae", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ingest-bundle/index.ts:34"}, "properties": {"repobilityId": "015d2f252019d176", "scanner": "scanner-primary", "fingerprint": "222e4dfbd92208ae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ingest-bundle/index.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-626312d55af21705", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/app/auth/login.component.ts:209"}, "properties": {"repobilityId": "4aa1de3d7c1d950b", "scanner": "scanner-primary", "fingerprint": "626312d55af21705", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/auth/login.component.ts"}, "region": {"startLine": 209}}}]}, {"ruleId": "scanner-0ee32e3423af610c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d7ecad4fb633c6f2", "scanner": "scanner-primary", "fingerprint": "0ee32e3423af610c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/data-uploader-build.yml"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-0ee32e3423af610c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d7ecad4fb633c6f2", "scanner": "scanner-primary", "fingerprint": "0ee32e3423af610c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/data-uploader-build.yml"}, "region": {"startLine": 131}}}]}, {"ruleId": "scanner-0ee32e3423af610c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "045309b7be77ca5a", "scanner": "scanner-primary", "fingerprint": "0ee32e3423af610c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/data-uploader-build.yml"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-0ee32e3423af610c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "045309b7be77ca5a", "scanner": "scanner-primary", "fingerprint": "0ee32e3423af610c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/data-uploader-build.yml"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-0e106a4d60354b4a", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "20fc2664f681c106", "scanner": "scanner-primary", "fingerprint": "0e106a4d60354b4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/data-uploader-build.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-628023c69f8a7144", "level": "note", "message": {"text": "Very large file: data-uploader/python/sc_extract/dataforge_extract.py (1238 lines)"}, "properties": {"repobilityId": "346ff2b903e54042", "scanner": "scanner-primary", "fingerprint": "628023c69f8a7144", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "4409338d2aa50fe3", "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": "7d265afbed023cdc", "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": "9438aa19be338d49", "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": "f94344b284c57b11", "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": "66a406ebba59a463", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0ebe5f4954b5e5bd", "level": "none", "message": {"text": "Commented-code block (5 lines) in data-uploader/electron.vite.config.ts:29"}, "properties": {"repobilityId": "0fe443d0b7d98186", "scanner": "scanner-primary", "fingerprint": "0ebe5f4954b5e5bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d94ad3ce609ff90", "level": "none", "message": {"text": "Commented-code block (13 lines) in data-uploader/scripts/fetch-embedded-python.js:35"}, "properties": {"repobilityId": "d958299bd8f67571", "scanner": "scanner-primary", "fingerprint": "9d94ad3ce609ff90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74ec3d2cb2684058", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/scripts/fetch-embedded-python.js:73"}, "properties": {"repobilityId": "ff6e114c49721e9b", "scanner": "scanner-primary", "fingerprint": "74ec3d2cb2684058", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a44316caa2765cc5", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 data-uploader/python/tools/fetch_tools.py:38"}, "properties": {"repobilityId": "2454a268870516ed", "scanner": "scanner-primary", "fingerprint": "a44316caa2765cc5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ebb5e0f1c38afe42", "level": "none", "message": {"text": "Commented-code block (5 lines) in data-uploader/python/sc_extract/dataforge_extract.py:31"}, "properties": {"repobilityId": "1f3501c476399300", "scanner": "scanner-primary", "fingerprint": "ebb5e0f1c38afe42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e1dd13cd8d801d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in data-uploader/python/sc_extract/images.py:19"}, "properties": {"repobilityId": "8a4d9eb538dd8241", "scanner": "scanner-primary", "fingerprint": "3e1dd13cd8d801d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53c88ba003d8072a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 data-uploader/python/sc_extract/upload_skins.py:34"}, "properties": {"repobilityId": "11b243729e0eed48", "scanner": "scanner-primary", "fingerprint": "53c88ba003d8072a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b7a04e5df21a516", "level": "none", "message": {"text": "Commented-code block (12 lines) in data-uploader/python/sc_extract/events.py:10"}, "properties": {"repobilityId": "5f91846bee8c3070", "scanner": "scanner-primary", "fingerprint": "2b7a04e5df21a516", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0a932bd8f6a2df1", "level": "none", "message": {"text": "Commented-code block (5 lines) in data-uploader/src/renderer/main.ts:45"}, "properties": {"repobilityId": "0f5839047576d0c9", "scanner": "scanner-primary", "fingerprint": "c0a932bd8f6a2df1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63fcc31a69de67d7", "level": "none", "message": {"text": "Commented-code block (6 lines) in data-uploader/src/lib/oauth.ts:94"}, "properties": {"repobilityId": "ee88ae5bb4d56c19", "scanner": "scanner-primary", "fingerprint": "63fcc31a69de67d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd6601c1c951f016", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/src/lib/oauth.ts:13"}, "properties": {"repobilityId": "5ee88495aad92772", "scanner": "scanner-primary", "fingerprint": "cd6601c1c951f016", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e8938cc80e1fed34", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/src/lib/i18n.ts:5"}, "properties": {"repobilityId": "7eae98ed025dfadf", "scanner": "scanner-primary", "fingerprint": "e8938cc80e1fed34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7075437e4c0b0e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 data-uploader/src/main/skin-ingest.ts:72"}, "properties": {"repobilityId": "681141b7895ab9f7", "scanner": "scanner-primary", "fingerprint": "f7075437e4c0b0e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-387aaff465770102", "level": "none", "message": {"text": "Commented-code block (5 lines) in data-uploader/src/main/skin-bridge.ts:104"}, "properties": {"repobilityId": "c30855a6c7ff5b52", "scanner": "scanner-primary", "fingerprint": "387aaff465770102", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6beb7db21eab6960", "level": "none", "message": {"text": "Commented-code block (6 lines) in data-uploader/src/main/updater.ts:63"}, "properties": {"repobilityId": "a1781d3f1f50f4be", "scanner": "scanner-primary", "fingerprint": "6beb7db21eab6960", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dac9c9a57407c62f", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/delete-user/index.ts:1"}, "properties": {"repobilityId": "585c9ebd7a6fe492", "scanner": "scanner-primary", "fingerprint": "dac9c9a57407c62f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71cd2cbdec9029a9", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/ingest-catalog/index.ts:1"}, "properties": {"repobilityId": "b615774f40443e0b", "scanner": "scanner-primary", "fingerprint": "71cd2cbdec9029a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e3bb1c55c42e151", "level": "none", "message": {"text": "Commented-code block (13 lines) in supabase/functions/api/index.ts:4"}, "properties": {"repobilityId": "bdd7fa370780241a", "scanner": "scanner-primary", "fingerprint": "2e3bb1c55c42e151", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93912ef99adda4c7", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/api/_router.ts:4"}, "properties": {"repobilityId": "5af92d9458c59072", "scanner": "scanner-primary", "fingerprint": "93912ef99adda4c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0684af396a6b89af", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/api/_rate-limit.ts:10"}, "properties": {"repobilityId": "d5d6b6e3ac9ed46c", "scanner": "scanner-primary", "fingerprint": "0684af396a6b89af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd95836d7a5d65b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/api/_auth.ts:5"}, "properties": {"repobilityId": "32738d410f641533", "scanner": "scanner-primary", "fingerprint": "fd95836d7a5d65b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d90c960657e24a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/desktop-latest/index.ts:10"}, "properties": {"repobilityId": "4e5cec37641b4034", "scanner": "scanner-primary", "fingerprint": "6d90c960657e24a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-394e30e33d1d63e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/invite-user/index.ts:6"}, "properties": {"repobilityId": "2bf2972a4830f601", "scanner": "scanner-primary", "fingerprint": "394e30e33d1d63e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa1c38089ed214fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/process-p4k/index.ts:1"}, "properties": {"repobilityId": "a6c14dae3f69f59b", "scanner": "scanner-primary", "fingerprint": "aa1c38089ed214fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d585482ad5ae86e", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/fetch-verse-news/index.ts:80"}, "properties": {"repobilityId": "6c4c3de1a6ed507c", "scanner": "scanner-primary", "fingerprint": "4d585482ad5ae86e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c5b2c61c14fafcb", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/check-bundle/index.ts:6"}, "properties": {"repobilityId": "abd80bd2f81d2af7", "scanner": "scanner-primary", "fingerprint": "9c5b2c61c14fafcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-682fc07e0a2e2b6b", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/ingest-skins/index.ts:1"}, "properties": {"repobilityId": "ec26d6a1855b970c", "scanner": "scanner-primary", "fingerprint": "682fc07e0a2e2b6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0601cabc16e4d6c9", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/ingest-bundle/index.ts:1"}, "properties": {"repobilityId": "30a6aed7bc7c949f", "scanner": "scanner-primary", "fingerprint": "0601cabc16e4d6c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fb900d54432b53a", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/scripts/gen-codex-sql.mjs:5"}, "properties": {"repobilityId": "aed08f9295178b16", "scanner": "scanner-primary", "fingerprint": "0fb900d54432b53a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6990215e9508d347", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/scripts/seed-codex.mjs:5"}, "properties": {"repobilityId": "752b2ff22fd68e44", "scanner": "scanner-primary", "fingerprint": "6990215e9508d347", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b71dfb10a2ffbd19", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/hangar/loadout-stats.ts:1"}, "properties": {"repobilityId": "818f0a1e8608f6e9", "scanner": "scanner-primary", "fingerprint": "b71dfb10a2ffbd19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b0d0b70282dd745", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/auth/login.component.ts:201"}, "properties": {"repobilityId": "3018eafc71300610", "scanner": "scanner-primary", "fingerprint": "1b0d0b70282dd745", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb60ca76e0072cf0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/desktop/desktop-auth.component.ts:172"}, "properties": {"repobilityId": "192745f2dc6abd18", "scanner": "scanner-primary", "fingerprint": "bb60ca76e0072cf0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-798b4a4348601c31", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/desktop/desktop-auth.component.ts:173"}, "properties": {"repobilityId": "641cb08668a12c7b", "scanner": "scanner-primary", "fingerprint": "798b4a4348601c31", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-891f4dbf2448ce9f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/codex/codex-detail.component.ts:514"}, "properties": {"repobilityId": "a686de022623ab7b", "scanner": "scanner-primary", "fingerprint": "891f4dbf2448ce9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc09f79a9fbe968e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/codex/codex-format.ts:1"}, "properties": {"repobilityId": "1b1866a8b8135253", "scanner": "scanner-primary", "fingerprint": "bc09f79a9fbe968e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12c03649ba678d0b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/codex/codex.types.ts:1"}, "properties": {"repobilityId": "747f0839328213d8", "scanner": "scanner-primary", "fingerprint": "12c03649ba678d0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afbbf785ad911407", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/core/supabase.client.ts:17"}, "properties": {"repobilityId": "ea708a89552b623d", "scanner": "scanner-primary", "fingerprint": "afbbf785ad911407", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5a40994c937d169", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/news/news-thumb.component.ts:13"}, "properties": {"repobilityId": "77b20a8e4567577a", "scanner": "scanner-primary", "fingerprint": "e5a40994c937d169", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "dad61d2fb08ccc67", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}