{"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-775d359b5bcf0c85", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/user-flow-validation.spec.ts:369", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/user-flow-validation.spec.ts:369"}, "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-e0ba9f8cea040233", "name": "Stray `console.log` in TS/JS \u2014 scripts/clear-thanedar-cache.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clear-thanedar-cache.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-3964fc8684d35b4f", "name": "Stray `console.log` in TS/JS \u2014 scripts/compare-finance-paths.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compare-finance-paths.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-495f2967650d0562", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-single-district-extraction.js:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-single-district-extraction.js:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dcbf3ada085edef9", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-wikipedia-mappings.ts:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-wikipedia-mappings.ts:151"}, "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-965d9f4688f25fe7", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-end-to-end.ts:230", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-end-to-end.ts:230"}, "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-8e847611aae009d9", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-profile-enhancement.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-profile-enhancement.js: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-7a33a326693e7636", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-upstash-roundtrip.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-upstash-roundtrip.ts:21"}, "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-167c23d4ff98fbee", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-sector-embeddings.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-sector-embeddings.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-0d4971f8460f5a71", "name": "Stray `console.log` in TS/JS \u2014 scripts/process-election-data.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/process-election-data.ts:97"}, "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-0171b38a733435a3", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-t000488.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-t000488.ts:19"}, "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-4602822050df6bbd", "name": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-congress-api.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-congress-api.ts:28"}, "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-79747a6731c97333", "name": "Stray `console.log` in TS/JS \u2014 scripts/monitor-deployment.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/monitor-deployment.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-0e0d2a3ca260a813", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-phase3-integration.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-phase3-integration.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-403153b20a7dcb6c", "name": "Stray `console.log` in TS/JS \u2014 scripts/assess-data-coverage.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assess-data-coverage.js: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-34061faf6e9ebe08", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-bioguide-fec.ts:594", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-bioguide-fec.ts:594"}, "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-c665812028e2dfbd", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-phase4-edge-cases.ts:198", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-phase4-edge-cases.ts:198"}, "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-5baa083ac9756d36", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-thanedar-fix.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-thanedar-fix.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-d79296355b114fa5", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-and-optimize.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-and-optimize.js: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-d0d17ff6d4424945", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-enhanced-congress-data.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-enhanced-congress-data.ts:26"}, "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-fadbd4202bf1832e", "name": "Stray `console.log` in TS/JS \u2014 scripts/performance-benchmark.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/performance-benchmark.ts:55"}, "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-00f143ebc0a72097", "name": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-apis.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-apis.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-78f98f253166d811", "name": "Stray `console.log` in TS/JS \u2014 scripts/calibrate-embedding-thresholds.ts:252", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/calibrate-embedding-thresholds.ts:252"}, "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-2d76f0a5ed40c482", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-congress-api.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-congress-api.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-19e2ef462526a209", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-district-boundaries.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-district-boundaries.js: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-d5269682cf065fe3", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-enhanced-wikipedia.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-enhanced-wikipedia.ts:65"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a606e07a1601fb5", "name": "Stray `console.log` in TS/JS \u2014 scripts/mbtiles-diagnostic.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/mbtiles-diagnostic.js: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-a770b35c75416def", "name": "Stray `console.log` in TS/JS \u2014 scripts/benchmark-performance.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/benchmark-performance.ts:49"}, "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-63c3989c80ac5510", "name": "Stray `console.log` in TS/JS \u2014 scripts/complete-district-extraction.js:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/complete-district-extraction.js: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-5f48288a02417d88", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-zip-mappings.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-zip-mappings.js:21"}, "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-dd9c42902f525a7b", "name": "Stray `console.log` in TS/JS \u2014 scripts/smoke-embedding-pipeline.ts:169", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/smoke-embedding-pipeline.ts:169"}, "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-7941b7dcf5ef4e29", "name": "Stray `console.log` in TS/JS \u2014 scripts/benchmark-optimized-performance.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/benchmark-optimized-performance.ts:58"}, "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-3c075d6e2c82837d", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-api-integration.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-api-integration.ts:85"}, "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-1fcdcbf48d97272d", "name": "Stray `console.log` in TS/JS \u2014 scripts/run-production-validation.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-production-validation.ts:88"}, "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-370525e7717c283f", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-comprehensive-mappings.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-comprehensive-mappings.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-22716feea340e652", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-unified-cache.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-unified-cache.ts:10"}, "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-ed3506934957230d", "name": "Stray `console.log` in TS/JS \u2014 scripts/raw-tile-extraction.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/raw-tile-extraction.js:29"}, "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-2f3774ed592e6cd1", "name": "Stray `console.log` in TS/JS \u2014 scripts/process-census-data.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/process-census-data.ts:91"}, "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-73435d7378f0712f", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-mappings.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-mappings.ts:31"}, "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-bd4bf95b0f3cda39", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-senate-voting-optimizations.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-senate-voting-optimizations.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-f511be5837d5e74b", "name": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-adoption.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-adoption.ts:112"}, "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-7960131398df7311", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-mvp-functionality.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-mvp-functionality.ts:51"}, "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-1a1ae36382bf184f", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-yaml-parser-performance.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-yaml-parser-performance.js:18"}, "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-5cef755bae0b55a5", "name": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-fec.js:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-fec.js:66"}, "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-e1ae6b2c2c9a677f", "name": "Stray `console.log` in TS/JS \u2014 scripts/warm-intelligence-cache.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/warm-intelligence-cache.ts:36"}, "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-5c853a99aea45810", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-data-quality.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-data-quality.ts:48"}, "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-ae2e00fc3f1ed3a9", "name": "Stray `console.log` in TS/JS \u2014 scripts/final-production-validation.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/final-production-validation.ts:56"}, "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-2a92a9618c7f09ff", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-ner-swap.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-ner-swap.ts:58"}, "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-f0f5be2e83f7b8db", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-vacancies.ts:417", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-vacancies.ts:417"}, "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-4840fc5c869e2cac", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-user-acceptance.ts:274", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-user-acceptance.ts:274"}, "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-4df139fe311329fe", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-census-integration.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-census-integration.js: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-a3fee30a2f201795", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-fec-finance-optimizations.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-fec-finance-optimizations.ts:22"}, "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-42aac0721a5d9228", "name": "Stray `console.log` in TS/JS \u2014 scripts/collect-training-data.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/collect-training-data.ts:83"}, "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-58490ae618304a08", "name": "Stray `console.log` in TS/JS \u2014 scripts/compute-district-vectors.ts:244", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compute-district-vectors.ts:244"}, "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-90d34aa0771d9b5b", "name": "Stray `console.log` in TS/JS \u2014 scripts/direct-sqlite-extraction.js:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/direct-sqlite-extraction.js: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-caf5494bae9774c3", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-redis-performance.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-redis-performance.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-0f17d42d2c5c8801", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-data.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-data.ts:88"}, "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-786180103d24c2e4", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-sector-classification.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-sector-classification.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-94139d7b84db8323", "name": "Stray `console.log` in TS/JS \u2014 scripts/process-state-boundaries.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/process-state-boundaries.js:36"}, "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-e71764e5b62135ac", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-congress-data.ts:137", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-congress-data.ts:137"}, "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-a659d75b9d6e8e30", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-coordinate-fix.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-coordinate-fix.js: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-e88f656823b53d6b", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-district-neighbors.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-district-neighbors.ts:76"}, "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-765684d067b28beb", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-comprehensive-integration.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-comprehensive-integration.ts:69"}, "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-552e5f3f6e11e6ef", "name": "Stray `console.log` in TS/JS \u2014 scripts/gzip-aware-extraction.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gzip-aware-extraction.js: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-28ab9161707dee03", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-119th-congress-data.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-119th-congress-data.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29375f6218821b3e", "name": "Stray `console.log` in TS/JS \u2014 scripts/validate-xml-url-patterns.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-xml-url-patterns.ts:64"}, "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-012c5259bf182f0a", "name": "Stray `console.log` in TS/JS \u2014 scripts/validation/validate-all.js:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validation/validate-all.js:87"}, "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-bfa563b53ade1ba4", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-external-apis.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-external-apis.js:5"}, "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-c0be1bbbc4bd2c4f", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/debug-congress-data.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/debug-congress-data.js:4"}, "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-3bc8dc825407ef05", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/debug-raw-congress-data.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/debug-raw-congress-data.js:6"}, "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-76ebfc11643b1fd0", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-reps-coverage.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-reps-coverage.js: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-eb4c9580e65eef9f", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-map-fix.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-map-fix.js: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-aac50b43c358d37f", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-address-search.js:3", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-address-search.js:3"}, "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-d94eb802a2c435f6", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-api-health.js:3", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-api-health.js:3"}, "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-5c84a30bc174ffe1", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-district-map-fix.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-district-map-fix.js: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-145c8513a84541d1", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-reports-api.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-reports-api.js: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-45600b86271bf111", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/final-validation.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/final-validation.js:6"}, "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-63edd07fb719f71b", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/debug-sc-reps.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/debug-sc-reps.js:7"}, "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-74e34b5a52b6a446", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-multi-district.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-multi-district.js: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-f89bd05c96ec2b1c", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-congress-legislators-direct.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-congress-legislators-direct.js:6"}, "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-aab4413874e9c7be", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-enhanced-bills.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-enhanced-bills.js: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-b98458082c218ecc", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-congress-endpoints.js:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-congress-endpoints.js:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71d1d353b04c8ae6", "name": "Stray `console.log` in TS/JS \u2014 scripts/test/test-district-fix.js:3", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-district-fix.js:3"}, "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-a21249c42297cc52", "name": "Stray `console.log` in TS/JS \u2014 src/middleware.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/middleware.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-36af18bf2fe5332b", "name": "Stray `console.log` in TS/JS \u2014 src/instrumentation.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/instrumentation.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-dae71782178fe601", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:99", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:99"}, "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-370fd5f08bd80cd6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(civic)/education/PrintableRubric.tsx:206", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(civic)/education/PrintableRubric.tsx:206"}, "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-18fb10548108b8df", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(civic)/education/PrintableWorksheet.tsx:139", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(civic)/education/PrintableWorksheet.tsx:139"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2878989f8abbdfa7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(civic)/education/EducationClient.tsx:1173", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(civic)/education/EducationClient.tsx:1173"}, "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-c0deb4894be9c2f0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/spending/page.tsx:316", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/spending/page.tsx:316"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ad54b499de48444", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/states/page.tsx:258", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/states/page.tsx:258"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38ba346d93fb2540", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/glossary/GlossaryClient.tsx:301", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/glossary/GlossaryClient.tsx:301"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-554ef4f5d53e628f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/representative/[bioguideId]/TabsEnhanced.tsx:229", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/representative/[bioguideId]/TabsEnhanced.tsx:229"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3d6d9f27b226ae8", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/intelligence/address/money-report/route.ts:521", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/intelligence/address/money-report/route.ts:521"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b980d37001ce8810", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/intelligence/address/representatives/route.ts:44", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/intelligence/address/representatives/route.ts:44"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-746b836f5b74308b", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/state-representatives/route.ts:23", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/state-representatives/route.ts:23"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5fff4865ce6369c6", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/district-map/route.ts:44", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/district-map/route.ts:44"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-478ad2b790a00745", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/representatives/route.ts:52", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/representatives/route.ts:52"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20ed97576a1d9149", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/search/route.ts:498", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/search/route.ts:498"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f5bd440845ddc32", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/geocode/route.ts:65", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/geocode/route.ts:65"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3093d66c7638da99", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/migrate/google-civic/page.tsx:230", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/migrate/google-civic/page.tsx:230"}, "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-d6728f75b5751f8e", "name": "Stray `console.log` in TS/JS \u2014 src/app/(public)/open/page.tsx:921", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/(public)/open/page.tsx:921"}, "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-762abbb24671c09a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/embed-docs/page.tsx:111", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/embed-docs/page.tsx:111"}, "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-61af3e6a155b57d7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/developers/page.tsx:160", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/developers/page.tsx:160"}, "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-78ac043044aed629", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(embed)/layout.tsx:44", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(embed)/layout.tsx:44"}, "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-a9a551c2ada48fb8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/bill/[billId]/ClientBillContent.tsx:702", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/bill/[billId]/ClientBillContent.tsx:702"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d332864819645dd4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/bill/[billId]/ClientBillContent.tsx:1111", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/bill/[billId]/ClientBillContent.tsx:1111"}, "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-d2484115b316a274", "name": "Stray `console.log` in TS/JS \u2014 src/tests/district-data.test.ts:368", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tests/district-data.test.ts:368"}, "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-67aa7ddffc21489b", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/migrate-119th.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/migrate-119th.ts:33"}, "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-1f1d4245a2ac2356", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/validate-data.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/validate-data.ts:43"}, "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-a45934a31eb08afc", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/utils/sanitize.ts:59", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/utils/sanitize.ts:59"}, "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-0bfab483f46eac7b", "name": "Stray `console.log` in TS/JS \u2014 src/utils/performance-optimizations.ts:183", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/performance-optimizations.ts:183"}, "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-f68bcec89b9d637d", "name": "Stray `console.log` in TS/JS \u2014 src/hooks/usePerformanceMetrics.ts:139", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/usePerformanceMetrics.ts:139"}, "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-c7ed0d659a551033", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/InfluenceChainCard.tsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/InfluenceChainCard.tsx:132"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b2e2c3f54d0a063", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/TemporalProximityCard.tsx:175", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/TemporalProximityCard.tsx:175"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01d8936d33449db6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/RepBriefSummary.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/RepBriefSummary.tsx:64"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a93bdc5362f0031", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/InsightCard.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/InsightCard.tsx:86"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93ba6d6422330d8e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/ShapFactorsBar.tsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/ShapFactorsBar.tsx:43"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3565d1b6e12c008", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/VotePredictionCard.tsx:29", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/VotePredictionCard.tsx:29"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec13cf91085768d6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/mesh/DistrictProfileCard.tsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/mesh/DistrictProfileCard.tsx:213"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abc742938cf78680", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/mesh/CounterfactualCard.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/mesh/CounterfactualCard.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c458ad42b459121e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/bills/BillDetail/TextPanel.tsx:146", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/bills/BillDetail/TextPanel.tsx:146"}, "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-a7452a114cdb7a0a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/bills/BillDetail/SummaryPanel.tsx:201", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/bills/BillDetail/SummaryPanel.tsx:201"}, "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-d22059a41a763da2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/BillsSponsoredAnswer.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/BillsSponsoredAnswer.tsx:219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-00b45b398bdad76c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/CampaignContributionsAnswer.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/CampaignContributionsAnswer.tsx:166"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa012cc4d073461b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/CommitteeLobbyingAnswer.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/CommitteeLobbyingAnswer.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82b5baddada73c9b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/DonorVotingAlignmentAnswer.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/DonorVotingAlignmentAnswer.tsx:140"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3ddf7041bc07f5c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/TopicBillsAnswer.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/TopicBillsAnswer.tsx:179"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdf859dc86fc433c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/JsonLd.tsx:100", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/JsonLd.tsx:100"}, "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-e5fe3a82ecce5dd4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/WikipediaStyleSEO.tsx:86", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/WikipediaStyleSEO.tsx:86"}, "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-8c8cb57998cee3b0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/performance/PerformanceDashboard.tsx:163", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/performance/PerformanceDashboard.tsx:163"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68d72573bc9ae524", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/states/LegacyStateOverview/LegacyStateOverviewPage.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/states/LegacyStateOverview/LegacyStateOverviewPage.tsx:646"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d60d7505fabb1326", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/AddressAutocomplete.tsx:285", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/AddressAutocomplete.tsx:285"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1edd42d5d1f78bdd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/GlobalSearch.tsx:298", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/GlobalSearch.tsx:298"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5a4b9f6d6bdb1b6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/graph/GraphSearch.tsx:268", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/graph/GraphSearch.tsx:268"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5828b6780505f5f8", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/graph/GraphControls.tsx:95", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/graph/GraphControls.tsx:95"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d53aafcf27eaa15", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/influence/components/CommitteeSearch.tsx:143", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/influence/components/CommitteeSearch.tsx:143"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7dea683ff5b109e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/CampaignFinanceVisualizer.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/CampaignFinanceVisualizer.tsx:1792"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05791cf108caf1c8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/IndustryBreakdown.tsx:358", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/IndustryBreakdown.tsx:358"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b196851e9c8bb214", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/GeographicBreakdown.tsx:33", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/GeographicBreakdown.tsx:332"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88302b4514ad42f6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/SecFilingsSection.tsx:159", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/SecFilingsSection.tsx:159"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ba43a1a233c53a9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/InterestGroupBaskets.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/InterestGroupBaskets.tsx:188"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75ba10846c150e3a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/spending/components/AwardList.tsx:34", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/spending/components/AwardList.tsx:34"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01fa4c207b49bf63", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/VotePatternSection.tsx:117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/VotePatternSection.tsx:117"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15b2248859e82a89", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/RepresentativeGrid.tsx:143", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/RepresentativeGrid.tsx:143"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49ee36d4d5e03974", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/CivicAlignmentTab.tsx:130", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/CivicAlignmentTab.tsx:130"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfeb8fb7d559b29d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/FinanceTabEnhanced.tsx:599", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/FinanceTabEnhanced.tsx:599"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4e221a460ef8a71", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/representatives/components/BiographyCard.tsx:435", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/representatives/components/BiographyCard.tsx:435"}, "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-850bf50f6b5b7515", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/StateLegislatorCard.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/StateLegislatorCard.tsx:152"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ef428b64c17f1bf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/RepresentativeCard.tsx:185", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/RepresentativeCard.tsx:185"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-36c69767eb097cd7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/representatives/components/StateMapCard.tsx:142", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/representatives/components/StateMapCard.tsx:142"}, "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-026d4923d2921adf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateCommitteeProfile.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateCommitteeProfile.tsx:151"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a3acb72ddf683b9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateCommitteeCard.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateCommitteeCard.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d288388f596b73b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateLegislatorActivityFe", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateLegislatorActivityFeed.tsx:190"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4cce5138744e85e7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateLegislatorVotingReco", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateLegislatorVotingRecord.tsx:301"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42baba2a898b75db", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/state-legislature/components/SimpleStateLegislatorPro", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/state-legislature/components/SimpleStateLegislatorProfile.tsx:373"}, "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-0f6c1dc24cb5bbeb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/legislation/components/WitnessSearch.tsx:180", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/legislation/components/WitnessSearch.tsx:180"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6829720518b0667f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/legislation/components/PolicyAreaCrossDomain.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/legislation/components/PolicyAreaCrossDomain.tsx:171"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fec650841b8346bc", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/legislation/components/CommitteeBiographicalInfo.tsx:", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/legislation/components/CommitteeBiographicalInfo.tsx:156"}, "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-de65ae85cda0f03d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/legislation/components/BillSpendingSection.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/legislation/components/BillSpendingSection.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06ab6018a14c2f47", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/districts/components/DistrictCard.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/districts/components/DistrictCard.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8be34958846b6b11", "name": "Stray `console.log` in TS/JS \u2014 src/shared/components/pwa/InstallPrompt.tsx:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/shared/components/pwa/InstallPrompt.tsx:56"}, "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-7a8a41d190eb10a3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/shared/components/ui/Charts.tsx:358", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/shared/components/ui/Charts.tsx:358"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc86896ff953c58d", "name": "Stray `console.log` in TS/JS \u2014 src/shared/components/ui/ErrorSystemDemo.tsx:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/shared/components/ui/ErrorSystemDemo.tsx:145"}, "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-e3d0e28de7445377", "name": "Stray `console.log` in TS/JS \u2014 src/lib/dataValidation.ts:390", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/dataValidation.ts:390"}, "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-56452e14b24afa41", "name": "Stray `console.log` in TS/JS \u2014 src/lib/rss-feeds.ts:183", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/rss-feeds.ts:183"}, "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-747e06c6987bd266", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/multi-district/detection.ts:23", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/multi-district/detection.ts:23"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-041df839a0356d57", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/intelligence/types.ts:738", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/intelligence/types.ts:738"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e1305a30fbf3f6e", "name": "Stray `console.log` in TS/JS \u2014 src/lib/monitoring/telemetry-edge.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/monitoring/telemetry-edge.ts:52"}, "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-7fc270e58751c3aa", "name": "Stray `console.log` in TS/JS \u2014 src/lib/logging/logger-edge.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logging/logger-edge.ts:92"}, "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-570908fc1136a98a", "name": "Stray `console.log` in TS/JS \u2014 src/lib/logging/logger-client.ts:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logging/logger-client.ts:121"}, "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-a53574d79cee5404", "name": "Stray `console.log` in TS/JS \u2014 src/lib/logging/simple-logger.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logging/simple-logger.ts:65"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-78f61d604d650d7e", "name": "Stray `console.log` in TS/JS \u2014 src/lib/analytics/adoption-telemetry.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/analytics/adoption-telemetry.ts:98"}, "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-7afc5d8c1aa70a3b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/services/bill.service.ts:757", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/services/bill.service.ts:757"}, "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-b642670662323682", "name": "Stray `console.log` in TS/JS \u2014 src/lib/error-handling/chunk-error-handler.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/error-handling/chunk-error-handler.ts:94"}, "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-a12dc501ddabc47f", "name": "Stray `console.log` in TS/JS \u2014 src/config/env-validation.ts:149", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/config/env-validation.ts:149"}, "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-4c23dc83be76af89", "name": "Stray `console.log` in TS/JS \u2014 public/sw.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/sw.js: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-4f2aef919efea69e", "name": "Possible secret in .env.example", "shortDescription": {"text": "Possible secret in .env.example"}, "fullDescription": {"text": "Detected pattern matching private_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5da230418e748157", "name": "Insecure pattern 'node_child_process' in scripts/process-state-legislative-districts.mjs:22", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/process-state-legislative-districts.mjs:22"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-661dc594a203ed69", "name": "Insecure pattern 'node_child_process' in scripts/generate-mobile-pmtiles.mjs:20", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/generate-mobile-pmtiles.mjs:20"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-38773106b1776409", "name": "Insecure pattern 'node_child_process' in scripts/process-real-census-districts.mjs:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/process-real-census-districts.mjs:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-83aa7699d0461785", "name": "Insecure pattern 'node_child_process' in scripts/process-district-boundaries.mjs:29", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/process-district-boundaries.mjs:29"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7af83a8ce5f7a31", "name": "Insecure pattern 'node_child_process' in scripts/fix-district-boundaries.js:20", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/fix-district-boundaries.js:20"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03a7551dd858b4a0", "name": "Insecure pattern 'node_child_process' in scripts/run-production-validation.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/run-production-validation.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f78b2ccc6ae81aa6", "name": "Insecure pattern 'cors_wildcard' in scripts/generate-committee-biographies.mjs:138", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in scripts/generate-committee-biographies.mjs:138"}, "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-e4f34552b4f3d141", "name": "Insecure pattern 'node_child_process' in scripts/performance-test.mjs:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/performance-test.mjs:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9aca829ba5c797c2", "name": "Insecure pattern 'eval_used' in scripts/final-production-validation.ts:403", "shortDescription": {"text": "Insecure pattern 'eval_used' in scripts/final-production-validation.ts:403"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de950eb9424d87dd", "name": "Insecure pattern 'node_child_process' in scripts/process-state-boundaries.js:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/process-state-boundaries.js:17"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f4efd0676b7a445", "name": "Insecure pattern 'cors_wildcard' in scripts/generate-biography-data.mjs:97", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in scripts/generate-biography-data.mjs:97"}, "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-d6bd1eaf26aa8c5c", "name": "Insecure pattern 'node_child_process' in scripts/validation/validate-all.js:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/validation/validate-all.js:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-018aa75b20b10112", "name": "Insecure pattern 'cors_wildcard' in src/middleware.ts:254", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/middleware.ts:254"}, "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-863662e9da3e8e16", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:99", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:99"}, "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-f559991020125825", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(civic)/education/PrintableRubric.tsx:206", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(civic)/education/PrintableRubric.tsx:206"}, "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-93660545ed84f562", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(civic)/education/PrintableWorksheet.tsx:139", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(civic)/education/PrintableWorksheet.tsx:139"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a7cd343ac3e978b", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(civic)/education/EducationClient.tsx:1173", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(civic)/education/EducationClient.tsx:1173"}, "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-38d20284e5803535", "name": "Insecure pattern 'cors_wildcard' in src/app/(civic)/industry/[sector]/page.tsx:45", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/(civic)/industry/[sector]/page.tsx:45"}, "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-f776f8e792023777", "name": "Insecure pattern 'cors_wildcard' in src/app/(civic)/influence/[committeeId]/page.tsx:108", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/(civic)/influence/[committeeId]/page.tsx:108"}, "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-e40740ef9794753a", "name": "Insecure pattern 'cors_wildcard' in src/app/api/v1/changelog/route.ts:32", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/v1/changelog/route.ts:32"}, "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-eeae584a5f62169a", "name": "Insecure pattern 'cors_wildcard' in src/app/api/lobby/[registrantId]/route.ts:129", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/lobby/[registrantId]/route.ts:129"}, "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-5019343116e70c7e", "name": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/following/route.ts:31", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/following/route.ts:31"}, "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-137a699149a9f6f8", "name": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/followers/route.ts:45", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/followers/route.ts:45"}, "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-b75a16bf6df8889b", "name": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/outbox/route.ts:48", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/outbox/route.ts:48"}, "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-74126c9a05683f64", "name": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/nodeinfo/route.ts:37", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/nodeinfo/route.ts:37"}, "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-61627108c26ed383", "name": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/actor/route.ts:26", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/actor/route.ts:26"}, "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-cd980f3fd138b552", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/migrate/google-civic/page.tsx:230", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/migrate/google-civic/page.tsx:230"}, "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-b67dab5d0fb0ecb0", "name": "Insecure pattern 'cors_wildcard' in src/app/(public)/open/page.tsx:498", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/(public)/open/page.tsx:498"}, "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-523ad5cd2b607f53", "name": "Insecure pattern 'cors_wildcard' in src/app/(public)/docs/api/page.tsx:397", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/(public)/docs/api/page.tsx:397"}, "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-72b5be871803b838", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/embed-docs/page.tsx:111", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/embed-docs/page.tsx:111"}, "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-a49a476a02f37d20", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/developers/page.tsx:160", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/developers/page.tsx:160"}, "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-082130d6d9017190", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(embed)/layout.tsx:44", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(embed)/layout.tsx:44"}, "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-6debcb1ae436650c", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/bill/[billId]/ClientBillContent.tsx:1111", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/bill/[billId]/ClientBillContent.tsx:1111"}, "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-d3686529dc4f794d", "name": "Insecure pattern 'node_child_process' in src/scripts/migrate-119th.ts:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/scripts/migrate-119th.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ef31bc1852fdc82d", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/bills/BillDetail/TextPanel.tsx:146", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/bills/BillDetail/TextPanel.tsx:146"}, "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-1cc005fa6c1e9930", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/bills/BillDetail/SummaryPanel.tsx:201", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/bills/BillDetail/SummaryPanel.tsx:201"}, "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-b82e8ebf2178f4ba", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/JsonLd.tsx:100", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/JsonLd.tsx:100"}, "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-a2edfb6459806dc2", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/WikipediaStyleSEO.tsx:86", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/WikipediaStyleSEO.tsx:86"}, "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-740b38fd27f4a983", "name": "Insecure pattern 'dangerous_innerhtml' in src/features/representatives/components/BiographyCard.tsx:435", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/features/representatives/components/BiographyCard.tsx:435"}, "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-7989142368c0f9fd", "name": "Insecure pattern 'dangerous_innerhtml' in src/features/representatives/components/StateMapCard.tsx:142", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/features/representatives/components/StateMapCard.tsx:142"}, "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-3e0aa269696ba909", "name": "Insecure pattern 'dangerous_innerhtml' in src/features/state-legislature/components/SimpleStateLegislatorProfile.tsx:373", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/features/state-legislature/components/SimpleStateLegislatorProfile.tsx:373"}, "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-27aed7cec960de21", "name": "Insecure pattern 'dangerous_innerhtml' in src/features/legislation/components/CommitteeBiographicalInfo.tsx:156", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/features/legislation/components/CommitteeBiographicalInfo.tsx:156"}, "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-897b892b97107d61", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/features/districts/components/DistrictMapContainer.tsx:141", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/districts/components/DistrictMapContainer.tsx:141"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0a6d4338418fff", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/features/districts/components/LeafletDistrictMap.tsx:145", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/districts/components/LeafletDistrictMap.tsx:145"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dc70637df4b655df", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/features/districts/components/InteractiveDistrictMap.tsx:171", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/districts/components/InteractiveDistrictMap.tsx:171"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-78411ec4eaf58ef3", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/shared/components/pwa/InstallPrompt.tsx:164", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/shared/components/pwa/InstallPrompt.tsx:164"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-beafe80e1f622ea3", "name": "Insecure pattern 'cors_wildcard' in src/lib/services/wikipedia.service.ts:95", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/lib/services/wikipedia.service.ts:95"}, "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-ac141dadabbe3903", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/error-handling/chunk-error-handler.ts:253", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/error-handling/chunk-error-handler.ts:253"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c342f9a533cd8402", "name": "Insecure pattern 'cors_wildcard' in src/__tests__/middleware/v1-middleware.test.ts:48", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/__tests__/middleware/v1-middleware.test.ts:48"}, "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-171b388b8757dd52", "name": "Insecure pattern 'eval_used' in src/__tests__/middleware/middleware.test.ts:137", "shortDescription": {"text": "Insecure pattern 'eval_used' in src/__tests__/middleware/middleware.test.ts:137"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd467f6f17367495", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/design/civ-iq-redesign/project/handoff/screens/_render.html:93", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/design/civ-iq-redesign/project/handoff/screens/_render.html:93"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-db011b462bf4445e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "peter-evans/create-pull-request@v7 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2640079910ce761", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3295c3ff963f5b76", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b82d3e83825f16a1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "peter-evans/create-pull-request@v7 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-12cef6c4ac1f2257", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b870aff10c49c64a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "peter-evans/create-pull-request@v7 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f5002967cdd8dc01", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a8b080b07d215cb", "name": "Very large file: src/app/api/districts/[districtId]/route.ts (2038 lines)", "shortDescription": {"text": "Very large file: src/app/api/districts/[districtId]/route.ts (2038 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-9a5a5d0f1aea6381", "name": "Very large file: src/app/bill/[billId]/ClientBillContent.tsx (1205 lines)", "shortDescription": {"text": "Very large file: src/app/bill/[billId]/ClientBillContent.tsx (1205 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-fac5a505c3a8fc50", "name": "Very large file: src/features/campaign-finance/components/CampaignFinanceVisualizer.tsx (2169 lines)", "shortDescription": {"text": "Very large file: src/features/campaign-finance/components/CampaignFinanceVisualizer.tsx (2169 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-ecca32d8f6f0d32b", "name": "Very large file: src/features/representatives/components/FinanceTabEnhanced.tsx (1536 lines)", "shortDescription": {"text": "Very large file: src/features/representatives/components/FinanceTabEnhanced.tsx (1536 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-0571778ad8053c9d", "name": "Very large file: src/features/representatives/services/batch-voting-service.ts (1665 lines)", "shortDescription": {"text": "Very large file: src/features/representatives/services/batch-voting-service.ts (1665 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-d3eceeec40257c50", "name": "Very large file: src/lib/fec/fec-api-service.ts (1820 lines)", "shortDescription": {"text": "Very large file: src/lib/fec/fec-api-service.ts (1820 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-194753e193dacacc", "name": "Very large file: docs/design/civ-iq-redesign/project/redesign/SearchVariants.jsx (1834 lines)", "shortDescription": {"text": "Very large file: docs/design/civ-iq-redesign/project/redesign/SearchVariants.jsx (1834 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": "288 tests / 1644 src (ratio 0.18)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a87124df077534aa", "name": "Node manifest has dependencies but no lockfile: packages/civic-statistics/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/civic-statistics/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c392a3c5c0fe4611", "name": "Node manifest has dependencies but no lockfile: packages/entity-resolution/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/entity-resolution/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae014485ab255591", "name": "Node manifest has dependencies but no lockfile: packages/sdk/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/sdk/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 2332 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 236 placeholder/mock markers across 120 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. 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-19c19a652e090cf0", "name": "Agent authority lacks a verifier contract: docs/design/civ-iq-redesign/project/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: docs/design/civ-iq-redesign/project/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bc1d17564821a967", "name": "Commented-code block (8 lines) in jest.setup.js:126", "shortDescription": {"text": "Commented-code block (8 lines) in jest.setup.js:126"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-607a6eedf0b17889", "name": "Commented-code block (8 lines) in packages/entity-resolution/src/bioguide-fec-mapping.ts:16", "shortDescription": {"text": "Commented-code block (8 lines) in packages/entity-resolution/src/bioguide-fec-mapping.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0a08de9db49a756", "name": "Legacy-named symbol `startOld` in scripts/compare-finance-paths.ts:59", "shortDescription": {"text": "Legacy-named symbol `startOld` in scripts/compare-finance-paths.ts:59"}, "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-b9cf98153c285c03", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/process-state-legislative-districts.mjs:192", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/process-state-legislative-districts.mjs:192"}, "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-b06620e4735ec6f4", "name": "Legacy-named symbol `rest_v1` in scripts/generate-wikipedia-mappings.ts:54", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in scripts/generate-wikipedia-mappings.ts:54"}, "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-84ce7a942b9e80a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-wikipedia-mappings.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-wikipedia-mappings.ts:56"}, "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-713196ea51a9f123", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/debug-t000488.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/debug-t000488.ts:26"}, "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-2abd20f274829797", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/diagnose-congress-api.ts:215", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/diagnose-congress-api.ts:215"}, "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-4c0cd5c651ceb18a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-bioguide-fec.ts:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-bioguide-fec.ts:90"}, "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-fce19b6372007ef0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/process-real-census-districts.mjs:150", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/process-real-census-districts.mjs:150"}, "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-ce39fda7caf90d7c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/performance-benchmark.ts:179", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/performance-benchmark.ts:179"}, "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-99a531bd5d826227", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/diagnose-apis.ts:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/diagnose-apis.ts:63"}, "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-2a05cdbd35835e52", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/validate-state-district-ids.mjs:215", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/validate-state-district-ids.mjs:215"}, "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-d6ddbfb368ebeca7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-congress-api.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-congress-api.ts:17"}, "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-0090dc9c9ba222a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/process-district-boundaries.mjs:170", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/process-district-boundaries.mjs:170"}, "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-9de71816a4136d9d", "name": "Commented-code block (6 lines) in scripts/update-zip-mappings.js:88", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/update-zip-mappings.js:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0c472c2c81aee42", "name": "Commented-code block (6 lines) in scripts/rewrite-dist-js-extensions.mjs:4", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/rewrite-dist-js-extensions.mjs: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-b0644590144737b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-committee-biographies.mjs:234", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-committee-biographies.mjs:234"}, "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-65e1564485c9bf2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-comprehensive-mappings.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-comprehensive-mappings.ts:30"}, "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-dc101e99860ac3b8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-senate-voting-optimizations.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-senate-voting-optimizations.ts:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49242dc097626424", "name": "Commented-code block (7 lines) in scripts/diagnose-fec.js:12", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/diagnose-fec.js:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5bd75813de4ed06c", "name": "Legacy-named symbol `totalOld` in scripts/validate-ner-swap.ts:137", "shortDescription": {"text": "Legacy-named symbol `totalOld` in scripts/validate-ner-swap.ts:137"}, "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-2cdcf0c3816f53f4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/validate-ner-swap.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/validate-ner-swap.ts:48"}, "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-dc6d42e9f6591e1e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-vacancies.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-vacancies.ts:55"}, "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-253cee39991138dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-fec-finance-optimizations.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-fec-finance-optimizations.ts:54"}, "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-99102f1e2faeeaba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/compute-district-vectors.ts:176", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/compute-district-vectors.ts:176"}, "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-7bac802a1de9921c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/validate-all-50-states.mjs:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/validate-all-50-states.mjs:10"}, "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-9224d54c366dcfca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-congress-data.ts:140", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-congress-data.ts:140"}, "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-8c65d4baaf35aaba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/debug-congress-data.js:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/debug-congress-data.js:34"}, "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-4f923e7c035d66f2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/debug-raw-congress-data.js:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/debug-raw-congress-data.js:10"}, "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-51d8a2d799f01c20", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/test-address-search.js:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/test-address-search.js:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d4b2d9055afd4e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/final-validation.js:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/final-validation.js:10"}, "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-06353877054e4ce6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/debug-sc-reps.js:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/debug-sc-reps.js:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e410100b7420c863", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/test-congress-legislators-direct.js:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/test-congress-legislators-direct.js:11"}, "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-8c27f0430387f5c9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sitemap.ts:411", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sitemap.ts:411"}, "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-76d001392eb56e56", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/enforcement/page.tsx:116", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/enforcement/page.tsx:116"}, "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-5ccee3ce9f399961", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/industry/[sector]/IndustrySectorClient.tsx:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/industry/[sector]/IndustrySectorClient.tsx:87"}, "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-41cac086722e507d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/influence/[committeeId]/CommitteeProfileClient.tsx:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/influence/[committeeId]/CommitteeProfileClient.tsx:85"}, "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-07d410b7147d9253", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/congress/CongressStatsBox.tsx:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/congress/CongressStatsBox.tsx:25"}, "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-0b08002716926174", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/state-bills/page.tsx:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/state-bills/page.tsx:75"}, "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-75f558c62b80554b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/state-bills/[state]/page.tsx:347", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/state-bills/[state]/page.tsx:347"}, "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-db09306e8c02fed5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/state-bills/[state]/[billId]/page.tsx:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/state-bills/[state]/[billId]/page.tsx:62"}, "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-e9058a26c1b9468f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/regulations/LegacyRegulationsPage.tsx:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/regulations/LegacyRegulationsPage.tsx:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72e37479869232ef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/regulations/[documentNumber]/page.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/regulations/[documentNumber]/page.tsx:66"}, "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-a81082875d6ce0f0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/elections/state/page.tsx:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/elections/state/page.tsx:100"}, "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-65a75d71b7e883ac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/representative/[bioguideId]/TabsSimple.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/representative/[bioguideId]/TabsSimple.tsx:54"}, "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-4d8959a9f848ee22", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committee/[committeeId]/bills/route.ts:141", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committee/[committeeId]/bills/route.ts:141"}, "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-e9199bb33eb4e60f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committee/[committeeId]/reports/route.ts:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committee/[committeeId]/reports/route.ts:78"}, "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-7b627d64e49a4bd0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/bill-summarizer/route.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/bill-summarizer/route.ts:54"}, "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-3038f69912c4b07c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/rss-aggregator/route.ts:125", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/rss-aggregator/route.ts:125"}, "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-2bdef10e9e1cfbfc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/bills/route.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/bills/route.ts:49"}, "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-61d4506133a86a71", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/bills/[billId]/route.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/bills/[billId]/route.ts:76"}, "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-4751db9b99e2d571", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/committees/route.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/committees/route.ts:49"}, "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-1373ea7b85dc71fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/votes/[voteId]/route.ts:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/votes/[voteId]/route.ts:78"}, "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-a53cbf51faf22405", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bills/latest/route.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bills/latest/route.ts:25"}, "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-9a6937687f29fe81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bills/lifecycle/route.ts:143", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bills/lifecycle/route.ts:143"}, "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-aa09d2d98b33e408", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/govinfo/hearings/route.ts:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/govinfo/hearings/route.ts:79"}, "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-c7c161d65622dd11", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/health/route.ts:438", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/health/route.ts:438"}, "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-7542d786a20381c1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/spending/agency/[agencySlug]/bills/route.ts:131", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/spending/agency/[agencySlug]/bills/route.ts:131"}, "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-5f29b9a8afc9d2bb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/spending/awards/legislation/route.ts:110", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/spending/awards/legislation/route.ts:110"}, "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-af62a3bf6213f76d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/agent/route.ts:110", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/agent/route.ts:110"}, "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-edf2c7c21f3921f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committee-meetings/route.ts:173", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committee-meetings/route.ts:173"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7aa226aa65a7ad8c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/witnesses/route.ts:121", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/witnesses/route.ts:121"}, "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-115d35dbca6d51b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/district-map/route.ts:297", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/district-map/route.ts: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-738524b8abcb43b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/senate-votes/[voteNumber]/route.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/senate-votes/[voteNumber]/route.ts:51"}, "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-e73e2f5f47e6c584", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/feed/bills/latest/route.ts:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/feed/bills/latest/route.ts:46"}, "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-1beee5bbe6a708a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/feed/bill/[billId]/route.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/feed/bill/[billId]/route.ts:52"}, "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-7a3814258acfac71", "name": "Commented-code block (5 lines) in src/app/api/search/route.ts:494", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/search/route.ts:494"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df9a341a444e5396", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/search/unified/route.ts:349", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/search/unified/route.ts:349"}, "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-e3ea6ebde122ee95", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/state-bills/[state]/route.ts:179", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/state-bills/[state]/route.ts:179"}, "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-c4ce89ddf0394f60", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/regulations/[documentNumber]/hearings/route.ts:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/regulations/[documentNumber]/hearings/route.ts:82"}, "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-3e48664699e13512", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committees/route.ts:168", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committees/route.ts:168"}, "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-ed9f90269466baa7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/federal-register/route.ts:146", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/federal-register/route.ts:146"}, "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-6a0c7c20284261cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/federal-register/comment-periods/route.ts:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/federal-register/comment-periods/route.ts:103"}, "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-a2c7fd8ceeffb080", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/federal-register/executive-orders/route.ts:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/federal-register/executive-orders/route.ts:79"}, "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-e739cf0b77601f46", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/floor-schedule/route.ts:213", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/floor-schedule/route.ts:213"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d67392c1c7b9f041", "name": "Commented-code block (5 lines) in src/app/api/geocode/route.ts:65", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/geocode/route.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-3dca35073e7c1bf8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/geocode/route.ts:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/geocode/route.ts:134"}, "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-2b1bb5012429faca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/districts/census-helpers.ts:139", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/districts/census-helpers.ts:139"}, "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-97981441e4e93197", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/districts/all/route.ts:146", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/districts/all/route.ts:146"}, "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-74ff7a98baa94bbc", "name": "Commented-code block (5 lines) in src/app/api/districts/[districtId]/route.ts:260", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/districts/[districtId]/route.ts:260"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31ef0efb0333c95e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/city/[cityId]/council/route.ts:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/city/[cityId]/council/route.ts:89"}, "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-aea678fde36fabaa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/legacy/redirect-helper.ts:304", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/legacy/redirect-helper.ts:304"}, "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-7dd98ebaa94f46c7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/__tests__/v2/representatives.test.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/__tests__/v2/representatives.test.ts: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-5b3ab33a1d1c8b56", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/route.ts:278", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/route.ts:278"}, "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-c6d665377f07a313", "name": "Commented-code block (5 lines) in src/app/api/representative/[bioguideId]/finance/route.ts:55", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/representative/[bioguideId]/finance/route.ts:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c9e097d1b6bc34a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/leadership/route.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/leadership/route.ts:27"}, "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-fc4f361ac02a6450", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/state-legislature/route.ts:286", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/state-legislature/route.ts:286"}, "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-77675b3436e8c192", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/committees/route.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/committees/route.ts:48"}, "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-fc5172d39a854309", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/district/route.ts:173", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/district/route.ts:173"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-14dfbfa15c34db87", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/news/route.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/news/route.ts:9"}, "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-b0865fc1832c35f7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/migrate/google-civic/page.tsx:110", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/migrate/google-civic/page.tsx:110"}, "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-40383a17f1ec2911", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/open/page.tsx:515", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/open/page.tsx:515"}, "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-68eaaf77c4f17470", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/results/page.tsx:228", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/results/page.tsx:228"}, "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-5ad6666ce749e45a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/discover-rss-feeds.ts:289", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/discover-rss-feeds.ts:289"}, "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-8860f4fe3e06d53c", "name": "Commented-code block (5 lines) in src/hooks/useEnhancedDistrictData.ts:122", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useEnhancedDistrictData.ts:122"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34c61e0cccc75e96", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useEnhancedDistrictData.ts:208", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useEnhancedDistrictData.ts:208"}, "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-a8650ca4129e3c05", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/shared/useSWR.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/shared/useSWR.ts:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17a51a21bdb06a22", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/StockTradeRankBadge.tsx:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/StockTradeRankBadge.tsx:16"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-98534b815f8bbc25", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/PreambleInsightsSection.tsx:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/PreambleInsightsSection.tsx:24"}, "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-cfff6844ae0b413c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/BillIntelligenceSection.tsx:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/BillIntelligenceSection.tsx:18"}, "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-bd6a5b7b2bf0cda3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/DistrictIntelligenceCard.tsx:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/DistrictIntelligenceCard.tsx:16"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11501b5416d94f43", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/TradeSectorBreakdown.tsx:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/TradeSectorBreakdown.tsx:18"}, "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-01d66b061f52c17f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/RepBriefSummary.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/RepBriefSummary.tsx:22"}, "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-97ab5ce4c85aceda", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/CommitteeIntelligence.tsx:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/CommitteeIntelligence.tsx:17"}, "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-aec234be6d54bc74", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/IntelligenceTab.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/IntelligenceTab.tsx:49"}, "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-4fac00d817a0fbc4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/InfluenceClusterChart.tsx:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/InfluenceClusterChart.tsx:23"}, "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-ccd6bed609370114", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/SectorLeaderboard.tsx:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/SectorLeaderboard.tsx:85"}, "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-7ab395427c6aeb08", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/mesh/CounterfactualSection.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/mesh/CounterfactualSection.tsx:30"}, "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-d0c64d8dfbda7f46", "name": "Commented-code block (6 lines) in src/components/questions/CommitteeActivityAnswer.tsx:29", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/questions/CommitteeActivityAnswer.tsx:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dea7a4cadc7ab984", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pacs/PACProfilePage/PACProfilePage.tsx:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pacs/PACProfilePage/PACProfilePage.tsx:53"}, "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-8a44460d89926981", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/state-officials/StateLegislatorProfile/RecordPanel.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/state-officials/StateLegislatorProfile/RecordPanel.tsx:48"}, "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-18aa7957dcc81e45", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/state-officials/StateLegislatorProfile/BillsPanel.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/state-officials/StateLegislatorProfile/BillsPanel.tsx:26"}, "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-d24c38853fe25e50", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spending/SpendingContractPage/SpendingContractPage.tsx:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spending/SpendingContractPage/SpendingContractPage.tsx:52"}, "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-e331c2d184989f11", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/maps/StateMap.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/maps/StateMap.tsx:58"}, "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-eebc5fa107486ae0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/states/LegacyStateOverview/LegacyStateOverviewPage.tsx:146", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/states/LegacyStateOverview/LegacyStateOverviewPage.tsx:146"}, "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-01d79f0be3dac45b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/states/StateOverview/data.ts:106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/states/StateOverview/data.ts:106"}, "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-8ef865c91439f141", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sectors/IndustrySectorPage/IndustrySectorPage.tsx:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sectors/IndustrySectorPage/IndustrySectorPage.tsx:38"}, "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-2403f6e5d8abbf7b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/search/AddressAutocomplete.tsx:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/search/AddressAutocomplete.tsx:81"}, "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-7d668b8a3ccd22db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/search/SearchVariants/data.ts:256", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/search/SearchVariants/data.ts:256"}, "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-32a78a2d872f4bb3", "name": "Commented-code block (5 lines) in src/components/ask/AskEntryPage/AskEntryPage.tsx:35", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/ask/AskEntryPage/AskEntryPage.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05cad8feaf96892b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/local/LocalCouncilPage/LocalCouncilPage.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/local/LocalCouncilPage/LocalCouncilPage.tsx:44"}, "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-010ffccacd7c60c1", "name": "Commented-code block (6 lines) in src/components/shared/common/EnhancedErrorBoundary.tsx:116", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/shared/common/EnhancedErrorBoundary.tsx:116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25a44d52de5849de", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/shared/common/EnhancedErrorBoundary.tsx:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/shared/common/EnhancedErrorBoundary.tsx:117"}, "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-5e15e21fe12b5c8d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/elections/ElectionPage/ElectionPage.tsx:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/elections/ElectionPage/ElectionPage.tsx:61"}, "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-8b62c0bc8da93e63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/districts/DistrictPage/DistrictPage.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/districts/DistrictPage/DistrictPage.tsx:40"}, "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-ff2642cb13f38c58", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/graph/useGraphData.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/graph/useGraphData.ts:12"}, "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-a152753747c70eb2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/MoneyPanel.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/MoneyPanel.tsx:37"}, "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-beb1baf931c11af3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/RecordPanel.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/RecordPanel.tsx:41"}, "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-d4697b8c20b65f31", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/ProfileHybrid.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/ProfileHybrid.tsx:42"}, "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-6a18ebc423cdd478", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/BillsPanel.tsx:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/BillsPanel.tsx:33"}, "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-b28aea9b22c32d13", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/MeetingsPanel.tsx:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/MeetingsPanel.tsx:38"}, "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-d5962fae696f37c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/VotingRecordPage/VotingRecordPage.tsx:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/VotingRecordPage/VotingRecordPage.tsx:23"}, "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-1a1051a401dc6868", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/topics/IssueTopicPage/IssueTopicPage.tsx:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/topics/IssueTopicPage/IssueTopicPage.tsx:33"}, "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-0830c2593981af93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-government/components/StateExecutivesTab.tsx:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-government/components/StateExecutivesTab.tsx:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c79b98c63d92e458", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-government/components/StateJudiciaryTab.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-government/components/StateJudiciaryTab.tsx:22"}, "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-79836a6fe74697d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/CampaignFinanceVisualizer.tsx:275", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/CampaignFinanceVisualizer.tsx:275"}, "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-22712b3fbe32f8bc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/FinanceJurisdictionSection.tsx:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/FinanceJurisdictionSection.tsx:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ab1f03bfbd13451", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/SecFilingsSection.tsx:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/SecFilingsSection.tsx:17"}, "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-72fe4c45c3022c74", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/StockTradesSection.tsx:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/StockTradesSection.tsx:20"}, "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-2aeca17b08873d85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/spending/components/AgencyRelatedBills.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/spending/components/AgencyRelatedBills.tsx:40"}, "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-59ba0d996bd355d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/spending/components/SpendingNarrativeSection.tsx:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/spending/components/SpendingNarrativeSection.tsx:35"}, "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-e0ab0750ba82aa2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/spending/components/EnablingLegislation.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/spending/components/EnablingLegislation.tsx:40"}, "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-a96fe52a141ce0c1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/hooks/useRepresentatives.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/hooks/useRepresentatives.ts:29"}, "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-9bb24fcbea261dc5", "name": "Commented-code block (5 lines) in src/features/representatives/components/SimpleRepresentativeProfile.tsx:96", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/representatives/components/SimpleRepresentativeProfile.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-679782a4d51b9ba5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/SimpleRepresentativeProfile.tsx:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/SimpleRepresentativeProfile.tsx:104"}, "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-863ca85e0f26a525", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/VotePatternSection.tsx:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/VotePatternSection.tsx:35"}, "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-f95ce4932da809a0", "name": "Commented-code block (5 lines) in src/features/representatives/components/CommitteeMembershipsCard.tsx:157", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/representatives/components/CommitteeMembershipsCard.tsx:157"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16cd5c52f105a004", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/ConnectionsTab.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/ConnectionsTab.tsx:84"}, "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-bbe56b6793e31750", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/BillsTab.tsx:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/BillsTab.tsx:64"}, "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-c9478bf21def9813", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/VotingTab.tsx:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/VotingTab.tsx:137"}, "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-805e43abf4f1dfff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/StateRepresentativesTab.tsx:155", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/StateRepresentativesTab.tsx:155"}, "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-082d95331cc1f7d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/CivicAlignmentTab.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/CivicAlignmentTab.tsx:26"}, "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-861b127db62246c7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/LobbyingTab.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/LobbyingTab.tsx:74"}, "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-b36c8d5a88c1c649", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/FinanceTabEnhanced.tsx:353", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/FinanceTabEnhanced.tsx:353"}, "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-1d3e0664f47c4fe8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/FinanceTab.tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/FinanceTab.tsx:107"}, "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-6d44cfaebf7b2df8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/BiographyCard.tsx:241", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/BiographyCard.tsx:241"}, "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-6d455d2213186601", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/CongressHeader.tsx:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/CongressHeader.tsx:82"}, "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-565a58afa3ebac96", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/StateMapCard.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/StateMapCard.tsx:80"}, "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-de49dbea91139c86", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/profile-redesign/InfluenceSection.", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/profile-redesign/InfluenceSection.tsx:27"}, "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-aa84d5dba5efe558", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/profile-redesign/ProfileRedesign.t", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/profile-redesign/ProfileRedesign.tsx:46"}, "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-7e868632f0a4c02e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/profile-redesign/NewsSection.tsx:2", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/profile-redesign/NewsSection.tsx:26"}, "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-2acf008026f1e632", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/unified-congress.service.ts:362", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/unified-congress.service.ts:362"}, "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-bc1f913d3b2a8e58", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/enhanced-congress-data-service.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/enhanced-congress-data-service.ts:223"}, "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-6fa9c2970fe8159b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/congress-api.ts:762", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/congress-api.ts:762"}, "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-d8eba31f29d78910", "name": "Commented-code block (7 lines) in src/features/representatives/services/batch-voting-service.ts:106", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/representatives/services/batch-voting-service.ts:106"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67883b3d7f87725b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/batch-voting-service.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/batch-voting-service.ts:31"}, "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-95f0c49a50dd5aad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/StateLegislatorActivityFeed.tsx:", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/StateLegislatorActivityFeed.tsx:63"}, "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-86778b4468ad941e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/StateLegislatorBillsList.tsx:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/StateLegislatorBillsList.tsx:53"}, "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-fb557b6f90deb862", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/StateLegislatorVotingRecord.tsx:", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/StateLegislatorVotingRecord.tsx:74"}, "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-00606da6030391d1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/SimpleStateLegislatorProfile.tsx", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/SimpleStateLegislatorProfile.tsx:164"}, "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-3172dac231d6bb76", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/WitnessSearch.tsx:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/WitnessSearch.tsx:69"}, "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-0ffccf477b983a60", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/PolicyAreaCrossDomain.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/PolicyAreaCrossDomain.tsx:22"}, "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-48f634a50d7397b9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/BillLifecycleChart.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/BillLifecycleChart.tsx:26"}, "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-5db33ed5f55ebfb5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/BillSpendingSection.tsx:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/BillSpendingSection.tsx:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-63ab171f28a74702", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/services/bill-text-fetcher.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/services/bill-text-fetcher.ts:51"}, "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-2fd8b0b901f6b27f", "name": "Legacy-named symbol `isOld` in src/features/legislation/services/ai/bill-summary-cache.ts:359", "shortDescription": {"text": "Legacy-named symbol `isOld` in src/features/legislation/services/ai/bill-summary-cache.ts:359"}, "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-b3dfa6557c50df0f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/search/components/AdvancedSearch.tsx:164", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/search/components/AdvancedSearch.tsx:164"}, "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-af8a4c04773d1a95", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/committees/components/CommitteeHearings.tsx:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/committees/components/CommitteeHearings.tsx:34"}, "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-44e6d8e684089bac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/committees/components/CommitteeRegulations.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/committees/components/CommitteeRegulations.tsx:30"}, "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-636bda4e907f44d6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/CommunityProfileSection.tsx:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/CommunityProfileSection.tsx:70"}, "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-7a34ad66d96aadda", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/DistrictRelevantBills.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/DistrictRelevantBills.tsx:32"}, "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-30df9c46e95adc2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/EconomicIndicatorsSection.tsx:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/EconomicIndicatorsSection.tsx:17"}, "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-0c30f46ac5cd1025", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/HousingAffordabilitySection.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/HousingAffordabilitySection.tsx:50"}, "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-998705361668d8c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/DistrictMap.tsx:394", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/DistrictMap.tsx:394"}, "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-16e252af0c793593", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/NeighboringDistricts.tsx:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/NeighboringDistricts.tsx:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92df6dbea8d56f9f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/RealDistrictBoundaryMap.tsx:201", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/RealDistrictBoundaryMap.tsx:201"}, "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-f9eecc6d89d9a8f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/AddressRefinement.tsx:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/AddressRefinement.tsx:88"}, "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-fe63fffadeaabae0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/InteractiveDistrictMap.tsx:194", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/InteractiveDistrictMap.tsx:194"}, "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-7ab50655077e5e22", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/trading-cards/card-data.ts:257", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/trading-cards/card-data.ts:257"}, "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-84abca8a040b51a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/trading-cards/components/TradingCardGrid.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/trading-cards/components/TradingCardGrid.tsx:57"}, "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-2fc23a0f4a15bc52", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/news/components/SimpleNewsSection.tsx:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/news/components/SimpleNewsSection.tsx:71"}, "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-b81c698dd1f49f1e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/news/components/SimpleGoogleNewsFeed.tsx:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/news/components/SimpleGoogleNewsFeed.tsx:91"}, "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-b6446bfd99c7881e", "name": "Legacy-named symbol `hoursOld` in src/features/news/services/news-clustering-engine.ts:110", "shortDescription": {"text": "Legacy-named symbol `hoursOld` in src/features/news/services/news-clustering-engine.ts:110"}, "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-3407fa7c10207fa9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/shared/components/providers/SWRProvider.tsx:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/shared/components/providers/SWRProvider.tsx:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d159bb126bba8e9e", "name": "Legacy-named symbol `cdLegacy` in src/lib/census-geocoder.ts:337", "shortDescription": {"text": "Legacy-named symbol `cdLegacy` in src/lib/census-geocoder.ts:337"}, "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-50ddfd818fb5ebf5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/census-api.ts:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/census-api.ts:117"}, "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-bb34d7089e6c2297", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/map-tiles.ts:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/map-tiles.ts:107"}, "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-7ec4e12f6d66a8f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/rss-feeds.ts:188", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/rss-feeds.ts:188"}, "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-781d65db730a1b53", "name": "Commented-code block (5 lines) in src/lib/openstates-api.ts:485", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/openstates-api.ts:485"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eea0b874ed202787", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/multi-district/detection.ts:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/multi-district/detection.ts:112"}, "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-4a3bc73ef1107da2", "name": "Commented-code block (12 lines) in src/lib/intelligence/analyzers/vote-finance-analyzer.ts:89", "shortDescription": {"text": "Commented-code block (12 lines) in src/lib/intelligence/analyzers/vote-finance-analyzer.ts:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5832f5734c63326a", "name": "Commented-code block (5 lines) in src/lib/intelligence/analyzers/civic-brief-assembler.ts:197", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/intelligence/analyzers/civic-brief-assembler.ts:197"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f88bff9c9707faf2", "name": "Commented-code block (5 lines) in src/lib/intelligence/analyzers/vote-prediction-analyzer.ts:126", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/intelligence/analyzers/vote-prediction-analyzer.ts:126"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63180d16a25ab2a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/intelligence/analyzers/lobbying-pipeline-analyzer.ts:443", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/intelligence/analyzers/lobbying-pipeline-analyzer.ts:443"}, "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-588612ae8cef172b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api/middleware.ts:226", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api/middleware.ts:226"}, "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-75f56d47e9925e02", "name": "Legacy-named symbol `rest_v1` in src/lib/api/wikipedia.ts:122", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in src/lib/api/wikipedia.ts:122"}, "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-0e420c74eb2eb4a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/helpers/performance.ts:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/helpers/performance.ts:144"}, "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-1fadcabac5dbb6cb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mesh/district-profile.ts:404", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mesh/district-profile.ts:404"}, "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-37e88c50310c73a9", "name": "Commented-code block (5 lines) in src/lib/questions/template-data-fetchers.ts:205", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/questions/template-data-fetchers.ts:205"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0a800a97e54cb8b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/senate-lobbying-api.ts:280", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/senate-lobbying-api.ts:280"}, "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-43ab6186fc53ed1b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/fred-economic-service.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/fred-economic-service.ts:35"}, "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-b923fc0fb4c47ac9", "name": "Commented-code block (8 lines) in src/lib/data-sources/cms-provider-service.ts:23", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/data-sources/cms-provider-service.ts:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47cedae95562e37f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/sec-edgar-service.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/sec-edgar-service.ts:32"}, "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-3982e3e3d35f0dab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/house-disclosure-service.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/house-disclosure-service.ts:56"}, "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-855f15da47e63d93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/senate-disclosure-service.ts:168", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/senate-disclosure-service.ts:168"}, "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-2db766ca321fa335", "name": "Commented-code block (6 lines) in src/lib/fec/fec-api-service.ts:537", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/fec/fec-api-service.ts:537"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-301654a115a02903", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/fec/dataProcessor.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/fec/dataProcessor.ts:74"}, "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-5f222e6a2aaa7549", "name": "Commented-code block (5 lines) in src/lib/fec/finance-aggregator.ts:636", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/fec/finance-aggregator.ts:636"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4114542e4748f1e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mcp/tools/finance.ts:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mcp/tools/finance.ts:124"}, "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-91327708a48b96b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mcp/tools/civic.ts:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mcp/tools/civic.ts:63"}, "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-4c77a342c10ab96d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mcp/tools/legislation.ts:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mcp/tools/legislation.ts:45"}, "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-25e2897ec31db905", "name": "Commented-code block (6 lines) in src/lib/errors/ErrorHandlers.ts:361", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/errors/ErrorHandlers.ts:361"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d789e764cce49370", "name": "Commented-code block (6 lines) in src/lib/services/committee-activity.service.ts:274", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/services/committee-activity.service.ts:274"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f46dcbcca31a710f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/committee-activity.service.ts:252", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/committee-activity.service.ts:252"}, "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-75aa2bd284c85d90", "name": "Commented-code block (5 lines) in src/lib/services/committee.service.ts:468", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/services/committee.service.ts:468"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3748f5e546632e44", "name": "Legacy-named symbol `rest_v1` in src/lib/services/wikipedia.service.ts:66", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in src/lib/services/wikipedia.service.ts:66"}, "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-1cdc914b5411dcb1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/wikipedia.service.ts:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/wikipedia.service.ts:87"}, "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-4fb0adaee2ea5602", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/google-news-rss.ts:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/google-news-rss.ts:57"}, "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-e0970bcf9c985bde", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/bill.service.ts:189", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/bill.service.ts:189"}, "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-b6f3a952e5ba2702", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/census-api.service.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/census-api.service.ts:32"}, "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-4991bfa7e32de699", "name": "Commented-code block (7 lines) in src/lib/cache/redis-client.ts:315", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/cache/redis-client.ts:315"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cbb790c585170e81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/cache/redis-client.ts:322", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/cache/redis-client.ts:322"}, "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-9e50d87859a1821c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/state-event-detector.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/state-event-detector.ts:67"}, "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-b7bf2721a95156fd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/hearing-detector.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/hearing-detector.ts:37"}, "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-0e72346384313a81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/executive-order-detector.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/executive-order-detector.ts:40"}, "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-3a48d8a49038ff2a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/comment-period-detector.ts:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/comment-period-detector.ts:44"}, "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-9fc8926cc48d21e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/bill-detector.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/bill-detector.ts:39"}, "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-16ef42d9b559c715", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/district-lookup.ts:446", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/district-lookup.ts:446"}, "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-db41a140716468b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/api/base.service.ts:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/api/base.service.ts:84"}, "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-d77f25893c72601f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/core/representatives-core.service.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/core/representatives-core.service.ts:11"}, "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-1a1844105cf967f1", "name": "Legacy-named symbol `rest_v1` in src/services/core/state-legislature-core.service.ts:1327", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in src/services/core/state-legislature-core.service.ts:1327"}, "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-a627a6bb3a9d42ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/core/state-legislature-core.service.ts:1313", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/core/state-legislature-core.service.ts:1313"}, "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-2cc641bb657d9137", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/ai/summarization.service.ts:330", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/ai/summarization.service.ts:330"}, "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-08607e424540eb56", "name": "Commented-code block (6 lines) in src/__tests__/intelligence/anomaly-detection.test.ts:31", "shortDescription": {"text": "Commented-code block (6 lines) in src/__tests__/intelligence/anomaly-detection.test.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-c8d0286ba9230e55", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/features/districts/components/CommentCountBadge.test.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/features/districts/components/CommentCountBadge.test.tsx:41"}, "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-26ab717ea73054e9", "name": "Commented-code block (6 lines) in src/__tests__/lib/fec/finance-aggregator-from-aggregates.test.ts:135", "shortDescription": {"text": "Commented-code block (6 lines) in src/__tests__/lib/fec/finance-aggregator-from-aggregates.test.ts:135"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0930641ab52048f8", "name": "Commented-code block (7 lines) in src/__tests__/lib/services/committee-activity.service.test.ts:43", "shortDescription": {"text": "Commented-code block (7 lines) in src/__tests__/lib/services/committee-activity.service.test.ts:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89e2497362552f2f", "name": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/EmbedMode.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/EmbedMode.jsx: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-1fd54754dbbdc129", "name": "Commented-code block (6 lines) in docs/design/civ-iq-redesign/project/redesign/design-canvas.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/design/civ-iq-redesign/project/redesign/design-canvas.jsx: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-70f5d73a5e2b9e72", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/design/civ-iq-redesign/project/redesign/design-canvas.jsx:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/design/civ-iq-redesign/project/redesign/design-canvas.jsx:62"}, "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-332884b14088b918", "name": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/AISurface.jsx:752", "shortDescription": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/AISurface.jsx:752"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6776cd623feb699c", "name": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/ProfileRefined.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/ProfileRefined.jsx: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-935bc9110ef6a45f", "name": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/SearchVariants.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/SearchVariants.jsx: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-7f5bce4d8e0610de", "name": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/handoff/reference-jsx/ProfileRefined.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/handoff/reference-jsx/ProfileRefined.jsx: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-7973d6f5a08aa47f", "name": "Commented-code block (6 lines) in docs/design/civ-iq-redesign/project/design_handoff_official_profile/designs/design-can", "shortDescription": {"text": "Commented-code block (6 lines) in docs/design/civ-iq-redesign/project/design_handoff_official_profile/designs/design-canvas.jsx: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-0dac1b04fc6fea93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/design/civ-iq-redesign/project/design_handoff_official_profile/design", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/design/civ-iq-redesign/project/design_handoff_official_profile/designs/design-canvas.jsx:62"}, "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-b4d4d8879c2ac905", "name": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/design_handoff_official_profile/designs/ProfileRef", "shortDescription": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/design_handoff_official_profile/designs/ProfileRefined.jsx: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-2153571a4d5dd99f", "name": "78 env vars used in code but missing from .env.example", "shortDescription": {"text": "78 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ACTIVITYPUB_DOMAIN`, `ACTIVITYPUB_PRIVATE_KEY`, `ACTIVITYPUB_PUBLIC_KEY`, `AI_MODEL`, `ALERT_PHYSICAL_ADDRESS`, `ALERT_TOKEN_SECRET`, `ALLOWED_ORIGINS`, `ALLOW_SENATE_XML` + 70 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a19d6097e23eb401", "name": "Dangling fetch: GET http://localhost:3000/api/health (scripts/test-profile-enhancement.js:100)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/health (scripts/test-profile-enhancement.js:100)"}, "fullDescription": {"text": "`scripts/test-profile-enhancement.js:100` calls `GET http://localhost:3000/api/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/health`\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-707f26c275918f4f", "name": "Dangling fetch: POST https://query.wikidata.org/sparql (scripts/generate-committee-biographies.mjs:234)", "shortDescription": {"text": "Dangling fetch: POST https://query.wikidata.org/sparql (scripts/generate-committee-biographies.mjs:234)"}, "fullDescription": {"text": "`scripts/generate-committee-biographies.mjs:234` calls `POST https://query.wikidata.org/sparql` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/query.wikidata.org/sparql`\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-7cb52b720906802a", "name": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=${zip} (scripts/test-census-integration.js:27)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=${zip} (scripts/test-census-integration.js:27)"}, "fullDescription": {"text": "`scripts/test-census-integration.js:27` calls `GET http://localhost:3000/api/representatives?zip=${zip}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives`\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-8430bb16adedf924", "name": "Dangling fetch: GET http://localhost:3000/api/health (scripts/test-census-integration.js:56)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/health (scripts/test-census-integration.js:56)"}, "fullDescription": {"text": "`scripts/test-census-integration.js:56` calls `GET http://localhost:3000/api/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/health`\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-10c647d51a8c1287", "name": "Dangling fetch: GET https://api.congress.gov/v3/member?api_key=${process.env.CONGRESS_API_KEY}&limit=2&format=json (scri", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/member?api_key=${process.env.CONGRESS_API_KEY}&limit=2&format=json (scripts/test/test-external-apis.js:19)"}, "fullDescription": {"text": "`scripts/test/test-external-apis.js:19` calls `GET https://api.congress.gov/v3/member?api_key=${process.env.CONGRESS_API_KEY}&limit=2&format=json` 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.congress.gov/v3/member`\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-89e256be7e473c3f", "name": "Dangling fetch: GET https://api.open.fec.gov/v1/candidates/?api_key=${process.env.FEC_API_KEY}&per_page=2&is_active_cand", "shortDescription": {"text": "Dangling fetch: GET https://api.open.fec.gov/v1/candidates/?api_key=${process.env.FEC_API_KEY}&per_page=2&is_active_candidate=true (scripts/test/test-external-apis.js:47)"}, "fullDescription": {"text": "`scripts/test/test-external-apis.js:47` calls `GET https://api.open.fec.gov/v1/candidates/?api_key=${process.env.FEC_API_KEY}&per_page=2&is_active_candidate=true` 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.open.fec.gov/v1/candidates`\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-5d7b5ce1a708ea09", "name": "Dangling fetch: GET https://v3.openstates.org/people?jurisdiction=us&per_page=2 (scripts/test/test-external-apis.js:121)", "shortDescription": {"text": "Dangling fetch: GET https://v3.openstates.org/people?jurisdiction=us&per_page=2 (scripts/test/test-external-apis.js:121)"}, "fullDescription": {"text": "`scripts/test/test-external-apis.js:121` calls `GET https://v3.openstates.org/people?jurisdiction=us&per_page=2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/v3.openstates.org/people`\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-8334fc0129fd1777", "name": "Dangling fetch: GET http://localhost:3000/api/debug/congress-current (scripts/test/debug-congress-data.js:7)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/debug/congress-current (scripts/test/debug-congress-data.js:7)"}, "fullDescription": {"text": "`scripts/test/debug-congress-data.js:7` calls `GET http://localhost:3000/api/debug/congress-current` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/debug/congress-current`\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-3384b8a141a80b23", "name": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=${zip} (scripts/test/debug-congress-data.js:34)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=${zip} (scripts/test/debug-congress-data.js:34)"}, "fullDescription": {"text": "`scripts/test/debug-congress-data.js:34` calls `GET http://localhost:3000/api/representatives?zip=${zip}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives`\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-56b9f4b60ecc7476", "name": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=29650 (scripts/test/debug-congress-data.js:63)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=29650 (scripts/test/debug-congress-data.js:63)"}, "fullDescription": {"text": "`scripts/test/debug-congress-data.js:63` calls `GET http://localhost:3000/api/representatives?zip=29650` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives`\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-e2b14f64512f9751", "name": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=${test.zip} (scripts/test/test-reps-coverage.js:24)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=${test.zip} (scripts/test/test-reps-coverage.js:24)"}, "fullDescription": {"text": "`scripts/test/test-reps-coverage.js:24` calls `GET http://localhost:3000/api/representatives?zip=${test.zip}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives`\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-d9e0ef885dc9d5a1", "name": "Dangling fetch: GET http://localhost:3000/api/representatives-search?q=${encodeURIComponent(test.query)} (scripts/test/t", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives-search?q=${encodeURIComponent(test.query)} (scripts/test/test-address-search.js:38)"}, "fullDescription": {"text": "`scripts/test/test-address-search.js:38` calls `GET http://localhost:3000/api/representatives-search?q=${encodeURIComponent(test.query)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives-search`\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-f94d5ce18e339f64", "name": "Dangling fetch: GET http://localhost:3000/api/health (scripts/test/test-api-health.js:8)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/health (scripts/test/test-api-health.js:8)"}, "fullDescription": {"text": "`scripts/test/test-api-health.js:8` calls `GET http://localhost:3000/api/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/health`\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-980aa0acb2404c7e", "name": "Dangling fetch: GET http://localhost:3000/api/env-check (scripts/test/test-api-health.js:22)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/env-check (scripts/test/test-api-health.js:22)"}, "fullDescription": {"text": "`scripts/test/test-api-health.js:22` calls `GET http://localhost:3000/api/env-check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/env-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-f1b45f2eb83f3077", "name": "Dangling fetch: GET http://localhost:3000/api/debug (scripts/test/test-api-health.js:36)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/debug (scripts/test/test-api-health.js:36)"}, "fullDescription": {"text": "`scripts/test/test-api-health.js:36` calls `GET http://localhost:3000/api/debug` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/debug`\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-788571e84b9d789d", "name": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=48221 (scripts/test/test-api-health.js:55)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=48221 (scripts/test/test-api-health.js:55)"}, "fullDescription": {"text": "`scripts/test/test-api-health.js:55` calls `GET http://localhost:3000/api/representatives?zip=48221` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives`\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-91e457b55fd2c3fb", "name": "Dangling fetch: GET http://localhost:3000/api/representative/S001184 (scripts/test/test-api-health.js:71)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representative/S001184 (scripts/test/test-api-health.js:71)"}, "fullDescription": {"text": "`scripts/test/test-api-health.js:71` calls `GET http://localhost:3000/api/representative/S001184` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representative/s001184`\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-464e0114ff0693cd", "name": "Dangling fetch: GET http://localhost:3000/api/representative/S001184/committees (scripts/test/test-api-health.js:89)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representative/S001184/committees (scripts/test/test-api-health.js:89)"}, "fullDescription": {"text": "`scripts/test/test-api-health.js:89` calls `GET http://localhost:3000/api/representative/S001184/committees` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representative/s001184/committees`\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-d3747b9d1ebfce01", "name": "Dangling fetch: GET http://localhost:3000/api/representative/S001184/votes (scripts/test/test-api-health.js:106)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representative/S001184/votes (scripts/test/test-api-health.js:106)"}, "fullDescription": {"text": "`scripts/test/test-api-health.js:106` calls `GET http://localhost:3000/api/representative/S001184/votes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representative/s001184/votes`\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-7bac7a3e41b3dbc0", "name": "Dangling fetch: GET http://localhost:3000/api/representative/S001184/finance (scripts/test/test-api-health.js:121)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representative/S001184/finance (scripts/test/test-api-health.js:121)"}, "fullDescription": {"text": "`scripts/test/test-api-health.js:121` calls `GET http://localhost:3000/api/representative/S001184/finance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representative/s001184/finance`\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-029cd6ff3af286ca", "name": "Dangling fetch: GET https://raw.githubusercontent.com/unitedstates/congress-legislators/main/legislators-current.yaml (s", "shortDescription": {"text": "Dangling fetch: GET https://raw.githubusercontent.com/unitedstates/congress-legislators/main/legislators-current.yaml (scripts/test/final-validation.js:10)"}, "fullDescription": {"text": "`scripts/test/final-validation.js:10` calls `GET https://raw.githubusercontent.com/unitedstates/congress-legislators/main/legislators-current.yaml` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/raw.githubusercontent.com/unitedstates/congress-legislators/main/legislators-current.yaml`\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-c3c68f63f6a0d3b9", "name": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=29401 (scripts/test/debug-sc-reps.js:20)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=29401 (scripts/test/debug-sc-reps.js:20)"}, "fullDescription": {"text": "`scripts/test/debug-sc-reps.js:20` calls `GET http://localhost:3000/api/representatives?zip=29401` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives`\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-d4a9973bc754652b", "name": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=48221 (scripts/test/debug-sc-reps.js:27)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=48221 (scripts/test/debug-sc-reps.js:27)"}, "fullDescription": {"text": "`scripts/test/debug-sc-reps.js:27` calls `GET http://localhost:3000/api/representatives?zip=48221` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives`\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-d26ffd57eab5bb1e", "name": "Dangling fetch: GET http://localhost:3000/api/representatives-multi-district?zip=${zipCode} (scripts/test/test-multi-dis", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives-multi-district?zip=${zipCode} (scripts/test/test-multi-district.js:14)"}, "fullDescription": {"text": "`scripts/test/test-multi-district.js:14` calls `GET http://localhost:3000/api/representatives-multi-district?zip=${zipCode}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives-multi-district`\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-c91debea0ed959ff", "name": "Dangling fetch: GET http://localhost:3000/api/representatives/all (scripts/generate-wikipedia-mappings.ts:154)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives/all (scripts/generate-wikipedia-mappings.ts:154)"}, "fullDescription": {"text": "`scripts/generate-wikipedia-mappings.ts:154` calls `GET http://localhost:3000/api/representatives/all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives/all`\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-fa9ee839866f1f0a", "name": "Dangling fetch: GET http://localhost:3000/api/health/redis (scripts/monitor-deployment.ts:14)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/health/redis (scripts/monitor-deployment.ts:14)"}, "fullDescription": {"text": "`scripts/monitor-deployment.ts:14` calls `GET http://localhost:3000/api/health/redis` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/health/redis`\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-027c96061e880896", "name": "Dangling fetch: GET http://localhost:3000/api/cache/status (scripts/monitor-deployment.ts:32)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/cache/status (scripts/monitor-deployment.ts:32)"}, "fullDescription": {"text": "`scripts/monitor-deployment.ts:32` calls `GET http://localhost:3000/api/cache/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/cache/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-03ea7cf291eae542", "name": "Dangling fetch: POST https://openstates.org/graphql (scripts/diagnose-apis.ts:243)", "shortDescription": {"text": "Dangling fetch: POST https://openstates.org/graphql (scripts/diagnose-apis.ts:243)"}, "fullDescription": {"text": "`scripts/diagnose-apis.ts:243` calls `POST https://openstates.org/graphql` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/openstates.org/graphql`\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-ecfedcbff5821e3e", "name": "Dangling fetch: GET http://localhost:3000/api/representatives/all (scripts/generate-comprehensive-mappings.ts:30)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives/all (scripts/generate-comprehensive-mappings.ts:30)"}, "fullDescription": {"text": "`scripts/generate-comprehensive-mappings.ts:30` calls `GET http://localhost:3000/api/representatives/all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/representatives/all`\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-67633e282d098957", "name": "Dangling fetch: GET /api/federal-register/comment-periods (src/app/(civic)/comment-periods/page.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/federal-register/comment-periods (src/app/(civic)/comment-periods/page.tsx:47)"}, "fullDescription": {"text": "`src/app/(civic)/comment-periods/page.tsx:47` calls `GET /api/federal-register/comment-periods` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/federal-register/comment-periods`\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-169b8ec6ea795f7f", "name": "Dangling fetch: POST /api/federal-register/comments/counts (src/app/(civic)/comment-periods/page.tsx:71)", "shortDescription": {"text": "Dangling fetch: POST /api/federal-register/comments/counts (src/app/(civic)/comment-periods/page.tsx:71)"}, "fullDescription": {"text": "`src/app/(civic)/comment-periods/page.tsx:71` calls `POST /api/federal-register/comments/counts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/federal-register/comments/counts`\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-15bb56c7b7499e56", "name": "Dangling fetch: GET /api/spending/district/${id} (src/app/(civic)/spending/page.tsx:36)", "shortDescription": {"text": "Dangling fetch: GET /api/spending/district/${id} (src/app/(civic)/spending/page.tsx:36)"}, "fullDescription": {"text": "`src/app/(civic)/spending/page.tsx:36` calls `GET /api/spending/district/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spending/district/<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-09e440266e88dc7c", "name": "Dangling fetch: GET /api/spending/geography?${params} (src/app/(civic)/spending/page.tsx:224)", "shortDescription": {"text": "Dangling fetch: GET /api/spending/geography?${params} (src/app/(civic)/spending/page.tsx:224)"}, "fullDescription": {"text": "`src/app/(civic)/spending/page.tsx:224` calls `GET /api/spending/geography?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spending/geography`\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-f67379f415f655ac", "name": "Dangling fetch: GET /api/bills/latest?limit=50 (src/app/(civic)/legislation/page.tsx:79)", "shortDescription": {"text": "Dangling fetch: GET /api/bills/latest?limit=50 (src/app/(civic)/legislation/page.tsx:79)"}, "fullDescription": {"text": "`src/app/(civic)/legislation/page.tsx:79` calls `GET /api/bills/latest?limit=50` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bills/latest`\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-423d54470ac9bcc4", "name": "Dangling fetch: GET /api/state-bills/${state.toUpperCase()}?${params} (src/app/(civic)/state-bills/[state]/page.tsx:347)", "shortDescription": {"text": "Dangling fetch: GET /api/state-bills/${state.toUpperCase()}?${params} (src/app/(civic)/state-bills/[state]/page.tsx:347)"}, "fullDescription": {"text": "`src/app/(civic)/state-bills/[state]/page.tsx:347` calls `GET /api/state-bills/${state.toUpperCase()}?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/state-bills/<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-76c2fe90e8551d07", "name": "Dangling fetch: GET /api/federal-register?${params} (src/app/(civic)/regulations/LegacyRegulationsPage.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/federal-register?${params} (src/app/(civic)/regulations/LegacyRegulationsPage.tsx:73)"}, "fullDescription": {"text": "`src/app/(civic)/regulations/LegacyRegulationsPage.tsx:73` calls `GET /api/federal-register?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/federal-register`\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-455dc0082039e53a", "name": "Dangling fetch: GET /api/analytics/reading-levels (src/app/(civic)/transparency/reading-levels/page.tsx:39)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/reading-levels (src/app/(civic)/transparency/reading-levels/page.tsx:39)"}, "fullDescription": {"text": "`src/app/(civic)/transparency/reading-levels/page.tsx:39` calls `GET /api/analytics/reading-levels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/reading-levels`\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-31e11444c7bd8300", "name": "Dangling fetch: GET /api/elections/${year}?${params} (src/app/(civic)/elections/state/page.tsx:100)", "shortDescription": {"text": "Dangling fetch: GET /api/elections/${year}?${params} (src/app/(civic)/elections/state/page.tsx:100)"}, "fullDescription": {"text": "`src/app/(civic)/elections/state/page.tsx:100` calls `GET /api/elections/${year}?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/elections/<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-32eb638f045cf5c0", "name": "Dangling fetch: GET /api/elections/2024?${params} (src/app/(civic)/elections/state/page.tsx:123)", "shortDescription": {"text": "Dangling fetch: GET /api/elections/2024?${params} (src/app/(civic)/elections/state/page.tsx:123)"}, "fullDescription": {"text": "`src/app/(civic)/elections/state/page.tsx:123` calls `GET /api/elections/2024?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/elections/<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-a36dac6825b12b9a", "name": "Dangling fetch: GET /api/elections/2024?${params} (src/app/(civic)/elections/federal/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: GET /api/elections/2024?${params} (src/app/(civic)/elections/federal/page.tsx:97)"}, "fullDescription": {"text": "`src/app/(civic)/elections/federal/page.tsx:97` calls `GET /api/elections/2024?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/elections/<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-d1fe3d8bcb177109", "name": "Dangling fetch: POST /api/intelligence/address/money-report (src/app/(civic)/your-reps/money-report/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: POST /api/intelligence/address/money-report (src/app/(civic)/your-reps/money-report/page.tsx:87)"}, "fullDescription": {"text": "`src/app/(civic)/your-reps/money-report/page.tsx:87` calls `POST /api/intelligence/address/money-report` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/intelligence/address/money-report`\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-6491e3dc7c783bbf", "name": "Dangling fetch: GET /api/districts/${districtId} (src/app/(civic)/districts/[districtId]/page.tsx:154)", "shortDescription": {"text": "Dangling fetch: GET /api/districts/${districtId} (src/app/(civic)/districts/[districtId]/page.tsx:154)"}, "fullDescription": {"text": "`src/app/(civic)/districts/[districtId]/page.tsx:154` calls `GET /api/districts/${districtId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/districts/<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-3b5116833c076201", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&offset=${offset}&sort=${sort} (src/app/a", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&offset=${offset}&sort=${sort} (src/app/api/v1/bills/route.ts:49)"}, "fullDescription": {"text": "`src/app/api/v1/bills/route.ts:49` calls `GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&offset=${offset}&sort=${sort}` 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.congress.gov/v3/bill/<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-4e11101f6ec1ab5e", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}?format=json (src/app/api/v1/bills", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}?format=json (src/app/api/v1/bills/[billId]/route.ts:76)"}, "fullDescription": {"text": "`src/app/api/v1/bills/[billId]/route.ts:76` calls `GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}?format=json` 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.congress.gov/v3/bill/<p>/<p>/<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-99c68ff145666fd3", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&sort=${sort}&format=json (src/app/api/bi", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&sort=${sort}&format=json (src/app/api/bills/latest/route.ts:25)"}, "fullDescription": {"text": "`src/app/api/bills/latest/route.ts:25` calls `GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&sort=${sort}&format=json` 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.congress.gov/v3/bill/<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-334234159fdc1191", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&sort=updateDate+desc&format=json (src/ap", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&sort=updateDate+desc&format=json (src/app/api/feed/bills/latest/route.ts:46)"}, "fullDescription": {"text": "`src/app/api/feed/bills/latest/route.ts:46` calls `GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&sort=updateDate+desc&format=json` 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.congress.gov/v3/bill/<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-19817301814d69f2", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}?format=json (src/app/api/feed/bil", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}?format=json (src/app/api/feed/bill/[billId]/route.ts:52)"}, "fullDescription": {"text": "`src/app/api/feed/bill/[billId]/route.ts:52` calls `GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}?format=json` 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.congress.gov/v3/bill/<p>/<p>/<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-bdca94b4224a0383", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}/actions?format=json&limit=50 (src", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}/actions?format=json&limit=50 (src/app/api/feed/bill/[billId]/route.ts:78)"}, "fullDescription": {"text": "`src/app/api/feed/bill/[billId]/route.ts:78` calls `GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}/actions?format=json&limit=50` 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.congress.gov/v3/bill/<p>/<p>/<p>/actions`\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-8358e25cf6c43b54", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=100&sort=updateDate+desc (src/app/api/search/unif", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=100&sort=updateDate+desc (src/app/api/search/unified/route.ts:349)"}, "fullDescription": {"text": "`src/app/api/search/unified/route.ts:349` calls `GET https://api.congress.gov/v3/bill/${congress}?limit=100&sort=updateDate+desc` 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.congress.gov/v3/bill/<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-2153567c5baa520d", "name": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}?limit=${limit}&offset=${offset}&format=json (sr", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}?limit=${limit}&offset=${offset}&format=json (src/app/api/committees/route.ts:168)"}, "fullDescription": {"text": "`src/app/api/committees/route.ts:168` calls `GET https://api.congress.gov/v3/committee/${chamberName}?limit=${limit}&offset=${offset}&format=json` 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.congress.gov/v3/committee/<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-d2077ea319ff8caa", "name": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/members?format=json (sr", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/members?format=json (src/app/api/committees/route.ts:260)"}, "fullDescription": {"text": "`src/app/api/committees/route.ts:260` calls `GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/members?format=json` 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.congress.gov/v3/committee/<p>/<p>/members`\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-b2087bad143845bc", "name": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/subcommittees?format=js", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/subcommittees?format=json (src/app/api/committees/route.ts:326)"}, "fullDescription": {"text": "`src/app/api/committees/route.ts:326` calls `GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/subcommittees?format=json` 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.congress.gov/v3/committee/<p>/<p>/subcommittees`\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-fe7a48ee2b5af1f4", "name": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/subcommittees/${subcomm", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/subcommittees/${subcommittee.systemCode}/members?format=json (src/app/api/committees/route.ts:357)"}, "fullDescription": {"text": "`src/app/api/committees/route.ts:357` calls `GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/subcommittees/${subcommittee.systemCode}/members?format=json` 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.congress.gov/v3/committee/<p>/<p>/subcommittees/<p>/members`\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-ec81bcf5845d33b9", "name": "Dangling fetch: GET https://api.congress.gov/v3/committee/joint?limit=50&format=json (src/app/api/committees/route.ts:40", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/committee/joint?limit=50&format=json (src/app/api/committees/route.ts:409)"}, "fullDescription": {"text": "`src/app/api/committees/route.ts:409` calls `GET https://api.congress.gov/v3/committee/joint?limit=50&format=json` 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.congress.gov/v3/committee/joint`\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-0d75b6c7471e1dfc", "name": "Dangling fetch: GET https://api.bls.gov/publicAPI/v2/timeseries/data/LAUST${stateFips}0000000000003 (src/app/api/distric", "shortDescription": {"text": "Dangling fetch: GET https://api.bls.gov/publicAPI/v2/timeseries/data/LAUST${stateFips}0000000000003 (src/app/api/districts/[districtId]/economic-profile/route.ts:84)"}, "fullDescription": {"text": "`src/app/api/districts/[districtId]/economic-profile/route.ts:84` calls `GET https://api.bls.gov/publicAPI/v2/timeseries/data/LAUST${stateFips}0000000000003` 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.bls.gov/publicapi/v2/timeseries/data/laust/<p>0000000000003`\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-476dd534fedcd56a", "name": "Dangling fetch: GET https://api.bls.gov/publicAPI/v2/timeseries/data/LAUST${stateFips}0000000000006 (src/app/api/distric", "shortDescription": {"text": "Dangling fetch: GET https://api.bls.gov/publicAPI/v2/timeseries/data/LAUST${stateFips}0000000000006 (src/app/api/districts/[districtId]/economic-profile/route.ts:87)"}, "fullDescription": {"text": "`src/app/api/districts/[districtId]/economic-profile/route.ts:87` calls `GET https://api.bls.gov/publicAPI/v2/timeseries/data/LAUST${stateFips}0000000000006` 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.bls.gov/publicapi/v2/timeseries/data/laust/<p>0000000000006`\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-2f49c68860118917", "name": "Dangling fetch: GET https://api.congress.gov/v3/member/${upperBioguideId}?format=json (src/app/api/representative/[biogu", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/member/${upperBioguideId}?format=json (src/app/api/representative/[bioguideId]/route.ts:278)"}, "fullDescription": {"text": "`src/app/api/representative/[bioguideId]/route.ts:278` calls `GET https://api.congress.gov/v3/member/${upperBioguideId}?format=json` 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.congress.gov/v3/member/<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-2b6b3d4cbd2bac2c", "name": "Dangling fetch: GET https://api.congress.gov/v3/member?currentMember=true&limit=250&format=json (src/app/api/representat", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/member?currentMember=true&limit=250&format=json (src/app/api/representative/[bioguideId]/leadership/route.ts:27)"}, "fullDescription": {"text": "`src/app/api/representative/[bioguideId]/leadership/route.ts:27` calls `GET https://api.congress.gov/v3/member?currentMember=true&limit=250&format=json` 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.congress.gov/v3/member`\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-b0dbb20feb954f7c", "name": "Dangling fetch: GET https://v3.openstates.org/jurisdictions/${stateAbbrev} (src/app/api/representative/[bioguideId]/stat", "shortDescription": {"text": "Dangling fetch: GET https://v3.openstates.org/jurisdictions/${stateAbbrev} (src/app/api/representative/[bioguideId]/state-legislature/route.ts:206)"}, "fullDescription": {"text": "`src/app/api/representative/[bioguideId]/state-legislature/route.ts:206` calls `GET https://v3.openstates.org/jurisdictions/${stateAbbrev}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/v3.openstates.org/jurisdictions/<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-669ff9954b5cc01c", "name": "Dangling fetch: GET https://v3.openstates.org/bills?jurisdiction=${stateAbbrev}&sort=updated_desc&per_page=15 (src/app/a", "shortDescription": {"text": "Dangling fetch: GET https://v3.openstates.org/bills?jurisdiction=${stateAbbrev}&sort=updated_desc&per_page=15 (src/app/api/representative/[bioguideId]/state-legislature/route.ts:413)"}, "fullDescription": {"text": "`src/app/api/representative/[bioguideId]/state-legislature/route.ts:413` calls `GET https://v3.openstates.org/bills?jurisdiction=${stateAbbrev}&sort=updated_desc&per_page=15` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/v3.openstates.org/bills`\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-fa0b6cc1789048c7", "name": "Dangling fetch: GET https://api.congress.gov/v3/member/${bioguideId}?format=json (src/app/api/representative/[bioguideId", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/member/${bioguideId}?format=json (src/app/api/representative/[bioguideId]/committees/route.ts:48)"}, "fullDescription": {"text": "`src/app/api/representative/[bioguideId]/committees/route.ts:48` calls `GET https://api.congress.gov/v3/member/${bioguideId}?format=json` 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.congress.gov/v3/member/<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-26ddaa590db022e3", "name": "Dangling fetch: GET /api/api-health (src/app/admin/api-health/page.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/api-health (src/app/admin/api-health/page.tsx:53)"}, "fullDescription": {"text": "`src/app/admin/api-health/page.tsx:53` calls `GET /api/api-health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/api-health`\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-c9c3b569f1546d14", "name": "Dangling fetch: POST https://civdotiq.org/api/intelligence/address/representatives (src/app/(public)/migrate/google-civi", "shortDescription": {"text": "Dangling fetch: POST https://civdotiq.org/api/intelligence/address/representatives (src/app/(public)/migrate/google-civic/page.tsx:126)"}, "fullDescription": {"text": "`src/app/(public)/migrate/google-civic/page.tsx:126` calls `POST https://civdotiq.org/api/intelligence/address/representatives` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/civdotiq.org/api/intelligence/address/representatives`\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-0f5110a3fa4f5862", "name": "Dangling fetch: POST https://civdotiq.org/api/geocode (src/app/(public)/migrate/google-civic/page.tsx:159)", "shortDescription": {"text": "Dangling fetch: POST https://civdotiq.org/api/geocode (src/app/(public)/migrate/google-civic/page.tsx:159)"}, "fullDescription": {"text": "`src/app/(public)/migrate/google-civic/page.tsx:159` calls `POST https://civdotiq.org/api/geocode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/civdotiq.org/api/geocode`\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-c24829be8446ede1", "name": "Dangling fetch: GET /api/search?q=${encodeURIComponent(searchQuery)} (src/app/(public)/results/page.tsx:381)", "shortDescription": {"text": "Dangling fetch: GET /api/search?q=${encodeURIComponent(searchQuery)} (src/app/(public)/results/page.tsx:381)"}, "fullDescription": {"text": "`src/app/(public)/results/page.tsx:381` calls `GET /api/search?q=${encodeURIComponent(searchQuery)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search`\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-0bfcba904f04157a", "name": "Dangling fetch: POST /api/unified-geocode (src/app/(public)/results/page.tsx:435)", "shortDescription": {"text": "Dangling fetch: POST /api/unified-geocode (src/app/(public)/results/page.tsx:435)"}, "fullDescription": {"text": "`src/app/(public)/results/page.tsx:435` calls `POST /api/unified-geocode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/unified-geocode`\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-0567238ba7edbb05", "name": "Dangling fetch: GET /api/bill/${billId} (src/app/bill/[billId]/ClientBillContent.tsx:80)", "shortDescription": {"text": "Dangling fetch: GET /api/bill/${billId} (src/app/bill/[billId]/ClientBillContent.tsx:80)"}, "fullDescription": {"text": "`src/app/bill/[billId]/ClientBillContent.tsx:80` calls `GET /api/bill/${billId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bill/<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-9a161f718fb36d06", "name": "Dangling fetch: GET /api/ai/legislative-process/${billId} (src/app/bill/[billId]/ClientBillContent.tsx:115)", "shortDescription": {"text": "Dangling fetch: GET /api/ai/legislative-process/${billId} (src/app/bill/[billId]/ClientBillContent.tsx:115)"}, "fullDescription": {"text": "`src/app/bill/[billId]/ClientBillContent.tsx:115` calls `GET /api/ai/legislative-process/${billId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/legislative-process/<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-a90e4550b596fae8", "name": "Dangling fetch: GET /api/bill/${billId}/district-impact/${district} (src/app/bill/[billId]/ClientBillContent.tsx:160)", "shortDescription": {"text": "Dangling fetch: GET /api/bill/${billId}/district-impact/${district} (src/app/bill/[billId]/ClientBillContent.tsx:160)"}, "fullDescription": {"text": "`src/app/bill/[billId]/ClientBillContent.tsx:160` calls `GET /api/bill/${billId}/district-impact/${district}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bill/<p>/district-impact/<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-ae6e2b52a0ef03bc", "name": "Dangling fetch: GET /api/districts/${targetDistrictId} (src/hooks/useEnhancedDistrictData.ts:208)", "shortDescription": {"text": "Dangling fetch: GET /api/districts/${targetDistrictId} (src/hooks/useEnhancedDistrictData.ts:208)"}, "fullDescription": {"text": "`src/hooks/useEnhancedDistrictData.ts:208` calls `GET /api/districts/${targetDistrictId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/districts/<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-bdcdab266e4c8664", "name": "Dangling fetch: GET /api/districts/${targetDistrictId} (src/hooks/useEnhancedDistrictData.ts:257)", "shortDescription": {"text": "Dangling fetch: GET /api/districts/${targetDistrictId} (src/hooks/useEnhancedDistrictData.ts:257)"}, "fullDescription": {"text": "`src/hooks/useEnhancedDistrictData.ts:257` calls `GET /api/districts/${targetDistrictId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/districts/<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-89aab3df8ccb59bd", "name": "Dangling fetch: GET /api/districts/${districtId} (src/hooks/useEnhancedDistrictData.ts:436)", "shortDescription": {"text": "Dangling fetch: GET /api/districts/${districtId} (src/hooks/useEnhancedDistrictData.ts:436)"}, "fullDescription": {"text": "`src/hooks/useEnhancedDistrictData.ts:436` calls `GET /api/districts/${districtId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/districts/<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-fd921a6e67d37ef0", "name": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/hooks/shared/useSWR.ts:13)", "shortDescription": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/hooks/shared/useSWR.ts:13)"}, "fullDescription": {"text": "`src/hooks/shared/useSWR.ts:13` calls `POST /api/representative/${bioguideId}/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representative/<p>/batch`\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-a2ceb9b7f41a59b6", "name": "Dangling fetch: GET https://api.radar.io/v1/geocode/ip (src/components/SearchForm.tsx:137)", "shortDescription": {"text": "Dangling fetch: GET https://api.radar.io/v1/geocode/ip (src/components/SearchForm.tsx:137)"}, "fullDescription": {"text": "`src/components/SearchForm.tsx:137` calls `GET https://api.radar.io/v1/geocode/ip` 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.radar.io/v1/geocode/ip`\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-01178e6daa675c28", "name": "Dangling fetch: POST /api/intelligence/address/representatives (src/components/intelligence/RepresentativeLookupForm.tsx", "shortDescription": {"text": "Dangling fetch: POST /api/intelligence/address/representatives (src/components/intelligence/RepresentativeLookupForm.tsx:106)"}, "fullDescription": {"text": "`src/components/intelligence/RepresentativeLookupForm.tsx:106` calls `POST /api/intelligence/address/representatives` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/intelligence/address/representatives`\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-5c5146526b132dda", "name": "Dangling fetch: POST /api/mesh/influence/cascade (src/components/mesh/CascadeSection.tsx:47)", "shortDescription": {"text": "Dangling fetch: POST /api/mesh/influence/cascade (src/components/mesh/CascadeSection.tsx:47)"}, "fullDescription": {"text": "`src/components/mesh/CascadeSection.tsx:47` calls `POST /api/mesh/influence/cascade` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/mesh/influence/cascade`\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-7d9d79c319e4cbb4", "name": "Dangling fetch: POST /api/mesh/influence/counterfactual (src/components/mesh/CounterfactualSection.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /api/mesh/influence/counterfactual (src/components/mesh/CounterfactualSection.tsx:68)"}, "fullDescription": {"text": "`src/components/mesh/CounterfactualSection.tsx:68` calls `POST /api/mesh/influence/counterfactual` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/mesh/influence/counterfactual`\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-41a37d1d4f63c29d", "name": "Dangling fetch: GET /api/mesh/influence/path?${params} (src/components/mesh/InfluencePathSection.tsx:126)", "shortDescription": {"text": "Dangling fetch: GET /api/mesh/influence/path?${params} (src/components/mesh/InfluencePathSection.tsx:126)"}, "fullDescription": {"text": "`src/components/mesh/InfluencePathSection.tsx:126` calls `GET /api/mesh/influence/path?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/mesh/influence/path`\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-c267cfd71c60621b", "name": "Dangling fetch: GET /api/mesh/district/${districtId} (src/components/mesh/DistrictProfileCard.tsx:42)", "shortDescription": {"text": "Dangling fetch: GET /api/mesh/district/${districtId} (src/components/mesh/DistrictProfileCard.tsx:42)"}, "fullDescription": {"text": "`src/components/mesh/DistrictProfileCard.tsx:42` calls `GET /api/mesh/district/${districtId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/mesh/district/<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-1756a32561180217", "name": "Dangling fetch: GET /api/pac/${committeeId}/info (src/components/pacs/PACProfilePage/PACProfilePage.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/pac/${committeeId}/info (src/components/pacs/PACProfilePage/PACProfilePage.tsx:64)"}, "fullDescription": {"text": "`src/components/pacs/PACProfilePage/PACProfilePage.tsx:64` calls `GET /api/pac/${committeeId}/info` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/pac/<p>/info`\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-5dc86ad40c8b5f2f", "name": "Dangling fetch: GET /api/pac/${committeeId}/totals?cycle=${cycle} (src/components/pacs/PACProfilePage/PACProfilePage.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/pac/${committeeId}/totals?cycle=${cycle} (src/components/pacs/PACProfilePage/PACProfilePage.tsx:72)"}, "fullDescription": {"text": "`src/components/pacs/PACProfilePage/PACProfilePage.tsx:72` calls `GET /api/pac/${committeeId}/totals?cycle=${cycle}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/pac/<p>/totals`\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-35b6a3a7db54abc5", "name": "Dangling fetch: GET /api/pac/${committeeId}/recipients?cycle=${cycle}&limit=12 (src/components/pacs/PACProfilePage/PACPr", "shortDescription": {"text": "Dangling fetch: GET /api/pac/${committeeId}/recipients?cycle=${cycle}&limit=12 (src/components/pacs/PACProfilePage/PACProfilePage.tsx:80)"}, "fullDescription": {"text": "`src/components/pacs/PACProfilePage/PACProfilePage.tsx:80` calls `GET /api/pac/${committeeId}/recipients?cycle=${cycle}&limit=12` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/pac/<p>/recipients`\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-486608384e35e3c7", "name": "Dangling fetch: GET /api/pac/${committeeId}/cycles (src/components/pacs/PACProfilePage/PACProfilePage.tsx:86)", "shortDescription": {"text": "Dangling fetch: GET /api/pac/${committeeId}/cycles (src/components/pacs/PACProfilePage/PACProfilePage.tsx:86)"}, "fullDescription": {"text": "`src/components/pacs/PACProfilePage/PACProfilePage.tsx:86` calls `GET /api/pac/${committeeId}/cycles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/pac/<p>/cycles`\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-b8e9458ea41c7fbc", "name": "Dangling fetch: GET /api/pac/${committeeId}/donors-by-size?cycle=${cycle} (src/components/pacs/PACProfilePage/PACProfile", "shortDescription": {"text": "Dangling fetch: GET /api/pac/${committeeId}/donors-by-size?cycle=${cycle} (src/components/pacs/PACProfilePage/PACProfilePage.tsx:92)"}, "fullDescription": {"text": "`src/components/pacs/PACProfilePage/PACProfilePage.tsx:92` calls `GET /api/pac/${committeeId}/donors-by-size?cycle=${cycle}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/pac/<p>/donors-by-size`\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-301e48e7666ebe57", "name": "Dangling fetch: GET /api/intelligence/pac/${committeeId} (src/components/pacs/PACProfilePage/PACProfilePage.tsx:98)", "shortDescription": {"text": "Dangling fetch: GET /api/intelligence/pac/${committeeId} (src/components/pacs/PACProfilePage/PACProfilePage.tsx:98)"}, "fullDescription": {"text": "`src/components/pacs/PACProfilePage/PACProfilePage.tsx:98` calls `GET /api/intelligence/pac/${committeeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/intelligence/pac/<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-895910fdafc862aa", "name": "Dangling fetch: GET /api/spending/awards/${encodedId} (src/components/spending/SpendingContractPage/SpendingContractPage", "shortDescription": {"text": "Dangling fetch: GET /api/spending/awards/${encodedId} (src/components/spending/SpendingContractPage/SpendingContractPage.tsx:63)"}, "fullDescription": {"text": "`src/components/spending/SpendingContractPage/SpendingContractPage.tsx:63` calls `GET /api/spending/awards/${encodedId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/spending/awards/<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-11cd55e7cfa0c0d5", "name": "Dangling fetch: GET /api/spending/awards/${encodedId}/transactions (src/components/spending/SpendingContractPage/Spendin", "shortDescription": {"text": "Dangling fetch: GET /api/spending/awards/${encodedId}/transactions (src/components/spending/SpendingContractPage/SpendingContractPage.tsx:69)"}, "fullDescription": {"text": "`src/components/spending/SpendingContractPage/SpendingContractPage.tsx:69` calls `GET /api/spending/awards/${encodedId}/transactions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/spending/awards/<p>/transactions`\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-6992b596af4b678f", "name": "Dangling fetch: GET /api/state-boundaries/${stateCode}?detail=${detail} (src/components/maps/StateMap.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/state-boundaries/${stateCode}?detail=${detail} (src/components/maps/StateMap.tsx:48)"}, "fullDescription": {"text": "`src/components/maps/StateMap.tsx:48` calls `GET /api/state-boundaries/${stateCode}?detail=${detail}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/state-boundaries/<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-bc251d107d8aa367", "name": "Dangling fetch: GET /api/state-demographics/${stateCode} (src/components/maps/StateMap.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/state-demographics/${stateCode} (src/components/maps/StateMap.tsx:58)"}, "fullDescription": {"text": "`src/components/maps/StateMap.tsx:58` calls `GET /api/state-demographics/${stateCode}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/state-demographics/<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-ad2474f1bdfca817", "name": "Dangling fetch: GET /api/state-legislature/${state.toUpperCase()} (src/components/states/LegacyStateLegislature/LegacySt", "shortDescription": {"text": "Dangling fetch: GET /api/state-legislature/${state.toUpperCase()} (src/components/states/LegacyStateLegislature/LegacyStateLegislaturePage.tsx:402)"}, "fullDescription": {"text": "`src/components/states/LegacyStateLegislature/LegacyStateLegislaturePage.tsx:402` calls `GET /api/state-legislature/${state.toUpperCase()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/state-legislature/<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-ea5f35c886c0466f", "name": "Dangling fetch: GET /api/state-bills/${state.toUpperCase()}?limit=10 (src/components/states/LegacyStateLegislature/Legac", "shortDescription": {"text": "Dangling fetch: GET /api/state-bills/${state.toUpperCase()}?limit=10 (src/components/states/LegacyStateLegislature/LegacyStateLegislaturePage.tsx:403)"}, "fullDescription": {"text": "`src/components/states/LegacyStateLegislature/LegacyStateLegislaturePage.tsx:403` calls `GET /api/state-bills/${state.toUpperCase()}?limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/state-bills/<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-83b5c9ff845fa5a3", "name": "Dangling fetch: POST /api/alerts/subscribe (src/components/alerts/AlertSubscribeForm.tsx:52)", "shortDescription": {"text": "Dangling fetch: POST /api/alerts/subscribe (src/components/alerts/AlertSubscribeForm.tsx:52)"}, "fullDescription": {"text": "`src/components/alerts/AlertSubscribeForm.tsx:52` calls `POST /api/alerts/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/alerts/subscribe`\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-7b8fee2e957a5b9f", "name": "Dangling fetch: GET https://api.radar.io/v1/search/autocomplete?${params.toString()} (src/components/search/AddressAutoc", "shortDescription": {"text": "Dangling fetch: GET https://api.radar.io/v1/search/autocomplete?${params.toString()} (src/components/search/AddressAutocomplete.tsx:81)"}, "fullDescription": {"text": "`src/components/search/AddressAutocomplete.tsx:81` calls `GET https://api.radar.io/v1/search/autocomplete?${params.toString()}` 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.radar.io/v1/search/autocomplete`\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-ea587316b5e1c156", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=100&sort=updateDate+desc (src/components/search/S", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=100&sort=updateDate+desc (src/components/search/SearchResults/data.ts:83)"}, "fullDescription": {"text": "`src/components/search/SearchResults/data.ts:83` calls `GET https://api.congress.gov/v3/bill/${congress}?limit=100&sort=updateDate+desc` 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.congress.gov/v3/bill/<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-ac16779c032f7416", "name": "Dangling fetch: GET /api/city/${encodedId}/council (src/components/local/LocalCouncilPage/LocalCouncilPage.tsx:57)", "shortDescription": {"text": "Dangling fetch: GET /api/city/${encodedId}/council (src/components/local/LocalCouncilPage/LocalCouncilPage.tsx:57)"}, "fullDescription": {"text": "`src/components/local/LocalCouncilPage/LocalCouncilPage.tsx:57` calls `GET /api/city/${encodedId}/council` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/city/<p>/council`\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-1f4723f1f16b4427", "name": "Dangling fetch: GET /api/city/${encodedId}/legislation?days=60&top=20 (src/components/local/LocalCouncilPage/LocalCounci", "shortDescription": {"text": "Dangling fetch: GET /api/city/${encodedId}/legislation?days=60&top=20 (src/components/local/LocalCouncilPage/LocalCouncilPage.tsx:65)"}, "fullDescription": {"text": "`src/components/local/LocalCouncilPage/LocalCouncilPage.tsx:65` calls `GET /api/city/${encodedId}/legislation?days=60&top=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/city/<p>/legislation`\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-3d1f6dea380be560", "name": "Dangling fetch: POST /api/errors (src/components/shared/common/EnhancedErrorBoundary.tsx:117)", "shortDescription": {"text": "Dangling fetch: POST /api/errors (src/components/shared/common/EnhancedErrorBoundary.tsx:117)"}, "fullDescription": {"text": "`src/components/shared/common/EnhancedErrorBoundary.tsx:117` calls `POST /api/errors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/errors`\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-499d9cefe165aa0c", "name": "Dangling fetch: GET /api/elections/${encodedId} (src/components/elections/ElectionPage/ElectionPage.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/elections/${encodedId} (src/components/elections/ElectionPage/ElectionPage.tsx:73)"}, "fullDescription": {"text": "`src/components/elections/ElectionPage/ElectionPage.tsx:73` calls `GET /api/elections/${encodedId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/elections/<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-803a525a813ba701", "name": "Dangling fetch: POST /api/graph/query (src/components/graph/GraphQueryBar.tsx:56)", "shortDescription": {"text": "Dangling fetch: POST /api/graph/query (src/components/graph/GraphQueryBar.tsx:56)"}, "fullDescription": {"text": "`src/components/graph/GraphQueryBar.tsx:56` calls `POST /api/graph/query` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/graph/query`\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-d28585503197c7ce", "name": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/components/officials/ProfileHybrid/MoneyPanel.tsx:43)", "shortDescription": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/components/officials/ProfileHybrid/MoneyPanel.tsx:43)"}, "fullDescription": {"text": "`src/components/officials/ProfileHybrid/MoneyPanel.tsx:43` calls `POST /api/representative/${bioguideId}/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representative/<p>/batch`\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-1c5273fba6e1eb0e", "name": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/components/officials/ProfileHybrid/RecordPanel.tsx:47)", "shortDescription": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/components/officials/ProfileHybrid/RecordPanel.tsx:47)"}, "fullDescription": {"text": "`src/components/officials/ProfileHybrid/RecordPanel.tsx:47` calls `POST /api/representative/${bioguideId}/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representative/<p>/batch`\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-5c6a9448f04ee634", "name": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/components/officials/ProfileHybrid/ProfileHybrid.tsx:4", "shortDescription": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/components/officials/ProfileHybrid/ProfileHybrid.tsx:42)"}, "fullDescription": {"text": "`src/components/officials/ProfileHybrid/ProfileHybrid.tsx:42` calls `POST /api/representative/${bioguideId}/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representative/<p>/batch`\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-613db92a06ff0692", "name": "Dangling fetch: GET /api/spending/district/${districtId} (src/features/spending/components/FederalSpendingProfile.tsx:27", "shortDescription": {"text": "Dangling fetch: GET /api/spending/district/${districtId} (src/features/spending/components/FederalSpendingProfile.tsx:27)"}, "fullDescription": {"text": "`src/features/spending/components/FederalSpendingProfile.tsx:27` calls `GET /api/spending/district/${districtId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spending/district/<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-dfd115b4e5957979", "name": "Dangling fetch: GET /api/search?q=${encodeURIComponent(trimmed)}&limit=5 (src/features/spending/components/SpendingSearc", "shortDescription": {"text": "Dangling fetch: GET /api/search?q=${encodeURIComponent(trimmed)}&limit=5 (src/features/spending/components/SpendingSearch.tsx:44)"}, "fullDescription": {"text": "`src/features/spending/components/SpendingSearch.tsx:44` calls `GET /api/search?q=${encodeURIComponent(trimmed)}&limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search`\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-04118d6774659405", "name": "Dangling fetch: GET /api/representative/${bioguideId}/votes?limit=500 (src/features/representatives/components/VotingPat", "shortDescription": {"text": "Dangling fetch: GET /api/representative/${bioguideId}/votes?limit=500 (src/features/representatives/components/VotingPatternAnalysis.tsx:45)"}, "fullDescription": {"text": "`src/features/representatives/components/VotingPatternAnalysis.tsx:45` calls `GET /api/representative/${bioguideId}/votes?limit=500` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representative/<p>/votes`\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-4f4ed494b6bf02d5", "name": "Dangling fetch: POST /api/representative/${representative.bioguideId}/batch (src/features/representatives/components/Sim", "shortDescription": {"text": "Dangling fetch: POST /api/representative/${representative.bioguideId}/batch (src/features/representatives/components/SimpleRepresentativeProfile.tsx:176)"}, "fullDescription": {"text": "`src/features/representatives/components/SimpleRepresentativeProfile.tsx:176` calls `POST /api/representative/${representative.bioguideId}/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representative/<p>/batch`\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-8558156db1db74df", "name": "Dangling fetch: POST /api/geocode (src/features/representatives/components/RepresentativesClient.tsx:147)", "shortDescription": {"text": "Dangling fetch: POST /api/geocode (src/features/representatives/components/RepresentativesClient.tsx:147)"}, "fullDescription": {"text": "`src/features/representatives/components/RepresentativesClient.tsx:147` calls `POST /api/geocode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/geocode`\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-f6f71eb8eaf6de9a", "name": "Dangling fetch: POST /api/geocode (src/features/representatives/components/RepresentativesClient.tsx:300)", "shortDescription": {"text": "Dangling fetch: POST /api/geocode (src/features/representatives/components/RepresentativesClient.tsx:300)"}, "fullDescription": {"text": "`src/features/representatives/components/RepresentativesClient.tsx:300` calls `POST /api/geocode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/geocode`\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-b8db1ebbe30bf848", "name": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/features/representatives/components/VotingTab.tsx:137)", "shortDescription": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/features/representatives/components/VotingTab.tsx:137)"}, "fullDescription": {"text": "`src/features/representatives/components/VotingTab.tsx:137` calls `POST /api/representative/${bioguideId}/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representative/<p>/batch`\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-c9c11a575c24691b", "name": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/features/representatives/components/FinanceTab.tsx:150", "shortDescription": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/features/representatives/components/FinanceTab.tsx:150)"}, "fullDescription": {"text": "`src/features/representatives/components/FinanceTab.tsx:150` calls `POST /api/representative/${bioguideId}/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representative/<p>/batch`\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-2bf8127d8779d27e", "name": "Dangling fetch: POST /api/geocode (src/features/representatives/components/AddressPrompt.tsx:71)", "shortDescription": {"text": "Dangling fetch: POST /api/geocode (src/features/representatives/components/AddressPrompt.tsx:71)"}, "fullDescription": {"text": "`src/features/representatives/components/AddressPrompt.tsx:71` calls `POST /api/geocode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/geocode`\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-a0a266c642e8fab7", "name": "Dangling fetch: GET /api/state-boundaries/${stateCode}?detail=simple (src/features/representatives/components/StateMapCa", "shortDescription": {"text": "Dangling fetch: GET /api/state-boundaries/${stateCode}?detail=simple (src/features/representatives/components/StateMapCard.tsx:98)"}, "fullDescription": {"text": "`src/features/representatives/components/StateMapCard.tsx:98` calls `GET /api/state-boundaries/${stateCode}?detail=simple` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/state-boundaries/<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-18f8d2856e981c07", "name": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/features/representatives/components/profile-redesign/P", "shortDescription": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/features/representatives/components/profile-redesign/ProfileRedesign.tsx:57)"}, "fullDescription": {"text": "`src/features/representatives/components/profile-redesign/ProfileRedesign.tsx:57` calls `POST /api/representative/${bioguideId}/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representative/<p>/batch`\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-d768449d642a294d", "name": "Dangling fetch: GET /api/bill/${id}/summary/stream (src/features/legislation/hooks/useBillSummaryStream.ts:43)", "shortDescription": {"text": "Dangling fetch: GET /api/bill/${id}/summary/stream (src/features/legislation/hooks/useBillSummaryStream.ts:43)"}, "fullDescription": {"text": "`src/features/legislation/hooks/useBillSummaryStream.ts:43` calls `GET /api/bill/${id}/summary/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bill/<p>/summary/stream`\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-9bf434933149cfe6", "name": "Dangling fetch: GET /api/witnesses?${params} (src/features/legislation/components/WitnessSearch.tsx:69)", "shortDescription": {"text": "Dangling fetch: GET /api/witnesses?${params} (src/features/legislation/components/WitnessSearch.tsx:69)"}, "fullDescription": {"text": "`src/features/legislation/components/WitnessSearch.tsx:69` calls `GET /api/witnesses?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/witnesses`\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-1ae910ffa865b13c", "name": "Dangling fetch: GET /api/representative/${bioguideId}/bills?congress=119&limit=5 (src/features/legislation/components/Co", "shortDescription": {"text": "Dangling fetch: GET /api/representative/${bioguideId}/bills?congress=119&limit=5 (src/features/legislation/components/CommitteeMembers.tsx:179)"}, "fullDescription": {"text": "`src/features/legislation/components/CommitteeMembers.tsx:179` calls `GET /api/representative/${bioguideId}/bills?congress=119&limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representative/<p>/bills`\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-dd561ada65431f57", "name": "Dangling fetch: GET /api/floor-schedule (src/features/legislation/components/FloorActivity.tsx:72)", "shortDescription": {"text": "Dangling fetch: GET /api/floor-schedule (src/features/legislation/components/FloorActivity.tsx:72)"}, "fullDescription": {"text": "`src/features/legislation/components/FloorActivity.tsx:72` calls `GET /api/floor-schedule` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/floor-schedule`\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-b9872a88b177b730", "name": "Dangling fetch: GET /api/committee/${committeeId}/wikipedia (src/features/legislation/components/CommitteeBiographicalIn", "shortDescription": {"text": "Dangling fetch: GET /api/committee/${committeeId}/wikipedia (src/features/legislation/components/CommitteeBiographicalInfo.tsx:61)"}, "fullDescription": {"text": "`src/features/legislation/components/CommitteeBiographicalInfo.tsx:61` calls `GET /api/committee/${committeeId}/wikipedia` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/committee/<p>/wikipedia`\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-2a888e71c54fdc5b", "name": "Dangling fetch: GET /api/committee/${committeeId}/bills (src/features/legislation/components/CommitteeBillsAndReports.ts", "shortDescription": {"text": "Dangling fetch: GET /api/committee/${committeeId}/bills (src/features/legislation/components/CommitteeBillsAndReports.tsx:59)"}, "fullDescription": {"text": "`src/features/legislation/components/CommitteeBillsAndReports.tsx:59` calls `GET /api/committee/${committeeId}/bills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/committee/<p>/bills`\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-eec9bb32bf11eb8d", "name": "Dangling fetch: GET /api/committee/${committeeId}/reports (src/features/legislation/components/CommitteeBillsAndReports.", "shortDescription": {"text": "Dangling fetch: GET /api/committee/${committeeId}/reports (src/features/legislation/components/CommitteeBillsAndReports.tsx:77)"}, "fullDescription": {"text": "`src/features/legislation/components/CommitteeBillsAndReports.tsx:77` calls `GET /api/committee/${committeeId}/reports` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/committee/<p>/reports`\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-58b947ec20b62776", "name": "Dangling fetch: GET /api/search?${params.toString()} (src/features/search/components/AdvancedSearch.tsx:164)", "shortDescription": {"text": "Dangling fetch: GET /api/search?${params.toString()} (src/features/search/components/AdvancedSearch.tsx:164)"}, "fullDescription": {"text": "`src/features/search/components/AdvancedSearch.tsx:164` calls `GET /api/search?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search`\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-00af24bf33238a26", "name": "Dangling fetch: GET /data/state-districts/state-districts-manifest.json (src/features/districts/components/StateDistrict", "shortDescription": {"text": "Dangling fetch: GET /data/state-districts/state-districts-manifest.json (src/features/districts/components/StateDistrictBoundaryMap.tsx:439)"}, "fullDescription": {"text": "`src/features/districts/components/StateDistrictBoundaryMap.tsx:439` calls `GET /data/state-districts/state-districts-manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/data/state-districts/state-districts-manifest.json`\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-71794d62078b05a5", "name": "Dangling fetch: GET /api/districts/all (src/features/districts/components/DistrictMapContainer.tsx:165)", "shortDescription": {"text": "Dangling fetch: GET /api/districts/all (src/features/districts/components/DistrictMapContainer.tsx:165)"}, "fullDescription": {"text": "`src/features/districts/components/DistrictMapContainer.tsx:165` calls `GET /api/districts/all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/districts/all`\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-e130171ff3f02299", "name": "Dangling fetch: GET /api/districts/all (src/features/districts/components/LeafletDistrictMap.tsx:164)", "shortDescription": {"text": "Dangling fetch: GET /api/districts/all (src/features/districts/components/LeafletDistrictMap.tsx:164)"}, "fullDescription": {"text": "`src/features/districts/components/LeafletDistrictMap.tsx:164` calls `GET /api/districts/all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/districts/all`\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-749abff64cd6d13e", "name": "Dangling fetch: GET /api/district-map?zip=${encodeURIComponent(zipCode)} (src/features/districts/components/SimpleDistri", "shortDescription": {"text": "Dangling fetch: GET /api/district-map?zip=${encodeURIComponent(zipCode)} (src/features/districts/components/SimpleDistrictMap.tsx:69)"}, "fullDescription": {"text": "`src/features/districts/components/SimpleDistrictMap.tsx:69` calls `GET /api/district-map?zip=${encodeURIComponent(zipCode)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/district-map`\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-389ba193fbd4feb3", "name": "Dangling fetch: GET /api/districts/${districtId}/economic-profile (src/features/districts/components/EconomicProfile.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/districts/${districtId}/economic-profile (src/features/districts/components/EconomicProfile.tsx:66)"}, "fullDescription": {"text": "`src/features/districts/components/EconomicProfile.tsx:66` calls `GET /api/districts/${districtId}/economic-profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/districts/<p>/economic-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-5bc8f0eb40ace841", "name": "Dangling fetch: GET /api/districts/${districtId}/services-health (src/features/districts/components/ServicesHealthProfil", "shortDescription": {"text": "Dangling fetch: GET /api/districts/${districtId}/services-health (src/features/districts/components/ServicesHealthProfile.tsx:73)"}, "fullDescription": {"text": "`src/features/districts/components/ServicesHealthProfile.tsx:73` calls `GET /api/districts/${districtId}/services-health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/districts/<p>/services-health`\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-cf1c4c757915eaf7", "name": "Dangling fetch: GET /data/states/standard/${state}.json (src/features/districts/components/DistrictMap.tsx:394)", "shortDescription": {"text": "Dangling fetch: GET /data/states/standard/${state}.json (src/features/districts/components/DistrictMap.tsx:394)"}, "fullDescription": {"text": "`src/features/districts/components/DistrictMap.tsx:394` calls `GET /data/states/standard/${state}.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/data/states/standard/<p>.json`\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-b3c715c6001e0356", "name": "Dangling fetch: GET /api/districts/${districtId}/government-spending (src/features/districts/components/GovernmentServic", "shortDescription": {"text": "Dangling fetch: GET /api/districts/${districtId}/government-spending (src/features/districts/components/GovernmentServicesProfile.tsx:98)"}, "fullDescription": {"text": "`src/features/districts/components/GovernmentServicesProfile.tsx:98` calls `GET /api/districts/${districtId}/government-spending` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/districts/<p>/government-spending`\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-f156291b62279c22", "name": "Dangling fetch: POST /api/unified-geocode (src/features/districts/components/AddressRefinement.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /api/unified-geocode (src/features/districts/components/AddressRefinement.tsx:88)"}, "fullDescription": {"text": "`src/features/districts/components/AddressRefinement.tsx:88` calls `POST /api/unified-geocode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/unified-geocode`\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-f1d6490c6d61e78d", "name": "Dangling fetch: POST /api/unified-geocode (src/features/districts/components/AddressRefinement.tsx:260)", "shortDescription": {"text": "Dangling fetch: POST /api/unified-geocode (src/features/districts/components/AddressRefinement.tsx:260)"}, "fullDescription": {"text": "`src/features/districts/components/AddressRefinement.tsx:260` calls `POST /api/unified-geocode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/unified-geocode`\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-03ac8326258766cc", "name": "Dangling fetch: GET /api/district/${districtId}/export (src/shared/components/ui/DistrictExportButton.tsx:31)", "shortDescription": {"text": "Dangling fetch: GET /api/district/${districtId}/export (src/shared/components/ui/DistrictExportButton.tsx:31)"}, "fullDescription": {"text": "`src/shared/components/ui/DistrictExportButton.tsx:31` calls `GET /api/district/${districtId}/export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/district/<p>/export`\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-02cc36273731a444", "name": "Dangling fetch: GET /api/bills (src/lib/api/middleware.ts:226)", "shortDescription": {"text": "Dangling fetch: GET /api/bills (src/lib/api/middleware.ts:226)"}, "fullDescription": {"text": "`src/lib/api/middleware.ts:226` calls `GET /api/bills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bills`\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-41854180812afbfc", "name": "Dangling fetch: GET /api/votes (src/lib/api/middleware.ts:227)", "shortDescription": {"text": "Dangling fetch: GET /api/votes (src/lib/api/middleware.ts:227)"}, "fullDescription": {"text": "`src/lib/api/middleware.ts:227` calls `GET /api/votes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes`\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-746fd85abedb5af1", "name": "Dangling fetch: GET /api/finance (src/lib/api/middleware.ts:228)", "shortDescription": {"text": "Dangling fetch: GET /api/finance (src/lib/api/middleware.ts:228)"}, "fullDescription": {"text": "`src/lib/api/middleware.ts:228` calls `GET /api/finance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/finance`\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-34538c8a86c4b598", "name": "Dangling fetch: POST /api/representatives/batch (src/lib/helpers/performance.ts:144)", "shortDescription": {"text": "Dangling fetch: POST /api/representatives/batch (src/lib/helpers/performance.ts:144)"}, "fullDescription": {"text": "`src/lib/helpers/performance.ts:144` calls `POST /api/representatives/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/representatives/batch`\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-d8c67ad67c3f026b", "name": "Dangling fetch: POST /api/news/batch (src/lib/helpers/performance.ts:161)", "shortDescription": {"text": "Dangling fetch: POST /api/news/batch (src/lib/helpers/performance.ts:161)"}, "fullDescription": {"text": "`src/lib/helpers/performance.ts:161` calls `POST /api/news/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/news/batch`\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-33a551c50068c7b1", "name": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (src/lib/mcp/tools/finance.ts:124)", "shortDescription": {"text": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (src/lib/mcp/tools/finance.ts:124)"}, "fullDescription": {"text": "`src/lib/mcp/tools/finance.ts:124` calls `POST https://api.usaspending.gov/api/v2/search/spending_by_award/` 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.usaspending.gov/api/v2/search/spending_by_award`\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-1debeec081db4774", "name": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (src/lib/mcp/tools/safety.ts:188)", "shortDescription": {"text": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (src/lib/mcp/tools/safety.ts:188)"}, "fullDescription": {"text": "`src/lib/mcp/tools/safety.ts:188` calls `POST https://api.usaspending.gov/api/v2/search/spending_by_award/` 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.usaspending.gov/api/v2/search/spending_by_award`\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-2ca7fdd783160f28", "name": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (src/lib/mcp/tools/health.ts:184)", "shortDescription": {"text": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (src/lib/mcp/tools/health.ts:184)"}, "fullDescription": {"text": "`src/lib/mcp/tools/health.ts:184` calls `POST https://api.usaspending.gov/api/v2/search/spending_by_award/` 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.usaspending.gov/api/v2/search/spending_by_award`\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-537cd12bc9369cf2", "name": "Dangling fetch: GET https://api.congress.gov/v3/house-vote/${congressNum}/${sessionNum}/${rollCallNumber}?format=json (s", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/house-vote/${congressNum}/${sessionNum}/${rollCallNumber}?format=json (src/lib/mcp/tools/legislation.ts:181)"}, "fullDescription": {"text": "`src/lib/mcp/tools/legislation.ts:181` calls `GET https://api.congress.gov/v3/house-vote/${congressNum}/${sessionNum}/${rollCallNumber}?format=json` 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.congress.gov/v3/house-vote/<p>/<p>/<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-5f67e0de086011f1", "name": "Dangling fetch: POST /api/analytics/errors (src/lib/errors/ErrorHandlers.ts:362)", "shortDescription": {"text": "Dangling fetch: POST /api/analytics/errors (src/lib/errors/ErrorHandlers.ts:362)"}, "fullDescription": {"text": "`src/lib/errors/ErrorHandlers.ts:362` calls `POST /api/analytics/errors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/errors`\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-e94ca560a60e85ec", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/text?format=json (src/lib/services/bi", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/text?format=json (src/lib/services/bill.service.ts:155)"}, "fullDescription": {"text": "`src/lib/services/bill.service.ts:155` calls `GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/text?format=json` 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.congress.gov/v3/bill/<p>/<p>/<p>/text`\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-1bfc7408f67d4088", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/subjects?format=json (src/lib/service", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/subjects?format=json (src/lib/services/bill.service.ts:287)"}, "fullDescription": {"text": "`src/lib/services/bill.service.ts:287` calls `GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/subjects?format=json` 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.congress.gov/v3/bill/<p>/<p>/<p>/subjects`\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-05a624f1e2e85a42", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/text?format=json (src/lib/services/bi", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/text?format=json (src/lib/services/bill.service.ts:311)"}, "fullDescription": {"text": "`src/lib/services/bill.service.ts:311` calls `GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/text?format=json` 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.congress.gov/v3/bill/<p>/<p>/<p>/text`\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-13b64842562709cd", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/cosponsors?format=json&limit=250 (src", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/cosponsors?format=json&limit=250 (src/lib/services/bill.service.ts:344)"}, "fullDescription": {"text": "`src/lib/services/bill.service.ts:344` calls `GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/cosponsors?format=json&limit=250` 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.congress.gov/v3/bill/<p>/<p>/<p>/cosponsors`\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-81faf285d5396ce6", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/actions?format=json&limit=250 (src/li", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/actions?format=json&limit=250 (src/lib/services/bill.service.ts:395)"}, "fullDescription": {"text": "`src/lib/services/bill.service.ts:395` calls `GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/actions?format=json&limit=250` 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.congress.gov/v3/bill/<p>/<p>/<p>/actions`\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-c385e09393285054", "name": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}?format=json (src/lib/services/bill.se", "shortDescription": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}?format=json (src/lib/services/bill.service.ts:636)"}, "fullDescription": {"text": "`src/lib/services/bill.service.ts:636` calls `GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}?format=json` 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.congress.gov/v3/bill/<p>/<p>/<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-a102fac02c8890aa", "name": "Dangling fetch: GET /api${endpoint} (src/services/api/base.ts:24)", "shortDescription": {"text": "Dangling fetch: GET /api${endpoint} (src/services/api/base.ts:24)"}, "fullDescription": {"text": "`src/services/api/base.ts:24` calls `GET /api${endpoint}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/api/<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-34ec978f264a7205", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/services/ai/summarization.service.ts:330)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/services/ai/summarization.service.ts:330)"}, "fullDescription": {"text": "`src/services/ai/summarization.service.ts:330` calls `POST https://api.openai.com/v1/chat/completions` 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.openai.com/v1/chat/completions`\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-7b2a4f56fe6c9801", "name": "Dangling fetch: GET /api/federal-register/${documentNumber}/comments?pageSize=1 (src/__tests__/features/districts/compon", "shortDescription": {"text": "Dangling fetch: GET /api/federal-register/${documentNumber}/comments?pageSize=1 (src/__tests__/features/districts/components/CommentCountBadge.test.tsx:41)"}, "fullDescription": {"text": "`src/__tests__/features/districts/components/CommentCountBadge.test.tsx:41` calls `GET /api/federal-register/${documentNumber}/comments?pageSize=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/federal-register/<p>/comments`\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-9a28c78683bbd89c", "name": "Dangling fetch: GET /api/federal-register/2025-12345/comments?pageSize=1 (src/__tests__/features/districts/components/Co", "shortDescription": {"text": "Dangling fetch: GET /api/federal-register/2025-12345/comments?pageSize=1 (src/__tests__/features/districts/components/CommentCountBadge.test.tsx:59)"}, "fullDescription": {"text": "`src/__tests__/features/districts/components/CommentCountBadge.test.tsx:59` calls `GET /api/federal-register/2025-12345/comments?pageSize=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/federal-register/2025-12345/comments`\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-7cb28eda5bee3a32", "name": "Dangling fetch: GET /api/federal-register/2025-12345/comments?pageSize=1 (src/__tests__/features/districts/components/Co", "shortDescription": {"text": "Dangling fetch: GET /api/federal-register/2025-12345/comments?pageSize=1 (src/__tests__/features/districts/components/CommentCountBadge.test.tsx:84)"}, "fullDescription": {"text": "`src/__tests__/features/districts/components/CommentCountBadge.test.tsx:84` calls `GET /api/federal-register/2025-12345/comments?pageSize=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/federal-register/2025-12345/comments`\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-9ed9e1d08db6afce", "name": "Dangling fetch: GET /api/federal-register/2025-12345/comments?pageSize=1 (src/__tests__/features/districts/components/Co", "shortDescription": {"text": "Dangling fetch: GET /api/federal-register/2025-12345/comments?pageSize=1 (src/__tests__/features/districts/components/CommentCountBadge.test.tsx:103)"}, "fullDescription": {"text": "`src/__tests__/features/districts/components/CommentCountBadge.test.tsx:103` calls `GET /api/federal-register/2025-12345/comments?pageSize=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/federal-register/2025-12345/comments`\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-19d3988bae79d1c4", "name": "Unused endpoint: PUT /offline", "shortDescription": {"text": "Unused endpoint: PUT /offline"}, "fullDescription": {"text": "`public/sw.js` declares `PUT /offline` 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/24991"}, "properties": {"repository": "civdotiq/civ.iq", "repoUrl": "https://github.com/civdotiq/civ.iq", "branch": "main"}, "results": [{"ruleId": "scanner-775d359b5bcf0c85", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/user-flow-validation.spec.ts:369"}, "properties": {"repobilityId": "451065c2a01ea23e", "scanner": "scanner-primary", "fingerprint": "775d359b5bcf0c85", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0ba9f8cea040233", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clear-thanedar-cache.ts:13"}, "properties": {"repobilityId": "94f3a9ab46dbfec9", "scanner": "scanner-primary", "fingerprint": "e0ba9f8cea040233", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3964fc8684d35b4f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compare-finance-paths.ts:38"}, "properties": {"repobilityId": "4917afc337bdbe2e", "scanner": "scanner-primary", "fingerprint": "3964fc8684d35b4f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-495f2967650d0562", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-single-district-extraction.js:30"}, "properties": {"repobilityId": "69937bbbb65f01bc", "scanner": "scanner-primary", "fingerprint": "495f2967650d0562", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dcbf3ada085edef9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-wikipedia-mappings.ts:151"}, "properties": {"repobilityId": "d868a6cfb67272a9", "scanner": "scanner-primary", "fingerprint": "dcbf3ada085edef9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-965d9f4688f25fe7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-end-to-end.ts:230"}, "properties": {"repobilityId": "94b2152d6a311ed0", "scanner": "scanner-primary", "fingerprint": "965d9f4688f25fe7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8e847611aae009d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-profile-enhancement.js:11"}, "properties": {"repobilityId": "d30a988616006b91", "scanner": "scanner-primary", "fingerprint": "8e847611aae009d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a33a326693e7636", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-upstash-roundtrip.ts:21"}, "properties": {"repobilityId": "1923799b04942951", "scanner": "scanner-primary", "fingerprint": "7a33a326693e7636", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-167c23d4ff98fbee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-sector-embeddings.ts:34"}, "properties": {"repobilityId": "bf34c1174b3c27f5", "scanner": "scanner-primary", "fingerprint": "167c23d4ff98fbee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d4971f8460f5a71", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/process-election-data.ts:97"}, "properties": {"repobilityId": "3fee811f5cde3ccf", "scanner": "scanner-primary", "fingerprint": "0d4971f8460f5a71", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0171b38a733435a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-t000488.ts:19"}, "properties": {"repobilityId": "081dc8f2e829e41e", "scanner": "scanner-primary", "fingerprint": "0171b38a733435a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4602822050df6bbd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-congress-api.ts:28"}, "properties": {"repobilityId": "365b7f682066d399", "scanner": "scanner-primary", "fingerprint": "4602822050df6bbd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79747a6731c97333", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/monitor-deployment.ts:9"}, "properties": {"repobilityId": "7b2d93d0b0524d21", "scanner": "scanner-primary", "fingerprint": "79747a6731c97333", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e0d2a3ca260a813", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-phase3-integration.ts:41"}, "properties": {"repobilityId": "9d8424ee2ad6d442", "scanner": "scanner-primary", "fingerprint": "0e0d2a3ca260a813", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-403153b20a7dcb6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assess-data-coverage.js:37"}, "properties": {"repobilityId": "3beef849a2d93907", "scanner": "scanner-primary", "fingerprint": "403153b20a7dcb6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34061faf6e9ebe08", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-bioguide-fec.ts:594"}, "properties": {"repobilityId": "1b94b50bac84ee99", "scanner": "scanner-primary", "fingerprint": "34061faf6e9ebe08", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c665812028e2dfbd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-phase4-edge-cases.ts:198"}, "properties": {"repobilityId": "7b7c377a6a2c4a66", "scanner": "scanner-primary", "fingerprint": "c665812028e2dfbd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5baa083ac9756d36", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-thanedar-fix.ts:14"}, "properties": {"repobilityId": "a097aef4d6b3cc41", "scanner": "scanner-primary", "fingerprint": "5baa083ac9756d36", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d79296355b114fa5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-and-optimize.js:39"}, "properties": {"repobilityId": "d9059ccfc1d4748d", "scanner": "scanner-primary", "fingerprint": "d79296355b114fa5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0d17ff6d4424945", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-enhanced-congress-data.ts:26"}, "properties": {"repobilityId": "7edc20d172f3e5c4", "scanner": "scanner-primary", "fingerprint": "d0d17ff6d4424945", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fadbd4202bf1832e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/performance-benchmark.ts:55"}, "properties": {"repobilityId": "38da0862eab91dd3", "scanner": "scanner-primary", "fingerprint": "fadbd4202bf1832e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00f143ebc0a72097", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-apis.ts:30"}, "properties": {"repobilityId": "af09f659c505bc6a", "scanner": "scanner-primary", "fingerprint": "00f143ebc0a72097", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78f98f253166d811", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/calibrate-embedding-thresholds.ts:252"}, "properties": {"repobilityId": "8a22d0f1098a7b10", "scanner": "scanner-primary", "fingerprint": "78f98f253166d811", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d76f0a5ed40c482", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-congress-api.ts:14"}, "properties": {"repobilityId": "7642d074b4c7eb20", "scanner": "scanner-primary", "fingerprint": "2d76f0a5ed40c482", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19e2ef462526a209", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-district-boundaries.js:39"}, "properties": {"repobilityId": "49079f6d22eaf980", "scanner": "scanner-primary", "fingerprint": "19e2ef462526a209", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5269682cf065fe3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-enhanced-wikipedia.ts:65"}, "properties": {"repobilityId": "5fe2ef6b2837a622", "scanner": "scanner-primary", "fingerprint": "d5269682cf065fe3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a606e07a1601fb5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/mbtiles-diagnostic.js:20"}, "properties": {"repobilityId": "840869bb10cb2fae", "scanner": "scanner-primary", "fingerprint": "4a606e07a1601fb5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a770b35c75416def", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/benchmark-performance.ts:49"}, "properties": {"repobilityId": "340affbacfc17c1c", "scanner": "scanner-primary", "fingerprint": "a770b35c75416def", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-63c3989c80ac5510", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/complete-district-extraction.js:44"}, "properties": {"repobilityId": "02ba0b45a07664c8", "scanner": "scanner-primary", "fingerprint": "63c3989c80ac5510", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f48288a02417d88", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-zip-mappings.js:21"}, "properties": {"repobilityId": "2d9508b0b62f306b", "scanner": "scanner-primary", "fingerprint": "5f48288a02417d88", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd9c42902f525a7b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/smoke-embedding-pipeline.ts:169"}, "properties": {"repobilityId": "b28510c30d40e026", "scanner": "scanner-primary", "fingerprint": "dd9c42902f525a7b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7941b7dcf5ef4e29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/benchmark-optimized-performance.ts:58"}, "properties": {"repobilityId": "2891b36311cdb0b6", "scanner": "scanner-primary", "fingerprint": "7941b7dcf5ef4e29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c075d6e2c82837d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-api-integration.ts:85"}, "properties": {"repobilityId": "a636cc4b31e93fcb", "scanner": "scanner-primary", "fingerprint": "3c075d6e2c82837d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fcdcbf48d97272d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-production-validation.ts:88"}, "properties": {"repobilityId": "2ec3cfcd911f13ee", "scanner": "scanner-primary", "fingerprint": "1fcdcbf48d97272d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-370525e7717c283f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-comprehensive-mappings.ts:27"}, "properties": {"repobilityId": "9217a43d59273f52", "scanner": "scanner-primary", "fingerprint": "370525e7717c283f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22716feea340e652", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-unified-cache.ts:10"}, "properties": {"repobilityId": "5abb5b6c8baeb984", "scanner": "scanner-primary", "fingerprint": "22716feea340e652", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed3506934957230d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/raw-tile-extraction.js:29"}, "properties": {"repobilityId": "14d89a00990b43cf", "scanner": "scanner-primary", "fingerprint": "ed3506934957230d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2f3774ed592e6cd1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/process-census-data.ts:91"}, "properties": {"repobilityId": "5a72dddfe85bfd1d", "scanner": "scanner-primary", "fingerprint": "2f3774ed592e6cd1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-73435d7378f0712f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-mappings.ts:31"}, "properties": {"repobilityId": "447285575899fc78", "scanner": "scanner-primary", "fingerprint": "73435d7378f0712f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd4bf95b0f3cda39", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-senate-voting-optimizations.ts:20"}, "properties": {"repobilityId": "0035b68f36d2d712", "scanner": "scanner-primary", "fingerprint": "bd4bf95b0f3cda39", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f511be5837d5e74b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/snapshot-adoption.ts:112"}, "properties": {"repobilityId": "19849718090f309a", "scanner": "scanner-primary", "fingerprint": "f511be5837d5e74b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7960131398df7311", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-mvp-functionality.ts:51"}, "properties": {"repobilityId": "e27073c748648782", "scanner": "scanner-primary", "fingerprint": "7960131398df7311", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a1ae36382bf184f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-yaml-parser-performance.js:18"}, "properties": {"repobilityId": "052c9ee4f8e7ee83", "scanner": "scanner-primary", "fingerprint": "1a1ae36382bf184f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5cef755bae0b55a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-fec.js:66"}, "properties": {"repobilityId": "811611461c316a80", "scanner": "scanner-primary", "fingerprint": "5cef755bae0b55a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1ae6b2c2c9a677f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/warm-intelligence-cache.ts:36"}, "properties": {"repobilityId": "e10a176f07c659bb", "scanner": "scanner-primary", "fingerprint": "e1ae6b2c2c9a677f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c853a99aea45810", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-data-quality.ts:48"}, "properties": {"repobilityId": "9b54141e1781f0ed", "scanner": "scanner-primary", "fingerprint": "5c853a99aea45810", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae2e00fc3f1ed3a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/final-production-validation.ts:56"}, "properties": {"repobilityId": "919360f4c4d584c7", "scanner": "scanner-primary", "fingerprint": "ae2e00fc3f1ed3a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a92a9618c7f09ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-ner-swap.ts:58"}, "properties": {"repobilityId": "5096db63335d328e", "scanner": "scanner-primary", "fingerprint": "2a92a9618c7f09ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f0f5be2e83f7b8db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-vacancies.ts:417"}, "properties": {"repobilityId": "8048c07603b62e65", "scanner": "scanner-primary", "fingerprint": "f0f5be2e83f7b8db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4840fc5c869e2cac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-user-acceptance.ts:274"}, "properties": {"repobilityId": "c72ca5e526ed08ba", "scanner": "scanner-primary", "fingerprint": "4840fc5c869e2cac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4df139fe311329fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-census-integration.js:11"}, "properties": {"repobilityId": "124b4ae3bd120660", "scanner": "scanner-primary", "fingerprint": "4df139fe311329fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3fee30a2f201795", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-fec-finance-optimizations.ts:22"}, "properties": {"repobilityId": "de1ee1740a11ae07", "scanner": "scanner-primary", "fingerprint": "a3fee30a2f201795", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42aac0721a5d9228", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/collect-training-data.ts:83"}, "properties": {"repobilityId": "f9e7c31cf41e6305", "scanner": "scanner-primary", "fingerprint": "42aac0721a5d9228", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-58490ae618304a08", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compute-district-vectors.ts:244"}, "properties": {"repobilityId": "0f9e310ad584088c", "scanner": "scanner-primary", "fingerprint": "58490ae618304a08", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90d34aa0771d9b5b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/direct-sqlite-extraction.js:35"}, "properties": {"repobilityId": "23b0adad6a658a80", "scanner": "scanner-primary", "fingerprint": "90d34aa0771d9b5b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-caf5494bae9774c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-redis-performance.ts:24"}, "properties": {"repobilityId": "bb7e98b447240a5e", "scanner": "scanner-primary", "fingerprint": "caf5494bae9774c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0f17d42d2c5c8801", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-data.ts:88"}, "properties": {"repobilityId": "b7d1d70d9d71c344", "scanner": "scanner-primary", "fingerprint": "0f17d42d2c5c8801", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-786180103d24c2e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-sector-classification.ts:38"}, "properties": {"repobilityId": "4d38a2faa069f5a2", "scanner": "scanner-primary", "fingerprint": "786180103d24c2e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-94139d7b84db8323", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/process-state-boundaries.js:36"}, "properties": {"repobilityId": "980be2b8bfb7d68d", "scanner": "scanner-primary", "fingerprint": "94139d7b84db8323", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e71764e5b62135ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-congress-data.ts:137"}, "properties": {"repobilityId": "b3e84a4b3b35ecd0", "scanner": "scanner-primary", "fingerprint": "e71764e5b62135ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a659d75b9d6e8e30", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-coordinate-fix.js:16"}, "properties": {"repobilityId": "817370a00e5a137c", "scanner": "scanner-primary", "fingerprint": "a659d75b9d6e8e30", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e88f656823b53d6b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-district-neighbors.ts:76"}, "properties": {"repobilityId": "ced398b070e03220", "scanner": "scanner-primary", "fingerprint": "e88f656823b53d6b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-765684d067b28beb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-comprehensive-integration.ts:69"}, "properties": {"repobilityId": "49e9ae3c86972f61", "scanner": "scanner-primary", "fingerprint": "765684d067b28beb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-552e5f3f6e11e6ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gzip-aware-extraction.js:37"}, "properties": {"repobilityId": "d7e3cef704146966", "scanner": "scanner-primary", "fingerprint": "552e5f3f6e11e6ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-28ab9161707dee03", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-119th-congress-data.ts:46"}, "properties": {"repobilityId": "7ad94281ac0e3d04", "scanner": "scanner-primary", "fingerprint": "28ab9161707dee03", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29375f6218821b3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validate-xml-url-patterns.ts:64"}, "properties": {"repobilityId": "1e1e832a786d56f4", "scanner": "scanner-primary", "fingerprint": "29375f6218821b3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-012c5259bf182f0a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validation/validate-all.js:87"}, "properties": {"repobilityId": "ff8c70147abcd4ad", "scanner": "scanner-primary", "fingerprint": "012c5259bf182f0a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bfa563b53ade1ba4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-external-apis.js:5"}, "properties": {"repobilityId": "7a95d0983f0873a7", "scanner": "scanner-primary", "fingerprint": "bfa563b53ade1ba4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0be1bbbc4bd2c4f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/debug-congress-data.js:4"}, "properties": {"repobilityId": "011e0e58760ce3ce", "scanner": "scanner-primary", "fingerprint": "c0be1bbbc4bd2c4f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3bc8dc825407ef05", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/debug-raw-congress-data.js:6"}, "properties": {"repobilityId": "d0a5a533b3b1aea6", "scanner": "scanner-primary", "fingerprint": "3bc8dc825407ef05", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76ebfc11643b1fd0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-reps-coverage.js:17"}, "properties": {"repobilityId": "d6954ac67dc80987", "scanner": "scanner-primary", "fingerprint": "76ebfc11643b1fd0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb4c9580e65eef9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-map-fix.js:8"}, "properties": {"repobilityId": "6d1dc816f59a71f9", "scanner": "scanner-primary", "fingerprint": "eb4c9580e65eef9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aac50b43c358d37f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-address-search.js:3"}, "properties": {"repobilityId": "417398a111f0c055", "scanner": "scanner-primary", "fingerprint": "aac50b43c358d37f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d94eb802a2c435f6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-api-health.js:3"}, "properties": {"repobilityId": "f05c997c8dc4da36", "scanner": "scanner-primary", "fingerprint": "d94eb802a2c435f6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c84a30bc174ffe1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-district-map-fix.js:8"}, "properties": {"repobilityId": "76488b7347c05492", "scanner": "scanner-primary", "fingerprint": "5c84a30bc174ffe1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-145c8513a84541d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-reports-api.js:9"}, "properties": {"repobilityId": "86887e2e50d6419c", "scanner": "scanner-primary", "fingerprint": "145c8513a84541d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45600b86271bf111", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/final-validation.js:6"}, "properties": {"repobilityId": "589a97f4fe5b4819", "scanner": "scanner-primary", "fingerprint": "45600b86271bf111", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-63edd07fb719f71b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/debug-sc-reps.js:7"}, "properties": {"repobilityId": "9603d8554be5357b", "scanner": "scanner-primary", "fingerprint": "63edd07fb719f71b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74e34b5a52b6a446", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-multi-district.js:12"}, "properties": {"repobilityId": "4b1d4330e51c9ee3", "scanner": "scanner-primary", "fingerprint": "74e34b5a52b6a446", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f89bd05c96ec2b1c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-congress-legislators-direct.js:6"}, "properties": {"repobilityId": "dc673b5aa4bb573a", "scanner": "scanner-primary", "fingerprint": "f89bd05c96ec2b1c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aab4413874e9c7be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-enhanced-bills.js:9"}, "properties": {"repobilityId": "c25a7ea13a8fc5a0", "scanner": "scanner-primary", "fingerprint": "aab4413874e9c7be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b98458082c218ecc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-congress-endpoints.js:46"}, "properties": {"repobilityId": "c60a3bb8adf940c9", "scanner": "scanner-primary", "fingerprint": "b98458082c218ecc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-71d1d353b04c8ae6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test/test-district-fix.js:3"}, "properties": {"repobilityId": "f9ec6b3eb733dd79", "scanner": "scanner-primary", "fingerprint": "71d1d353b04c8ae6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a21249c42297cc52", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/middleware.ts:17"}, "properties": {"repobilityId": "90955eb58cc934c1", "scanner": "scanner-primary", "fingerprint": "a21249c42297cc52", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36af18bf2fe5332b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/instrumentation.ts:20"}, "properties": {"repobilityId": "1791378cdc59d011", "scanner": "scanner-primary", "fingerprint": "36af18bf2fe5332b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dae71782178fe601", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:99"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "dae71782178fe601", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-370fd5f08bd80cd6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(civic)/education/PrintableRubric.tsx:206"}, "properties": {"repobilityId": "35a78a5507a7e0f2", "scanner": "scanner-primary", "fingerprint": "370fd5f08bd80cd6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-18fb10548108b8df", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(civic)/education/PrintableWorksheet.tsx:139"}, "properties": {"repobilityId": "a9e28462691fd117", "scanner": "scanner-primary", "fingerprint": "18fb10548108b8df", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2878989f8abbdfa7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(civic)/education/EducationClient.tsx:1173"}, "properties": {"repobilityId": "1631bc6e13f7594b", "scanner": "scanner-primary", "fingerprint": "2878989f8abbdfa7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c0deb4894be9c2f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/spending/page.tsx:316"}, "properties": {"repobilityId": "785b72c1d38a272c", "scanner": "scanner-primary", "fingerprint": "c0deb4894be9c2f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ad54b499de48444", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/states/page.tsx:258"}, "properties": {"repobilityId": "166ab4f89b6f1bdd", "scanner": "scanner-primary", "fingerprint": "1ad54b499de48444", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-38ba346d93fb2540", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/glossary/GlossaryClient.tsx:301"}, "properties": {"repobilityId": "11683e4cb4a06310", "scanner": "scanner-primary", "fingerprint": "38ba346d93fb2540", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-554ef4f5d53e628f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(civic)/representative/[bioguideId]/TabsEnhanced.tsx:229"}, "properties": {"repobilityId": "632c64e254a3b138", "scanner": "scanner-primary", "fingerprint": "554ef4f5d53e628f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a3d6d9f27b226ae8", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/intelligence/address/money-report/route.ts:521"}, "properties": {"repobilityId": "3c9e3debde9e0eb1", "scanner": "scanner-primary", "fingerprint": "a3d6d9f27b226ae8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b980d37001ce8810", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/intelligence/address/representatives/route.ts:44"}, "properties": {"repobilityId": "a10a4011829567e8", "scanner": "scanner-primary", "fingerprint": "b980d37001ce8810", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-746b836f5b74308b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/state-representatives/route.ts:23"}, "properties": {"repobilityId": "0fb5c42b4901327c", "scanner": "scanner-primary", "fingerprint": "746b836f5b74308b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-5fff4865ce6369c6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/district-map/route.ts:44"}, "properties": {"repobilityId": "24f14f1583300ba4", "scanner": "scanner-primary", "fingerprint": "5fff4865ce6369c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-478ad2b790a00745", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/representatives/route.ts:52"}, "properties": {"repobilityId": "c08f318c23d776f7", "scanner": "scanner-primary", "fingerprint": "478ad2b790a00745", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-20ed97576a1d9149", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/search/route.ts:498"}, "properties": {"repobilityId": "89745f3824274d7e", "scanner": "scanner-primary", "fingerprint": "20ed97576a1d9149", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-4f5bd440845ddc32", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/geocode/route.ts:65"}, "properties": {"repobilityId": "2fcc8170db61fc80", "scanner": "scanner-primary", "fingerprint": "4f5bd440845ddc32", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3093d66c7638da99", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/migrate/google-civic/page.tsx:230"}, "properties": {"repobilityId": "880528a5df9fb885", "scanner": "scanner-primary", "fingerprint": "3093d66c7638da99", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d6728f75b5751f8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/(public)/open/page.tsx:921"}, "properties": {"repobilityId": "7c0e3c46599c0e44", "scanner": "scanner-primary", "fingerprint": "d6728f75b5751f8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-762abbb24671c09a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/embed-docs/page.tsx:111"}, "properties": {"repobilityId": "12d99bb6ce78e318", "scanner": "scanner-primary", "fingerprint": "762abbb24671c09a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-61af3e6a155b57d7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(public)/developers/page.tsx:160"}, "properties": {"repobilityId": "fbac7545e708aad6", "scanner": "scanner-primary", "fingerprint": "61af3e6a155b57d7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-78ac043044aed629", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(embed)/layout.tsx:44"}, "properties": {"repobilityId": "874b86f82457ba95", "scanner": "scanner-primary", "fingerprint": "78ac043044aed629", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a9a551c2ada48fb8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/bill/[billId]/ClientBillContent.tsx:702"}, "properties": {"repobilityId": "a2500830f44885d4", "scanner": "scanner-primary", "fingerprint": "a9a551c2ada48fb8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d332864819645dd4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/bill/[billId]/ClientBillContent.tsx:1111"}, "properties": {"repobilityId": "24d6b35d13b087a1", "scanner": "scanner-primary", "fingerprint": "d332864819645dd4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d2484115b316a274", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tests/district-data.test.ts:368"}, "properties": {"repobilityId": "3f9a518f133e5b81", "scanner": "scanner-primary", "fingerprint": "d2484115b316a274", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-67aa7ddffc21489b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/migrate-119th.ts:33"}, "properties": {"repobilityId": "a85a76c834e1acfd", "scanner": "scanner-primary", "fingerprint": "67aa7ddffc21489b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f1d4245a2ac2356", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/validate-data.ts:43"}, "properties": {"repobilityId": "a3deeff29af87adb", "scanner": "scanner-primary", "fingerprint": "1f1d4245a2ac2356", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a45934a31eb08afc", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/utils/sanitize.ts:59"}, "properties": {"repobilityId": "f0ca355b94c766bc", "scanner": "scanner-primary", "fingerprint": "a45934a31eb08afc", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0bfab483f46eac7b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/performance-optimizations.ts:183"}, "properties": {"repobilityId": "10aed6fdb5d866fe", "scanner": "scanner-primary", "fingerprint": "0bfab483f46eac7b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f68bcec89b9d637d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/usePerformanceMetrics.ts:139"}, "properties": {"repobilityId": "8b956133629c9521", "scanner": "scanner-primary", "fingerprint": "f68bcec89b9d637d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7ed0d659a551033", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/InfluenceChainCard.tsx:132"}, "properties": {"repobilityId": "8f34e4ab3ca43fe3", "scanner": "scanner-primary", "fingerprint": "c7ed0d659a551033", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3b2e2c3f54d0a063", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/TemporalProximityCard.tsx:175"}, "properties": {"repobilityId": "40df4dcaf071eabe", "scanner": "scanner-primary", "fingerprint": "3b2e2c3f54d0a063", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-01d8936d33449db6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/RepBriefSummary.tsx:64"}, "properties": {"repobilityId": "450cb077739a6a4f", "scanner": "scanner-primary", "fingerprint": "01d8936d33449db6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a93bdc5362f0031", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/InsightCard.tsx:86"}, "properties": {"repobilityId": "5c39271b156ab28e", "scanner": "scanner-primary", "fingerprint": "5a93bdc5362f0031", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-93ba6d6422330d8e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/ShapFactorsBar.tsx:43"}, "properties": {"repobilityId": "406118a8c7a0f6d5", "scanner": "scanner-primary", "fingerprint": "93ba6d6422330d8e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b3565d1b6e12c008", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/intelligence/VotePredictionCard.tsx:29"}, "properties": {"repobilityId": "b7469a298e0cdb9e", "scanner": "scanner-primary", "fingerprint": "b3565d1b6e12c008", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec13cf91085768d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/mesh/DistrictProfileCard.tsx:213"}, "properties": {"repobilityId": "1fbbb7411827af27", "scanner": "scanner-primary", "fingerprint": "ec13cf91085768d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abc742938cf78680", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/mesh/CounterfactualCard.tsx:84"}, "properties": {"repobilityId": "1e29299d39fde8eb", "scanner": "scanner-primary", "fingerprint": "abc742938cf78680", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c458ad42b459121e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/bills/BillDetail/TextPanel.tsx:146"}, "properties": {"repobilityId": "8ef66365e0e2d955", "scanner": "scanner-primary", "fingerprint": "c458ad42b459121e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a7452a114cdb7a0a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/bills/BillDetail/SummaryPanel.tsx:201"}, "properties": {"repobilityId": "7ce26cc531208b52", "scanner": "scanner-primary", "fingerprint": "a7452a114cdb7a0a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d22059a41a763da2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/BillsSponsoredAnswer.tsx:219"}, "properties": {"repobilityId": "4e7e1f277914f3cb", "scanner": "scanner-primary", "fingerprint": "d22059a41a763da2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-00b45b398bdad76c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/CampaignContributionsAnswer.tsx:166"}, "properties": {"repobilityId": "8deaef064faae287", "scanner": "scanner-primary", "fingerprint": "00b45b398bdad76c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aa012cc4d073461b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/CommitteeLobbyingAnswer.tsx:62"}, "properties": {"repobilityId": "ab5048cbc4e55ec2", "scanner": "scanner-primary", "fingerprint": "aa012cc4d073461b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82b5baddada73c9b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/DonorVotingAlignmentAnswer.tsx:140"}, "properties": {"repobilityId": "aecb5ecbb441d381", "scanner": "scanner-primary", "fingerprint": "82b5baddada73c9b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b3ddf7041bc07f5c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/questions/TopicBillsAnswer.tsx:179"}, "properties": {"repobilityId": "7ca998644d1bb345", "scanner": "scanner-primary", "fingerprint": "b3ddf7041bc07f5c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cdf859dc86fc433c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/JsonLd.tsx:100"}, "properties": {"repobilityId": "f07cf3d2a261ff34", "scanner": "scanner-primary", "fingerprint": "cdf859dc86fc433c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e5fe3a82ecce5dd4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/WikipediaStyleSEO.tsx:86"}, "properties": {"repobilityId": "d7fa73733860c92c", "scanner": "scanner-primary", "fingerprint": "e5fe3a82ecce5dd4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8c8cb57998cee3b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/performance/PerformanceDashboard.tsx:163"}, "properties": {"repobilityId": "03b62bbc568782a9", "scanner": "scanner-primary", "fingerprint": "8c8cb57998cee3b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68d72573bc9ae524", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/states/LegacyStateOverview/LegacyStateOverviewPage.tsx:646"}, "properties": {"repobilityId": "0ef725d9f5ae760a", "scanner": "scanner-primary", "fingerprint": "68d72573bc9ae524", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d60d7505fabb1326", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/AddressAutocomplete.tsx:285"}, "properties": {"repobilityId": "29721ca74e654154", "scanner": "scanner-primary", "fingerprint": "d60d7505fabb1326", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1edd42d5d1f78bdd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/GlobalSearch.tsx:298"}, "properties": {"repobilityId": "e0cdd7b806ea1275", "scanner": "scanner-primary", "fingerprint": "1edd42d5d1f78bdd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e5a4b9f6d6bdb1b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/graph/GraphSearch.tsx:268"}, "properties": {"repobilityId": "0897ad0fc838cba3", "scanner": "scanner-primary", "fingerprint": "e5a4b9f6d6bdb1b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5828b6780505f5f8", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/graph/GraphControls.tsx:95"}, "properties": {"repobilityId": "05e9b12e5b348881", "scanner": "scanner-primary", "fingerprint": "5828b6780505f5f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-1d53aafcf27eaa15", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/influence/components/CommitteeSearch.tsx:143"}, "properties": {"repobilityId": "bf80917e75d06bea", "scanner": "scanner-primary", "fingerprint": "1d53aafcf27eaa15", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7dea683ff5b109e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/CampaignFinanceVisualizer.tsx:1792"}, "properties": {"repobilityId": "5377defd4b8b3bcc", "scanner": "scanner-primary", "fingerprint": "a7dea683ff5b109e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-05791cf108caf1c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/IndustryBreakdown.tsx:358"}, "properties": {"repobilityId": "f95e367133ecf644", "scanner": "scanner-primary", "fingerprint": "05791cf108caf1c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b196851e9c8bb214", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/GeographicBreakdown.tsx:332"}, "properties": {"repobilityId": "21409dbd33c00bc0", "scanner": "scanner-primary", "fingerprint": "b196851e9c8bb214", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-88302b4514ad42f6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/SecFilingsSection.tsx:159"}, "properties": {"repobilityId": "f6f6ad84345f9f81", "scanner": "scanner-primary", "fingerprint": "88302b4514ad42f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0ba43a1a233c53a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/campaign-finance/components/InterestGroupBaskets.tsx:188"}, "properties": {"repobilityId": "e687ae84fb25aa0a", "scanner": "scanner-primary", "fingerprint": "0ba43a1a233c53a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-75ba10846c150e3a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/spending/components/AwardList.tsx:34"}, "properties": {"repobilityId": "d96bf3dad2a6b359", "scanner": "scanner-primary", "fingerprint": "75ba10846c150e3a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-01fa4c207b49bf63", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/VotePatternSection.tsx:117"}, "properties": {"repobilityId": "bad3559c6b8e4bde", "scanner": "scanner-primary", "fingerprint": "01fa4c207b49bf63", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-15b2248859e82a89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/RepresentativeGrid.tsx:143"}, "properties": {"repobilityId": "7cb5f56a0465e509", "scanner": "scanner-primary", "fingerprint": "15b2248859e82a89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-49ee36d4d5e03974", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/CivicAlignmentTab.tsx:130"}, "properties": {"repobilityId": "a9bab56f96d33eae", "scanner": "scanner-primary", "fingerprint": "49ee36d4d5e03974", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cfeb8fb7d559b29d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/FinanceTabEnhanced.tsx:599"}, "properties": {"repobilityId": "4ab48979f0d7bb45", "scanner": "scanner-primary", "fingerprint": "cfeb8fb7d559b29d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f4e221a460ef8a71", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/representatives/components/BiographyCard.tsx:435"}, "properties": {"repobilityId": "34f5891d9af0705f", "scanner": "scanner-primary", "fingerprint": "f4e221a460ef8a71", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-850bf50f6b5b7515", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/StateLegislatorCard.tsx:152"}, "properties": {"repobilityId": "8bcc07dccc594bd8", "scanner": "scanner-primary", "fingerprint": "850bf50f6b5b7515", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0ef428b64c17f1bf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/representatives/components/RepresentativeCard.tsx:185"}, "properties": {"repobilityId": "34fd098878ea4e3c", "scanner": "scanner-primary", "fingerprint": "0ef428b64c17f1bf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-36c69767eb097cd7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/representatives/components/StateMapCard.tsx:142"}, "properties": {"repobilityId": "99cc3826197a15f6", "scanner": "scanner-primary", "fingerprint": "36c69767eb097cd7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-026d4923d2921adf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateCommitteeProfile.tsx:151"}, "properties": {"repobilityId": "f5185581c78f20e9", "scanner": "scanner-primary", "fingerprint": "026d4923d2921adf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2a3acb72ddf683b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateCommitteeCard.tsx:75"}, "properties": {"repobilityId": "7a27c7dd52caf422", "scanner": "scanner-primary", "fingerprint": "2a3acb72ddf683b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d288388f596b73b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateLegislatorActivityFeed.tsx:190"}, "properties": {"repobilityId": "502ae074b5e4e3c7", "scanner": "scanner-primary", "fingerprint": "2d288388f596b73b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4cce5138744e85e7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/state-legislature/components/StateLegislatorVotingRecord.tsx:301"}, "properties": {"repobilityId": "76e6e0b6b216a1a0", "scanner": "scanner-primary", "fingerprint": "4cce5138744e85e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-42baba2a898b75db", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/state-legislature/components/SimpleStateLegislatorProfile.tsx:373"}, "properties": {"repobilityId": "6e6d4e2804347de9", "scanner": "scanner-primary", "fingerprint": "42baba2a898b75db", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0f6c1dc24cb5bbeb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/legislation/components/WitnessSearch.tsx:180"}, "properties": {"repobilityId": "4ccba4b1d388b35d", "scanner": "scanner-primary", "fingerprint": "0f6c1dc24cb5bbeb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6829720518b0667f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/legislation/components/PolicyAreaCrossDomain.tsx:171"}, "properties": {"repobilityId": "cb1ce5ef50267abc", "scanner": "scanner-primary", "fingerprint": "6829720518b0667f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fec650841b8346bc", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/features/legislation/components/CommitteeBiographicalInfo.tsx:156"}, "properties": {"repobilityId": "47b9b2d430c59eda", "scanner": "scanner-primary", "fingerprint": "fec650841b8346bc", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-de65ae85cda0f03d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/legislation/components/BillSpendingSection.tsx:147"}, "properties": {"repobilityId": "2842c436b5faff51", "scanner": "scanner-primary", "fingerprint": "de65ae85cda0f03d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-06ab6018a14c2f47", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/districts/components/DistrictCard.tsx:96"}, "properties": {"repobilityId": "1265bdcca1a5dc02", "scanner": "scanner-primary", "fingerprint": "06ab6018a14c2f47", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8be34958846b6b11", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/shared/components/pwa/InstallPrompt.tsx:56"}, "properties": {"repobilityId": "c0a1faf76a5cd6a8", "scanner": "scanner-primary", "fingerprint": "8be34958846b6b11", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a8a41d190eb10a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/shared/components/ui/Charts.tsx:358"}, "properties": {"repobilityId": "a897cd40c38a4274", "scanner": "scanner-primary", "fingerprint": "7a8a41d190eb10a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bc86896ff953c58d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/shared/components/ui/ErrorSystemDemo.tsx:145"}, "properties": {"repobilityId": "f1f97a6dfe4b5097", "scanner": "scanner-primary", "fingerprint": "bc86896ff953c58d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e3d0e28de7445377", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/dataValidation.ts:390"}, "properties": {"repobilityId": "0c85261059b9b5f3", "scanner": "scanner-primary", "fingerprint": "e3d0e28de7445377", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56452e14b24afa41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/rss-feeds.ts:183"}, "properties": {"repobilityId": "89e5178f22aac946", "scanner": "scanner-primary", "fingerprint": "56452e14b24afa41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-747e06c6987bd266", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/multi-district/detection.ts:23"}, "properties": {"repobilityId": "a22d0d1a58a5334e", "scanner": "scanner-primary", "fingerprint": "747e06c6987bd266", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-041df839a0356d57", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/intelligence/types.ts:738"}, "properties": {"repobilityId": "c53223f53d90eb94", "scanner": "scanner-primary", "fingerprint": "041df839a0356d57", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3e1305a30fbf3f6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/monitoring/telemetry-edge.ts:52"}, "properties": {"repobilityId": "c95eb046f26462fd", "scanner": "scanner-primary", "fingerprint": "3e1305a30fbf3f6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7fc270e58751c3aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logging/logger-edge.ts:92"}, "properties": {"repobilityId": "40f742c1c3233c06", "scanner": "scanner-primary", "fingerprint": "7fc270e58751c3aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-570908fc1136a98a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logging/logger-client.ts:121"}, "properties": {"repobilityId": "258b53a20903e9cf", "scanner": "scanner-primary", "fingerprint": "570908fc1136a98a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a53574d79cee5404", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logging/simple-logger.ts:65"}, "properties": {"repobilityId": "b3d5bfc5bfcaaacc", "scanner": "scanner-primary", "fingerprint": "a53574d79cee5404", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78f61d604d650d7e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/analytics/adoption-telemetry.ts:98"}, "properties": {"repobilityId": "543a38ac00ba75d9", "scanner": "scanner-primary", "fingerprint": "78f61d604d650d7e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7afc5d8c1aa70a3b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/services/bill.service.ts:757"}, "properties": {"repobilityId": "9c49226440e3ff07", "scanner": "scanner-primary", "fingerprint": "7afc5d8c1aa70a3b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b642670662323682", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/error-handling/chunk-error-handler.ts:94"}, "properties": {"repobilityId": "6e717e7d62eb222a", "scanner": "scanner-primary", "fingerprint": "b642670662323682", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a12dc501ddabc47f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/config/env-validation.ts:149"}, "properties": {"repobilityId": "7f444cff3fdffc13", "scanner": "scanner-primary", "fingerprint": "a12dc501ddabc47f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c23dc83be76af89", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/sw.js:11"}, "properties": {"repobilityId": "19ecb22d48da856c", "scanner": "scanner-primary", "fingerprint": "4c23dc83be76af89", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f2aef919efea69e", "level": "error", "message": {"text": "Possible secret in .env.example"}, "properties": {"repobilityId": "b588b005ce958593", "scanner": "scanner-primary", "fingerprint": "4f2aef919efea69e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".env.example"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-5da230418e748157", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/process-state-legislative-districts.mjs:22"}, "properties": {"repobilityId": "1d7a1b9493bff184", "scanner": "scanner-primary", "fingerprint": "5da230418e748157", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/process-state-legislative-districts.mjs"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-661dc594a203ed69", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/generate-mobile-pmtiles.mjs:20"}, "properties": {"repobilityId": "38ce2233e91ecacc", "scanner": "scanner-primary", "fingerprint": "661dc594a203ed69", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/generate-mobile-pmtiles.mjs"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-38773106b1776409", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/process-real-census-districts.mjs:14"}, "properties": {"repobilityId": "71d65627cf6c7739", "scanner": "scanner-primary", "fingerprint": "38773106b1776409", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/process-real-census-districts.mjs"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-83aa7699d0461785", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/process-district-boundaries.mjs:29"}, "properties": {"repobilityId": "bd12c54578d107a4", "scanner": "scanner-primary", "fingerprint": "83aa7699d0461785", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/process-district-boundaries.mjs"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-b7af83a8ce5f7a31", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/fix-district-boundaries.js:20"}, "properties": {"repobilityId": "8e0822a7ea6c89e9", "scanner": "scanner-primary", "fingerprint": "b7af83a8ce5f7a31", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fix-district-boundaries.js"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-03a7551dd858b4a0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/run-production-validation.ts:11"}, "properties": {"repobilityId": "ee342d6ba280897c", "scanner": "scanner-primary", "fingerprint": "03a7551dd858b4a0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/run-production-validation.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-f78b2ccc6ae81aa6", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in scripts/generate-committee-biographies.mjs:138"}, "properties": {"repobilityId": "56b8c50f5ad24798", "scanner": "scanner-primary", "fingerprint": "f78b2ccc6ae81aa6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/generate-committee-biographies.mjs"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-e4f34552b4f3d141", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/performance-test.mjs:11"}, "properties": {"repobilityId": "b728e7937805e63e", "scanner": "scanner-primary", "fingerprint": "e4f34552b4f3d141", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/performance-test.mjs"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-9aca829ba5c797c2", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in scripts/final-production-validation.ts:403"}, "properties": {"repobilityId": "95023f0d8559780f", "scanner": "scanner-primary", "fingerprint": "9aca829ba5c797c2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/final-production-validation.ts"}, "region": {"startLine": 403}}}]}, {"ruleId": "scanner-de950eb9424d87dd", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/process-state-boundaries.js:17"}, "properties": {"repobilityId": "05c1c84553bd1cd1", "scanner": "scanner-primary", "fingerprint": "de950eb9424d87dd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/process-state-boundaries.js"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-9f4efd0676b7a445", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in scripts/generate-biography-data.mjs:97"}, "properties": {"repobilityId": "a74c94ab0f0354a8", "scanner": "scanner-primary", "fingerprint": "9f4efd0676b7a445", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/generate-biography-data.mjs"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-d6bd1eaf26aa8c5c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/validation/validate-all.js:9"}, "properties": {"repobilityId": "cc82a29a2734d37d", "scanner": "scanner-primary", "fingerprint": "d6bd1eaf26aa8c5c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/validation/validate-all.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-018aa75b20b10112", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/middleware.ts:254"}, "properties": {"repobilityId": "7df0e822c2095082", "scanner": "scanner-primary", "fingerprint": "018aa75b20b10112", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/middleware.ts"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-863662e9da3e8e16", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:99"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "863662e9da3e8e16", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-f559991020125825", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(civic)/education/PrintableRubric.tsx:206"}, "properties": {"repobilityId": "efd99583ebe97372", "scanner": "scanner-primary", "fingerprint": "f559991020125825", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(civic)/education/PrintableRubric.tsx"}, "region": {"startLine": 206}}}]}, {"ruleId": "scanner-93660545ed84f562", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(civic)/education/PrintableWorksheet.tsx:139"}, "properties": {"repobilityId": "3bf486ad9a6d0614", "scanner": "scanner-primary", "fingerprint": "93660545ed84f562", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(civic)/education/PrintableWorksheet.tsx"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-4a7cd343ac3e978b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(civic)/education/EducationClient.tsx:1173"}, "properties": {"repobilityId": "6d37fcd18c6a2d4f", "scanner": "scanner-primary", "fingerprint": "4a7cd343ac3e978b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(civic)/education/EducationClient.tsx"}, "region": {"startLine": 1173}}}]}, {"ruleId": "scanner-38d20284e5803535", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/(civic)/industry/[sector]/page.tsx:45"}, "properties": {"repobilityId": "573985cd21ab1e86", "scanner": "scanner-primary", "fingerprint": "38d20284e5803535", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(civic)/industry/[sector]/page.tsx"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-f776f8e792023777", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/(civic)/influence/[committeeId]/page.tsx:108"}, "properties": {"repobilityId": "3f02d83d310e7ca1", "scanner": "scanner-primary", "fingerprint": "f776f8e792023777", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(civic)/influence/[committeeId]/page.tsx"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-e40740ef9794753a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/v1/changelog/route.ts:32"}, "properties": {"repobilityId": "233b48429ac0eb5d", "scanner": "scanner-primary", "fingerprint": "e40740ef9794753a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/v1/changelog/route.ts"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-eeae584a5f62169a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/lobby/[registrantId]/route.ts:129"}, "properties": {"repobilityId": "56ec8dfcfa48f9a7", "scanner": "scanner-primary", "fingerprint": "eeae584a5f62169a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/lobby/[registrantId]/route.ts"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-5019343116e70c7e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/following/route.ts:31"}, "properties": {"repobilityId": "33f6d38b22f7b575", "scanner": "scanner-primary", "fingerprint": "5019343116e70c7e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/activitypub/following/route.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-137a699149a9f6f8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/followers/route.ts:45"}, "properties": {"repobilityId": "70b9f8dc339a04e1", "scanner": "scanner-primary", "fingerprint": "137a699149a9f6f8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/activitypub/followers/route.ts"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-b75a16bf6df8889b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/outbox/route.ts:48"}, "properties": {"repobilityId": "24db6da6ca3658a1", "scanner": "scanner-primary", "fingerprint": "b75a16bf6df8889b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/activitypub/outbox/route.ts"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-74126c9a05683f64", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/nodeinfo/route.ts:37"}, "properties": {"repobilityId": "b49c72ccad6fc4b8", "scanner": "scanner-primary", "fingerprint": "74126c9a05683f64", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/activitypub/nodeinfo/route.ts"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-61627108c26ed383", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/activitypub/actor/route.ts:26"}, "properties": {"repobilityId": "42676fcfacbfc935", "scanner": "scanner-primary", "fingerprint": "61627108c26ed383", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/activitypub/actor/route.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-cd980f3fd138b552", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/migrate/google-civic/page.tsx:230"}, "properties": {"repobilityId": "d69b7bc7d9840820", "scanner": "scanner-primary", "fingerprint": "cd980f3fd138b552", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/migrate/google-civic/page.tsx"}, "region": {"startLine": 230}}}]}, {"ruleId": "scanner-b67dab5d0fb0ecb0", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/(public)/open/page.tsx:498"}, "properties": {"repobilityId": "2bec44df262a1b55", "scanner": "scanner-primary", "fingerprint": "b67dab5d0fb0ecb0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/open/page.tsx"}, "region": {"startLine": 498}}}]}, {"ruleId": "scanner-523ad5cd2b607f53", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/(public)/docs/api/page.tsx:397"}, "properties": {"repobilityId": "b97f72aea7027472", "scanner": "scanner-primary", "fingerprint": "523ad5cd2b607f53", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/docs/api/page.tsx"}, "region": {"startLine": 397}}}]}, {"ruleId": "scanner-72b5be871803b838", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/embed-docs/page.tsx:111"}, "properties": {"repobilityId": "7cb27e951f2bf76a", "scanner": "scanner-primary", "fingerprint": "72b5be871803b838", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/embed-docs/page.tsx"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-a49a476a02f37d20", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(public)/developers/page.tsx:160"}, "properties": {"repobilityId": "db431bce0a519101", "scanner": "scanner-primary", "fingerprint": "a49a476a02f37d20", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(public)/developers/page.tsx"}, "region": {"startLine": 160}}}]}, {"ruleId": "scanner-082130d6d9017190", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(embed)/layout.tsx:44"}, "properties": {"repobilityId": "f875e449dfe046d8", "scanner": "scanner-primary", "fingerprint": "082130d6d9017190", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(embed)/layout.tsx"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-6debcb1ae436650c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/bill/[billId]/ClientBillContent.tsx:1111"}, "properties": {"repobilityId": "5837e94fc90d9f34", "scanner": "scanner-primary", "fingerprint": "6debcb1ae436650c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/bill/[billId]/ClientBillContent.tsx"}, "region": {"startLine": 1111}}}]}, {"ruleId": "scanner-d3686529dc4f794d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/scripts/migrate-119th.ts:16"}, "properties": {"repobilityId": "f9e57e9da1637de3", "scanner": "scanner-primary", "fingerprint": "d3686529dc4f794d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scripts/migrate-119th.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-ef31bc1852fdc82d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/bills/BillDetail/TextPanel.tsx:146"}, "properties": {"repobilityId": "4898b26a97fa5852", "scanner": "scanner-primary", "fingerprint": "ef31bc1852fdc82d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/bills/BillDetail/TextPanel.tsx"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-1cc005fa6c1e9930", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/bills/BillDetail/SummaryPanel.tsx:201"}, "properties": {"repobilityId": "1dfb4d77be514c18", "scanner": "scanner-primary", "fingerprint": "1cc005fa6c1e9930", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/bills/BillDetail/SummaryPanel.tsx"}, "region": {"startLine": 201}}}]}, {"ruleId": "scanner-b82e8ebf2178f4ba", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/JsonLd.tsx:100"}, "properties": {"repobilityId": "fed4538264d6fd2d", "scanner": "scanner-primary", "fingerprint": "b82e8ebf2178f4ba", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/seo/JsonLd.tsx"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-a2edfb6459806dc2", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/WikipediaStyleSEO.tsx:86"}, "properties": {"repobilityId": "eb5e7a31e7a87fdf", "scanner": "scanner-primary", "fingerprint": "a2edfb6459806dc2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/seo/WikipediaStyleSEO.tsx"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-740b38fd27f4a983", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/features/representatives/components/BiographyCard.tsx:435"}, "properties": {"repobilityId": "234b3a9be56b19bd", "scanner": "scanner-primary", "fingerprint": "740b38fd27f4a983", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/representatives/components/BiographyCard.tsx"}, "region": {"startLine": 435}}}]}, {"ruleId": "scanner-7989142368c0f9fd", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/features/representatives/components/StateMapCard.tsx:142"}, "properties": {"repobilityId": "8f5c6eae237d3c3c", "scanner": "scanner-primary", "fingerprint": "7989142368c0f9fd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/representatives/components/StateMapCard.tsx"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-3e0aa269696ba909", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/features/state-legislature/components/SimpleStateLegislatorProfile.tsx:373"}, "properties": {"repobilityId": "405bf32a9449f213", "scanner": "scanner-primary", "fingerprint": "3e0aa269696ba909", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/state-legislature/components/SimpleStateLegislatorProfile.tsx"}, "region": {"startLine": 373}}}]}, {"ruleId": "scanner-27aed7cec960de21", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/features/legislation/components/CommitteeBiographicalInfo.tsx:156"}, "properties": {"repobilityId": "df1dce9a56f12e3c", "scanner": "scanner-primary", "fingerprint": "27aed7cec960de21", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/legislation/components/CommitteeBiographicalInfo.tsx"}, "region": {"startLine": 156}}}]}, {"ruleId": "scanner-897b892b97107d61", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/districts/components/DistrictMapContainer.tsx:141"}, "properties": {"repobilityId": "c999293f47459f38", "scanner": "scanner-primary", "fingerprint": "897b892b97107d61", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/districts/components/DistrictMapContainer.tsx"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-2d0a6d4338418fff", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/districts/components/LeafletDistrictMap.tsx:145"}, "properties": {"repobilityId": "a67c9e7d1df8b6e6", "scanner": "scanner-primary", "fingerprint": "2d0a6d4338418fff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/districts/components/LeafletDistrictMap.tsx"}, "region": {"startLine": 145}}}]}, {"ruleId": "scanner-dc70637df4b655df", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/districts/components/InteractiveDistrictMap.tsx:171"}, "properties": {"repobilityId": "93a78012d68c22c0", "scanner": "scanner-primary", "fingerprint": "dc70637df4b655df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/districts/components/InteractiveDistrictMap.tsx"}, "region": {"startLine": 171}}}]}, {"ruleId": "scanner-78411ec4eaf58ef3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/shared/components/pwa/InstallPrompt.tsx:164"}, "properties": {"repobilityId": "84853c572281b6a2", "scanner": "scanner-primary", "fingerprint": "78411ec4eaf58ef3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/shared/components/pwa/InstallPrompt.tsx"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-beafe80e1f622ea3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/lib/services/wikipedia.service.ts:95"}, "properties": {"repobilityId": "c2d479b2fde348ab", "scanner": "scanner-primary", "fingerprint": "beafe80e1f622ea3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/services/wikipedia.service.ts"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-ac141dadabbe3903", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/error-handling/chunk-error-handler.ts:253"}, "properties": {"repobilityId": "6092cb881e93325d", "scanner": "scanner-primary", "fingerprint": "ac141dadabbe3903", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/error-handling/chunk-error-handler.ts"}, "region": {"startLine": 253}}}]}, {"ruleId": "scanner-c342f9a533cd8402", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/__tests__/middleware/v1-middleware.test.ts:48"}, "properties": {"repobilityId": "be71308fd68772a2", "scanner": "scanner-primary", "fingerprint": "c342f9a533cd8402", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/__tests__/middleware/v1-middleware.test.ts"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-171b388b8757dd52", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in src/__tests__/middleware/middleware.test.ts:137"}, "properties": {"repobilityId": "063544692c2e90b5", "scanner": "scanner-primary", "fingerprint": "171b388b8757dd52", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/__tests__/middleware/middleware.test.ts"}, "region": {"startLine": 137}}}]}, {"ruleId": "scanner-fd467f6f17367495", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/design/civ-iq-redesign/project/handoff/screens/_render.html:93"}, "properties": {"repobilityId": "912e9a5c515c04aa", "scanner": "scanner-primary", "fingerprint": "fd467f6f17367495", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design/civ-iq-redesign/project/handoff/screens/_render.html"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-db011b462bf4445e", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3f01bed31e2050f8", "scanner": "scanner-primary", "fingerprint": "db011b462bf4445e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-bioguide-fec.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-db011b462bf4445e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7967196acf9b91ce", "scanner": "scanner-primary", "fingerprint": "db011b462bf4445e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-bioguide-fec.yml"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-db011b462bf4445e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7967196acf9b91ce", "scanner": "scanner-primary", "fingerprint": "db011b462bf4445e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-bioguide-fec.yml"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-a2640079910ce761", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "d9511aad58485303", "scanner": "scanner-primary", "fingerprint": "a2640079910ce761", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-bioguide-fec.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3295c3ff963f5b76", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "bfc1f26a78b1e54e", "scanner": "scanner-primary", "fingerprint": "3295c3ff963f5b76", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-packages.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b82d3e83825f16a1", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "01642b722c97e2af", "scanner": "scanner-primary", "fingerprint": "b82d3e83825f16a1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snapshot-adoption.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-b82d3e83825f16a1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "65d8fa93e7be70c1", "scanner": "scanner-primary", "fingerprint": "b82d3e83825f16a1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snapshot-adoption.yml"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-b82d3e83825f16a1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "65d8fa93e7be70c1", "scanner": "scanner-primary", "fingerprint": "b82d3e83825f16a1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snapshot-adoption.yml"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-12cef6c4ac1f2257", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "4e199574f60b39da", "scanner": "scanner-primary", "fingerprint": "12cef6c4ac1f2257", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/snapshot-adoption.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b870aff10c49c64a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2a85a73922bca49b", "scanner": "scanner-primary", "fingerprint": "b870aff10c49c64a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-vacancies.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-b870aff10c49c64a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "094e30d9fc230e92", "scanner": "scanner-primary", "fingerprint": "b870aff10c49c64a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-vacancies.yml"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-b870aff10c49c64a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "094e30d9fc230e92", "scanner": "scanner-primary", "fingerprint": "b870aff10c49c64a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-vacancies.yml"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-f5002967cdd8dc01", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "851d1827ad70c2b5", "scanner": "scanner-primary", "fingerprint": "f5002967cdd8dc01", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-vacancies.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "c53c79a36f63d0d8", "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-7a8b080b07d215cb", "level": "note", "message": {"text": "Very large file: src/app/api/districts/[districtId]/route.ts (2038 lines)"}, "properties": {"repobilityId": "b9d28932a9fdc864", "scanner": "scanner-primary", "fingerprint": "7a8b080b07d215cb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9a5a5d0f1aea6381", "level": "note", "message": {"text": "Very large file: src/app/bill/[billId]/ClientBillContent.tsx (1205 lines)"}, "properties": {"repobilityId": "e72953a7951d02df", "scanner": "scanner-primary", "fingerprint": "9a5a5d0f1aea6381", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fac5a505c3a8fc50", "level": "note", "message": {"text": "Very large file: src/features/campaign-finance/components/CampaignFinanceVisualizer.tsx (2169 lines)"}, "properties": {"repobilityId": "37a016551c9026c9", "scanner": "scanner-primary", "fingerprint": "fac5a505c3a8fc50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ecca32d8f6f0d32b", "level": "note", "message": {"text": "Very large file: src/features/representatives/components/FinanceTabEnhanced.tsx (1536 lines)"}, "properties": {"repobilityId": "2b68840ccbd39b07", "scanner": "scanner-primary", "fingerprint": "ecca32d8f6f0d32b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0571778ad8053c9d", "level": "note", "message": {"text": "Very large file: src/features/representatives/services/batch-voting-service.ts (1665 lines)"}, "properties": {"repobilityId": "b0671fb300fd374b", "scanner": "scanner-primary", "fingerprint": "0571778ad8053c9d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d3eceeec40257c50", "level": "note", "message": {"text": "Very large file: src/lib/fec/fec-api-service.ts (1820 lines)"}, "properties": {"repobilityId": "a009838973b6ad6a", "scanner": "scanner-primary", "fingerprint": "d3eceeec40257c50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-194753e193dacacc", "level": "note", "message": {"text": "Very large file: docs/design/civ-iq-redesign/project/redesign/SearchVariants.jsx (1834 lines)"}, "properties": {"repobilityId": "c6edc986d6d72bbe", "scanner": "scanner-primary", "fingerprint": "194753e193dacacc", "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-a87124df077534aa", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/civic-statistics/package.json"}, "properties": {"repobilityId": "6ff9892167493005", "scanner": "scanner-primary", "fingerprint": "a87124df077534aa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/civic-statistics/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c392a3c5c0fe4611", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/entity-resolution/package.json"}, "properties": {"repobilityId": "80a0527da8e9f210", "scanner": "scanner-primary", "fingerprint": "c392a3c5c0fe4611", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/entity-resolution/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ae014485ab255591", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/sdk/package.json"}, "properties": {"repobilityId": "666cbe5826d686db", "scanner": "scanner-primary", "fingerprint": "ae014485ab255591", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/sdk/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "2e9fb86db514a288", "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": "bed345d45b43d026", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "0199dd7d93f7b4c4", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "744aa7b7ff478291", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "aac064a2724d2f2e", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-19c19a652e090cf0", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: docs/design/civ-iq-redesign/project/SKILL.md"}, "properties": {"repobilityId": "d69a14e1b85420ac", "scanner": "scanner-primary", "fingerprint": "19c19a652e090cf0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/design/civ-iq-redesign/project/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bc1d17564821a967", "level": "none", "message": {"text": "Commented-code block (8 lines) in jest.setup.js:126"}, "properties": {"repobilityId": "4861daf33633e298", "scanner": "scanner-primary", "fingerprint": "bc1d17564821a967", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-607a6eedf0b17889", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/entity-resolution/src/bioguide-fec-mapping.ts:16"}, "properties": {"repobilityId": "1dd261b6bf152b9d", "scanner": "scanner-primary", "fingerprint": "607a6eedf0b17889", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0a08de9db49a756", "level": "note", "message": {"text": "Legacy-named symbol `startOld` in scripts/compare-finance-paths.ts:59"}, "properties": {"repobilityId": "8097aa4e6e325c86", "scanner": "scanner-primary", "fingerprint": "a0a08de9db49a756", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b9cf98153c285c03", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/process-state-legislative-districts.mjs:192"}, "properties": {"repobilityId": "f77bacf5b76a18c1", "scanner": "scanner-primary", "fingerprint": "b9cf98153c285c03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b06620e4735ec6f4", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in scripts/generate-wikipedia-mappings.ts:54"}, "properties": {"repobilityId": "9be9284fe3bef3b9", "scanner": "scanner-primary", "fingerprint": "b06620e4735ec6f4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-84ce7a942b9e80a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-wikipedia-mappings.ts:56"}, "properties": {"repobilityId": "784b11bb7bb269c8", "scanner": "scanner-primary", "fingerprint": "84ce7a942b9e80a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-713196ea51a9f123", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/debug-t000488.ts:26"}, "properties": {"repobilityId": "ba8b9db12429824f", "scanner": "scanner-primary", "fingerprint": "713196ea51a9f123", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2abd20f274829797", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/diagnose-congress-api.ts:215"}, "properties": {"repobilityId": "6a5cf7b8a01b72ff", "scanner": "scanner-primary", "fingerprint": "2abd20f274829797", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c0cd5c651ceb18a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-bioguide-fec.ts:90"}, "properties": {"repobilityId": "ec981adc66c2e822", "scanner": "scanner-primary", "fingerprint": "4c0cd5c651ceb18a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fce19b6372007ef0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/process-real-census-districts.mjs:150"}, "properties": {"repobilityId": "e2068a3d937ecdd3", "scanner": "scanner-primary", "fingerprint": "fce19b6372007ef0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ce39fda7caf90d7c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/performance-benchmark.ts:179"}, "properties": {"repobilityId": "2bd34cf66f5d0bd0", "scanner": "scanner-primary", "fingerprint": "ce39fda7caf90d7c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-99a531bd5d826227", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/diagnose-apis.ts:63"}, "properties": {"repobilityId": "a64d439ebd3e8f8a", "scanner": "scanner-primary", "fingerprint": "99a531bd5d826227", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2a05cdbd35835e52", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/validate-state-district-ids.mjs:215"}, "properties": {"repobilityId": "46d8f3e15c69895c", "scanner": "scanner-primary", "fingerprint": "2a05cdbd35835e52", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6ddbfb368ebeca7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-congress-api.ts:17"}, "properties": {"repobilityId": "5974278d2a61a07a", "scanner": "scanner-primary", "fingerprint": "d6ddbfb368ebeca7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0090dc9c9ba222a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/process-district-boundaries.mjs:170"}, "properties": {"repobilityId": "84aa0995177e7368", "scanner": "scanner-primary", "fingerprint": "0090dc9c9ba222a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9de71816a4136d9d", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/update-zip-mappings.js:88"}, "properties": {"repobilityId": "e05689d8e2d14cb2", "scanner": "scanner-primary", "fingerprint": "9de71816a4136d9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0c472c2c81aee42", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/rewrite-dist-js-extensions.mjs:4"}, "properties": {"repobilityId": "0b9f49a5293cf5f6", "scanner": "scanner-primary", "fingerprint": "e0c472c2c81aee42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0644590144737b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-committee-biographies.mjs:234"}, "properties": {"repobilityId": "03e8fb2d97fa6c7a", "scanner": "scanner-primary", "fingerprint": "b0644590144737b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65e1564485c9bf2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-comprehensive-mappings.ts:30"}, "properties": {"repobilityId": "e537626ab2b2a8ad", "scanner": "scanner-primary", "fingerprint": "65e1564485c9bf2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dc101e99860ac3b8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-senate-voting-optimizations.ts:47"}, "properties": {"repobilityId": "0225d85cb4d33baa", "scanner": "scanner-primary", "fingerprint": "dc101e99860ac3b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49242dc097626424", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/diagnose-fec.js:12"}, "properties": {"repobilityId": "27c8d49eff9f842b", "scanner": "scanner-primary", "fingerprint": "49242dc097626424", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5bd75813de4ed06c", "level": "note", "message": {"text": "Legacy-named symbol `totalOld` in scripts/validate-ner-swap.ts:137"}, "properties": {"repobilityId": "4715f2d81244a241", "scanner": "scanner-primary", "fingerprint": "5bd75813de4ed06c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2cdcf0c3816f53f4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/validate-ner-swap.ts:48"}, "properties": {"repobilityId": "6c093734bcdd7bb4", "scanner": "scanner-primary", "fingerprint": "2cdcf0c3816f53f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dc6d42e9f6591e1e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-vacancies.ts:55"}, "properties": {"repobilityId": "ba2b026c56f6c994", "scanner": "scanner-primary", "fingerprint": "dc6d42e9f6591e1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-253cee39991138dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-fec-finance-optimizations.ts:54"}, "properties": {"repobilityId": "39fe12dce7dae33b", "scanner": "scanner-primary", "fingerprint": "253cee39991138dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-99102f1e2faeeaba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/compute-district-vectors.ts:176"}, "properties": {"repobilityId": "5d4541b654c057b6", "scanner": "scanner-primary", "fingerprint": "99102f1e2faeeaba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7bac802a1de9921c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/validate-all-50-states.mjs:10"}, "properties": {"repobilityId": "b60c5c043c5b99fc", "scanner": "scanner-primary", "fingerprint": "7bac802a1de9921c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9224d54c366dcfca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-congress-data.ts:140"}, "properties": {"repobilityId": "d4b421da5bd347ba", "scanner": "scanner-primary", "fingerprint": "9224d54c366dcfca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8c65d4baaf35aaba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/debug-congress-data.js:34"}, "properties": {"repobilityId": "19427976abec17e3", "scanner": "scanner-primary", "fingerprint": "8c65d4baaf35aaba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f923e7c035d66f2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/debug-raw-congress-data.js:10"}, "properties": {"repobilityId": "da04c1459f910136", "scanner": "scanner-primary", "fingerprint": "4f923e7c035d66f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51d8a2d799f01c20", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/test-address-search.js:73"}, "properties": {"repobilityId": "4e57b8ec99e2e86f", "scanner": "scanner-primary", "fingerprint": "51d8a2d799f01c20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d4b2d9055afd4e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/final-validation.js:10"}, "properties": {"repobilityId": "3b965dc98ddb3619", "scanner": "scanner-primary", "fingerprint": "1d4b2d9055afd4e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-06353877054e4ce6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/debug-sc-reps.js:13"}, "properties": {"repobilityId": "ba3abbda42ae10f9", "scanner": "scanner-primary", "fingerprint": "06353877054e4ce6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e410100b7420c863", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test/test-congress-legislators-direct.js:11"}, "properties": {"repobilityId": "eaa731e979365d50", "scanner": "scanner-primary", "fingerprint": "e410100b7420c863", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8c27f0430387f5c9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sitemap.ts:411"}, "properties": {"repobilityId": "a935675f9faeca4f", "scanner": "scanner-primary", "fingerprint": "8c27f0430387f5c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-76d001392eb56e56", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/enforcement/page.tsx:116"}, "properties": {"repobilityId": "523ce1a1f1c8dba0", "scanner": "scanner-primary", "fingerprint": "76d001392eb56e56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ccee3ce9f399961", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/industry/[sector]/IndustrySectorClient.tsx:87"}, "properties": {"repobilityId": "bbe74ce2a9b848d0", "scanner": "scanner-primary", "fingerprint": "5ccee3ce9f399961", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-41cac086722e507d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/influence/[committeeId]/CommitteeProfileClient.tsx:85"}, "properties": {"repobilityId": "7a68cb690d201bf3", "scanner": "scanner-primary", "fingerprint": "41cac086722e507d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07d410b7147d9253", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/congress/CongressStatsBox.tsx:25"}, "properties": {"repobilityId": "172bdf730bfcb0b4", "scanner": "scanner-primary", "fingerprint": "07d410b7147d9253", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b08002716926174", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/state-bills/page.tsx:75"}, "properties": {"repobilityId": "c883a54d1b9155d9", "scanner": "scanner-primary", "fingerprint": "0b08002716926174", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75f558c62b80554b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/state-bills/[state]/page.tsx:347"}, "properties": {"repobilityId": "a6ecc48229cc6ad6", "scanner": "scanner-primary", "fingerprint": "75f558c62b80554b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db09306e8c02fed5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/state-bills/[state]/[billId]/page.tsx:62"}, "properties": {"repobilityId": "9d4773d7e8d80a27", "scanner": "scanner-primary", "fingerprint": "db09306e8c02fed5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9058a26c1b9468f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/regulations/LegacyRegulationsPage.tsx:73"}, "properties": {"repobilityId": "d001f9ad9e2b04a7", "scanner": "scanner-primary", "fingerprint": "e9058a26c1b9468f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-72e37479869232ef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/regulations/[documentNumber]/page.tsx:66"}, "properties": {"repobilityId": "255ffe4446861bac", "scanner": "scanner-primary", "fingerprint": "72e37479869232ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a81082875d6ce0f0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/elections/state/page.tsx:100"}, "properties": {"repobilityId": "9831d9b31c844ed7", "scanner": "scanner-primary", "fingerprint": "a81082875d6ce0f0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65a75d71b7e883ac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(civic)/representative/[bioguideId]/TabsSimple.tsx:54"}, "properties": {"repobilityId": "58d4fdbc7ff80bb0", "scanner": "scanner-primary", "fingerprint": "65a75d71b7e883ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d8959a9f848ee22", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committee/[committeeId]/bills/route.ts:141"}, "properties": {"repobilityId": "4b8a470f0e6c8da9", "scanner": "scanner-primary", "fingerprint": "4d8959a9f848ee22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9199bb33eb4e60f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committee/[committeeId]/reports/route.ts:78"}, "properties": {"repobilityId": "8386d4b814c34cc9", "scanner": "scanner-primary", "fingerprint": "e9199bb33eb4e60f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7b627d64e49a4bd0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/bill-summarizer/route.ts:54"}, "properties": {"repobilityId": "1cd633f6e2a5fc9d", "scanner": "scanner-primary", "fingerprint": "7b627d64e49a4bd0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3038f69912c4b07c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/rss-aggregator/route.ts:125"}, "properties": {"repobilityId": "e4823ba1d1bd6676", "scanner": "scanner-primary", "fingerprint": "3038f69912c4b07c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2bdef10e9e1cfbfc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/bills/route.ts:49"}, "properties": {"repobilityId": "ad7676a08e7095ad", "scanner": "scanner-primary", "fingerprint": "2bdef10e9e1cfbfc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-61d4506133a86a71", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/bills/[billId]/route.ts:76"}, "properties": {"repobilityId": "ebebc99f3fa53078", "scanner": "scanner-primary", "fingerprint": "61d4506133a86a71", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4751db9b99e2d571", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/committees/route.ts:49"}, "properties": {"repobilityId": "a62a40c6cd0a75db", "scanner": "scanner-primary", "fingerprint": "4751db9b99e2d571", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1373ea7b85dc71fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/v1/votes/[voteId]/route.ts:78"}, "properties": {"repobilityId": "5647aa023e8236eb", "scanner": "scanner-primary", "fingerprint": "1373ea7b85dc71fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a53cbf51faf22405", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bills/latest/route.ts:25"}, "properties": {"repobilityId": "85694da2a3c425ec", "scanner": "scanner-primary", "fingerprint": "a53cbf51faf22405", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a6937687f29fe81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/bills/lifecycle/route.ts:143"}, "properties": {"repobilityId": "8bf2ce53685da5ba", "scanner": "scanner-primary", "fingerprint": "9a6937687f29fe81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa09d2d98b33e408", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/govinfo/hearings/route.ts:79"}, "properties": {"repobilityId": "c462c4713e60bb13", "scanner": "scanner-primary", "fingerprint": "aa09d2d98b33e408", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c7c161d65622dd11", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/health/route.ts:438"}, "properties": {"repobilityId": "ab8e99bd6c06dfdc", "scanner": "scanner-primary", "fingerprint": "c7c161d65622dd11", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7542d786a20381c1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/spending/agency/[agencySlug]/bills/route.ts:131"}, "properties": {"repobilityId": "457e227e51e673fb", "scanner": "scanner-primary", "fingerprint": "7542d786a20381c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f29b9a8afc9d2bb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/spending/awards/legislation/route.ts:110"}, "properties": {"repobilityId": "99bc53118c45804c", "scanner": "scanner-primary", "fingerprint": "5f29b9a8afc9d2bb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af62a3bf6213f76d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/agent/route.ts:110"}, "properties": {"repobilityId": "ffdd0365bc988e05", "scanner": "scanner-primary", "fingerprint": "af62a3bf6213f76d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edf2c7c21f3921f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committee-meetings/route.ts:173"}, "properties": {"repobilityId": "312235ddbf431674", "scanner": "scanner-primary", "fingerprint": "edf2c7c21f3921f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7aa226aa65a7ad8c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/witnesses/route.ts:121"}, "properties": {"repobilityId": "97156cb98510936b", "scanner": "scanner-primary", "fingerprint": "7aa226aa65a7ad8c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-115d35dbca6d51b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/district-map/route.ts:297"}, "properties": {"repobilityId": "783fbe1889c8481c", "scanner": "scanner-primary", "fingerprint": "115d35dbca6d51b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-738524b8abcb43b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/senate-votes/[voteNumber]/route.ts:51"}, "properties": {"repobilityId": "c2536848ce6b10bd", "scanner": "scanner-primary", "fingerprint": "738524b8abcb43b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e73e2f5f47e6c584", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/feed/bills/latest/route.ts:46"}, "properties": {"repobilityId": "336fd056ef779aa6", "scanner": "scanner-primary", "fingerprint": "e73e2f5f47e6c584", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1beee5bbe6a708a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/feed/bill/[billId]/route.ts:52"}, "properties": {"repobilityId": "30c6dcb11e78e28d", "scanner": "scanner-primary", "fingerprint": "1beee5bbe6a708a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a3814258acfac71", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/search/route.ts:494"}, "properties": {"repobilityId": "f7c1fe957d66c3bd", "scanner": "scanner-primary", "fingerprint": "7a3814258acfac71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df9a341a444e5396", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/search/unified/route.ts:349"}, "properties": {"repobilityId": "8f482cea82c0da40", "scanner": "scanner-primary", "fingerprint": "df9a341a444e5396", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e3ea6ebde122ee95", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/state-bills/[state]/route.ts:179"}, "properties": {"repobilityId": "d04fc61b5a7c985a", "scanner": "scanner-primary", "fingerprint": "e3ea6ebde122ee95", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4ce89ddf0394f60", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/regulations/[documentNumber]/hearings/route.ts:82"}, "properties": {"repobilityId": "ee942ea3e5f17500", "scanner": "scanner-primary", "fingerprint": "c4ce89ddf0394f60", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3e48664699e13512", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/committees/route.ts:168"}, "properties": {"repobilityId": "b2eea81bb37060a2", "scanner": "scanner-primary", "fingerprint": "3e48664699e13512", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed9f90269466baa7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/federal-register/route.ts:146"}, "properties": {"repobilityId": "d00229cdfe5939f5", "scanner": "scanner-primary", "fingerprint": "ed9f90269466baa7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a0c7c20284261cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/federal-register/comment-periods/route.ts:103"}, "properties": {"repobilityId": "c12fc44b534bf054", "scanner": "scanner-primary", "fingerprint": "6a0c7c20284261cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a2c7fd8ceeffb080", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/federal-register/executive-orders/route.ts:79"}, "properties": {"repobilityId": "7c381c3e5dc1a950", "scanner": "scanner-primary", "fingerprint": "a2c7fd8ceeffb080", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e739cf0b77601f46", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/floor-schedule/route.ts:213"}, "properties": {"repobilityId": "dc6ba4c402f0d996", "scanner": "scanner-primary", "fingerprint": "e739cf0b77601f46", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d67392c1c7b9f041", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/geocode/route.ts:65"}, "properties": {"repobilityId": "a9bb1ed3cef11fe9", "scanner": "scanner-primary", "fingerprint": "d67392c1c7b9f041", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dca35073e7c1bf8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/geocode/route.ts:134"}, "properties": {"repobilityId": "5bc617352a161bdf", "scanner": "scanner-primary", "fingerprint": "3dca35073e7c1bf8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b1bb5012429faca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/districts/census-helpers.ts:139"}, "properties": {"repobilityId": "4bc3acfc70b6061c", "scanner": "scanner-primary", "fingerprint": "2b1bb5012429faca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-97981441e4e93197", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/districts/all/route.ts:146"}, "properties": {"repobilityId": "4e2c9d0053477981", "scanner": "scanner-primary", "fingerprint": "97981441e4e93197", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74ff7a98baa94bbc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/districts/[districtId]/route.ts:260"}, "properties": {"repobilityId": "a4734e9ec4866ad4", "scanner": "scanner-primary", "fingerprint": "74ff7a98baa94bbc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31ef0efb0333c95e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/city/[cityId]/council/route.ts:89"}, "properties": {"repobilityId": "ff3b6498120cc881", "scanner": "scanner-primary", "fingerprint": "31ef0efb0333c95e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aea678fde36fabaa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/legacy/redirect-helper.ts:304"}, "properties": {"repobilityId": "fbc362a73785aef2", "scanner": "scanner-primary", "fingerprint": "aea678fde36fabaa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7dd98ebaa94f46c7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/__tests__/v2/representatives.test.ts:43"}, "properties": {"repobilityId": "7cdeb24a7df4136a", "scanner": "scanner-primary", "fingerprint": "7dd98ebaa94f46c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b3ab33a1d1c8b56", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/route.ts:278"}, "properties": {"repobilityId": "8f7339f976351b5a", "scanner": "scanner-primary", "fingerprint": "5b3ab33a1d1c8b56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c6d665377f07a313", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/representative/[bioguideId]/finance/route.ts:55"}, "properties": {"repobilityId": "e404cdd09e8abb46", "scanner": "scanner-primary", "fingerprint": "c6d665377f07a313", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c9e097d1b6bc34a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/leadership/route.ts:27"}, "properties": {"repobilityId": "f48047cebccc3036", "scanner": "scanner-primary", "fingerprint": "9c9e097d1b6bc34a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fc4f361ac02a6450", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/state-legislature/route.ts:286"}, "properties": {"repobilityId": "1e4115d7b31f0722", "scanner": "scanner-primary", "fingerprint": "fc4f361ac02a6450", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77675b3436e8c192", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/committees/route.ts:48"}, "properties": {"repobilityId": "775b33e62874d34f", "scanner": "scanner-primary", "fingerprint": "77675b3436e8c192", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fc5172d39a854309", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/district/route.ts:173"}, "properties": {"repobilityId": "298cca2b23027209", "scanner": "scanner-primary", "fingerprint": "fc5172d39a854309", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14dfbfa15c34db87", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/representative/[bioguideId]/news/route.ts:9"}, "properties": {"repobilityId": "50a0f78cb6aae580", "scanner": "scanner-primary", "fingerprint": "14dfbfa15c34db87", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0865fc1832c35f7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/migrate/google-civic/page.tsx:110"}, "properties": {"repobilityId": "8331c0279400d764", "scanner": "scanner-primary", "fingerprint": "b0865fc1832c35f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-40383a17f1ec2911", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/open/page.tsx:515"}, "properties": {"repobilityId": "950fa6dc957c7462", "scanner": "scanner-primary", "fingerprint": "40383a17f1ec2911", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-68eaaf77c4f17470", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(public)/results/page.tsx:228"}, "properties": {"repobilityId": "61bb897d05fbe18d", "scanner": "scanner-primary", "fingerprint": "68eaaf77c4f17470", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ad6666ce749e45a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/discover-rss-feeds.ts:289"}, "properties": {"repobilityId": "f5505c27cb62f6fb", "scanner": "scanner-primary", "fingerprint": "5ad6666ce749e45a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8860f4fe3e06d53c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useEnhancedDistrictData.ts:122"}, "properties": {"repobilityId": "6349812a9c8a713c", "scanner": "scanner-primary", "fingerprint": "8860f4fe3e06d53c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34c61e0cccc75e96", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useEnhancedDistrictData.ts:208"}, "properties": {"repobilityId": "401abcdbb0ccb27b", "scanner": "scanner-primary", "fingerprint": "34c61e0cccc75e96", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a8650ca4129e3c05", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/shared/useSWR.ts:13"}, "properties": {"repobilityId": "f5dd3c8316566c4e", "scanner": "scanner-primary", "fingerprint": "a8650ca4129e3c05", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-17a51a21bdb06a22", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/StockTradeRankBadge.tsx:16"}, "properties": {"repobilityId": "0a9e2a04592bd156", "scanner": "scanner-primary", "fingerprint": "17a51a21bdb06a22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98534b815f8bbc25", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/PreambleInsightsSection.tsx:24"}, "properties": {"repobilityId": "329ac073af8472a1", "scanner": "scanner-primary", "fingerprint": "98534b815f8bbc25", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cfff6844ae0b413c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/BillIntelligenceSection.tsx:18"}, "properties": {"repobilityId": "87b17b988dc77cbb", "scanner": "scanner-primary", "fingerprint": "cfff6844ae0b413c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd6a5b7b2bf0cda3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/DistrictIntelligenceCard.tsx:16"}, "properties": {"repobilityId": "1ac33d8e8ec044e4", "scanner": "scanner-primary", "fingerprint": "bd6a5b7b2bf0cda3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-11501b5416d94f43", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/TradeSectorBreakdown.tsx:18"}, "properties": {"repobilityId": "1d4f99c596a51f75", "scanner": "scanner-primary", "fingerprint": "11501b5416d94f43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01d66b061f52c17f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/RepBriefSummary.tsx:22"}, "properties": {"repobilityId": "bd93ba97ba188dcc", "scanner": "scanner-primary", "fingerprint": "01d66b061f52c17f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-97ab5ce4c85aceda", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/CommitteeIntelligence.tsx:17"}, "properties": {"repobilityId": "ded31598eb0af08b", "scanner": "scanner-primary", "fingerprint": "97ab5ce4c85aceda", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aec234be6d54bc74", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/IntelligenceTab.tsx:49"}, "properties": {"repobilityId": "0cdf09b4c1da2ea9", "scanner": "scanner-primary", "fingerprint": "aec234be6d54bc74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4fac00d817a0fbc4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/InfluenceClusterChart.tsx:23"}, "properties": {"repobilityId": "1fd770b3c58bae5f", "scanner": "scanner-primary", "fingerprint": "4fac00d817a0fbc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ccd6bed609370114", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/intelligence/SectorLeaderboard.tsx:85"}, "properties": {"repobilityId": "d36d33506e487978", "scanner": "scanner-primary", "fingerprint": "ccd6bed609370114", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ab395427c6aeb08", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/mesh/CounterfactualSection.tsx:30"}, "properties": {"repobilityId": "78e35fcc556f556e", "scanner": "scanner-primary", "fingerprint": "7ab395427c6aeb08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d0c64d8dfbda7f46", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/questions/CommitteeActivityAnswer.tsx:29"}, "properties": {"repobilityId": "9f2749c03b14e378", "scanner": "scanner-primary", "fingerprint": "d0c64d8dfbda7f46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dea7a4cadc7ab984", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/pacs/PACProfilePage/PACProfilePage.tsx:53"}, "properties": {"repobilityId": "01d10a1e2740e587", "scanner": "scanner-primary", "fingerprint": "dea7a4cadc7ab984", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a44460d89926981", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/state-officials/StateLegislatorProfile/RecordPanel.tsx:48"}, "properties": {"repobilityId": "0d0ea8aa3ea11e59", "scanner": "scanner-primary", "fingerprint": "8a44460d89926981", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-18aa7957dcc81e45", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/state-officials/StateLegislatorProfile/BillsPanel.tsx:26"}, "properties": {"repobilityId": "c124d293cc5749a8", "scanner": "scanner-primary", "fingerprint": "18aa7957dcc81e45", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d24c38853fe25e50", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spending/SpendingContractPage/SpendingContractPage.tsx:52"}, "properties": {"repobilityId": "fc596dee930e71a8", "scanner": "scanner-primary", "fingerprint": "d24c38853fe25e50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e331c2d184989f11", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/maps/StateMap.tsx:58"}, "properties": {"repobilityId": "c229db272ef2c8c6", "scanner": "scanner-primary", "fingerprint": "e331c2d184989f11", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eebc5fa107486ae0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/states/LegacyStateOverview/LegacyStateOverviewPage.tsx:146"}, "properties": {"repobilityId": "360c4ce92d493ebe", "scanner": "scanner-primary", "fingerprint": "eebc5fa107486ae0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01d79f0be3dac45b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/states/StateOverview/data.ts:106"}, "properties": {"repobilityId": "5922dc383f742714", "scanner": "scanner-primary", "fingerprint": "01d79f0be3dac45b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8ef865c91439f141", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sectors/IndustrySectorPage/IndustrySectorPage.tsx:38"}, "properties": {"repobilityId": "7218d9b10e6665d5", "scanner": "scanner-primary", "fingerprint": "8ef865c91439f141", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2403f6e5d8abbf7b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/search/AddressAutocomplete.tsx:81"}, "properties": {"repobilityId": "e21670b338911a4a", "scanner": "scanner-primary", "fingerprint": "2403f6e5d8abbf7b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7d668b8a3ccd22db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/search/SearchVariants/data.ts:256"}, "properties": {"repobilityId": "1575cc2dea2c9deb", "scanner": "scanner-primary", "fingerprint": "7d668b8a3ccd22db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32a78a2d872f4bb3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/ask/AskEntryPage/AskEntryPage.tsx:35"}, "properties": {"repobilityId": "f78dce70fccbadf5", "scanner": "scanner-primary", "fingerprint": "32a78a2d872f4bb3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05cad8feaf96892b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/local/LocalCouncilPage/LocalCouncilPage.tsx:44"}, "properties": {"repobilityId": "ea0c795adb753033", "scanner": "scanner-primary", "fingerprint": "05cad8feaf96892b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-010ffccacd7c60c1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/shared/common/EnhancedErrorBoundary.tsx:116"}, "properties": {"repobilityId": "53176a1687bb5e7e", "scanner": "scanner-primary", "fingerprint": "010ffccacd7c60c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25a44d52de5849de", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/shared/common/EnhancedErrorBoundary.tsx:117"}, "properties": {"repobilityId": "8045ceda6f31f5b7", "scanner": "scanner-primary", "fingerprint": "25a44d52de5849de", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5e15e21fe12b5c8d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/elections/ElectionPage/ElectionPage.tsx:61"}, "properties": {"repobilityId": "6093e98334082ee5", "scanner": "scanner-primary", "fingerprint": "5e15e21fe12b5c8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8b62c0bc8da93e63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/districts/DistrictPage/DistrictPage.tsx:40"}, "properties": {"repobilityId": "6d255df6caf20219", "scanner": "scanner-primary", "fingerprint": "8b62c0bc8da93e63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ff2642cb13f38c58", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/graph/useGraphData.ts:12"}, "properties": {"repobilityId": "d1d2bc360272d759", "scanner": "scanner-primary", "fingerprint": "ff2642cb13f38c58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a152753747c70eb2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/MoneyPanel.tsx:37"}, "properties": {"repobilityId": "7554e5ef72442fc8", "scanner": "scanner-primary", "fingerprint": "a152753747c70eb2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-beb1baf931c11af3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/RecordPanel.tsx:41"}, "properties": {"repobilityId": "bf4f82553480eaff", "scanner": "scanner-primary", "fingerprint": "beb1baf931c11af3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4697b8c20b65f31", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/ProfileHybrid.tsx:42"}, "properties": {"repobilityId": "5953bd106749ea14", "scanner": "scanner-primary", "fingerprint": "d4697b8c20b65f31", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a18ebc423cdd478", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/BillsPanel.tsx:33"}, "properties": {"repobilityId": "c12263e2f34ca3a7", "scanner": "scanner-primary", "fingerprint": "6a18ebc423cdd478", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b28aea9b22c32d13", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/ProfileHybrid/MeetingsPanel.tsx:38"}, "properties": {"repobilityId": "e4abe67a3c3304a6", "scanner": "scanner-primary", "fingerprint": "b28aea9b22c32d13", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d5962fae696f37c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/officials/VotingRecordPage/VotingRecordPage.tsx:23"}, "properties": {"repobilityId": "358d4461e13111bc", "scanner": "scanner-primary", "fingerprint": "d5962fae696f37c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1a1051a401dc6868", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/topics/IssueTopicPage/IssueTopicPage.tsx:33"}, "properties": {"repobilityId": "b00cde829b52ad2a", "scanner": "scanner-primary", "fingerprint": "1a1051a401dc6868", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0830c2593981af93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-government/components/StateExecutivesTab.tsx:73"}, "properties": {"repobilityId": "6ddd263c3b35a35e", "scanner": "scanner-primary", "fingerprint": "0830c2593981af93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c79b98c63d92e458", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-government/components/StateJudiciaryTab.tsx:22"}, "properties": {"repobilityId": "9f4335eccdf8de35", "scanner": "scanner-primary", "fingerprint": "c79b98c63d92e458", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-79836a6fe74697d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/CampaignFinanceVisualizer.tsx:275"}, "properties": {"repobilityId": "ca67a3b0593dbd8b", "scanner": "scanner-primary", "fingerprint": "79836a6fe74697d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-22712b3fbe32f8bc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/FinanceJurisdictionSection.tsx:13"}, "properties": {"repobilityId": "547eb6121a25a47f", "scanner": "scanner-primary", "fingerprint": "22712b3fbe32f8bc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6ab1f03bfbd13451", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/SecFilingsSection.tsx:17"}, "properties": {"repobilityId": "bfa52a65de49055f", "scanner": "scanner-primary", "fingerprint": "6ab1f03bfbd13451", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-72fe4c45c3022c74", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/campaign-finance/components/StockTradesSection.tsx:20"}, "properties": {"repobilityId": "ac4f1019cf4ad770", "scanner": "scanner-primary", "fingerprint": "72fe4c45c3022c74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2aeca17b08873d85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/spending/components/AgencyRelatedBills.tsx:40"}, "properties": {"repobilityId": "a9418a805c567394", "scanner": "scanner-primary", "fingerprint": "2aeca17b08873d85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-59ba0d996bd355d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/spending/components/SpendingNarrativeSection.tsx:35"}, "properties": {"repobilityId": "1c007b0f129862bc", "scanner": "scanner-primary", "fingerprint": "59ba0d996bd355d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e0ab0750ba82aa2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/spending/components/EnablingLegislation.tsx:40"}, "properties": {"repobilityId": "99ec51edb683675c", "scanner": "scanner-primary", "fingerprint": "e0ab0750ba82aa2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a96fe52a141ce0c1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/hooks/useRepresentatives.ts:29"}, "properties": {"repobilityId": "9c46356c0620a312", "scanner": "scanner-primary", "fingerprint": "a96fe52a141ce0c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9bb24fcbea261dc5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/representatives/components/SimpleRepresentativeProfile.tsx:96"}, "properties": {"repobilityId": "dc89b6d414a999ac", "scanner": "scanner-primary", "fingerprint": "9bb24fcbea261dc5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-679782a4d51b9ba5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/SimpleRepresentativeProfile.tsx:104"}, "properties": {"repobilityId": "99bb6b51e8737c1e", "scanner": "scanner-primary", "fingerprint": "679782a4d51b9ba5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-863ca85e0f26a525", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/VotePatternSection.tsx:35"}, "properties": {"repobilityId": "5a0591f23c7df971", "scanner": "scanner-primary", "fingerprint": "863ca85e0f26a525", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f95ce4932da809a0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/representatives/components/CommitteeMembershipsCard.tsx:157"}, "properties": {"repobilityId": "cda3c49352fc6c0d", "scanner": "scanner-primary", "fingerprint": "f95ce4932da809a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16cd5c52f105a004", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/ConnectionsTab.tsx:84"}, "properties": {"repobilityId": "e18729dbbe1a4a42", "scanner": "scanner-primary", "fingerprint": "16cd5c52f105a004", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bbe56b6793e31750", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/BillsTab.tsx:64"}, "properties": {"repobilityId": "f636afa08ca1c90f", "scanner": "scanner-primary", "fingerprint": "bbe56b6793e31750", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9478bf21def9813", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/VotingTab.tsx:137"}, "properties": {"repobilityId": "f57235d3d4f0d167", "scanner": "scanner-primary", "fingerprint": "c9478bf21def9813", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-805e43abf4f1dfff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/StateRepresentativesTab.tsx:155"}, "properties": {"repobilityId": "4887024c46dd56cb", "scanner": "scanner-primary", "fingerprint": "805e43abf4f1dfff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-082d95331cc1f7d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/CivicAlignmentTab.tsx:26"}, "properties": {"repobilityId": "a8e32ab288fbdbe3", "scanner": "scanner-primary", "fingerprint": "082d95331cc1f7d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-861b127db62246c7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/LobbyingTab.tsx:74"}, "properties": {"repobilityId": "8f1bad2c01461e22", "scanner": "scanner-primary", "fingerprint": "861b127db62246c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b36c8d5a88c1c649", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/FinanceTabEnhanced.tsx:353"}, "properties": {"repobilityId": "90e2e595b797724a", "scanner": "scanner-primary", "fingerprint": "b36c8d5a88c1c649", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d3e0664f47c4fe8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/FinanceTab.tsx:107"}, "properties": {"repobilityId": "85f211b0d2f06a83", "scanner": "scanner-primary", "fingerprint": "1d3e0664f47c4fe8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6d44cfaebf7b2df8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/BiographyCard.tsx:241"}, "properties": {"repobilityId": "31aeb948e513fc25", "scanner": "scanner-primary", "fingerprint": "6d44cfaebf7b2df8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6d455d2213186601", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/CongressHeader.tsx:82"}, "properties": {"repobilityId": "165f24667ccdf52c", "scanner": "scanner-primary", "fingerprint": "6d455d2213186601", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-565a58afa3ebac96", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/StateMapCard.tsx:80"}, "properties": {"repobilityId": "60f1291f53daeaf3", "scanner": "scanner-primary", "fingerprint": "565a58afa3ebac96", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de49dbea91139c86", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/profile-redesign/InfluenceSection.tsx:27"}, "properties": {"repobilityId": "85c534dcbf701aae", "scanner": "scanner-primary", "fingerprint": "de49dbea91139c86", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa84d5dba5efe558", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/profile-redesign/ProfileRedesign.tsx:46"}, "properties": {"repobilityId": "4392dfd7f537049e", "scanner": "scanner-primary", "fingerprint": "aa84d5dba5efe558", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7e868632f0a4c02e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/components/profile-redesign/NewsSection.tsx:26"}, "properties": {"repobilityId": "567a8f8b13f84438", "scanner": "scanner-primary", "fingerprint": "7e868632f0a4c02e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2acf008026f1e632", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/unified-congress.service.ts:362"}, "properties": {"repobilityId": "8b2a34f331acd881", "scanner": "scanner-primary", "fingerprint": "2acf008026f1e632", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bc1f913d3b2a8e58", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/enhanced-congress-data-service.ts:223"}, "properties": {"repobilityId": "ac99ad852c2d0f9c", "scanner": "scanner-primary", "fingerprint": "bc1f913d3b2a8e58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6fa9c2970fe8159b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/congress-api.ts:762"}, "properties": {"repobilityId": "5c850988c4540c80", "scanner": "scanner-primary", "fingerprint": "6fa9c2970fe8159b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8eba31f29d78910", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/representatives/services/batch-voting-service.ts:106"}, "properties": {"repobilityId": "a310be6f3543036f", "scanner": "scanner-primary", "fingerprint": "d8eba31f29d78910", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67883b3d7f87725b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/representatives/services/batch-voting-service.ts:31"}, "properties": {"repobilityId": "a9567e6599980270", "scanner": "scanner-primary", "fingerprint": "67883b3d7f87725b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-95f0c49a50dd5aad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/StateLegislatorActivityFeed.tsx:63"}, "properties": {"repobilityId": "225e0a5261a43997", "scanner": "scanner-primary", "fingerprint": "95f0c49a50dd5aad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-86778b4468ad941e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/StateLegislatorBillsList.tsx:53"}, "properties": {"repobilityId": "41bef430152b002b", "scanner": "scanner-primary", "fingerprint": "86778b4468ad941e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb557b6f90deb862", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/StateLegislatorVotingRecord.tsx:74"}, "properties": {"repobilityId": "dc4e2880fb8695f1", "scanner": "scanner-primary", "fingerprint": "fb557b6f90deb862", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-00606da6030391d1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/state-legislature/components/SimpleStateLegislatorProfile.tsx:164"}, "properties": {"repobilityId": "26d59150337b741f", "scanner": "scanner-primary", "fingerprint": "00606da6030391d1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3172dac231d6bb76", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/WitnessSearch.tsx:69"}, "properties": {"repobilityId": "e75167b95f36219d", "scanner": "scanner-primary", "fingerprint": "3172dac231d6bb76", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ffccf477b983a60", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/PolicyAreaCrossDomain.tsx:22"}, "properties": {"repobilityId": "8f8e837ee92b2190", "scanner": "scanner-primary", "fingerprint": "0ffccf477b983a60", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-48f634a50d7397b9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/BillLifecycleChart.tsx:26"}, "properties": {"repobilityId": "9b50e4d59b3f5001", "scanner": "scanner-primary", "fingerprint": "48f634a50d7397b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5db33ed5f55ebfb5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/components/BillSpendingSection.tsx:13"}, "properties": {"repobilityId": "a2a939f573911887", "scanner": "scanner-primary", "fingerprint": "5db33ed5f55ebfb5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-63ab171f28a74702", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/legislation/services/bill-text-fetcher.ts:51"}, "properties": {"repobilityId": "6da8513480208f56", "scanner": "scanner-primary", "fingerprint": "63ab171f28a74702", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2fd8b0b901f6b27f", "level": "note", "message": {"text": "Legacy-named symbol `isOld` in src/features/legislation/services/ai/bill-summary-cache.ts:359"}, "properties": {"repobilityId": "1fea992b0e89f6e5", "scanner": "scanner-primary", "fingerprint": "2fd8b0b901f6b27f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b3dfa6557c50df0f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/search/components/AdvancedSearch.tsx:164"}, "properties": {"repobilityId": "1b2278469f4cbd10", "scanner": "scanner-primary", "fingerprint": "b3dfa6557c50df0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af8a4c04773d1a95", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/committees/components/CommitteeHearings.tsx:34"}, "properties": {"repobilityId": "7d8a61452ffede11", "scanner": "scanner-primary", "fingerprint": "af8a4c04773d1a95", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-44e6d8e684089bac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/committees/components/CommitteeRegulations.tsx:30"}, "properties": {"repobilityId": "157f4567a94637bc", "scanner": "scanner-primary", "fingerprint": "44e6d8e684089bac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-636bda4e907f44d6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/CommunityProfileSection.tsx:70"}, "properties": {"repobilityId": "a5f022b6bccb6b02", "scanner": "scanner-primary", "fingerprint": "636bda4e907f44d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a34ad66d96aadda", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/DistrictRelevantBills.tsx:32"}, "properties": {"repobilityId": "fdeae7d418f6af85", "scanner": "scanner-primary", "fingerprint": "7a34ad66d96aadda", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30df9c46e95adc2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/EconomicIndicatorsSection.tsx:17"}, "properties": {"repobilityId": "d98c987dee69b442", "scanner": "scanner-primary", "fingerprint": "30df9c46e95adc2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c30f46ac5cd1025", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/HousingAffordabilitySection.tsx:50"}, "properties": {"repobilityId": "b8c199511307ab94", "scanner": "scanner-primary", "fingerprint": "0c30f46ac5cd1025", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-998705361668d8c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/DistrictMap.tsx:394"}, "properties": {"repobilityId": "9ae74e7dcd2b228c", "scanner": "scanner-primary", "fingerprint": "998705361668d8c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-16e252af0c793593", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/NeighboringDistricts.tsx:13"}, "properties": {"repobilityId": "ecfcd657a7f07755", "scanner": "scanner-primary", "fingerprint": "16e252af0c793593", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-92df6dbea8d56f9f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/RealDistrictBoundaryMap.tsx:201"}, "properties": {"repobilityId": "099bb0b6fc405cf0", "scanner": "scanner-primary", "fingerprint": "92df6dbea8d56f9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9eecc6d89d9a8f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/AddressRefinement.tsx:88"}, "properties": {"repobilityId": "8078649b05b43330", "scanner": "scanner-primary", "fingerprint": "f9eecc6d89d9a8f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe63fffadeaabae0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/districts/components/InteractiveDistrictMap.tsx:194"}, "properties": {"repobilityId": "f15de2b7622c2991", "scanner": "scanner-primary", "fingerprint": "fe63fffadeaabae0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ab50655077e5e22", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/trading-cards/card-data.ts:257"}, "properties": {"repobilityId": "cce6b741787a374a", "scanner": "scanner-primary", "fingerprint": "7ab50655077e5e22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-84abca8a040b51a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/trading-cards/components/TradingCardGrid.tsx:57"}, "properties": {"repobilityId": "ad01e428ab25c5ed", "scanner": "scanner-primary", "fingerprint": "84abca8a040b51a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2fc23a0f4a15bc52", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/news/components/SimpleNewsSection.tsx:71"}, "properties": {"repobilityId": "7dab9a2ed952e1c4", "scanner": "scanner-primary", "fingerprint": "2fc23a0f4a15bc52", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b81c698dd1f49f1e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/news/components/SimpleGoogleNewsFeed.tsx:91"}, "properties": {"repobilityId": "4df58ed8c577826a", "scanner": "scanner-primary", "fingerprint": "b81c698dd1f49f1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6446bfd99c7881e", "level": "note", "message": {"text": "Legacy-named symbol `hoursOld` in src/features/news/services/news-clustering-engine.ts:110"}, "properties": {"repobilityId": "6f3ff71dbd2e6d08", "scanner": "scanner-primary", "fingerprint": "b6446bfd99c7881e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3407fa7c10207fa9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/shared/components/providers/SWRProvider.tsx:13"}, "properties": {"repobilityId": "a325e904b4404ac6", "scanner": "scanner-primary", "fingerprint": "3407fa7c10207fa9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d159bb126bba8e9e", "level": "note", "message": {"text": "Legacy-named symbol `cdLegacy` in src/lib/census-geocoder.ts:337"}, "properties": {"repobilityId": "017c004b418d188d", "scanner": "scanner-primary", "fingerprint": "d159bb126bba8e9e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-50ddfd818fb5ebf5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/census-api.ts:117"}, "properties": {"repobilityId": "e1c5704838a8bffd", "scanner": "scanner-primary", "fingerprint": "50ddfd818fb5ebf5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bb34d7089e6c2297", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/map-tiles.ts:107"}, "properties": {"repobilityId": "25a40959124fcc2b", "scanner": "scanner-primary", "fingerprint": "bb34d7089e6c2297", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ec4e12f6d66a8f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/rss-feeds.ts:188"}, "properties": {"repobilityId": "2bee52f772fc2fc1", "scanner": "scanner-primary", "fingerprint": "7ec4e12f6d66a8f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-781d65db730a1b53", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/openstates-api.ts:485"}, "properties": {"repobilityId": "cc78be6c41828877", "scanner": "scanner-primary", "fingerprint": "781d65db730a1b53", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eea0b874ed202787", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/multi-district/detection.ts:112"}, "properties": {"repobilityId": "e67ee4dddfe04733", "scanner": "scanner-primary", "fingerprint": "eea0b874ed202787", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4a3bc73ef1107da2", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/lib/intelligence/analyzers/vote-finance-analyzer.ts:89"}, "properties": {"repobilityId": "f8c9c69d5a27b98d", "scanner": "scanner-primary", "fingerprint": "4a3bc73ef1107da2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5832f5734c63326a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/intelligence/analyzers/civic-brief-assembler.ts:197"}, "properties": {"repobilityId": "b007065ba61e6f07", "scanner": "scanner-primary", "fingerprint": "5832f5734c63326a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f88bff9c9707faf2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/intelligence/analyzers/vote-prediction-analyzer.ts:126"}, "properties": {"repobilityId": "11ad49b97ccdb6be", "scanner": "scanner-primary", "fingerprint": "f88bff9c9707faf2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63180d16a25ab2a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/intelligence/analyzers/lobbying-pipeline-analyzer.ts:443"}, "properties": {"repobilityId": "e11cdbd5e02a136e", "scanner": "scanner-primary", "fingerprint": "63180d16a25ab2a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-588612ae8cef172b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api/middleware.ts:226"}, "properties": {"repobilityId": "f990089a43a48ba0", "scanner": "scanner-primary", "fingerprint": "588612ae8cef172b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75f56d47e9925e02", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in src/lib/api/wikipedia.ts:122"}, "properties": {"repobilityId": "e86fb19b8a80681f", "scanner": "scanner-primary", "fingerprint": "75f56d47e9925e02", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0e420c74eb2eb4a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/helpers/performance.ts:144"}, "properties": {"repobilityId": "ab033bc2e6a4e0b7", "scanner": "scanner-primary", "fingerprint": "0e420c74eb2eb4a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1fadcabac5dbb6cb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mesh/district-profile.ts:404"}, "properties": {"repobilityId": "fa0b7ed40521e89d", "scanner": "scanner-primary", "fingerprint": "1fadcabac5dbb6cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-37e88c50310c73a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/questions/template-data-fetchers.ts:205"}, "properties": {"repobilityId": "2fba5c6710fac9ea", "scanner": "scanner-primary", "fingerprint": "37e88c50310c73a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0a800a97e54cb8b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/senate-lobbying-api.ts:280"}, "properties": {"repobilityId": "c5be324930821ff2", "scanner": "scanner-primary", "fingerprint": "e0a800a97e54cb8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-43ab6186fc53ed1b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/fred-economic-service.ts:35"}, "properties": {"repobilityId": "fd8f9245f70fd8f3", "scanner": "scanner-primary", "fingerprint": "43ab6186fc53ed1b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b923fc0fb4c47ac9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/data-sources/cms-provider-service.ts:23"}, "properties": {"repobilityId": "e3ece6fab2ebda11", "scanner": "scanner-primary", "fingerprint": "b923fc0fb4c47ac9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47cedae95562e37f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/sec-edgar-service.ts:32"}, "properties": {"repobilityId": "709fdc6970d18158", "scanner": "scanner-primary", "fingerprint": "47cedae95562e37f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3982e3e3d35f0dab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/house-disclosure-service.ts:56"}, "properties": {"repobilityId": "44fea57662cce2be", "scanner": "scanner-primary", "fingerprint": "3982e3e3d35f0dab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-855f15da47e63d93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/data-sources/senate-disclosure-service.ts:168"}, "properties": {"repobilityId": "fe3e8dd4d16ba4a3", "scanner": "scanner-primary", "fingerprint": "855f15da47e63d93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2db766ca321fa335", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/fec/fec-api-service.ts:537"}, "properties": {"repobilityId": "f14652955a9e8a73", "scanner": "scanner-primary", "fingerprint": "2db766ca321fa335", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-301654a115a02903", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/fec/dataProcessor.ts:74"}, "properties": {"repobilityId": "c8780318f91471e3", "scanner": "scanner-primary", "fingerprint": "301654a115a02903", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f222e6a2aaa7549", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/fec/finance-aggregator.ts:636"}, "properties": {"repobilityId": "dd0f0a5886660a51", "scanner": "scanner-primary", "fingerprint": "5f222e6a2aaa7549", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4114542e4748f1e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mcp/tools/finance.ts:124"}, "properties": {"repobilityId": "602800166d66836d", "scanner": "scanner-primary", "fingerprint": "f4114542e4748f1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91327708a48b96b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mcp/tools/civic.ts:63"}, "properties": {"repobilityId": "ae1328b7c78119be", "scanner": "scanner-primary", "fingerprint": "91327708a48b96b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c77a342c10ab96d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/mcp/tools/legislation.ts:45"}, "properties": {"repobilityId": "ebcd4fe9664a16c3", "scanner": "scanner-primary", "fingerprint": "4c77a342c10ab96d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-25e2897ec31db905", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/errors/ErrorHandlers.ts:361"}, "properties": {"repobilityId": "3511f1fe05966c74", "scanner": "scanner-primary", "fingerprint": "25e2897ec31db905", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d789e764cce49370", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/services/committee-activity.service.ts:274"}, "properties": {"repobilityId": "2ef684b480e1b1ce", "scanner": "scanner-primary", "fingerprint": "d789e764cce49370", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f46dcbcca31a710f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/committee-activity.service.ts:252"}, "properties": {"repobilityId": "a404b396c5d53169", "scanner": "scanner-primary", "fingerprint": "f46dcbcca31a710f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75aa2bd284c85d90", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/services/committee.service.ts:468"}, "properties": {"repobilityId": "da8ea3d0e30ca866", "scanner": "scanner-primary", "fingerprint": "75aa2bd284c85d90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3748f5e546632e44", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in src/lib/services/wikipedia.service.ts:66"}, "properties": {"repobilityId": "61bc459073e56aa2", "scanner": "scanner-primary", "fingerprint": "3748f5e546632e44", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1cdc914b5411dcb1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/wikipedia.service.ts:87"}, "properties": {"repobilityId": "bb17d2b018f1dd56", "scanner": "scanner-primary", "fingerprint": "1cdc914b5411dcb1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4fb0adaee2ea5602", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/google-news-rss.ts:57"}, "properties": {"repobilityId": "a70832c6bd916653", "scanner": "scanner-primary", "fingerprint": "4fb0adaee2ea5602", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e0970bcf9c985bde", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/bill.service.ts:189"}, "properties": {"repobilityId": "e1ec9ef460b2ee52", "scanner": "scanner-primary", "fingerprint": "e0970bcf9c985bde", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6f3a952e5ba2702", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/census-api.service.ts:32"}, "properties": {"repobilityId": "9c5c1944195503b8", "scanner": "scanner-primary", "fingerprint": "b6f3a952e5ba2702", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4991bfa7e32de699", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/cache/redis-client.ts:315"}, "properties": {"repobilityId": "c00c365ea00f12f6", "scanner": "scanner-primary", "fingerprint": "4991bfa7e32de699", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cbb790c585170e81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/cache/redis-client.ts:322"}, "properties": {"repobilityId": "849333b6f6dc5dad", "scanner": "scanner-primary", "fingerprint": "cbb790c585170e81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e50d87859a1821c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/state-event-detector.ts:67"}, "properties": {"repobilityId": "ee9c685a65a86e91", "scanner": "scanner-primary", "fingerprint": "9e50d87859a1821c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7bf2721a95156fd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/hearing-detector.ts:37"}, "properties": {"repobilityId": "6a9af8722d7faee3", "scanner": "scanner-primary", "fingerprint": "b7bf2721a95156fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0e72346384313a81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/executive-order-detector.ts:40"}, "properties": {"repobilityId": "1ec4295fa01f752a", "scanner": "scanner-primary", "fingerprint": "0e72346384313a81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a48d8a49038ff2a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/comment-period-detector.ts:44"}, "properties": {"repobilityId": "c907899f49acc909", "scanner": "scanner-primary", "fingerprint": "3a48d8a49038ff2a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9fc8926cc48d21e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/nostr/detectors/bill-detector.ts:39"}, "properties": {"repobilityId": "06d77f18a7ad1a2f", "scanner": "scanner-primary", "fingerprint": "9fc8926cc48d21e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-16ef42d9b559c715", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/district-lookup.ts:446"}, "properties": {"repobilityId": "76f574a3d93abe64", "scanner": "scanner-primary", "fingerprint": "16ef42d9b559c715", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db41a140716468b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/api/base.service.ts:84"}, "properties": {"repobilityId": "c3fd0ec5e7ef864b", "scanner": "scanner-primary", "fingerprint": "db41a140716468b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d77f25893c72601f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/core/representatives-core.service.ts:11"}, "properties": {"repobilityId": "d2f73b360eed0fc1", "scanner": "scanner-primary", "fingerprint": "d77f25893c72601f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1a1844105cf967f1", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in src/services/core/state-legislature-core.service.ts:1327"}, "properties": {"repobilityId": "a6acf5020b4ffaeb", "scanner": "scanner-primary", "fingerprint": "1a1844105cf967f1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a627a6bb3a9d42ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/core/state-legislature-core.service.ts:1313"}, "properties": {"repobilityId": "f10b409b87994810", "scanner": "scanner-primary", "fingerprint": "a627a6bb3a9d42ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2cc641bb657d9137", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/ai/summarization.service.ts:330"}, "properties": {"repobilityId": "7fde25c568cec9b6", "scanner": "scanner-primary", "fingerprint": "2cc641bb657d9137", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-08607e424540eb56", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/__tests__/intelligence/anomaly-detection.test.ts:31"}, "properties": {"repobilityId": "026dd0f20b717466", "scanner": "scanner-primary", "fingerprint": "08607e424540eb56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8d0286ba9230e55", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/features/districts/components/CommentCountBadge.test.tsx:41"}, "properties": {"repobilityId": "effcbe23d444317b", "scanner": "scanner-primary", "fingerprint": "c8d0286ba9230e55", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-26ab717ea73054e9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/__tests__/lib/fec/finance-aggregator-from-aggregates.test.ts:135"}, "properties": {"repobilityId": "84cde87af51bb4b3", "scanner": "scanner-primary", "fingerprint": "26ab717ea73054e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0930641ab52048f8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/__tests__/lib/services/committee-activity.service.test.ts:43"}, "properties": {"repobilityId": "d55ce4a84ee0c0e5", "scanner": "scanner-primary", "fingerprint": "0930641ab52048f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89e2497362552f2f", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/EmbedMode.jsx:1"}, "properties": {"repobilityId": "abe55374e1f1609f", "scanner": "scanner-primary", "fingerprint": "89e2497362552f2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fd54754dbbdc129", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/design/civ-iq-redesign/project/redesign/design-canvas.jsx:1"}, "properties": {"repobilityId": "0ae6694e7554b574", "scanner": "scanner-primary", "fingerprint": "1fd54754dbbdc129", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70f5d73a5e2b9e72", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/design/civ-iq-redesign/project/redesign/design-canvas.jsx:62"}, "properties": {"repobilityId": "a5143d92d09f2f9b", "scanner": "scanner-primary", "fingerprint": "70f5d73a5e2b9e72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-332884b14088b918", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/AISurface.jsx:752"}, "properties": {"repobilityId": "5dd457e2a3fa645b", "scanner": "scanner-primary", "fingerprint": "332884b14088b918", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6776cd623feb699c", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/ProfileRefined.jsx:1"}, "properties": {"repobilityId": "9522ddfc3c78a666", "scanner": "scanner-primary", "fingerprint": "6776cd623feb699c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-935bc9110ef6a45f", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/redesign/SearchVariants.jsx:1"}, "properties": {"repobilityId": "09e55ee82ff0c921", "scanner": "scanner-primary", "fingerprint": "935bc9110ef6a45f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f5bce4d8e0610de", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/handoff/reference-jsx/ProfileRefined.jsx:1"}, "properties": {"repobilityId": "bc866901ffb68205", "scanner": "scanner-primary", "fingerprint": "7f5bce4d8e0610de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7973d6f5a08aa47f", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/design/civ-iq-redesign/project/design_handoff_official_profile/designs/design-canvas.jsx:1"}, "properties": {"repobilityId": "94cbe64fca6ba330", "scanner": "scanner-primary", "fingerprint": "7973d6f5a08aa47f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0dac1b04fc6fea93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/design/civ-iq-redesign/project/design_handoff_official_profile/designs/design-canvas.jsx:62"}, "properties": {"repobilityId": "143437bd67f15c7c", "scanner": "scanner-primary", "fingerprint": "0dac1b04fc6fea93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b4d4d8879c2ac905", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/design/civ-iq-redesign/project/design_handoff_official_profile/designs/ProfileRefined.jsx:1"}, "properties": {"repobilityId": "6c7cc66e0b6b461e", "scanner": "scanner-primary", "fingerprint": "b4d4d8879c2ac905", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2153571a4d5dd99f", "level": "note", "message": {"text": "78 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "7a9eb2130cdb9da2", "scanner": "scanner-primary", "fingerprint": "2153571a4d5dd99f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-a19d6097e23eb401", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/health (scripts/test-profile-enhancement.js:100)"}, "properties": {"repobilityId": "171f3212102570c4", "scanner": "scanner-primary", "fingerprint": "a19d6097e23eb401", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-707f26c275918f4f", "level": "error", "message": {"text": "Dangling fetch: POST https://query.wikidata.org/sparql (scripts/generate-committee-biographies.mjs:234)"}, "properties": {"repobilityId": "63466eb74f753b09", "scanner": "scanner-primary", "fingerprint": "707f26c275918f4f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7cb52b720906802a", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=${zip} (scripts/test-census-integration.js:27)"}, "properties": {"repobilityId": "d97cd7a43437653c", "scanner": "scanner-primary", "fingerprint": "7cb52b720906802a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8430bb16adedf924", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/health (scripts/test-census-integration.js:56)"}, "properties": {"repobilityId": "b583f24c03cbf755", "scanner": "scanner-primary", "fingerprint": "8430bb16adedf924", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-10c647d51a8c1287", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/member?api_key=${process.env.CONGRESS_API_KEY}&limit=2&format=json (scripts/test/test-external-apis.js:19)"}, "properties": {"repobilityId": "0a08d01dc426776d", "scanner": "scanner-primary", "fingerprint": "10c647d51a8c1287", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89e256be7e473c3f", "level": "error", "message": {"text": "Dangling fetch: GET https://api.open.fec.gov/v1/candidates/?api_key=${process.env.FEC_API_KEY}&per_page=2&is_active_candidate=true (scripts/test/test-external-apis.js:47)"}, "properties": {"repobilityId": "be212669f5e6414b", "scanner": "scanner-primary", "fingerprint": "89e256be7e473c3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d7b5ce1a708ea09", "level": "error", "message": {"text": "Dangling fetch: GET https://v3.openstates.org/people?jurisdiction=us&per_page=2 (scripts/test/test-external-apis.js:121)"}, "properties": {"repobilityId": "fdbb1928a8c8b173", "scanner": "scanner-primary", "fingerprint": "5d7b5ce1a708ea09", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8334fc0129fd1777", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/debug/congress-current (scripts/test/debug-congress-data.js:7)"}, "properties": {"repobilityId": "3788d44b6280279c", "scanner": "scanner-primary", "fingerprint": "8334fc0129fd1777", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3384b8a141a80b23", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=${zip} (scripts/test/debug-congress-data.js:34)"}, "properties": {"repobilityId": "6f5fc284ffd242ba", "scanner": "scanner-primary", "fingerprint": "3384b8a141a80b23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-56b9f4b60ecc7476", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=29650 (scripts/test/debug-congress-data.js:63)"}, "properties": {"repobilityId": "26d2209e1eaebbba", "scanner": "scanner-primary", "fingerprint": "56b9f4b60ecc7476", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e2b14f64512f9751", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=${test.zip} (scripts/test/test-reps-coverage.js:24)"}, "properties": {"repobilityId": "cc706bebeacc1c94", "scanner": "scanner-primary", "fingerprint": "e2b14f64512f9751", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9e0ef885dc9d5a1", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives-search?q=${encodeURIComponent(test.query)} (scripts/test/test-address-search.js:38)"}, "properties": {"repobilityId": "8a4edda3baf3936f", "scanner": "scanner-primary", "fingerprint": "d9e0ef885dc9d5a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f94d5ce18e339f64", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/health (scripts/test/test-api-health.js:8)"}, "properties": {"repobilityId": "b98e014a53aa7a27", "scanner": "scanner-primary", "fingerprint": "f94d5ce18e339f64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-980aa0acb2404c7e", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/env-check (scripts/test/test-api-health.js:22)"}, "properties": {"repobilityId": "ccaf1be531681b1a", "scanner": "scanner-primary", "fingerprint": "980aa0acb2404c7e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1b45f2eb83f3077", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/debug (scripts/test/test-api-health.js:36)"}, "properties": {"repobilityId": "2ac78503adead096", "scanner": "scanner-primary", "fingerprint": "f1b45f2eb83f3077", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-788571e84b9d789d", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=48221 (scripts/test/test-api-health.js:55)"}, "properties": {"repobilityId": "aedd199ca19d318c", "scanner": "scanner-primary", "fingerprint": "788571e84b9d789d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-91e457b55fd2c3fb", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representative/S001184 (scripts/test/test-api-health.js:71)"}, "properties": {"repobilityId": "ed58227ba9a3ff9f", "scanner": "scanner-primary", "fingerprint": "91e457b55fd2c3fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-464e0114ff0693cd", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representative/S001184/committees (scripts/test/test-api-health.js:89)"}, "properties": {"repobilityId": "d0b2e0ea2447085a", "scanner": "scanner-primary", "fingerprint": "464e0114ff0693cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d3747b9d1ebfce01", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representative/S001184/votes (scripts/test/test-api-health.js:106)"}, "properties": {"repobilityId": "34098e900e08ada4", "scanner": "scanner-primary", "fingerprint": "d3747b9d1ebfce01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7bac7a3e41b3dbc0", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representative/S001184/finance (scripts/test/test-api-health.js:121)"}, "properties": {"repobilityId": "db942ce947e1f8fc", "scanner": "scanner-primary", "fingerprint": "7bac7a3e41b3dbc0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-029cd6ff3af286ca", "level": "error", "message": {"text": "Dangling fetch: GET https://raw.githubusercontent.com/unitedstates/congress-legislators/main/legislators-current.yaml (scripts/test/final-validation.js:10)"}, "properties": {"repobilityId": "728e3b1490a3f502", "scanner": "scanner-primary", "fingerprint": "029cd6ff3af286ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3c68f63f6a0d3b9", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=29401 (scripts/test/debug-sc-reps.js:20)"}, "properties": {"repobilityId": "ffde55abb0b0664a", "scanner": "scanner-primary", "fingerprint": "c3c68f63f6a0d3b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d4a9973bc754652b", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives?zip=48221 (scripts/test/debug-sc-reps.js:27)"}, "properties": {"repobilityId": "213f783744ca10e9", "scanner": "scanner-primary", "fingerprint": "d4a9973bc754652b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d26ffd57eab5bb1e", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives-multi-district?zip=${zipCode} (scripts/test/test-multi-district.js:14)"}, "properties": {"repobilityId": "45e9aacbe7c4d531", "scanner": "scanner-primary", "fingerprint": "d26ffd57eab5bb1e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c91debea0ed959ff", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives/all (scripts/generate-wikipedia-mappings.ts:154)"}, "properties": {"repobilityId": "14284c8278b1df8d", "scanner": "scanner-primary", "fingerprint": "c91debea0ed959ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa9ee839866f1f0a", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/health/redis (scripts/monitor-deployment.ts:14)"}, "properties": {"repobilityId": "19c5930abf611e0c", "scanner": "scanner-primary", "fingerprint": "fa9ee839866f1f0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-027c96061e880896", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/cache/status (scripts/monitor-deployment.ts:32)"}, "properties": {"repobilityId": "73ddfd8137fb2192", "scanner": "scanner-primary", "fingerprint": "027c96061e880896", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03ea7cf291eae542", "level": "error", "message": {"text": "Dangling fetch: POST https://openstates.org/graphql (scripts/diagnose-apis.ts:243)"}, "properties": {"repobilityId": "ec43ac19d4483cc0", "scanner": "scanner-primary", "fingerprint": "03ea7cf291eae542", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ecfedcbff5821e3e", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3000/api/representatives/all (scripts/generate-comprehensive-mappings.ts:30)"}, "properties": {"repobilityId": "a4370e9873e0bea5", "scanner": "scanner-primary", "fingerprint": "ecfedcbff5821e3e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67633e282d098957", "level": "error", "message": {"text": "Dangling fetch: GET /api/federal-register/comment-periods (src/app/(civic)/comment-periods/page.tsx:47)"}, "properties": {"repobilityId": "edda9586437fbeb4", "scanner": "scanner-primary", "fingerprint": "67633e282d098957", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-169b8ec6ea795f7f", "level": "error", "message": {"text": "Dangling fetch: POST /api/federal-register/comments/counts (src/app/(civic)/comment-periods/page.tsx:71)"}, "properties": {"repobilityId": "e746f90e745c9a7a", "scanner": "scanner-primary", "fingerprint": "169b8ec6ea795f7f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15bb56c7b7499e56", "level": "error", "message": {"text": "Dangling fetch: GET /api/spending/district/${id} (src/app/(civic)/spending/page.tsx:36)"}, "properties": {"repobilityId": "4c8d0c8946aa55f7", "scanner": "scanner-primary", "fingerprint": "15bb56c7b7499e56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09e440266e88dc7c", "level": "error", "message": {"text": "Dangling fetch: GET /api/spending/geography?${params} (src/app/(civic)/spending/page.tsx:224)"}, "properties": {"repobilityId": "4073cebdeb463d32", "scanner": "scanner-primary", "fingerprint": "09e440266e88dc7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f67379f415f655ac", "level": "error", "message": {"text": "Dangling fetch: GET /api/bills/latest?limit=50 (src/app/(civic)/legislation/page.tsx:79)"}, "properties": {"repobilityId": "91ab9c0648346a97", "scanner": "scanner-primary", "fingerprint": "f67379f415f655ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-423d54470ac9bcc4", "level": "error", "message": {"text": "Dangling fetch: GET /api/state-bills/${state.toUpperCase()}?${params} (src/app/(civic)/state-bills/[state]/page.tsx:347)"}, "properties": {"repobilityId": "b53eacb726770e33", "scanner": "scanner-primary", "fingerprint": "423d54470ac9bcc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76c2fe90e8551d07", "level": "error", "message": {"text": "Dangling fetch: GET /api/federal-register?${params} (src/app/(civic)/regulations/LegacyRegulationsPage.tsx:73)"}, "properties": {"repobilityId": "a1d87e9848d59429", "scanner": "scanner-primary", "fingerprint": "76c2fe90e8551d07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-455dc0082039e53a", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/reading-levels (src/app/(civic)/transparency/reading-levels/page.tsx:39)"}, "properties": {"repobilityId": "b830af51969a1e45", "scanner": "scanner-primary", "fingerprint": "455dc0082039e53a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31e11444c7bd8300", "level": "error", "message": {"text": "Dangling fetch: GET /api/elections/${year}?${params} (src/app/(civic)/elections/state/page.tsx:100)"}, "properties": {"repobilityId": "64cd916bbec1ee8c", "scanner": "scanner-primary", "fingerprint": "31e11444c7bd8300", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32eb638f045cf5c0", "level": "error", "message": {"text": "Dangling fetch: GET /api/elections/2024?${params} (src/app/(civic)/elections/state/page.tsx:123)"}, "properties": {"repobilityId": "c2632bd42cfb5767", "scanner": "scanner-primary", "fingerprint": "32eb638f045cf5c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a36dac6825b12b9a", "level": "error", "message": {"text": "Dangling fetch: GET /api/elections/2024?${params} (src/app/(civic)/elections/federal/page.tsx:97)"}, "properties": {"repobilityId": "cbbbf5c8f5de8214", "scanner": "scanner-primary", "fingerprint": "a36dac6825b12b9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1fe3d8bcb177109", "level": "error", "message": {"text": "Dangling fetch: POST /api/intelligence/address/money-report (src/app/(civic)/your-reps/money-report/page.tsx:87)"}, "properties": {"repobilityId": "a1ee83576e67cdf4", "scanner": "scanner-primary", "fingerprint": "d1fe3d8bcb177109", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6491e3dc7c783bbf", "level": "error", "message": {"text": "Dangling fetch: GET /api/districts/${districtId} (src/app/(civic)/districts/[districtId]/page.tsx:154)"}, "properties": {"repobilityId": "01922ca595aee797", "scanner": "scanner-primary", "fingerprint": "6491e3dc7c783bbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b5116833c076201", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&offset=${offset}&sort=${sort} (src/app/api/v1/bills/route.ts:49)"}, "properties": {"repobilityId": "5555d9ee33dd2f26", "scanner": "scanner-primary", "fingerprint": "3b5116833c076201", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4e11101f6ec1ab5e", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}?format=json (src/app/api/v1/bills/[billId]/route.ts:76)"}, "properties": {"repobilityId": "ce6f48a193bf7ec9", "scanner": "scanner-primary", "fingerprint": "4e11101f6ec1ab5e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-99c68ff145666fd3", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&sort=${sort}&format=json (src/app/api/bills/latest/route.ts:25)"}, "properties": {"repobilityId": "7164542d9d68205a", "scanner": "scanner-primary", "fingerprint": "99c68ff145666fd3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-334234159fdc1191", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=${limit}&sort=updateDate+desc&format=json (src/app/api/feed/bills/latest/route.ts:46)"}, "properties": {"repobilityId": "ded6f0be9fcd232d", "scanner": "scanner-primary", "fingerprint": "334234159fdc1191", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19817301814d69f2", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}?format=json (src/app/api/feed/bill/[billId]/route.ts:52)"}, "properties": {"repobilityId": "6c12a2d7bee40532", "scanner": "scanner-primary", "fingerprint": "19817301814d69f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bdca94b4224a0383", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${billNumber}/actions?format=json&limit=50 (src/app/api/feed/bill/[billId]/route.ts:78)"}, "properties": {"repobilityId": "e9abf5f51b2fb56f", "scanner": "scanner-primary", "fingerprint": "bdca94b4224a0383", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8358e25cf6c43b54", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=100&sort=updateDate+desc (src/app/api/search/unified/route.ts:349)"}, "properties": {"repobilityId": "95768a22a275e4b0", "scanner": "scanner-primary", "fingerprint": "8358e25cf6c43b54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2153567c5baa520d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}?limit=${limit}&offset=${offset}&format=json (src/app/api/committees/route.ts:168)"}, "properties": {"repobilityId": "c684a0891434c32d", "scanner": "scanner-primary", "fingerprint": "2153567c5baa520d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2077ea319ff8caa", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/members?format=json (src/app/api/committees/route.ts:260)"}, "properties": {"repobilityId": "eaab0e99c23dcd7c", "scanner": "scanner-primary", "fingerprint": "d2077ea319ff8caa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2087bad143845bc", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/subcommittees?format=json (src/app/api/committees/route.ts:326)"}, "properties": {"repobilityId": "2e871925de4e5980", "scanner": "scanner-primary", "fingerprint": "b2087bad143845bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe7a48ee2b5af1f4", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/committee/${chamberName}/${committee.systemCode}/subcommittees/${subcommittee.systemCode}/members?format=json (src/app/api/committees/route.ts:357)"}, "properties": {"repobilityId": "ac485e25bccd3aa7", "scanner": "scanner-primary", "fingerprint": "fe7a48ee2b5af1f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec81bcf5845d33b9", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/committee/joint?limit=50&format=json (src/app/api/committees/route.ts:409)"}, "properties": {"repobilityId": "de702486fc07486f", "scanner": "scanner-primary", "fingerprint": "ec81bcf5845d33b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d75b6c7471e1dfc", "level": "error", "message": {"text": "Dangling fetch: GET https://api.bls.gov/publicAPI/v2/timeseries/data/LAUST${stateFips}0000000000003 (src/app/api/districts/[districtId]/economic-profile/route.ts:84)"}, "properties": {"repobilityId": "ee66d6f9f3138a55", "scanner": "scanner-primary", "fingerprint": "0d75b6c7471e1dfc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-476dd534fedcd56a", "level": "error", "message": {"text": "Dangling fetch: GET https://api.bls.gov/publicAPI/v2/timeseries/data/LAUST${stateFips}0000000000006 (src/app/api/districts/[districtId]/economic-profile/route.ts:87)"}, "properties": {"repobilityId": "5de6331beae33b5b", "scanner": "scanner-primary", "fingerprint": "476dd534fedcd56a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f49c68860118917", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/member/${upperBioguideId}?format=json (src/app/api/representative/[bioguideId]/route.ts:278)"}, "properties": {"repobilityId": "a50115114027bf9c", "scanner": "scanner-primary", "fingerprint": "2f49c68860118917", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b6b3d4cbd2bac2c", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/member?currentMember=true&limit=250&format=json (src/app/api/representative/[bioguideId]/leadership/route.ts:27)"}, "properties": {"repobilityId": "6d36c339daf66efb", "scanner": "scanner-primary", "fingerprint": "2b6b3d4cbd2bac2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0dbb20feb954f7c", "level": "error", "message": {"text": "Dangling fetch: GET https://v3.openstates.org/jurisdictions/${stateAbbrev} (src/app/api/representative/[bioguideId]/state-legislature/route.ts:206)"}, "properties": {"repobilityId": "856645bde10ec5c6", "scanner": "scanner-primary", "fingerprint": "b0dbb20feb954f7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-669ff9954b5cc01c", "level": "error", "message": {"text": "Dangling fetch: GET https://v3.openstates.org/bills?jurisdiction=${stateAbbrev}&sort=updated_desc&per_page=15 (src/app/api/representative/[bioguideId]/state-legislature/route.ts:413)"}, "properties": {"repobilityId": "e419475af630637f", "scanner": "scanner-primary", "fingerprint": "669ff9954b5cc01c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa0b6cc1789048c7", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/member/${bioguideId}?format=json (src/app/api/representative/[bioguideId]/committees/route.ts:48)"}, "properties": {"repobilityId": "304e5731e3624f7e", "scanner": "scanner-primary", "fingerprint": "fa0b6cc1789048c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26ddaa590db022e3", "level": "error", "message": {"text": "Dangling fetch: GET /api/api-health (src/app/admin/api-health/page.tsx:53)"}, "properties": {"repobilityId": "baaae917baa706cc", "scanner": "scanner-primary", "fingerprint": "26ddaa590db022e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9c3b569f1546d14", "level": "error", "message": {"text": "Dangling fetch: POST https://civdotiq.org/api/intelligence/address/representatives (src/app/(public)/migrate/google-civic/page.tsx:126)"}, "properties": {"repobilityId": "b0bccf77775161ab", "scanner": "scanner-primary", "fingerprint": "c9c3b569f1546d14", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f5110a3fa4f5862", "level": "error", "message": {"text": "Dangling fetch: POST https://civdotiq.org/api/geocode (src/app/(public)/migrate/google-civic/page.tsx:159)"}, "properties": {"repobilityId": "f79496e90b947984", "scanner": "scanner-primary", "fingerprint": "0f5110a3fa4f5862", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c24829be8446ede1", "level": "error", "message": {"text": "Dangling fetch: GET /api/search?q=${encodeURIComponent(searchQuery)} (src/app/(public)/results/page.tsx:381)"}, "properties": {"repobilityId": "28d4af688f39e675", "scanner": "scanner-primary", "fingerprint": "c24829be8446ede1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0bfcba904f04157a", "level": "error", "message": {"text": "Dangling fetch: POST /api/unified-geocode (src/app/(public)/results/page.tsx:435)"}, "properties": {"repobilityId": "833690e6c132cb5c", "scanner": "scanner-primary", "fingerprint": "0bfcba904f04157a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0567238ba7edbb05", "level": "error", "message": {"text": "Dangling fetch: GET /api/bill/${billId} (src/app/bill/[billId]/ClientBillContent.tsx:80)"}, "properties": {"repobilityId": "a36ad78a70da5960", "scanner": "scanner-primary", "fingerprint": "0567238ba7edbb05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a161f718fb36d06", "level": "error", "message": {"text": "Dangling fetch: GET /api/ai/legislative-process/${billId} (src/app/bill/[billId]/ClientBillContent.tsx:115)"}, "properties": {"repobilityId": "44cbb7d051abcd2e", "scanner": "scanner-primary", "fingerprint": "9a161f718fb36d06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a90e4550b596fae8", "level": "error", "message": {"text": "Dangling fetch: GET /api/bill/${billId}/district-impact/${district} (src/app/bill/[billId]/ClientBillContent.tsx:160)"}, "properties": {"repobilityId": "4016c54a57ed5a81", "scanner": "scanner-primary", "fingerprint": "a90e4550b596fae8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae6e2b52a0ef03bc", "level": "error", "message": {"text": "Dangling fetch: GET /api/districts/${targetDistrictId} (src/hooks/useEnhancedDistrictData.ts:208)"}, "properties": {"repobilityId": "6e1b2f8c508c7c77", "scanner": "scanner-primary", "fingerprint": "ae6e2b52a0ef03bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bdcdab266e4c8664", "level": "error", "message": {"text": "Dangling fetch: GET /api/districts/${targetDistrictId} (src/hooks/useEnhancedDistrictData.ts:257)"}, "properties": {"repobilityId": "db17e89e570138da", "scanner": "scanner-primary", "fingerprint": "bdcdab266e4c8664", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89aab3df8ccb59bd", "level": "error", "message": {"text": "Dangling fetch: GET /api/districts/${districtId} (src/hooks/useEnhancedDistrictData.ts:436)"}, "properties": {"repobilityId": "e10d8f3ef6a5b802", "scanner": "scanner-primary", "fingerprint": "89aab3df8ccb59bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd921a6e67d37ef0", "level": "error", "message": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/hooks/shared/useSWR.ts:13)"}, "properties": {"repobilityId": "8d30a1e3f8441b66", "scanner": "scanner-primary", "fingerprint": "fd921a6e67d37ef0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2ceb9b7f41a59b6", "level": "error", "message": {"text": "Dangling fetch: GET https://api.radar.io/v1/geocode/ip (src/components/SearchForm.tsx:137)"}, "properties": {"repobilityId": "293653815a41ba6b", "scanner": "scanner-primary", "fingerprint": "a2ceb9b7f41a59b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01178e6daa675c28", "level": "error", "message": {"text": "Dangling fetch: POST /api/intelligence/address/representatives (src/components/intelligence/RepresentativeLookupForm.tsx:106)"}, "properties": {"repobilityId": "79f7de755efb14ad", "scanner": "scanner-primary", "fingerprint": "01178e6daa675c28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c5146526b132dda", "level": "error", "message": {"text": "Dangling fetch: POST /api/mesh/influence/cascade (src/components/mesh/CascadeSection.tsx:47)"}, "properties": {"repobilityId": "2aee07ee23607b01", "scanner": "scanner-primary", "fingerprint": "5c5146526b132dda", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d9d79c319e4cbb4", "level": "error", "message": {"text": "Dangling fetch: POST /api/mesh/influence/counterfactual (src/components/mesh/CounterfactualSection.tsx:68)"}, "properties": {"repobilityId": "b094b40a330fdf71", "scanner": "scanner-primary", "fingerprint": "7d9d79c319e4cbb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41a37d1d4f63c29d", "level": "error", "message": {"text": "Dangling fetch: GET /api/mesh/influence/path?${params} (src/components/mesh/InfluencePathSection.tsx:126)"}, "properties": {"repobilityId": "6aa4e4c08dbd7461", "scanner": "scanner-primary", "fingerprint": "41a37d1d4f63c29d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c267cfd71c60621b", "level": "error", "message": {"text": "Dangling fetch: GET /api/mesh/district/${districtId} (src/components/mesh/DistrictProfileCard.tsx:42)"}, "properties": {"repobilityId": "8371e8e8ad1e9fe6", "scanner": "scanner-primary", "fingerprint": "c267cfd71c60621b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1756a32561180217", "level": "error", "message": {"text": "Dangling fetch: GET /api/pac/${committeeId}/info (src/components/pacs/PACProfilePage/PACProfilePage.tsx:64)"}, "properties": {"repobilityId": "a4a5d9dabd397cac", "scanner": "scanner-primary", "fingerprint": "1756a32561180217", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-5dc86ad40c8b5f2f", "level": "error", "message": {"text": "Dangling fetch: GET /api/pac/${committeeId}/totals?cycle=${cycle} (src/components/pacs/PACProfilePage/PACProfilePage.tsx:72)"}, "properties": {"repobilityId": "333bf0aadc17bcf4", "scanner": "scanner-primary", "fingerprint": "5dc86ad40c8b5f2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-35b6a3a7db54abc5", "level": "error", "message": {"text": "Dangling fetch: GET /api/pac/${committeeId}/recipients?cycle=${cycle}&limit=12 (src/components/pacs/PACProfilePage/PACProfilePage.tsx:80)"}, "properties": {"repobilityId": "1aee09b530a977de", "scanner": "scanner-primary", "fingerprint": "35b6a3a7db54abc5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-486608384e35e3c7", "level": "error", "message": {"text": "Dangling fetch: GET /api/pac/${committeeId}/cycles (src/components/pacs/PACProfilePage/PACProfilePage.tsx:86)"}, "properties": {"repobilityId": "0368b704103f8d8e", "scanner": "scanner-primary", "fingerprint": "486608384e35e3c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-b8e9458ea41c7fbc", "level": "error", "message": {"text": "Dangling fetch: GET /api/pac/${committeeId}/donors-by-size?cycle=${cycle} (src/components/pacs/PACProfilePage/PACProfilePage.tsx:92)"}, "properties": {"repobilityId": "0c142c04e953bfcb", "scanner": "scanner-primary", "fingerprint": "b8e9458ea41c7fbc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-301e48e7666ebe57", "level": "error", "message": {"text": "Dangling fetch: GET /api/intelligence/pac/${committeeId} (src/components/pacs/PACProfilePage/PACProfilePage.tsx:98)"}, "properties": {"repobilityId": "b27fedbddb134b2c", "scanner": "scanner-primary", "fingerprint": "301e48e7666ebe57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-895910fdafc862aa", "level": "error", "message": {"text": "Dangling fetch: GET /api/spending/awards/${encodedId} (src/components/spending/SpendingContractPage/SpendingContractPage.tsx:63)"}, "properties": {"repobilityId": "b02649628c15d8ea", "scanner": "scanner-primary", "fingerprint": "895910fdafc862aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-11cd55e7cfa0c0d5", "level": "error", "message": {"text": "Dangling fetch: GET /api/spending/awards/${encodedId}/transactions (src/components/spending/SpendingContractPage/SpendingContractPage.tsx:69)"}, "properties": {"repobilityId": "56fb145b387657f7", "scanner": "scanner-primary", "fingerprint": "11cd55e7cfa0c0d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-6992b596af4b678f", "level": "error", "message": {"text": "Dangling fetch: GET /api/state-boundaries/${stateCode}?detail=${detail} (src/components/maps/StateMap.tsx:48)"}, "properties": {"repobilityId": "98ce0e990a312ed0", "scanner": "scanner-primary", "fingerprint": "6992b596af4b678f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bc251d107d8aa367", "level": "error", "message": {"text": "Dangling fetch: GET /api/state-demographics/${stateCode} (src/components/maps/StateMap.tsx:58)"}, "properties": {"repobilityId": "9f307a05670268e5", "scanner": "scanner-primary", "fingerprint": "bc251d107d8aa367", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad2474f1bdfca817", "level": "error", "message": {"text": "Dangling fetch: GET /api/state-legislature/${state.toUpperCase()} (src/components/states/LegacyStateLegislature/LegacyStateLegislaturePage.tsx:402)"}, "properties": {"repobilityId": "a1d2d6f890ffa98b", "scanner": "scanner-primary", "fingerprint": "ad2474f1bdfca817", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea5f35c886c0466f", "level": "error", "message": {"text": "Dangling fetch: GET /api/state-bills/${state.toUpperCase()}?limit=10 (src/components/states/LegacyStateLegislature/LegacyStateLegislaturePage.tsx:403)"}, "properties": {"repobilityId": "a941201096a03d49", "scanner": "scanner-primary", "fingerprint": "ea5f35c886c0466f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83b5c9ff845fa5a3", "level": "error", "message": {"text": "Dangling fetch: POST /api/alerts/subscribe (src/components/alerts/AlertSubscribeForm.tsx:52)"}, "properties": {"repobilityId": "7c523382def472f1", "scanner": "scanner-primary", "fingerprint": "83b5c9ff845fa5a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b8fee2e957a5b9f", "level": "error", "message": {"text": "Dangling fetch: GET https://api.radar.io/v1/search/autocomplete?${params.toString()} (src/components/search/AddressAutocomplete.tsx:81)"}, "properties": {"repobilityId": "173fe7069b2a321c", "scanner": "scanner-primary", "fingerprint": "7b8fee2e957a5b9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea587316b5e1c156", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}?limit=100&sort=updateDate+desc (src/components/search/SearchResults/data.ts:83)"}, "properties": {"repobilityId": "8f2ecfb77795ba76", "scanner": "scanner-primary", "fingerprint": "ea587316b5e1c156", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac16779c032f7416", "level": "error", "message": {"text": "Dangling fetch: GET /api/city/${encodedId}/council (src/components/local/LocalCouncilPage/LocalCouncilPage.tsx:57)"}, "properties": {"repobilityId": "d51b8f13c62662d9", "scanner": "scanner-primary", "fingerprint": "ac16779c032f7416", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-1f4723f1f16b4427", "level": "error", "message": {"text": "Dangling fetch: GET /api/city/${encodedId}/legislation?days=60&top=20 (src/components/local/LocalCouncilPage/LocalCouncilPage.tsx:65)"}, "properties": {"repobilityId": "2dc907a657b8a206", "scanner": "scanner-primary", "fingerprint": "1f4723f1f16b4427", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-3d1f6dea380be560", "level": "error", "message": {"text": "Dangling fetch: POST /api/errors (src/components/shared/common/EnhancedErrorBoundary.tsx:117)"}, "properties": {"repobilityId": "6f2ecf221d0852ed", "scanner": "scanner-primary", "fingerprint": "3d1f6dea380be560", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-499d9cefe165aa0c", "level": "error", "message": {"text": "Dangling fetch: GET /api/elections/${encodedId} (src/components/elections/ElectionPage/ElectionPage.tsx:73)"}, "properties": {"repobilityId": "74d77a6c121b258c", "scanner": "scanner-primary", "fingerprint": "499d9cefe165aa0c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-803a525a813ba701", "level": "error", "message": {"text": "Dangling fetch: POST /api/graph/query (src/components/graph/GraphQueryBar.tsx:56)"}, "properties": {"repobilityId": "95e2f11c538ac48f", "scanner": "scanner-primary", "fingerprint": "803a525a813ba701", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d28585503197c7ce", "level": "error", "message": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/components/officials/ProfileHybrid/MoneyPanel.tsx:43)"}, "properties": {"repobilityId": "bde5e137e6f26e79", "scanner": "scanner-primary", "fingerprint": "d28585503197c7ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c5273fba6e1eb0e", "level": "error", "message": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/components/officials/ProfileHybrid/RecordPanel.tsx:47)"}, "properties": {"repobilityId": "910de478f5d8c0f0", "scanner": "scanner-primary", "fingerprint": "1c5273fba6e1eb0e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c6a9448f04ee634", "level": "error", "message": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/components/officials/ProfileHybrid/ProfileHybrid.tsx:42)"}, "properties": {"repobilityId": "b6649c346ece897f", "scanner": "scanner-primary", "fingerprint": "5c6a9448f04ee634", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-613db92a06ff0692", "level": "error", "message": {"text": "Dangling fetch: GET /api/spending/district/${districtId} (src/features/spending/components/FederalSpendingProfile.tsx:27)"}, "properties": {"repobilityId": "ca61f4b68b553083", "scanner": "scanner-primary", "fingerprint": "613db92a06ff0692", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfd115b4e5957979", "level": "error", "message": {"text": "Dangling fetch: GET /api/search?q=${encodeURIComponent(trimmed)}&limit=5 (src/features/spending/components/SpendingSearch.tsx:44)"}, "properties": {"repobilityId": "db8655e84929344d", "scanner": "scanner-primary", "fingerprint": "dfd115b4e5957979", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04118d6774659405", "level": "error", "message": {"text": "Dangling fetch: GET /api/representative/${bioguideId}/votes?limit=500 (src/features/representatives/components/VotingPatternAnalysis.tsx:45)"}, "properties": {"repobilityId": "5130ce46c620c2db", "scanner": "scanner-primary", "fingerprint": "04118d6774659405", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f4ed494b6bf02d5", "level": "error", "message": {"text": "Dangling fetch: POST /api/representative/${representative.bioguideId}/batch (src/features/representatives/components/SimpleRepresentativeProfile.tsx:176)"}, "properties": {"repobilityId": "3136d47dbc407413", "scanner": "scanner-primary", "fingerprint": "4f4ed494b6bf02d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8558156db1db74df", "level": "error", "message": {"text": "Dangling fetch: POST /api/geocode (src/features/representatives/components/RepresentativesClient.tsx:147)"}, "properties": {"repobilityId": "0c0c7db865a7865a", "scanner": "scanner-primary", "fingerprint": "8558156db1db74df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6f71eb8eaf6de9a", "level": "error", "message": {"text": "Dangling fetch: POST /api/geocode (src/features/representatives/components/RepresentativesClient.tsx:300)"}, "properties": {"repobilityId": "28c4bc2de0e0de9a", "scanner": "scanner-primary", "fingerprint": "f6f71eb8eaf6de9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b8db1ebbe30bf848", "level": "error", "message": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/features/representatives/components/VotingTab.tsx:137)"}, "properties": {"repobilityId": "c2ad94de8a1b4f06", "scanner": "scanner-primary", "fingerprint": "b8db1ebbe30bf848", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9c11a575c24691b", "level": "error", "message": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/features/representatives/components/FinanceTab.tsx:150)"}, "properties": {"repobilityId": "47c8a5eefeb69122", "scanner": "scanner-primary", "fingerprint": "c9c11a575c24691b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2bf8127d8779d27e", "level": "error", "message": {"text": "Dangling fetch: POST /api/geocode (src/features/representatives/components/AddressPrompt.tsx:71)"}, "properties": {"repobilityId": "03afe1b800488d21", "scanner": "scanner-primary", "fingerprint": "2bf8127d8779d27e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0a266c642e8fab7", "level": "error", "message": {"text": "Dangling fetch: GET /api/state-boundaries/${stateCode}?detail=simple (src/features/representatives/components/StateMapCard.tsx:98)"}, "properties": {"repobilityId": "5c13d296ef9328c3", "scanner": "scanner-primary", "fingerprint": "a0a266c642e8fab7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18f8d2856e981c07", "level": "error", "message": {"text": "Dangling fetch: POST /api/representative/${bioguideId}/batch (src/features/representatives/components/profile-redesign/ProfileRedesign.tsx:57)"}, "properties": {"repobilityId": "c5dd90c797e7f5c2", "scanner": "scanner-primary", "fingerprint": "18f8d2856e981c07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d768449d642a294d", "level": "error", "message": {"text": "Dangling fetch: GET /api/bill/${id}/summary/stream (src/features/legislation/hooks/useBillSummaryStream.ts:43)"}, "properties": {"repobilityId": "a7de94f55c18b2f9", "scanner": "scanner-primary", "fingerprint": "d768449d642a294d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bf434933149cfe6", "level": "error", "message": {"text": "Dangling fetch: GET /api/witnesses?${params} (src/features/legislation/components/WitnessSearch.tsx:69)"}, "properties": {"repobilityId": "976d36756010410a", "scanner": "scanner-primary", "fingerprint": "9bf434933149cfe6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ae910ffa865b13c", "level": "error", "message": {"text": "Dangling fetch: GET /api/representative/${bioguideId}/bills?congress=119&limit=5 (src/features/legislation/components/CommitteeMembers.tsx:179)"}, "properties": {"repobilityId": "9a42ec923b6f9f56", "scanner": "scanner-primary", "fingerprint": "1ae910ffa865b13c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd561ada65431f57", "level": "error", "message": {"text": "Dangling fetch: GET /api/floor-schedule (src/features/legislation/components/FloorActivity.tsx:72)"}, "properties": {"repobilityId": "1bc02c5088b01f79", "scanner": "scanner-primary", "fingerprint": "dd561ada65431f57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9872a88b177b730", "level": "error", "message": {"text": "Dangling fetch: GET /api/committee/${committeeId}/wikipedia (src/features/legislation/components/CommitteeBiographicalInfo.tsx:61)"}, "properties": {"repobilityId": "618972711f1d120c", "scanner": "scanner-primary", "fingerprint": "b9872a88b177b730", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a888e71c54fdc5b", "level": "error", "message": {"text": "Dangling fetch: GET /api/committee/${committeeId}/bills (src/features/legislation/components/CommitteeBillsAndReports.tsx:59)"}, "properties": {"repobilityId": "b1c49ea6a94643c3", "scanner": "scanner-primary", "fingerprint": "2a888e71c54fdc5b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eec9bb32bf11eb8d", "level": "error", "message": {"text": "Dangling fetch: GET /api/committee/${committeeId}/reports (src/features/legislation/components/CommitteeBillsAndReports.tsx:77)"}, "properties": {"repobilityId": "be3eb5a7fe270065", "scanner": "scanner-primary", "fingerprint": "eec9bb32bf11eb8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58b947ec20b62776", "level": "error", "message": {"text": "Dangling fetch: GET /api/search?${params.toString()} (src/features/search/components/AdvancedSearch.tsx:164)"}, "properties": {"repobilityId": "982a9ae9838ed445", "scanner": "scanner-primary", "fingerprint": "58b947ec20b62776", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-00af24bf33238a26", "level": "error", "message": {"text": "Dangling fetch: GET /data/state-districts/state-districts-manifest.json (src/features/districts/components/StateDistrictBoundaryMap.tsx:439)"}, "properties": {"repobilityId": "f1044de72737fd4b", "scanner": "scanner-primary", "fingerprint": "00af24bf33238a26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71794d62078b05a5", "level": "error", "message": {"text": "Dangling fetch: GET /api/districts/all (src/features/districts/components/DistrictMapContainer.tsx:165)"}, "properties": {"repobilityId": "a2240fbaf02e9a71", "scanner": "scanner-primary", "fingerprint": "71794d62078b05a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e130171ff3f02299", "level": "error", "message": {"text": "Dangling fetch: GET /api/districts/all (src/features/districts/components/LeafletDistrictMap.tsx:164)"}, "properties": {"repobilityId": "3df5be422fd96ed9", "scanner": "scanner-primary", "fingerprint": "e130171ff3f02299", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-749abff64cd6d13e", "level": "error", "message": {"text": "Dangling fetch: GET /api/district-map?zip=${encodeURIComponent(zipCode)} (src/features/districts/components/SimpleDistrictMap.tsx:69)"}, "properties": {"repobilityId": "c302755a36521705", "scanner": "scanner-primary", "fingerprint": "749abff64cd6d13e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-389ba193fbd4feb3", "level": "error", "message": {"text": "Dangling fetch: GET /api/districts/${districtId}/economic-profile (src/features/districts/components/EconomicProfile.tsx:66)"}, "properties": {"repobilityId": "7fb8e5b3e06eca7b", "scanner": "scanner-primary", "fingerprint": "389ba193fbd4feb3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bc8f0eb40ace841", "level": "error", "message": {"text": "Dangling fetch: GET /api/districts/${districtId}/services-health (src/features/districts/components/ServicesHealthProfile.tsx:73)"}, "properties": {"repobilityId": "767a1a166adf8f9d", "scanner": "scanner-primary", "fingerprint": "5bc8f0eb40ace841", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf1c4c757915eaf7", "level": "error", "message": {"text": "Dangling fetch: GET /data/states/standard/${state}.json (src/features/districts/components/DistrictMap.tsx:394)"}, "properties": {"repobilityId": "a0e512fb123c07d3", "scanner": "scanner-primary", "fingerprint": "cf1c4c757915eaf7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b3c715c6001e0356", "level": "error", "message": {"text": "Dangling fetch: GET /api/districts/${districtId}/government-spending (src/features/districts/components/GovernmentServicesProfile.tsx:98)"}, "properties": {"repobilityId": "3d2487204c0f711e", "scanner": "scanner-primary", "fingerprint": "b3c715c6001e0356", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f156291b62279c22", "level": "error", "message": {"text": "Dangling fetch: POST /api/unified-geocode (src/features/districts/components/AddressRefinement.tsx:88)"}, "properties": {"repobilityId": "e2df5278a83e512e", "scanner": "scanner-primary", "fingerprint": "f156291b62279c22", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1d6490c6d61e78d", "level": "error", "message": {"text": "Dangling fetch: POST /api/unified-geocode (src/features/districts/components/AddressRefinement.tsx:260)"}, "properties": {"repobilityId": "47951c5b1e266421", "scanner": "scanner-primary", "fingerprint": "f1d6490c6d61e78d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03ac8326258766cc", "level": "error", "message": {"text": "Dangling fetch: GET /api/district/${districtId}/export (src/shared/components/ui/DistrictExportButton.tsx:31)"}, "properties": {"repobilityId": "0a6ad55416d5c49a", "scanner": "scanner-primary", "fingerprint": "03ac8326258766cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02cc36273731a444", "level": "error", "message": {"text": "Dangling fetch: GET /api/bills (src/lib/api/middleware.ts:226)"}, "properties": {"repobilityId": "6f63b934a15d5f55", "scanner": "scanner-primary", "fingerprint": "02cc36273731a444", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41854180812afbfc", "level": "error", "message": {"text": "Dangling fetch: GET /api/votes (src/lib/api/middleware.ts:227)"}, "properties": {"repobilityId": "557b12373a4b3324", "scanner": "scanner-primary", "fingerprint": "41854180812afbfc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-746fd85abedb5af1", "level": "error", "message": {"text": "Dangling fetch: GET /api/finance (src/lib/api/middleware.ts:228)"}, "properties": {"repobilityId": "0a6400aa7c525c5f", "scanner": "scanner-primary", "fingerprint": "746fd85abedb5af1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34538c8a86c4b598", "level": "error", "message": {"text": "Dangling fetch: POST /api/representatives/batch (src/lib/helpers/performance.ts:144)"}, "properties": {"repobilityId": "5b780e6524f37935", "scanner": "scanner-primary", "fingerprint": "34538c8a86c4b598", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8c67ad67c3f026b", "level": "error", "message": {"text": "Dangling fetch: POST /api/news/batch (src/lib/helpers/performance.ts:161)"}, "properties": {"repobilityId": "a1f6d9c3df5e26ab", "scanner": "scanner-primary", "fingerprint": "d8c67ad67c3f026b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33a551c50068c7b1", "level": "error", "message": {"text": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (src/lib/mcp/tools/finance.ts:124)"}, "properties": {"repobilityId": "fbfcd22a42dae949", "scanner": "scanner-primary", "fingerprint": "33a551c50068c7b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1debeec081db4774", "level": "error", "message": {"text": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (src/lib/mcp/tools/safety.ts:188)"}, "properties": {"repobilityId": "5a9d0525fcf84760", "scanner": "scanner-primary", "fingerprint": "1debeec081db4774", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ca7fdd783160f28", "level": "error", "message": {"text": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (src/lib/mcp/tools/health.ts:184)"}, "properties": {"repobilityId": "2869b5d1e3f924fe", "scanner": "scanner-primary", "fingerprint": "2ca7fdd783160f28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-537cd12bc9369cf2", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/house-vote/${congressNum}/${sessionNum}/${rollCallNumber}?format=json (src/lib/mcp/tools/legislation.ts:181)"}, "properties": {"repobilityId": "cc1b18fedf6a39b5", "scanner": "scanner-primary", "fingerprint": "537cd12bc9369cf2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f67e0de086011f1", "level": "error", "message": {"text": "Dangling fetch: POST /api/analytics/errors (src/lib/errors/ErrorHandlers.ts:362)"}, "properties": {"repobilityId": "69e741c41fbe01c4", "scanner": "scanner-primary", "fingerprint": "5f67e0de086011f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e94ca560a60e85ec", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/text?format=json (src/lib/services/bill.service.ts:155)"}, "properties": {"repobilityId": "76d77811134eb969", "scanner": "scanner-primary", "fingerprint": "e94ca560a60e85ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1bfc7408f67d4088", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/subjects?format=json (src/lib/services/bill.service.ts:287)"}, "properties": {"repobilityId": "d0f8cb74f30570f0", "scanner": "scanner-primary", "fingerprint": "1bfc7408f67d4088", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05a624f1e2e85a42", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/text?format=json (src/lib/services/bill.service.ts:311)"}, "properties": {"repobilityId": "cd2b51b722082c0b", "scanner": "scanner-primary", "fingerprint": "05a624f1e2e85a42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13b64842562709cd", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/cosponsors?format=json&limit=250 (src/lib/services/bill.service.ts:344)"}, "properties": {"repobilityId": "9aaa441f60fc716b", "scanner": "scanner-primary", "fingerprint": "13b64842562709cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81faf285d5396ce6", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}/actions?format=json&limit=250 (src/lib/services/bill.service.ts:395)"}, "properties": {"repobilityId": "4df08a42d5193f85", "scanner": "scanner-primary", "fingerprint": "81faf285d5396ce6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c385e09393285054", "level": "error", "message": {"text": "Dangling fetch: GET https://api.congress.gov/v3/bill/${congress}/${type}/${number}?format=json (src/lib/services/bill.service.ts:636)"}, "properties": {"repobilityId": "42cc39ef9bed52e0", "scanner": "scanner-primary", "fingerprint": "c385e09393285054", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a102fac02c8890aa", "level": "error", "message": {"text": "Dangling fetch: GET /api${endpoint} (src/services/api/base.ts:24)"}, "properties": {"repobilityId": "5021c257ebb446e6", "scanner": "scanner-primary", "fingerprint": "a102fac02c8890aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34ec978f264a7205", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/services/ai/summarization.service.ts:330)"}, "properties": {"repobilityId": "94372e4db4e81abf", "scanner": "scanner-primary", "fingerprint": "34ec978f264a7205", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b2a4f56fe6c9801", "level": "error", "message": {"text": "Dangling fetch: GET /api/federal-register/${documentNumber}/comments?pageSize=1 (src/__tests__/features/districts/components/CommentCountBadge.test.tsx:41)"}, "properties": {"repobilityId": "8a3fd3df1b99de8b", "scanner": "scanner-primary", "fingerprint": "7b2a4f56fe6c9801", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a28c78683bbd89c", "level": "error", "message": {"text": "Dangling fetch: GET /api/federal-register/2025-12345/comments?pageSize=1 (src/__tests__/features/districts/components/CommentCountBadge.test.tsx:59)"}, "properties": {"repobilityId": "e4aa7144effd1a19", "scanner": "scanner-primary", "fingerprint": "9a28c78683bbd89c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7cb28eda5bee3a32", "level": "error", "message": {"text": "Dangling fetch: GET /api/federal-register/2025-12345/comments?pageSize=1 (src/__tests__/features/districts/components/CommentCountBadge.test.tsx:84)"}, "properties": {"repobilityId": "da28d8ddec19af5e", "scanner": "scanner-primary", "fingerprint": "7cb28eda5bee3a32", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ed9e1d08db6afce", "level": "error", "message": {"text": "Dangling fetch: GET /api/federal-register/2025-12345/comments?pageSize=1 (src/__tests__/features/districts/components/CommentCountBadge.test.tsx:103)"}, "properties": {"repobilityId": "58c0dda60667d668", "scanner": "scanner-primary", "fingerprint": "9ed9e1d08db6afce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19d3988bae79d1c4", "level": "note", "message": {"text": "Unused endpoint: PUT /offline"}, "properties": {"repobilityId": "18979b97af31a584", "scanner": "scanner-primary", "fingerprint": "19d3988bae79d1c4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}