{"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-b337437eda89b01b", "name": "Stray `console.log` in TS/JS \u2014 app/api/songcash/submit/route.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/songcash/submit/route.ts:60"}, "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-c342ff8c58df4527", "name": "Stray `console.log` in TS/JS \u2014 app/api/auth/forgot/route.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/auth/forgot/route.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-d67eabb30ada5689", "name": "Stray `console.log` in TS/JS \u2014 app/api/upload/route.ts:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/upload/route.ts:80"}, "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-ee7e42b92aaf740d", "name": "Stray `console.log` in TS/JS \u2014 app/api/upload/unitedmasters/route.ts:133", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/upload/unitedmasters/route.ts:133"}, "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-8bcbf5f9e3e0e7a4", "name": "Stray `console.log` in TS/JS \u2014 app/api/upload/distrokid/route.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/upload/distrokid/route.ts:57"}, "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-3b31dc508990c0e2", "name": "Stray `console.log` in TS/JS \u2014 app/api/artists/[id]/delete/route.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/artists/[id]/delete/route.ts:45"}, "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-3381284125e3dd41", "name": "Stray `console.log` in TS/JS \u2014 app/api/artists/merge/route.ts:182", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/artists/merge/route.ts:182"}, "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-17a1b77244e4819f", "name": "Stray `console.log` in TS/JS \u2014 scripts/trace-deal-to-contract.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/trace-deal-to-contract.ts:17"}, "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-616330ff1231d3ff", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-render.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-render.ts:13"}, "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-4012a0be630da9e9", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-artist-render.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-artist-render.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-78fb29f2999901ac", "name": "Stray `console.log` in TS/JS \u2014 scripts/jackson-invite-url.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/jackson-invite-url.ts:17"}, "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-f263e7d59c00883f", "name": "Stray `console.log` in TS/JS \u2014 scripts/send-test-emails.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-test-emails.ts:20"}, "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-f5cf1b3b5bdef8ce", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-render-solluna-draft.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-render-solluna-draft.ts:14"}, "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-def4e0f9544cdb59", "name": "Stray `console.log` in TS/JS \u2014 scripts/restore-from-neon-branch.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/restore-from-neon-branch.ts:35"}, "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-18d9d71c77bdc362", "name": "Stray `console.log` in TS/JS \u2014 scripts/upload-dk.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/upload-dk.js:34"}, "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-623b622379341633", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-response-roundtrip.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-response-roundtrip.ts:11"}, "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-8ba19c9d2f78e343", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-test-users.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-test-users.ts:27"}, "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-ed72febd16b25aec", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag-contract.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-contract.ts:11"}, "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-51a37f0a68febf50", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-dedupe-migration-risk.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-dedupe-migration-risk.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-7fcf53c26d672caf", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-dedupe-collisions.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-dedupe-collisions.ts:32"}, "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-dc91857b6d9bddaa", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-artist-dedupe.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-artist-dedupe.ts:44"}, "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-f12c90ae08735a80", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-avg-revenue.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-avg-revenue.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9b4f77f0743cd21", "name": "Stray `console.log` in TS/JS \u2014 scripts/send-magic-link-preview.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-magic-link-preview.ts:8"}, "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-c24f1d6eb69c8860", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-contract-matrix.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-contract-matrix.ts:93"}, "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-1cbb2fb181be8963", "name": "Stray `console.log` in TS/JS \u2014 scripts/e2e-deal-flow.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/e2e-deal-flow.ts:44"}, "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-04a9c22b57657291", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-maximize.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-maximize.ts:17"}, "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-c7e91e9c95b2a6ee", "name": "Stray `console.log` in TS/JS \u2014 scripts/db-snapshot.ts:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/db-snapshot.ts:102"}, "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-102d05067d7ab2fe", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-normalize.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-normalize.ts:8"}, "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-d9dba63da5feeee0", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-jackson.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-jackson.ts:9"}, "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-59bcad1b8ec912a0", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-nerd1k-draft.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-nerd1k-draft.ts:12"}, "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-1d1c89f826a85154", "name": "Stray `console.log` in TS/JS \u2014 scripts/um-test.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/um-test.ts:12"}, "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-25d7fba4c6923518", "name": "Stray `console.log` in TS/JS \u2014 scripts/upload-dk-direct.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/upload-dk-direct.ts:39"}, "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-ffc587d6be4fca6b", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-render-newwrld.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-render-newwrld.ts:8"}, "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-a73e0329c01c1c6f", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-deandre.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-deandre.ts:12"}, "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-3f18aae872eedc1c", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-track-changes-stripped.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-track-changes-stripped.ts:37"}, "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-ae89f50dffff757f", "name": "Stray `console.log` in TS/JS \u2014 scripts/e2e-um-only.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/e2e-um-only.ts:34"}, "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-ba1244f198dfa6a1", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-users.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-users.ts:24"}, "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-307110642eae47c3", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-deandre-notify.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-deandre-notify.ts:35"}, "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-9c613cef1e888406", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/panels/ContractDrafterPanel.tsx:664", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/panels/ContractDrafterPanel.tsx:664"}, "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-990aca14b35bed67", "name": "Stray `console.log` in TS/JS \u2014 lib/notify.ts:479", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/notify.ts:479"}, "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-9c17a02c62605556", "name": "Stray `console.log` in TS/JS \u2014 lib/um-parser.ts:349", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/um-parser.ts:349"}, "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-5278c7b805ee713d", "name": "Stray `console.log` in TS/JS \u2014 lib/distrokid-parser.ts:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/distrokid-parser.ts:114"}, "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-de740ea7edf69a10", "name": "Stray `console.log` in TS/JS \u2014 lib/parser.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/parser.ts:37"}, "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-05c82cf049455a99", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/ai/markdown.ts:13", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/ai/markdown.ts:13"}, "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-12f2e7c2821c5660", "name": "Insecure pattern 'cors_wildcard' in app/api/songcash/submit/route.ts:207", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in app/api/songcash/submit/route.ts:207"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae322e3fb9f39b77", "name": "Insecure pattern 'dangerous_innerhtml' in components/panels/ContractDrafterPanel.tsx:664", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/panels/ContractDrafterPanel.tsx:664"}, "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-c9f329dac477b097", "name": "Insecure pattern 'dangerous_innerhtml' in docs/audit-digest.json:1619", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/audit-digest.json:1619"}, "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-c7c99fbe85443179", "name": "Insecure pattern 'cors_wildcard' in docs/audit-digest.json:14", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in docs/audit-digest.json:14"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad8f22ad0f696bd1", "name": "Insecure pattern 'weak_hash' in docs/audit-2026-06-11/inventory.json:340", "shortDescription": {"text": "Insecure pattern 'weak_hash' in docs/audit-2026-06-11/inventory.json:340"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2604332ae98773d3", "name": "Very large file: app/page.tsx (1272 lines)", "shortDescription": {"text": "Very large file: app/page.tsx (1272 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-601d66a611c5b5dd", "name": "Very large file: app/offers/page.tsx (1294 lines)", "shortDescription": {"text": "Very large file: app/offers/page.tsx (1294 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-4f81ec3805c50bef", "name": "Very large file: app/deal/[token]/page.tsx (1265 lines)", "shortDescription": {"text": "Very large file: app/deal/[token]/page.tsx (1265 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-e6e1b2833c67de90", "name": "Very large file: components/panels/OfferCalculatorPanel.tsx (2145 lines)", "shortDescription": {"text": "Very large file: components/panels/OfferCalculatorPanel.tsx (2145 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-88a7cc976d985268", "name": "Very large file: components/panels/ContractDrafterPanel.tsx (1693 lines)", "shortDescription": {"text": "Very large file: components/panels/ContractDrafterPanel.tsx (1693 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "45 tests / 226 src (ratio 0.20)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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 368 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 70 placeholder/mock markers across 31 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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, ci. 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-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-60c36fd6a667ea86", "name": "Commented-code block (8 lines) in app/page.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in app/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-b0d1c45f7d3a5c5f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/page.tsx:688", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/page.tsx:688"}, "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-0fc7f5989d974e82", "name": "Commented-code block (6 lines) in app/api/cron/intelligence/route.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/cron/intelligence/route.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-c969a5bfdb05f421", "name": "Commented-code block (8 lines) in app/api/cron/data-integrity/route.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/cron/data-integrity/route.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-e89ba11ca3fc1055", "name": "Commented-code block (7 lines) in app/api/cron/weekly-digest/route.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/cron/weekly-digest/route.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-b2c76a6c88d7cdae", "name": "Commented-code block (5 lines) in app/api/admin/users/[id]/route.ts:98", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/users/[id]/route.ts:98"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d9043ccf2c9eaa6", "name": "Commented-code block (5 lines) in app/api/songcash/submit/route.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/songcash/submit/route.ts:95"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0681a016dd745045", "name": "Commented-code block (7 lines) in app/api/deal-share/route.ts:230", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/deal-share/route.ts:230"}, "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-bf522739509c59cb", "name": "Commented-code block (5 lines) in app/api/deal-share/[token]/calculate/route.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/deal-share/[token]/calculate/route.ts: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-342f760dba3ccd0d", "name": "Commented-code block (5 lines) in app/api/deal-share/[token]/respond/route.ts:130", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/deal-share/[token]/respond/route.ts:130"}, "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-076fe792702122b1", "name": "Commented-code block (7 lines) in app/api/upload/route.ts:18", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/upload/route.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd439880258e4f7f", "name": "Commented-code block (8 lines) in app/api/upload/unitedmasters/route.ts:97", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/upload/unitedmasters/route.ts:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-08038b45a4b613fc", "name": "Commented-code block (7 lines) in app/api/upload/distrokid/route.ts:81", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/upload/distrokid/route.ts:81"}, "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-c41539cac51fc048", "name": "Commented-code block (6 lines) in app/api/artists/route.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/artists/route.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-ba7db43fcc1e3a5e", "name": "Commented-code block (5 lines) in app/api/artists/[id]/route.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/artists/[id]/route.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d952ea72b572d33", "name": "Commented-code block (6 lines) in app/api/artists/[id]/latest-share/route.ts:60", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/artists/[id]/latest-share/route.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-19f68c8003bbb36f", "name": "Commented-code block (5 lines) in app/api/artists/[id]/contract/generate/route.ts:66", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/artists/[id]/contract/generate/route.ts:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a90724d6a8d405f", "name": "Commented-code block (5 lines) in app/api/artists/[id]/contract/generations/[gid]/download/route.ts:48", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/artists/[id]/contract/generations/[gid]/download/route.ts:48"}, "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-cae1ebd2f560284c", "name": "Commented-code block (6 lines) in app/api/artists/merge/route.ts:77", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/artists/merge/route.ts:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b03dad20d9a4f7d4", "name": "Commented-code block (7 lines) in app/api/ai/offer-recommendation/route.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/ai/offer-recommendation/route.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-5d3522e9f4e62598", "name": "Commented-code block (5 lines) in app/api/ai/health/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/ai/health/route.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-980dcd59f1f19553", "name": "Commented-code block (6 lines) in app/api/ai/chat/route.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/ai/chat/route.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-9b7873d2e8b1a452", "name": "Commented-code block (7 lines) in app/api/ai/explain/route.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/ai/explain/route.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-6a3e8d804575f40c", "name": "Commented-code block (8 lines) in app/api/ai/contract-check/route.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/ai/contract-check/route.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-96befcaa92bf6045", "name": "Commented-code block (7 lines) in app/api/ai/insights-memo/route.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/ai/insights-memo/route.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-5d6b786540b55bb2", "name": "Commented-code block (7 lines) in app/api/ai/brief/route.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/ai/brief/route.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-cc247a5d0876d955", "name": "Commented-code block (8 lines) in app/api/ai/suggestions/route.ts:14", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/ai/suggestions/route.ts:14"}, "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-4fe16f3824f00244", "name": "Commented-code block (9 lines) in app/api/ai/suggestions/[id]/route.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/ai/suggestions/[id]/route.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-bf19b9d761f7ab21", "name": "Commented-code block (8 lines) in app/api/ai/counter-analysis/route.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/ai/counter-analysis/route.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-cf0ce76b5bb5c7a1", "name": "Commented-code block (6 lines) in app/api/ai/strategist/route.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/ai/strategist/route.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-d9c82541549f58c2", "name": "Commented-code block (7 lines) in app/api/ai/diligence/route.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/ai/diligence/route.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-62db16f43f105657", "name": "Commented-code block (7 lines) in app/api/ai/lead-scores/route.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/ai/lead-scores/route.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-2b80eaf0f642c7b8", "name": "Commented-code block (10 lines) in app/account/page.tsx:15", "shortDescription": {"text": "Commented-code block (10 lines) in app/account/page.tsx: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-564b26fd28e68938", "name": "Commented-code block (5 lines) in app/artist/[id]/page.tsx:107", "shortDescription": {"text": "Commented-code block (5 lines) in app/artist/[id]/page.tsx:107"}, "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-1c966ffa9d6b487e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/artist/[id]/offer/page.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/artist/[id]/offer/page.tsx:65"}, "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-5808897355bd60e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/users/page.tsx:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/users/page.tsx:126"}, "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-18e3dda20fcea96e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/onboarding/page.tsx:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/onboarding/page.tsx:43"}, "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-4729764b906de52d", "name": "Commented-code block (5 lines) in app/deal/[token]/layout.tsx:37", "shortDescription": {"text": "Commented-code block (5 lines) in app/deal/[token]/layout.tsx: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-dc1679cb1ddab3c3", "name": "Commented-code block (7 lines) in app/deal/[token]/page.tsx:85", "shortDescription": {"text": "Commented-code block (7 lines) in app/deal/[token]/page.tsx:85"}, "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-934e56aaacf2bf10", "name": "Commented-code block (6 lines) in components/RosterSkeleton.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in components/RosterSkeleton.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d7f0245209cdd17", "name": "Commented-code block (10 lines) in components/useArtistPrefetch.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in components/useArtistPrefetch.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-015e7b1bc2275f8b", "name": "Commented-code block (8 lines) in components/CommandPalette.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in components/CommandPalette.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-448b9af1c25f41d4", "name": "Commented-code block (7 lines) in components/CommandBar.tsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in components/CommandBar.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1bc409e3ada9858a", "name": "Commented-code block (5 lines) in components/GlobalDropZone.tsx:52", "shortDescription": {"text": "Commented-code block (5 lines) in components/GlobalDropZone.tsx: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-0419a4d0996a6e4b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/GlobalDropZone.tsx:297", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/GlobalDropZone.tsx:297"}, "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-6e0f08d00f2b3856", "name": "Commented-code block (5 lines) in components/icons.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in components/icons.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8488e9995170d2be", "name": "Commented-code block (12 lines) in components/Dashboard.tsx:3", "shortDescription": {"text": "Commented-code block (12 lines) in components/Dashboard.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-66a17f4fab2fb49b", "name": "Commented-code block (7 lines) in components/intelligence/useIntelligence.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in components/intelligence/useIntelligence.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-4d9643c96349122d", "name": "Commented-code block (6 lines) in components/intelligence/CounterAnalysisCard.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in components/intelligence/CounterAnalysisCard.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-dae7d1c3828768d7", "name": "Commented-code block (6 lines) in components/intelligence/ToolStep.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in components/intelligence/ToolStep.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-2d135350831ef9e4", "name": "Commented-code block (5 lines) in components/intelligence/RichText.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in components/intelligence/RichText.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-60fe7caffe1519f0", "name": "Commented-code block (7 lines) in components/intelligence/MorningBriefCard.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in components/intelligence/MorningBriefCard.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-e9f93f375606baf5", "name": "Commented-code block (6 lines) in components/intelligence/IntelligenceDrawer.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in components/intelligence/IntelligenceDrawer.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-ce649f9e0d6dbf0d", "name": "Commented-code block (7 lines) in components/intelligence/MessageThread.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in components/intelligence/MessageThread.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-1fe8796d18cfff82", "name": "Commented-code block (10 lines) in components/intelligence/SuggestionCard.tsx:5", "shortDescription": {"text": "Commented-code block (10 lines) in components/intelligence/SuggestionCard.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-73d1d5908ef5ed1d", "name": "Commented-code block (6 lines) in components/intelligence/SuggestionInbox.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in components/intelligence/SuggestionInbox.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-406f0d60d2639ee2", "name": "Commented-code block (6 lines) in components/panels/OfferCalculatorPanel.tsx:130", "shortDescription": {"text": "Commented-code block (6 lines) in components/panels/OfferCalculatorPanel.tsx:130"}, "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-e88ee2520440348b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/panels/OfferCalculatorPanel.tsx:2093", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/panels/OfferCalculatorPanel.tsx:2093"}, "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-3ac1f0b220dbcf78", "name": "Commented-code block (5 lines) in components/panels/use-reduced-motion.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in components/panels/use-reduced-motion.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-049d3cb8a6c946c5", "name": "Commented-code block (5 lines) in components/panels/DealPanel.tsx:30", "shortDescription": {"text": "Commented-code block (5 lines) in components/panels/DealPanel.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-a36dae08f4a153fd", "name": "Commented-code block (6 lines) in components/panels/OverviewPanel.tsx:128", "shortDescription": {"text": "Commented-code block (6 lines) in components/panels/OverviewPanel.tsx:128"}, "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-eea2e7e39ff526a6", "name": "Commented-code block (5 lines) in components/panels/DataIntegrityPanel.tsx:58", "shortDescription": {"text": "Commented-code block (5 lines) in components/panels/DataIntegrityPanel.tsx:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2e645feeba6ae7ec", "name": "Commented-code block (5 lines) in components/panels/RevenuePanel.tsx:123", "shortDescription": {"text": "Commented-code block (5 lines) in components/panels/RevenuePanel.tsx:123"}, "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-8a7464120c199edc", "name": "Commented-code block (6 lines) in components/panels/ContractDrafterPanel.tsx:96", "shortDescription": {"text": "Commented-code block (6 lines) in components/panels/ContractDrafterPanel.tsx:96"}, "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-aa065f4121dfa4cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/panels/ContractDrafterPanel.tsx:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/panels/ContractDrafterPanel.tsx:123"}, "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-6bc5ee6d7e489d9c", "name": "Commented-code block (7 lines) in components/panels/shared.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in components/panels/shared.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-b6ecae552b18e025", "name": "Commented-code block (7 lines) in components/panels/offer-calc/constants.ts:50", "shortDescription": {"text": "Commented-code block (7 lines) in components/panels/offer-calc/constants.ts:50"}, "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-91b8f8bc532ad104", "name": "Commented-code block (6 lines) in components/panels/offer-calc/AcquisitionModel.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in components/panels/offer-calc/AcquisitionModel.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-afd2b83f503cdda4", "name": "Commented-code block (5 lines) in components/shell/ArtistHero.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in components/shell/ArtistHero.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-0fbfe7de93bdb406", "name": "Commented-code block (5 lines) in components/shell/SectionRail.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in components/shell/SectionRail.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-cdfd1b381bd46be4", "name": "Commented-code block (7 lines) in components/workspaces/DealWorkspace.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in components/workspaces/DealWorkspace.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-52715d036dadb1db", "name": "Commented-code block (9 lines) in components/workspaces/AnalyzeWorkspace.tsx:3", "shortDescription": {"text": "Commented-code block (9 lines) in components/workspaces/AnalyzeWorkspace.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-3e13862f4ce6153d", "name": "Commented-code block (7 lines) in components/workspaces/CloseWorkspace.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in components/workspaces/CloseWorkspace.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-614b2296015ebd1a", "name": "Commented-code block (11 lines) in components/ui/Modal.tsx:6", "shortDescription": {"text": "Commented-code block (11 lines) in components/ui/Modal.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34250fb6032d864e", "name": "Commented-code block (8 lines) in components/ui/Toast.tsx:6", "shortDescription": {"text": "Commented-code block (8 lines) in components/ui/Toast.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9113053d9d6f5de", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/notify.ts:482", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/notify.ts:482"}, "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-034eb105bca0c924", "name": "Commented-code block (5 lines) in lib/analytics.ts:708", "shortDescription": {"text": "Commented-code block (5 lines) in lib/analytics.ts:708"}, "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-b75626b48244391b", "name": "Commented-code block (5 lines) in lib/use-count-up.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/use-count-up.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-4ce4c6f3ebec3964", "name": "Commented-code block (6 lines) in lib/deal-share.ts:65", "shortDescription": {"text": "Commented-code block (6 lines) in lib/deal-share.ts:65"}, "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-4ded746fadf74402", "name": "Commented-code block (5 lines) in lib/merge-artists.ts:172", "shortDescription": {"text": "Commented-code block (5 lines) in lib/merge-artists.ts:172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b076a7bbb0ef8eab", "name": "Commented-code block (7 lines) in lib/artist-dedupe.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in lib/artist-dedupe.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-83370dbee6b28886", "name": "Commented-code block (8 lines) in lib/compact-dataset.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in lib/compact-dataset.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-799803517919afca", "name": "Commented-code block (8 lines) in lib/deal-engine.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in lib/deal-engine.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-c2bb572ac5a2a24c", "name": "Commented-code block (8 lines) in lib/distrokid-parser.ts:132", "shortDescription": {"text": "Commented-code block (8 lines) in lib/distrokid-parser.ts:132"}, "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-15037caa9ed6e915", "name": "Commented-code block (7 lines) in lib/cpm.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in lib/cpm.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-ae438bae9aad2512", "name": "Commented-code block (7 lines) in lib/email-templates.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in lib/email-templates.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-bcd79e3951fc0494", "name": "Commented-code block (16 lines) in lib/parser.ts:125", "shortDescription": {"text": "Commented-code block (16 lines) in lib/parser.ts:125"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e6697a41ee2a9ea", "name": "Commented-code block (10 lines) in lib/upload-limits.ts:4", "shortDescription": {"text": "Commented-code block (10 lines) in lib/upload-limits.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-819c969f566d4df4", "name": "Commented-code block (6 lines) in lib/revenue-merge.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in lib/revenue-merge.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-3554b4e87c535383", "name": "Commented-code block (6 lines) in lib/apply-response-inputs.ts:81", "shortDescription": {"text": "Commented-code block (6 lines) in lib/apply-response-inputs.ts:81"}, "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-410a7c70b7d98125", "name": "Commented-code block (8 lines) in lib/songcash-schema.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in lib/songcash-schema.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-5436ba92f13bd049", "name": "Commented-code block (5 lines) in lib/contracts/render-newwrld.ts:234", "shortDescription": {"text": "Commented-code block (5 lines) in lib/contracts/render-newwrld.ts:234"}, "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-48b63a2d7a78ae01", "name": "Legacy-named symbol `normOld` in lib/contracts/docx-utils.ts:479", "shortDescription": {"text": "Legacy-named symbol `normOld` in lib/contracts/docx-utils.ts:479"}, "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-3daaf54ff4781410", "name": "Commented-code block (7 lines) in lib/contracts/docx-utils.ts:48", "shortDescription": {"text": "Commented-code block (7 lines) in lib/contracts/docx-utils.ts:48"}, "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-a101323d6c52ccc8", "name": "Commented-code block (6 lines) in lib/contracts/from-deal.ts:80", "shortDescription": {"text": "Commented-code block (6 lines) in lib/contracts/from-deal.ts:80"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b26cbb74f0cef786", "name": "Commented-code block (5 lines) in lib/contracts/validate.ts:67", "shortDescription": {"text": "Commented-code block (5 lines) in lib/contracts/validate.ts:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf2382a4c9cc0f6f", "name": "Commented-code block (5 lines) in lib/contracts/render-laene.ts:233", "shortDescription": {"text": "Commented-code block (5 lines) in lib/contracts/render-laene.ts:233"}, "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-548609156b1ae3f8", "name": "Commented-code block (8 lines) in lib/ai/tools.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in lib/ai/tools.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-a42252bba53dc989", "name": "Commented-code block (7 lines) in lib/ai/gateway.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in lib/ai/gateway.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-eb1726863d7beb66", "name": "Commented-code block (7 lines) in lib/ai/context.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in lib/ai/context.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-cb8d72f41895f2d5", "name": "Commented-code block (5 lines) in lib/ai/shaping.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in lib/ai/shaping.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-0633858bce45c356", "name": "Commented-code block (5 lines) in lib/ai/schemas.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in lib/ai/schemas.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-efeabd72401324a5", "name": "Commented-code block (6 lines) in lib/ai/markdown.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in lib/ai/markdown.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-0c2f520cd2f5a1a7", "name": "Commented-code block (5 lines) in lib/ai/watchers.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in lib/ai/watchers.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-ec888cab64b871f1", "name": "Commented-code block (10 lines) in lib/ai/agents/model-fallback.ts:4", "shortDescription": {"text": "Commented-code block (10 lines) in lib/ai/agents/model-fallback.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-e650875ed814a8e8", "name": "Commented-code block (11 lines) in lib/ai/agents/deal-strategist.ts:4", "shortDescription": {"text": "Commented-code block (11 lines) in lib/ai/agents/deal-strategist.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-972c9ee8e2abd1ef", "name": "Commented-code block (14 lines) in lib/ai/agents/counter-analyst.ts:4", "shortDescription": {"text": "Commented-code block (14 lines) in lib/ai/agents/counter-analyst.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-23e3c140476d4292", "name": "Commented-code block (12 lines) in lib/ai/agents/contract-check.ts:4", "shortDescription": {"text": "Commented-code block (12 lines) in lib/ai/agents/contract-check.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-4a00ad7533845122", "name": "Commented-code block (7 lines) in lib/ai/agents/explain-panel.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in lib/ai/agents/explain-panel.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-d29ad019ce7c5de5", "name": "Commented-code block (6 lines) in lib/ai/agents/um-crosscheck.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in lib/ai/agents/um-crosscheck.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-74af4351e1332571", "name": "Commented-code block (12 lines) in lib/ai/agents/anomaly-watchdog.ts:4", "shortDescription": {"text": "Commented-code block (12 lines) in lib/ai/agents/anomaly-watchdog.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-8f06b5f79911efa6", "name": "Commented-code block (5 lines) in lib/ai/agents/automation-settings.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in lib/ai/agents/automation-settings.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-5cedb8412a8b39b1", "name": "Commented-code block (15 lines) in lib/ai/agents/comp-recommendation.ts:5", "shortDescription": {"text": "Commented-code block (15 lines) in lib/ai/agents/comp-recommendation.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-3043cae4a848a7d8", "name": "Commented-code block (6 lines) in lib/ai/agents/insights-memo.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in lib/ai/agents/insights-memo.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-a5f64484ec4d360a", "name": "Commented-code block (6 lines) in lib/ai/agents/brief.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in lib/ai/agents/brief.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-a1896cd72cc36e22", "name": "Commented-code block (6 lines) in lib/ai/agents/diligence.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in lib/ai/agents/diligence.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-1a97c302559b2007", "name": "Commented-code block (10 lines) in lib/ai/agents/term-config.ts:4", "shortDescription": {"text": "Commented-code block (10 lines) in lib/ai/agents/term-config.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-8c5be792018a84ae", "name": "Commented-code block (9 lines) in lib/ai/agents/weekly-digest.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in lib/ai/agents/weekly-digest.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-d067e4a881e39eb6", "name": "Commented-code block (8 lines) in lib/ai/agents/lead-scoring.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in lib/ai/agents/lead-scoring.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-c4ebfdce349d09b5", "name": "Commented-code block (5 lines) in lib/__tests__/parser-catalog.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in lib/__tests__/parser-catalog.test.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a70c0aff8c43354e", "name": "Commented-code block (6 lines) in lib/__tests__/admin-user-delete.test.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in lib/__tests__/admin-user-delete.test.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9dcd8a5a35451da4", "name": "Commented-code block (7 lines) in lib/__tests__/ai-agents.test.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in lib/__tests__/ai-agents.test.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-864b08ce600410c8", "name": "Commented-code block (5 lines) in lib/__tests__/parser-trends.test.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in lib/__tests__/parser-trends.test.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-21d1e487184fab73", "name": "Legacy-named symbol `fromLegacy` in lib/__tests__/deal-engine.test.ts:229", "shortDescription": {"text": "Legacy-named symbol `fromLegacy` in lib/__tests__/deal-engine.test.ts:229"}, "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-8e0cad6c2a4d6d28", "name": "Commented-code block (5 lines) in lib/__tests__/deal-engine.test.ts:67", "shortDescription": {"text": "Commented-code block (5 lines) in lib/__tests__/deal-engine.test.ts:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6c176a0dbecea36", "name": "Commented-code block (5 lines) in lib/__tests__/analytics-windows.test.ts:109", "shortDescription": {"text": "Commented-code block (5 lines) in lib/__tests__/analytics-windows.test.ts:109"}, "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-aacc1849476b3b98", "name": "Commented-code block (5 lines) in lib/__tests__/parser-daterange.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in lib/__tests__/parser-daterange.test.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88e010b279214e52", "name": "Commented-code block (5 lines) in lib/__tests__/merge-artists.test.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in lib/__tests__/merge-artists.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-4e5c74d085882b8f", "name": "Commented-code block (5 lines) in lib/__tests__/cpm.test.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in lib/__tests__/cpm.test.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-59eca5dbfb6ad7d7", "name": "Commented-code block (8 lines) in lib/__tests__/ai-opportunities.test.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in lib/__tests__/ai-opportunities.test.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-b8e9bfc8f066bbf3", "name": "Commented-code block (5 lines) in lib/__tests__/um-parser.test.ts:62", "shortDescription": {"text": "Commented-code block (5 lines) in lib/__tests__/um-parser.test.ts:62"}, "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-242095532073f6e8", "name": "Dangling fetch: GET /api/artists (app/page.tsx:346)", "shortDescription": {"text": "Dangling fetch: GET /api/artists (app/page.tsx:346)"}, "fullDescription": {"text": "`app/page.tsx:346` calls `GET /api/artists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3694e837fb7794b2", "name": "Dangling fetch: POST /api/upload/distrokid (app/page.tsx:511)", "shortDescription": {"text": "Dangling fetch: POST /api/upload/distrokid (app/page.tsx:511)"}, "fullDescription": {"text": "`app/page.tsx:511` calls `POST /api/upload/distrokid` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/upload/distrokid`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f649ce76d18ef6f4", "name": "Dangling fetch: POST /api/upload/unitedmasters (app/page.tsx:551)", "shortDescription": {"text": "Dangling fetch: POST /api/upload/unitedmasters (app/page.tsx:551)"}, "fullDescription": {"text": "`app/page.tsx:551` calls `POST /api/upload/unitedmasters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/upload/unitedmasters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8a939fa70b0f06a", "name": "Dangling fetch: POST /api/upload (app/page.tsx:598)", "shortDescription": {"text": "Dangling fetch: POST /api/upload (app/page.tsx:598)"}, "fullDescription": {"text": "`app/page.tsx:598` calls `POST /api/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-862a65988c08312e", "name": "Dangling fetch: PATCH /api/artists/${id}/stage (app/page.tsx:688)", "shortDescription": {"text": "Dangling fetch: PATCH /api/artists/${id}/stage (app/page.tsx:688)"}, "fullDescription": {"text": "`app/page.tsx:688` calls `PATCH /api/artists/${id}/stage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/stage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39bd68621f243dbd", "name": "Dangling fetch: DELETE /api/artists/${target.id}/delete (app/page.tsx:988)", "shortDescription": {"text": "Dangling fetch: DELETE /api/artists/${target.id}/delete (app/page.tsx:988)"}, "fullDescription": {"text": "`app/page.tsx:988` calls `DELETE /api/artists/${target.id}/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5cb39d4595277ec0", "name": "Dangling fetch: GET /api/account/notifications (app/account/page.tsx:119)", "shortDescription": {"text": "Dangling fetch: GET /api/account/notifications (app/account/page.tsx:119)"}, "fullDescription": {"text": "`app/account/page.tsx:119` calls `GET /api/account/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-56dfa9f09d75f676", "name": "Dangling fetch: GET /api/account/profile (app/account/page.tsx:132)", "shortDescription": {"text": "Dangling fetch: GET /api/account/profile (app/account/page.tsx:132)"}, "fullDescription": {"text": "`app/account/page.tsx:132` calls `GET /api/account/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28ba2ba7b3f4f68e", "name": "Dangling fetch: GET /api/ai/automation (app/account/page.tsx:142)", "shortDescription": {"text": "Dangling fetch: GET /api/ai/automation (app/account/page.tsx:142)"}, "fullDescription": {"text": "`app/account/page.tsx:142` calls `GET /api/ai/automation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/automation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e33b5e7656a428d5", "name": "Dangling fetch: PUT /api/ai/automation (app/account/page.tsx:168)", "shortDescription": {"text": "Dangling fetch: PUT /api/ai/automation (app/account/page.tsx:168)"}, "fullDescription": {"text": "`app/account/page.tsx:168` calls `PUT /api/ai/automation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/automation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b68ea0509a4b9cc", "name": "Dangling fetch: PATCH /api/account/notifications (app/account/page.tsx:199)", "shortDescription": {"text": "Dangling fetch: PATCH /api/account/notifications (app/account/page.tsx:199)"}, "fullDescription": {"text": "`app/account/page.tsx:199` calls `PATCH /api/account/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca80d427a457a2bb", "name": "Dangling fetch: PATCH /api/account/profile (app/account/page.tsx:220)", "shortDescription": {"text": "Dangling fetch: PATCH /api/account/profile (app/account/page.tsx:220)"}, "fullDescription": {"text": "`app/account/page.tsx:220` calls `PATCH /api/account/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a45b289f12a7224a", "name": "Dangling fetch: GET /api/artists/${params.id}?light=1 (app/artist/[id]/page.tsx:115)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${params.id}?light=1 (app/artist/[id]/page.tsx:115)"}, "fullDescription": {"text": "`app/artist/[id]/page.tsx:115` calls `GET /api/artists/${params.id}?light=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-90ca679717ccc83f", "name": "Dangling fetch: GET /api/artists/${params.id} (app/artist/[id]/page.tsx:119)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${params.id} (app/artist/[id]/page.tsx:119)"}, "fullDescription": {"text": "`app/artist/[id]/page.tsx:119` calls `GET /api/artists/${params.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0777e66e2baab648", "name": "Dangling fetch: GET /api/songcash/leads (app/artist/[id]/offer/page.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/songcash/leads (app/artist/[id]/offer/page.tsx:59)"}, "fullDescription": {"text": "`app/artist/[id]/offer/page.tsx:59` calls `GET /api/songcash/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/songcash/leads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60678a74a21c4931", "name": "Dangling fetch: GET /api/songcash/leads/${artistLead.id} (app/artist/[id]/offer/page.tsx:65)", "shortDescription": {"text": "Dangling fetch: GET /api/songcash/leads/${artistLead.id} (app/artist/[id]/offer/page.tsx:65)"}, "fullDescription": {"text": "`app/artist/[id]/offer/page.tsx:65` calls `GET /api/songcash/leads/${artistLead.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/songcash/leads/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bf4cc29a4506a64", "name": "Dangling fetch: PATCH /api/songcash/leads/${lead.id} (app/artist/[id]/offer/page.tsx:135)", "shortDescription": {"text": "Dangling fetch: PATCH /api/songcash/leads/${lead.id} (app/artist/[id]/offer/page.tsx:135)"}, "fullDescription": {"text": "`app/artist/[id]/offer/page.tsx:135` calls `PATCH /api/songcash/leads/${lead.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/songcash/leads/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b866bedd1b9ce6e5", "name": "Dangling fetch: PATCH /api/songcash/leads/${lead.id} (app/artist/[id]/offer/page.tsx:157)", "shortDescription": {"text": "Dangling fetch: PATCH /api/songcash/leads/${lead.id} (app/artist/[id]/offer/page.tsx:157)"}, "fullDescription": {"text": "`app/artist/[id]/offer/page.tsx:157` calls `PATCH /api/songcash/leads/${lead.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/songcash/leads/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c6d9fc5d987f3f5", "name": "Dangling fetch: GET /api/admin/users (app/admin/users/page.tsx:86)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/users (app/admin/users/page.tsx:86)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:86` calls `GET /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b64484d6e3836a68", "name": "Dangling fetch: GET /api/admin/invites (app/admin/users/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/invites (app/admin/users/page.tsx:87)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:87` calls `GET /api/admin/invites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/invites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa1f522dfdb7119a", "name": "Dangling fetch: POST /api/admin/invites (app/admin/users/page.tsx:105)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/invites (app/admin/users/page.tsx:105)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:105` calls `POST /api/admin/invites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/invites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b13ea4e35aea41b8", "name": "Dangling fetch: DELETE /api/admin/invites/${id} (app/admin/users/page.tsx:126)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/invites/${id} (app/admin/users/page.tsx:126)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:126` calls `DELETE /api/admin/invites/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/invites/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44dfb14fa71f9a62", "name": "Dangling fetch: PATCH /api/admin/invites/${id} (app/admin/users/page.tsx:131)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/invites/${id} (app/admin/users/page.tsx:131)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:131` calls `PATCH /api/admin/invites/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/invites/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8893ca02956d4a90", "name": "Dangling fetch: PATCH /api/admin/users/${id} (app/admin/users/page.tsx:151)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/users/${id} (app/admin/users/page.tsx:151)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:151` calls `PATCH /api/admin/users/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6fdffd63f52e9283", "name": "Dangling fetch: DELETE /api/admin/users/${u.id} (app/admin/users/page.tsx:171)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/users/${u.id} (app/admin/users/page.tsx:171)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:171` calls `DELETE /api/admin/users/${u.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3b31c82071bb1cb", "name": "Dangling fetch: GET /api/deal-share (app/offers/page.tsx:355)", "shortDescription": {"text": "Dangling fetch: GET /api/deal-share (app/offers/page.tsx:355)"}, "fullDescription": {"text": "`app/offers/page.tsx:355` calls `GET /api/deal-share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-033efef79f47c085", "name": "Dangling fetch: PATCH /api/deal-share/${token}/status (app/offers/page.tsx:391)", "shortDescription": {"text": "Dangling fetch: PATCH /api/deal-share/${token}/status (app/offers/page.tsx:391)"}, "fullDescription": {"text": "`app/offers/page.tsx:391` calls `PATCH /api/deal-share/${token}/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share/<p>/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78cc520cb113e7c8", "name": "Dangling fetch: POST /api/deal-share/${token}/revoke (app/offers/page.tsx:424)", "shortDescription": {"text": "Dangling fetch: POST /api/deal-share/${token}/revoke (app/offers/page.tsx:424)"}, "fullDescription": {"text": "`app/offers/page.tsx:424` calls `POST /api/deal-share/${token}/revoke` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share/<p>/revoke`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f406334a9b5c9512", "name": "Dangling fetch: DELETE /api/deal-share/${token}/revoke (app/offers/page.tsx:444)", "shortDescription": {"text": "Dangling fetch: DELETE /api/deal-share/${token}/revoke (app/offers/page.tsx:444)"}, "fullDescription": {"text": "`app/offers/page.tsx:444` calls `DELETE /api/deal-share/${token}/revoke` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share/<p>/revoke`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80e66bb5a2c702d5", "name": "Dangling fetch: POST /api/deal-share/${token}/archive (app/offers/page.tsx:460)", "shortDescription": {"text": "Dangling fetch: POST /api/deal-share/${token}/archive (app/offers/page.tsx:460)"}, "fullDescription": {"text": "`app/offers/page.tsx:460` calls `POST /api/deal-share/${token}/archive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share/<p>/archive`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60b8cb4e5a720976", "name": "Dangling fetch: DELETE /api/deal-share/${token}/archive (app/offers/page.tsx:476)", "shortDescription": {"text": "Dangling fetch: DELETE /api/deal-share/${token}/archive (app/offers/page.tsx:476)"}, "fullDescription": {"text": "`app/offers/page.tsx:476` calls `DELETE /api/deal-share/${token}/archive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share/<p>/archive`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c32a9fe319ea7b9e", "name": "Dangling fetch: POST /api/ai/counter-analysis (app/offers/page.tsx:588)", "shortDescription": {"text": "Dangling fetch: POST /api/ai/counter-analysis (app/offers/page.tsx:588)"}, "fullDescription": {"text": "`app/offers/page.tsx:588` calls `POST /api/ai/counter-analysis` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/counter-analysis`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-180d682de7d88b2d", "name": "Dangling fetch: GET /api/artists/${id} (app/compare/page.tsx:56)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${id} (app/compare/page.tsx:56)"}, "fullDescription": {"text": "`app/compare/page.tsx:56` calls `GET /api/artists/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f86b3df12396561b", "name": "Dangling fetch: GET /api/auth/invite-lookup?token=${encodeURIComponent(inviteToken)} (app/signup/page.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/invite-lookup?token=${encodeURIComponent(inviteToken)} (app/signup/page.tsx:53)"}, "fullDescription": {"text": "`app/signup/page.tsx:53` calls `GET /api/auth/invite-lookup?token=${encodeURIComponent(inviteToken)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/invite-lookup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0322a84b71dbcc34", "name": "Dangling fetch: POST /api/auth/signup (app/signup/page.tsx:80)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/signup (app/signup/page.tsx:80)"}, "fullDescription": {"text": "`app/signup/page.tsx:80` calls `POST /api/auth/signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47bd2d641b24022e", "name": "Dangling fetch: GET /api/account/profile (app/onboarding/page.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/account/profile (app/onboarding/page.tsx:43)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:43` calls `GET /api/account/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-18d2822cb8efd4f6", "name": "Dangling fetch: GET /api/account/notifications (app/onboarding/page.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/account/notifications (app/onboarding/page.tsx:44)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:44` calls `GET /api/account/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba74d8b0ec043f12", "name": "Dangling fetch: POST /api/auth/verify-email/send (app/onboarding/page.tsx:91)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/verify-email/send (app/onboarding/page.tsx:91)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:91` calls `POST /api/auth/verify-email/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/verify-email/send`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2fc043208fd9331a", "name": "Dangling fetch: PATCH /api/account/profile (app/onboarding/page.tsx:109)", "shortDescription": {"text": "Dangling fetch: PATCH /api/account/profile (app/onboarding/page.tsx:109)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:109` calls `PATCH /api/account/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1dd0764de051080e", "name": "Dangling fetch: GET /api/account/profile (app/onboarding/page.tsx:138)", "shortDescription": {"text": "Dangling fetch: GET /api/account/profile (app/onboarding/page.tsx:138)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:138` calls `GET /api/account/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0af9744f29c0aaa", "name": "Dangling fetch: PATCH /api/account/notifications (app/onboarding/page.tsx:163)", "shortDescription": {"text": "Dangling fetch: PATCH /api/account/notifications (app/onboarding/page.tsx:163)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:163` calls `PATCH /api/account/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32128b0ce38b2abd", "name": "Dangling fetch: POST /api/account/onboarded (app/onboarding/page.tsx:174)", "shortDescription": {"text": "Dangling fetch: POST /api/account/onboarded (app/onboarding/page.tsx:174)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:174` calls `POST /api/account/onboarded` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/account/onboarded`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e3152731524fcfb", "name": "Dangling fetch: GET /api/deal-share/${params.token} (app/deal/[token]/page.tsx:173)", "shortDescription": {"text": "Dangling fetch: GET /api/deal-share/${params.token} (app/deal/[token]/page.tsx:173)"}, "fullDescription": {"text": "`app/deal/[token]/page.tsx:173` calls `GET /api/deal-share/${params.token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7733b042582dc70f", "name": "Dangling fetch: POST /api/deal-share/${params.token}/view (app/deal/[token]/page.tsx:188)", "shortDescription": {"text": "Dangling fetch: POST /api/deal-share/${params.token}/view (app/deal/[token]/page.tsx:188)"}, "fullDescription": {"text": "`app/deal/[token]/page.tsx:188` calls `POST /api/deal-share/${params.token}/view` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share/<p>/view`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-911f92776de66255", "name": "Dangling fetch: POST /api/deal-share/${params.token}/calculate (app/deal/[token]/page.tsx:222)", "shortDescription": {"text": "Dangling fetch: POST /api/deal-share/${params.token}/calculate (app/deal/[token]/page.tsx:222)"}, "fullDescription": {"text": "`app/deal/[token]/page.tsx:222` calls `POST /api/deal-share/${params.token}/calculate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share/<p>/calculate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa2211e638f68396", "name": "Dangling fetch: POST /api/deal-share/${params.token}/maximize (app/deal/[token]/page.tsx:279)", "shortDescription": {"text": "Dangling fetch: POST /api/deal-share/${params.token}/maximize (app/deal/[token]/page.tsx:279)"}, "fullDescription": {"text": "`app/deal/[token]/page.tsx:279` calls `POST /api/deal-share/${params.token}/maximize` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share/<p>/maximize`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9d0d856f925e717", "name": "Dangling fetch: POST /api/deal-share/${params.token}/respond (app/deal/[token]/page.tsx:476)", "shortDescription": {"text": "Dangling fetch: POST /api/deal-share/${params.token}/respond (app/deal/[token]/page.tsx:476)"}, "fullDescription": {"text": "`app/deal/[token]/page.tsx:476` calls `POST /api/deal-share/${params.token}/respond` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share/<p>/respond`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d70406cd403dbbc6", "name": "Dangling fetch: POST /api/auth/reset (app/reset/[token]/page.tsx:57)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/reset (app/reset/[token]/page.tsx:57)"}, "fullDescription": {"text": "`app/reset/[token]/page.tsx:57` calls `POST /api/auth/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/reset`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7bc99726b0a2b445", "name": "Dangling fetch: POST /api/auth/forgot (app/forgot-password/page.tsx:17)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/forgot (app/forgot-password/page.tsx:17)"}, "fullDescription": {"text": "`app/forgot-password/page.tsx:17` calls `POST /api/auth/forgot` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/forgot`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-041195323f68914a", "name": "Dangling fetch: GET /api/artists/${encodeURIComponent(id)}?light=1 (components/useArtistPrefetch.ts:81)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${encodeURIComponent(id)}?light=1 (components/useArtistPrefetch.ts:81)"}, "fullDescription": {"text": "`components/useArtistPrefetch.ts:81` calls `GET /api/artists/${encodeURIComponent(id)}?light=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d25f31f035e43268", "name": "Dangling fetch: GET /api/artists (components/CommandPalette.tsx:130)", "shortDescription": {"text": "Dangling fetch: GET /api/artists (components/CommandPalette.tsx:130)"}, "fullDescription": {"text": "`components/CommandPalette.tsx:130` calls `GET /api/artists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c98836afec07451", "name": "Dangling fetch: POST /api/upload/distrokid (components/GlobalDropZone.tsx:234)", "shortDescription": {"text": "Dangling fetch: POST /api/upload/distrokid (components/GlobalDropZone.tsx:234)"}, "fullDescription": {"text": "`components/GlobalDropZone.tsx:234` calls `POST /api/upload/distrokid` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/upload/distrokid`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8372e2b216eec8f", "name": "Dangling fetch: POST /api/upload/unitedmasters (components/GlobalDropZone.tsx:297)", "shortDescription": {"text": "Dangling fetch: POST /api/upload/unitedmasters (components/GlobalDropZone.tsx:297)"}, "fullDescription": {"text": "`components/GlobalDropZone.tsx:297` calls `POST /api/upload/unitedmasters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/upload/unitedmasters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eed2e1b7dc00a2bd", "name": "Dangling fetch: POST /api/upload (components/GlobalDropZone.tsx:347)", "shortDescription": {"text": "Dangling fetch: POST /api/upload (components/GlobalDropZone.tsx:347)"}, "fullDescription": {"text": "`components/GlobalDropZone.tsx:347` calls `POST /api/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6026c713992c306f", "name": "Dangling fetch: POST /api/report-template (components/ReportContext.tsx:41)", "shortDescription": {"text": "Dangling fetch: POST /api/report-template (components/ReportContext.tsx:41)"}, "fullDescription": {"text": "`components/ReportContext.tsx:41` calls `POST /api/report-template` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/report-template`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8de9d55464475e82", "name": "Dangling fetch: GET /api/ai/brief (components/intelligence/useIntelligence.ts:133)", "shortDescription": {"text": "Dangling fetch: GET /api/ai/brief (components/intelligence/useIntelligence.ts:133)"}, "fullDescription": {"text": "`components/intelligence/useIntelligence.ts:133` calls `GET /api/ai/brief` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/brief`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20349794d54ebe07", "name": "Dangling fetch: GET /api/ai/suggestions (components/intelligence/useIntelligence.ts:174)", "shortDescription": {"text": "Dangling fetch: GET /api/ai/suggestions (components/intelligence/useIntelligence.ts:174)"}, "fullDescription": {"text": "`components/intelligence/useIntelligence.ts:174` calls `GET /api/ai/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f70019d68aa09e1", "name": "Dangling fetch: PATCH /api/ai/suggestions/${id} (components/intelligence/useIntelligence.ts:240)", "shortDescription": {"text": "Dangling fetch: PATCH /api/ai/suggestions/${id} (components/intelligence/useIntelligence.ts:240)"}, "fullDescription": {"text": "`components/intelligence/useIntelligence.ts:240` calls `PATCH /api/ai/suggestions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/suggestions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f62b24d6a0dfd70f", "name": "Dangling fetch: GET /api/me/offer-defaults (components/panels/OfferCalculatorPanel.tsx:270)", "shortDescription": {"text": "Dangling fetch: GET /api/me/offer-defaults (components/panels/OfferCalculatorPanel.tsx:270)"}, "fullDescription": {"text": "`components/panels/OfferCalculatorPanel.tsx:270` calls `GET /api/me/offer-defaults` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/offer-defaults`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ddde0f8326c348e1", "name": "Dangling fetch: GET /api/deal-templates (components/panels/OfferCalculatorPanel.tsx:289)", "shortDescription": {"text": "Dangling fetch: GET /api/deal-templates (components/panels/OfferCalculatorPanel.tsx:289)"}, "fullDescription": {"text": "`components/panels/OfferCalculatorPanel.tsx:289` calls `GET /api/deal-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e30deeeb280d3d6f", "name": "Dangling fetch: POST /api/ai/strategist (components/panels/OfferCalculatorPanel.tsx:520)", "shortDescription": {"text": "Dangling fetch: POST /api/ai/strategist (components/panels/OfferCalculatorPanel.tsx:520)"}, "fullDescription": {"text": "`components/panels/OfferCalculatorPanel.tsx:520` calls `POST /api/ai/strategist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/strategist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2a89b387c5c293b", "name": "Dangling fetch: PUT /api/me/offer-defaults (components/panels/OfferCalculatorPanel.tsx:566)", "shortDescription": {"text": "Dangling fetch: PUT /api/me/offer-defaults (components/panels/OfferCalculatorPanel.tsx:566)"}, "fullDescription": {"text": "`components/panels/OfferCalculatorPanel.tsx:566` calls `PUT /api/me/offer-defaults` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/offer-defaults`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bba2af7cb2f5ca1f", "name": "Dangling fetch: PUT /api/me/offer-defaults (components/panels/OfferCalculatorPanel.tsx:583)", "shortDescription": {"text": "Dangling fetch: PUT /api/me/offer-defaults (components/panels/OfferCalculatorPanel.tsx:583)"}, "fullDescription": {"text": "`components/panels/OfferCalculatorPanel.tsx:583` calls `PUT /api/me/offer-defaults` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/offer-defaults`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2c4f268d0bc7f2c", "name": "Dangling fetch: POST /api/deal-share (components/panels/OfferCalculatorPanel.tsx:2093)", "shortDescription": {"text": "Dangling fetch: POST /api/deal-share (components/panels/OfferCalculatorPanel.tsx:2093)"}, "fullDescription": {"text": "`components/panels/OfferCalculatorPanel.tsx:2093` calls `POST /api/deal-share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deal-share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3264b2fce7533032", "name": "Dangling fetch: POST /api/ai/diligence (components/panels/DealPanel.tsx:159)", "shortDescription": {"text": "Dangling fetch: POST /api/ai/diligence (components/panels/DealPanel.tsx:159)"}, "fullDescription": {"text": "`components/panels/DealPanel.tsx:159` calls `POST /api/ai/diligence` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/diligence`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3c7e0e4cd1fafc1", "name": "Dangling fetch: GET /api/artists/${artistId}/contract/generations (components/panels/ContractDrafterPanel.tsx:84)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${artistId}/contract/generations (components/panels/ContractDrafterPanel.tsx:84)"}, "fullDescription": {"text": "`components/panels/ContractDrafterPanel.tsx:84` calls `GET /api/artists/${artistId}/contract/generations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/contract/generations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70dc3698571fcdf7", "name": "Dangling fetch: GET /api/artists/${artistId}/contract/generations (components/panels/ContractDrafterPanel.tsx:123)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${artistId}/contract/generations (components/panels/ContractDrafterPanel.tsx:123)"}, "fullDescription": {"text": "`components/panels/ContractDrafterPanel.tsx:123` calls `GET /api/artists/${artistId}/contract/generations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/contract/generations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4345b77c2cdf2012", "name": "Dangling fetch: POST /api/ai/contract-check (components/panels/ContractDrafterPanel.tsx:129)", "shortDescription": {"text": "Dangling fetch: POST /api/ai/contract-check (components/panels/ContractDrafterPanel.tsx:129)"}, "fullDescription": {"text": "`components/panels/ContractDrafterPanel.tsx:129` calls `POST /api/ai/contract-check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/contract-check`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b900a1c0f8c14c65", "name": "Dangling fetch: GET /api/artists/${artistId}/contract-draft?template=${template} (components/panels/ContractDrafterPanel", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${artistId}/contract-draft?template=${template} (components/panels/ContractDrafterPanel.tsx:155)"}, "fullDescription": {"text": "`components/panels/ContractDrafterPanel.tsx:155` calls `GET /api/artists/${artistId}/contract-draft?template=${template}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/contract-draft`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3d08b23ac66801a", "name": "Dangling fetch: GET /api/artists/${artistId}/latest-share (components/panels/ContractDrafterPanel.tsx:156)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${artistId}/latest-share (components/panels/ContractDrafterPanel.tsx:156)"}, "fullDescription": {"text": "`components/panels/ContractDrafterPanel.tsx:156` calls `GET /api/artists/${artistId}/latest-share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/latest-share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe04aa84e4324472", "name": "Dangling fetch: PUT /api/artists/${artistId}/contract-draft (components/panels/ContractDrafterPanel.tsx:208)", "shortDescription": {"text": "Dangling fetch: PUT /api/artists/${artistId}/contract-draft (components/panels/ContractDrafterPanel.tsx:208)"}, "fullDescription": {"text": "`components/panels/ContractDrafterPanel.tsx:208` calls `PUT /api/artists/${artistId}/contract-draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/contract-draft`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e37c4fe30dab926", "name": "Dangling fetch: POST /api/artists/${artistId}/contract/generate (components/panels/ContractDrafterPanel.tsx:243)", "shortDescription": {"text": "Dangling fetch: POST /api/artists/${artistId}/contract/generate (components/panels/ContractDrafterPanel.tsx:243)"}, "fullDescription": {"text": "`components/panels/ContractDrafterPanel.tsx:243` calls `POST /api/artists/${artistId}/contract/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/contract/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-748796bdb37de55e", "name": "Dangling fetch: POST /api/artists/${artistId}/contract/preview (components/panels/ContractDrafterPanel.tsx:289)", "shortDescription": {"text": "Dangling fetch: POST /api/artists/${artistId}/contract/preview (components/panels/ContractDrafterPanel.tsx:289)"}, "fullDescription": {"text": "`components/panels/ContractDrafterPanel.tsx:289` calls `POST /api/artists/${artistId}/contract/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/contract/preview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-248b2db8c380d506", "name": "Dangling fetch: GET /api/artists/${artistId}/latest-share (components/panels/ContractDrafterPanel.tsx:333)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${artistId}/latest-share (components/panels/ContractDrafterPanel.tsx:333)"}, "fullDescription": {"text": "`components/panels/ContractDrafterPanel.tsx:333` calls `GET /api/artists/${artistId}/latest-share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/latest-share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe522558a34546af", "name": "Dangling fetch: POST /api/artists/${artistId}/revenue (components/panels/CpmPanel.tsx:120)", "shortDescription": {"text": "Dangling fetch: POST /api/artists/${artistId}/revenue (components/panels/CpmPanel.tsx:120)"}, "fullDescription": {"text": "`components/panels/CpmPanel.tsx:120` calls `POST /api/artists/${artistId}/revenue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/revenue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5fe786c700c71100", "name": "Dangling fetch: DELETE /api/artists/${artistId}/revenue (components/panels/CpmPanel.tsx:147)", "shortDescription": {"text": "Dangling fetch: DELETE /api/artists/${artistId}/revenue (components/panels/CpmPanel.tsx:147)"}, "fullDescription": {"text": "`components/panels/CpmPanel.tsx:147` calls `DELETE /api/artists/${artistId}/revenue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/revenue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c997cdeb0824bae7", "name": "Dangling fetch: POST /api/artists/${artistId}/revenue (components/panels/CpmPanel.tsx:302)", "shortDescription": {"text": "Dangling fetch: POST /api/artists/${artistId}/revenue (components/panels/CpmPanel.tsx:302)"}, "fullDescription": {"text": "`components/panels/CpmPanel.tsx:302` calls `POST /api/artists/${artistId}/revenue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/revenue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc8f09b00d59ee28", "name": "Dangling fetch: GET /api/artists/${artistId}/notes (components/crm/NotesSection.tsx:25)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${artistId}/notes (components/crm/NotesSection.tsx:25)"}, "fullDescription": {"text": "`components/crm/NotesSection.tsx:25` calls `GET /api/artists/${artistId}/notes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-405eb8e678a89581", "name": "Dangling fetch: POST /api/artists/${artistId}/notes (components/crm/NotesSection.tsx:44)", "shortDescription": {"text": "Dangling fetch: POST /api/artists/${artistId}/notes (components/crm/NotesSection.tsx:44)"}, "fullDescription": {"text": "`components/crm/NotesSection.tsx:44` calls `POST /api/artists/${artistId}/notes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5dac4b0da1c5d25", "name": "Dangling fetch: DELETE /api/artists/${artistId}/notes/${noteId} (components/crm/NotesSection.tsx:69)", "shortDescription": {"text": "Dangling fetch: DELETE /api/artists/${artistId}/notes/${noteId} (components/crm/NotesSection.tsx:69)"}, "fullDescription": {"text": "`components/crm/NotesSection.tsx:69` calls `DELETE /api/artists/${artistId}/notes/${noteId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/notes/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce4e02c9c38696a7", "name": "Dangling fetch: GET /api/artists/${artistId}/tasks (components/crm/TasksSection.tsx:33)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${artistId}/tasks (components/crm/TasksSection.tsx:33)"}, "fullDescription": {"text": "`components/crm/TasksSection.tsx:33` calls `GET /api/artists/${artistId}/tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/tasks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0aeb88ee64c1571c", "name": "Dangling fetch: POST /api/artists/${artistId}/tasks (components/crm/TasksSection.tsx:65)", "shortDescription": {"text": "Dangling fetch: POST /api/artists/${artistId}/tasks (components/crm/TasksSection.tsx:65)"}, "fullDescription": {"text": "`components/crm/TasksSection.tsx:65` calls `POST /api/artists/${artistId}/tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/tasks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1986efcb7fa32f3a", "name": "Dangling fetch: PATCH /api/artists/${artistId}/tasks/${task.id} (components/crm/TasksSection.tsx:91)", "shortDescription": {"text": "Dangling fetch: PATCH /api/artists/${artistId}/tasks/${task.id} (components/crm/TasksSection.tsx:91)"}, "fullDescription": {"text": "`components/crm/TasksSection.tsx:91` calls `PATCH /api/artists/${artistId}/tasks/${task.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-247148b51fce6d87", "name": "Dangling fetch: DELETE /api/artists/${artistId}/tasks/${taskId} (components/crm/TasksSection.tsx:111)", "shortDescription": {"text": "Dangling fetch: DELETE /api/artists/${artistId}/tasks/${taskId} (components/crm/TasksSection.tsx:111)"}, "fullDescription": {"text": "`components/crm/TasksSection.tsx:111` calls `DELETE /api/artists/${artistId}/tasks/${taskId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f07ff3ed906d7793", "name": "Dangling fetch: GET /api/artists/${artistId}/activity (components/crm/ActivitySection.tsx:42)", "shortDescription": {"text": "Dangling fetch: GET /api/artists/${artistId}/activity (components/crm/ActivitySection.tsx:42)"}, "fullDescription": {"text": "`components/crm/ActivitySection.tsx:42` calls `GET /api/artists/${artistId}/activity` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artists/<p>/activity`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e6644e294e022b3", "name": "Dangling fetch: POST https://api.resend.com/emails (lib/notify.ts:482)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (lib/notify.ts:482)"}, "fullDescription": {"text": "`lib/notify.ts:482` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca28f9a5eb47bbad", "name": "Dangling fetch: POST https://api.resend.com/emails (lib/notify.ts:556)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (lib/notify.ts:556)"}, "fullDescription": {"text": "`lib/notify.ts:556` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-98fcbb76f19b2201", "name": "Dangling fetch: POST https://api.resend.com/emails (lib/ai/tools.ts:109)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (lib/ai/tools.ts:109)"}, "fullDescription": {"text": "`lib/ai/tools.ts:109` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-817c4d47ee4d1fce", "name": "Dangling fetch: GET https://ai-gateway.vercel.sh/v1/models (lib/ai/gateway.ts:44)", "shortDescription": {"text": "Dangling fetch: GET https://ai-gateway.vercel.sh/v1/models (lib/ai/gateway.ts:44)"}, "fullDescription": {"text": "`lib/ai/gateway.ts:44` calls `GET https://ai-gateway.vercel.sh/v1/models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/ai-gateway.vercel.sh/v1/models`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2e036ca1d63f261", "name": "Dangling fetch: POST https://api.resend.com/emails (lib/ai/agents/weekly-digest.ts:264)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (lib/ai/agents/weekly-digest.ts:264)"}, "fullDescription": {"text": "`lib/ai/agents/weekly-digest.ts:264` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-684f0e83ba7e1558", "name": "Unused endpoint: GET ", "shortDescription": {"text": "Unused endpoint: GET "}, "fullDescription": {"text": "`scripts/check-dedupe-collisions.ts` declares `GET ` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23873"}, "properties": {"repository": "abt928/NEWWRLDDataverse", "repoUrl": "https://github.com/abt928/NEWWRLDDataverse", "branch": "main"}, "results": [{"ruleId": "scanner-b337437eda89b01b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/songcash/submit/route.ts:60"}, "properties": {"repobilityId": "7e1b7ca1024900d1", "scanner": "scanner-primary", "fingerprint": "b337437eda89b01b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c342ff8c58df4527", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/auth/forgot/route.ts:47"}, "properties": {"repobilityId": "55846709fa06c093", "scanner": "scanner-primary", "fingerprint": "c342ff8c58df4527", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d67eabb30ada5689", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/upload/route.ts:80"}, "properties": {"repobilityId": "3587b73603f00c06", "scanner": "scanner-primary", "fingerprint": "d67eabb30ada5689", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee7e42b92aaf740d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/upload/unitedmasters/route.ts:133"}, "properties": {"repobilityId": "340549946066ca32", "scanner": "scanner-primary", "fingerprint": "ee7e42b92aaf740d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8bcbf5f9e3e0e7a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/upload/distrokid/route.ts:57"}, "properties": {"repobilityId": "43b7fa0c93d64f2c", "scanner": "scanner-primary", "fingerprint": "8bcbf5f9e3e0e7a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3b31dc508990c0e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/artists/[id]/delete/route.ts:45"}, "properties": {"repobilityId": "5da6ab7003930e86", "scanner": "scanner-primary", "fingerprint": "3b31dc508990c0e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3381284125e3dd41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/artists/merge/route.ts:182"}, "properties": {"repobilityId": "2050ec38631e8204", "scanner": "scanner-primary", "fingerprint": "3381284125e3dd41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-17a1b77244e4819f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/trace-deal-to-contract.ts:17"}, "properties": {"repobilityId": "51fa2ec655b02bc9", "scanner": "scanner-primary", "fingerprint": "17a1b77244e4819f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-616330ff1231d3ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-render.ts:13"}, "properties": {"repobilityId": "6878d69ca5911796", "scanner": "scanner-primary", "fingerprint": "616330ff1231d3ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4012a0be630da9e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-artist-render.ts:16"}, "properties": {"repobilityId": "d06d31a8fc5f5d48", "scanner": "scanner-primary", "fingerprint": "4012a0be630da9e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78fb29f2999901ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/jackson-invite-url.ts:17"}, "properties": {"repobilityId": "0ff7a77b074b950f", "scanner": "scanner-primary", "fingerprint": "78fb29f2999901ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f263e7d59c00883f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-test-emails.ts:20"}, "properties": {"repobilityId": "52334f66ac1919f2", "scanner": "scanner-primary", "fingerprint": "f263e7d59c00883f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5cf1b3b5bdef8ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-render-solluna-draft.ts:14"}, "properties": {"repobilityId": "5a486a459c605153", "scanner": "scanner-primary", "fingerprint": "f5cf1b3b5bdef8ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-def4e0f9544cdb59", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/restore-from-neon-branch.ts:35"}, "properties": {"repobilityId": "d981d5825c778fa7", "scanner": "scanner-primary", "fingerprint": "def4e0f9544cdb59", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-18d9d71c77bdc362", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/upload-dk.js:34"}, "properties": {"repobilityId": "0c5f0746dae60397", "scanner": "scanner-primary", "fingerprint": "18d9d71c77bdc362", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-623b622379341633", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-response-roundtrip.ts:11"}, "properties": {"repobilityId": "f2323f62997c7778", "scanner": "scanner-primary", "fingerprint": "623b622379341633", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ba19c9d2f78e343", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-test-users.ts:27"}, "properties": {"repobilityId": "5921aca5fc1499b7", "scanner": "scanner-primary", "fingerprint": "8ba19c9d2f78e343", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed72febd16b25aec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-contract.ts:11"}, "properties": {"repobilityId": "df7e762d05bfdd37", "scanner": "scanner-primary", "fingerprint": "ed72febd16b25aec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51a37f0a68febf50", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-dedupe-migration-risk.ts:38"}, "properties": {"repobilityId": "d3e4a59f811e1703", "scanner": "scanner-primary", "fingerprint": "51a37f0a68febf50", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7fcf53c26d672caf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-dedupe-collisions.ts:32"}, "properties": {"repobilityId": "23ce8f3a6ccf8d33", "scanner": "scanner-primary", "fingerprint": "7fcf53c26d672caf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc91857b6d9bddaa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-artist-dedupe.ts:44"}, "properties": {"repobilityId": "166bc4a55df5fcb3", "scanner": "scanner-primary", "fingerprint": "dc91857b6d9bddaa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f12c90ae08735a80", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-avg-revenue.ts:16"}, "properties": {"repobilityId": "a7cfd25026fee8ac", "scanner": "scanner-primary", "fingerprint": "f12c90ae08735a80", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a9b4f77f0743cd21", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-magic-link-preview.ts:8"}, "properties": {"repobilityId": "0b68dbf55b7f297c", "scanner": "scanner-primary", "fingerprint": "a9b4f77f0743cd21", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c24f1d6eb69c8860", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-contract-matrix.ts:93"}, "properties": {"repobilityId": "1cd8b466f000b4e9", "scanner": "scanner-primary", "fingerprint": "c24f1d6eb69c8860", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1cbb2fb181be8963", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/e2e-deal-flow.ts:44"}, "properties": {"repobilityId": "8e30b2e7e8af6a32", "scanner": "scanner-primary", "fingerprint": "1cbb2fb181be8963", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04a9c22b57657291", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-maximize.ts:17"}, "properties": {"repobilityId": "6b98d840a9fe2150", "scanner": "scanner-primary", "fingerprint": "04a9c22b57657291", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7e91e9c95b2a6ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/db-snapshot.ts:102"}, "properties": {"repobilityId": "58d29ec4d623e8ff", "scanner": "scanner-primary", "fingerprint": "c7e91e9c95b2a6ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-102d05067d7ab2fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-normalize.ts:8"}, "properties": {"repobilityId": "3fcd5cd1aed85f05", "scanner": "scanner-primary", "fingerprint": "102d05067d7ab2fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9dba63da5feeee0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-jackson.ts:9"}, "properties": {"repobilityId": "6be910ae2ba8932b", "scanner": "scanner-primary", "fingerprint": "d9dba63da5feeee0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-59bcad1b8ec912a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-nerd1k-draft.ts:12"}, "properties": {"repobilityId": "0c4e01cd5762b20f", "scanner": "scanner-primary", "fingerprint": "59bcad1b8ec912a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d1c89f826a85154", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/um-test.ts:12"}, "properties": {"repobilityId": "aa3fb92374dc6ed1", "scanner": "scanner-primary", "fingerprint": "1d1c89f826a85154", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25d7fba4c6923518", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/upload-dk-direct.ts:39"}, "properties": {"repobilityId": "e126aa5b85e2aed8", "scanner": "scanner-primary", "fingerprint": "25d7fba4c6923518", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffc587d6be4fca6b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-render-newwrld.ts:8"}, "properties": {"repobilityId": "46c555b47930a6a4", "scanner": "scanner-primary", "fingerprint": "ffc587d6be4fca6b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a73e0329c01c1c6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-deandre.ts:12"}, "properties": {"repobilityId": "c74ab7ffe165503d", "scanner": "scanner-primary", "fingerprint": "a73e0329c01c1c6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f18aae872eedc1c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-track-changes-stripped.ts:37"}, "properties": {"repobilityId": "040a5fe92b4067a2", "scanner": "scanner-primary", "fingerprint": "3f18aae872eedc1c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae89f50dffff757f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/e2e-um-only.ts:34"}, "properties": {"repobilityId": "eca270b5a7c59704", "scanner": "scanner-primary", "fingerprint": "ae89f50dffff757f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba1244f198dfa6a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-users.ts:24"}, "properties": {"repobilityId": "06ba188ac31f3efc", "scanner": "scanner-primary", "fingerprint": "ba1244f198dfa6a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-307110642eae47c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-deandre-notify.ts:35"}, "properties": {"repobilityId": "4a81ace94bb7a468", "scanner": "scanner-primary", "fingerprint": "307110642eae47c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c613cef1e888406", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/panels/ContractDrafterPanel.tsx:664"}, "properties": {"repobilityId": "4dec5b4cc6b48ee2", "scanner": "scanner-primary", "fingerprint": "9c613cef1e888406", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-990aca14b35bed67", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/notify.ts:479"}, "properties": {"repobilityId": "5825752d1fca64ee", "scanner": "scanner-primary", "fingerprint": "990aca14b35bed67", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c17a02c62605556", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/um-parser.ts:349"}, "properties": {"repobilityId": "a2190c35f6548119", "scanner": "scanner-primary", "fingerprint": "9c17a02c62605556", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5278c7b805ee713d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/distrokid-parser.ts:114"}, "properties": {"repobilityId": "8bce5fd158d6d0c5", "scanner": "scanner-primary", "fingerprint": "5278c7b805ee713d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de740ea7edf69a10", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/parser.ts:37"}, "properties": {"repobilityId": "e8e1368e95d5f1a1", "scanner": "scanner-primary", "fingerprint": "de740ea7edf69a10", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05c82cf049455a99", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/ai/markdown.ts:13"}, "properties": {"repobilityId": "d4d7a1c71be7e53d", "scanner": "scanner-primary", "fingerprint": "05c82cf049455a99", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-12f2e7c2821c5660", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in app/api/songcash/submit/route.ts:207"}, "properties": {"repobilityId": "7a4416cfd5b79d12", "scanner": "scanner-primary", "fingerprint": "12f2e7c2821c5660", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/songcash/submit/route.ts"}, "region": {"startLine": 207}}}]}, {"ruleId": "scanner-ae322e3fb9f39b77", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/panels/ContractDrafterPanel.tsx:664"}, "properties": {"repobilityId": "fad9f270e8f18d78", "scanner": "scanner-primary", "fingerprint": "ae322e3fb9f39b77", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/panels/ContractDrafterPanel.tsx"}, "region": {"startLine": 664}}}]}, {"ruleId": "scanner-c9f329dac477b097", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/audit-digest.json:1619"}, "properties": {"repobilityId": "a660179124e48a8e", "scanner": "scanner-primary", "fingerprint": "c9f329dac477b097", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/audit-digest.json"}, "region": {"startLine": 1619}}}]}, {"ruleId": "scanner-c7c99fbe85443179", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in docs/audit-digest.json:14"}, "properties": {"repobilityId": "8b7ef0faae1223d4", "scanner": "scanner-primary", "fingerprint": "c7c99fbe85443179", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/audit-digest.json"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-ad8f22ad0f696bd1", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in docs/audit-2026-06-11/inventory.json:340"}, "properties": {"repobilityId": "41f8137ae7c09d9c", "scanner": "scanner-primary", "fingerprint": "ad8f22ad0f696bd1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/audit-2026-06-11/inventory.json"}, "region": {"startLine": 340}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2604332ae98773d3", "level": "note", "message": {"text": "Very large file: app/page.tsx (1272 lines)"}, "properties": {"repobilityId": "5e5eaf124a1a5246", "scanner": "scanner-primary", "fingerprint": "2604332ae98773d3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-601d66a611c5b5dd", "level": "note", "message": {"text": "Very large file: app/offers/page.tsx (1294 lines)"}, "properties": {"repobilityId": "85122c3a97ecd2f9", "scanner": "scanner-primary", "fingerprint": "601d66a611c5b5dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4f81ec3805c50bef", "level": "note", "message": {"text": "Very large file: app/deal/[token]/page.tsx (1265 lines)"}, "properties": {"repobilityId": "2334143ccec26bec", "scanner": "scanner-primary", "fingerprint": "4f81ec3805c50bef", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e6e1b2833c67de90", "level": "note", "message": {"text": "Very large file: components/panels/OfferCalculatorPanel.tsx (2145 lines)"}, "properties": {"repobilityId": "5f4d047b1c6c68bf", "scanner": "scanner-primary", "fingerprint": "e6e1b2833c67de90", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-88a7cc976d985268", "level": "note", "message": {"text": "Very large file: components/panels/ContractDrafterPanel.tsx (1693 lines)"}, "properties": {"repobilityId": "64e3187999552ed9", "scanner": "scanner-primary", "fingerprint": "88a7cc976d985268", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "00786243724eff0b", "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": "c244c6a1806d1ddf", "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": "9d91e39654e00d78", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "55155046f390133c", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "36bdd009f32f3133", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "948d50d28d9b4f2b", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-60c36fd6a667ea86", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/page.tsx:3"}, "properties": {"repobilityId": "7ff89b74ec1bc35c", "scanner": "scanner-primary", "fingerprint": "60c36fd6a667ea86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0d1c45f7d3a5c5f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/page.tsx:688"}, "properties": {"repobilityId": "ec2d60edd37c69f7", "scanner": "scanner-primary", "fingerprint": "b0d1c45f7d3a5c5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0fc7f5989d974e82", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/cron/intelligence/route.ts:4"}, "properties": {"repobilityId": "6b8b50f4dc941f2b", "scanner": "scanner-primary", "fingerprint": "0fc7f5989d974e82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c969a5bfdb05f421", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/cron/data-integrity/route.ts:4"}, "properties": {"repobilityId": "76373ff999ca96b2", "scanner": "scanner-primary", "fingerprint": "c969a5bfdb05f421", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e89ba11ca3fc1055", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/cron/weekly-digest/route.ts:4"}, "properties": {"repobilityId": "f2516d826e38081f", "scanner": "scanner-primary", "fingerprint": "e89ba11ca3fc1055", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2c76a6c88d7cdae", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/users/[id]/route.ts:98"}, "properties": {"repobilityId": "6ad523bee2b71a4c", "scanner": "scanner-primary", "fingerprint": "b2c76a6c88d7cdae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d9043ccf2c9eaa6", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/songcash/submit/route.ts:95"}, "properties": {"repobilityId": "752d9d9421f9266b", "scanner": "scanner-primary", "fingerprint": "7d9043ccf2c9eaa6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0681a016dd745045", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/deal-share/route.ts:230"}, "properties": {"repobilityId": "694dc6706a7679cd", "scanner": "scanner-primary", "fingerprint": "0681a016dd745045", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf522739509c59cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/deal-share/[token]/calculate/route.ts:44"}, "properties": {"repobilityId": "042e666b1a1bd365", "scanner": "scanner-primary", "fingerprint": "bf522739509c59cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-342f760dba3ccd0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/deal-share/[token]/respond/route.ts:130"}, "properties": {"repobilityId": "10eb28c9dd9ae2c4", "scanner": "scanner-primary", "fingerprint": "342f760dba3ccd0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-076fe792702122b1", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/upload/route.ts:18"}, "properties": {"repobilityId": "ce58022e63c8d83c", "scanner": "scanner-primary", "fingerprint": "076fe792702122b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd439880258e4f7f", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/upload/unitedmasters/route.ts:97"}, "properties": {"repobilityId": "fe2f5d143dc807a2", "scanner": "scanner-primary", "fingerprint": "cd439880258e4f7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08038b45a4b613fc", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/upload/distrokid/route.ts:81"}, "properties": {"repobilityId": "5b7e76a8b5770c5e", "scanner": "scanner-primary", "fingerprint": "08038b45a4b613fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c41539cac51fc048", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/artists/route.ts:8"}, "properties": {"repobilityId": "a7938c9502a20e3d", "scanner": "scanner-primary", "fingerprint": "c41539cac51fc048", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba7db43fcc1e3a5e", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/artists/[id]/route.ts:31"}, "properties": {"repobilityId": "d0b5d488bf891e6b", "scanner": "scanner-primary", "fingerprint": "ba7db43fcc1e3a5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d952ea72b572d33", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/artists/[id]/latest-share/route.ts:60"}, "properties": {"repobilityId": "3368cd1fa64f9501", "scanner": "scanner-primary", "fingerprint": "0d952ea72b572d33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19f68c8003bbb36f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/artists/[id]/contract/generate/route.ts:66"}, "properties": {"repobilityId": "e59d12ad1ce4abe5", "scanner": "scanner-primary", "fingerprint": "19f68c8003bbb36f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a90724d6a8d405f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/artists/[id]/contract/generations/[gid]/download/route.ts:48"}, "properties": {"repobilityId": "a4465d27fbdc4188", "scanner": "scanner-primary", "fingerprint": "6a90724d6a8d405f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cae1ebd2f560284c", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/artists/merge/route.ts:77"}, "properties": {"repobilityId": "26093fcb7efdbc40", "scanner": "scanner-primary", "fingerprint": "cae1ebd2f560284c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b03dad20d9a4f7d4", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/ai/offer-recommendation/route.ts:4"}, "properties": {"repobilityId": "15402f6d53e399f9", "scanner": "scanner-primary", "fingerprint": "b03dad20d9a4f7d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d3522e9f4e62598", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/ai/health/route.ts:1"}, "properties": {"repobilityId": "4e27b9445e203f7f", "scanner": "scanner-primary", "fingerprint": "5d3522e9f4e62598", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-980dcd59f1f19553", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/ai/chat/route.ts:4"}, "properties": {"repobilityId": "8ad8c25ae627ae03", "scanner": "scanner-primary", "fingerprint": "980dcd59f1f19553", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b7873d2e8b1a452", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/ai/explain/route.ts:4"}, "properties": {"repobilityId": "981e59fe5f66986e", "scanner": "scanner-primary", "fingerprint": "9b7873d2e8b1a452", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a3e8d804575f40c", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/ai/contract-check/route.ts:4"}, "properties": {"repobilityId": "6bb15d7d71095f09", "scanner": "scanner-primary", "fingerprint": "6a3e8d804575f40c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96befcaa92bf6045", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/ai/insights-memo/route.ts:4"}, "properties": {"repobilityId": "e77560fa01ba017a", "scanner": "scanner-primary", "fingerprint": "96befcaa92bf6045", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d6b786540b55bb2", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/ai/brief/route.ts:4"}, "properties": {"repobilityId": "68c2b49c7a39d00b", "scanner": "scanner-primary", "fingerprint": "5d6b786540b55bb2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc247a5d0876d955", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/ai/suggestions/route.ts:14"}, "properties": {"repobilityId": "cd5f869a45c2e40f", "scanner": "scanner-primary", "fingerprint": "cc247a5d0876d955", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fe16f3824f00244", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/ai/suggestions/[id]/route.ts:4"}, "properties": {"repobilityId": "e9565387a1339c15", "scanner": "scanner-primary", "fingerprint": "4fe16f3824f00244", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf19b9d761f7ab21", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/ai/counter-analysis/route.ts:4"}, "properties": {"repobilityId": "1cf5daeb019a2c54", "scanner": "scanner-primary", "fingerprint": "bf19b9d761f7ab21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf0ce76b5bb5c7a1", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/ai/strategist/route.ts:4"}, "properties": {"repobilityId": "08b44d66ff4c5d55", "scanner": "scanner-primary", "fingerprint": "cf0ce76b5bb5c7a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9c82541549f58c2", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/ai/diligence/route.ts:4"}, "properties": {"repobilityId": "e859e8d147a17e9f", "scanner": "scanner-primary", "fingerprint": "d9c82541549f58c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62db16f43f105657", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/ai/lead-scores/route.ts:4"}, "properties": {"repobilityId": "cbd46b4cbfb7b881", "scanner": "scanner-primary", "fingerprint": "62db16f43f105657", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b80eaf0f642c7b8", "level": "none", "message": {"text": "Commented-code block (10 lines) in app/account/page.tsx:15"}, "properties": {"repobilityId": "f104335a50302b3b", "scanner": "scanner-primary", "fingerprint": "2b80eaf0f642c7b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-564b26fd28e68938", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/artist/[id]/page.tsx:107"}, "properties": {"repobilityId": "d10f4ba1f91c56ce", "scanner": "scanner-primary", "fingerprint": "564b26fd28e68938", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c966ffa9d6b487e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/artist/[id]/offer/page.tsx:65"}, "properties": {"repobilityId": "dedcc710a725503c", "scanner": "scanner-primary", "fingerprint": "1c966ffa9d6b487e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5808897355bd60e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/users/page.tsx:126"}, "properties": {"repobilityId": "cac1dc4495ebd292", "scanner": "scanner-primary", "fingerprint": "5808897355bd60e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-18e3dda20fcea96e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/onboarding/page.tsx:43"}, "properties": {"repobilityId": "497db6d09ee33f97", "scanner": "scanner-primary", "fingerprint": "18e3dda20fcea96e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4729764b906de52d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/deal/[token]/layout.tsx:37"}, "properties": {"repobilityId": "adb615984d4c1a3f", "scanner": "scanner-primary", "fingerprint": "4729764b906de52d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc1679cb1ddab3c3", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/deal/[token]/page.tsx:85"}, "properties": {"repobilityId": "36112fc793b36317", "scanner": "scanner-primary", "fingerprint": "dc1679cb1ddab3c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-934e56aaacf2bf10", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/RosterSkeleton.tsx:8"}, "properties": {"repobilityId": "1b119c6b51d21605", "scanner": "scanner-primary", "fingerprint": "934e56aaacf2bf10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d7f0245209cdd17", "level": "none", "message": {"text": "Commented-code block (10 lines) in components/useArtistPrefetch.ts:3"}, "properties": {"repobilityId": "39dcac1687d8b35c", "scanner": "scanner-primary", "fingerprint": "8d7f0245209cdd17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-015e7b1bc2275f8b", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/CommandPalette.tsx:3"}, "properties": {"repobilityId": "d6ccc663f1e986ed", "scanner": "scanner-primary", "fingerprint": "015e7b1bc2275f8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-448b9af1c25f41d4", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/CommandBar.tsx:6"}, "properties": {"repobilityId": "d66cf46c1075464c", "scanner": "scanner-primary", "fingerprint": "448b9af1c25f41d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1bc409e3ada9858a", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/GlobalDropZone.tsx:52"}, "properties": {"repobilityId": "52672d3512085802", "scanner": "scanner-primary", "fingerprint": "1bc409e3ada9858a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0419a4d0996a6e4b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/GlobalDropZone.tsx:297"}, "properties": {"repobilityId": "e5f6a73d93a5a319", "scanner": "scanner-primary", "fingerprint": "0419a4d0996a6e4b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6e0f08d00f2b3856", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/icons.tsx:1"}, "properties": {"repobilityId": "c925a43f8acd489a", "scanner": "scanner-primary", "fingerprint": "6e0f08d00f2b3856", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8488e9995170d2be", "level": "none", "message": {"text": "Commented-code block (12 lines) in components/Dashboard.tsx:3"}, "properties": {"repobilityId": "3903445b7e1ef4d2", "scanner": "scanner-primary", "fingerprint": "8488e9995170d2be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66a17f4fab2fb49b", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/intelligence/useIntelligence.ts:5"}, "properties": {"repobilityId": "0b198bdace1f497c", "scanner": "scanner-primary", "fingerprint": "66a17f4fab2fb49b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d9643c96349122d", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/intelligence/CounterAnalysisCard.tsx:5"}, "properties": {"repobilityId": "867dc98f3cf91b96", "scanner": "scanner-primary", "fingerprint": "4d9643c96349122d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dae7d1c3828768d7", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/intelligence/ToolStep.tsx:5"}, "properties": {"repobilityId": "09869d1a99cd5df4", "scanner": "scanner-primary", "fingerprint": "dae7d1c3828768d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d135350831ef9e4", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/intelligence/RichText.tsx:5"}, "properties": {"repobilityId": "72371ef5f39b4ab0", "scanner": "scanner-primary", "fingerprint": "2d135350831ef9e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60fe7caffe1519f0", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/intelligence/MorningBriefCard.tsx:5"}, "properties": {"repobilityId": "e63fd22840969715", "scanner": "scanner-primary", "fingerprint": "60fe7caffe1519f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9f93f375606baf5", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/intelligence/IntelligenceDrawer.tsx:9"}, "properties": {"repobilityId": "c74e7efa9d101156", "scanner": "scanner-primary", "fingerprint": "e9f93f375606baf5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce649f9e0d6dbf0d", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/intelligence/MessageThread.tsx:5"}, "properties": {"repobilityId": "c40c47a1354faa1d", "scanner": "scanner-primary", "fingerprint": "ce649f9e0d6dbf0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fe8796d18cfff82", "level": "none", "message": {"text": "Commented-code block (10 lines) in components/intelligence/SuggestionCard.tsx:5"}, "properties": {"repobilityId": "ac94ab1abae2931c", "scanner": "scanner-primary", "fingerprint": "1fe8796d18cfff82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73d1d5908ef5ed1d", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/intelligence/SuggestionInbox.tsx:5"}, "properties": {"repobilityId": "dd304539c4d9edb7", "scanner": "scanner-primary", "fingerprint": "73d1d5908ef5ed1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-406f0d60d2639ee2", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/panels/OfferCalculatorPanel.tsx:130"}, "properties": {"repobilityId": "be27701532d67d02", "scanner": "scanner-primary", "fingerprint": "406f0d60d2639ee2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e88ee2520440348b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/panels/OfferCalculatorPanel.tsx:2093"}, "properties": {"repobilityId": "86bacf00e39fe598", "scanner": "scanner-primary", "fingerprint": "e88ee2520440348b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3ac1f0b220dbcf78", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/panels/use-reduced-motion.ts:3"}, "properties": {"repobilityId": "1a84b267aa01fb88", "scanner": "scanner-primary", "fingerprint": "3ac1f0b220dbcf78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-049d3cb8a6c946c5", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/panels/DealPanel.tsx:30"}, "properties": {"repobilityId": "197d155833518c7d", "scanner": "scanner-primary", "fingerprint": "049d3cb8a6c946c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a36dae08f4a153fd", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/panels/OverviewPanel.tsx:128"}, "properties": {"repobilityId": "46dbece96e5a03a0", "scanner": "scanner-primary", "fingerprint": "a36dae08f4a153fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eea2e7e39ff526a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/panels/DataIntegrityPanel.tsx:58"}, "properties": {"repobilityId": "6fd743aaf580f86c", "scanner": "scanner-primary", "fingerprint": "eea2e7e39ff526a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e645feeba6ae7ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/panels/RevenuePanel.tsx:123"}, "properties": {"repobilityId": "00429983dfde3f43", "scanner": "scanner-primary", "fingerprint": "2e645feeba6ae7ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a7464120c199edc", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/panels/ContractDrafterPanel.tsx:96"}, "properties": {"repobilityId": "1be21df061bc7b86", "scanner": "scanner-primary", "fingerprint": "8a7464120c199edc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa065f4121dfa4cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/panels/ContractDrafterPanel.tsx:123"}, "properties": {"repobilityId": "f6f6e3cad8a28c51", "scanner": "scanner-primary", "fingerprint": "aa065f4121dfa4cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6bc5ee6d7e489d9c", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/panels/shared.tsx:3"}, "properties": {"repobilityId": "f6a48a5210b960e4", "scanner": "scanner-primary", "fingerprint": "6bc5ee6d7e489d9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6ecae552b18e025", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/panels/offer-calc/constants.ts:50"}, "properties": {"repobilityId": "fe03ab0a96d89ccf", "scanner": "scanner-primary", "fingerprint": "b6ecae552b18e025", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91b8f8bc532ad104", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/panels/offer-calc/AcquisitionModel.tsx:3"}, "properties": {"repobilityId": "a57257b0d156f2ac", "scanner": "scanner-primary", "fingerprint": "91b8f8bc532ad104", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afd2b83f503cdda4", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/shell/ArtistHero.tsx:3"}, "properties": {"repobilityId": "0ba21a08c0ae9315", "scanner": "scanner-primary", "fingerprint": "afd2b83f503cdda4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fbfe7de93bdb406", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/shell/SectionRail.tsx:3"}, "properties": {"repobilityId": "07444740d7657717", "scanner": "scanner-primary", "fingerprint": "0fbfe7de93bdb406", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdfd1b381bd46be4", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/workspaces/DealWorkspace.tsx:3"}, "properties": {"repobilityId": "f4784da738291465", "scanner": "scanner-primary", "fingerprint": "cdfd1b381bd46be4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52715d036dadb1db", "level": "none", "message": {"text": "Commented-code block (9 lines) in components/workspaces/AnalyzeWorkspace.tsx:3"}, "properties": {"repobilityId": "ab71229cc67d3f07", "scanner": "scanner-primary", "fingerprint": "52715d036dadb1db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e13862f4ce6153d", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/workspaces/CloseWorkspace.tsx:3"}, "properties": {"repobilityId": "2aa0922314ea76bc", "scanner": "scanner-primary", "fingerprint": "3e13862f4ce6153d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-614b2296015ebd1a", "level": "none", "message": {"text": "Commented-code block (11 lines) in components/ui/Modal.tsx:6"}, "properties": {"repobilityId": "f1ede07b62586f16", "scanner": "scanner-primary", "fingerprint": "614b2296015ebd1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34250fb6032d864e", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/ui/Toast.tsx:6"}, "properties": {"repobilityId": "e5973f869a1f013f", "scanner": "scanner-primary", "fingerprint": "34250fb6032d864e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9113053d9d6f5de", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/notify.ts:482"}, "properties": {"repobilityId": "bec3c0279771bc40", "scanner": "scanner-primary", "fingerprint": "e9113053d9d6f5de", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-034eb105bca0c924", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/analytics.ts:708"}, "properties": {"repobilityId": "bc3e56e0c186a12a", "scanner": "scanner-primary", "fingerprint": "034eb105bca0c924", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b75626b48244391b", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/use-count-up.ts:3"}, "properties": {"repobilityId": "efd12475e989b891", "scanner": "scanner-primary", "fingerprint": "b75626b48244391b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ce4c6f3ebec3964", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/deal-share.ts:65"}, "properties": {"repobilityId": "bacf7405a17f5f44", "scanner": "scanner-primary", "fingerprint": "4ce4c6f3ebec3964", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ded746fadf74402", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/merge-artists.ts:172"}, "properties": {"repobilityId": "7b35bc8eb10b7671", "scanner": "scanner-primary", "fingerprint": "4ded746fadf74402", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b076a7bbb0ef8eab", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/artist-dedupe.ts:8"}, "properties": {"repobilityId": "8aab89fe322fb3eb", "scanner": "scanner-primary", "fingerprint": "b076a7bbb0ef8eab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83370dbee6b28886", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/compact-dataset.ts:1"}, "properties": {"repobilityId": "079cb6c1ee59e076", "scanner": "scanner-primary", "fingerprint": "83370dbee6b28886", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-799803517919afca", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/deal-engine.ts:1"}, "properties": {"repobilityId": "c6fc77b237072361", "scanner": "scanner-primary", "fingerprint": "799803517919afca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2bb572ac5a2a24c", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/distrokid-parser.ts:132"}, "properties": {"repobilityId": "e2ef2d136a0db5aa", "scanner": "scanner-primary", "fingerprint": "c2bb572ac5a2a24c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15037caa9ed6e915", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/cpm.ts:1"}, "properties": {"repobilityId": "cc18596979b1a267", "scanner": "scanner-primary", "fingerprint": "15037caa9ed6e915", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae438bae9aad2512", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/email-templates.ts:7"}, "properties": {"repobilityId": "e3f4c3b6dabdda1a", "scanner": "scanner-primary", "fingerprint": "ae438bae9aad2512", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bcd79e3951fc0494", "level": "none", "message": {"text": "Commented-code block (16 lines) in lib/parser.ts:125"}, "properties": {"repobilityId": "f3a8a715dcc6ab80", "scanner": "scanner-primary", "fingerprint": "bcd79e3951fc0494", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e6697a41ee2a9ea", "level": "none", "message": {"text": "Commented-code block (10 lines) in lib/upload-limits.ts:4"}, "properties": {"repobilityId": "91bdba8e0f56e90c", "scanner": "scanner-primary", "fingerprint": "1e6697a41ee2a9ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-819c969f566d4df4", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/revenue-merge.ts:3"}, "properties": {"repobilityId": "a037a31f75c2772c", "scanner": "scanner-primary", "fingerprint": "819c969f566d4df4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3554b4e87c535383", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/apply-response-inputs.ts:81"}, "properties": {"repobilityId": "3b0afaa0ba9fe824", "scanner": "scanner-primary", "fingerprint": "3554b4e87c535383", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-410a7c70b7d98125", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/songcash-schema.ts:3"}, "properties": {"repobilityId": "1de39e4d28c2f3be", "scanner": "scanner-primary", "fingerprint": "410a7c70b7d98125", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5436ba92f13bd049", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/contracts/render-newwrld.ts:234"}, "properties": {"repobilityId": "075332adcb62b9be", "scanner": "scanner-primary", "fingerprint": "5436ba92f13bd049", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48b63a2d7a78ae01", "level": "note", "message": {"text": "Legacy-named symbol `normOld` in lib/contracts/docx-utils.ts:479"}, "properties": {"repobilityId": "12509843d90a659c", "scanner": "scanner-primary", "fingerprint": "48b63a2d7a78ae01", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3daaf54ff4781410", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/contracts/docx-utils.ts:48"}, "properties": {"repobilityId": "c150788d06970b5d", "scanner": "scanner-primary", "fingerprint": "3daaf54ff4781410", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a101323d6c52ccc8", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/contracts/from-deal.ts:80"}, "properties": {"repobilityId": "7d0199ebc7dae400", "scanner": "scanner-primary", "fingerprint": "a101323d6c52ccc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b26cbb74f0cef786", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/contracts/validate.ts:67"}, "properties": {"repobilityId": "72ea9239a3a2c300", "scanner": "scanner-primary", "fingerprint": "b26cbb74f0cef786", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf2382a4c9cc0f6f", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/contracts/render-laene.ts:233"}, "properties": {"repobilityId": "382bb6bf3274fa9b", "scanner": "scanner-primary", "fingerprint": "cf2382a4c9cc0f6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-548609156b1ae3f8", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/ai/tools.ts:4"}, "properties": {"repobilityId": "56347e2858e76411", "scanner": "scanner-primary", "fingerprint": "548609156b1ae3f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a42252bba53dc989", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/ai/gateway.ts:4"}, "properties": {"repobilityId": "9672cb7c3bd20a53", "scanner": "scanner-primary", "fingerprint": "a42252bba53dc989", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb1726863d7beb66", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/ai/context.ts:4"}, "properties": {"repobilityId": "65d2d78217746b9c", "scanner": "scanner-primary", "fingerprint": "eb1726863d7beb66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb8d72f41895f2d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/ai/shaping.ts:4"}, "properties": {"repobilityId": "21c21ed2bab37245", "scanner": "scanner-primary", "fingerprint": "cb8d72f41895f2d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0633858bce45c356", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/ai/schemas.ts:4"}, "properties": {"repobilityId": "6d57bca74b9a4694", "scanner": "scanner-primary", "fingerprint": "0633858bce45c356", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efeabd72401324a5", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/ai/markdown.ts:4"}, "properties": {"repobilityId": "c1e5fbc6bd57894c", "scanner": "scanner-primary", "fingerprint": "efeabd72401324a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c2f520cd2f5a1a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/ai/watchers.ts:4"}, "properties": {"repobilityId": "f6d2d23b34f7ffe5", "scanner": "scanner-primary", "fingerprint": "0c2f520cd2f5a1a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec888cab64b871f1", "level": "none", "message": {"text": "Commented-code block (10 lines) in lib/ai/agents/model-fallback.ts:4"}, "properties": {"repobilityId": "8b2b3b28f37972a6", "scanner": "scanner-primary", "fingerprint": "ec888cab64b871f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e650875ed814a8e8", "level": "none", "message": {"text": "Commented-code block (11 lines) in lib/ai/agents/deal-strategist.ts:4"}, "properties": {"repobilityId": "e02aeddff47eb253", "scanner": "scanner-primary", "fingerprint": "e650875ed814a8e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-972c9ee8e2abd1ef", "level": "none", "message": {"text": "Commented-code block (14 lines) in lib/ai/agents/counter-analyst.ts:4"}, "properties": {"repobilityId": "0ba0c3cee253fc8e", "scanner": "scanner-primary", "fingerprint": "972c9ee8e2abd1ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23e3c140476d4292", "level": "none", "message": {"text": "Commented-code block (12 lines) in lib/ai/agents/contract-check.ts:4"}, "properties": {"repobilityId": "f2064ca13c84681c", "scanner": "scanner-primary", "fingerprint": "23e3c140476d4292", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a00ad7533845122", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/ai/agents/explain-panel.ts:4"}, "properties": {"repobilityId": "dfb082dcd7596e9a", "scanner": "scanner-primary", "fingerprint": "4a00ad7533845122", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d29ad019ce7c5de5", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/ai/agents/um-crosscheck.ts:4"}, "properties": {"repobilityId": "e1460e65a0b127b0", "scanner": "scanner-primary", "fingerprint": "d29ad019ce7c5de5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74af4351e1332571", "level": "none", "message": {"text": "Commented-code block (12 lines) in lib/ai/agents/anomaly-watchdog.ts:4"}, "properties": {"repobilityId": "6e52af2c0e750478", "scanner": "scanner-primary", "fingerprint": "74af4351e1332571", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f06b5f79911efa6", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/ai/agents/automation-settings.ts:4"}, "properties": {"repobilityId": "317767c47d548c97", "scanner": "scanner-primary", "fingerprint": "8f06b5f79911efa6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5cedb8412a8b39b1", "level": "none", "message": {"text": "Commented-code block (15 lines) in lib/ai/agents/comp-recommendation.ts:5"}, "properties": {"repobilityId": "d3c12eeebefc57dd", "scanner": "scanner-primary", "fingerprint": "5cedb8412a8b39b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3043cae4a848a7d8", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/ai/agents/insights-memo.ts:5"}, "properties": {"repobilityId": "8680f51fae6518d2", "scanner": "scanner-primary", "fingerprint": "3043cae4a848a7d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5f64484ec4d360a", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/ai/agents/brief.ts:4"}, "properties": {"repobilityId": "de9848f3a83dfa40", "scanner": "scanner-primary", "fingerprint": "a5f64484ec4d360a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1896cd72cc36e22", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/ai/agents/diligence.ts:4"}, "properties": {"repobilityId": "d1e941adfc697119", "scanner": "scanner-primary", "fingerprint": "a1896cd72cc36e22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a97c302559b2007", "level": "none", "message": {"text": "Commented-code block (10 lines) in lib/ai/agents/term-config.ts:4"}, "properties": {"repobilityId": "89ddf254f405e43b", "scanner": "scanner-primary", "fingerprint": "1a97c302559b2007", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c5be792018a84ae", "level": "none", "message": {"text": "Commented-code block (9 lines) in lib/ai/agents/weekly-digest.ts:4"}, "properties": {"repobilityId": "5e0247ce676602b6", "scanner": "scanner-primary", "fingerprint": "8c5be792018a84ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d067e4a881e39eb6", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/ai/agents/lead-scoring.ts:4"}, "properties": {"repobilityId": "1ad1eec1fc3166b8", "scanner": "scanner-primary", "fingerprint": "d067e4a881e39eb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4ebfdce349d09b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/__tests__/parser-catalog.test.ts:5"}, "properties": {"repobilityId": "4140598243def48c", "scanner": "scanner-primary", "fingerprint": "c4ebfdce349d09b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a70c0aff8c43354e", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/__tests__/admin-user-delete.test.ts:3"}, "properties": {"repobilityId": "d935038d235528c2", "scanner": "scanner-primary", "fingerprint": "a70c0aff8c43354e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9dcd8a5a35451da4", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/__tests__/ai-agents.test.ts:4"}, "properties": {"repobilityId": "4885b34c88286445", "scanner": "scanner-primary", "fingerprint": "9dcd8a5a35451da4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-864b08ce600410c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/__tests__/parser-trends.test.ts:8"}, "properties": {"repobilityId": "84bc97dc6faba96c", "scanner": "scanner-primary", "fingerprint": "864b08ce600410c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21d1e487184fab73", "level": "note", "message": {"text": "Legacy-named symbol `fromLegacy` in lib/__tests__/deal-engine.test.ts:229"}, "properties": {"repobilityId": "c64905e7031d17a3", "scanner": "scanner-primary", "fingerprint": "21d1e487184fab73", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8e0cad6c2a4d6d28", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/__tests__/deal-engine.test.ts:67"}, "properties": {"repobilityId": "968001ec895088ab", "scanner": "scanner-primary", "fingerprint": "8e0cad6c2a4d6d28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6c176a0dbecea36", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/__tests__/analytics-windows.test.ts:109"}, "properties": {"repobilityId": "cdb8587c2470b052", "scanner": "scanner-primary", "fingerprint": "e6c176a0dbecea36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aacc1849476b3b98", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/__tests__/parser-daterange.test.ts:5"}, "properties": {"repobilityId": "af93420ddbaa48c7", "scanner": "scanner-primary", "fingerprint": "aacc1849476b3b98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88e010b279214e52", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/__tests__/merge-artists.test.ts:7"}, "properties": {"repobilityId": "729efae28afb861d", "scanner": "scanner-primary", "fingerprint": "88e010b279214e52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e5c74d085882b8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/__tests__/cpm.test.ts:13"}, "properties": {"repobilityId": "5166de0f644233e7", "scanner": "scanner-primary", "fingerprint": "4e5c74d085882b8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59eca5dbfb6ad7d7", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/__tests__/ai-opportunities.test.ts:1"}, "properties": {"repobilityId": "9b1aeb42f0adb394", "scanner": "scanner-primary", "fingerprint": "59eca5dbfb6ad7d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8e9bfc8f066bbf3", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/__tests__/um-parser.test.ts:62"}, "properties": {"repobilityId": "ee8e17a6e6dbefe7", "scanner": "scanner-primary", "fingerprint": "b8e9bfc8f066bbf3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-242095532073f6e8", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists (app/page.tsx:346)"}, "properties": {"repobilityId": "fa2d56d9f0cb5de0", "scanner": "scanner-primary", "fingerprint": "242095532073f6e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3694e837fb7794b2", "level": "error", "message": {"text": "Dangling fetch: POST /api/upload/distrokid (app/page.tsx:511)"}, "properties": {"repobilityId": "ba46784e328207a3", "scanner": "scanner-primary", "fingerprint": "3694e837fb7794b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f649ce76d18ef6f4", "level": "error", "message": {"text": "Dangling fetch: POST /api/upload/unitedmasters (app/page.tsx:551)"}, "properties": {"repobilityId": "d82f1d7b73592274", "scanner": "scanner-primary", "fingerprint": "f649ce76d18ef6f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8a939fa70b0f06a", "level": "error", "message": {"text": "Dangling fetch: POST /api/upload (app/page.tsx:598)"}, "properties": {"repobilityId": "52db1ae51d43ee38", "scanner": "scanner-primary", "fingerprint": "c8a939fa70b0f06a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-862a65988c08312e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/artists/${id}/stage (app/page.tsx:688)"}, "properties": {"repobilityId": "21f6143c190b6f03", "scanner": "scanner-primary", "fingerprint": "862a65988c08312e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39bd68621f243dbd", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/artists/${target.id}/delete (app/page.tsx:988)"}, "properties": {"repobilityId": "9f1213ec8df02d8f", "scanner": "scanner-primary", "fingerprint": "39bd68621f243dbd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5cb39d4595277ec0", "level": "error", "message": {"text": "Dangling fetch: GET /api/account/notifications (app/account/page.tsx:119)"}, "properties": {"repobilityId": "1a70dd5f69720f01", "scanner": "scanner-primary", "fingerprint": "5cb39d4595277ec0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-56dfa9f09d75f676", "level": "error", "message": {"text": "Dangling fetch: GET /api/account/profile (app/account/page.tsx:132)"}, "properties": {"repobilityId": "73d413c2860c7a4f", "scanner": "scanner-primary", "fingerprint": "56dfa9f09d75f676", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28ba2ba7b3f4f68e", "level": "error", "message": {"text": "Dangling fetch: GET /api/ai/automation (app/account/page.tsx:142)"}, "properties": {"repobilityId": "2759c3c93d55497b", "scanner": "scanner-primary", "fingerprint": "28ba2ba7b3f4f68e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e33b5e7656a428d5", "level": "error", "message": {"text": "Dangling fetch: PUT /api/ai/automation (app/account/page.tsx:168)"}, "properties": {"repobilityId": "1e063bfb5e2870c4", "scanner": "scanner-primary", "fingerprint": "e33b5e7656a428d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b68ea0509a4b9cc", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/account/notifications (app/account/page.tsx:199)"}, "properties": {"repobilityId": "d8679b91e5bdea35", "scanner": "scanner-primary", "fingerprint": "0b68ea0509a4b9cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca80d427a457a2bb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/account/profile (app/account/page.tsx:220)"}, "properties": {"repobilityId": "aa4584fe94475743", "scanner": "scanner-primary", "fingerprint": "ca80d427a457a2bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a45b289f12a7224a", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${params.id}?light=1 (app/artist/[id]/page.tsx:115)"}, "properties": {"repobilityId": "f8a1f5ce3f18b55d", "scanner": "scanner-primary", "fingerprint": "a45b289f12a7224a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90ca679717ccc83f", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${params.id} (app/artist/[id]/page.tsx:119)"}, "properties": {"repobilityId": "ee30b6f55a0c8171", "scanner": "scanner-primary", "fingerprint": "90ca679717ccc83f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0777e66e2baab648", "level": "error", "message": {"text": "Dangling fetch: GET /api/songcash/leads (app/artist/[id]/offer/page.tsx:59)"}, "properties": {"repobilityId": "1484f39334cf5e99", "scanner": "scanner-primary", "fingerprint": "0777e66e2baab648", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60678a74a21c4931", "level": "error", "message": {"text": "Dangling fetch: GET /api/songcash/leads/${artistLead.id} (app/artist/[id]/offer/page.tsx:65)"}, "properties": {"repobilityId": "ec0f98c3ea46ca93", "scanner": "scanner-primary", "fingerprint": "60678a74a21c4931", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bf4cc29a4506a64", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/songcash/leads/${lead.id} (app/artist/[id]/offer/page.tsx:135)"}, "properties": {"repobilityId": "8baa12c1216495f5", "scanner": "scanner-primary", "fingerprint": "9bf4cc29a4506a64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b866bedd1b9ce6e5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/songcash/leads/${lead.id} (app/artist/[id]/offer/page.tsx:157)"}, "properties": {"repobilityId": "e39d0f860bd205dc", "scanner": "scanner-primary", "fingerprint": "b866bedd1b9ce6e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c6d9fc5d987f3f5", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/users (app/admin/users/page.tsx:86)"}, "properties": {"repobilityId": "dcd5bb43b30505da", "scanner": "scanner-primary", "fingerprint": "6c6d9fc5d987f3f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b64484d6e3836a68", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/invites (app/admin/users/page.tsx:87)"}, "properties": {"repobilityId": "3f72c601c759ee18", "scanner": "scanner-primary", "fingerprint": "b64484d6e3836a68", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa1f522dfdb7119a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/invites (app/admin/users/page.tsx:105)"}, "properties": {"repobilityId": "a6fd56388f67b3fb", "scanner": "scanner-primary", "fingerprint": "fa1f522dfdb7119a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b13ea4e35aea41b8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/invites/${id} (app/admin/users/page.tsx:126)"}, "properties": {"repobilityId": "9046097239eb244f", "scanner": "scanner-primary", "fingerprint": "b13ea4e35aea41b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44dfb14fa71f9a62", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/invites/${id} (app/admin/users/page.tsx:131)"}, "properties": {"repobilityId": "b8cceadbe7defd73", "scanner": "scanner-primary", "fingerprint": "44dfb14fa71f9a62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8893ca02956d4a90", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/users/${id} (app/admin/users/page.tsx:151)"}, "properties": {"repobilityId": "98c25fdd81ae315b", "scanner": "scanner-primary", "fingerprint": "8893ca02956d4a90", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6fdffd63f52e9283", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/users/${u.id} (app/admin/users/page.tsx:171)"}, "properties": {"repobilityId": "050f70287538431b", "scanner": "scanner-primary", "fingerprint": "6fdffd63f52e9283", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3b31c82071bb1cb", "level": "error", "message": {"text": "Dangling fetch: GET /api/deal-share (app/offers/page.tsx:355)"}, "properties": {"repobilityId": "df79dc9971e30262", "scanner": "scanner-primary", "fingerprint": "c3b31c82071bb1cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-033efef79f47c085", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/deal-share/${token}/status (app/offers/page.tsx:391)"}, "properties": {"repobilityId": "c35fdccf74dc41c7", "scanner": "scanner-primary", "fingerprint": "033efef79f47c085", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78cc520cb113e7c8", "level": "error", "message": {"text": "Dangling fetch: POST /api/deal-share/${token}/revoke (app/offers/page.tsx:424)"}, "properties": {"repobilityId": "c31414f739462990", "scanner": "scanner-primary", "fingerprint": "78cc520cb113e7c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f406334a9b5c9512", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/deal-share/${token}/revoke (app/offers/page.tsx:444)"}, "properties": {"repobilityId": "c8c34c177b84e9f4", "scanner": "scanner-primary", "fingerprint": "f406334a9b5c9512", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80e66bb5a2c702d5", "level": "error", "message": {"text": "Dangling fetch: POST /api/deal-share/${token}/archive (app/offers/page.tsx:460)"}, "properties": {"repobilityId": "e8263e4135805ecf", "scanner": "scanner-primary", "fingerprint": "80e66bb5a2c702d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60b8cb4e5a720976", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/deal-share/${token}/archive (app/offers/page.tsx:476)"}, "properties": {"repobilityId": "fa60a7dc518c1a93", "scanner": "scanner-primary", "fingerprint": "60b8cb4e5a720976", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c32a9fe319ea7b9e", "level": "error", "message": {"text": "Dangling fetch: POST /api/ai/counter-analysis (app/offers/page.tsx:588)"}, "properties": {"repobilityId": "e38b1b3ba604aa62", "scanner": "scanner-primary", "fingerprint": "c32a9fe319ea7b9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-180d682de7d88b2d", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${id} (app/compare/page.tsx:56)"}, "properties": {"repobilityId": "84303d999c1c73ca", "scanner": "scanner-primary", "fingerprint": "180d682de7d88b2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f86b3df12396561b", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/invite-lookup?token=${encodeURIComponent(inviteToken)} (app/signup/page.tsx:53)"}, "properties": {"repobilityId": "9a897c498c57676f", "scanner": "scanner-primary", "fingerprint": "f86b3df12396561b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0322a84b71dbcc34", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/signup (app/signup/page.tsx:80)"}, "properties": {"repobilityId": "2417bc6a57bcc4ec", "scanner": "scanner-primary", "fingerprint": "0322a84b71dbcc34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47bd2d641b24022e", "level": "error", "message": {"text": "Dangling fetch: GET /api/account/profile (app/onboarding/page.tsx:43)"}, "properties": {"repobilityId": "c0875f6e30c18578", "scanner": "scanner-primary", "fingerprint": "47bd2d641b24022e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18d2822cb8efd4f6", "level": "error", "message": {"text": "Dangling fetch: GET /api/account/notifications (app/onboarding/page.tsx:44)"}, "properties": {"repobilityId": "a52485a955042e39", "scanner": "scanner-primary", "fingerprint": "18d2822cb8efd4f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba74d8b0ec043f12", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/verify-email/send (app/onboarding/page.tsx:91)"}, "properties": {"repobilityId": "b9139224c1670bfb", "scanner": "scanner-primary", "fingerprint": "ba74d8b0ec043f12", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2fc043208fd9331a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/account/profile (app/onboarding/page.tsx:109)"}, "properties": {"repobilityId": "4e6ed10596f23c00", "scanner": "scanner-primary", "fingerprint": "2fc043208fd9331a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1dd0764de051080e", "level": "error", "message": {"text": "Dangling fetch: GET /api/account/profile (app/onboarding/page.tsx:138)"}, "properties": {"repobilityId": "95e4d0884cabcbca", "scanner": "scanner-primary", "fingerprint": "1dd0764de051080e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0af9744f29c0aaa", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/account/notifications (app/onboarding/page.tsx:163)"}, "properties": {"repobilityId": "902fe63b191e64eb", "scanner": "scanner-primary", "fingerprint": "e0af9744f29c0aaa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32128b0ce38b2abd", "level": "error", "message": {"text": "Dangling fetch: POST /api/account/onboarded (app/onboarding/page.tsx:174)"}, "properties": {"repobilityId": "d12b7b5a0252e4c5", "scanner": "scanner-primary", "fingerprint": "32128b0ce38b2abd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e3152731524fcfb", "level": "error", "message": {"text": "Dangling fetch: GET /api/deal-share/${params.token} (app/deal/[token]/page.tsx:173)"}, "properties": {"repobilityId": "cfd0ac6e7bf3263a", "scanner": "scanner-primary", "fingerprint": "6e3152731524fcfb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7733b042582dc70f", "level": "error", "message": {"text": "Dangling fetch: POST /api/deal-share/${params.token}/view (app/deal/[token]/page.tsx:188)"}, "properties": {"repobilityId": "3e61faf89611f960", "scanner": "scanner-primary", "fingerprint": "7733b042582dc70f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-911f92776de66255", "level": "error", "message": {"text": "Dangling fetch: POST /api/deal-share/${params.token}/calculate (app/deal/[token]/page.tsx:222)"}, "properties": {"repobilityId": "14d64600851ba512", "scanner": "scanner-primary", "fingerprint": "911f92776de66255", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa2211e638f68396", "level": "error", "message": {"text": "Dangling fetch: POST /api/deal-share/${params.token}/maximize (app/deal/[token]/page.tsx:279)"}, "properties": {"repobilityId": "d5c2177fdf8b89c6", "scanner": "scanner-primary", "fingerprint": "fa2211e638f68396", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9d0d856f925e717", "level": "error", "message": {"text": "Dangling fetch: POST /api/deal-share/${params.token}/respond (app/deal/[token]/page.tsx:476)"}, "properties": {"repobilityId": "0790258dd6e16c09", "scanner": "scanner-primary", "fingerprint": "f9d0d856f925e717", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d70406cd403dbbc6", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/reset (app/reset/[token]/page.tsx:57)"}, "properties": {"repobilityId": "966385077154fd94", "scanner": "scanner-primary", "fingerprint": "d70406cd403dbbc6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7bc99726b0a2b445", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/forgot (app/forgot-password/page.tsx:17)"}, "properties": {"repobilityId": "4a59c990918cd70b", "scanner": "scanner-primary", "fingerprint": "7bc99726b0a2b445", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-041195323f68914a", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${encodeURIComponent(id)}?light=1 (components/useArtistPrefetch.ts:81)"}, "properties": {"repobilityId": "78ba239b6ceb3a42", "scanner": "scanner-primary", "fingerprint": "041195323f68914a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d25f31f035e43268", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists (components/CommandPalette.tsx:130)"}, "properties": {"repobilityId": "0a59a1e0a0c11a80", "scanner": "scanner-primary", "fingerprint": "d25f31f035e43268", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c98836afec07451", "level": "error", "message": {"text": "Dangling fetch: POST /api/upload/distrokid (components/GlobalDropZone.tsx:234)"}, "properties": {"repobilityId": "d3c72d948e95554a", "scanner": "scanner-primary", "fingerprint": "6c98836afec07451", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8372e2b216eec8f", "level": "error", "message": {"text": "Dangling fetch: POST /api/upload/unitedmasters (components/GlobalDropZone.tsx:297)"}, "properties": {"repobilityId": "c5e4909d3183e93f", "scanner": "scanner-primary", "fingerprint": "f8372e2b216eec8f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eed2e1b7dc00a2bd", "level": "error", "message": {"text": "Dangling fetch: POST /api/upload (components/GlobalDropZone.tsx:347)"}, "properties": {"repobilityId": "814ede8a7103ce89", "scanner": "scanner-primary", "fingerprint": "eed2e1b7dc00a2bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6026c713992c306f", "level": "error", "message": {"text": "Dangling fetch: POST /api/report-template (components/ReportContext.tsx:41)"}, "properties": {"repobilityId": "7366645eee3baa4c", "scanner": "scanner-primary", "fingerprint": "6026c713992c306f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8de9d55464475e82", "level": "error", "message": {"text": "Dangling fetch: GET /api/ai/brief (components/intelligence/useIntelligence.ts:133)"}, "properties": {"repobilityId": "a402ca33d39e6c14", "scanner": "scanner-primary", "fingerprint": "8de9d55464475e82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20349794d54ebe07", "level": "error", "message": {"text": "Dangling fetch: GET /api/ai/suggestions (components/intelligence/useIntelligence.ts:174)"}, "properties": {"repobilityId": "e411eb6a8656cb58", "scanner": "scanner-primary", "fingerprint": "20349794d54ebe07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f70019d68aa09e1", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/ai/suggestions/${id} (components/intelligence/useIntelligence.ts:240)"}, "properties": {"repobilityId": "be8355bdab782fab", "scanner": "scanner-primary", "fingerprint": "3f70019d68aa09e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f62b24d6a0dfd70f", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/offer-defaults (components/panels/OfferCalculatorPanel.tsx:270)"}, "properties": {"repobilityId": "b5185a17bf0688af", "scanner": "scanner-primary", "fingerprint": "f62b24d6a0dfd70f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ddde0f8326c348e1", "level": "error", "message": {"text": "Dangling fetch: GET /api/deal-templates (components/panels/OfferCalculatorPanel.tsx:289)"}, "properties": {"repobilityId": "915dc6712ee95d4e", "scanner": "scanner-primary", "fingerprint": "ddde0f8326c348e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e30deeeb280d3d6f", "level": "error", "message": {"text": "Dangling fetch: POST /api/ai/strategist (components/panels/OfferCalculatorPanel.tsx:520)"}, "properties": {"repobilityId": "4987f84dcbf2ff5a", "scanner": "scanner-primary", "fingerprint": "e30deeeb280d3d6f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2a89b387c5c293b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/me/offer-defaults (components/panels/OfferCalculatorPanel.tsx:566)"}, "properties": {"repobilityId": "434486b4967bcf59", "scanner": "scanner-primary", "fingerprint": "c2a89b387c5c293b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bba2af7cb2f5ca1f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/me/offer-defaults (components/panels/OfferCalculatorPanel.tsx:583)"}, "properties": {"repobilityId": "df75bc8f3ba648b3", "scanner": "scanner-primary", "fingerprint": "bba2af7cb2f5ca1f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2c4f268d0bc7f2c", "level": "error", "message": {"text": "Dangling fetch: POST /api/deal-share (components/panels/OfferCalculatorPanel.tsx:2093)"}, "properties": {"repobilityId": "f604e9490a9ff9c2", "scanner": "scanner-primary", "fingerprint": "b2c4f268d0bc7f2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3264b2fce7533032", "level": "error", "message": {"text": "Dangling fetch: POST /api/ai/diligence (components/panels/DealPanel.tsx:159)"}, "properties": {"repobilityId": "74e9dc1874141d22", "scanner": "scanner-primary", "fingerprint": "3264b2fce7533032", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a3c7e0e4cd1fafc1", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${artistId}/contract/generations (components/panels/ContractDrafterPanel.tsx:84)"}, "properties": {"repobilityId": "1d2e49efe6c0fe0c", "scanner": "scanner-primary", "fingerprint": "a3c7e0e4cd1fafc1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70dc3698571fcdf7", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${artistId}/contract/generations (components/panels/ContractDrafterPanel.tsx:123)"}, "properties": {"repobilityId": "4555877c47df7c3b", "scanner": "scanner-primary", "fingerprint": "70dc3698571fcdf7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4345b77c2cdf2012", "level": "error", "message": {"text": "Dangling fetch: POST /api/ai/contract-check (components/panels/ContractDrafterPanel.tsx:129)"}, "properties": {"repobilityId": "17bd82d82bb9f85b", "scanner": "scanner-primary", "fingerprint": "4345b77c2cdf2012", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b900a1c0f8c14c65", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${artistId}/contract-draft?template=${template} (components/panels/ContractDrafterPanel.tsx:155)"}, "properties": {"repobilityId": "ce178c08a848b47e", "scanner": "scanner-primary", "fingerprint": "b900a1c0f8c14c65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a3d08b23ac66801a", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${artistId}/latest-share (components/panels/ContractDrafterPanel.tsx:156)"}, "properties": {"repobilityId": "335a996c088a1003", "scanner": "scanner-primary", "fingerprint": "a3d08b23ac66801a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe04aa84e4324472", "level": "error", "message": {"text": "Dangling fetch: PUT /api/artists/${artistId}/contract-draft (components/panels/ContractDrafterPanel.tsx:208)"}, "properties": {"repobilityId": "30aec66fce6c685a", "scanner": "scanner-primary", "fingerprint": "fe04aa84e4324472", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e37c4fe30dab926", "level": "error", "message": {"text": "Dangling fetch: POST /api/artists/${artistId}/contract/generate (components/panels/ContractDrafterPanel.tsx:243)"}, "properties": {"repobilityId": "1c770aa8068020a2", "scanner": "scanner-primary", "fingerprint": "8e37c4fe30dab926", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-748796bdb37de55e", "level": "error", "message": {"text": "Dangling fetch: POST /api/artists/${artistId}/contract/preview (components/panels/ContractDrafterPanel.tsx:289)"}, "properties": {"repobilityId": "8ce606e06609cd8e", "scanner": "scanner-primary", "fingerprint": "748796bdb37de55e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-248b2db8c380d506", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${artistId}/latest-share (components/panels/ContractDrafterPanel.tsx:333)"}, "properties": {"repobilityId": "f1f869e4f699ebb2", "scanner": "scanner-primary", "fingerprint": "248b2db8c380d506", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe522558a34546af", "level": "error", "message": {"text": "Dangling fetch: POST /api/artists/${artistId}/revenue (components/panels/CpmPanel.tsx:120)"}, "properties": {"repobilityId": "36dbd8d2c3575a51", "scanner": "scanner-primary", "fingerprint": "fe522558a34546af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5fe786c700c71100", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/artists/${artistId}/revenue (components/panels/CpmPanel.tsx:147)"}, "properties": {"repobilityId": "d858a99d97ba1156", "scanner": "scanner-primary", "fingerprint": "5fe786c700c71100", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c997cdeb0824bae7", "level": "error", "message": {"text": "Dangling fetch: POST /api/artists/${artistId}/revenue (components/panels/CpmPanel.tsx:302)"}, "properties": {"repobilityId": "18f67f360874d7b3", "scanner": "scanner-primary", "fingerprint": "c997cdeb0824bae7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc8f09b00d59ee28", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${artistId}/notes (components/crm/NotesSection.tsx:25)"}, "properties": {"repobilityId": "28fdff90dd6d42ed", "scanner": "scanner-primary", "fingerprint": "cc8f09b00d59ee28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-405eb8e678a89581", "level": "error", "message": {"text": "Dangling fetch: POST /api/artists/${artistId}/notes (components/crm/NotesSection.tsx:44)"}, "properties": {"repobilityId": "a23f7d63e44e2766", "scanner": "scanner-primary", "fingerprint": "405eb8e678a89581", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5dac4b0da1c5d25", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/artists/${artistId}/notes/${noteId} (components/crm/NotesSection.tsx:69)"}, "properties": {"repobilityId": "b2c47dfc0a69798f", "scanner": "scanner-primary", "fingerprint": "c5dac4b0da1c5d25", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ce4e02c9c38696a7", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${artistId}/tasks (components/crm/TasksSection.tsx:33)"}, "properties": {"repobilityId": "58fabbe478cc25fd", "scanner": "scanner-primary", "fingerprint": "ce4e02c9c38696a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0aeb88ee64c1571c", "level": "error", "message": {"text": "Dangling fetch: POST /api/artists/${artistId}/tasks (components/crm/TasksSection.tsx:65)"}, "properties": {"repobilityId": "fedaaf6826ce8fde", "scanner": "scanner-primary", "fingerprint": "0aeb88ee64c1571c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1986efcb7fa32f3a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/artists/${artistId}/tasks/${task.id} (components/crm/TasksSection.tsx:91)"}, "properties": {"repobilityId": "c5cb4178ebd33a63", "scanner": "scanner-primary", "fingerprint": "1986efcb7fa32f3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-247148b51fce6d87", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/artists/${artistId}/tasks/${taskId} (components/crm/TasksSection.tsx:111)"}, "properties": {"repobilityId": "baf82deb3d5d5e8f", "scanner": "scanner-primary", "fingerprint": "247148b51fce6d87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f07ff3ed906d7793", "level": "error", "message": {"text": "Dangling fetch: GET /api/artists/${artistId}/activity (components/crm/ActivitySection.tsx:42)"}, "properties": {"repobilityId": "f75d9e9b40701354", "scanner": "scanner-primary", "fingerprint": "f07ff3ed906d7793", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e6644e294e022b3", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (lib/notify.ts:482)"}, "properties": {"repobilityId": "d13deb455c0320b5", "scanner": "scanner-primary", "fingerprint": "6e6644e294e022b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca28f9a5eb47bbad", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (lib/notify.ts:556)"}, "properties": {"repobilityId": "cb87922dc9fa3639", "scanner": "scanner-primary", "fingerprint": "ca28f9a5eb47bbad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-98fcbb76f19b2201", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (lib/ai/tools.ts:109)"}, "properties": {"repobilityId": "1d0b395dc4985f20", "scanner": "scanner-primary", "fingerprint": "98fcbb76f19b2201", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-817c4d47ee4d1fce", "level": "error", "message": {"text": "Dangling fetch: GET https://ai-gateway.vercel.sh/v1/models (lib/ai/gateway.ts:44)"}, "properties": {"repobilityId": "bfdf8a1a6d88e5af", "scanner": "scanner-primary", "fingerprint": "817c4d47ee4d1fce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2e036ca1d63f261", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (lib/ai/agents/weekly-digest.ts:264)"}, "properties": {"repobilityId": "ed2b5de820472c44", "scanner": "scanner-primary", "fingerprint": "b2e036ca1d63f261", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-684f0e83ba7e1558", "level": "note", "message": {"text": "Unused endpoint: GET "}, "properties": {"repobilityId": "d6402e5a4c929cdc", "scanner": "scanner-primary", "fingerprint": "684f0e83ba7e1558", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}