{"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-8399cb924e7d03a2", "name": "Stray `console.log` in TS/JS \u2014 vite.config.ts:851", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 vite.config.ts:851"}, "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-ad7183ce527fcfc0", "name": "Stray `console.log` in TS/JS \u2014 api/bootstrap.js:264", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/bootstrap.js:264"}, "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-6c6faaa54f3a6130", "name": "Stray `console.log` in TS/JS \u2014 api/register-interest.js:187", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/register-interest.js:187"}, "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-5408108260504596", "name": "Stray `console.log` in TS/JS \u2014 api/_lkg.js:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/_lkg.js:125"}, "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-d02cdd34a1896f09", "name": "Stray `console.log` in TS/JS \u2014 api/cache-purge.js:180", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/cache-purge.js:180"}, "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-afe4b7a48503eedf", "name": "Stray `console.log` in TS/JS \u2014 api/seismology/v1/refresh.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/seismology/v1/refresh.ts:63"}, "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-65b31b7bcdd9738b", "name": "Stray `console.log` in TS/JS \u2014 api/live-news/v6/list-us-headlines.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/live-news/v6/list-us-headlines.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b7360b81e1ece53", "name": "Stray `console.log` in TS/JS \u2014 api/live-news/v6/refresh-rss-embed.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/live-news/v6/refresh-rss-embed.ts:59"}, "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-a9d62034f82711d4", "name": "Stray `console.log` in TS/JS \u2014 api/wildfire/v1/refresh.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/wildfire/v1/refresh.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-be59d33bcf1c43d7", "name": "Stray `console.log` in TS/JS \u2014 api/world-brief/v1/refresh-regions.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/world-brief/v1/refresh-regions.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-1f3971c554894110", "name": "Stray `console.log` in TS/JS \u2014 api/world-brief/v1/refresh.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/world-brief/v1/refresh.ts:42"}, "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-951179bf48f3ed5b", "name": "Stray `console.log` in TS/JS \u2014 api/ops/_probe-core.js:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/ops/_probe-core.js: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-9c4172e684f0b9d7", "name": "Stray `console.log` in TS/JS \u2014 api/intel-news/v1/enrich.ts:1204", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/intel-news/v1/enrich.ts:1204"}, "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-2ccd4fbb54217f8f", "name": "Stray `console.log` in TS/JS \u2014 api/intel-news/v1/refresh.ts:1193", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/intel-news/v1/refresh.ts:1193"}, "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-a7f979439c37bcee", "name": "Stray `console.log` in TS/JS \u2014 api/intel-news/v6/list.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/intel-news/v6/list.ts:61"}, "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-09aedbdd2511fd59", "name": "Stray `console.log` in TS/JS \u2014 api/conflict-archive/v5/list.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/conflict-archive/v5/list.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-78553769cf7441aa", "name": "Icon-only button without accessible name \u2014 src/settings-window.ts:75", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/settings-window.ts:75"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99597fe5722a79b4", "name": "Stray `console.log` in TS/JS \u2014 src/main.ts:368", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/main.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-617941ae923427e9", "name": "Stray `console.log` in TS/JS \u2014 src/App.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/App.ts: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-39c7998f769d8d77", "name": "Stray `console.log` in TS/JS \u2014 src/workers/ml.worker.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/ml.worker.ts:138"}, "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-4139dd4c48e5beeb", "name": "Icon-only button without accessible name \u2014 src/app/panel-layout.ts:417", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/panel-layout.ts:417"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bba9ca0b51a55284", "name": "Stray `console.log` in TS/JS \u2014 src/app/panel-layout.ts:421", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/panel-layout.ts:421"}, "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-244e27105d45ae00", "name": "Stray `console.log` in TS/JS \u2014 src/app/event-handlers.ts:528", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/event-handlers.ts:528"}, "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-e024cde460944e8f", "name": "Stray `console.log` in TS/JS \u2014 src/app/search-manager.ts:526", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/search-manager.ts:526"}, "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-76ce8e81f6e4a05c", "name": "Stray `console.log` in TS/JS \u2014 src/app/data-loader.ts:516", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/data-loader.ts:516"}, "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-3476e5687b04082d", "name": "Stray `console.log` in TS/JS \u2014 src/utils/circuit-breaker.ts:200", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/circuit-breaker.ts:200"}, "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-1b9e20bf93dd70cf", "name": "Stray `console.log` in TS/JS \u2014 src/components/StrategicRiskPanel.ts:137", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/StrategicRiskPanel.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-1335c5a96f548b7e", "name": "Icon-only button without accessible name \u2014 src/components/AviationCommandBar.ts:159", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/AviationCommandBar.ts:159"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4282951f46a35d0b", "name": "Stray `console.log` in TS/JS \u2014 src/components/StrategicPosturePanel.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/StrategicPosturePanel.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-8afbe7886bb597dd", "name": "Stray `console.log` in TS/JS \u2014 src/components/Map.ts:1588", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/Map.ts:1588"}, "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-494fadcc5c5b35b8", "name": "Stray `console.log` in TS/JS \u2014 src/components/CIIPanel.ts:123", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/CIIPanel.ts:123"}, "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-68afd96bb04250b4", "name": "Stray `console.log` in TS/JS \u2014 src/components/MapContainer.ts:171", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/MapContainer.ts:171"}, "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-80358c8f442201c7", "name": "TODO/FIXME marker in shipping code \u2014 src/services/satellites.ts:1", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/services/satellites.ts:1"}, "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-234d8cfed07f34c4", "name": "Stray `console.log` in TS/JS \u2014 src/services/runtime.ts:516", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/runtime.ts:516"}, "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-3b7e0d7020ee9ba4", "name": "Stray `console.log` in TS/JS \u2014 src/config/feeds.ts:1332", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/config/feeds.ts:1332"}, "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-3d074ceb5b1d8d27", "name": "Stray `console.log` in TS/JS \u2014 server/live-sports/v1/_normalize.ts:243", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-sports/v1/_normalize.ts:243"}, "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-cffb801722da706f", "name": "Stray `console.log` in TS/JS \u2014 server/live-sports/v1/list-us-events.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-sports/v1/list-us-events.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-993f73b4d65ff096", "name": "Stray `console.log` in TS/JS \u2014 server/worldmonitor/military/v1/list-military-flights.ts:369", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/worldmonitor/military/v1/list-military-flights.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-d9d2f1f2ee1d1c98", "name": "TODO/FIXME marker in shipping code \u2014 server/worldmonitor/market/v1/_shared.ts:148", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/worldmonitor/market/v1/_shared.ts:148"}, "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-b32eaefd1da64f5d", "name": "TODO/FIXME marker in shipping code \u2014 server/worldmonitor/aviation/v1/list-airport-flights.ts:158", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/worldmonitor/aviation/v1/list-airport-flights.ts:158"}, "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-6594655f3fa6e2b8", "name": "Stray `console.log` in TS/JS \u2014 server/worldmonitor/news/v1/list-feed-digest.ts:284", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/worldmonitor/news/v1/list-feed-digest.ts:284"}, "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-6477691f75be54e6", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v3/refresh.ts:246", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v3/refresh.ts:246"}, "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-bb3270c69dd07a1a", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_normalize.ts:415", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_normalize.ts:415"}, "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-d0d9f8ca1c3b2b5e", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/list-us-headlines.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/list-us-headlines.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-75c97c55d5405d56", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_enrich-combined.ts:537", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_enrich-combined.ts:537"}, "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-25ad2800dd136798", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_enrich.ts:249", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_enrich.ts:249"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4047c06cfb7baafd", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_dedup-embed.ts:217", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_dedup-embed.ts:217"}, "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-0d5dd0a66b610047", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_dedup.ts:414", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_dedup.ts:414"}, "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-1f9897422a5bf557", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_paraphrase.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_paraphrase.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-9a7d7ad599c2ee22", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v6/_cluster.ts:669", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v6/_cluster.ts:669"}, "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-e1baf6328a0e0c97", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v6/_article-fetcher.ts:273", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v6/_article-fetcher.ts:273"}, "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-9f69a2ca378f6fe4", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v6/refresh.ts:277", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v6/refresh.ts:277"}, "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-3887bf5c6f9a554c", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v4/refresh.ts:220", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v4/refresh.ts:220"}, "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-837c35e8c976b15e", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v2/list-us-headlines.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v2/list-us-headlines.ts:77"}, "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-d4d90a0499556b4d", "name": "Stray `console.log` in TS/JS \u2014 server/live-news/v5/refresh.ts:218", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v5/refresh.ts:218"}, "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-40ed46e753368ae0", "name": "Stray `console.log` in TS/JS \u2014 server/world-brief/v1/_dispatch.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/world-brief/v1/_dispatch.ts:62"}, "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-d7c4c616343bba16", "name": "Stray `console.log` in TS/JS \u2014 server/world-brief/v1/_generate.ts:699", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/world-brief/v1/_generate.ts:699"}, "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-92f16c4e0cc4b8ac", "name": "Stray `console.log` in TS/JS \u2014 server/_shared/worldnews-client.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/_shared/worldnews-client.ts:117"}, "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-c69c883bd1ea50f1", "name": "Stray `console.log` in TS/JS \u2014 server/_shared/webz-client.ts:247", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/_shared/webz-client.ts:247"}, "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-27c163f74963fd98", "name": "Stray `console.log` in TS/JS \u2014 server/_shared/embeddings.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/_shared/embeddings.ts:109"}, "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-2d05f147dce0313d", "name": "Stray `console.log` in TS/JS \u2014 server/_shared/upstream.ts:130", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/_shared/upstream.ts:130"}, "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-ee54f7b33a90f544", "name": "Stray `console.log` in TS/JS \u2014 server/intel-news/v1/list-headlines.ts:182", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/intel-news/v1/list-headlines.ts:182"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-112c1c8c8f1d76a3", "name": "Stray `console.log` in TS/JS \u2014 server/intel-news/v1/_enrich-conflict.ts:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/intel-news/v1/_enrich-conflict.ts:207"}, "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-edd1660b199aaa57", "name": "Stray `console.log` in TS/JS \u2014 server/intel-news/v6/list.ts:167", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/intel-news/v6/list.ts:167"}, "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-18528c6fccc5b6ec", "name": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v3/refresh.ts:147", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v3/refresh.ts:147"}, "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-c72dfc55ae99ad61", "name": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v3/list.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v3/list.ts:67"}, "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-5b395db6a6e9f72a", "name": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v1/list.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v1/list.ts:86"}, "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-a6c6d71fafb55240", "name": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v4/refresh.ts:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v4/refresh.ts:168"}, "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-22632f0a08eedf10", "name": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v4/list.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v4/list.ts:62"}, "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-5873ff0b81a5276a", "name": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v2/refresh.ts:181", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v2/refresh.ts:181"}, "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-b05f0eaa7677acd9", "name": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v2/list.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v2/list.ts:72"}, "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-fa59e0be2655bb65", "name": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v5/list.ts:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v5/list.ts:144"}, "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-18d2eb69e0385d9a", "name": "Stray `console.log` in TS/JS \u2014 public/mapbox-gl-rtl-text.min.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/mapbox-gl-rtl-text.min.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-9984490f643b6e13", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 public/pro/assets/index-CIvSGtTn.js:49", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 public/pro/assets/index-CIvSGtTn.js:49"}, "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-47636e33caef255d", "name": "Dockerfile runs as root: docker/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: docker/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-28b46c86f5a3f7e8", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8db7780054b6d524", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fba21ca73aa87888", "name": "Insecure pattern 'direct_innerhtml_assignment' in dashboard-news.html:1242", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard-news.html:1242"}, "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-c4ed599b1dd971e1", "name": "Insecure pattern 'cors_wildcard' in vite.config.ts:499", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in vite.config.ts:499"}, "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-417d9384b9c3bd5a", "name": "Insecure pattern 'cors_wildcard' in api/version.js:36", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/version.js:36"}, "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-a6b0d10054500e0f", "name": "Insecure pattern 'cors_wildcard' in api/health.js:170", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/health.js:170"}, "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-334b7552bee89df4", "name": "Insecure pattern 'cors_wildcard' in api/geo.js:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/geo.js:11"}, "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-acc73c0a4810fda7", "name": "Insecure pattern 'new_function_used' in scripts/export-geo-json.mjs:43", "shortDescription": {"text": "Insecure pattern 'new_function_used' in scripts/export-geo-json.mjs:43"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71f9907b25f27a1c", "name": "Insecure pattern 'node_child_process' in scripts/ais-relay.cjs:613", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ais-relay.cjs:613"}, "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-13bbb1f31167ee36", "name": "Insecure pattern 'node_child_process' in scripts/desktop-package.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/desktop-package.mjs:2"}, "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-f19d97799718a5be", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/settings-window.ts:53", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/settings-window.ts:53"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4b2617780f83a084", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/settings-main.ts:148", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/settings-main.ts:148"}, "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-2836466a8bdd634c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/live-channels-window.ts:171", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/live-channels-window.ts: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-83fab2b2f11efd03", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/app/panel-layout.ts:116", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/panel-layout.ts:116"}, "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-e90e2a434b60a92e", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/app/event-handlers.ts:618", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/event-handlers.ts:618"}, "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-d7b5c1e4a38f7270", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/app/desktop-updater.ts:172", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/desktop-updater.ts:172"}, "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-0370dc31c4b9d9b8", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/utils/dom-utils.ts:59", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/utils/dom-utils.ts:59"}, "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-0ea422fe93acbae3", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/utils/layer-warning.ts:15", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/utils/layer-warning.ts:15"}, "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-f73ade745e0468a4", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/utils/export.ts:153", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/utils/export.ts:153"}, "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-d03be63f83482ac8", "name": "Insecure pattern 'node_child_process' in src/shims/child-process.ts:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/shims/child-process.ts:6"}, "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-c2a9bb9c62f2092d", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryBriefPage.ts:94", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryBriefPage.ts:94"}, "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-4e12d85adb1eaf59", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/PlaybackControl.ts:14", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/PlaybackControl.ts:14"}, "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-649d2251797474c4", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/IntelligenceGapBadge.ts:62", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/IntelligenceGapBadge.ts:62"}, "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-b368804700baa661", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryDeepDivePanel.ts:590", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryDeepDivePanel.ts:590"}, "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-43fc8fc8cf62d016", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/NewsPanel.ts:175", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/NewsPanel.ts:175"}, "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-667dca351c37bcbc", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryTimeline.ts:251", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryTimeline.ts:251"}, "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-cb96cea8c8d86801", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/HeroSpotlightPanel.ts:21", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/HeroSpotlightPanel.ts:21"}, "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-c486bb37d8392965", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/DeckGLMap.ts:524", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/DeckGLMap.ts:524"}, "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-32b90de8fef8f609", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/DeductionPanel.ts:131", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/DeductionPanel.ts:131"}, "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-0eac70652bd85ea2", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/SearchModal.ts:181", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/SearchModal.ts:181"}, "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-a6aac8ed0b28eb1a", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/AirlineIntelPanel.ts:226", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/AirlineIntelPanel.ts:226"}, "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-8df74765a3d621ad", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MarketPanel.ts:54", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MarketPanel.ts:54"}, "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-a372df28955cd99c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/Panel.ts:736", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/Panel.ts:736"}, "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-0c0484173338c0f3", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/StrategicRiskPanel.ts:467", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/StrategicRiskPanel.ts:467"}, "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-7b4e706b01278bfc", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/RegulationPanel.ts:22", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/RegulationPanel.ts:22"}, "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-eb6c57a6156c0d9e", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/ProBanner.ts:23", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/ProBanner.ts:23"}, "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-eb4a8fd68e48cdea", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CascadePanel.ts:193", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CascadePanel.ts:193"}, "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-3eaf0403b13509ec", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/GlobeMap.ts:574", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/GlobeMap.ts:574"}, "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-d4c1e97e28bef5bb", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/StoryModal.ts:21", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/StoryModal.ts:21"}, "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-e60eadbf44bc930e", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/GivingPanel.ts:90", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/GivingPanel.ts:90"}, "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-fbcf3db26b8b9ea3", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/GoodThingsDigestPanel.ts:21", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/GoodThingsDigestPanel.ts:21"}, "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-1a2e82df3bc5a9a6", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/RuntimeConfigPanel.ts:212", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/RuntimeConfigPanel.ts:212"}, "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-070031b00a9d838d", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/AviationCommandBar.ts:155", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/AviationCommandBar.ts:155"}, "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-5013bfcebf0393d6", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/BreakthroughsTickerPanel.ts:36", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/BreakthroughsTickerPanel.ts:36"}, "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-98f1a90a61ebbb81", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/Map.ts:276", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/Map.ts:276"}, "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-54f2130ffe56dd5a", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/LiveNewsPanel.ts:388", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/LiveNewsPanel.ts:388"}, "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-f8ea57c3cd8cdb8c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/SignalModal.ts:20", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/SignalModal.ts:20"}, "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-90859f9fb15b1643", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/UnifiedSettings.ts:182", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/UnifiedSettings.ts:182"}, "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-a98c9efa7c18cd02", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/VirtualList.ts:132", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/VirtualList.ts:132"}, "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-ea69a454ebd27c9d", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CommunityWidget.ts:13", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CommunityWidget.ts:13"}, "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-ba32ea4855b0dcf5", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryIntelModal.ts:52", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryIntelModal.ts:52"}, "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-a88127a4e9a89b7e", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountersPanel.ts:58", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountersPanel.ts:58"}, "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-717e57d5bf3baa5f", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MapContainer.ts:178", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MapContainer.ts:178"}, "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-d9c92f9d1acc9f8d", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/LiveWebcamsPanel.ts:128", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/LiveWebcamsPanel.ts:128"}, "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-b315a9591088f9c7", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MobileWarningModal.ts:13", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MobileWarningModal.ts:13"}, "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-095ec4612ed5c1c8", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/PositiveNewsFeedPanel.ts:109", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/PositiveNewsFeedPanel.ts:109"}, "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-3045b63131f5d208", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MapPopup.ts:176", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MapPopup.ts:176"}, "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-e58a948eb71023ec", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/ProgressChartsPanel.ts:45", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/ProgressChartsPanel.ts:45"}, "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-87e12b77c507de63", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/services/preferences-content.ts:43", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/services/preferences-content.ts:43"}, "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-bab7f766e4029a20", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/e2e/mobile-map-harness.ts:66", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/e2e/mobile-map-harness.ts:66"}, "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-69515d5199e4bda7", "name": "Insecure pattern 'cors_wildcard' in server/gateway.ts:171", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server/gateway.ts:171"}, "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-32f4d5060b1c46be", "name": "Insecure pattern 'dangerous_innerhtml' in public/pro/assets/index-CIvSGtTn.js:49", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in public/pro/assets/index-CIvSGtTn.js:49"}, "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-1f7ea3516d810da0", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/pro/assets/index-CIvSGtTn.js:48", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/pro/assets/index-CIvSGtTn.js:48"}, "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-076b03a16e76601d", "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-bf899e4c7f8554f9", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dad138f419869f24", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27bcea42cba6c545", "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-c931d173620405f1", "name": "Very large file: pro-test/src/App.tsx (1197 lines)", "shortDescription": {"text": "Very large file: pro-test/src/App.tsx (1197 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-f0727fbf9bc7af28", "name": "Very large file: api/intel-news/v1/enrich.ts (1522 lines)", "shortDescription": {"text": "Very large file: api/intel-news/v1/enrich.ts (1522 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-e4f49ed2d7db55d5", "name": "Very large file: api/intel-news/v1/refresh.ts (1495 lines)", "shortDescription": {"text": "Very large file: api/intel-news/v1/refresh.ts (1495 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-8fba3ed10e4aa42d", "name": "Very large file: scripts/ais-relay.cjs (6264 lines)", "shortDescription": {"text": "Very large file: scripts/ais-relay.cjs (6264 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-40ed1efdd28d48b5", "name": "Very large file: src/app/panel-layout.ts (1419 lines)", "shortDescription": {"text": "Very large file: src/app/panel-layout.ts (1419 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-9e9c99eaf5d66924", "name": "Very large file: src/app/data-loader.ts (2582 lines)", "shortDescription": {"text": "Very large file: src/app/data-loader.ts (2582 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-db48fc79d3641ba3", "name": "Very large file: src/components/DeckGLMap.ts (5405 lines)", "shortDescription": {"text": "Very large file: src/components/DeckGLMap.ts (5405 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-da5efd84d00204d3", "name": "Very large file: src/components/GlobeMap.ts (2850 lines)", "shortDescription": {"text": "Very large file: src/components/GlobeMap.ts (2850 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-4eeef07150df70b9", "name": "Very large file: src/components/Map.ts (3761 lines)", "shortDescription": {"text": "Very large file: src/components/Map.ts (3761 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-31ef851480f4fc8e", "name": "Very large file: src/components/LiveNewsPanel.ts (1593 lines)", "shortDescription": {"text": "Very large file: src/components/LiveNewsPanel.ts (1593 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-8ea6713689b18302", "name": "Very large file: src/components/MapPopup.ts (2818 lines)", "shortDescription": {"text": "Very large file: src/components/MapPopup.ts (2818 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-e96f7206f8e633be", "name": "Very large file: src/services/oref-locations.ts (1504 lines)", "shortDescription": {"text": "Very large file: src/services/oref-locations.ts (1504 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-a194832d8dbe116f", "name": "Very large file: src/config/feeds.ts (1349 lines)", "shortDescription": {"text": "Very large file: src/config/feeds.ts (1349 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-9c24064f6894c827", "name": "Very large file: src/config/geo.ts (3259 lines)", "shortDescription": {"text": "Very large file: src/config/geo.ts (3259 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-cf2eadd23793c2e4", "name": "Very large file: src/config/ai-datacenters.ts (3981 lines)", "shortDescription": {"text": "Very large file: src/config/ai-datacenters.ts (3981 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-faf64f30660b3a14", "name": "Very large file: src-tauri/src/main.rs (1442 lines)", "shortDescription": {"text": "Very large file: src-tauri/src/main.rs (1442 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-e036f71cb8a2efd0", "name": "Very large file: src-tauri/sidecar/local-api-server.mjs (1477 lines)", "shortDescription": {"text": "Very large file: src-tauri/sidecar/local-api-server.mjs (1477 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "47 test file(s) for 728 source file(s) (ratio 0.06). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 695 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 75 placeholder/mock markers across 25 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-61ac296ce508e13c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 vite.config.ts:485", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 vite.config.ts:485"}, "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-bd2265d880b0f5f3", "name": "Commented-code block (5 lines) in tests/edge-functions.test.mjs:132", "shortDescription": {"text": "Commented-code block (5 lines) in tests/edge-functions.test.mjs:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7ab3349acab85be8", "name": "Commented-code block (5 lines) in api/bootstrap.js:84", "shortDescription": {"text": "Commented-code block (5 lines) in api/bootstrap.js:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13c6fdd87221218c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/_lkg.js:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/_lkg.js: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-78a9e94edf23269c", "name": "Commented-code block (5 lines) in api/youtube/embed.js:96", "shortDescription": {"text": "Commented-code block (5 lines) in api/youtube/embed.js: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-45af4a58b2a12573", "name": "Commented-code block (7 lines) in api/live-news/v6/list-us-headlines.ts:78", "shortDescription": {"text": "Commented-code block (7 lines) in api/live-news/v6/list-us-headlines.ts:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51e11a5cf1866622", "name": "Commented-code block (6 lines) in api/world-brief/v1/weekly-digest.ts:90", "shortDescription": {"text": "Commented-code block (6 lines) in api/world-brief/v1/weekly-digest.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bbbeab0bdafcb435", "name": "Commented-code block (7 lines) in api/ops/_probe-core.js:158", "shortDescription": {"text": "Commented-code block (7 lines) in api/ops/_probe-core.js:158"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-004e6764ef4580c6", "name": "Commented-code block (6 lines) in api/intel-news/v1/enrich.ts:31", "shortDescription": {"text": "Commented-code block (6 lines) in api/intel-news/v1/enrich.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-73b7eacc36192fc2", "name": "Commented-code block (5 lines) in api/intel-news/v1/refresh.ts:301", "shortDescription": {"text": "Commented-code block (5 lines) in api/intel-news/v1/refresh.ts:301"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8ad4d9f460e9ec9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-mirta-bases.mjs:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-mirta-bases.mjs: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-01c78d10c6f22fcb", "name": "Commented-code block (8 lines) in scripts/ais-relay.cjs:301", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/ais-relay.cjs:301"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5bbbc8619716968f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ais-relay.cjs:4484", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ais-relay.cjs:4484"}, "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-fc7c475bdb17c774", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/railway-set-watch-paths.mjs:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/railway-set-watch-paths.mjs: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-a3c4f8e489a20e39", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ais-relay-rss.test.cjs:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ais-relay-rss.test.cjs: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-e9cf61b98e14128e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-oref-locations.mjs:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-oref-locations.mjs: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-c4899ea5ebacf7ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/settings-main.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/settings-main.ts: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-9efd567ec7a5470f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/main.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/main.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-66d078777d6a6322", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/country-intel.ts:236", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/country-intel.ts:236"}, "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-695caa71d36dae92", "name": "Commented-code block (7 lines) in src/utils/circuit-breaker.ts:216", "shortDescription": {"text": "Commented-code block (7 lines) in src/utils/circuit-breaker.ts:216"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc97868bd22f47a0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/MacroSignalsPanel.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/MacroSignalsPanel.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-3c0dd7c9ada3652e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/DeductionPanel.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/DeductionPanel.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-b1dc37068181e8e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/TechEventsPanel.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/TechEventsPanel.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-f0832c7feda24cad", "name": "Commented-code block (5 lines) in src/components/Map.ts:3601", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/Map.ts:3601"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89125b0bd1e51233", "name": "Legacy-named symbol `iptv_hd_abr_v1` in src/components/LiveNewsPanel.ts:233", "shortDescription": {"text": "Legacy-named symbol `iptv_hd_abr_v1` in src/components/LiveNewsPanel.ts:233"}, "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-93d0edf43f757595", "name": "Commented-code block (6 lines) in src/components/LiveNewsPanel.ts:1285", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/LiveNewsPanel.ts:1285"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3a0c3a085dbbdea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/GulfEconomiesPanel.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/GulfEconomiesPanel.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-bc2a8522973b5aec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/runtime-config.ts:523", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/runtime-config.ts:523"}, "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-dbacd17e16bf8170", "name": "Commented-code block (12 lines) in src/services/satellites.ts:1", "shortDescription": {"text": "Commented-code block (12 lines) in src/services/satellites.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b41a667e0a2f4ac5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cable-activity.ts:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cable-activity.ts:5"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-25f45d0d37b1d886", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/usni-fleet.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/usni-fleet.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-ccc8679e0d5e5e59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/threat-classifier.ts:392", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/threat-classifier.ts:392"}, "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-54c8efeabacd3257", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/eonet.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/eonet.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-1c4f5dc97780be21", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/pizzint.ts:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/pizzint.ts:14"}, "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-56801e14b34604b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/military-bases.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/military-bases.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-9787586a70eca53e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/stock-analysis-history.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/stock-analysis-history.ts: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-f330c1458788e724", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/gdelt-intel.ts:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/gdelt-intel.ts:127"}, "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-02cf635242abcbec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cable-health.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cable-health.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-dfb8c3b7a50b7be6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/positive-events-geo.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/positive-events-geo.ts: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-58af4703f05a9f2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/military-flights.ts:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/military-flights.ts:72"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6c6d8f968a66ee23", "name": "Legacy-named symbol `pruneOld` in src/services/signal-aggregator.ts:127", "shortDescription": {"text": "Legacy-named symbol `pruneOld` in src/services/signal-aggregator.ts:127"}, "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-3094e1af2942634d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/earthquakes.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/earthquakes.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-4bd285dd37048ae5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/population-exposure.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/population-exposure.ts:6"}, "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-1f1fc2b6ad038a9f", "name": "Commented-code block (5 lines) in src/services/runtime.ts:483", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/runtime.ts:483"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5517de3481523ea2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/stock-backtest.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/stock-backtest.ts:7"}, "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-f1fc4b973641da28", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/stock-analysis.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/stock-analysis.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-b32064ecfa845959", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cached-risk-scores.ts:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cached-risk-scores.ts:14"}, "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-94a2a6240f33df26", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cached-theater-posture.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cached-theater-posture.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-a8a7c7896d6f4775", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/summarization.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/summarization.ts: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-e9daf97caee436b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/telegram-intel.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/telegram-intel.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-fb6d54f3f90b0d95", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/wingbits.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/wingbits.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-34947da0c97cf2e6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/temporal-baseline.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/temporal-baseline.ts: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-299b626105053f06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/unrest/index.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/unrest/index.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-5b402dff3107af63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/conflict/index.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/conflict/index.ts: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-0b9faf673806c0f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/giving/index.ts:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/giving/index.ts:127"}, "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-6637467a5acbda22", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/infrastructure/index.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/infrastructure/index.ts: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-5c3f57d8569df864", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/economic/index.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/economic/index.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-a055b8d2f48dd32c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/displacement/index.ts:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/displacement/index.ts:109"}, "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-2f35a924cea0fdbd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/prediction/index.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/prediction/index.ts: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-63b6aeb8a0ccc6ab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/research/index.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/research/index.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-bd753256c559e9de", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/market/index.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/market/index.ts:21"}, "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-a2a4ed533f63c93b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/climate/index.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/climate/index.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-35ea674cd3ba45d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/supply-chain/index.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/supply-chain/index.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-91763799f7fd3f5a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/trade/index.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/trade/index.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-71a9d3ac3d712d15", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/maritime/index.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/maritime/index.ts:15"}, "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-35a7935c60523ae6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/aviation/index.ts:273", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/aviation/index.ts:273"}, "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-c127f4aee2427335", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/wildfires/index.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/wildfires/index.ts: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-a22ac93631ef5023", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cyber/index.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cyber/index.ts: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-ec5212619b77b217", "name": "Commented-code block (5 lines) in src/config/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/config/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e0bae1dad24b0bc", "name": "Commented-code block (5 lines) in src/config/panels.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/config/panels.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-216f5c30e15f5789", "name": "Commented-code block (5 lines) in src/config/feeds.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/config/feeds.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-427f4a2b35abbb61", "name": "Commented-code block (5 lines) in src/config/bases-expanded.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/config/bases-expanded.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5facf496e784ccc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/intelligence/v1/classify-event.ts:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/intelligence/v1/classify-event.ts:72"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-77c4e289e09a9288", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/intelligence/v1/get-country-intel-brief.ts:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/intelligence/v1/get-country-intel-brief.ts: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-884b2f9949c30310", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/intelligence/v1/deduct-situation.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/intelligence/v1/deduct-situation.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-0bb1446ac34590a1", "name": "Legacy-named symbol `rest_v1` in server/worldmonitor/intelligence/v1/get-country-facts.ts:168", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in server/worldmonitor/intelligence/v1/get-country-facts.ts:168"}, "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-c12ec6ccf58547e8", "name": "Commented-code block (6 lines) in server/worldmonitor/giving/v1/get-giving-summary.ts:33", "shortDescription": {"text": "Commented-code block (6 lines) in server/worldmonitor/giving/v1/get-giving-summary.ts:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0708d6cd385da261", "name": "Commented-code block (10 lines) in server/worldmonitor/military/v1/list-military-flights.ts:78", "shortDescription": {"text": "Commented-code block (10 lines) in server/worldmonitor/military/v1/list-military-flights.ts:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87a33e7540b5b754", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/research/v1/list-tech-events.ts:264", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/research/v1/list-tech-events.ts:264"}, "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-946e71a9534f07e3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/market/v1/stock-news-search.ts:168", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/market/v1/stock-news-search.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-363dca03105c7852", "name": "Commented-code block (8 lines) in server/worldmonitor/market/v1/_shared.ts:154", "shortDescription": {"text": "Commented-code block (8 lines) in server/worldmonitor/market/v1/_shared.ts:154"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a1ad1456bf6f472", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/news/v1/summarize-article.ts:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/news/v1/summarize-article.ts:105"}, "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-7ed89bf505a69a1c", "name": "Commented-code block (5 lines) in server/live-news/v3/refresh.ts:155", "shortDescription": {"text": "Commented-code block (5 lines) in server/live-news/v3/refresh.ts:155"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c1fdab11b583a17", "name": "Commented-code block (9 lines) in server/live-news/v1/_normalize.ts:179", "shortDescription": {"text": "Commented-code block (9 lines) in server/live-news/v1/_normalize.ts:179"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-540270e989114f06", "name": "Commented-code block (5 lines) in server/live-news/v1/list-us-headlines.ts:24", "shortDescription": {"text": "Commented-code block (5 lines) in server/live-news/v1/list-us-headlines.ts:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-325e867c2f02983c", "name": "Commented-code block (6 lines) in server/live-news/v1/_enrich-combined.ts:31", "shortDescription": {"text": "Commented-code block (6 lines) in server/live-news/v1/_enrich-combined.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-a72781269e88b71e", "name": "Commented-code block (6 lines) in server/live-news/v1/_enrich.ts:191", "shortDescription": {"text": "Commented-code block (6 lines) in server/live-news/v1/_enrich.ts:191"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f73e6bd34bc3b99", "name": "Commented-code block (5 lines) in server/live-news/v1/_dedup-embed.ts:137", "shortDescription": {"text": "Commented-code block (5 lines) in server/live-news/v1/_dedup-embed.ts:137"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca7b2f314c165c91", "name": "Commented-code block (5 lines) in server/live-news/v1/_sources.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in server/live-news/v1/_sources.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea81d3dc581324b7", "name": "Commented-code block (10 lines) in server/live-news/v1/_dedup.ts:391", "shortDescription": {"text": "Commented-code block (10 lines) in server/live-news/v1/_dedup.ts:391"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0183d690d8b79b81", "name": "Commented-code block (5 lines) in server/live-news/v1/_paraphrase.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in server/live-news/v1/_paraphrase.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54603c9d2a5f4d4b", "name": "Commented-code block (10 lines) in server/live-news/v6/_normalize.ts:263", "shortDescription": {"text": "Commented-code block (10 lines) in server/live-news/v6/_normalize.ts:263"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-404aecf5affec060", "name": "Commented-code block (8 lines) in server/live-news/v6/list-us-headlines.ts:61", "shortDescription": {"text": "Commented-code block (8 lines) in server/live-news/v6/list-us-headlines.ts:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c659460e14aceef6", "name": "Commented-code block (8 lines) in server/live-news/v6/_cluster.ts:475", "shortDescription": {"text": "Commented-code block (8 lines) in server/live-news/v6/_cluster.ts:475"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c8e38e5285157699", "name": "Commented-code block (6 lines) in server/live-news/v6/_sources.ts:142", "shortDescription": {"text": "Commented-code block (6 lines) in server/live-news/v6/_sources.ts:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ec0d94d068fc7f3", "name": "Commented-code block (6 lines) in server/live-news/v6/refresh.ts:26", "shortDescription": {"text": "Commented-code block (6 lines) in server/live-news/v6/refresh.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dcc6a8d823b2d806", "name": "Commented-code block (7 lines) in server/live-news/v2/list-us-headlines.ts:101", "shortDescription": {"text": "Commented-code block (7 lines) in server/live-news/v2/list-us-headlines.ts:101"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f6b562a79f58585", "name": "Commented-code block (5 lines) in server/world-brief/v1/_generate.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in server/world-brief/v1/_generate.ts:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e5c5a0176566eec", "name": "Commented-code block (5 lines) in server/_shared/llm.ts:106", "shortDescription": {"text": "Commented-code block (5 lines) in server/_shared/llm.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-b449b0c14b989d9e", "name": "Commented-code block (6 lines) in server/_shared/webz-client.ts:51", "shortDescription": {"text": "Commented-code block (6 lines) in server/_shared/webz-client.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f7e7543a7ba5d9f", "name": "Commented-code block (8 lines) in server/_shared/redis.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in server/_shared/redis.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2ec15e53a96cfa0b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/_shared/redis.ts:428", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/_shared/redis.ts:428"}, "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-bbd85b97e21442e6", "name": "Commented-code block (5 lines) in server/intel-news/v1/list-headlines.ts:122", "shortDescription": {"text": "Commented-code block (5 lines) in server/intel-news/v1/list-headlines.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-8f31deca4f57553a", "name": "Commented-code block (5 lines) in server/conflict-archive/v2/refresh.ts:120", "shortDescription": {"text": "Commented-code block (5 lines) in server/conflict-archive/v2/refresh.ts:120"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d89e43bbb19a98df", "name": "Commented-code block (5 lines) in server/conflict-archive/v5/list.ts:86", "shortDescription": {"text": "Commented-code block (5 lines) in server/conflict-archive/v5/list.ts:86"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef954c9bc80bec5a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src-tauri/sidecar/local-api-server.test.mjs:392", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src-tauri/sidecar/local-api-server.test.mjs:392"}, "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-b1320884d641f533", "name": "Commented-code block (5 lines) in src-tauri/sidecar/local-api-server.mjs:14", "shortDescription": {"text": "Commented-code block (5 lines) in src-tauri/sidecar/local-api-server.mjs:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c5ffcd463cab6b5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src-tauri/sidecar/local-api-server.mjs:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src-tauri/sidecar/local-api-server.mjs:15"}, "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-464514b2d66ed93c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 blog-site/scripts/generate-og-images.mjs:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 blog-site/scripts/generate-og-images.mjs: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-95ba6a61de38b5d3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/circuit-breaker-persistence.spec.ts:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/circuit-breaker-persistence.spec.ts:92"}, "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-8afe4a7133760579", "name": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/runtime-fetch.spec.ts:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/runtime-fetch.spec.ts:127"}, "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-66728f8dad1c193d", "name": "Legacy-named symbol `unstable_legacy` in public/pro/assets/index-CIvSGtTn.js:48", "shortDescription": {"text": "Legacy-named symbol `unstable_legacy` in public/pro/assets/index-CIvSGtTn.js:48"}, "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-fa021b2b84e7c19e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/pro/assets/index-CIvSGtTn.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/pro/assets/index-CIvSGtTn.js:1"}, "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-3731d091ae952b0e", "name": "163 env vars used in code but missing from .env.example", "shortDescription": {"text": "163 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ABUSEIPDB_API_KEY`, `ACLED_ACCESS_TOKEN`, `ADSBX_API_KEY`, `AISSTREAM_API_KEY`, `AIS_MAX_VESSELS`, `AIS_MAX_VESSEL_HISTORY`, `AIS_SNAPSHOT_INTERVAL_MS`, `AIS_UPSTREAM_DRAIN_BATCH` + 155 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-da027301a615db51", "name": "Dangling fetch: GET https://api.coinpaprika.com/v1/coins (tests/crypto-config.test.mjs:32)", "shortDescription": {"text": "Dangling fetch: GET https://api.coinpaprika.com/v1/coins (tests/crypto-config.test.mjs:32)"}, "fullDescription": {"text": "`tests/crypto-config.test.mjs:32` calls `GET https://api.coinpaprika.com/v1/coins` 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.coinpaprika.com/v1/coins`\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-f1a08436d2f73cf9", "name": "Dangling fetch: POST https://challenges.cloudflare.com/turnstile/v0/siteverify (api/register-interest.js:29)", "shortDescription": {"text": "Dangling fetch: POST https://challenges.cloudflare.com/turnstile/v0/siteverify (api/register-interest.js:29)"}, "fullDescription": {"text": "`api/register-interest.js:29` calls `POST https://challenges.cloudflare.com/turnstile/v0/siteverify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/challenges.cloudflare.com/turnstile/v0/siteverify`\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-b14fbbe2bc9c15fd", "name": "Dangling fetch: POST https://api.resend.com/emails (api/register-interest.js:56)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (api/register-interest.js:56)"}, "fullDescription": {"text": "`api/register-interest.js:56` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-be30be70186bd4a7", "name": "Dangling fetch: GET https://www.fwdstart.me/archive (api/fwdstart.js:12)", "shortDescription": {"text": "Dangling fetch: GET https://www.fwdstart.me/archive (api/fwdstart.js:12)"}, "fullDescription": {"text": "`api/fwdstart.js:12` calls `GET https://www.fwdstart.me/archive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.fwdstart.me/archive`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-558e8c507096e076", "name": "Dangling fetch: POST https://challenges.cloudflare.com/turnstile/v0/siteverify (api/contact.js:50)", "shortDescription": {"text": "Dangling fetch: POST https://challenges.cloudflare.com/turnstile/v0/siteverify (api/contact.js:50)"}, "fullDescription": {"text": "`api/contact.js:50` calls `POST https://challenges.cloudflare.com/turnstile/v0/siteverify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/challenges.cloudflare.com/turnstile/v0/siteverify`\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-281e8c44dc79d308", "name": "Dangling fetch: POST https://api.resend.com/emails (api/contact.js:71)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (api/contact.js:71)"}, "fullDescription": {"text": "`api/contact.js:71` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6b32efc2292331d", "name": "Dangling fetch: GET https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=${videoIdParam}&format=json (api/", "shortDescription": {"text": "Dangling fetch: GET https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=${videoIdParam}&format=json (api/youtube/live.js:55)"}, "fullDescription": {"text": "`api/youtube/live.js:55` calls `GET https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=${videoIdParam}&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:/www.youtube.com/oembed`\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-2ede8f1e91adffde", "name": "Dangling fetch: GET https://www.youtube.com/${channelHandle}/live (api/youtube/live.js:83)", "shortDescription": {"text": "Dangling fetch: GET https://www.youtube.com/${channelHandle}/live (api/youtube/live.js:83)"}, "fullDescription": {"text": "`api/youtube/live.js:83` calls `GET https://www.youtube.com/${channelHandle}/live` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.youtube.com/<p>/live`\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-156f025b041be04b", "name": "Dangling fetch: GET https://api.eia.gov/v2/seriesid/${seriesId}?api_key=${apiKey}&num=2 (api/eia/[[...path]].js:61)", "shortDescription": {"text": "Dangling fetch: GET https://api.eia.gov/v2/seriesid/${seriesId}?api_key=${apiKey}&num=2 (api/eia/[[...path]].js:61)"}, "fullDescription": {"text": "`api/eia/[[...path]].js:61` calls `GET https://api.eia.gov/v2/seriesid/${seriesId}?api_key=${apiKey}&num=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:/api.eia.gov/v2/seriesid/<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-a927811c56c38952", "name": "Dangling fetch: GET https://hn.algolia.com/api/v1/search_by_date?query=${encodeURIComponent(companyName)}&tags=story&hit", "shortDescription": {"text": "Dangling fetch: GET https://hn.algolia.com/api/v1/search_by_date?query=${encodeURIComponent(companyName)}&tags=story&hitsPerPage=20&numericFilters=created_at_i>${Math.floor(Date.now() / 1000) - 30 * 86400} (api/enrichment/signals.js:58)"}, "fullDescription": {"text": "`api/enrichment/signals.js:58` calls `GET https://hn.algolia.com/api/v1/search_by_date?query=${encodeURIComponent(companyName)}&tags=story&hitsPerPage=20&numericFilters=created_at_i>${Math.floor(Date.now() / 1000) - 30 * 86400}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/hn.algolia.com/api/v1/search_by_date`\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-4759f2e3c9e727b8", "name": "Dangling fetch: GET https://api.github.com/orgs/${encodeURIComponent(orgName)}/repos?sort=created&per_page=10 (api/enric", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/orgs/${encodeURIComponent(orgName)}/repos?sort=created&per_page=10 (api/enrichment/signals.js:89)"}, "fullDescription": {"text": "`api/enrichment/signals.js:89` calls `GET https://api.github.com/orgs/${encodeURIComponent(orgName)}/repos?sort=created&per_page=10` 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.github.com/orgs/<p>/repos`\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-c54ebf55bdc52645", "name": "Dangling fetch: GET https://hn.algolia.com/api/v1/search?query=${encodeURIComponent(companyName)}&tags=comment,ask_hn&hi", "shortDescription": {"text": "Dangling fetch: GET https://hn.algolia.com/api/v1/search?query=${encodeURIComponent(companyName)}&tags=comment,ask_hn&hitsPerPage=10&numericFilters=created_at_i>${Math.floor(Date.now() / 1000) - 60 * 86400} (api/enrichment/signals.js:120)"}, "fullDescription": {"text": "`api/enrichment/signals.js:120` calls `GET https://hn.algolia.com/api/v1/search?query=${encodeURIComponent(companyName)}&tags=comment,ask_hn&hitsPerPage=10&numericFilters=created_at_i>${Math.floor(Date.now() / 1000) - 60 * 86400}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/hn.algolia.com/api/v1/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-5280889484dd5d6d", "name": "Dangling fetch: GET https://api.github.com/orgs/${encodeURIComponent(name)} (api/enrichment/company.js:23)", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/orgs/${encodeURIComponent(name)} (api/enrichment/company.js:23)"}, "fullDescription": {"text": "`api/enrichment/company.js:23` calls `GET https://api.github.com/orgs/${encodeURIComponent(name)}` 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.github.com/orgs/<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-ec0d643e7d1788f0", "name": "Dangling fetch: GET https://api.github.com/orgs/${encodeURIComponent(orgName)}/repos?sort=stars&per_page=10 (api/enrichm", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/orgs/${encodeURIComponent(orgName)}/repos?sort=stars&per_page=10 (api/enrichment/company.js:46)"}, "fullDescription": {"text": "`api/enrichment/company.js:46` calls `GET https://api.github.com/orgs/${encodeURIComponent(orgName)}/repos?sort=stars&per_page=10` 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.github.com/orgs/<p>/repos`\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-e709d78b5380e2ba", "name": "Dangling fetch: GET https://efts.sec.gov/LATEST/search-index?q=${encodeURIComponent(companyName)}&dateRange=custom&start", "shortDescription": {"text": "Dangling fetch: GET https://efts.sec.gov/LATEST/search-index?q=${encodeURIComponent(companyName)}&dateRange=custom&startdt=${getDateMonthsAgo(6)}&enddt=${getTodayISO()}&forms=10-K,10-Q,8-K&from=0&size=5 (api/enrichment/company.js:72)"}, "fullDescription": {"text": "`api/enrichment/company.js:72` calls `GET https://efts.sec.gov/LATEST/search-index?q=${encodeURIComponent(companyName)}&dateRange=custom&startdt=${getDateMonthsAgo(6)}&enddt=${getTodayISO()}&forms=10-K,10-Q,8-K&from=0&size=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/efts.sec.gov/latest/search-index`\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-68cd2ce3c415a56e", "name": "Dangling fetch: GET https://hn.algolia.com/api/v1/search?query=${encodeURIComponent(companyName)}&tags=story&hitsPerPage", "shortDescription": {"text": "Dangling fetch: GET https://hn.algolia.com/api/v1/search?query=${encodeURIComponent(companyName)}&tags=story&hitsPerPage=5 (api/enrichment/company.js:97)"}, "fullDescription": {"text": "`api/enrichment/company.js:97` calls `GET https://hn.algolia.com/api/v1/search?query=${encodeURIComponent(companyName)}&tags=story&hitsPerPage=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/hn.algolia.com/api/v1/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-ae6fab9cda17c303", "name": "Dangling fetch: POST https://api.globalping.io/v1/measurements (api/ops/_probe-core.js:190)", "shortDescription": {"text": "Dangling fetch: POST https://api.globalping.io/v1/measurements (api/ops/_probe-core.js:190)"}, "fullDescription": {"text": "`api/ops/_probe-core.js:190` calls `POST https://api.globalping.io/v1/measurements` 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.globalping.io/v1/measurements`\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-9102623f0c5a1fb2", "name": "Dangling fetch: GET https://api.globalping.io/v1/measurements/${id} (api/ops/_probe-core.js:216)", "shortDescription": {"text": "Dangling fetch: GET https://api.globalping.io/v1/measurements/${id} (api/ops/_probe-core.js:216)"}, "fullDescription": {"text": "`api/ops/_probe-core.js:216` calls `GET https://api.globalping.io/v1/measurements/${id}` 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.globalping.io/v1/measurements/<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-763b009bd2852c46", "name": "Dangling fetch: GET https://ucdpapi.pcr.uu.se/api/gedevents/${version}?pagesize=${UCDP_PAGE_SIZE}&page=${page} (scripts/", "shortDescription": {"text": "Dangling fetch: GET https://ucdpapi.pcr.uu.se/api/gedevents/${version}?pagesize=${UCDP_PAGE_SIZE}&page=${page} (scripts/seed-ucdp-events.mjs:59)"}, "fullDescription": {"text": "`scripts/seed-ucdp-events.mjs:59` calls `GET https://ucdpapi.pcr.uu.se/api/gedevents/${version}?pagesize=${UCDP_PAGE_SIZE}&page=${page}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/ucdpapi.pcr.uu.se/api/gedevents/<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-2c2fd7a03f99474f", "name": "Dangling fetch: GET https://api.coinpaprika.com/v1/tickers?quotes=USD (scripts/seed-crypto-quotes.mjs:55)", "shortDescription": {"text": "Dangling fetch: GET https://api.coinpaprika.com/v1/tickers?quotes=USD (scripts/seed-crypto-quotes.mjs:55)"}, "fullDescription": {"text": "`scripts/seed-crypto-quotes.mjs:55` calls `GET https://api.coinpaprika.com/v1/tickers?quotes=USD` 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.coinpaprika.com/v1/tickers`\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-b2b9444e735972f7", "name": "Dangling fetch: GET http://localhost:${PORT}/opensky?${params} (scripts/ais-relay.cjs:2691)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${PORT}/opensky?${params} (scripts/ais-relay.cjs:2691)"}, "fullDescription": {"text": "`scripts/ais-relay.cjs:2691` calls `GET http://localhost:${PORT}/opensky?${params}` 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:/<p>/opensky`\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-36f048d71f247347", "name": "Dangling fetch: POST https://customer-api.wingbits.com/v1/flights (scripts/ais-relay.cjs:2731)", "shortDescription": {"text": "Dangling fetch: POST https://customer-api.wingbits.com/v1/flights (scripts/ais-relay.cjs:2731)"}, "fullDescription": {"text": "`scripts/ais-relay.cjs:2731` calls `POST https://customer-api.wingbits.com/v1/flights` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/customer-api.wingbits.com/v1/flights`\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-acd04a4aa600126a", "name": "Dangling fetch: GET https://api.weather.gov/alerts/active (scripts/ais-relay.cjs:2884)", "shortDescription": {"text": "Dangling fetch: GET https://api.weather.gov/alerts/active (scripts/ais-relay.cjs:2884)"}, "fullDescription": {"text": "`scripts/ais-relay.cjs:2884` calls `GET https://api.weather.gov/alerts/active` 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.weather.gov/alerts/active`\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-4341c7dcc2726dad", "name": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (scripts/ais-relay.cjs:2969)", "shortDescription": {"text": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (scripts/ais-relay.cjs:2969)"}, "fullDescription": {"text": "`scripts/ais-relay.cjs:2969` 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-b300ba542cc6c971", "name": "Dangling fetch: GET https://ipinfo.io/${encodeURIComponent(ip)}/json (scripts/seed-cyber-threats.mjs:192)", "shortDescription": {"text": "Dangling fetch: GET https://ipinfo.io/${encodeURIComponent(ip)}/json (scripts/seed-cyber-threats.mjs:192)"}, "fullDescription": {"text": "`scripts/seed-cyber-threats.mjs:192` calls `GET https://ipinfo.io/${encodeURIComponent(ip)}/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:/ipinfo.io/<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-8d6fee3dff248a7b", "name": "Dangling fetch: GET https://freeipapi.com/api/json/${encodeURIComponent(ip)} (scripts/seed-cyber-threats.mjs:206)", "shortDescription": {"text": "Dangling fetch: GET https://freeipapi.com/api/json/${encodeURIComponent(ip)} (scripts/seed-cyber-threats.mjs:206)"}, "fullDescription": {"text": "`scripts/seed-cyber-threats.mjs:206` calls `GET https://freeipapi.com/api/json/${encodeURIComponent(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:/freeipapi.com/api/json/<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-fe387e5ccbcd620e", "name": "Dangling fetch: GET https://api.unhcr.org/population/v1/population/?year=${year}&limit=${limit}&page=${page}&coo_all=tru", "shortDescription": {"text": "Dangling fetch: GET https://api.unhcr.org/population/v1/population/?year=${year}&limit=${limit}&page=${page}&coo_all=true&coa_all=true (scripts/seed-displacement-summary.mjs:35)"}, "fullDescription": {"text": "`scripts/seed-displacement-summary.mjs:35` calls `GET https://api.unhcr.org/population/v1/population/?year=${year}&limit=${limit}&page=${page}&coo_all=true&coa_all=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.unhcr.org/population/v1/population`\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-76e9645607d5a45f", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:23", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:239)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:239` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-97642b1f0b8c2e44", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:24", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:245)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:245` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-9563efc3b3a79398", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:25", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:251)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:251` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-61e6cf1b44cffad0", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:27", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:273)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:273` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-55e7a1cb5329367b", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:29", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:299)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:299` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-3c86a0e5ebcb5712", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:30", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:303)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:303` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-3a321e531c601265", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:34", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:348)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:348` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-b71d18c75c1d480e", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:36", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:361)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:361` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-6bad6330b8d0beff", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:37", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:371)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:371` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-5ef69d7ba3f1118a", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:39", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:391)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:391` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-c741f7f2747469c7", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:40", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:401)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:401` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-cf3e2dd52c3a02c8", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:42", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:420)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:420` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-4168e11e70f9e0f2", "name": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:43", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:433)"}, "fullDescription": {"text": "`scripts/ais-relay-rss.test.cjs:433` calls `GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-86f48b3096aa231f", "name": "Dangling fetch: GET https://finnhub.io/api/v1/quote?symbol=${encodeURIComponent(s)} (scripts/seed-sectors.mjs:50)", "shortDescription": {"text": "Dangling fetch: GET https://finnhub.io/api/v1/quote?symbol=${encodeURIComponent(s)} (scripts/seed-sectors.mjs:50)"}, "fullDescription": {"text": "`scripts/seed-sectors.mjs:50` calls `GET https://finnhub.io/api/v1/quote?symbol=${encodeURIComponent(s)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/finnhub.io/api/v1/quote`\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-4dc6abfeb04de7b9", "name": "Dangling fetch: GET https://api.coinpaprika.com/v1/tickers?quotes=USD (scripts/seed-stablecoin-markets.mjs:57)", "shortDescription": {"text": "Dangling fetch: GET https://api.coinpaprika.com/v1/tickers?quotes=USD (scripts/seed-stablecoin-markets.mjs:57)"}, "fullDescription": {"text": "`scripts/seed-stablecoin-markets.mjs:57` calls `GET https://api.coinpaprika.com/v1/tickers?quotes=USD` 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.coinpaprika.com/v1/tickers`\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-be64d0c48cf16476", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/fred-data (src-tauri/sidecar/local-api-server.test.mjs:183)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/fred-data (src-tauri/sidecar/local-api-server.test.mjs:183)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:183` calls `GET http://127.0.0.1:${port}/api/fred-data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/fred-data`\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-291e0ed09a706a48", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/fred-data (src-tauri/sidecar/local-api-server.test.mjs:218)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/fred-data (src-tauri/sidecar/local-api-server.test.mjs:218)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:218` calls `GET http://127.0.0.1:${port}/api/fred-data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/fred-data`\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-4fb0756253b650ec", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/post-fail (src-tauri/sidecar/local-api-server.test.mjs:267)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/post-fail (src-tauri/sidecar/local-api-server.test.mjs:267)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:267` calls `POST http://127.0.0.1:${port}/api/post-fail` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/post-fail`\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-8da4940c83c16932", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/live (src-tauri/sidecar/local-api-server.test.mjs:309)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/live (src-tauri/sidecar/local-api-server.test.mjs:309)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:309` calls `GET http://127.0.0.1:${port}/api/live` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/live`\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-8314e1ec041c48ed", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/not-found (src-tauri/sidecar/local-api-server.test.mjs:334)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/not-found (src-tauri/sidecar/local-api-server.test.mjs:334)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:334` calls `GET http://127.0.0.1:${port}/api/not-found` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/not-found`\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-f9e368d4a00fd4a0", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/origin-check (src-tauri/sidecar/local-api-server.test.mjs:373)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/origin-check (src-tauri/sidecar/local-api-server.test.mjs:373)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:373` calls `GET http://127.0.0.1:${port}/api/origin-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:/127.0.0.1:/<p>/api/origin-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-cc7e8ad3d7f7aa60", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/request-proxy (src-tauri/sidecar/local-api-server.test.mjs:433)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/request-proxy (src-tauri/sidecar/local-api-server.test.mjs:433)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:433` calls `GET http://127.0.0.1:${port}/api/request-proxy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/request-proxy`\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-6a7ffdb3a5ad6dfa", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/request-consumed (src-tauri/sidecar/local-api-server.test.mjs:485)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/request-consumed (src-tauri/sidecar/local-api-server.test.mjs:485)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:485` calls `GET http://127.0.0.1:${port}/api/request-consumed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/request-consumed`\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-40552350317c6d03", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/no-local-handler (src-tauri/sidecar/local-api-server.test.mjs:516)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/no-local-handler (src-tauri/sidecar/local-api-server.test.mjs:516)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:516` calls `GET http://127.0.0.1:${port}/api/no-local-handler` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/no-local-handler`\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-f8aa77ff1b009aee", "name": "Dangling fetch: OPTIONS http://127.0.0.1:${port}/api/data (src-tauri/sidecar/local-api-server.test.mjs:548)", "shortDescription": {"text": "Dangling fetch: OPTIONS http://127.0.0.1:${port}/api/data (src-tauri/sidecar/local-api-server.test.mjs:548)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:548` calls `OPTIONS http://127.0.0.1:${port}/api/data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/data`\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-265b20dc789020a1", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/large (src-tauri/sidecar/local-api-server.test.mjs:577)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/large (src-tauri/sidecar/local-api-server.test.mjs:577)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:577` calls `GET http://127.0.0.1:${port}/api/large` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/large`\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-240a1b9a8ff949dc", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/live (src-tauri/sidecar/local-api-server.test.mjs:626)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/live (src-tauri/sidecar/local-api-server.test.mjs:626)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:626` calls `GET http://127.0.0.1:${port}/api/live` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/live`\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-caded405e99dc7b0", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:651)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:651)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:651` calls `POST http://127.0.0.1:${port}/api/local-env-update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-env-update`\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-cc6505c69f85ad91", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:679)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:679)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:679` calls `POST http://127.0.0.1:${port}/api/local-env-update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-env-update`\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-e8ccc7792d00a3af", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:707)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:707)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:707` calls `POST http://127.0.0.1:${port}/api/local-env-update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-env-update`\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-843de62b3a4bcfb3", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:743", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:743)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:743` calls `POST http://127.0.0.1:${port}/api/local-validate-secret` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-validate-secret`\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-59ea0057b6cfb3d3", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:782", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:782)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:782` calls `POST http://127.0.0.1:${port}/api/local-validate-secret` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-validate-secret`\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-cdb37a0fb599ef06", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:822", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:822)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:822` calls `POST http://127.0.0.1:${port}/api/local-validate-secret` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-validate-secret`\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-afdaf7a911640831", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:850", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:850)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:850` calls `POST http://127.0.0.1:${port}/api/local-validate-secret` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-validate-secret`\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-9ade01f698eec57f", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:875", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:875)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:875` calls `POST http://127.0.0.1:${port}/api/local-validate-secret` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-validate-secret`\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-45e60594fb532bc4", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:970)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:970)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:970` calls `POST http://127.0.0.1:${port}/api/local-env-update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-env-update`\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-edb82702ce6c05ea", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:980)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:980)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:980` calls `POST http://127.0.0.1:${port}/api/local-env-update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-env-update`\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-53cdec0948ec29bf", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/compression-check (src-tauri/sidecar/local-api-server.test.mjs:1025)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/compression-check (src-tauri/sidecar/local-api-server.test.mjs:1025)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1025` calls `GET http://127.0.0.1:${port}/api/compression-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:/127.0.0.1:/<p>/api/compression-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-660d3979e562ed63", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/compression-check (src-tauri/sidecar/local-api-server.test.mjs:1066)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/compression-check (src-tauri/sidecar/local-api-server.test.mjs:1066)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1066` calls `GET http://127.0.0.1:${port}/api/compression-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:/127.0.0.1:/<p>/api/compression-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-fbd55d94c93e2d8a", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-status (src-tauri/sidecar/local-api-server.test.mjs:1099)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-status (src-tauri/sidecar/local-api-server.test.mjs:1099)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1099` calls `GET http://127.0.0.1:${port}/api/local-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:/127.0.0.1:/<p>/api/local-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-bfbf7c1e3afa8d50", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-status (src-tauri/sidecar/local-api-server.test.mjs:1105)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-status (src-tauri/sidecar/local-api-server.test.mjs:1105)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1105` calls `GET http://127.0.0.1:${port}/api/local-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:/127.0.0.1:/<p>/api/local-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-677a37e8cd77fe0e", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-traffic-log (src-tauri/sidecar/local-api-server.test.mjs:1133)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-traffic-log (src-tauri/sidecar/local-api-server.test.mjs:1133)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1133` calls `GET http://127.0.0.1:${port}/api/local-traffic-log` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-traffic-log`\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-760fe71f642a2eca", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-debug-toggle (src-tauri/sidecar/local-api-server.test.mjs:1159)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-debug-toggle (src-tauri/sidecar/local-api-server.test.mjs:1159)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1159` calls `GET http://127.0.0.1:${port}/api/local-debug-toggle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-debug-toggle`\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-c479156c43b0efdb", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=https://example.com/rss (src-tauri/sidecar/local-api-serv", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=https://example.com/rss (src-tauri/sidecar/local-api-server.test.mjs:1185)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1185` calls `GET http://127.0.0.1:${port}/api/rss-proxy?url=https://example.com/rss` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/rss-proxy`\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-ef2320f1dcdb92ce", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/service-status (src-tauri/sidecar/local-api-server.test.mjs:1211)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/service-status (src-tauri/sidecar/local-api-server.test.mjs:1211)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1211` calls `GET http://127.0.0.1:${port}/api/service-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:/127.0.0.1:/<p>/api/service-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-f870743e2f6eeedc", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://127.0.0.1:3000 (src-tauri/sidecar/local-api-server", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://127.0.0.1:3000 (src-tauri/sidecar/local-api-server.test.mjs:1237)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1237` calls `GET http://127.0.0.1:${port}/api/rss-proxy?url=http://127.0.0.1:3000` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/rss-proxy`\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-603c98f29abc52ec", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://192.168.1.1/ (src-tauri/sidecar/local-api-server.t", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://192.168.1.1/ (src-tauri/sidecar/local-api-server.test.mjs:1259)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1259` calls `GET http://127.0.0.1:${port}/api/rss-proxy?url=http://192.168.1.1/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/rss-proxy`\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-6eea7e73789a587a", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://10.0.0.1/ (src-tauri/sidecar/local-api-server.test", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://10.0.0.1/ (src-tauri/sidecar/local-api-server.test.mjs:1263)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1263` calls `GET http://127.0.0.1:${port}/api/rss-proxy?url=http://10.0.0.1/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/rss-proxy`\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-7a178f4de47844f4", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://172.16.0.1/ (src-tauri/sidecar/local-api-server.te", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://172.16.0.1/ (src-tauri/sidecar/local-api-server.test.mjs:1267)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1267` calls `GET http://127.0.0.1:${port}/api/rss-proxy?url=http://172.16.0.1/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/rss-proxy`\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-1c556c915101571b", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=file:///etc/passwd (src-tauri/sidecar/local-api-server.te", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=file:///etc/passwd (src-tauri/sidecar/local-api-server.test.mjs:1286)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1286` calls `GET http://127.0.0.1:${port}/api/rss-proxy?url=file:///etc/passwd` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/rss-proxy`\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-54015e8d8d6e32dd", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://user:pass@example.com/rss (src-tauri/sidecar/local", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://user:pass@example.com/rss (src-tauri/sidecar/local-api-server.test.mjs:1307)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1307` calls `GET http://127.0.0.1:${port}/api/rss-proxy?url=http://user:pass@example.com/rss` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/rss-proxy`\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-cdca153b86fca3bf", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/test-endpoint?secret=value&key=data (src-tauri/sidecar/local-api-server", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/test-endpoint?secret=value&key=data (src-tauri/sidecar/local-api-server.test.mjs:1338)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1338` calls `GET http://127.0.0.1:${port}/api/test-endpoint?secret=value&key=data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/test-endpoint`\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-25750ded4d4fc3fe", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-traffic-log (src-tauri/sidecar/local-api-server.test.mjs:1341)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-traffic-log (src-tauri/sidecar/local-api-server.test.mjs:1341)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1341` calls `GET http://127.0.0.1:${port}/api/local-traffic-log` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/local-traffic-log`\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-f31f99c4d5d99d58", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/service-status (src-tauri/sidecar/local-api-server.test.mjs:1374)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/service-status (src-tauri/sidecar/local-api-server.test.mjs:1374)"}, "fullDescription": {"text": "`src-tauri/sidecar/local-api-server.test.mjs:1374` calls `GET http://127.0.0.1:${port}/api/service-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:/127.0.0.1:/<p>/api/service-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-4e34aa8e9603278c", "name": "Dangling fetch: GET https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfMZg.ttf (blog-", "shortDescription": {"text": "Dangling fetch: GET https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfMZg.ttf (blog-site/scripts/generate-og-images.mjs:12)"}, "fullDescription": {"text": "`blog-site/scripts/generate-og-images.mjs:12` calls `GET https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfMZg.ttf` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/fonts.gstatic.com/s/inter/v20/ucco3fwrk3iltehus_nvmrmxcp50sjiw2bokodukmmevulyfmzg.ttf`\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-7e5b61545340b0d2", "name": "Dangling fetch: GET https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuFuYMZg.ttf (blog-", "shortDescription": {"text": "Dangling fetch: GET https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuFuYMZg.ttf (blog-site/scripts/generate-og-images.mjs:13)"}, "fullDescription": {"text": "`blog-site/scripts/generate-og-images.mjs:13` calls `GET https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuFuYMZg.ttf` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/fonts.gstatic.com/s/inter/v20/ucco3fwrk3iltehus_nvmrmxcp50sjiw2bokodukmmevufuymzg.ttf`\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-7ba08319e1929618", "name": "Dangling fetch: GET /api/intelligence/v1/get-country-intel-brief?${params.toString()} (src/app/country-intel.ts:399)", "shortDescription": {"text": "Dangling fetch: GET /api/intelligence/v1/get-country-intel-brief?${params.toString()} (src/app/country-intel.ts:399)"}, "fullDescription": {"text": "`src/app/country-intel.ts:399` calls `GET /api/intelligence/v1/get-country-intel-brief?${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: `/intelligence/v1/get-country-intel-brief`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7fb3144e18d5ca0", "name": "Dangling fetch: GET https://api.worldmonitor.app/api/version (src/app/desktop-updater.ts:71)", "shortDescription": {"text": "Dangling fetch: GET https://api.worldmonitor.app/api/version (src/app/desktop-updater.ts:71)"}, "fullDescription": {"text": "`src/app/desktop-updater.ts:71` calls `GET https://api.worldmonitor.app/api/version` 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.worldmonitor.app/api/version`\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-a42951e6ad259538", "name": "Dangling fetch: GET /api/news/v1/list-feed-digest?variant=${SITE_VARIANT}&lang=${getCurrentLanguage()} (src/app/data-loa", "shortDescription": {"text": "Dangling fetch: GET /api/news/v1/list-feed-digest?variant=${SITE_VARIANT}&lang=${getCurrentLanguage()} (src/app/data-loader.ts:272)"}, "fullDescription": {"text": "`src/app/data-loader.ts:272` calls `GET /api/news/v1/list-feed-digest?variant=${SITE_VARIANT}&lang=${getCurrentLanguage()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/news/v1/list-feed-digest`\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-f94dd8d77c2e50f8", "name": "Dangling fetch: GET /api/geo (src/utils/user-location.ts:86)", "shortDescription": {"text": "Dangling fetch: GET /api/geo (src/utils/user-location.ts:86)"}, "fullDescription": {"text": "`src/utils/user-location.ts:86` calls `GET /api/geo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/geo`\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-6515ef9d43632233", "name": "Dangling fetch: GET /api/reverse-geocode?lat=${lat}&lon=${lon} (src/utils/reverse-geocode.ts:25)", "shortDescription": {"text": "Dangling fetch: GET /api/reverse-geocode?lat=${lat}&lon=${lon} (src/utils/reverse-geocode.ts:25)"}, "fullDescription": {"text": "`src/utils/reverse-geocode.ts:25` calls `GET /api/reverse-geocode?lat=${lat}&lon=${lon}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reverse-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-3a288c9fbd102dda", "name": "Dangling fetch: GET /api/bootstrap?keys=weatherAlerts (src/services/weather.ts:54)", "shortDescription": {"text": "Dangling fetch: GET /api/bootstrap?keys=weatherAlerts (src/services/weather.ts:54)"}, "fullDescription": {"text": "`src/services/weather.ts:54` calls `GET /api/bootstrap?keys=weatherAlerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bootstrap`\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-7cade58a10677709", "name": "Dangling fetch: GET /api/bootstrap?tier=${tier} (src/services/bootstrap.ts:19)", "shortDescription": {"text": "Dangling fetch: GET /api/bootstrap?tier=${tier} (src/services/bootstrap.ts:19)"}, "fullDescription": {"text": "`src/services/bootstrap.ts:19` calls `GET /api/bootstrap?tier=${tier}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bootstrap`\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-78e604e89598e661", "name": "Dangling fetch: GET /api/bootstrap?keys=spending (src/services/usa-spending.ts:46)", "shortDescription": {"text": "Dangling fetch: GET /api/bootstrap?keys=spending (src/services/usa-spending.ts:46)"}, "fullDescription": {"text": "`src/services/usa-spending.ts:46` calls `GET /api/bootstrap?keys=spending` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bootstrap`\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-4827c62f32917199", "name": "Dangling fetch: GET /api/military-flights (src/services/military-flights.ts:72)", "shortDescription": {"text": "Dangling fetch: GET /api/military-flights (src/services/military-flights.ts:72)"}, "fullDescription": {"text": "`src/services/military-flights.ts:72` calls `GET /api/military-flights` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/military-flights`\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-3bf766398f5e3420", "name": "Dangling fetch: GET /api/bootstrap?keys=progressData (src/services/progress-data.ts:146)", "shortDescription": {"text": "Dangling fetch: GET /api/bootstrap?keys=progressData (src/services/progress-data.ts:146)"}, "fullDescription": {"text": "`src/services/progress-data.ts:146` calls `GET /api/bootstrap?keys=progressData` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bootstrap`\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-bfe235e111b1f713", "name": "Dangling fetch: GET /api/bootstrap?keys=renewableEnergy (src/services/renewable-energy-data.ts:79)", "shortDescription": {"text": "Dangling fetch: GET /api/bootstrap?keys=renewableEnergy (src/services/renewable-energy-data.ts:79)"}, "fullDescription": {"text": "`src/services/renewable-energy-data.ts:79` calls `GET /api/bootstrap?keys=renewableEnergy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bootstrap`\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-d9ea973f4ddac9a8", "name": "Dangling fetch: GET /api/conflict/v1/list-iran-events?_v=${cacheBust} (src/services/conflict/index.ts:463)", "shortDescription": {"text": "Dangling fetch: GET /api/conflict/v1/list-iran-events?_v=${cacheBust} (src/services/conflict/index.ts:463)"}, "fullDescription": {"text": "`src/services/conflict/index.ts:463` calls `GET /api/conflict/v1/list-iran-events?_v=${cacheBust}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conflict/v1/list-iran-events`\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-90de60f0456c50c2", "name": "Dangling fetch: GET /api/bootstrap?keys=techReadiness (src/services/economic/index.ts:500)", "shortDescription": {"text": "Dangling fetch: GET /api/bootstrap?keys=techReadiness (src/services/economic/index.ts:500)"}, "fullDescription": {"text": "`src/services/economic/index.ts:500` calls `GET /api/bootstrap?keys=techReadiness` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bootstrap`\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-cda2f32973b51244", "name": "Dangling fetch: GET https://restcountries.com/v3.1/alpha/${code} (server/worldmonitor/intelligence/v1/get-country-facts.", "shortDescription": {"text": "Dangling fetch: GET https://restcountries.com/v3.1/alpha/${code} (server/worldmonitor/intelligence/v1/get-country-facts.ts:90)"}, "fullDescription": {"text": "`server/worldmonitor/intelligence/v1/get-country-facts.ts:90` calls `GET https://restcountries.com/v3.1/alpha/${code}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/restcountries.com/v3.1/alpha/<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-a9756a08dd460fdd", "name": "Dangling fetch: GET https://en.wikipedia.org/api/rest_v1/page/summary/${encoded} (server/worldmonitor/intelligence/v1/ge", "shortDescription": {"text": "Dangling fetch: GET https://en.wikipedia.org/api/rest_v1/page/summary/${encoded} (server/worldmonitor/intelligence/v1/get-country-facts.ts:168)"}, "fullDescription": {"text": "`server/worldmonitor/intelligence/v1/get-country-facts.ts:168` calls `GET https://en.wikipedia.org/api/rest_v1/page/summary/${encoded}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/en.wikipedia.org/api/rest_v1/page/summary/<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-cfcc0f2315e3b6be", "name": "Dangling fetch: GET https://ucdpapi.pcr.uu.se/api/gedevents/${version}?pagesize=${UCDP_PAGE_SIZE}&page=${page} (server/w", "shortDescription": {"text": "Dangling fetch: GET https://ucdpapi.pcr.uu.se/api/gedevents/${version}?pagesize=${UCDP_PAGE_SIZE}&page=${page} (server/worldmonitor/conflict/v1/list-ucdp-events.ts:37)"}, "fullDescription": {"text": "`server/worldmonitor/conflict/v1/list-ucdp-events.ts:37` calls `GET https://ucdpapi.pcr.uu.se/api/gedevents/${version}?pagesize=${UCDP_PAGE_SIZE}&page=${page}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/ucdpapi.pcr.uu.se/api/gedevents/<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-d38498490310fefc", "name": "Dangling fetch: GET https://msi.nga.mil/api/publications/broadcast-warn?output=json&status=A (server/worldmonitor/infras", "shortDescription": {"text": "Dangling fetch: GET https://msi.nga.mil/api/publications/broadcast-warn?output=json&status=A (server/worldmonitor/infrastructure/v1/get-cable-health.ts:171)"}, "fullDescription": {"text": "`server/worldmonitor/infrastructure/v1/get-cable-health.ts:171` calls `GET https://msi.nga.mil/api/publications/broadcast-warn?output=json&status=A` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/msi.nga.mil/api/publications/broadcast-warn`\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-c418d0b786ad3be5", "name": "Dangling fetch: GET https://api.eia.gov${config.apiPath}?${params} (server/worldmonitor/economic/v1/get-energy-prices.ts", "shortDescription": {"text": "Dangling fetch: GET https://api.eia.gov${config.apiPath}?${params} (server/worldmonitor/economic/v1/get-energy-prices.ts:58)"}, "fullDescription": {"text": "`server/worldmonitor/economic/v1/get-energy-prices.ts:58` calls `GET https://api.eia.gov${config.apiPath}?${params}` 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.eia.gov/<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-8077a01e4597e70c", "name": "Dangling fetch: POST https://customer-api.wingbits.com/v1/flights (server/worldmonitor/military/v1/get-theater-posture.t", "shortDescription": {"text": "Dangling fetch: POST https://customer-api.wingbits.com/v1/flights (server/worldmonitor/military/v1/get-theater-posture.ts:130)"}, "fullDescription": {"text": "`server/worldmonitor/military/v1/get-theater-posture.ts:130` calls `POST https://customer-api.wingbits.com/v1/flights` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/customer-api.wingbits.com/v1/flights`\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-07efa446c48d5076", "name": "Dangling fetch: GET https://customer-api.wingbits.com/v1/flights/details/${icao24} (server/worldmonitor/military/v1/get-", "shortDescription": {"text": "Dangling fetch: GET https://customer-api.wingbits.com/v1/flights/details/${icao24} (server/worldmonitor/military/v1/get-aircraft-details-batch.ts:63)"}, "fullDescription": {"text": "`server/worldmonitor/military/v1/get-aircraft-details-batch.ts:63` calls `GET https://customer-api.wingbits.com/v1/flights/details/${icao24}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/customer-api.wingbits.com/v1/flights/details/<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-f4f2ce04893b07a1", "name": "Dangling fetch: GET https://customer-api.wingbits.com/v1/flights/details/${icao24} (server/worldmonitor/military/v1/get-", "shortDescription": {"text": "Dangling fetch: GET https://customer-api.wingbits.com/v1/flights/details/${icao24} (server/worldmonitor/military/v1/get-aircraft-details.ts:33)"}, "fullDescription": {"text": "`server/worldmonitor/military/v1/get-aircraft-details.ts:33` calls `GET https://customer-api.wingbits.com/v1/flights/details/${icao24}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/customer-api.wingbits.com/v1/flights/details/<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-7803dcb1b98d3ae7", "name": "Dangling fetch: GET https://api.unhcr.org/population/v1/population/?year=${year}&limit=${limit}&page=${page}&coo_all=tru", "shortDescription": {"text": "Dangling fetch: GET https://api.unhcr.org/population/v1/population/?year=${year}&limit=${limit}&page=${page}&coo_all=true&coa_all=true (server/worldmonitor/displacement/v1/get-displacement-summary.ts:59)"}, "fullDescription": {"text": "`server/worldmonitor/displacement/v1/get-displacement-summary.ts:59` calls `GET https://api.unhcr.org/population/v1/population/?year=${year}&limit=${limit}&page=${page}&coo_all=true&coa_all=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.unhcr.org/population/v1/population`\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-4df65f8e134861d5", "name": "Dangling fetch: GET https://hacker-news.firebaseio.com/v0/item/${id}.json (server/worldmonitor/research/v1/list-hackerne", "shortDescription": {"text": "Dangling fetch: GET https://hacker-news.firebaseio.com/v0/item/${id}.json (server/worldmonitor/research/v1/list-hackernews-items.ts:53)"}, "fullDescription": {"text": "`server/worldmonitor/research/v1/list-hackernews-items.ts:53` calls `GET https://hacker-news.firebaseio.com/v0/item/${id}.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:/hacker-news.firebaseio.com/v0/item/<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-1dca394256ce81cd", "name": "Dangling fetch: POST https://api.tavily.com/search (server/worldmonitor/market/v1/stock-news-search.ts:168)", "shortDescription": {"text": "Dangling fetch: POST https://api.tavily.com/search (server/worldmonitor/market/v1/stock-news-search.ts:168)"}, "fullDescription": {"text": "`server/worldmonitor/market/v1/stock-news-search.ts:168` calls `POST https://api.tavily.com/search` 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.tavily.com/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-475c8ae6a17f4137", "name": "Dangling fetch: GET https://api.coinpaprika.com/v1/tickers?quotes=USD (server/worldmonitor/market/v1/_shared.ts:303)", "shortDescription": {"text": "Dangling fetch: GET https://api.coinpaprika.com/v1/tickers?quotes=USD (server/worldmonitor/market/v1/_shared.ts:303)"}, "fullDescription": {"text": "`server/worldmonitor/market/v1/_shared.ts:303` calls `GET https://api.coinpaprika.com/v1/tickers?quotes=USD` 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.coinpaprika.com/v1/tickers`\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-b9b590d1fdb76382", "name": "Dangling fetch: GET https://ipinfo.io/${encodeURIComponent(ip)}/json (server/worldmonitor/cyber/v1/_shared.ts:282)", "shortDescription": {"text": "Dangling fetch: GET https://ipinfo.io/${encodeURIComponent(ip)}/json (server/worldmonitor/cyber/v1/_shared.ts:282)"}, "fullDescription": {"text": "`server/worldmonitor/cyber/v1/_shared.ts:282` calls `GET https://ipinfo.io/${encodeURIComponent(ip)}/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:/ipinfo.io/<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-cc5a8760ccb6dbc2", "name": "Dangling fetch: GET https://freeipapi.com/api/json/${encodeURIComponent(ip)} (server/worldmonitor/cyber/v1/_shared.ts:30", "shortDescription": {"text": "Dangling fetch: GET https://freeipapi.com/api/json/${encodeURIComponent(ip)} (server/worldmonitor/cyber/v1/_shared.ts:302)"}, "fullDescription": {"text": "`server/worldmonitor/cyber/v1/_shared.ts:302` calls `GET https://freeipapi.com/api/json/${encodeURIComponent(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:/freeipapi.com/api/json/<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-f2cfd913eaeffc17", "name": "Dangling fetch: GET /api/fred-data?series_id=CPIAUCSL (e2e/runtime-fetch.spec.ts:124)", "shortDescription": {"text": "Dangling fetch: GET /api/fred-data?series_id=CPIAUCSL (e2e/runtime-fetch.spec.ts:124)"}, "fullDescription": {"text": "`e2e/runtime-fetch.spec.ts:124` calls `GET /api/fred-data?series_id=CPIAUCSL` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fred-data`\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-ec8bc5e42d697574", "name": "Dangling fetch: GET /api/stablecoin-markets (e2e/runtime-fetch.spec.ts:127)", "shortDescription": {"text": "Dangling fetch: GET /api/stablecoin-markets (e2e/runtime-fetch.spec.ts:127)"}, "fullDescription": {"text": "`e2e/runtime-fetch.spec.ts:127` calls `GET /api/stablecoin-markets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stablecoin-markets`\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-778674b52b5b862b", "name": "Dangling fetch: POST /api/local-env-update (e2e/runtime-fetch.spec.ts:208)", "shortDescription": {"text": "Dangling fetch: POST /api/local-env-update (e2e/runtime-fetch.spec.ts:208)"}, "fullDescription": {"text": "`e2e/runtime-fetch.spec.ts:208` calls `POST /api/local-env-update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/local-env-update`\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-f1430eeb4542f96c", "name": "Dangling fetch: POST /api/local-validate-secret (e2e/runtime-fetch.spec.ts:216)", "shortDescription": {"text": "Dangling fetch: POST /api/local-validate-secret (e2e/runtime-fetch.spec.ts:216)"}, "fullDescription": {"text": "`e2e/runtime-fetch.spec.ts:216` calls `POST /api/local-validate-secret` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/local-validate-secret`\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-0be1ebcce87d65c8", "name": "Dangling fetch: GET /api/fred-data?series_id=CPIAUCSL (e2e/runtime-fetch.spec.ts:771)", "shortDescription": {"text": "Dangling fetch: GET /api/fred-data?series_id=CPIAUCSL (e2e/runtime-fetch.spec.ts:771)"}, "fullDescription": {"text": "`e2e/runtime-fetch.spec.ts:771` calls `GET /api/fred-data?series_id=CPIAUCSL` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fred-data`\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-8015295bdbff8485", "name": "Dangling fetch: GET /api/market/v1/test (e2e/runtime-fetch.spec.ts:851)", "shortDescription": {"text": "Dangling fetch: GET /api/market/v1/test (e2e/runtime-fetch.spec.ts:851)"}, "fullDescription": {"text": "`e2e/runtime-fetch.spec.ts:851` calls `GET /api/market/v1/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market/v1/test`\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-bfd448d80b4416d3", "name": "Unused endpoint: GET /api/aviation/v1/list-airport-delays", "shortDescription": {"text": "Unused endpoint: GET /api/aviation/v1/list-airport-delays"}, "fullDescription": {"text": "`src/generated/client/worldmonitor/aviation/v1/service_client.ts` declares `GET /api/aviation/v1/list-airport-delays` 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}}, {"id": "scanner-a1cb2be758005a3b", "name": "Unused endpoint: GET /api/aviation/v1/get-airport-ops-summary", "shortDescription": {"text": "Unused endpoint: GET /api/aviation/v1/get-airport-ops-summary"}, "fullDescription": {"text": "`src/generated/client/worldmonitor/aviation/v1/service_client.ts` declares `GET /api/aviation/v1/get-airport-ops-summary` 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}}, {"id": "scanner-9e6b715beb6f49eb", "name": "Unused endpoint: GET /api/aviation/v1/list-airport-flights", "shortDescription": {"text": "Unused endpoint: GET /api/aviation/v1/list-airport-flights"}, "fullDescription": {"text": "`src/generated/client/worldmonitor/aviation/v1/service_client.ts` declares `GET /api/aviation/v1/list-airport-flights` 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}}, {"id": "scanner-dc37dd851a7da549", "name": "Unused endpoint: GET /api/aviation/v1/get-carrier-ops", "shortDescription": {"text": "Unused endpoint: GET /api/aviation/v1/get-carrier-ops"}, "fullDescription": {"text": "`src/generated/client/worldmonitor/aviation/v1/service_client.ts` declares `GET /api/aviation/v1/get-carrier-ops` 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}}, {"id": "scanner-04aae2e542a06c4e", "name": "Unused endpoint: GET /api/aviation/v1/get-flight-status", "shortDescription": {"text": "Unused endpoint: GET /api/aviation/v1/get-flight-status"}, "fullDescription": {"text": "`src/generated/client/worldmonitor/aviation/v1/service_client.ts` declares `GET /api/aviation/v1/get-flight-status` 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}}, {"id": "scanner-3b23a29112753535", "name": "Unused endpoint: GET /api/aviation/v1/track-aircraft", "shortDescription": {"text": "Unused endpoint: GET /api/aviation/v1/track-aircraft"}, "fullDescription": {"text": "`src/generated/client/worldmonitor/aviation/v1/service_client.ts` declares `GET /api/aviation/v1/track-aircraft` 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}}, {"id": "scanner-4b1c6c6e669c804a", "name": "Unused endpoint: GET /api/aviation/v1/search-flight-prices", "shortDescription": {"text": "Unused endpoint: GET /api/aviation/v1/search-flight-prices"}, "fullDescription": {"text": "`src/generated/client/worldmonitor/aviation/v1/service_client.ts` declares `GET /api/aviation/v1/search-flight-prices` 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}}, {"id": "scanner-7eb6d897af611912", "name": "Unused endpoint: GET /api/aviation/v1/list-aviation-news", "shortDescription": {"text": "Unused endpoint: GET /api/aviation/v1/list-aviation-news"}, "fullDescription": {"text": "`src/generated/client/worldmonitor/aviation/v1/service_client.ts` declares `GET /api/aviation/v1/list-aviation-news` 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/25316"}, "properties": {"repository": "deepsearchaiapp/worldmonitor", "repoUrl": "https://github.com/deepsearchaiapp/worldmonitor", "branch": "main"}, "results": [{"ruleId": "scanner-8399cb924e7d03a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 vite.config.ts:851"}, "properties": {"repobilityId": "ab305e17677e589d", "scanner": "scanner-primary", "fingerprint": "8399cb924e7d03a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ad7183ce527fcfc0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/bootstrap.js:264"}, "properties": {"repobilityId": "58e7b37034558515", "scanner": "scanner-primary", "fingerprint": "ad7183ce527fcfc0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c6faaa54f3a6130", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/register-interest.js:187"}, "properties": {"repobilityId": "e38c8f2ba9e19e7c", "scanner": "scanner-primary", "fingerprint": "6c6faaa54f3a6130", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5408108260504596", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/_lkg.js:125"}, "properties": {"repobilityId": "5580d944c20c3411", "scanner": "scanner-primary", "fingerprint": "5408108260504596", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d02cdd34a1896f09", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/cache-purge.js:180"}, "properties": {"repobilityId": "863e47af2d264b12", "scanner": "scanner-primary", "fingerprint": "d02cdd34a1896f09", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-afe4b7a48503eedf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/seismology/v1/refresh.ts:63"}, "properties": {"repobilityId": "31381a11cc7c9e03", "scanner": "scanner-primary", "fingerprint": "afe4b7a48503eedf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65b31b7bcdd9738b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/live-news/v6/list-us-headlines.ts:60"}, "properties": {"repobilityId": "d25c0bef0c83ad6c", "scanner": "scanner-primary", "fingerprint": "65b31b7bcdd9738b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b7360b81e1ece53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/live-news/v6/refresh-rss-embed.ts:59"}, "properties": {"repobilityId": "fb37ddabbfd52263", "scanner": "scanner-primary", "fingerprint": "1b7360b81e1ece53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a9d62034f82711d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/wildfire/v1/refresh.ts:65"}, "properties": {"repobilityId": "4f56be6b6d84604e", "scanner": "scanner-primary", "fingerprint": "a9d62034f82711d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be59d33bcf1c43d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/world-brief/v1/refresh-regions.ts:51"}, "properties": {"repobilityId": "261271ddae8b38a7", "scanner": "scanner-primary", "fingerprint": "be59d33bcf1c43d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f3971c554894110", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/world-brief/v1/refresh.ts:42"}, "properties": {"repobilityId": "3cc9a13ff6c5f212", "scanner": "scanner-primary", "fingerprint": "1f3971c554894110", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-951179bf48f3ed5b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/ops/_probe-core.js:56"}, "properties": {"repobilityId": "57d971ded95c6c73", "scanner": "scanner-primary", "fingerprint": "951179bf48f3ed5b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c4172e684f0b9d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/intel-news/v1/enrich.ts:1204"}, "properties": {"repobilityId": "ed93a1ee0adf6fbb", "scanner": "scanner-primary", "fingerprint": "9c4172e684f0b9d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ccd4fbb54217f8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/intel-news/v1/refresh.ts:1193"}, "properties": {"repobilityId": "e2fb4dd81d4b8915", "scanner": "scanner-primary", "fingerprint": "2ccd4fbb54217f8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7f979439c37bcee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/intel-news/v6/list.ts:61"}, "properties": {"repobilityId": "35961f14d947a115", "scanner": "scanner-primary", "fingerprint": "a7f979439c37bcee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-09aedbdd2511fd59", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/conflict-archive/v5/list.ts:58"}, "properties": {"repobilityId": "6f55283aa109718c", "scanner": "scanner-primary", "fingerprint": "09aedbdd2511fd59", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78553769cf7441aa", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/settings-window.ts:75"}, "properties": {"repobilityId": "f000a109f9c3db26", "scanner": "scanner-primary", "fingerprint": "78553769cf7441aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-99597fe5722a79b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/main.ts:368"}, "properties": {"repobilityId": "981eedf4f52fff93", "scanner": "scanner-primary", "fingerprint": "99597fe5722a79b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-617941ae923427e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/App.ts:87"}, "properties": {"repobilityId": "5d1cacccbe78fa47", "scanner": "scanner-primary", "fingerprint": "617941ae923427e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39c7998f769d8d77", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/ml.worker.ts:138"}, "properties": {"repobilityId": "d43f7a023d598df2", "scanner": "scanner-primary", "fingerprint": "39c7998f769d8d77", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4139dd4c48e5beeb", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/panel-layout.ts:417"}, "properties": {"repobilityId": "447877b91e4d2189", "scanner": "scanner-primary", "fingerprint": "4139dd4c48e5beeb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-bba9ca0b51a55284", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/panel-layout.ts:421"}, "properties": {"repobilityId": "7a3cffb7e2bfdd1c", "scanner": "scanner-primary", "fingerprint": "bba9ca0b51a55284", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-244e27105d45ae00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/event-handlers.ts:528"}, "properties": {"repobilityId": "62c04725467b5012", "scanner": "scanner-primary", "fingerprint": "244e27105d45ae00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e024cde460944e8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/search-manager.ts:526"}, "properties": {"repobilityId": "294b28c6c70389bd", "scanner": "scanner-primary", "fingerprint": "e024cde460944e8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76ce8e81f6e4a05c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/data-loader.ts:516"}, "properties": {"repobilityId": "044a44acbddd4a8d", "scanner": "scanner-primary", "fingerprint": "76ce8e81f6e4a05c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3476e5687b04082d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/circuit-breaker.ts:200"}, "properties": {"repobilityId": "36ead65f37d4f432", "scanner": "scanner-primary", "fingerprint": "3476e5687b04082d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b9e20bf93dd70cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/StrategicRiskPanel.ts:137"}, "properties": {"repobilityId": "f8f383f701f6e9d9", "scanner": "scanner-primary", "fingerprint": "1b9e20bf93dd70cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1335c5a96f548b7e", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/AviationCommandBar.ts:159"}, "properties": {"repobilityId": "c52509056c8a6a8d", "scanner": "scanner-primary", "fingerprint": "1335c5a96f548b7e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-4282951f46a35d0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/StrategicPosturePanel.ts:48"}, "properties": {"repobilityId": "40657f02bd37c794", "scanner": "scanner-primary", "fingerprint": "4282951f46a35d0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8afbe7886bb597dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/Map.ts:1588"}, "properties": {"repobilityId": "2cedeff553eeb135", "scanner": "scanner-primary", "fingerprint": "8afbe7886bb597dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-494fadcc5c5b35b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/CIIPanel.ts:123"}, "properties": {"repobilityId": "811d934006ca2846", "scanner": "scanner-primary", "fingerprint": "494fadcc5c5b35b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-68afd96bb04250b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/MapContainer.ts:171"}, "properties": {"repobilityId": "2024b59a4426c095", "scanner": "scanner-primary", "fingerprint": "68afd96bb04250b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-80358c8f442201c7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/services/satellites.ts:1"}, "properties": {"repobilityId": "d658526cef187284", "scanner": "scanner-primary", "fingerprint": "80358c8f442201c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-234d8cfed07f34c4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/runtime.ts:516"}, "properties": {"repobilityId": "7edef30913a79d00", "scanner": "scanner-primary", "fingerprint": "234d8cfed07f34c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3b7e0d7020ee9ba4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/config/feeds.ts:1332"}, "properties": {"repobilityId": "6ef52993bb1cc5bd", "scanner": "scanner-primary", "fingerprint": "3b7e0d7020ee9ba4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d074ceb5b1d8d27", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-sports/v1/_normalize.ts:243"}, "properties": {"repobilityId": "8f335409d7bb19a2", "scanner": "scanner-primary", "fingerprint": "3d074ceb5b1d8d27", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cffb801722da706f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-sports/v1/list-us-events.ts:55"}, "properties": {"repobilityId": "dab7fc1fe5c6b595", "scanner": "scanner-primary", "fingerprint": "cffb801722da706f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-993f73b4d65ff096", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/worldmonitor/military/v1/list-military-flights.ts:369"}, "properties": {"repobilityId": "dec87d5975c84641", "scanner": "scanner-primary", "fingerprint": "993f73b4d65ff096", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9d2f1f2ee1d1c98", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/worldmonitor/market/v1/_shared.ts:148"}, "properties": {"repobilityId": "7d2d3a36d8857986", "scanner": "scanner-primary", "fingerprint": "d9d2f1f2ee1d1c98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b32eaefd1da64f5d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/worldmonitor/aviation/v1/list-airport-flights.ts:158"}, "properties": {"repobilityId": "0835947be513da75", "scanner": "scanner-primary", "fingerprint": "b32eaefd1da64f5d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6594655f3fa6e2b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/worldmonitor/news/v1/list-feed-digest.ts:284"}, "properties": {"repobilityId": "2e8e34c168e375c3", "scanner": "scanner-primary", "fingerprint": "6594655f3fa6e2b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6477691f75be54e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v3/refresh.ts:246"}, "properties": {"repobilityId": "fb3518330a5dd2e9", "scanner": "scanner-primary", "fingerprint": "6477691f75be54e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb3270c69dd07a1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_normalize.ts:415"}, "properties": {"repobilityId": "26f22b668fc9af33", "scanner": "scanner-primary", "fingerprint": "bb3270c69dd07a1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0d9f8ca1c3b2b5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/list-us-headlines.ts:69"}, "properties": {"repobilityId": "cd8148463d81cb26", "scanner": "scanner-primary", "fingerprint": "d0d9f8ca1c3b2b5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-75c97c55d5405d56", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_enrich-combined.ts:537"}, "properties": {"repobilityId": "be129aafecc40ea2", "scanner": "scanner-primary", "fingerprint": "75c97c55d5405d56", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25ad2800dd136798", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_enrich.ts:249"}, "properties": {"repobilityId": "5c47010ae00cdd3f", "scanner": "scanner-primary", "fingerprint": "25ad2800dd136798", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4047c06cfb7baafd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_dedup-embed.ts:217"}, "properties": {"repobilityId": "b8cba05a990b9d42", "scanner": "scanner-primary", "fingerprint": "4047c06cfb7baafd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d5dd0a66b610047", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_dedup.ts:414"}, "properties": {"repobilityId": "8dbdf1259894815a", "scanner": "scanner-primary", "fingerprint": "0d5dd0a66b610047", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f9897422a5bf557", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v1/_paraphrase.ts:85"}, "properties": {"repobilityId": "7c14ec642082058f", "scanner": "scanner-primary", "fingerprint": "1f9897422a5bf557", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a7d7ad599c2ee22", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v6/_cluster.ts:669"}, "properties": {"repobilityId": "dc7ea35bb869aeb7", "scanner": "scanner-primary", "fingerprint": "9a7d7ad599c2ee22", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1baf6328a0e0c97", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v6/_article-fetcher.ts:273"}, "properties": {"repobilityId": "15770099af664f23", "scanner": "scanner-primary", "fingerprint": "e1baf6328a0e0c97", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f69a2ca378f6fe4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v6/refresh.ts:277"}, "properties": {"repobilityId": "e4b078d6def6a852", "scanner": "scanner-primary", "fingerprint": "9f69a2ca378f6fe4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3887bf5c6f9a554c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v4/refresh.ts:220"}, "properties": {"repobilityId": "cda45c886aabdf3c", "scanner": "scanner-primary", "fingerprint": "3887bf5c6f9a554c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-837c35e8c976b15e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v2/list-us-headlines.ts:77"}, "properties": {"repobilityId": "8946b9fbb923a477", "scanner": "scanner-primary", "fingerprint": "837c35e8c976b15e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4d90a0499556b4d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/live-news/v5/refresh.ts:218"}, "properties": {"repobilityId": "b56aafa26fb2a7bc", "scanner": "scanner-primary", "fingerprint": "d4d90a0499556b4d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-40ed46e753368ae0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/world-brief/v1/_dispatch.ts:62"}, "properties": {"repobilityId": "86118be1472d41a7", "scanner": "scanner-primary", "fingerprint": "40ed46e753368ae0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d7c4c616343bba16", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/world-brief/v1/_generate.ts:699"}, "properties": {"repobilityId": "16a1a4632fd22a06", "scanner": "scanner-primary", "fingerprint": "d7c4c616343bba16", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92f16c4e0cc4b8ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/_shared/worldnews-client.ts:117"}, "properties": {"repobilityId": "1e93cd5a3d6749f0", "scanner": "scanner-primary", "fingerprint": "92f16c4e0cc4b8ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c69c883bd1ea50f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/_shared/webz-client.ts:247"}, "properties": {"repobilityId": "a39c5df775157d2c", "scanner": "scanner-primary", "fingerprint": "c69c883bd1ea50f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27c163f74963fd98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/_shared/embeddings.ts:109"}, "properties": {"repobilityId": "112c5eb346d4670a", "scanner": "scanner-primary", "fingerprint": "27c163f74963fd98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d05f147dce0313d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/_shared/upstream.ts:130"}, "properties": {"repobilityId": "0a454d19950c22c9", "scanner": "scanner-primary", "fingerprint": "2d05f147dce0313d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee54f7b33a90f544", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/intel-news/v1/list-headlines.ts:182"}, "properties": {"repobilityId": "7d4519cf568ddad5", "scanner": "scanner-primary", "fingerprint": "ee54f7b33a90f544", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-112c1c8c8f1d76a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/intel-news/v1/_enrich-conflict.ts:207"}, "properties": {"repobilityId": "17f117342188c287", "scanner": "scanner-primary", "fingerprint": "112c1c8c8f1d76a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-edd1660b199aaa57", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/intel-news/v6/list.ts:167"}, "properties": {"repobilityId": "d7ecd845792c8357", "scanner": "scanner-primary", "fingerprint": "edd1660b199aaa57", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-18528c6fccc5b6ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v3/refresh.ts:147"}, "properties": {"repobilityId": "3f9f66a9078eb5ca", "scanner": "scanner-primary", "fingerprint": "18528c6fccc5b6ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c72dfc55ae99ad61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v3/list.ts:67"}, "properties": {"repobilityId": "efde2e5d36bd009b", "scanner": "scanner-primary", "fingerprint": "c72dfc55ae99ad61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5b395db6a6e9f72a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v1/list.ts:86"}, "properties": {"repobilityId": "07b98babd3edd4cc", "scanner": "scanner-primary", "fingerprint": "5b395db6a6e9f72a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a6c6d71fafb55240", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v4/refresh.ts:168"}, "properties": {"repobilityId": "b13efd691be90484", "scanner": "scanner-primary", "fingerprint": "a6c6d71fafb55240", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22632f0a08eedf10", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v4/list.ts:62"}, "properties": {"repobilityId": "4a4a78f3bc03998d", "scanner": "scanner-primary", "fingerprint": "22632f0a08eedf10", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5873ff0b81a5276a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v2/refresh.ts:181"}, "properties": {"repobilityId": "81987b3371669fbe", "scanner": "scanner-primary", "fingerprint": "5873ff0b81a5276a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b05f0eaa7677acd9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v2/list.ts:72"}, "properties": {"repobilityId": "aea3fe877160d542", "scanner": "scanner-primary", "fingerprint": "b05f0eaa7677acd9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa59e0be2655bb65", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/conflict-archive/v5/list.ts:144"}, "properties": {"repobilityId": "c573b0d7891ef365", "scanner": "scanner-primary", "fingerprint": "fa59e0be2655bb65", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-18d2eb69e0385d9a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/mapbox-gl-rtl-text.min.js:4"}, "properties": {"repobilityId": "dd8a0123ad7dafa6", "scanner": "scanner-primary", "fingerprint": "18d2eb69e0385d9a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9984490f643b6e13", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 public/pro/assets/index-CIvSGtTn.js:49"}, "properties": {"repobilityId": "4938d2f54f3553bd", "scanner": "scanner-primary", "fingerprint": "9984490f643b6e13", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-47636e33caef255d", "level": "warning", "message": {"text": "Dockerfile runs as root: docker/Dockerfile"}, "properties": {"repobilityId": "8a345ba4198453bd", "scanner": "scanner-primary", "fingerprint": "47636e33caef255d", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-28b46c86f5a3f7e8", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "5a732a86c8b52af9", "scanner": "scanner-primary", "fingerprint": "28b46c86f5a3f7e8", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker/Dockerfile"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-8db7780054b6d524", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "properties": {"repobilityId": "6fc5d52b84f894b4", "scanner": "scanner-primary", "fingerprint": "8db7780054b6d524", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker/Dockerfile"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-fba21ca73aa87888", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard-news.html:1242"}, "properties": {"repobilityId": "1c030f4046c62b8a", "scanner": "scanner-primary", "fingerprint": "fba21ca73aa87888", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard-news.html"}, "region": {"startLine": 1242}}}]}, {"ruleId": "scanner-c4ed599b1dd971e1", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in vite.config.ts:499"}, "properties": {"repobilityId": "aa73adf493d38401", "scanner": "scanner-primary", "fingerprint": "c4ed599b1dd971e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vite.config.ts"}, "region": {"startLine": 499}}}]}, {"ruleId": "scanner-417d9384b9c3bd5a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/version.js:36"}, "properties": {"repobilityId": "473848a403378cc3", "scanner": "scanner-primary", "fingerprint": "417d9384b9c3bd5a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/version.js"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-a6b0d10054500e0f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/health.js:170"}, "properties": {"repobilityId": "0f32033d51d457e0", "scanner": "scanner-primary", "fingerprint": "a6b0d10054500e0f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/health.js"}, "region": {"startLine": 170}}}]}, {"ruleId": "scanner-334b7552bee89df4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/geo.js:11"}, "properties": {"repobilityId": "ade239da4a6a7384", "scanner": "scanner-primary", "fingerprint": "334b7552bee89df4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/geo.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-acc73c0a4810fda7", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in scripts/export-geo-json.mjs:43"}, "properties": {"repobilityId": "e9f16116c34a9673", "scanner": "scanner-primary", "fingerprint": "acc73c0a4810fda7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/export-geo-json.mjs"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-71f9907b25f27a1c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ais-relay.cjs:613"}, "properties": {"repobilityId": "4737698021d30d7b", "scanner": "scanner-primary", "fingerprint": "71f9907b25f27a1c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ais-relay.cjs"}, "region": {"startLine": 613}}}]}, {"ruleId": "scanner-13bbb1f31167ee36", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/desktop-package.mjs:2"}, "properties": {"repobilityId": "3e1db4ac200383ae", "scanner": "scanner-primary", "fingerprint": "13bbb1f31167ee36", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/desktop-package.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-f19d97799718a5be", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/settings-window.ts:53"}, "properties": {"repobilityId": "4972df201f7af9a0", "scanner": "scanner-primary", "fingerprint": "f19d97799718a5be", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/settings-window.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-4b2617780f83a084", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/settings-main.ts:148"}, "properties": {"repobilityId": "0c5a3d2a53f2e5fe", "scanner": "scanner-primary", "fingerprint": "4b2617780f83a084", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/settings-main.ts"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-2836466a8bdd634c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/live-channels-window.ts:171"}, "properties": {"repobilityId": "5bc87f2284a444df", "scanner": "scanner-primary", "fingerprint": "2836466a8bdd634c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/live-channels-window.ts"}, "region": {"startLine": 171}}}]}, {"ruleId": "scanner-83fab2b2f11efd03", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/panel-layout.ts:116"}, "properties": {"repobilityId": "26637039cb858606", "scanner": "scanner-primary", "fingerprint": "83fab2b2f11efd03", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/panel-layout.ts"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-e90e2a434b60a92e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/event-handlers.ts:618"}, "properties": {"repobilityId": "dc3091e230756a82", "scanner": "scanner-primary", "fingerprint": "e90e2a434b60a92e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/event-handlers.ts"}, "region": {"startLine": 618}}}]}, {"ruleId": "scanner-d7b5c1e4a38f7270", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/desktop-updater.ts:172"}, "properties": {"repobilityId": "33c9fec1a2727efb", "scanner": "scanner-primary", "fingerprint": "d7b5c1e4a38f7270", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/desktop-updater.ts"}, "region": {"startLine": 172}}}]}, {"ruleId": "scanner-0370dc31c4b9d9b8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/utils/dom-utils.ts:59"}, "properties": {"repobilityId": "fa94be8586b50c6c", "scanner": "scanner-primary", "fingerprint": "0370dc31c4b9d9b8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/utils/dom-utils.ts"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-0ea422fe93acbae3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/utils/layer-warning.ts:15"}, "properties": {"repobilityId": "83302fa755387531", "scanner": "scanner-primary", "fingerprint": "0ea422fe93acbae3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/utils/layer-warning.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-f73ade745e0468a4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/utils/export.ts:153"}, "properties": {"repobilityId": "0574650ff5c7ee66", "scanner": "scanner-primary", "fingerprint": "f73ade745e0468a4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/utils/export.ts"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-d03be63f83482ac8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/shims/child-process.ts:6"}, "properties": {"repobilityId": "5300dca31d5fa55b", "scanner": "scanner-primary", "fingerprint": "d03be63f83482ac8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/shims/child-process.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-c2a9bb9c62f2092d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryBriefPage.ts:94"}, "properties": {"repobilityId": "dd0466eb644efe9d", "scanner": "scanner-primary", "fingerprint": "c2a9bb9c62f2092d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/CountryBriefPage.ts"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-4e12d85adb1eaf59", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/PlaybackControl.ts:14"}, "properties": {"repobilityId": "92e38ac86bcbb525", "scanner": "scanner-primary", "fingerprint": "4e12d85adb1eaf59", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/PlaybackControl.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-649d2251797474c4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/IntelligenceGapBadge.ts:62"}, "properties": {"repobilityId": "2e4b51f8e1e5a2f8", "scanner": "scanner-primary", "fingerprint": "649d2251797474c4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/IntelligenceGapBadge.ts"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-b368804700baa661", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryDeepDivePanel.ts:590"}, "properties": {"repobilityId": "2a0fb9c010abfeba", "scanner": "scanner-primary", "fingerprint": "b368804700baa661", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/CountryDeepDivePanel.ts"}, "region": {"startLine": 590}}}]}, {"ruleId": "scanner-43fc8fc8cf62d016", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/NewsPanel.ts:175"}, "properties": {"repobilityId": "a43579162a318575", "scanner": "scanner-primary", "fingerprint": "43fc8fc8cf62d016", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/NewsPanel.ts"}, "region": {"startLine": 175}}}]}, {"ruleId": "scanner-667dca351c37bcbc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryTimeline.ts:251"}, "properties": {"repobilityId": "1d93afb56cfe133b", "scanner": "scanner-primary", "fingerprint": "667dca351c37bcbc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/CountryTimeline.ts"}, "region": {"startLine": 251}}}]}, {"ruleId": "scanner-cb96cea8c8d86801", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/HeroSpotlightPanel.ts:21"}, "properties": {"repobilityId": "65899ae06155dd7b", "scanner": "scanner-primary", "fingerprint": "cb96cea8c8d86801", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/HeroSpotlightPanel.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-c486bb37d8392965", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/DeckGLMap.ts:524"}, "properties": {"repobilityId": "582f12d92a074d99", "scanner": "scanner-primary", "fingerprint": "c486bb37d8392965", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/DeckGLMap.ts"}, "region": {"startLine": 524}}}]}, {"ruleId": "scanner-32b90de8fef8f609", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/DeductionPanel.ts:131"}, "properties": {"repobilityId": "9e449e84d6bcee6f", "scanner": "scanner-primary", "fingerprint": "32b90de8fef8f609", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/DeductionPanel.ts"}, "region": {"startLine": 131}}}]}, {"ruleId": "scanner-0eac70652bd85ea2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/SearchModal.ts:181"}, "properties": {"repobilityId": "954b4ff5c3b93441", "scanner": "scanner-primary", "fingerprint": "0eac70652bd85ea2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/SearchModal.ts"}, "region": {"startLine": 181}}}]}, {"ruleId": "scanner-a6aac8ed0b28eb1a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/AirlineIntelPanel.ts:226"}, "properties": {"repobilityId": "8ea9d67fb0c79b7f", "scanner": "scanner-primary", "fingerprint": "a6aac8ed0b28eb1a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/AirlineIntelPanel.ts"}, "region": {"startLine": 226}}}]}, {"ruleId": "scanner-8df74765a3d621ad", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MarketPanel.ts:54"}, "properties": {"repobilityId": "dbb4f7a27e7625f0", "scanner": "scanner-primary", "fingerprint": "8df74765a3d621ad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/MarketPanel.ts"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-a372df28955cd99c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/Panel.ts:736"}, "properties": {"repobilityId": "c68c67d26059dd1d", "scanner": "scanner-primary", "fingerprint": "a372df28955cd99c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/Panel.ts"}, "region": {"startLine": 736}}}]}, {"ruleId": "scanner-0c0484173338c0f3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/StrategicRiskPanel.ts:467"}, "properties": {"repobilityId": "3a5760f653f71e60", "scanner": "scanner-primary", "fingerprint": "0c0484173338c0f3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/StrategicRiskPanel.ts"}, "region": {"startLine": 467}}}]}, {"ruleId": "scanner-7b4e706b01278bfc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/RegulationPanel.ts:22"}, "properties": {"repobilityId": "3eb81933a89b0ae8", "scanner": "scanner-primary", "fingerprint": "7b4e706b01278bfc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/RegulationPanel.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-eb6c57a6156c0d9e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/ProBanner.ts:23"}, "properties": {"repobilityId": "a7b7d44bc09d948a", "scanner": "scanner-primary", "fingerprint": "eb6c57a6156c0d9e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ProBanner.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-eb4a8fd68e48cdea", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CascadePanel.ts:193"}, "properties": {"repobilityId": "3f017ef7f230d68a", "scanner": "scanner-primary", "fingerprint": "eb4a8fd68e48cdea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/CascadePanel.ts"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-3eaf0403b13509ec", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/GlobeMap.ts:574"}, "properties": {"repobilityId": "5b2495e5c9884424", "scanner": "scanner-primary", "fingerprint": "3eaf0403b13509ec", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/GlobeMap.ts"}, "region": {"startLine": 574}}}]}, {"ruleId": "scanner-d4c1e97e28bef5bb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/StoryModal.ts:21"}, "properties": {"repobilityId": "4c529f022eef639b", "scanner": "scanner-primary", "fingerprint": "d4c1e97e28bef5bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/StoryModal.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-e60eadbf44bc930e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/GivingPanel.ts:90"}, "properties": {"repobilityId": "088655f3beb4a3cc", "scanner": "scanner-primary", "fingerprint": "e60eadbf44bc930e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/GivingPanel.ts"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-fbcf3db26b8b9ea3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/GoodThingsDigestPanel.ts:21"}, "properties": {"repobilityId": "c813e349b3eb312e", "scanner": "scanner-primary", "fingerprint": "fbcf3db26b8b9ea3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/GoodThingsDigestPanel.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-1a2e82df3bc5a9a6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/RuntimeConfigPanel.ts:212"}, "properties": {"repobilityId": "16f17f586cfefb03", "scanner": "scanner-primary", "fingerprint": "1a2e82df3bc5a9a6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/RuntimeConfigPanel.ts"}, "region": {"startLine": 212}}}]}, {"ruleId": "scanner-070031b00a9d838d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/AviationCommandBar.ts:155"}, "properties": {"repobilityId": "120cc4646d7e8706", "scanner": "scanner-primary", "fingerprint": "070031b00a9d838d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/AviationCommandBar.ts"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-5013bfcebf0393d6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/BreakthroughsTickerPanel.ts:36"}, "properties": {"repobilityId": "1b93c824c1948b93", "scanner": "scanner-primary", "fingerprint": "5013bfcebf0393d6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/BreakthroughsTickerPanel.ts"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-98f1a90a61ebbb81", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/Map.ts:276"}, "properties": {"repobilityId": "a39c450ce1557e6f", "scanner": "scanner-primary", "fingerprint": "98f1a90a61ebbb81", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/Map.ts"}, "region": {"startLine": 276}}}]}, {"ruleId": "scanner-54f2130ffe56dd5a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/LiveNewsPanel.ts:388"}, "properties": {"repobilityId": "e7b39dc021e3f5c4", "scanner": "scanner-primary", "fingerprint": "54f2130ffe56dd5a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/LiveNewsPanel.ts"}, "region": {"startLine": 388}}}]}, {"ruleId": "scanner-f8ea57c3cd8cdb8c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/SignalModal.ts:20"}, "properties": {"repobilityId": "08377e29c4a5117a", "scanner": "scanner-primary", "fingerprint": "f8ea57c3cd8cdb8c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/SignalModal.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-90859f9fb15b1643", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/UnifiedSettings.ts:182"}, "properties": {"repobilityId": "5fbc0c01879aee5e", "scanner": "scanner-primary", "fingerprint": "90859f9fb15b1643", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/UnifiedSettings.ts"}, "region": {"startLine": 182}}}]}, {"ruleId": "scanner-a98c9efa7c18cd02", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/VirtualList.ts:132"}, "properties": {"repobilityId": "7faacfda8068caff", "scanner": "scanner-primary", "fingerprint": "a98c9efa7c18cd02", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/VirtualList.ts"}, "region": {"startLine": 132}}}]}, {"ruleId": "scanner-ea69a454ebd27c9d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CommunityWidget.ts:13"}, "properties": {"repobilityId": "bb5e71c4926ed451", "scanner": "scanner-primary", "fingerprint": "ea69a454ebd27c9d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/CommunityWidget.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-ba32ea4855b0dcf5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountryIntelModal.ts:52"}, "properties": {"repobilityId": "50db37535370d09e", "scanner": "scanner-primary", "fingerprint": "ba32ea4855b0dcf5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/CountryIntelModal.ts"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-a88127a4e9a89b7e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/CountersPanel.ts:58"}, "properties": {"repobilityId": "76dea330c466e46a", "scanner": "scanner-primary", "fingerprint": "a88127a4e9a89b7e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/CountersPanel.ts"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-717e57d5bf3baa5f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MapContainer.ts:178"}, "properties": {"repobilityId": "543fda6c92681877", "scanner": "scanner-primary", "fingerprint": "717e57d5bf3baa5f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/MapContainer.ts"}, "region": {"startLine": 178}}}]}, {"ruleId": "scanner-d9c92f9d1acc9f8d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/LiveWebcamsPanel.ts:128"}, "properties": {"repobilityId": "c9e77a98e1577ce1", "scanner": "scanner-primary", "fingerprint": "d9c92f9d1acc9f8d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/LiveWebcamsPanel.ts"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-b315a9591088f9c7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MobileWarningModal.ts:13"}, "properties": {"repobilityId": "ed693993655cacd9", "scanner": "scanner-primary", "fingerprint": "b315a9591088f9c7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/MobileWarningModal.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-095ec4612ed5c1c8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/PositiveNewsFeedPanel.ts:109"}, "properties": {"repobilityId": "cea154f5455942a7", "scanner": "scanner-primary", "fingerprint": "095ec4612ed5c1c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/PositiveNewsFeedPanel.ts"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-3045b63131f5d208", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/MapPopup.ts:176"}, "properties": {"repobilityId": "7354df9742a88e1f", "scanner": "scanner-primary", "fingerprint": "3045b63131f5d208", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/MapPopup.ts"}, "region": {"startLine": 176}}}]}, {"ruleId": "scanner-e58a948eb71023ec", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/ProgressChartsPanel.ts:45"}, "properties": {"repobilityId": "e8f5ec6936795f98", "scanner": "scanner-primary", "fingerprint": "e58a948eb71023ec", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ProgressChartsPanel.ts"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-87e12b77c507de63", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/services/preferences-content.ts:43"}, "properties": {"repobilityId": "9295713bf165bbb2", "scanner": "scanner-primary", "fingerprint": "87e12b77c507de63", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/services/preferences-content.ts"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-bab7f766e4029a20", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/e2e/mobile-map-harness.ts:66"}, "properties": {"repobilityId": "27b37e06573a8401", "scanner": "scanner-primary", "fingerprint": "bab7f766e4029a20", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/e2e/mobile-map-harness.ts"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-69515d5199e4bda7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server/gateway.ts:171"}, "properties": {"repobilityId": "ee760e027c3c6bd3", "scanner": "scanner-primary", "fingerprint": "69515d5199e4bda7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/gateway.ts"}, "region": {"startLine": 171}}}]}, {"ruleId": "scanner-32f4d5060b1c46be", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in public/pro/assets/index-CIvSGtTn.js:49"}, "properties": {"repobilityId": "ae21e8ff5941b492", "scanner": "scanner-primary", "fingerprint": "32f4d5060b1c46be", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/pro/assets/index-CIvSGtTn.js"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-1f7ea3516d810da0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/pro/assets/index-CIvSGtTn.js:48"}, "properties": {"repobilityId": "783b651b9fc6cf2d", "scanner": "scanner-primary", "fingerprint": "1f7ea3516d810da0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/pro/assets/index-CIvSGtTn.js"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-076b03a16e76601d", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a42462ccbe3d06f2", "scanner": "scanner-primary", "fingerprint": "076b03a16e76601d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bf899e4c7f8554f9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b1ed995cb705e0d5", "scanner": "scanner-primary", "fingerprint": "bf899e4c7f8554f9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-linux-app.yml"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-bf899e4c7f8554f9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b1ed995cb705e0d5", "scanner": "scanner-primary", "fingerprint": "bf899e4c7f8554f9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-linux-app.yml"}, "region": {"startLine": 175}}}]}, {"ruleId": "scanner-dad138f419869f24", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "40bac13e46ec6785", "scanner": "scanner-primary", "fingerprint": "dad138f419869f24", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-desktop.yml"}, "region": {"startLine": 462}}}]}, {"ruleId": "scanner-27bcea42cba6c545", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "f4ed2ebe4ec9c60b", "scanner": "scanner-primary", "fingerprint": "27bcea42cba6c545", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-desktop.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c931d173620405f1", "level": "note", "message": {"text": "Very large file: pro-test/src/App.tsx (1197 lines)"}, "properties": {"repobilityId": "2e8ba61544670911", "scanner": "scanner-primary", "fingerprint": "c931d173620405f1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f0727fbf9bc7af28", "level": "note", "message": {"text": "Very large file: api/intel-news/v1/enrich.ts (1522 lines)"}, "properties": {"repobilityId": "d242d1d18afca9a3", "scanner": "scanner-primary", "fingerprint": "f0727fbf9bc7af28", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e4f49ed2d7db55d5", "level": "note", "message": {"text": "Very large file: api/intel-news/v1/refresh.ts (1495 lines)"}, "properties": {"repobilityId": "7bb0937235c8ee50", "scanner": "scanner-primary", "fingerprint": "e4f49ed2d7db55d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8fba3ed10e4aa42d", "level": "note", "message": {"text": "Very large file: scripts/ais-relay.cjs (6264 lines)"}, "properties": {"repobilityId": "3b31be97ec399d7f", "scanner": "scanner-primary", "fingerprint": "8fba3ed10e4aa42d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-40ed1efdd28d48b5", "level": "note", "message": {"text": "Very large file: src/app/panel-layout.ts (1419 lines)"}, "properties": {"repobilityId": "8c0f6a875f517e5d", "scanner": "scanner-primary", "fingerprint": "40ed1efdd28d48b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9e9c99eaf5d66924", "level": "note", "message": {"text": "Very large file: src/app/data-loader.ts (2582 lines)"}, "properties": {"repobilityId": "9d32075fc60d678b", "scanner": "scanner-primary", "fingerprint": "9e9c99eaf5d66924", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-db48fc79d3641ba3", "level": "note", "message": {"text": "Very large file: src/components/DeckGLMap.ts (5405 lines)"}, "properties": {"repobilityId": "599a253471a86d6b", "scanner": "scanner-primary", "fingerprint": "db48fc79d3641ba3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-da5efd84d00204d3", "level": "note", "message": {"text": "Very large file: src/components/GlobeMap.ts (2850 lines)"}, "properties": {"repobilityId": "b84318fbb6741ce8", "scanner": "scanner-primary", "fingerprint": "da5efd84d00204d3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4eeef07150df70b9", "level": "note", "message": {"text": "Very large file: src/components/Map.ts (3761 lines)"}, "properties": {"repobilityId": "5203180d003a74c2", "scanner": "scanner-primary", "fingerprint": "4eeef07150df70b9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-31ef851480f4fc8e", "level": "note", "message": {"text": "Very large file: src/components/LiveNewsPanel.ts (1593 lines)"}, "properties": {"repobilityId": "7e5eb5ee3d1622d7", "scanner": "scanner-primary", "fingerprint": "31ef851480f4fc8e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8ea6713689b18302", "level": "note", "message": {"text": "Very large file: src/components/MapPopup.ts (2818 lines)"}, "properties": {"repobilityId": "8d47a9eb5ebf782f", "scanner": "scanner-primary", "fingerprint": "8ea6713689b18302", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e96f7206f8e633be", "level": "note", "message": {"text": "Very large file: src/services/oref-locations.ts (1504 lines)"}, "properties": {"repobilityId": "2bfc2d4a8bebd817", "scanner": "scanner-primary", "fingerprint": "e96f7206f8e633be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a194832d8dbe116f", "level": "note", "message": {"text": "Very large file: src/config/feeds.ts (1349 lines)"}, "properties": {"repobilityId": "f5c943aa9e3fccbc", "scanner": "scanner-primary", "fingerprint": "a194832d8dbe116f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9c24064f6894c827", "level": "note", "message": {"text": "Very large file: src/config/geo.ts (3259 lines)"}, "properties": {"repobilityId": "d304fda177749b03", "scanner": "scanner-primary", "fingerprint": "9c24064f6894c827", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cf2eadd23793c2e4", "level": "note", "message": {"text": "Very large file: src/config/ai-datacenters.ts (3981 lines)"}, "properties": {"repobilityId": "cd44eff45f751d93", "scanner": "scanner-primary", "fingerprint": "cf2eadd23793c2e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-faf64f30660b3a14", "level": "note", "message": {"text": "Very large file: src-tauri/src/main.rs (1442 lines)"}, "properties": {"repobilityId": "aee2f13f5d43306f", "scanner": "scanner-primary", "fingerprint": "faf64f30660b3a14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e036f71cb8a2efd0", "level": "note", "message": {"text": "Very large file: src-tauri/sidecar/local-api-server.mjs (1477 lines)"}, "properties": {"repobilityId": "25a7dab1c72d0351", "scanner": "scanner-primary", "fingerprint": "e036f71cb8a2efd0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "538833e3c51c9224", "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": "93cc3e97b32e3126", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "09e1a08a9a8d26e9", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-61ac296ce508e13c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 vite.config.ts:485"}, "properties": {"repobilityId": "f317d5ffd18a6e81", "scanner": "scanner-primary", "fingerprint": "61ac296ce508e13c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd2265d880b0f5f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/edge-functions.test.mjs:132"}, "properties": {"repobilityId": "ab613a787aa2c1a3", "scanner": "scanner-primary", "fingerprint": "bd2265d880b0f5f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ab3349acab85be8", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/bootstrap.js:84"}, "properties": {"repobilityId": "d37fe92c7baea100", "scanner": "scanner-primary", "fingerprint": "7ab3349acab85be8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13c6fdd87221218c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/_lkg.js:107"}, "properties": {"repobilityId": "aa61e2574a8b7458", "scanner": "scanner-primary", "fingerprint": "13c6fdd87221218c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-78a9e94edf23269c", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/youtube/embed.js:96"}, "properties": {"repobilityId": "8970f0f07c55011b", "scanner": "scanner-primary", "fingerprint": "78a9e94edf23269c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45af4a58b2a12573", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/live-news/v6/list-us-headlines.ts:78"}, "properties": {"repobilityId": "9a283c669262a9e3", "scanner": "scanner-primary", "fingerprint": "45af4a58b2a12573", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51e11a5cf1866622", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/world-brief/v1/weekly-digest.ts:90"}, "properties": {"repobilityId": "d078bfd26a43d5c1", "scanner": "scanner-primary", "fingerprint": "51e11a5cf1866622", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bbbeab0bdafcb435", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/ops/_probe-core.js:158"}, "properties": {"repobilityId": "2f215277cdfceef6", "scanner": "scanner-primary", "fingerprint": "bbbeab0bdafcb435", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-004e6764ef4580c6", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/intel-news/v1/enrich.ts:31"}, "properties": {"repobilityId": "382fdb8bd0a342c5", "scanner": "scanner-primary", "fingerprint": "004e6764ef4580c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73b7eacc36192fc2", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/intel-news/v1/refresh.ts:301"}, "properties": {"repobilityId": "3f84bcf4a078beca", "scanner": "scanner-primary", "fingerprint": "73b7eacc36192fc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8ad4d9f460e9ec9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-mirta-bases.mjs:103"}, "properties": {"repobilityId": "02e370a2d0e49d49", "scanner": "scanner-primary", "fingerprint": "d8ad4d9f460e9ec9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01c78d10c6f22fcb", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/ais-relay.cjs:301"}, "properties": {"repobilityId": "f5c779fc084adbea", "scanner": "scanner-primary", "fingerprint": "01c78d10c6f22fcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5bbbc8619716968f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ais-relay.cjs:4484"}, "properties": {"repobilityId": "803a27f9f8c8825d", "scanner": "scanner-primary", "fingerprint": "5bbbc8619716968f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fc7c475bdb17c774", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/railway-set-watch-paths.mjs:40"}, "properties": {"repobilityId": "d1c9692d282a3ab9", "scanner": "scanner-primary", "fingerprint": "fc7c475bdb17c774", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3c4f8e489a20e39", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/ais-relay-rss.test.cjs:23"}, "properties": {"repobilityId": "73dc83bd09915373", "scanner": "scanner-primary", "fingerprint": "a3c4f8e489a20e39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9cf61b98e14128e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-oref-locations.mjs:22"}, "properties": {"repobilityId": "da518026c097741c", "scanner": "scanner-primary", "fingerprint": "e9cf61b98e14128e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4899ea5ebacf7ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/settings-main.ts:75"}, "properties": {"repobilityId": "1ee0b71bdee27c0b", "scanner": "scanner-primary", "fingerprint": "c4899ea5ebacf7ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9efd567ec7a5470f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/main.ts:30"}, "properties": {"repobilityId": "d795b7cf76dbf62f", "scanner": "scanner-primary", "fingerprint": "9efd567ec7a5470f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-66d078777d6a6322", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/country-intel.ts:236"}, "properties": {"repobilityId": "2bf841629f64d506", "scanner": "scanner-primary", "fingerprint": "66d078777d6a6322", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-695caa71d36dae92", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/utils/circuit-breaker.ts:216"}, "properties": {"repobilityId": "69c840555c747a9f", "scanner": "scanner-primary", "fingerprint": "695caa71d36dae92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc97868bd22f47a0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/MacroSignalsPanel.ts:26"}, "properties": {"repobilityId": "633de9fbb6fd59df", "scanner": "scanner-primary", "fingerprint": "fc97868bd22f47a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c0dd7c9ada3652e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/DeductionPanel.ts:9"}, "properties": {"repobilityId": "b7ef3f3f9b7821ab", "scanner": "scanner-primary", "fingerprint": "3c0dd7c9ada3652e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1dc37068181e8e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/TechEventsPanel.ts:13"}, "properties": {"repobilityId": "d8840027121c658f", "scanner": "scanner-primary", "fingerprint": "b1dc37068181e8e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f0832c7feda24cad", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/Map.ts:3601"}, "properties": {"repobilityId": "881024df641b3b10", "scanner": "scanner-primary", "fingerprint": "f0832c7feda24cad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89125b0bd1e51233", "level": "note", "message": {"text": "Legacy-named symbol `iptv_hd_abr_v1` in src/components/LiveNewsPanel.ts:233"}, "properties": {"repobilityId": "a807b2d603699250", "scanner": "scanner-primary", "fingerprint": "89125b0bd1e51233", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-93d0edf43f757595", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/LiveNewsPanel.ts:1285"}, "properties": {"repobilityId": "d9065a70269b61e6", "scanner": "scanner-primary", "fingerprint": "93d0edf43f757595", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3a0c3a085dbbdea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/GulfEconomiesPanel.ts:11"}, "properties": {"repobilityId": "f65ae9f7163fb9be", "scanner": "scanner-primary", "fingerprint": "c3a0c3a085dbbdea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bc2a8522973b5aec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/runtime-config.ts:523"}, "properties": {"repobilityId": "cb27ccbaa80492fc", "scanner": "scanner-primary", "fingerprint": "bc2a8522973b5aec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dbacd17e16bf8170", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/services/satellites.ts:1"}, "properties": {"repobilityId": "aef10a45153389af", "scanner": "scanner-primary", "fingerprint": "dbacd17e16bf8170", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b41a667e0a2f4ac5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cable-activity.ts:5"}, "properties": {"repobilityId": "6b7e1a8b7a34a277", "scanner": "scanner-primary", "fingerprint": "b41a667e0a2f4ac5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-25f45d0d37b1d886", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/usni-fleet.ts:9"}, "properties": {"repobilityId": "06b10d1d94154851", "scanner": "scanner-primary", "fingerprint": "25f45d0d37b1d886", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ccc8679e0d5e5e59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/threat-classifier.ts:392"}, "properties": {"repobilityId": "50b9842b5a61a7a2", "scanner": "scanner-primary", "fingerprint": "ccc8679e0d5e5e59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54c8efeabacd3257", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/eonet.ts:37"}, "properties": {"repobilityId": "8429257f57a0ea29", "scanner": "scanner-primary", "fingerprint": "54c8efeabacd3257", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c4f5dc97780be21", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/pizzint.ts:14"}, "properties": {"repobilityId": "0b0663e45a1d5d26", "scanner": "scanner-primary", "fingerprint": "1c4f5dc97780be21", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-56801e14b34604b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/military-bases.ts:9"}, "properties": {"repobilityId": "b4bfe8039b0b6c67", "scanner": "scanner-primary", "fingerprint": "56801e14b34604b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9787586a70eca53e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/stock-analysis-history.ts:10"}, "properties": {"repobilityId": "745077c3a6c247bc", "scanner": "scanner-primary", "fingerprint": "9787586a70eca53e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f330c1458788e724", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/gdelt-intel.ts:127"}, "properties": {"repobilityId": "a0b03c8b87366fad", "scanner": "scanner-primary", "fingerprint": "f330c1458788e724", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-02cf635242abcbec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cable-health.ts:9"}, "properties": {"repobilityId": "d5b525b132bba233", "scanner": "scanner-primary", "fingerprint": "02cf635242abcbec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dfb8c3b7a50b7be6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/positive-events-geo.ts:22"}, "properties": {"repobilityId": "592d03800c24987e", "scanner": "scanner-primary", "fingerprint": "dfb8c3b7a50b7be6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58af4703f05a9f2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/military-flights.ts:72"}, "properties": {"repobilityId": "e50ce77dc7374921", "scanner": "scanner-primary", "fingerprint": "58af4703f05a9f2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6c6d8f968a66ee23", "level": "note", "message": {"text": "Legacy-named symbol `pruneOld` in src/services/signal-aggregator.ts:127"}, "properties": {"repobilityId": "4f496554213ae803", "scanner": "scanner-primary", "fingerprint": "6c6d8f968a66ee23", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3094e1af2942634d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/earthquakes.ts:12"}, "properties": {"repobilityId": "5feea72df12de26c", "scanner": "scanner-primary", "fingerprint": "3094e1af2942634d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4bd285dd37048ae5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/population-exposure.ts:6"}, "properties": {"repobilityId": "713e96b7b12d80e2", "scanner": "scanner-primary", "fingerprint": "4bd285dd37048ae5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1f1fc2b6ad038a9f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/runtime.ts:483"}, "properties": {"repobilityId": "72b3de5537d4f711", "scanner": "scanner-primary", "fingerprint": "1f1fc2b6ad038a9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5517de3481523ea2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/stock-backtest.ts:7"}, "properties": {"repobilityId": "abee47beb0f9d445", "scanner": "scanner-primary", "fingerprint": "5517de3481523ea2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1fc4b973641da28", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/stock-analysis.ts:9"}, "properties": {"repobilityId": "af04ea71ce45a07d", "scanner": "scanner-primary", "fingerprint": "f1fc4b973641da28", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b32064ecfa845959", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cached-risk-scores.ts:14"}, "properties": {"repobilityId": "4aae84c69d6788cf", "scanner": "scanner-primary", "fingerprint": "b32064ecfa845959", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-94a2a6240f33df26", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cached-theater-posture.ts:12"}, "properties": {"repobilityId": "fa77604508b9ee85", "scanner": "scanner-primary", "fingerprint": "94a2a6240f33df26", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a8a7c7896d6f4775", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/summarization.ts:38"}, "properties": {"repobilityId": "121c21de5f464c4a", "scanner": "scanner-primary", "fingerprint": "a8a7c7896d6f4775", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9daf97caee436b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/telegram-intel.ts:48"}, "properties": {"repobilityId": "8582f50e5696bbdd", "scanner": "scanner-primary", "fingerprint": "e9daf97caee436b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb6d54f3f90b0d95", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/wingbits.ts:51"}, "properties": {"repobilityId": "df19e776baa24d3d", "scanner": "scanner-primary", "fingerprint": "fb6d54f3f90b0d95", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-34947da0c97cf2e6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/temporal-baseline.ts:22"}, "properties": {"repobilityId": "babf37cf27be21d5", "scanner": "scanner-primary", "fingerprint": "34947da0c97cf2e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-299b626105053f06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/unrest/index.ts:12"}, "properties": {"repobilityId": "f466229d766b9cc5", "scanner": "scanner-primary", "fingerprint": "299b626105053f06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b402dff3107af63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/conflict/index.ts:20"}, "properties": {"repobilityId": "bdf7f0641b573ba5", "scanner": "scanner-primary", "fingerprint": "5b402dff3107af63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b9faf673806c0f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/giving/index.ts:127"}, "properties": {"repobilityId": "d455cdf1fef0a765", "scanner": "scanner-primary", "fingerprint": "0b9faf673806c0f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6637467a5acbda22", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/infrastructure/index.ts:23"}, "properties": {"repobilityId": "a2f8a013700fdc7f", "scanner": "scanner-primary", "fingerprint": "6637467a5acbda22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5c3f57d8569df864", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/economic/index.ts:35"}, "properties": {"repobilityId": "c2c830ae8637afec", "scanner": "scanner-primary", "fingerprint": "5c3f57d8569df864", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a055b8d2f48dd32c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/displacement/index.ts:109"}, "properties": {"repobilityId": "383e6c20e337c351", "scanner": "scanner-primary", "fingerprint": "a055b8d2f48dd32c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f35a924cea0fdbd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/prediction/index.ts:22"}, "properties": {"repobilityId": "9f5a41659dc0b45b", "scanner": "scanner-primary", "fingerprint": "2f35a924cea0fdbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-63b6aeb8a0ccc6ab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/research/index.ts:12"}, "properties": {"repobilityId": "399510a7f673bd40", "scanner": "scanner-primary", "fingerprint": "63b6aeb8a0ccc6ab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd753256c559e9de", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/market/index.ts:21"}, "properties": {"repobilityId": "a8509cc713830496", "scanner": "scanner-primary", "fingerprint": "bd753256c559e9de", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a2a4ed533f63c93b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/climate/index.ts:31"}, "properties": {"repobilityId": "536631a9ec90b3f0", "scanner": "scanner-primary", "fingerprint": "a2a4ed533f63c93b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-35ea674cd3ba45d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/supply-chain/index.ts:26"}, "properties": {"repobilityId": "7183eccfd3d5bd97", "scanner": "scanner-primary", "fingerprint": "35ea674cd3ba45d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91763799f7fd3f5a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/trade/index.ts:29"}, "properties": {"repobilityId": "59fb595a031c8d43", "scanner": "scanner-primary", "fingerprint": "91763799f7fd3f5a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-71a9d3ac3d712d15", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/maritime/index.ts:15"}, "properties": {"repobilityId": "f870c9a31a4af89d", "scanner": "scanner-primary", "fingerprint": "71a9d3ac3d712d15", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-35a7935c60523ae6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/aviation/index.ts:273"}, "properties": {"repobilityId": "cad197f8bd608f01", "scanner": "scanner-primary", "fingerprint": "35a7935c60523ae6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c127f4aee2427335", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/wildfires/index.ts:42"}, "properties": {"repobilityId": "0b48c9ff2a9ec490", "scanner": "scanner-primary", "fingerprint": "c127f4aee2427335", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a22ac93631ef5023", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/cyber/index.ts:18"}, "properties": {"repobilityId": "001432d37c019ef6", "scanner": "scanner-primary", "fingerprint": "a22ac93631ef5023", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ec5212619b77b217", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/config/index.ts:1"}, "properties": {"repobilityId": "89e8d0de3f198ad4", "scanner": "scanner-primary", "fingerprint": "ec5212619b77b217", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e0bae1dad24b0bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/config/panels.ts:8"}, "properties": {"repobilityId": "ca71a1ec36e888c8", "scanner": "scanner-primary", "fingerprint": "8e0bae1dad24b0bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-216f5c30e15f5789", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/config/feeds.ts:8"}, "properties": {"repobilityId": "1a12484ebb122ee2", "scanner": "scanner-primary", "fingerprint": "216f5c30e15f5789", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-427f4a2b35abbb61", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/config/bases-expanded.ts:5"}, "properties": {"repobilityId": "187d3dc8dcb73e65", "scanner": "scanner-primary", "fingerprint": "427f4a2b35abbb61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5facf496e784ccc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/intelligence/v1/classify-event.ts:72"}, "properties": {"repobilityId": "e6fc4529610a3e5e", "scanner": "scanner-primary", "fingerprint": "e5facf496e784ccc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77c4e289e09a9288", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/intelligence/v1/get-country-intel-brief.ts:80"}, "properties": {"repobilityId": "7bc83ed9d16c6e4f", "scanner": "scanner-primary", "fingerprint": "77c4e289e09a9288", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-884b2f9949c30310", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/intelligence/v1/deduct-situation.ts:56"}, "properties": {"repobilityId": "9c6a7e05530da701", "scanner": "scanner-primary", "fingerprint": "884b2f9949c30310", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0bb1446ac34590a1", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in server/worldmonitor/intelligence/v1/get-country-facts.ts:168"}, "properties": {"repobilityId": "e6662cf1c6ac545e", "scanner": "scanner-primary", "fingerprint": "0bb1446ac34590a1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c12ec6ccf58547e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/worldmonitor/giving/v1/get-giving-summary.ts:33"}, "properties": {"repobilityId": "c19d3ad0f1ebdc3f", "scanner": "scanner-primary", "fingerprint": "c12ec6ccf58547e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0708d6cd385da261", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/worldmonitor/military/v1/list-military-flights.ts:78"}, "properties": {"repobilityId": "8939bf51593c3ec2", "scanner": "scanner-primary", "fingerprint": "0708d6cd385da261", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87a33e7540b5b754", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/research/v1/list-tech-events.ts:264"}, "properties": {"repobilityId": "4d1c83ca748126f8", "scanner": "scanner-primary", "fingerprint": "87a33e7540b5b754", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-946e71a9534f07e3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/market/v1/stock-news-search.ts:168"}, "properties": {"repobilityId": "7ba0c6a400036a04", "scanner": "scanner-primary", "fingerprint": "946e71a9534f07e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-363dca03105c7852", "level": "none", "message": {"text": "Commented-code block (8 lines) in server/worldmonitor/market/v1/_shared.ts:154"}, "properties": {"repobilityId": "5433389000ccaf3d", "scanner": "scanner-primary", "fingerprint": "363dca03105c7852", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a1ad1456bf6f472", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/worldmonitor/news/v1/summarize-article.ts:105"}, "properties": {"repobilityId": "8e30bbe79592201e", "scanner": "scanner-primary", "fingerprint": "0a1ad1456bf6f472", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ed89bf505a69a1c", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/live-news/v3/refresh.ts:155"}, "properties": {"repobilityId": "339bfddb1e785155", "scanner": "scanner-primary", "fingerprint": "7ed89bf505a69a1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c1fdab11b583a17", "level": "none", "message": {"text": "Commented-code block (9 lines) in server/live-news/v1/_normalize.ts:179"}, "properties": {"repobilityId": "65d2aef78dd0d4ad", "scanner": "scanner-primary", "fingerprint": "4c1fdab11b583a17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-540270e989114f06", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/live-news/v1/list-us-headlines.ts:24"}, "properties": {"repobilityId": "95dddbbcd5e08b82", "scanner": "scanner-primary", "fingerprint": "540270e989114f06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-325e867c2f02983c", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/live-news/v1/_enrich-combined.ts:31"}, "properties": {"repobilityId": "eff9c918834f14d4", "scanner": "scanner-primary", "fingerprint": "325e867c2f02983c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a72781269e88b71e", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/live-news/v1/_enrich.ts:191"}, "properties": {"repobilityId": "0446600675a27588", "scanner": "scanner-primary", "fingerprint": "a72781269e88b71e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f73e6bd34bc3b99", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/live-news/v1/_dedup-embed.ts:137"}, "properties": {"repobilityId": "5f319a5460b547ae", "scanner": "scanner-primary", "fingerprint": "3f73e6bd34bc3b99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca7b2f314c165c91", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/live-news/v1/_sources.ts:45"}, "properties": {"repobilityId": "2d2cc158e91111c5", "scanner": "scanner-primary", "fingerprint": "ca7b2f314c165c91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea81d3dc581324b7", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/live-news/v1/_dedup.ts:391"}, "properties": {"repobilityId": "7fd995a74251fbae", "scanner": "scanner-primary", "fingerprint": "ea81d3dc581324b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0183d690d8b79b81", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/live-news/v1/_paraphrase.ts:29"}, "properties": {"repobilityId": "99ddd5ebf2f482f6", "scanner": "scanner-primary", "fingerprint": "0183d690d8b79b81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54603c9d2a5f4d4b", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/live-news/v6/_normalize.ts:263"}, "properties": {"repobilityId": "08137183d53e8133", "scanner": "scanner-primary", "fingerprint": "54603c9d2a5f4d4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-404aecf5affec060", "level": "none", "message": {"text": "Commented-code block (8 lines) in server/live-news/v6/list-us-headlines.ts:61"}, "properties": {"repobilityId": "3b2fcf7e439d7f90", "scanner": "scanner-primary", "fingerprint": "404aecf5affec060", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c659460e14aceef6", "level": "none", "message": {"text": "Commented-code block (8 lines) in server/live-news/v6/_cluster.ts:475"}, "properties": {"repobilityId": "fae198481798ba09", "scanner": "scanner-primary", "fingerprint": "c659460e14aceef6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8e38e5285157699", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/live-news/v6/_sources.ts:142"}, "properties": {"repobilityId": "03b3b6b4a446b6fc", "scanner": "scanner-primary", "fingerprint": "c8e38e5285157699", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ec0d94d068fc7f3", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/live-news/v6/refresh.ts:26"}, "properties": {"repobilityId": "5292be04811a491c", "scanner": "scanner-primary", "fingerprint": "3ec0d94d068fc7f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dcc6a8d823b2d806", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/live-news/v2/list-us-headlines.ts:101"}, "properties": {"repobilityId": "98c5007282922209", "scanner": "scanner-primary", "fingerprint": "dcc6a8d823b2d806", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f6b562a79f58585", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/world-brief/v1/_generate.ts:44"}, "properties": {"repobilityId": "cde66aba1f35df45", "scanner": "scanner-primary", "fingerprint": "3f6b562a79f58585", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e5c5a0176566eec", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/_shared/llm.ts:106"}, "properties": {"repobilityId": "0ef5c4b2ac858c54", "scanner": "scanner-primary", "fingerprint": "9e5c5a0176566eec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b449b0c14b989d9e", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/_shared/webz-client.ts:51"}, "properties": {"repobilityId": "b19a7442ecfe3ddc", "scanner": "scanner-primary", "fingerprint": "b449b0c14b989d9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f7e7543a7ba5d9f", "level": "none", "message": {"text": "Commented-code block (8 lines) in server/_shared/redis.ts:1"}, "properties": {"repobilityId": "12532e9bf5c8d2a2", "scanner": "scanner-primary", "fingerprint": "0f7e7543a7ba5d9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ec15e53a96cfa0b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/_shared/redis.ts:428"}, "properties": {"repobilityId": "8804a0e5ab3c3b76", "scanner": "scanner-primary", "fingerprint": "2ec15e53a96cfa0b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bbd85b97e21442e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/intel-news/v1/list-headlines.ts:122"}, "properties": {"repobilityId": "c0bfcf5766e3ce42", "scanner": "scanner-primary", "fingerprint": "bbd85b97e21442e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f31deca4f57553a", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/conflict-archive/v2/refresh.ts:120"}, "properties": {"repobilityId": "347b2456e47655f6", "scanner": "scanner-primary", "fingerprint": "8f31deca4f57553a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d89e43bbb19a98df", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/conflict-archive/v5/list.ts:86"}, "properties": {"repobilityId": "12b6ad3c6ceadb03", "scanner": "scanner-primary", "fingerprint": "d89e43bbb19a98df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef954c9bc80bec5a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src-tauri/sidecar/local-api-server.test.mjs:392"}, "properties": {"repobilityId": "7f814ddaa70a7a12", "scanner": "scanner-primary", "fingerprint": "ef954c9bc80bec5a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1320884d641f533", "level": "none", "message": {"text": "Commented-code block (5 lines) in src-tauri/sidecar/local-api-server.mjs:14"}, "properties": {"repobilityId": "aaa3425e26a44243", "scanner": "scanner-primary", "fingerprint": "b1320884d641f533", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c5ffcd463cab6b5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src-tauri/sidecar/local-api-server.mjs:15"}, "properties": {"repobilityId": "d4eb543a1a054bd1", "scanner": "scanner-primary", "fingerprint": "7c5ffcd463cab6b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-464514b2d66ed93c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 blog-site/scripts/generate-og-images.mjs:12"}, "properties": {"repobilityId": "138d8e62275eb53e", "scanner": "scanner-primary", "fingerprint": "464514b2d66ed93c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-95ba6a61de38b5d3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/circuit-breaker-persistence.spec.ts:92"}, "properties": {"repobilityId": "0d8ea8e0731cf57c", "scanner": "scanner-primary", "fingerprint": "95ba6a61de38b5d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8afe4a7133760579", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/runtime-fetch.spec.ts:127"}, "properties": {"repobilityId": "2f3c15353f26b44d", "scanner": "scanner-primary", "fingerprint": "8afe4a7133760579", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-66728f8dad1c193d", "level": "note", "message": {"text": "Legacy-named symbol `unstable_legacy` in public/pro/assets/index-CIvSGtTn.js:48"}, "properties": {"repobilityId": "920ba42a5586e734", "scanner": "scanner-primary", "fingerprint": "66728f8dad1c193d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fa021b2b84e7c19e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/pro/assets/index-CIvSGtTn.js:1"}, "properties": {"repobilityId": "dae35cee4fddd8dd", "scanner": "scanner-primary", "fingerprint": "fa021b2b84e7c19e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3731d091ae952b0e", "level": "note", "message": {"text": "163 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "da87e4cb52d7b161", "scanner": "scanner-primary", "fingerprint": "3731d091ae952b0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-da027301a615db51", "level": "error", "message": {"text": "Dangling fetch: GET https://api.coinpaprika.com/v1/coins (tests/crypto-config.test.mjs:32)"}, "properties": {"repobilityId": "25097fbb09f26e2b", "scanner": "scanner-primary", "fingerprint": "da027301a615db51", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1a08436d2f73cf9", "level": "error", "message": {"text": "Dangling fetch: POST https://challenges.cloudflare.com/turnstile/v0/siteverify (api/register-interest.js:29)"}, "properties": {"repobilityId": "b501c36f36bc6a8c", "scanner": "scanner-primary", "fingerprint": "f1a08436d2f73cf9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b14fbbe2bc9c15fd", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (api/register-interest.js:56)"}, "properties": {"repobilityId": "dfba0ea08b2831f1", "scanner": "scanner-primary", "fingerprint": "b14fbbe2bc9c15fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be30be70186bd4a7", "level": "error", "message": {"text": "Dangling fetch: GET https://www.fwdstart.me/archive (api/fwdstart.js:12)"}, "properties": {"repobilityId": "63457a41e4feb107", "scanner": "scanner-primary", "fingerprint": "be30be70186bd4a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-558e8c507096e076", "level": "error", "message": {"text": "Dangling fetch: POST https://challenges.cloudflare.com/turnstile/v0/siteverify (api/contact.js:50)"}, "properties": {"repobilityId": "5e71e82e3e35151e", "scanner": "scanner-primary", "fingerprint": "558e8c507096e076", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-281e8c44dc79d308", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (api/contact.js:71)"}, "properties": {"repobilityId": "3d7df548c19588d1", "scanner": "scanner-primary", "fingerprint": "281e8c44dc79d308", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6b32efc2292331d", "level": "error", "message": {"text": "Dangling fetch: GET https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=${videoIdParam}&format=json (api/youtube/live.js:55)"}, "properties": {"repobilityId": "ee8873fabe50f0bd", "scanner": "scanner-primary", "fingerprint": "b6b32efc2292331d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ede8f1e91adffde", "level": "error", "message": {"text": "Dangling fetch: GET https://www.youtube.com/${channelHandle}/live (api/youtube/live.js:83)"}, "properties": {"repobilityId": "e7b0741e810a1a31", "scanner": "scanner-primary", "fingerprint": "2ede8f1e91adffde", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-156f025b041be04b", "level": "error", "message": {"text": "Dangling fetch: GET https://api.eia.gov/v2/seriesid/${seriesId}?api_key=${apiKey}&num=2 (api/eia/[[...path]].js:61)"}, "properties": {"repobilityId": "6c1532f83e68ac5d", "scanner": "scanner-primary", "fingerprint": "156f025b041be04b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a927811c56c38952", "level": "error", "message": {"text": "Dangling fetch: GET https://hn.algolia.com/api/v1/search_by_date?query=${encodeURIComponent(companyName)}&tags=story&hitsPerPage=20&numericFilters=created_at_i>${Math.floor(Date.now() / 1000) - 30 * 86400} (api/enrichment/signals.js:58)"}, "properties": {"repobilityId": "5fb512e46b355109", "scanner": "scanner-primary", "fingerprint": "a927811c56c38952", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4759f2e3c9e727b8", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/orgs/${encodeURIComponent(orgName)}/repos?sort=created&per_page=10 (api/enrichment/signals.js:89)"}, "properties": {"repobilityId": "b19788137e3d77af", "scanner": "scanner-primary", "fingerprint": "4759f2e3c9e727b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c54ebf55bdc52645", "level": "error", "message": {"text": "Dangling fetch: GET https://hn.algolia.com/api/v1/search?query=${encodeURIComponent(companyName)}&tags=comment,ask_hn&hitsPerPage=10&numericFilters=created_at_i>${Math.floor(Date.now() / 1000) - 60 * 86400} (api/enrichment/signals.js:120)"}, "properties": {"repobilityId": "21625eda60c0054d", "scanner": "scanner-primary", "fingerprint": "c54ebf55bdc52645", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5280889484dd5d6d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/orgs/${encodeURIComponent(name)} (api/enrichment/company.js:23)"}, "properties": {"repobilityId": "3d9b1487353a0c0d", "scanner": "scanner-primary", "fingerprint": "5280889484dd5d6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec0d643e7d1788f0", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/orgs/${encodeURIComponent(orgName)}/repos?sort=stars&per_page=10 (api/enrichment/company.js:46)"}, "properties": {"repobilityId": "c64dd1598ea15126", "scanner": "scanner-primary", "fingerprint": "ec0d643e7d1788f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e709d78b5380e2ba", "level": "error", "message": {"text": "Dangling fetch: GET https://efts.sec.gov/LATEST/search-index?q=${encodeURIComponent(companyName)}&dateRange=custom&startdt=${getDateMonthsAgo(6)}&enddt=${getTodayISO()}&forms=10-K,10-Q,8-K&from=0&size=5 (api/enrichment/company.js:72)"}, "properties": {"repobilityId": "4e96941fa302e7e2", "scanner": "scanner-primary", "fingerprint": "e709d78b5380e2ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68cd2ce3c415a56e", "level": "error", "message": {"text": "Dangling fetch: GET https://hn.algolia.com/api/v1/search?query=${encodeURIComponent(companyName)}&tags=story&hitsPerPage=5 (api/enrichment/company.js:97)"}, "properties": {"repobilityId": "b8275a379540268b", "scanner": "scanner-primary", "fingerprint": "68cd2ce3c415a56e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae6fab9cda17c303", "level": "error", "message": {"text": "Dangling fetch: POST https://api.globalping.io/v1/measurements (api/ops/_probe-core.js:190)"}, "properties": {"repobilityId": "fe302142e029f369", "scanner": "scanner-primary", "fingerprint": "ae6fab9cda17c303", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9102623f0c5a1fb2", "level": "error", "message": {"text": "Dangling fetch: GET https://api.globalping.io/v1/measurements/${id} (api/ops/_probe-core.js:216)"}, "properties": {"repobilityId": "73d1cc03add4634c", "scanner": "scanner-primary", "fingerprint": "9102623f0c5a1fb2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-763b009bd2852c46", "level": "error", "message": {"text": "Dangling fetch: GET https://ucdpapi.pcr.uu.se/api/gedevents/${version}?pagesize=${UCDP_PAGE_SIZE}&page=${page} (scripts/seed-ucdp-events.mjs:59)"}, "properties": {"repobilityId": "aca42ce51b654b1b", "scanner": "scanner-primary", "fingerprint": "763b009bd2852c46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c2fd7a03f99474f", "level": "error", "message": {"text": "Dangling fetch: GET https://api.coinpaprika.com/v1/tickers?quotes=USD (scripts/seed-crypto-quotes.mjs:55)"}, "properties": {"repobilityId": "aa91dc76ff5fa329", "scanner": "scanner-primary", "fingerprint": "2c2fd7a03f99474f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2b9444e735972f7", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${PORT}/opensky?${params} (scripts/ais-relay.cjs:2691)"}, "properties": {"repobilityId": "0566e14fa52bea08", "scanner": "scanner-primary", "fingerprint": "b2b9444e735972f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36f048d71f247347", "level": "error", "message": {"text": "Dangling fetch: POST https://customer-api.wingbits.com/v1/flights (scripts/ais-relay.cjs:2731)"}, "properties": {"repobilityId": "f6e7f43da7979e9c", "scanner": "scanner-primary", "fingerprint": "36f048d71f247347", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-acd04a4aa600126a", "level": "error", "message": {"text": "Dangling fetch: GET https://api.weather.gov/alerts/active (scripts/ais-relay.cjs:2884)"}, "properties": {"repobilityId": "6d8615b91675fabd", "scanner": "scanner-primary", "fingerprint": "acd04a4aa600126a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4341c7dcc2726dad", "level": "error", "message": {"text": "Dangling fetch: POST https://api.usaspending.gov/api/v2/search/spending_by_award/ (scripts/ais-relay.cjs:2969)"}, "properties": {"repobilityId": "989f9d34ff923b3b", "scanner": "scanner-primary", "fingerprint": "4341c7dcc2726dad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b300ba542cc6c971", "level": "error", "message": {"text": "Dangling fetch: GET https://ipinfo.io/${encodeURIComponent(ip)}/json (scripts/seed-cyber-threats.mjs:192)"}, "properties": {"repobilityId": "0c069e41f8037dc3", "scanner": "scanner-primary", "fingerprint": "b300ba542cc6c971", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d6fee3dff248a7b", "level": "error", "message": {"text": "Dangling fetch: GET https://freeipapi.com/api/json/${encodeURIComponent(ip)} (scripts/seed-cyber-threats.mjs:206)"}, "properties": {"repobilityId": "6108a9e3fdc68a2a", "scanner": "scanner-primary", "fingerprint": "8d6fee3dff248a7b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe387e5ccbcd620e", "level": "error", "message": {"text": "Dangling fetch: GET https://api.unhcr.org/population/v1/population/?year=${year}&limit=${limit}&page=${page}&coo_all=true&coa_all=true (scripts/seed-displacement-summary.mjs:35)"}, "properties": {"repobilityId": "dbc595984873ec6f", "scanner": "scanner-primary", "fingerprint": "fe387e5ccbcd620e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76e9645607d5a45f", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:239)"}, "properties": {"repobilityId": "2338bc777650fa77", "scanner": "scanner-primary", "fingerprint": "76e9645607d5a45f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97642b1f0b8c2e44", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:245)"}, "properties": {"repobilityId": "c7f3323712ebe12d", "scanner": "scanner-primary", "fingerprint": "97642b1f0b8c2e44", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9563efc3b3a79398", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:251)"}, "properties": {"repobilityId": "82c0b2d6f23c01ae", "scanner": "scanner-primary", "fingerprint": "9563efc3b3a79398", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61e6cf1b44cffad0", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:273)"}, "properties": {"repobilityId": "332c8f0288c88ff6", "scanner": "scanner-primary", "fingerprint": "61e6cf1b44cffad0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55e7a1cb5329367b", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:299)"}, "properties": {"repobilityId": "e699eea5416f159d", "scanner": "scanner-primary", "fingerprint": "55e7a1cb5329367b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c86a0e5ebcb5712", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:303)"}, "properties": {"repobilityId": "fce108db5f5cb604", "scanner": "scanner-primary", "fingerprint": "3c86a0e5ebcb5712", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a321e531c601265", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:348)"}, "properties": {"repobilityId": "ecc78125da0ef310", "scanner": "scanner-primary", "fingerprint": "3a321e531c601265", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b71d18c75c1d480e", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:361)"}, "properties": {"repobilityId": "9eac692af5d44356", "scanner": "scanner-primary", "fingerprint": "b71d18c75c1d480e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6bad6330b8d0beff", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:371)"}, "properties": {"repobilityId": "90dc5a978837222a", "scanner": "scanner-primary", "fingerprint": "6bad6330b8d0beff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ef69d7ba3f1118a", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:391)"}, "properties": {"repobilityId": "ad678b1b19032eb4", "scanner": "scanner-primary", "fingerprint": "5ef69d7ba3f1118a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c741f7f2747469c7", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:401)"}, "properties": {"repobilityId": "d91ca4c957fb6bc3", "scanner": "scanner-primary", "fingerprint": "c741f7f2747469c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf3e2dd52c3a02c8", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:420)"}, "properties": {"repobilityId": "a924cf16f7fdac3e", "scanner": "scanner-primary", "fingerprint": "cf3e2dd52c3a02c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4168e11e70f9e0f2", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${proxyPort}/?url=${encodeURIComponent(feedUrl)} (scripts/ais-relay-rss.test.cjs:433)"}, "properties": {"repobilityId": "0c78ae47266e66fc", "scanner": "scanner-primary", "fingerprint": "4168e11e70f9e0f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86f48b3096aa231f", "level": "error", "message": {"text": "Dangling fetch: GET https://finnhub.io/api/v1/quote?symbol=${encodeURIComponent(s)} (scripts/seed-sectors.mjs:50)"}, "properties": {"repobilityId": "981302d7b1617419", "scanner": "scanner-primary", "fingerprint": "86f48b3096aa231f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4dc6abfeb04de7b9", "level": "error", "message": {"text": "Dangling fetch: GET https://api.coinpaprika.com/v1/tickers?quotes=USD (scripts/seed-stablecoin-markets.mjs:57)"}, "properties": {"repobilityId": "44320f63bfa41183", "scanner": "scanner-primary", "fingerprint": "4dc6abfeb04de7b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be64d0c48cf16476", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/fred-data (src-tauri/sidecar/local-api-server.test.mjs:183)"}, "properties": {"repobilityId": "315c1d8cdfb099a2", "scanner": "scanner-primary", "fingerprint": "be64d0c48cf16476", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-291e0ed09a706a48", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/fred-data (src-tauri/sidecar/local-api-server.test.mjs:218)"}, "properties": {"repobilityId": "2710168edcc7eb78", "scanner": "scanner-primary", "fingerprint": "291e0ed09a706a48", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4fb0756253b650ec", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/post-fail (src-tauri/sidecar/local-api-server.test.mjs:267)"}, "properties": {"repobilityId": "217897564888e764", "scanner": "scanner-primary", "fingerprint": "4fb0756253b650ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8da4940c83c16932", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/live (src-tauri/sidecar/local-api-server.test.mjs:309)"}, "properties": {"repobilityId": "bd5767be558518c4", "scanner": "scanner-primary", "fingerprint": "8da4940c83c16932", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8314e1ec041c48ed", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/not-found (src-tauri/sidecar/local-api-server.test.mjs:334)"}, "properties": {"repobilityId": "4d48a3ffade0ae58", "scanner": "scanner-primary", "fingerprint": "8314e1ec041c48ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9e368d4a00fd4a0", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/origin-check (src-tauri/sidecar/local-api-server.test.mjs:373)"}, "properties": {"repobilityId": "f27cdda67a78740c", "scanner": "scanner-primary", "fingerprint": "f9e368d4a00fd4a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc7e8ad3d7f7aa60", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/request-proxy (src-tauri/sidecar/local-api-server.test.mjs:433)"}, "properties": {"repobilityId": "18e847c51845c426", "scanner": "scanner-primary", "fingerprint": "cc7e8ad3d7f7aa60", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a7ffdb3a5ad6dfa", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/request-consumed (src-tauri/sidecar/local-api-server.test.mjs:485)"}, "properties": {"repobilityId": "00454a2321a236ca", "scanner": "scanner-primary", "fingerprint": "6a7ffdb3a5ad6dfa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40552350317c6d03", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/no-local-handler (src-tauri/sidecar/local-api-server.test.mjs:516)"}, "properties": {"repobilityId": "72374b849e88b854", "scanner": "scanner-primary", "fingerprint": "40552350317c6d03", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8aa77ff1b009aee", "level": "error", "message": {"text": "Dangling fetch: OPTIONS http://127.0.0.1:${port}/api/data (src-tauri/sidecar/local-api-server.test.mjs:548)"}, "properties": {"repobilityId": "a51af8a04a1fb1fe", "scanner": "scanner-primary", "fingerprint": "f8aa77ff1b009aee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-265b20dc789020a1", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/large (src-tauri/sidecar/local-api-server.test.mjs:577)"}, "properties": {"repobilityId": "3f356bfad7e9bf82", "scanner": "scanner-primary", "fingerprint": "265b20dc789020a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-240a1b9a8ff949dc", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/live (src-tauri/sidecar/local-api-server.test.mjs:626)"}, "properties": {"repobilityId": "548ace66949076d9", "scanner": "scanner-primary", "fingerprint": "240a1b9a8ff949dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-caded405e99dc7b0", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:651)"}, "properties": {"repobilityId": "45b365b3c0bd57e4", "scanner": "scanner-primary", "fingerprint": "caded405e99dc7b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc6505c69f85ad91", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:679)"}, "properties": {"repobilityId": "5a5caa56579fa0c2", "scanner": "scanner-primary", "fingerprint": "cc6505c69f85ad91", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8ccc7792d00a3af", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:707)"}, "properties": {"repobilityId": "39c0fa49b67d6ab2", "scanner": "scanner-primary", "fingerprint": "e8ccc7792d00a3af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-843de62b3a4bcfb3", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:743)"}, "properties": {"repobilityId": "a65f6589fd0de7b8", "scanner": "scanner-primary", "fingerprint": "843de62b3a4bcfb3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-59ea0057b6cfb3d3", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:782)"}, "properties": {"repobilityId": "552a14935ea07486", "scanner": "scanner-primary", "fingerprint": "59ea0057b6cfb3d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cdb37a0fb599ef06", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:822)"}, "properties": {"repobilityId": "d5dd84d6e4d48d9d", "scanner": "scanner-primary", "fingerprint": "cdb37a0fb599ef06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-afdaf7a911640831", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:850)"}, "properties": {"repobilityId": "51358e8f6c007d87", "scanner": "scanner-primary", "fingerprint": "afdaf7a911640831", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ade01f698eec57f", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-validate-secret (src-tauri/sidecar/local-api-server.test.mjs:875)"}, "properties": {"repobilityId": "dd6449d9a64d17cb", "scanner": "scanner-primary", "fingerprint": "9ade01f698eec57f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45e60594fb532bc4", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:970)"}, "properties": {"repobilityId": "32f08c485cfc323b", "scanner": "scanner-primary", "fingerprint": "45e60594fb532bc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-edb82702ce6c05ea", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/local-env-update (src-tauri/sidecar/local-api-server.test.mjs:980)"}, "properties": {"repobilityId": "ba3e324af6a269f1", "scanner": "scanner-primary", "fingerprint": "edb82702ce6c05ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53cdec0948ec29bf", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/compression-check (src-tauri/sidecar/local-api-server.test.mjs:1025)"}, "properties": {"repobilityId": "df1d2b19ab74f584", "scanner": "scanner-primary", "fingerprint": "53cdec0948ec29bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-660d3979e562ed63", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/compression-check (src-tauri/sidecar/local-api-server.test.mjs:1066)"}, "properties": {"repobilityId": "c406dff5e14d4f29", "scanner": "scanner-primary", "fingerprint": "660d3979e562ed63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fbd55d94c93e2d8a", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-status (src-tauri/sidecar/local-api-server.test.mjs:1099)"}, "properties": {"repobilityId": "169432c6d6512b71", "scanner": "scanner-primary", "fingerprint": "fbd55d94c93e2d8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bfbf7c1e3afa8d50", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-status (src-tauri/sidecar/local-api-server.test.mjs:1105)"}, "properties": {"repobilityId": "8595c526c7522435", "scanner": "scanner-primary", "fingerprint": "bfbf7c1e3afa8d50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-677a37e8cd77fe0e", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-traffic-log (src-tauri/sidecar/local-api-server.test.mjs:1133)"}, "properties": {"repobilityId": "ff0a7005686ccb9b", "scanner": "scanner-primary", "fingerprint": "677a37e8cd77fe0e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-760fe71f642a2eca", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-debug-toggle (src-tauri/sidecar/local-api-server.test.mjs:1159)"}, "properties": {"repobilityId": "3873b0b61141e169", "scanner": "scanner-primary", "fingerprint": "760fe71f642a2eca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c479156c43b0efdb", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=https://example.com/rss (src-tauri/sidecar/local-api-server.test.mjs:1185)"}, "properties": {"repobilityId": "742b447054bffe00", "scanner": "scanner-primary", "fingerprint": "c479156c43b0efdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef2320f1dcdb92ce", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/service-status (src-tauri/sidecar/local-api-server.test.mjs:1211)"}, "properties": {"repobilityId": "c354ec7b318fbace", "scanner": "scanner-primary", "fingerprint": "ef2320f1dcdb92ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f870743e2f6eeedc", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://127.0.0.1:3000 (src-tauri/sidecar/local-api-server.test.mjs:1237)"}, "properties": {"repobilityId": "b0dbd22fd12d6e4f", "scanner": "scanner-primary", "fingerprint": "f870743e2f6eeedc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-603c98f29abc52ec", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://192.168.1.1/ (src-tauri/sidecar/local-api-server.test.mjs:1259)"}, "properties": {"repobilityId": "62d3a8b4ff49b409", "scanner": "scanner-primary", "fingerprint": "603c98f29abc52ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6eea7e73789a587a", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://10.0.0.1/ (src-tauri/sidecar/local-api-server.test.mjs:1263)"}, "properties": {"repobilityId": "4c85bfd3eaf7a836", "scanner": "scanner-primary", "fingerprint": "6eea7e73789a587a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a178f4de47844f4", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://172.16.0.1/ (src-tauri/sidecar/local-api-server.test.mjs:1267)"}, "properties": {"repobilityId": "f5b92fa9b3e6783e", "scanner": "scanner-primary", "fingerprint": "7a178f4de47844f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c556c915101571b", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=file:///etc/passwd (src-tauri/sidecar/local-api-server.test.mjs:1286)"}, "properties": {"repobilityId": "1e03983d615855c1", "scanner": "scanner-primary", "fingerprint": "1c556c915101571b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-54015e8d8d6e32dd", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/rss-proxy?url=http://user:pass@example.com/rss (src-tauri/sidecar/local-api-server.test.mjs:1307)"}, "properties": {"repobilityId": "2509b20a33d81081", "scanner": "scanner-primary", "fingerprint": "54015e8d8d6e32dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cdca153b86fca3bf", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/test-endpoint?secret=value&key=data (src-tauri/sidecar/local-api-server.test.mjs:1338)"}, "properties": {"repobilityId": "2d4e60d8de587802", "scanner": "scanner-primary", "fingerprint": "cdca153b86fca3bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25750ded4d4fc3fe", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/local-traffic-log (src-tauri/sidecar/local-api-server.test.mjs:1341)"}, "properties": {"repobilityId": "47b6c7f1721f9d6d", "scanner": "scanner-primary", "fingerprint": "25750ded4d4fc3fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f31f99c4d5d99d58", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/service-status (src-tauri/sidecar/local-api-server.test.mjs:1374)"}, "properties": {"repobilityId": "7c5e508ad641604d", "scanner": "scanner-primary", "fingerprint": "f31f99c4d5d99d58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4e34aa8e9603278c", "level": "error", "message": {"text": "Dangling fetch: GET https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfMZg.ttf (blog-site/scripts/generate-og-images.mjs:12)"}, "properties": {"repobilityId": "6848b835877be309", "scanner": "scanner-primary", "fingerprint": "4e34aa8e9603278c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e5b61545340b0d2", "level": "error", "message": {"text": "Dangling fetch: GET https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuFuYMZg.ttf (blog-site/scripts/generate-og-images.mjs:13)"}, "properties": {"repobilityId": "97e929694d703a4f", "scanner": "scanner-primary", "fingerprint": "7e5b61545340b0d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ba08319e1929618", "level": "error", "message": {"text": "Dangling fetch: GET /api/intelligence/v1/get-country-intel-brief?${params.toString()} (src/app/country-intel.ts:399)"}, "properties": {"repobilityId": "38b28ff66374f1a0", "scanner": "scanner-primary", "fingerprint": "7ba08319e1929618", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7fb3144e18d5ca0", "level": "error", "message": {"text": "Dangling fetch: GET https://api.worldmonitor.app/api/version (src/app/desktop-updater.ts:71)"}, "properties": {"repobilityId": "25373bc3b85268e5", "scanner": "scanner-primary", "fingerprint": "d7fb3144e18d5ca0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a42951e6ad259538", "level": "error", "message": {"text": "Dangling fetch: GET /api/news/v1/list-feed-digest?variant=${SITE_VARIANT}&lang=${getCurrentLanguage()} (src/app/data-loader.ts:272)"}, "properties": {"repobilityId": "3b4065f35a3cbd9f", "scanner": "scanner-primary", "fingerprint": "a42951e6ad259538", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f94dd8d77c2e50f8", "level": "error", "message": {"text": "Dangling fetch: GET /api/geo (src/utils/user-location.ts:86)"}, "properties": {"repobilityId": "35305b86236cb967", "scanner": "scanner-primary", "fingerprint": "f94dd8d77c2e50f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6515ef9d43632233", "level": "error", "message": {"text": "Dangling fetch: GET /api/reverse-geocode?lat=${lat}&lon=${lon} (src/utils/reverse-geocode.ts:25)"}, "properties": {"repobilityId": "24bdac8a5ac2cd67", "scanner": "scanner-primary", "fingerprint": "6515ef9d43632233", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a288c9fbd102dda", "level": "error", "message": {"text": "Dangling fetch: GET /api/bootstrap?keys=weatherAlerts (src/services/weather.ts:54)"}, "properties": {"repobilityId": "022ebfe5ad2f99fb", "scanner": "scanner-primary", "fingerprint": "3a288c9fbd102dda", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7cade58a10677709", "level": "error", "message": {"text": "Dangling fetch: GET /api/bootstrap?tier=${tier} (src/services/bootstrap.ts:19)"}, "properties": {"repobilityId": "c9b75e22baeff249", "scanner": "scanner-primary", "fingerprint": "7cade58a10677709", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78e604e89598e661", "level": "error", "message": {"text": "Dangling fetch: GET /api/bootstrap?keys=spending (src/services/usa-spending.ts:46)"}, "properties": {"repobilityId": "8a123a7e12adbd57", "scanner": "scanner-primary", "fingerprint": "78e604e89598e661", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4827c62f32917199", "level": "error", "message": {"text": "Dangling fetch: GET /api/military-flights (src/services/military-flights.ts:72)"}, "properties": {"repobilityId": "9d2bd15d6c357bae", "scanner": "scanner-primary", "fingerprint": "4827c62f32917199", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3bf766398f5e3420", "level": "error", "message": {"text": "Dangling fetch: GET /api/bootstrap?keys=progressData (src/services/progress-data.ts:146)"}, "properties": {"repobilityId": "ee16e66513fc00ea", "scanner": "scanner-primary", "fingerprint": "3bf766398f5e3420", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bfe235e111b1f713", "level": "error", "message": {"text": "Dangling fetch: GET /api/bootstrap?keys=renewableEnergy (src/services/renewable-energy-data.ts:79)"}, "properties": {"repobilityId": "294707fba9be7875", "scanner": "scanner-primary", "fingerprint": "bfe235e111b1f713", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9ea973f4ddac9a8", "level": "error", "message": {"text": "Dangling fetch: GET /api/conflict/v1/list-iran-events?_v=${cacheBust} (src/services/conflict/index.ts:463)"}, "properties": {"repobilityId": "f5ff7de1d8bdc248", "scanner": "scanner-primary", "fingerprint": "d9ea973f4ddac9a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90de60f0456c50c2", "level": "error", "message": {"text": "Dangling fetch: GET /api/bootstrap?keys=techReadiness (src/services/economic/index.ts:500)"}, "properties": {"repobilityId": "84544da4c6daa037", "scanner": "scanner-primary", "fingerprint": "90de60f0456c50c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cda2f32973b51244", "level": "error", "message": {"text": "Dangling fetch: GET https://restcountries.com/v3.1/alpha/${code} (server/worldmonitor/intelligence/v1/get-country-facts.ts:90)"}, "properties": {"repobilityId": "a54603664fc6973b", "scanner": "scanner-primary", "fingerprint": "cda2f32973b51244", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9756a08dd460fdd", "level": "error", "message": {"text": "Dangling fetch: GET https://en.wikipedia.org/api/rest_v1/page/summary/${encoded} (server/worldmonitor/intelligence/v1/get-country-facts.ts:168)"}, "properties": {"repobilityId": "76fbdc519606680c", "scanner": "scanner-primary", "fingerprint": "a9756a08dd460fdd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfcc0f2315e3b6be", "level": "error", "message": {"text": "Dangling fetch: GET https://ucdpapi.pcr.uu.se/api/gedevents/${version}?pagesize=${UCDP_PAGE_SIZE}&page=${page} (server/worldmonitor/conflict/v1/list-ucdp-events.ts:37)"}, "properties": {"repobilityId": "c18a6f3d69c7fbab", "scanner": "scanner-primary", "fingerprint": "cfcc0f2315e3b6be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d38498490310fefc", "level": "error", "message": {"text": "Dangling fetch: GET https://msi.nga.mil/api/publications/broadcast-warn?output=json&status=A (server/worldmonitor/infrastructure/v1/get-cable-health.ts:171)"}, "properties": {"repobilityId": "d1044e2ee3c626eb", "scanner": "scanner-primary", "fingerprint": "d38498490310fefc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c418d0b786ad3be5", "level": "error", "message": {"text": "Dangling fetch: GET https://api.eia.gov${config.apiPath}?${params} (server/worldmonitor/economic/v1/get-energy-prices.ts:58)"}, "properties": {"repobilityId": "4170b0aefd08b5bb", "scanner": "scanner-primary", "fingerprint": "c418d0b786ad3be5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8077a01e4597e70c", "level": "error", "message": {"text": "Dangling fetch: POST https://customer-api.wingbits.com/v1/flights (server/worldmonitor/military/v1/get-theater-posture.ts:130)"}, "properties": {"repobilityId": "a3a3c17ba45dd56a", "scanner": "scanner-primary", "fingerprint": "8077a01e4597e70c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07efa446c48d5076", "level": "error", "message": {"text": "Dangling fetch: GET https://customer-api.wingbits.com/v1/flights/details/${icao24} (server/worldmonitor/military/v1/get-aircraft-details-batch.ts:63)"}, "properties": {"repobilityId": "f1e44c42af4ff137", "scanner": "scanner-primary", "fingerprint": "07efa446c48d5076", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4f2ce04893b07a1", "level": "error", "message": {"text": "Dangling fetch: GET https://customer-api.wingbits.com/v1/flights/details/${icao24} (server/worldmonitor/military/v1/get-aircraft-details.ts:33)"}, "properties": {"repobilityId": "a44eb3538d346eae", "scanner": "scanner-primary", "fingerprint": "f4f2ce04893b07a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7803dcb1b98d3ae7", "level": "error", "message": {"text": "Dangling fetch: GET https://api.unhcr.org/population/v1/population/?year=${year}&limit=${limit}&page=${page}&coo_all=true&coa_all=true (server/worldmonitor/displacement/v1/get-displacement-summary.ts:59)"}, "properties": {"repobilityId": "29906de61e9ae2cd", "scanner": "scanner-primary", "fingerprint": "7803dcb1b98d3ae7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4df65f8e134861d5", "level": "error", "message": {"text": "Dangling fetch: GET https://hacker-news.firebaseio.com/v0/item/${id}.json (server/worldmonitor/research/v1/list-hackernews-items.ts:53)"}, "properties": {"repobilityId": "3f6fc9533e29c96c", "scanner": "scanner-primary", "fingerprint": "4df65f8e134861d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1dca394256ce81cd", "level": "error", "message": {"text": "Dangling fetch: POST https://api.tavily.com/search (server/worldmonitor/market/v1/stock-news-search.ts:168)"}, "properties": {"repobilityId": "db4264dc3e136d00", "scanner": "scanner-primary", "fingerprint": "1dca394256ce81cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-475c8ae6a17f4137", "level": "error", "message": {"text": "Dangling fetch: GET https://api.coinpaprika.com/v1/tickers?quotes=USD (server/worldmonitor/market/v1/_shared.ts:303)"}, "properties": {"repobilityId": "b3e095a4a21e5b58", "scanner": "scanner-primary", "fingerprint": "475c8ae6a17f4137", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9b590d1fdb76382", "level": "error", "message": {"text": "Dangling fetch: GET https://ipinfo.io/${encodeURIComponent(ip)}/json (server/worldmonitor/cyber/v1/_shared.ts:282)"}, "properties": {"repobilityId": "754507167534300b", "scanner": "scanner-primary", "fingerprint": "b9b590d1fdb76382", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc5a8760ccb6dbc2", "level": "error", "message": {"text": "Dangling fetch: GET https://freeipapi.com/api/json/${encodeURIComponent(ip)} (server/worldmonitor/cyber/v1/_shared.ts:302)"}, "properties": {"repobilityId": "dcb99b63c23eeb8d", "scanner": "scanner-primary", "fingerprint": "cc5a8760ccb6dbc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2cfd913eaeffc17", "level": "error", "message": {"text": "Dangling fetch: GET /api/fred-data?series_id=CPIAUCSL (e2e/runtime-fetch.spec.ts:124)"}, "properties": {"repobilityId": "4b4a4dcfd4ba614f", "scanner": "scanner-primary", "fingerprint": "f2cfd913eaeffc17", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec8bc5e42d697574", "level": "error", "message": {"text": "Dangling fetch: GET /api/stablecoin-markets (e2e/runtime-fetch.spec.ts:127)"}, "properties": {"repobilityId": "b0a14b5e0dbfa0b5", "scanner": "scanner-primary", "fingerprint": "ec8bc5e42d697574", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-778674b52b5b862b", "level": "error", "message": {"text": "Dangling fetch: POST /api/local-env-update (e2e/runtime-fetch.spec.ts:208)"}, "properties": {"repobilityId": "898974364316ba3c", "scanner": "scanner-primary", "fingerprint": "778674b52b5b862b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1430eeb4542f96c", "level": "error", "message": {"text": "Dangling fetch: POST /api/local-validate-secret (e2e/runtime-fetch.spec.ts:216)"}, "properties": {"repobilityId": "3257b770ef1b3b7d", "scanner": "scanner-primary", "fingerprint": "f1430eeb4542f96c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0be1ebcce87d65c8", "level": "error", "message": {"text": "Dangling fetch: GET /api/fred-data?series_id=CPIAUCSL (e2e/runtime-fetch.spec.ts:771)"}, "properties": {"repobilityId": "2627e5435b7bdc6d", "scanner": "scanner-primary", "fingerprint": "0be1ebcce87d65c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8015295bdbff8485", "level": "error", "message": {"text": "Dangling fetch: GET /api/market/v1/test (e2e/runtime-fetch.spec.ts:851)"}, "properties": {"repobilityId": "62fd5ff6c9ea2867", "scanner": "scanner-primary", "fingerprint": "8015295bdbff8485", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bfd448d80b4416d3", "level": "note", "message": {"text": "Unused endpoint: GET /api/aviation/v1/list-airport-delays"}, "properties": {"repobilityId": "cf7e59eab7e95fac", "scanner": "scanner-primary", "fingerprint": "bfd448d80b4416d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a1cb2be758005a3b", "level": "note", "message": {"text": "Unused endpoint: GET /api/aviation/v1/get-airport-ops-summary"}, "properties": {"repobilityId": "96d7be414a84f64a", "scanner": "scanner-primary", "fingerprint": "a1cb2be758005a3b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e6b715beb6f49eb", "level": "note", "message": {"text": "Unused endpoint: GET /api/aviation/v1/list-airport-flights"}, "properties": {"repobilityId": "2e9d2e5b55170228", "scanner": "scanner-primary", "fingerprint": "9e6b715beb6f49eb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dc37dd851a7da549", "level": "note", "message": {"text": "Unused endpoint: GET /api/aviation/v1/get-carrier-ops"}, "properties": {"repobilityId": "70f1b6275788a308", "scanner": "scanner-primary", "fingerprint": "dc37dd851a7da549", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-04aae2e542a06c4e", "level": "note", "message": {"text": "Unused endpoint: GET /api/aviation/v1/get-flight-status"}, "properties": {"repobilityId": "1d635e566f1b5704", "scanner": "scanner-primary", "fingerprint": "04aae2e542a06c4e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b23a29112753535", "level": "note", "message": {"text": "Unused endpoint: GET /api/aviation/v1/track-aircraft"}, "properties": {"repobilityId": "53d64966c8ea825d", "scanner": "scanner-primary", "fingerprint": "3b23a29112753535", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b1c6c6e669c804a", "level": "note", "message": {"text": "Unused endpoint: GET /api/aviation/v1/search-flight-prices"}, "properties": {"repobilityId": "4d287a3071238578", "scanner": "scanner-primary", "fingerprint": "4b1c6c6e669c804a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7eb6d897af611912", "level": "note", "message": {"text": "Unused endpoint: GET /api/aviation/v1/list-aviation-news"}, "properties": {"repobilityId": "a775d87f0d0f93a1", "scanner": "scanner-primary", "fingerprint": "7eb6d897af611912", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}