{"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-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-10c9c65f33b443a0", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:118", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:118"}, "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-c0e68406120fcac2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/page.tsx:102", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/page.tsx:102"}, "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-0fd1c1bc6f583d9e", "name": "Stray `console.log` in TS/JS \u2014 app/api/reports/route.ts:199", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/reports/route.ts:199"}, "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-1c4ebae77bddb1e2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/faq/page.tsx:138", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/faq/page.tsx:138"}, "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-067f818f98d79ef4", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/DashboardShell.tsx:242", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/DashboardShell.tsx:242"}, "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-b94eeb6106ff481c", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/admin/feedback/FeedbackStream.tsx:247", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/admin/feedback/FeedbackStream.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-455c25d0382ac201", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/admin/reports/page.tsx:176", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/admin/reports/page.tsx:176"}, "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-c5f8eddb64fea471", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/uploads/page.tsx:216", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/uploads/page.tsx:216"}, "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-d17730f656451b7f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/uploads/compare/page.tsx:159", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/uploads/compare/page.tsx:159"}, "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-8d9a6537764fca57", "name": "Stray `console.log` in TS/JS \u2014 app/(dashboard)/reports/page.tsx:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/(dashboard)/reports/page.tsx:111"}, "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-0461f32e0c94c831", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/quiz/page.tsx:39", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/quiz/page.tsx:39"}, "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-52b5a426098df86c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/blog/page.tsx:28", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/blog/page.tsx:28"}, "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-5ae6b6e005fc40e4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/blog/[slug]/page.tsx:139", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/blog/[slug]/page.tsx:139"}, "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-f864d9368a6ca146", "name": "Stray `console.log` in TS/JS \u2014 scripts/capture-golden.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/capture-golden.ts:78"}, "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-52925a7390dae47f", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-mega-pr-a.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-mega-pr-a.ts:47"}, "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-18083e39ab91b868", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-engine-floor.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-engine-floor.ts:41"}, "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-d719cd3f76fa8e99", "name": "Stray `console.log` in TS/JS \u2014 scripts/build-fixtures.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-fixtures.ts:53"}, "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-d491c2e57bb433b7", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-push.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-push.ts:38"}, "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-bb770cb176f18994", "name": "`truncate` class without `title=` for hover reveal \u2014 components/AutopsyReport.tsx:1346", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/AutopsyReport.tsx:1346"}, "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-f3c3956cc5efcdfc", "name": "`truncate` class without `title=` for hover reveal \u2014 components/ProductShowcase.tsx:26", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/ProductShowcase.tsx:26"}, "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-3618e1b7b5654056", "name": "`truncate` class without `title=` for hover reveal \u2014 components/PasteParser.tsx:264", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/PasteParser.tsx:264"}, "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-9a79b6b14fa60348", "name": "`truncate` class without `title=` for hover reveal \u2014 components/NavBar.tsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/NavBar.tsx:132"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c718b53a6e1fbc0", "name": "`truncate` class without `title=` for hover reveal \u2014 components/report/EvidencePanel.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/report/EvidencePanel.tsx:44"}, "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-40ab1cdf524a6d42", "name": "Stray `console.log` in TS/JS \u2014 lib/iap-upgrade.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/iap-upgrade.ts:65"}, "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-99404635f2589a84", "name": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:118", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:118"}, "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-524b5b9f53162b66", "name": "Insecure pattern 'dangerous_innerhtml' in app/page.tsx:102", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/page.tsx:102"}, "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-f873ee981465f603", "name": "Insecure pattern 'dangerous_innerhtml' in app/faq/page.tsx:138", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/faq/page.tsx:138"}, "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-170a9e94e438f02f", "name": "Insecure pattern 'dangerous_innerhtml' in app/quiz/page.tsx:39", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/quiz/page.tsx:39"}, "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-b6a62a57c8234624", "name": "Insecure pattern 'dangerous_innerhtml' in app/blog/page.tsx:28", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/blog/page.tsx:28"}, "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-801a7ad4d4a7b524", "name": "Insecure pattern 'dangerous_innerhtml' in app/blog/[slug]/page.tsx:139", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/blog/[slug]/page.tsx:139"}, "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-c7de0906f7592a0c", "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-4ec3723ddd273bc2", "name": "Very large file: types/index.ts (1535 lines)", "shortDescription": {"text": "Very large file: types/index.ts (1535 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-33dd5dbf022120c5", "name": "Very large file: components/AutopsyReport.tsx (3805 lines)", "shortDescription": {"text": "Very large file: components/AutopsyReport.tsx (3805 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-a24139886e8008de", "name": "Very large file: lib/autopsy-engine.ts (4090 lines)", "shortDescription": {"text": "Very large file: lib/autopsy-engine.ts (4090 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "25 test file(s) for 254 source file(s) (ratio 0.10). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "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 55 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 52 placeholder/mock markers across 26 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ecb0d2c55ed6875d", "name": "Agent authority lacks a verifier contract: .claude/settings.local.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.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-4c9bb393bc338262", "name": "Commented-code block (6 lines) in vitest.config.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in vitest.config.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-f5aa410a49070e08", "name": "Commented-code block (10 lines) in next.config.js:21", "shortDescription": {"text": "Commented-code block (10 lines) in next.config.js:21"}, "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-e3844ae90b28f3f5", "name": "Commented-code block (7 lines) in playwright.config.ts:60", "shortDescription": {"text": "Commented-code block (7 lines) in playwright.config.ts:60"}, "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-395cafaed1b02e38", "name": "Commented-code block (7 lines) in tailwind.config.js:72", "shortDescription": {"text": "Commented-code block (7 lines) in tailwind.config.js:72"}, "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-119dfec82d0c5d3a", "name": "Commented-code block (6 lines) in capacitor.config.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in capacitor.config.ts:12"}, "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-feea819a1e142726", "name": "`fetch()` without try/.catch or AbortSignal \u2014 capacitor.config.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 capacitor.config.ts:47"}, "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-cd56413f66e4ad20", "name": "Commented-code block (6 lines) in sentry.client.config.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in sentry.client.config.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8eb7f05f0816f24c", "name": "Commented-code block (5 lines) in app/layout.tsx:60", "shortDescription": {"text": "Commented-code block (5 lines) in app/layout.tsx:60"}, "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-4531d419b53f442d", "name": "Commented-code block (6 lines) in app/api/inbound-email/route.ts:21", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/inbound-email/route.ts:21"}, "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-93aed0814446bd97", "name": "Commented-code block (6 lines) in app/api/action-checkoffs/route.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/action-checkoffs/route.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-fda7cce6682a05da", "name": "Commented-code block (6 lines) in app/api/checkout/route.ts:64", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/checkout/route.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f806aea9ae8b4ffa", "name": "Commented-code block (5 lines) in app/api/reports/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/reports/route.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-61af6a21095b2a01", "name": "Commented-code block (6 lines) in app/api/reports/[id]/route.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/reports/[id]/route.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-096051ec7fdcf0ec", "name": "Commented-code block (5 lines) in app/api/webhooks/revenuecat/route.ts:24", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/webhooks/revenuecat/route.ts:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f443c442d354e412", "name": "Commented-code block (9 lines) in app/api/analyze/route.ts:17", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/analyze/route.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-98d1467ad137bd79", "name": "Commented-code block (6 lines) in app/api/log-error/route.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/log-error/route.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-26822527eed76344", "name": "Commented-code block (5 lines) in app/api/webhook/route.ts:53", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/webhook/route.ts:53"}, "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-4f854ea92147775f", "name": "Commented-code block (5 lines) in app/share/[id]/page.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in app/share/[id]/page.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-7b342d6fe058d908", "name": "Commented-code block (6 lines) in app/auth/callback/route.ts:121", "shortDescription": {"text": "Commented-code block (6 lines) in app/auth/callback/route.ts:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-217c15b5d9c46315", "name": "Commented-code block (5 lines) in app/go/page.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in app/go/page.tsx: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-7509d3316fb757ff", "name": "Commented-code block (9 lines) in app/(dashboard)/layout.tsx:10", "shortDescription": {"text": "Commented-code block (9 lines) in app/(dashboard)/layout.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7268c38e6122b2f", "name": "Commented-code block (5 lines) in app/(dashboard)/DashboardShell.tsx:88", "shortDescription": {"text": "Commented-code block (5 lines) in app/(dashboard)/DashboardShell.tsx:88"}, "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-0490e04c9e92c799", "name": "Commented-code block (5 lines) in app/(dashboard)/dashboard/page.tsx:177", "shortDescription": {"text": "Commented-code block (5 lines) in app/(dashboard)/dashboard/page.tsx:177"}, "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-12276dea50aa65f4", "name": "Commented-code block (11 lines) in app/(dashboard)/uploads/[id]/page.tsx:3", "shortDescription": {"text": "Commented-code block (11 lines) in app/(dashboard)/uploads/[id]/page.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b880f53512251997", "name": "Commented-code block (9 lines) in app/(dashboard)/reports/page.tsx:79", "shortDescription": {"text": "Commented-code block (9 lines) in app/(dashboard)/reports/page.tsx: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-12a336668cd64243", "name": "Commented-code block (6 lines) in app/(auth)/login/page.tsx:20", "shortDescription": {"text": "Commented-code block (6 lines) in app/(auth)/login/page.tsx: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-bee7c751f3d24111", "name": "Commented-code block (7 lines) in app/(auth)/signup/page.tsx:30", "shortDescription": {"text": "Commented-code block (7 lines) in app/(auth)/signup/page.tsx:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24aa9d601eccb8c1", "name": "Commented-code block (5 lines) in tests/e2e/mobile-regression.spec.ts:43", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/mobile-regression.spec.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-1f41096ea623f01a", "name": "Commented-code block (6 lines) in scripts/verify-mega-pr-a.ts:127", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/verify-mega-pr-a.ts:127"}, "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-ba3066b70db2a7dd", "name": "Commented-code block (9 lines) in scripts/generate-tiktok-endcard-annotated.py:180", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/generate-tiktok-endcard-annotated.py:180"}, "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-54930ea4d8b2f642", "name": "Commented-code block (9 lines) in hooks/useReports.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in hooks/useReports.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5320ffd6b2bc0373", "name": "Commented-code block (5 lines) in types/index.ts:100", "shortDescription": {"text": "Commented-code block (5 lines) in types/index.ts:100"}, "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-941c7647c2ceab45", "name": "Commented-code block (5 lines) in components/ZoomGate.tsx:35", "shortDescription": {"text": "Commented-code block (5 lines) in components/ZoomGate.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c610de3689c393e", "name": "Commented-code block (7 lines) in components/AutopsyReport.tsx:443", "shortDescription": {"text": "Commented-code block (7 lines) in components/AutopsyReport.tsx:443"}, "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-7fb5de4c0ec9e210", "name": "Commented-code block (6 lines) in components/SampleStickyBar.tsx:35", "shortDescription": {"text": "Commented-code block (6 lines) in components/SampleStickyBar.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0e1c67bf8b5e844", "name": "Commented-code block (6 lines) in components/AuthGuard.tsx:44", "shortDescription": {"text": "Commented-code block (6 lines) in components/AuthGuard.tsx:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b510b480ae2849b", "name": "Commented-code block (5 lines) in components/AuthProvider.tsx:126", "shortDescription": {"text": "Commented-code block (5 lines) in components/AuthProvider.tsx:126"}, "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-d89affedc21b748f", "name": "Commented-code block (8 lines) in components/ErrorBoundary.tsx:5", "shortDescription": {"text": "Commented-code block (8 lines) in components/ErrorBoundary.tsx: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-cadec527f02a97f1", "name": "Commented-code block (7 lines) in components/NavBar.tsx:60", "shortDescription": {"text": "Commented-code block (7 lines) in components/NavBar.tsx:60"}, "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-955015647c2aea84", "name": "Commented-code block (5 lines) in components/native/NativeTabBar.tsx:25", "shortDescription": {"text": "Commented-code block (5 lines) in components/native/NativeTabBar.tsx: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-5c832b9330c51ff6", "name": "Commented-code block (14 lines) in lib/report-comparison.ts:52", "shortDescription": {"text": "Commented-code block (14 lines) in lib/report-comparison.ts:52"}, "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-f4575646d256552d", "name": "Commented-code block (5 lines) in lib/swr-persistent-cache.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in lib/swr-persistent-cache.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-de8ec56d794cb7a3", "name": "Commented-code block (7 lines) in lib/iap-upgrade.ts:29", "shortDescription": {"text": "Commented-code block (7 lines) in lib/iap-upgrade.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-f8838719b2c51332", "name": "Commented-code block (6 lines) in lib/control-system.ts:438", "shortDescription": {"text": "Commented-code block (6 lines) in lib/control-system.ts:438"}, "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-99c466c7a8146135", "name": "Commented-code block (8 lines) in lib/api-client.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in lib/api-client.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1043fe0484427095", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/api-client.ts:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/api-client.ts:16"}, "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-aeae87ca4b6acc64", "name": "Commented-code block (9 lines) in lib/autopsy-engine.ts:15", "shortDescription": {"text": "Commented-code block (9 lines) in lib/autopsy-engine.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-eed22b85455bf368", "name": "Commented-code block (5 lines) in lib/apns.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in lib/apns.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-843e3ca97c538024", "name": "Commented-code block (6 lines) in lib/share-helpers.ts:145", "shortDescription": {"text": "Commented-code block (6 lines) in lib/share-helpers.ts:145"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f19074d63fc6eabd", "name": "Commented-code block (8 lines) in lib/push-report-ready.ts:10", "shortDescription": {"text": "Commented-code block (8 lines) in lib/push-report-ready.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-bcace8beb051775d", "name": "Commented-code block (9 lines) in lib/supabase-browser.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in lib/supabase-browser.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37b12cf51c05ba99", "name": "Commented-code block (6 lines) in lib/engine/constants/thresholds.ts:23", "shortDescription": {"text": "Commented-code block (6 lines) in lib/engine/constants/thresholds.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-405cc8fc9648641d", "name": "Commented-code block (5 lines) in __tests__/iap-upgrade.test.ts:19", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/iap-upgrade.test.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-5999160131102430", "name": "Legacy-named symbol `single_report_v1` in __tests__/p0-iap-webhook.test.ts:142", "shortDescription": {"text": "Legacy-named symbol `single_report_v1` in __tests__/p0-iap-webhook.test.ts:142"}, "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-fbedb5315d68c534", "name": "Commented-code block (10 lines) in __tests__/p0-iap-webhook.test.ts:7", "shortDescription": {"text": "Commented-code block (10 lines) in __tests__/p0-iap-webhook.test.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-210d3e6182f6ea0d", "name": "Commented-code block (5 lines) in __tests__/bias-depth.test.ts:144", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/bias-depth.test.ts:144"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-121f00a119cdd5ba", "name": "Commented-code block (5 lines) in __tests__/api-reports-list.test.ts:55", "shortDescription": {"text": "Commented-code block (5 lines) in __tests__/api-reports-list.test.ts:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-83a5f0931deee7cb", "name": "Commented-code block (6 lines) in __tests__/autopsy-engine.redaction.test.ts:37", "shortDescription": {"text": "Commented-code block (6 lines) in __tests__/autopsy-engine.redaction.test.ts:37"}, "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-d785c17821858dcb", "name": "22 env vars used in code but missing from .env.example", "shortDescription": {"text": "22 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `APNS_AUTH_KEY`, `APNS_BUNDLE_ID`, `APNS_ENV`, `APNS_KEY_ID`, `APNS_TEAM_ID`, `CI`, `GITHUB_ACTIONS`, `META_CAPI_TOKEN` + 14 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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:\nscripts/generate-tiktok-endcard-annotated.py:f, scripts/generate-tiktok-endcard.py:f\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/24169"}, "properties": {"repository": "Andlog0713/betautopsy", "repoUrl": "https://github.com/Andlog0713/betautopsy", "branch": "main"}, "results": [{"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-10c9c65f33b443a0", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:118"}, "properties": {"repobilityId": "6f16eb9b82a2dcd6", "scanner": "scanner-primary", "fingerprint": "10c9c65f33b443a0", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c0e68406120fcac2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/page.tsx:102"}, "properties": {"repobilityId": "6779a4843a9d41ee", "scanner": "scanner-primary", "fingerprint": "c0e68406120fcac2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0fd1c1bc6f583d9e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/reports/route.ts:199"}, "properties": {"repobilityId": "1c87f9b8b1510bc3", "scanner": "scanner-primary", "fingerprint": "0fd1c1bc6f583d9e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c4ebae77bddb1e2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/faq/page.tsx:138"}, "properties": {"repobilityId": "ac2ffa5e3af2355b", "scanner": "scanner-primary", "fingerprint": "1c4ebae77bddb1e2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-067f818f98d79ef4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/DashboardShell.tsx:242"}, "properties": {"repobilityId": "01d1d30a266a70ca", "scanner": "scanner-primary", "fingerprint": "067f818f98d79ef4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b94eeb6106ff481c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/admin/feedback/FeedbackStream.tsx:247"}, "properties": {"repobilityId": "f6c4d5d41b62946b", "scanner": "scanner-primary", "fingerprint": "b94eeb6106ff481c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-455c25d0382ac201", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/admin/reports/page.tsx:176"}, "properties": {"repobilityId": "456405b30d3b44d4", "scanner": "scanner-primary", "fingerprint": "455c25d0382ac201", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c5f8eddb64fea471", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/uploads/page.tsx:216"}, "properties": {"repobilityId": "b75d0296471d899f", "scanner": "scanner-primary", "fingerprint": "c5f8eddb64fea471", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d17730f656451b7f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/uploads/compare/page.tsx:159"}, "properties": {"repobilityId": "b812814963d42715", "scanner": "scanner-primary", "fingerprint": "d17730f656451b7f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8d9a6537764fca57", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/(dashboard)/reports/page.tsx:111"}, "properties": {"repobilityId": "63b6494534060bdf", "scanner": "scanner-primary", "fingerprint": "8d9a6537764fca57", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0461f32e0c94c831", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/quiz/page.tsx:39"}, "properties": {"repobilityId": "83dba1edf39b3df6", "scanner": "scanner-primary", "fingerprint": "0461f32e0c94c831", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-52b5a426098df86c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/blog/page.tsx:28"}, "properties": {"repobilityId": "1f238bbf17f33cc8", "scanner": "scanner-primary", "fingerprint": "52b5a426098df86c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5ae6b6e005fc40e4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/blog/[slug]/page.tsx:139"}, "properties": {"repobilityId": "c21e1247bf006285", "scanner": "scanner-primary", "fingerprint": "5ae6b6e005fc40e4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f864d9368a6ca146", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/capture-golden.ts:78"}, "properties": {"repobilityId": "4674a3fe32703f3f", "scanner": "scanner-primary", "fingerprint": "f864d9368a6ca146", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-52925a7390dae47f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-mega-pr-a.ts:47"}, "properties": {"repobilityId": "5a31c27bfb2431a6", "scanner": "scanner-primary", "fingerprint": "52925a7390dae47f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-18083e39ab91b868", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-engine-floor.ts:41"}, "properties": {"repobilityId": "2738d9f5f1773ee9", "scanner": "scanner-primary", "fingerprint": "18083e39ab91b868", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d719cd3f76fa8e99", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-fixtures.ts:53"}, "properties": {"repobilityId": "eb49266e4a7a9e95", "scanner": "scanner-primary", "fingerprint": "d719cd3f76fa8e99", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d491c2e57bb433b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-push.ts:38"}, "properties": {"repobilityId": "b476d4f620024090", "scanner": "scanner-primary", "fingerprint": "d491c2e57bb433b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb770cb176f18994", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/AutopsyReport.tsx:1346"}, "properties": {"repobilityId": "8ce92f50a1b70e06", "scanner": "scanner-primary", "fingerprint": "bb770cb176f18994", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f3c3956cc5efcdfc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/ProductShowcase.tsx:26"}, "properties": {"repobilityId": "e158f09deca1fb82", "scanner": "scanner-primary", "fingerprint": "f3c3956cc5efcdfc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3618e1b7b5654056", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/PasteParser.tsx:264"}, "properties": {"repobilityId": "d2985f1703cdbd40", "scanner": "scanner-primary", "fingerprint": "3618e1b7b5654056", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a79b6b14fa60348", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/NavBar.tsx:132"}, "properties": {"repobilityId": "efbc45a3b961f2d0", "scanner": "scanner-primary", "fingerprint": "9a79b6b14fa60348", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c718b53a6e1fbc0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/report/EvidencePanel.tsx:44"}, "properties": {"repobilityId": "655fa2c3ed2094ee", "scanner": "scanner-primary", "fingerprint": "9c718b53a6e1fbc0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-40ab1cdf524a6d42", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/iap-upgrade.ts:65"}, "properties": {"repobilityId": "15a5cea88e321c14", "scanner": "scanner-primary", "fingerprint": "40ab1cdf524a6d42", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99404635f2589a84", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:118"}, "properties": {"repobilityId": "69d4743587f721a0", "scanner": "scanner-primary", "fingerprint": "99404635f2589a84", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/layout.tsx"}, "region": {"startLine": 118}}}]}, {"ruleId": "scanner-524b5b9f53162b66", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/page.tsx:102"}, "properties": {"repobilityId": "cfec9d1837258177", "scanner": "scanner-primary", "fingerprint": "524b5b9f53162b66", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/page.tsx"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-f873ee981465f603", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/faq/page.tsx:138"}, "properties": {"repobilityId": "a5ab68a1ec1443fc", "scanner": "scanner-primary", "fingerprint": "f873ee981465f603", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/faq/page.tsx"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-170a9e94e438f02f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/quiz/page.tsx:39"}, "properties": {"repobilityId": "d053200449ddfd20", "scanner": "scanner-primary", "fingerprint": "170a9e94e438f02f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/quiz/page.tsx"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-b6a62a57c8234624", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/blog/page.tsx:28"}, "properties": {"repobilityId": "4b5bb7451f415d1c", "scanner": "scanner-primary", "fingerprint": "b6a62a57c8234624", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/blog/page.tsx"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-801a7ad4d4a7b524", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/blog/[slug]/page.tsx:139"}, "properties": {"repobilityId": "9c6991e1f0c5c6d8", "scanner": "scanner-primary", "fingerprint": "801a7ad4d4a7b524", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/blog/[slug]/page.tsx"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-c7de0906f7592a0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c8ffefd3ec65405e", "scanner": "scanner-primary", "fingerprint": "c7de0906f7592a0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/mobile-regression.yml"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-4ec3723ddd273bc2", "level": "note", "message": {"text": "Very large file: types/index.ts (1535 lines)"}, "properties": {"repobilityId": "f062e4d720e34d18", "scanner": "scanner-primary", "fingerprint": "4ec3723ddd273bc2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-33dd5dbf022120c5", "level": "note", "message": {"text": "Very large file: components/AutopsyReport.tsx (3805 lines)"}, "properties": {"repobilityId": "463e5045614503b7", "scanner": "scanner-primary", "fingerprint": "33dd5dbf022120c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a24139886e8008de", "level": "note", "message": {"text": "Very large file: lib/autopsy-engine.ts (4090 lines)"}, "properties": {"repobilityId": "119b194151067a28", "scanner": "scanner-primary", "fingerprint": "a24139886e8008de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "71f39be77f5a8368", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "751c62245a3bdd06", "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": "1c47f1a1d30a56d8", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "ba056147db55ee3d", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "4e688a05a955b301", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "03cb7d28badf7801", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ecb0d2c55ed6875d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.json"}, "properties": {"repobilityId": "d8bae33a6d517bf0", "scanner": "scanner-primary", "fingerprint": "ecb0d2c55ed6875d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.local.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4c9bb393bc338262", "level": "none", "message": {"text": "Commented-code block (6 lines) in vitest.config.ts:1"}, "properties": {"repobilityId": "3cce89bebf743a4b", "scanner": "scanner-primary", "fingerprint": "4c9bb393bc338262", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5aa410a49070e08", "level": "none", "message": {"text": "Commented-code block (10 lines) in next.config.js:21"}, "properties": {"repobilityId": "bbdaf31320ab2b4b", "scanner": "scanner-primary", "fingerprint": "f5aa410a49070e08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e3844ae90b28f3f5", "level": "none", "message": {"text": "Commented-code block (7 lines) in playwright.config.ts:60"}, "properties": {"repobilityId": "ba4f7a869dd666b0", "scanner": "scanner-primary", "fingerprint": "e3844ae90b28f3f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-395cafaed1b02e38", "level": "none", "message": {"text": "Commented-code block (7 lines) in tailwind.config.js:72"}, "properties": {"repobilityId": "582d7645ffeb7577", "scanner": "scanner-primary", "fingerprint": "395cafaed1b02e38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-119dfec82d0c5d3a", "level": "none", "message": {"text": "Commented-code block (6 lines) in capacitor.config.ts:12"}, "properties": {"repobilityId": "f9d7745896ca75a7", "scanner": "scanner-primary", "fingerprint": "119dfec82d0c5d3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-feea819a1e142726", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 capacitor.config.ts:47"}, "properties": {"repobilityId": "e6292d2910de23ca", "scanner": "scanner-primary", "fingerprint": "feea819a1e142726", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd56413f66e4ad20", "level": "none", "message": {"text": "Commented-code block (6 lines) in sentry.client.config.ts:3"}, "properties": {"repobilityId": "bf2f441de1fe6bc2", "scanner": "scanner-primary", "fingerprint": "cd56413f66e4ad20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8eb7f05f0816f24c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/layout.tsx:60"}, "properties": {"repobilityId": "ccc0672f3deaac04", "scanner": "scanner-primary", "fingerprint": "8eb7f05f0816f24c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4531d419b53f442d", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/inbound-email/route.ts:21"}, "properties": {"repobilityId": "0cc9b54dff23858f", "scanner": "scanner-primary", "fingerprint": "4531d419b53f442d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93aed0814446bd97", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/action-checkoffs/route.ts:10"}, "properties": {"repobilityId": "d04e069f7f2f9dda", "scanner": "scanner-primary", "fingerprint": "93aed0814446bd97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fda7cce6682a05da", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/checkout/route.ts:64"}, "properties": {"repobilityId": "75d0e38cf4372555", "scanner": "scanner-primary", "fingerprint": "fda7cce6682a05da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f806aea9ae8b4ffa", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/reports/route.ts:7"}, "properties": {"repobilityId": "1e51a8117e89af06", "scanner": "scanner-primary", "fingerprint": "f806aea9ae8b4ffa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61af6a21095b2a01", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/reports/[id]/route.ts:5"}, "properties": {"repobilityId": "bd467cb228201114", "scanner": "scanner-primary", "fingerprint": "61af6a21095b2a01", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-096051ec7fdcf0ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/webhooks/revenuecat/route.ts:24"}, "properties": {"repobilityId": "e3aad846427c78f5", "scanner": "scanner-primary", "fingerprint": "096051ec7fdcf0ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f443c442d354e412", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/analyze/route.ts:17"}, "properties": {"repobilityId": "728a633479068241", "scanner": "scanner-primary", "fingerprint": "f443c442d354e412", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98d1467ad137bd79", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/log-error/route.ts:13"}, "properties": {"repobilityId": "8255924d99eb4ed3", "scanner": "scanner-primary", "fingerprint": "98d1467ad137bd79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26822527eed76344", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/webhook/route.ts:53"}, "properties": {"repobilityId": "d22dcbede4309914", "scanner": "scanner-primary", "fingerprint": "26822527eed76344", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f854ea92147775f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/share/[id]/page.tsx:11"}, "properties": {"repobilityId": "00d5a31704b186d1", "scanner": "scanner-primary", "fingerprint": "4f854ea92147775f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b342d6fe058d908", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/auth/callback/route.ts:121"}, "properties": {"repobilityId": "6cee3d51b5b51ff1", "scanner": "scanner-primary", "fingerprint": "7b342d6fe058d908", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-217c15b5d9c46315", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/go/page.tsx:9"}, "properties": {"repobilityId": "c6c50d113b1fe1eb", "scanner": "scanner-primary", "fingerprint": "217c15b5d9c46315", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7509d3316fb757ff", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/(dashboard)/layout.tsx:10"}, "properties": {"repobilityId": "43235b4192435d6a", "scanner": "scanner-primary", "fingerprint": "7509d3316fb757ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7268c38e6122b2f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(dashboard)/DashboardShell.tsx:88"}, "properties": {"repobilityId": "1f03b0ed3b2be3fe", "scanner": "scanner-primary", "fingerprint": "b7268c38e6122b2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0490e04c9e92c799", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(dashboard)/dashboard/page.tsx:177"}, "properties": {"repobilityId": "517dbcce8836a680", "scanner": "scanner-primary", "fingerprint": "0490e04c9e92c799", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12276dea50aa65f4", "level": "none", "message": {"text": "Commented-code block (11 lines) in app/(dashboard)/uploads/[id]/page.tsx:3"}, "properties": {"repobilityId": "f771b4de8842d320", "scanner": "scanner-primary", "fingerprint": "12276dea50aa65f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b880f53512251997", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/(dashboard)/reports/page.tsx:79"}, "properties": {"repobilityId": "1b4c7ddb7d138933", "scanner": "scanner-primary", "fingerprint": "b880f53512251997", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12a336668cd64243", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/(auth)/login/page.tsx:20"}, "properties": {"repobilityId": "4f5756462cc8f441", "scanner": "scanner-primary", "fingerprint": "12a336668cd64243", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bee7c751f3d24111", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/(auth)/signup/page.tsx:30"}, "properties": {"repobilityId": "2eafb548655e1ff6", "scanner": "scanner-primary", "fingerprint": "bee7c751f3d24111", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24aa9d601eccb8c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/mobile-regression.spec.ts:43"}, "properties": {"repobilityId": "deabb10daff4c487", "scanner": "scanner-primary", "fingerprint": "24aa9d601eccb8c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f41096ea623f01a", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/verify-mega-pr-a.ts:127"}, "properties": {"repobilityId": "2b6f58d507146e0b", "scanner": "scanner-primary", "fingerprint": "1f41096ea623f01a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba3066b70db2a7dd", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/generate-tiktok-endcard-annotated.py:180"}, "properties": {"repobilityId": "1fa6c1052dbffa0b", "scanner": "scanner-primary", "fingerprint": "ba3066b70db2a7dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54930ea4d8b2f642", "level": "none", "message": {"text": "Commented-code block (9 lines) in hooks/useReports.ts:8"}, "properties": {"repobilityId": "513f68e6cf1252ce", "scanner": "scanner-primary", "fingerprint": "54930ea4d8b2f642", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5320ffd6b2bc0373", "level": "none", "message": {"text": "Commented-code block (5 lines) in types/index.ts:100"}, "properties": {"repobilityId": "ab204c287eb86930", "scanner": "scanner-primary", "fingerprint": "5320ffd6b2bc0373", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-941c7647c2ceab45", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/ZoomGate.tsx:35"}, "properties": {"repobilityId": "1b42bc42312f293a", "scanner": "scanner-primary", "fingerprint": "941c7647c2ceab45", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c610de3689c393e", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/AutopsyReport.tsx:443"}, "properties": {"repobilityId": "482d56d93e737f0e", "scanner": "scanner-primary", "fingerprint": "0c610de3689c393e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fb5de4c0ec9e210", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/SampleStickyBar.tsx:35"}, "properties": {"repobilityId": "7f013f2dd484ab1d", "scanner": "scanner-primary", "fingerprint": "7fb5de4c0ec9e210", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0e1c67bf8b5e844", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/AuthGuard.tsx:44"}, "properties": {"repobilityId": "4cd67ccf219e02b3", "scanner": "scanner-primary", "fingerprint": "d0e1c67bf8b5e844", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b510b480ae2849b", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/AuthProvider.tsx:126"}, "properties": {"repobilityId": "0a3698656a8d9bdf", "scanner": "scanner-primary", "fingerprint": "9b510b480ae2849b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d89affedc21b748f", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/ErrorBoundary.tsx:5"}, "properties": {"repobilityId": "c4c5a7500aafb8b3", "scanner": "scanner-primary", "fingerprint": "d89affedc21b748f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cadec527f02a97f1", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/NavBar.tsx:60"}, "properties": {"repobilityId": "a3a4209049d12f75", "scanner": "scanner-primary", "fingerprint": "cadec527f02a97f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-955015647c2aea84", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/native/NativeTabBar.tsx:25"}, "properties": {"repobilityId": "c0d91bcdc1959f8f", "scanner": "scanner-primary", "fingerprint": "955015647c2aea84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c832b9330c51ff6", "level": "none", "message": {"text": "Commented-code block (14 lines) in lib/report-comparison.ts:52"}, "properties": {"repobilityId": "3dabb258f7f90e32", "scanner": "scanner-primary", "fingerprint": "5c832b9330c51ff6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4575646d256552d", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/swr-persistent-cache.ts:7"}, "properties": {"repobilityId": "692f59becf539bbc", "scanner": "scanner-primary", "fingerprint": "f4575646d256552d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de8ec56d794cb7a3", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/iap-upgrade.ts:29"}, "properties": {"repobilityId": "fe163471a89e1fa2", "scanner": "scanner-primary", "fingerprint": "de8ec56d794cb7a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8838719b2c51332", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/control-system.ts:438"}, "properties": {"repobilityId": "fdefd9bde08e66dd", "scanner": "scanner-primary", "fingerprint": "f8838719b2c51332", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99c466c7a8146135", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/api-client.ts:3"}, "properties": {"repobilityId": "fa6c953d712cf197", "scanner": "scanner-primary", "fingerprint": "99c466c7a8146135", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1043fe0484427095", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/api-client.ts:16"}, "properties": {"repobilityId": "66a7af5fe2f005c8", "scanner": "scanner-primary", "fingerprint": "1043fe0484427095", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aeae87ca4b6acc64", "level": "none", "message": {"text": "Commented-code block (9 lines) in lib/autopsy-engine.ts:15"}, "properties": {"repobilityId": "1ac5dcf78ba4f61e", "scanner": "scanner-primary", "fingerprint": "aeae87ca4b6acc64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eed22b85455bf368", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/apns.ts:4"}, "properties": {"repobilityId": "303db79f09af2ce5", "scanner": "scanner-primary", "fingerprint": "eed22b85455bf368", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-843e3ca97c538024", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/share-helpers.ts:145"}, "properties": {"repobilityId": "876840d2ffd7fb88", "scanner": "scanner-primary", "fingerprint": "843e3ca97c538024", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f19074d63fc6eabd", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/push-report-ready.ts:10"}, "properties": {"repobilityId": "95d17ba6537d2cba", "scanner": "scanner-primary", "fingerprint": "f19074d63fc6eabd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bcace8beb051775d", "level": "none", "message": {"text": "Commented-code block (9 lines) in lib/supabase-browser.ts:8"}, "properties": {"repobilityId": "d9a03cb712fa5690", "scanner": "scanner-primary", "fingerprint": "bcace8beb051775d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37b12cf51c05ba99", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/engine/constants/thresholds.ts:23"}, "properties": {"repobilityId": "65311b8d612d4028", "scanner": "scanner-primary", "fingerprint": "37b12cf51c05ba99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-405cc8fc9648641d", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/iap-upgrade.test.ts:19"}, "properties": {"repobilityId": "5a9939eb34d8c368", "scanner": "scanner-primary", "fingerprint": "405cc8fc9648641d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5999160131102430", "level": "note", "message": {"text": "Legacy-named symbol `single_report_v1` in __tests__/p0-iap-webhook.test.ts:142"}, "properties": {"repobilityId": "d530bd9c48f7de05", "scanner": "scanner-primary", "fingerprint": "5999160131102430", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fbedb5315d68c534", "level": "none", "message": {"text": "Commented-code block (10 lines) in __tests__/p0-iap-webhook.test.ts:7"}, "properties": {"repobilityId": "c42d511996503b08", "scanner": "scanner-primary", "fingerprint": "fbedb5315d68c534", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-210d3e6182f6ea0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/bias-depth.test.ts:144"}, "properties": {"repobilityId": "e83d1e0124b3c9ad", "scanner": "scanner-primary", "fingerprint": "210d3e6182f6ea0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-121f00a119cdd5ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in __tests__/api-reports-list.test.ts:55"}, "properties": {"repobilityId": "3bf5296a0568b2e2", "scanner": "scanner-primary", "fingerprint": "121f00a119cdd5ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83a5f0931deee7cb", "level": "none", "message": {"text": "Commented-code block (6 lines) in __tests__/autopsy-engine.redaction.test.ts:37"}, "properties": {"repobilityId": "a386325874c995df", "scanner": "scanner-primary", "fingerprint": "83a5f0931deee7cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d785c17821858dcb", "level": "note", "message": {"text": "22 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "f5222babac44ad42", "scanner": "scanner-primary", "fingerprint": "d785c17821858dcb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "be443ba005d00942", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0ee1c649b830154e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "480fee735e742dbf", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "4f79cc6c5e19c416", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "965bf226344b156a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "2946929eaf66d477", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "eec0e31e87476648", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "3c657cc1a7efe823", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "cfc2b82b4896cd9d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}