{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdd7765fd24662ec", "name": "Stray `console.log` in TS/JS \u2014 script.js:821", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 script.js:821"}, "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-7e3f46a717320deb", "name": "Stray `console.log` in TS/JS \u2014 api/economic-calendar.js:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/economic-calendar.js:75"}, "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-a5ed3e56759b1056", "name": "Stray `console.log` in TS/JS \u2014 js/mobile-nav.js:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 js/mobile-nav.js:73"}, "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-cfcbe00beff4ec51", "name": "Stray `console.log` in TS/JS \u2014 js/global-header.js:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 js/global-header.js:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66bbdad188d49223", "name": "Stray `console.log` in TS/JS \u2014 js/economic-calendar.js:790", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 js/economic-calendar.js:790"}, "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-87702f87674ba62c", "name": "TODO/FIXME marker in shipping code \u2014 js/market/market-data-provider.js:175", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 js/market/market-data-provider.js:175"}, "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-44a6337e08eb711a", "name": "Stray `console.log` in TS/JS \u2014 tools/build-distribution-plan.js:139", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-distribution-plan.js:139"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-16851c62538620e2", "name": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-secrets.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-secrets.js:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3246bf579209fbf9", "name": "Stray `console.log` in TS/JS \u2014 tools/check-market-outlook-queue.js:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-outlook-queue.js: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-30dd181c492a53cc", "name": "Stray `console.log` in TS/JS \u2014 tools/add-faqpage-schema.js:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/add-faqpage-schema.js: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-3d8d6145ccb9a3a3", "name": "Stray `console.log` in TS/JS \u2014 tools/analyze-regime-transition.js:320", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-regime-transition.js:320"}, "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-0405434eb34d9831", "name": "Stray `console.log` in TS/JS \u2014 tools/build-intraday-brief.js:182", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-intraday-brief.js: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-0228b8ca63e0db40", "name": "Stray `console.log` in TS/JS \u2014 tools/test-economic-calendar-logic.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-economic-calendar-logic.js:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6369c07a4b3b97d8", "name": "Stray `console.log` in TS/JS \u2014 tools/publish-supervised-educational-article.js:223", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/publish-supervised-educational-article.js:223"}, "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-a0c0a72f07a2a980", "name": "Stray `console.log` in TS/JS \u2014 tools/analyze-economic-surprise.js:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-economic-surprise.js: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-28117253240ef583", "name": "Stray `console.log` in TS/JS \u2014 tools/check-social-intelligence.js:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-social-intelligence.js:126"}, "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-3a40e969c1d1e3af", "name": "Stray `console.log` in TS/JS \u2014 tools/build-social-intelligence.js:547", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-social-intelligence.js:547"}, "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-fab5228b431d9e1d", "name": "Stray `console.log` in TS/JS \u2014 tools/extract-market-signals.js:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/extract-market-signals.js:111"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-abda205caef53097", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-authority-hubs.js:761", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-authority-hubs.js:761"}, "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-0f973ab1eb05cd87", "name": "Stray `console.log` in TS/JS \u2014 tools/build-market-narrative-state.js:244", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-narrative-state.js:244"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d0534fc5965217a4", "name": "Stray `console.log` in TS/JS \u2014 tools/check-embedded-charts.js:157", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-embedded-charts.js:157"}, "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-0833fa7fe70a20e4", "name": "Stray `console.log` in TS/JS \u2014 tools/check-indexing-readiness.js:160", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-indexing-readiness.js:160"}, "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-8f65f3f3765e3654", "name": "Stray `console.log` in TS/JS \u2014 tools/check-educational-articles.js:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-articles.js:121"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0eb430fb6313b7df", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-search-index.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-search-index.js:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-61b8bf3b72f33260", "name": "Stray `console.log` in TS/JS \u2014 tools/check-macro-intelligence.js:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-macro-intelligence.js: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-6f79f21f8243305d", "name": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-cadence.js:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-cadence.js:146"}, "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-15f7db8e380be84d", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-research-assets.js:552", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-research-assets.js:552"}, "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-b14b298a0822b5af", "name": "Stray `console.log` in TS/JS \u2014 tools/update-hub-crosslinks.js:237", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-hub-crosslinks.js:237"}, "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-1092ae2ad351b8fa", "name": "Stray `console.log` in TS/JS \u2014 tools/update-homepage-featured.js:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-homepage-featured.js:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85086195f8fbd373", "name": "Stray `console.log` in TS/JS \u2014 tools/check-article-pairs.js:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-article-pairs.js:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b0a952a2a3b7cdf", "name": "Stray `console.log` in TS/JS \u2014 tools/build-global-macro-events.js:158", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-global-macro-events.js:158"}, "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-5ce840712dafa4f2", "name": "Stray `console.log` in TS/JS \u2014 tools/score-generated-content.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/score-generated-content.js:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-262a7a1ba54b1de2", "name": "Stray `console.log` in TS/JS \u2014 tools/score-market-intelligence.js:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/score-market-intelligence.js:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8433414a5764142f", "name": "Stray `console.log` in TS/JS \u2014 tools/check-educational-concept-library.js:282", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-concept-library.js:282"}, "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-0f3b88ffc572480a", "name": "Stray `console.log` in TS/JS \u2014 tools/build-educational-visuals.js:434", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-educational-visuals.js:434"}, "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-dff7ded228733152", "name": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-quality.js:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-quality.js:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a65f857a34e810f3", "name": "Stray `console.log` in TS/JS \u2014 tools/publishing-state-machine.js:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/publishing-state-machine.js:111"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c375198ccfab3046", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-localized-pages.js:149", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-localized-pages.js:149"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b5c1e45647a9dc4", "name": "Stray `console.log` in TS/JS \u2014 tools/check-live-terminal.js:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-live-terminal.js:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5cc720feaaf83a95", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-insights.js:370", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-insights.js:370"}, "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-84bdaf47ac2f75e8", "name": "Stray `console.log` in TS/JS \u2014 tools/apply-market-authority-layer.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/apply-market-authority-layer.js:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0bfa1139621f874d", "name": "Stray `console.log` in TS/JS \u2014 tools/build-narrative-convergence.js:288", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-narrative-convergence.js:288"}, "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-a0d1cce1dee31bea", "name": "Stray `console.log` in TS/JS \u2014 tools/check-market-cognition.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-cognition.js: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-4ac20067f6799f87", "name": "Stray `console.log` in TS/JS \u2014 tools/test-market-cognition-logic.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-market-cognition-logic.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0848ae150dd5738", "name": "Stray `console.log` in TS/JS \u2014 tools/update-content-feeds.js:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-content-feeds.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-364cbd25f70a46ee", "name": "Stray `console.log` in TS/JS \u2014 tools/check-global-macro-acquisition.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-global-macro-acquisition.js:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25e52f24c7ba5ed1", "name": "Stray `console.log` in TS/JS \u2014 tools/check-production-readiness.js:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-production-readiness.js:79"}, "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-888ec7eb6161d48c", "name": "Stray `console.log` in TS/JS \u2014 tools/check-forecast-consensus.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-forecast-consensus.js:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f127967b04847f5", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-editorial-article.js:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-editorial-article.js:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d0b8647f3bb216c", "name": "Stray `console.log` in TS/JS \u2014 tools/repair-orphan-pages.js:291", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/repair-orphan-pages.js:291"}, "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-c865abe676d0d666", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-continuous-intelligence-article.js:493", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-continuous-intelligence-article.js:493"}, "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-b511561331f7f216", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-market-outlook-draft.js:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-outlook-draft.js:54"}, "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-acffc8e57f6e36c0", "name": "Stray `console.log` in TS/JS \u2014 tools/score-autonomous-topic.js:256", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/score-autonomous-topic.js:256"}, "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-bc531c37344ecdc9", "name": "Stray `console.log` in TS/JS \u2014 tools/build-reaction-memory.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-reaction-memory.js:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e754285cd9d540ce", "name": "Stray `console.log` in TS/JS \u2014 tools/phase21-noindex-weak-pages.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/phase21-noindex-weak-pages.js:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e139a139d68e6b60", "name": "Stray `console.log` in TS/JS \u2014 tools/build-market-expectations.js:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-expectations.js:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c277a2660b995bb", "name": "Stray `console.log` in TS/JS \u2014 tools/check-market-news.js:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-news.js:75"}, "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-dde366314a05416e", "name": "Stray `console.log` in TS/JS \u2014 tools/check-economic-calendar-ui.js:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-economic-calendar-ui.js:101"}, "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-23fa9cbdbc820efb", "name": "Stray `console.log` in TS/JS \u2014 tools/build-educational-topics.js:113", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-educational-topics.js:113"}, "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-eb8b901ea1642994", "name": "Stray `console.log` in TS/JS \u2014 tools/build-tactical-context.js:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-tactical-context.js:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bfe90e06726f2584", "name": "Stray `console.log` in TS/JS \u2014 tools/humanize-arabic-market-content.js:271", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/humanize-arabic-market-content.js:271"}, "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-8617f46aa2ac3078", "name": "Stray `console.log` in TS/JS \u2014 tools/check-embedded-intelligence.js:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-embedded-intelligence.js:82"}, "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-fc552baf2774d9d0", "name": "Stray `console.log` in TS/JS \u2014 tools/reconcile-publishing-queues.js:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/reconcile-publishing-queues.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-07f003b2f9995587", "name": "Stray `console.log` in TS/JS \u2014 tools/publishing-lock.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/publishing-lock.js:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d04f863751133c25", "name": "Stray `console.log` in TS/JS \u2014 tools/render-intelligence-feed.js:170", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/render-intelligence-feed.js:170"}, "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-3da80b881ec95aeb", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-continuous-intelligence-topic.js:325", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-continuous-intelligence-topic.js:325"}, "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-012fd3305b36952a", "name": "Stray `console.log` in TS/JS \u2014 tools/test-narrative-convergence-logic.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-narrative-convergence-logic.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c653b9d92c78863", "name": "Stray `console.log` in TS/JS \u2014 tools/fix-encoding-corruption.js:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/fix-encoding-corruption.js: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-aeeb15867413a89a", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-educational-article.js:178", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-educational-article.js:178"}, "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-546f438f35427af1", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-market-news-article.js:508", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-news-article.js:508"}, "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-ef6829cd50052b63", "name": "Stray `console.log` in TS/JS \u2014 tools/check-narrative-realism.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-narrative-realism.js:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b1c17094119ca78", "name": "Stray `console.log` in TS/JS \u2014 tools/check-economic-calendar.js:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-economic-calendar.js: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-46c2d71c33ce9cb2", "name": "Stray `console.log` in TS/JS \u2014 tools/check-responsive-layout.js:190", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-responsive-layout.js:190"}, "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-7f886513f9e32c4b", "name": "Stray `console.log` in TS/JS \u2014 tools/build-run-snapshot.js:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-run-snapshot.js:146"}, "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-fe94aad5e5249343", "name": "Stray `console.log` in TS/JS \u2014 tools/build-market-narrative.js:547", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-narrative.js:547"}, "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-893300e4d08f5844", "name": "Stray `console.log` in TS/JS \u2014 tools/check-intelligence-health.js:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-intelligence-health.js:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc82cfc2afb9102d", "name": "Stray `console.log` in TS/JS \u2014 tools/check-institutional-charts.js:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-institutional-charts.js:120"}, "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-8d60e9f4f1bc0c45", "name": "Stray `console.log` in TS/JS \u2014 tools/test-structural-tension.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-structural-tension.js:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ed04e2750dfb829", "name": "Stray `console.log` in TS/JS \u2014 tools/test-market-intelligence-quality-gates.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-market-intelligence-quality-gates.js:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-87277ca23692aebb", "name": "Stray `console.log` in TS/JS \u2014 tools/build-content-knowledge-graph.js:293", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-content-knowledge-graph.js:293"}, "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-f559b6ae46f7c5b2", "name": "Stray `console.log` in TS/JS \u2014 tools/send-macro-telegram.js:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/send-macro-telegram.js:75"}, "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-b7e89c4d5a8c234d", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-structure-index.js:201", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-structure-index.js:201"}, "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-9e29a77246534bbb", "name": "Stray `console.log` in TS/JS \u2014 tools/check-content-feeds.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-content-feeds.js:25"}, "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-b0963382f84309bc", "name": "Stray `console.log` in TS/JS \u2014 tools/build-rate-path-intelligence.js:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-rate-path-intelligence.js:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-63980de27c9d8d50", "name": "Stray `console.log` in TS/JS \u2014 tools/send-published-article-telegram.js:392", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/send-published-article-telegram.js:392"}, "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-63bdbd0ab17af414", "name": "Stray `console.log` in TS/JS \u2014 tools/update-og-meta.js:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-og-meta.js:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6fc5f40e8fb4c3f4", "name": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-visuals.js:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-visuals.js:83"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7024001c6018fb29", "name": "Stray `console.log` in TS/JS \u2014 tools/check-liquidity-regime.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-liquidity-regime.js:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be89f01948b2fba9", "name": "Stray `console.log` in TS/JS \u2014 tools/autonomous-review-engine.js:478", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/autonomous-review-engine.js:478"}, "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-8b23867c0b4a8f3a", "name": "Stray `console.log` in TS/JS \u2014 tools/detect-content-gaps.js:195", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/detect-content-gaps.js:195"}, "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-f5cdc15060649155", "name": "Stray `console.log` in TS/JS \u2014 tools/check-homepage-intelligence-feed.js:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-homepage-intelligence-feed.js:107"}, "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-a575b4aada8225cc", "name": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-personas.js:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-personas.js:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce2903a3df383004", "name": "Stray `console.log` in TS/JS \u2014 tools/check-social-activation.js:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-social-activation.js:145"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20f4748c847ec244", "name": "Stray `console.log` in TS/JS \u2014 tools/detect-orphan-pages.js:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/detect-orphan-pages.js:119"}, "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-d99b1aa37cffe693", "name": "Stray `console.log` in TS/JS \u2014 tools/check-publishing-safety.js:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-publishing-safety.js:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47a1b6a82ccc7e69", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-articles-index.js:184", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-articles-index.js:184"}, "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-f5080fb91f7ed986", "name": "Stray `console.log` in TS/JS \u2014 tools/analyze-content-clusters.js:180", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-content-clusters.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-dc02b381b429628d", "name": "Stray `console.log` in TS/JS \u2014 tools/publication-transaction.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/publication-transaction.js:74"}, "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-ae183e379dab297e", "name": "Stray `console.log` in TS/JS \u2014 tools/test-platform-relevance.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-platform-relevance.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c37433d25bdb9671", "name": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-conviction.js:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-conviction.js:120"}, "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-185440713ec6b5e1", "name": "Stray `console.log` in TS/JS \u2014 tools/check-related-research.js:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-related-research.js: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-fe34f04f165407ca", "name": "Stray `console.log` in TS/JS \u2014 tools/publish-reviewed-article.js:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/publish-reviewed-article.js: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-64425def2da3360a", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-market-brief.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-brief.js:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d002dbb62760108", "name": "Stray `console.log` in TS/JS \u2014 tools/run-social-approval.js:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/run-social-approval.js: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-2db965643be44376", "name": "Stray `console.log` in TS/JS \u2014 tools/update-editorial-priorities.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-editorial-priorities.js: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-b16beeeea7187e3e", "name": "Stray `console.log` in TS/JS \u2014 tools/phase21-fix-ar-pages.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/phase21-fix-ar-pages.js:23"}, "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-bfa1990a1c5db3d6", "name": "Stray `console.log` in TS/JS \u2014 tools/check-global-header-runtime.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-global-header-runtime.js:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31e54e15fdb304a1", "name": "Stray `console.log` in TS/JS \u2014 tools/build-liquidity-regime.js:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-liquidity-regime.js:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ccdb6ef018726fb", "name": "Stray `console.log` in TS/JS \u2014 tools/build-cross-asset-reaction.js:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-cross-asset-reaction.js:95"}, "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-e364491cc79695f9", "name": "Stray `console.log` in TS/JS \u2014 tools/build-news-eligibility.js:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-news-eligibility.js:112"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d32c9c8a4172675e", "name": "Stray `console.log` in TS/JS \u2014 tools/check-intelligence-productization.js:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-intelligence-productization.js:91"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-efc9c975135b24dc", "name": "Stray `console.log` in TS/JS \u2014 tools/build-macro-cognition.js:502", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-macro-cognition.js:502"}, "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-f4b038c54e9f4363", "name": "Stray `console.log` in TS/JS \u2014 tools/build-social-approval-queue.js:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-social-approval-queue.js:146"}, "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-bc2a3fc289c21906", "name": "Stray `console.log` in TS/JS \u2014 tools/build-editorial-market-memory.js:426", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-editorial-market-memory.js:426"}, "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-c00cb125d461f642", "name": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-delivery-ledger.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-delivery-ledger.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31fb40de3e9e1f59", "name": "Stray `console.log` in TS/JS \u2014 tools/build-institutional-charts.js:427", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-institutional-charts.js:427"}, "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-cbef89e04d6ee5b4", "name": "Stray `console.log` in TS/JS \u2014 tools/build-intelligence-monitor.js:190", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-intelligence-monitor.js:190"}, "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-60ae1c39bf13a8bd", "name": "Stray `console.log` in TS/JS \u2014 tools/check-market-pages.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-pages.js: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-cf59b00d130dce8f", "name": "Stray `console.log` in TS/JS \u2014 tools/test-telegram.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-telegram.js:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f7b233f83bb80cc", "name": "Stray `console.log` in TS/JS \u2014 tools/telegram-backfill.js:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/telegram-backfill.js: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-50e490a0e6bd6424", "name": "Stray `console.log` in TS/JS \u2014 tools/check-language-purity.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-language-purity.js:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b9e3fa43540ea12", "name": "Stray `console.log` in TS/JS \u2014 tools/publishing-control-center.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/publishing-control-center.js:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-276f2b7161a6abe5", "name": "Stray `console.log` in TS/JS \u2014 tools/build-chart-intelligence.js:189", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-chart-intelligence.js:189"}, "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-afb84551da3cf81d", "name": "Stray `console.log` in TS/JS \u2014 tools/apply-global-header.js:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/apply-global-header.js:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f8082fcd31d77ae", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-system-status.js:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-system-status.js:136"}, "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-148f39faed73adc9", "name": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-delivery-preflight.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-delivery-preflight.js:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e90534a68b351547", "name": "Stray `console.log` in TS/JS \u2014 tools/seed-market-outlook-topics.js:204", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/seed-market-outlook-topics.js:204"}, "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-cc7a44e53f90b718", "name": "Stray `console.log` in TS/JS \u2014 tools/check-header-runtime-integrity.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-header-runtime-integrity.js:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-373798262312ea06", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-news-analysis-draft.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-news-analysis-draft.js:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-719c8bdf12d54147", "name": "Stray `console.log` in TS/JS \u2014 tools/check-market-intelligence-quality.js:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-intelligence-quality.js:99"}, "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-65e844e60d173e23", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-market-alerts.js:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-alerts.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-2d1c34d54ccc80eb", "name": "Stray `console.log` in TS/JS \u2014 tools/test-newsroom-behavior.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-newsroom-behavior.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f5e1785357dbcf3", "name": "Stray `console.log` in TS/JS \u2014 tools/build-market-pulse.js:199", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-pulse.js:199"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-508ad3a7a36da09c", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-comparison-pages.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-comparison-pages.js: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-03980bb40075f9b0", "name": "Stray `console.log` in TS/JS \u2014 tools/check-seo-structure.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-seo-structure.js:74"}, "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-040fbc9bed9fe73f", "name": "Stray `console.log` in TS/JS \u2014 tools/verify-publish-integrity.js:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/verify-publish-integrity.js: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-08d04e135311d4e6", "name": "Stray `console.log` in TS/JS \u2014 tools/test-deterministic-routing.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-deterministic-routing.js:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f6a6b5b29dc70bb", "name": "Stray `console.log` in TS/JS \u2014 tools/check-market-outlook-localization.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-outlook-localization.js:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-39de83c56f00f012", "name": "Stray `console.log` in TS/JS \u2014 tools/check-educational-rotation.js:128", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-rotation.js:128"}, "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-4a776b49cac1cf70", "name": "Stray `console.log` in TS/JS \u2014 tools/_fix-serp.js:137", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/_fix-serp.js: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-7392ce0ef934c489", "name": "Stray `console.log` in TS/JS \u2014 tools/check-narrative-convergence.js:100", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-narrative-convergence.js:100"}, "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-0447555f17a195c0", "name": "Stray `console.log` in TS/JS \u2014 tools/build-market-structure.js:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-structure.js:82"}, "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-5e49e3f2ba163d35", "name": "Stray `console.log` in TS/JS \u2014 tools/test-macro-cognition-logic.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-macro-cognition-logic.js:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d073de4127eb0041", "name": "Stray `console.log` in TS/JS \u2014 tools/detect-cross-asset-divergence.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/detect-cross-asset-divergence.js:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-40664d26a8cc85b4", "name": "Stray `console.log` in TS/JS \u2014 tools/send-market-brief.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/send-market-brief.js:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b59740dc976f0b7", "name": "Stray `console.log` in TS/JS \u2014 tools/check-topic-similarity.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-topic-similarity.js:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-881006cfcad4e8a8", "name": "Stray `console.log` in TS/JS \u2014 tools/check-visual-composition.js:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-visual-composition.js:83"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-822e2d79a09d4ab6", "name": "Stray `console.log` in TS/JS \u2014 tools/discover-insight-topics.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/discover-insight-topics.js: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-3df12775d81b88c1", "name": "Stray `console.log` in TS/JS \u2014 tools/check-distribution-plan.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-distribution-plan.js:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46ed765c4f524bba", "name": "Stray `console.log` in TS/JS \u2014 tools/check-macro-cognition.js:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-macro-cognition.js: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-495633c12db8bcbc", "name": "Stray `console.log` in TS/JS \u2014 tools/detect-market-regime.js:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/detect-market-regime.js:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83a2ba74a0391033", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-macro-narrative.js:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-macro-narrative.js:107"}, "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-d6d77a3bfa01db40", "name": "Stray `console.log` in TS/JS \u2014 tools/build-editorial-graphics.js:486", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-editorial-graphics.js:486"}, "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-3d078ed108b9b2f9", "name": "Stray `console.log` in TS/JS \u2014 tools/build-cross-asset-transmission.js:262", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-cross-asset-transmission.js:262"}, "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-5ecda009ef3e86a4", "name": "Stray `console.log` in TS/JS \u2014 tools/autonomous-publishing-brain.js:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/autonomous-publishing-brain.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-17ebf3e9f5e9b9ae", "name": "Stray `console.log` in TS/JS \u2014 tools/repair-utf8-mojibake.js:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/repair-utf8-mojibake.js: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-26c9ae6529a58af3", "name": "Stray `console.log` in TS/JS \u2014 tools/check-macro-reactions.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-macro-reactions.js:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3c22c5f03992570c", "name": "Stray `console.log` in TS/JS \u2014 tools/publish-market-outlook.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/publish-market-outlook.js:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-104425946cbc8b03", "name": "Stray `console.log` in TS/JS \u2014 tools/analyze-internal-authority.js:190", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-internal-authority.js:190"}, "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-b746dd781dd196c6", "name": "Stray `console.log` in TS/JS \u2014 tools/check-research-assets.js:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-research-assets.js:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a988366c58c65ef", "name": "Stray `console.log` in TS/JS \u2014 tools/build-intelligence-briefs.js:330", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-intelligence-briefs.js:330"}, "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-d64c04153838153b", "name": "Stray `console.log` in TS/JS \u2014 tools/check-dashboard-route-dependencies.js:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-dashboard-route-dependencies.js:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f3a459bfb546f03", "name": "Stray `console.log` in TS/JS \u2014 tools/optimize-seo-metadata.js:175", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/optimize-seo-metadata.js:175"}, "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-a609d9bbe66c0229", "name": "Stray `console.log` in TS/JS \u2014 tools/batch-page-updates.js:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/batch-page-updates.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-7126f336b9ef5043", "name": "Stray `console.log` in TS/JS \u2014 tools/ingest-news-sources.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/ingest-news-sources.js:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3acc1a9c2a8331e", "name": "Stray `console.log` in TS/JS \u2014 tools/check-historical-intelligence.js:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-historical-intelligence.js:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-79562066e1b9d7a5", "name": "Stray `console.log` in TS/JS \u2014 tools/build-event-reaction-memory.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-event-reaction-memory.js: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-e7774801db4f9179", "name": "Stray `console.log` in TS/JS \u2014 tools/build-article-pairs.js:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-article-pairs.js:162"}, "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-b19e19454c30e78b", "name": "Stray `console.log` in TS/JS \u2014 tools/check-structure-articles.js:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-structure-articles.js:90"}, "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-fa5526baf7468a23", "name": "Stray `console.log` in TS/JS \u2014 tools/check-tactical-context.js:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-tactical-context.js:96"}, "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-67f350bfcd541cdb", "name": "Stray `console.log` in TS/JS \u2014 tools/repair-editorial-layout.js:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/repair-editorial-layout.js:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd45c9fa99e918c1", "name": "Stray `console.log` in TS/JS \u2014 tools/score-publish-quality.js:297", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/score-publish-quality.js:297"}, "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-c69b147cd6c525b2", "name": "Stray `console.log` in TS/JS \u2014 tools/build-chart-narratives.js:328", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-chart-narratives.js:328"}, "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-350503d3be838b9e", "name": "Stray `console.log` in TS/JS \u2014 tools/check-educational-visuals.js:189", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-visuals.js:189"}, "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-0ce586317ff077f6", "name": "Stray `console.log` in TS/JS \u2014 tools/analyze-seo-performance.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-seo-performance.js:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f6e3ce8e48ea71ff", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-macro-briefing.js:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-macro-briefing.js:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-22f040ffcbc0b42d", "name": "Stray `console.log` in TS/JS \u2014 tools/check-utf8-integrity.js:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-utf8-integrity.js:136"}, "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-9d549678b285bdad", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-intelligent-links.js:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-intelligent-links.js:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ba243ab91bdfbc9", "name": "Stray `console.log` in TS/JS \u2014 tools/test-market-brief-logic.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-market-brief-logic.js:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b2e00e684a9adeac", "name": "Stray `console.log` in TS/JS \u2014 tools/detect-narrative-drift.js:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/detect-narrative-drift.js: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-46480d4afd66ed51", "name": "Stray `console.log` in TS/JS \u2014 tools/build-structural-tension.js:350", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-structural-tension.js:350"}, "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-a4db0db69468ac53", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-ai-editorial-draft.js:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-ai-editorial-draft.js:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca89d36c9af45b4c", "name": "Stray `console.log` in TS/JS \u2014 tools/check-newsroom-ui.js:186", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-newsroom-ui.js:186"}, "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-f38936cfd675827d", "name": "Stray `console.log` in TS/JS \u2014 tools/check-educational-concept-depth.js:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-concept-depth.js: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-4969052fd5a05574", "name": "Stray `console.log` in TS/JS \u2014 tools/check-research-rotation.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-research-rotation.js:25"}, "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-b595be4b331d5e8c", "name": "Stray `console.log` in TS/JS \u2014 tools/check-chart-intelligence.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-chart-intelligence.js:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-62dbf2dc177882b8", "name": "Stray `console.log` in TS/JS \u2014 tools/update-narrative-memory.js:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-narrative-memory.js:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17e9a75270e3eb5d", "name": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-graphics.js:189", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-graphics.js:189"}, "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-6c7801f39ab6aeaf", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-briefs-index.js:180", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-briefs-index.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-1c0df3c1f8ca3836", "name": "Stray `console.log` in TS/JS \u2014 tools/analyze-historical-patterns.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-historical-patterns.js: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-e26dbb02d1964814", "name": "Stray `console.log` in TS/JS \u2014 tools/analyze-seo-topology.js:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-seo-topology.js: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-bf0b909d006ccd00", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-rankings.js:335", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-rankings.js:335"}, "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-21fc0440865c21a7", "name": "Stray `console.log` in TS/JS \u2014 tools/validate-provider-keys.js:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/validate-provider-keys.js:141"}, "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-d2d55ffaa5e7f9d7", "name": "Stray `console.log` in TS/JS \u2014 tools/build-economic-intelligence.js:257", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-economic-intelligence.js:257"}, "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-e46bfa3378ddd5e5", "name": "Stray `console.log` in TS/JS \u2014 tools/sync-bilingual-article-structure.js:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/sync-bilingual-article-structure.js:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a1ae670c529ff46b", "name": "Stray `console.log` in TS/JS \u2014 tools/build-content-roadmap.js:239", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-content-roadmap.js:239"}, "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-7b0f6df96b6b9a0e", "name": "Stray `console.log` in TS/JS \u2014 tools/check-social-meta.js:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-social-meta.js: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-58a03b30c7343af6", "name": "Stray `console.log` in TS/JS \u2014 tools/inject-page-metadata.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/inject-page-metadata.js: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-6a236405324b9e52", "name": "Stray `console.log` in TS/JS \u2014 tools/check-public-surface-discovery.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-public-surface-discovery.js:40"}, "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-a2df0f2e7df10e91", "name": "Stray `console.log` in TS/JS \u2014 tools/check-market-news-articles.js:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-news-articles.js:73"}, "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-89d5d6ceb7b599c2", "name": "Stray `console.log` in TS/JS \u2014 tools/check-bilingual-structure.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-bilingual-structure.js:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb5c0d2c2c4970b7", "name": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-quality-articles.js:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-quality-articles.js: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-76bb6585e9abdc9a", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-seo-sitemaps.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-seo-sitemaps.js: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-1e5902e78e4811eb", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-market-news-index.js:195", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-news-index.js:195"}, "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-1f1b94d412f23ef7", "name": "Stray `console.log` in TS/JS \u2014 tools/check-market-structure.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-structure.js:74"}, "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-b1ba0b22936c4d81", "name": "Stray `console.log` in TS/JS \u2014 tools/check-intelligence-monitor.js:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-intelligence-monitor.js:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-008d1a41138e46fb", "name": "Stray `console.log` in TS/JS \u2014 tools/update-market-intelligence-status.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-market-intelligence-status.js:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5985bae157637445", "name": "Stray `console.log` in TS/JS \u2014 tools/check-graphic-exports.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-graphic-exports.js:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-abbd54f7d250c50b", "name": "Stray `console.log` in TS/JS \u2014 tools/check-featured-content-links.js:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-featured-content-links.js:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5b02918c72bd7d20", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-market-pages.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-pages.js:40"}, "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-2174a79b0cf81211", "name": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-activation.js:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-activation.js:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c37e716fc65dd7b", "name": "Stray `console.log` in TS/JS \u2014 tools/scan-ar-artifacts.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/scan-ar-artifacts.js:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-108a39d078739df3", "name": "Stray `console.log` in TS/JS \u2014 tools/update-market-outlook-publication.js:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-market-outlook-publication.js:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4179b75caefe8a25", "name": "Stray `console.log` in TS/JS \u2014 tools/check-structural-tension.js:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-structural-tension.js:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-94a3b85acc1955f7", "name": "Stray `console.log` in TS/JS \u2014 tools/clean-arabic-market-copy.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/clean-arabic-market-copy.js: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-2920e19ec9ab5b4a", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-article-registry.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-article-registry.js:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-405836303f8393dd", "name": "Stray `console.log` in TS/JS \u2014 tools/check-workflows.js:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-workflows.js:90"}, "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-1047891d8e748cf1", "name": "Stray `console.log` in TS/JS \u2014 tools/telegram-publish-article.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/telegram-publish-article.js:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f2965043037dcca", "name": "Stray `console.log` in TS/JS \u2014 tools/_patch-responsive-css.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/_patch-responsive-css.js:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6b31203976db159", "name": "Stray `console.log` in TS/JS \u2014 tools/add-compare-insights.js:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/add-compare-insights.js:126"}, "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-2c6f99177d983f9d", "name": "Stray `console.log` in TS/JS \u2014 tools/analyze-event-impact.js:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-event-impact.js:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2cda0812762cf7fd", "name": "Stray `console.log` in TS/JS \u2014 tools/build-regime-sequence.js:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-regime-sequence.js:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-19795ec2a82054e6", "name": "Stray `console.log` in TS/JS \u2014 tools/build-graphic-exports.js:104", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-graphic-exports.js:104"}, "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-120dc4551e6e712e", "name": "Stray `console.log` in TS/JS \u2014 tools/authority-expansion-engine.js:363", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/authority-expansion-engine.js:363"}, "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-8914bab8c47ab3bd", "name": "Stray `console.log` in TS/JS \u2014 tools/check-briefs-section.js:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-briefs-section.js: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-99ff370a18342896", "name": "Stray `console.log` in TS/JS \u2014 tools/list-upcoming-publications.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/list-upcoming-publications.js:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c61985a9049c219", "name": "Stray `console.log` in TS/JS \u2014 tools/cleanup-orphan-public-files.js:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/cleanup-orphan-public-files.js:145"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-19c891e63ce6a573", "name": "Stray `console.log` in TS/JS \u2014 tools/update-economic-calendar.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-economic-calendar.js:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-da8101dc0605d8ce", "name": "Stray `console.log` in TS/JS \u2014 tools/update-live-market-state.js:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-live-market-state.js:103"}, "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-58763b3065710d09", "name": "Stray `console.log` in TS/JS \u2014 tools/run-full-market-outlook-pipeline.js:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/run-full-market-outlook-pipeline.js:80"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2bac933189f069eb", "name": "Stray `console.log` in TS/JS \u2014 tools/check-newsroom-intelligence.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-newsroom-intelligence.js:50"}, "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-02fd9af7c311af60", "name": "Stray `console.log` in TS/JS \u2014 tools/check-reading-flow.js:104", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-reading-flow.js:104"}, "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-3fc26f34c7b39848", "name": "Stray `console.log` in TS/JS \u2014 tools/run-insight-pipeline.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/run-insight-pipeline.js:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b30b606c2094ce3a", "name": "Stray `console.log` in TS/JS \u2014 tools/build-etf-flow-intelligence.js:369", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-etf-flow-intelligence.js: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-e63fac3e7ef83011", "name": "Stray `console.log` in TS/JS \u2014 tools/check-ar-rtl.js:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-ar-rtl.js: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-a0513cc91b5c6d9f", "name": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-market-memory.js:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-market-memory.js:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc37466b66af4a6d", "name": "Stray `console.log` in TS/JS \u2014 tools/calculate-market-confidence.js:182", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/calculate-market-confidence.js: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-c47b87c449617418", "name": "Stray `console.log` in TS/JS \u2014 tools/build-newswire-events.js:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-newswire-events.js:185"}, "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-a1c8a74228ce0fe4", "name": "Stray `console.log` in TS/JS \u2014 tools/test-provider-router.js:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-provider-router.js:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aae401c96461a2ae", "name": "Stray `console.log` in TS/JS \u2014 tools/build-market-intelligence-context.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-intelligence-context.js:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-abd0eedfd210967a", "name": "Stray `console.log` in TS/JS \u2014 tools/repair-institutional-depth.js:199", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/repair-institutional-depth.js:199"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b79b792d87c86c00", "name": "Stray `console.log` in TS/JS \u2014 tools/check-continuous-intelligence.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-continuous-intelligence.js:40"}, "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-0ffaad47306c1a48", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-daily-market-outlook.js:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-daily-market-outlook.js:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa04797572e23248", "name": "Stray `console.log` in TS/JS \u2014 tools/internal-link-intelligence.js:271", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/internal-link-intelligence.js:271"}, "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-433607901e89d49e", "name": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-schedule.js:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-schedule.js:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43e15d4f8080638e", "name": "Stray `console.log` in TS/JS \u2014 tools/publish-continuous-intelligence.js:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/publish-continuous-intelligence.js: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-5b44b9d7b486016b", "name": "Stray `console.log` in TS/JS \u2014 tools/run-authority-repair-cycle.js:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/run-authority-repair-cycle.js: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-17ba328969fa264e", "name": "Stray `console.log` in TS/JS \u2014 tools/check-educational-priority.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-priority.js:68"}, "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-bf61412294be3566", "name": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-config.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-config.js:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e3ea560fd064e8ee", "name": "Stray `console.log` in TS/JS \u2014 tools/check-governance.js:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-governance.js: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-9fc641ede43ae45b", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-controlled-insights.js:221", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-controlled-insights.js:221"}, "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-2e1410afcd93fc75", "name": "Stray `console.log` in TS/JS \u2014 tools/check-visual-intelligence.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-visual-intelligence.js: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-73c7778cbbc35d29", "name": "Stray `console.log` in TS/JS \u2014 tools/record-event-reactions.js:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/record-event-reactions.js: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-d6b09dd4efb5b67a", "name": "Stray `console.log` in TS/JS \u2014 tools/self-heal-market-outlook-drafts.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/self-heal-market-outlook-drafts.js: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-6ba92ccad8376ae6", "name": "Stray `console.log` in TS/JS \u2014 tools/build-macro-reactions.js:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-macro-reactions.js:151"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95455b32a5dc6469", "name": "Stray `console.log` in TS/JS \u2014 tools/check-inline-visuals.js:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-inline-visuals.js:83"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dff7893a2078d33c", "name": "Stray `console.log` in TS/JS \u2014 tools/check-global-header-parity.js:104", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-global-header-parity.js:104"}, "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-8c52507fc257fdca", "name": "Stray `console.log` in TS/JS \u2014 tools/render-newsroom-modules.js:1119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/render-newsroom-modules.js:1119"}, "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-f2a5f41a66991b4a", "name": "Stray `console.log` in TS/JS \u2014 tools/check-insight-duplicates.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-insight-duplicates.js: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-5df876cb2463be0b", "name": "Stray `console.log` in TS/JS \u2014 tools/check-upcoming-market-events.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-upcoming-market-events.js:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-391ac275b2c64bbf", "name": "Stray `console.log` in TS/JS \u2014 tools/promote-wire-events.js:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/promote-wire-events.js: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-ec96a4b9fa0d17fa", "name": "Stray `console.log` in TS/JS \u2014 tools/fetch-economic-calendar.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/fetch-economic-calendar.js: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-ad6464c5b316eac3", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-market-intelligence.js:225", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-intelligence.js:225"}, "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-3f76c24a4958c359", "name": "Stray `console.log` in TS/JS \u2014 tools/rebalance-content-topology.js:260", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/rebalance-content-topology.js:260"}, "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-58962928009c1398", "name": "Stray `console.log` in TS/JS \u2014 tools/build-market-cognition.js:578", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-cognition.js:578"}, "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-f22d39ab488932ff", "name": "Stray `console.log` in TS/JS \u2014 tools/update-market-regime.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-market-regime.js:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-420bee448d7297fb", "name": "Stray `console.log` in TS/JS \u2014 tools/check-economic-intelligence.js:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-economic-intelligence.js:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-35c9316a35f333ce", "name": "Stray `console.log` in TS/JS \u2014 tools/test-editorial-market-memory.js:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-editorial-market-memory.js:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a2d45abebd658b4", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-publishing-report.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-publishing-report.js:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bff0101bb378d269", "name": "Stray `console.log` in TS/JS \u2014 tools/check-insight-quality.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-insight-quality.js:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b06ce237e2a4711", "name": "Stray `console.log` in TS/JS \u2014 tools/intelligence/publication-confidence-engine.js:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/intelligence/publication-confidence-engine.js:102"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d3794f8e0eda3fa3", "name": "Stray `console.log` in TS/JS \u2014 tools/intelligence/institutional-reasoning-engine.js:199", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/intelligence/institutional-reasoning-engine.js:199"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e92c0b8224c167b7", "name": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/provider-router.js:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/provider-router.js:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6545df2bb00585a3", "name": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/alphavantage-provider.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/alphavantage-provider.js:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25d420915b34e350", "name": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/schedule-fallback-provider.js:297", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/schedule-fallback-provider.js:297"}, "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-cba85758576657da", "name": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/http-client.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/http-client.js:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4ace060968bb1081", "name": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/fred-provider.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/fred-provider.js:15"}, "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-a67364b60c7b0394", "name": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/finnhub-provider.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/finnhub-provider.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3efb398c1ca3cda6", "name": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/trading-economics-provider.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/trading-economics-provider.js:40"}, "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-83fca552dc182274", "name": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/fmp-provider.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/fmp-provider.js:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ca626cb81a479bb", "name": "TODO/FIXME marker in shipping code \u2014 netlify/functions/providers/polygon.js:2", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 netlify/functions/providers/polygon.js:2"}, "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-1b57d3e11b6539bc", "name": "TODO/FIXME marker in shipping code \u2014 netlify/functions/providers/alpha-vantage.js:2", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 netlify/functions/providers/alpha-vantage.js:2"}, "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-c1228b0712713865", "name": "Insecure pattern 'direct_innerhtml_assignment' in test-i18n.html:68", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in test-i18n.html:68"}, "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-6555bf8bcbb44f4a", "name": "Insecure pattern 'direct_innerhtml_assignment' in rankings.html:1642", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in rankings.html:1642"}, "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-abf182ce4aa6815a", "name": "Insecure pattern 'direct_innerhtml_assignment' in economic-calendar/index.html:413", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in economic-calendar/index.html:413"}, "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-7d91cef40784c5c6", "name": "Insecure pattern 'direct_innerhtml_assignment' in ar/rankings.html:1598", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ar/rankings.html:1598"}, "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-35c73cf90014171e", "name": "Insecure pattern 'direct_innerhtml_assignment' in ar/economic-calendar/index.html:382", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ar/economic-calendar/index.html:382"}, "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-5f2c0930dd37624e", "name": "Insecure pattern 'cors_wildcard' in api/live-quotes.js:247", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/live-quotes.js:247"}, "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-accb23b4049687dd", "name": "Insecure pattern 'cors_wildcard' in api/economic-calendar.js:486", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/economic-calendar.js:486"}, "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-1f259bf7dbcd3e5a", "name": "Insecure pattern 'cors_wildcard' in api/market-data.js:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/market-data.js:12"}, "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-4ca2222a6ed4ff4e", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/mobile-nav.js:42", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/mobile-nav.js:42"}, "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-6ae1d1d0dbd39c55", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/global-header.js:43", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/global-header.js: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-5301f3d86fad8254", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/market-outlook-mobile.js:42", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market-outlook-mobile.js:42"}, "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-4f3e9cd27ad21024", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/search-autocomplete.js:45", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/search-autocomplete.js: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-955f72363d0d0104", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/economic-calendar.js:1185", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/economic-calendar.js:1185"}, "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-345ab262980914c8", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/research-layer.js:116", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/research-layer.js: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-a88476b51c45bd6d", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/related-content.js:577", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/related-content.js:577"}, "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-63205c69420bf6c0", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/qqq-performance.js:33", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/qqq-performance.js:33"}, "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-c53660eebe97cf2d", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/market/ranking-engine.js:181", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/ranking-engine.js: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-ee1ad57e4dfb8ae6", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/market/ui-renderer.js:158", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/ui-renderer.js:158"}, "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-ff809f4f37bd25c6", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/market/recently-viewed.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/recently-viewed.js:35"}, "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-4f694fffd0737a12", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/market/screener-engine.js:16", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/screener-engine.js:16"}, "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-c0adfac24da96a44", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/market/watchlist.js:81", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/watchlist.js:81"}, "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-466c8fdaffcdef41", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/market/market-authority-layer.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/market-authority-layer.js:63"}, "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-c52ce5e36748065f", "name": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/market-intelligence/market-intelligence.js:88", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/market-intelligence/market-intelligence.js:88"}, "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-ead2ba5ab959ff11", "name": "Insecure pattern 'direct_innerhtml_assignment' in en/rankings.html:1397", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in en/rankings.html:1397"}, "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-b3bbc9569cafcd63", "name": "Insecure pattern 'node_child_process' in tools/update-homepage-featured.js:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/update-homepage-featured.js:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-07ca15b5b39a8acc", "name": "Insecure pattern 'node_child_process' in tools/check-article-pairs.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/check-article-pairs.js:5"}, "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-32e1940202937e54", "name": "Insecure pattern 'node_child_process' in tools/generate-insights.js:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/generate-insights.js:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91a29c164ca6cf34", "name": "Insecure pattern 'node_child_process' in tools/check-production-readiness.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/check-production-readiness.js:3"}, "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-256639d2da8a4cff", "name": "Insecure pattern 'node_child_process' in tools/generate-market-outlook-draft.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/generate-market-outlook-draft.js: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-15495ad1803882c2", "name": "Insecure pattern 'node_child_process' in tools/check-economic-calendar.js:248", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/check-economic-calendar.js:248"}, "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-79de8703cac5809e", "name": "Insecure pattern 'node_child_process' in tools/build-run-snapshot.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/build-run-snapshot.js:5"}, "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-c6087cbfe60dc538", "name": "Insecure pattern 'node_child_process' in tools/autonomous-review-engine.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/autonomous-review-engine.js:5"}, "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-e87ef51f506d6e64", "name": "Insecure pattern 'node_child_process' in tools/publish-reviewed-article.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/publish-reviewed-article.js:5"}, "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-ee2fb833a2a30c84", "name": "Insecure pattern 'node_child_process' in tools/telegram-backfill.js:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/telegram-backfill.js:15"}, "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-3efb3d1103a708f2", "name": "Insecure pattern 'node_child_process' in tools/check-telegram-delivery-preflight.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/check-telegram-delivery-preflight.js:3"}, "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-31dd8c78a55b7254", "name": "Insecure pattern 'node_child_process' in tools/autonomous-publishing-brain.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/autonomous-publishing-brain.js:5"}, "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-c289d84fe121f19e", "name": "Insecure pattern 'node_child_process' in tools/repair-utf8-mojibake.js:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/repair-utf8-mojibake.js:4"}, "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-ca4df853b1699aaa", "name": "Insecure pattern 'subprocess_shell_true' in tools/runtime_supervisor.py:209", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in tools/runtime_supervisor.py:209"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-39ee44b18185d317", "name": "Insecure pattern 'node_child_process' in tools/publish-market-outlook.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/publish-market-outlook.js:5"}, "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-0b2b6b8f228ff74b", "name": "Insecure pattern 'node_child_process' in tools/generate-ai-editorial-draft.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/generate-ai-editorial-draft.js:5"}, "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-e9020345787726e8", "name": "Insecure pattern 'direct_innerhtml_assignment' in tools/generate-rankings.js:311", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/generate-rankings.js:311"}, "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-c74b7fd98c7db66b", "name": "Insecure pattern 'node_child_process' in tools/check-telegram-activation.js:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/check-telegram-activation.js:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ceb819339e0d910", "name": "Insecure pattern 'node_child_process' in tools/cleanup-orphan-public-files.js:39", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/cleanup-orphan-public-files.js:39"}, "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-8c161af0f9378290", "name": "Insecure pattern 'node_child_process' in tools/run-full-market-outlook-pipeline.js:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/run-full-market-outlook-pipeline.js:10"}, "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-92b896d954ebb741", "name": "Insecure pattern 'node_child_process' in tools/run-insight-pipeline.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/run-insight-pipeline.js:5"}, "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-89b087d42d4f5077", "name": "Insecure pattern 'node_child_process' in tools/repair-institutional-depth.js:19", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/repair-institutional-depth.js:19"}, "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-a4f35339bc1a83e3", "name": "Insecure pattern 'node_child_process' in tools/run-authority-repair-cycle.js:21", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/run-authority-repair-cycle.js:21"}, "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-913f23913fd76d53", "name": "Insecure pattern 'node_child_process' in tools/self-heal-market-outlook-drafts.js:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/self-heal-market-outlook-drafts.js:17"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6842ecb0fa27c84", "name": "Insecure pattern 'node_child_process' in tools/check-insight-quality.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/check-insight-quality.js:5"}, "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-457a7324c6476138", "name": "Insecure pattern 'cors_wildcard' in netlify/functions/economic-calendar.js:14", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in netlify/functions/economic-calendar.js:14"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4661563c60ba786c", "name": "Insecure pattern 'cors_wildcard' in netlify/functions/market-health.js:107", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in netlify/functions/market-health.js:107"}, "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-d3f2ccda49f38d7a", "name": "Insecure pattern 'cors_wildcard' in netlify/functions/market-data.js:233", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in netlify/functions/market-data.js:233"}, "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-b7ffef7d97526b57", "name": "Insecure pattern 'direct_innerhtml_assignment' in market-intelligence/market-intelligence.js:32", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in market-intelligence/market-intelligence.js:32"}, "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-f4563cdd7e75ba36", "name": "Insecure pattern 'node_child_process' in .github/workflows/autonomous-publishing-brain.yml:130", "shortDescription": {"text": "Insecure pattern 'node_child_process' in .github/workflows/autonomous-publishing-brain.yml:130"}, "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-a7437a09efb7408b", "name": "Insecure pattern 'node_child_process' in .github/workflows/archive/market-outlook-draft-generator.yml:99", "shortDescription": {"text": "Insecure pattern 'node_child_process' in .github/workflows/archive/market-outlook-draft-generator.yml:99"}, "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-d78e8af7cbbd43f5", "name": "Insecure pattern 'node_child_process' in .github/workflows/archive/publishing-control-center.yml:418", "shortDescription": {"text": "Insecure pattern 'node_child_process' in .github/workflows/archive/publishing-control-center.yml:418"}, "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-4931de766b7e6aa9", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-16dfbc28008e6b42", "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-2841d34d4f454230", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-09b6302abafe540a", "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-705ee65ff7d2f397", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-97639e5a8eb556cb", "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-49a412bb45a672f6", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-8a98afa1bfd02819", "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-8a71902814f0cfa6", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-3be53219060659f7", "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-34d6140de154606e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-cec40130a38bbb71", "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-09d0b6c0fd643226", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-d6d9eaf86d7b2761", "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-6a29441ea0ed76f8", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-2400e815ddc89a52", "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-0337ef169040fa5f", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-06c69e121f1b020b", "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-16e5ba266b82d0fb", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-3d8aff5d99dece1e", "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-d060a17e02bdc3e1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-255d4ee7c897409e", "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-1ea6801146c94763", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-2d34959eaf63f881", "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-777d82af992cffe6", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-4dbb78b5a7cd7d75", "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-b4ba0fdad0090c7f", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-d53daad7ca9afdeb", "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-2712af3b2811cc31", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-d364b6ea88e78de2", "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-d00b1ede62ee4968", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-33f80f86a5d5133a", "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-8addc477a4c85b67", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-1b8c6ee3b782a7e7", "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-ea64abb3082fc8be", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-d93489086e39cad6", "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-ab69671c2919e2b9", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-2baefc2192ac02a3", "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-b71b0841e8e203b1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-5a524c959f85a4aa", "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-62c90369510f95f9", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-eec1da637e462d6f", "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-405f67765337735b", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-28286a620c7cd3a8", "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-75f3b2b7ba80e917", "name": "Very large file: script.js (928 lines)", "shortDescription": {"text": "Very large file: script.js (928 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-760d64b787ab6cf5", "name": "Very large file: js/language-router.js (2229 lines)", "shortDescription": {"text": "Very large file: js/language-router.js (2229 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-5dc1db1a19049bc9", "name": "Very large file: js/economic-calendar.js (1641 lines)", "shortDescription": {"text": "Very large file: js/economic-calendar.js (1641 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-5566aa5c44581557", "name": "Very large file: tools/test-economic-calendar-logic.js (1187 lines)", "shortDescription": {"text": "Very large file: tools/test-economic-calendar-logic.js (1187 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-f40938b812be6e25", "name": "Very large file: tools/generate-authority-hubs.js (914 lines)", "shortDescription": {"text": "Very large file: tools/generate-authority-hubs.js (914 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-e11c98b2f7f2cd50", "name": "Very large file: tools/generate-localized-pages.js (1683 lines)", "shortDescription": {"text": "Very large file: tools/generate-localized-pages.js (1683 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-6d3a46849a00694a", "name": "Very large file: tools/generate-market-outlook-draft.js (1291 lines)", "shortDescription": {"text": "Very large file: tools/generate-market-outlook-draft.js (1291 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-1d9baa252fd16f1e", "name": "Very large file: tools/generate-market-news-article.js (901 lines)", "shortDescription": {"text": "Very large file: tools/generate-market-news-article.js (901 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-1e8c21c8f6f006a8", "name": "Very large file: tools/autonomous-publishing-brain.js (2343 lines)", "shortDescription": {"text": "Very large file: tools/autonomous-publishing-brain.js (2343 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-c0a591f62764640d", "name": "Very large file: tools/generate-ai-market-outlook-content.js (1225 lines)", "shortDescription": {"text": "Very large file: tools/generate-ai-market-outlook-content.js (1225 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-be290dc6a704c1fd", "name": "Very large file: tools/render-newsroom-modules.js (1140 lines)", "shortDescription": {"text": "Very large file: tools/render-newsroom-modules.js (1140 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": "13 test file(s) for 372 source file(s) (ratio 0.03). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 1740 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 191 placeholder/mock markers across 41 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, tests, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, tests, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb45f59c769f351c", "name": "Commented-code block (7 lines) in api/live-quotes.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in api/live-quotes.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-415c554ef62dc822", "name": "Commented-code block (5 lines) in api/economic-calendar.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in api/economic-calendar.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58d46652a7dc3ca0", "name": "Commented-code block (8 lines) in js/live-terminal.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in js/live-terminal.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7684b507b5ce4f46", "name": "`fetch()` without try/.catch or AbortSignal \u2014 js/live-terminal.js:192", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 js/live-terminal.js:192"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc7d106570483b67", "name": "Commented-code block (6 lines) in js/editorial-visuals.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in js/editorial-visuals.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4d600498526d5be", "name": "Legacy-named symbol `ta_recently_viewed_v1` in js/market/ui-renderer.js:535", "shortDescription": {"text": "Legacy-named symbol `ta_recently_viewed_v1` in js/market/ui-renderer.js:535"}, "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-f9c3f4e5869187d5", "name": "Legacy-named symbol `ta_recently_viewed_v1` in js/market/recently-viewed.js:1", "shortDescription": {"text": "Legacy-named symbol `ta_recently_viewed_v1` in js/market/recently-viewed.js:1"}, "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-c799c5cbb098675a", "name": "Legacy-named symbol `tradealpha_watchlist_v1` in js/market/watchlist.js:1", "shortDescription": {"text": "Legacy-named symbol `tradealpha_watchlist_v1` in js/market/watchlist.js:1"}, "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-c4f3e3786662d472", "name": "`fetch()` without try/.catch or AbortSignal \u2014 js/market/market-authority-layer.js:129", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 js/market/market-authority-layer.js:129"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-43e8c6521a0abacd", "name": "Commented-code block (7 lines) in tools/build-distribution-plan.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/build-distribution-plan.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-754c4685604751c4", "name": "Legacy-named symbol `highOld` in tools/test-economic-calendar-logic.js:506", "shortDescription": {"text": "Legacy-named symbol `highOld` in tools/test-economic-calendar-logic.js:506"}, "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-b7afd82d8440f4d1", "name": "Commented-code block (5 lines) in tools/build-market-narrative-state.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tools/build-market-narrative-state.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f83797b17e9c54a1", "name": "Commented-code block (16 lines) in tools/check-embedded-charts.js:7", "shortDescription": {"text": "Commented-code block (16 lines) in tools/check-embedded-charts.js:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d295adb46adda421", "name": "Commented-code block (7 lines) in tools/check-educational-articles.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/check-educational-articles.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a68ed2f87cb02048", "name": "Commented-code block (11 lines) in tools/check-editorial-cadence.js:3", "shortDescription": {"text": "Commented-code block (11 lines) in tools/check-editorial-cadence.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9eb5c52b32a1bbbc", "name": "Commented-code block (6 lines) in tools/build-global-macro-events.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/build-global-macro-events.js: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-5e38497ae8d9fd26", "name": "Legacy-named symbol `anti_generic_gate_v2` in tools/check-editorial-quality.js:185", "shortDescription": {"text": "Legacy-named symbol `anti_generic_gate_v2` in tools/check-editorial-quality.js:185"}, "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-b608e7ec1dcb2686", "name": "Commented-code block (7 lines) in tools/check-live-terminal.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/check-live-terminal.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-647ab9b86488b9ad", "name": "Commented-code block (14 lines) in tools/build-narrative-convergence.js:3", "shortDescription": {"text": "Commented-code block (14 lines) in tools/build-narrative-convergence.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5eb6b3148abf7aa", "name": "Commented-code block (8 lines) in tools/check-market-cognition.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tools/check-market-cognition.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdee28c6b76bb1da", "name": "Commented-code block (15 lines) in tools/check-global-macro-acquisition.js:3", "shortDescription": {"text": "Commented-code block (15 lines) in tools/check-global-macro-acquisition.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa220d9ead002a19", "name": "Commented-code block (15 lines) in tools/check-forecast-consensus.js:3", "shortDescription": {"text": "Commented-code block (15 lines) in tools/check-forecast-consensus.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f2ad80563427ab5", "name": "Commented-code block (8 lines) in tools/generate-market-outlook-draft.js:156", "shortDescription": {"text": "Commented-code block (8 lines) in tools/generate-market-outlook-draft.js:156"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a7a61c4fed67bf8", "name": "Commented-code block (6 lines) in tools/check-market-news.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/check-market-news.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-099259bf50a6e6f1", "name": "Commented-code block (13 lines) in tools/check-economic-calendar-ui.js:3", "shortDescription": {"text": "Commented-code block (13 lines) in tools/check-economic-calendar-ui.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4530ad662f4b58c6", "name": "Commented-code block (7 lines) in tools/build-educational-topics.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/build-educational-topics.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88bda8b6f4617d6f", "name": "Commented-code block (5 lines) in tools/build-tactical-context.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in tools/build-tactical-context.js: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-fb090ce3521e648a", "name": "Commented-code block (7 lines) in tools/check-embedded-intelligence.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/check-embedded-intelligence.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-506b70153948c6b7", "name": "Commented-code block (8 lines) in tools/tactical-context-engine.js:5", "shortDescription": {"text": "Commented-code block (8 lines) in tools/tactical-context-engine.js: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-583c056776acd35c", "name": "Commented-code block (10 lines) in tools/render-intelligence-feed.js:5", "shortDescription": {"text": "Commented-code block (10 lines) in tools/render-intelligence-feed.js: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-01b2089f003b5fa7", "name": "Commented-code block (6 lines) in tools/fix-encoding-corruption.js:6", "shortDescription": {"text": "Commented-code block (6 lines) in tools/fix-encoding-corruption.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6c4d962830212ea", "name": "Commented-code block (11 lines) in tools/generate-educational-article.js:5", "shortDescription": {"text": "Commented-code block (11 lines) in tools/generate-educational-article.js: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-657dfa533eefe970", "name": "Commented-code block (6 lines) in tools/render-editorial-visuals.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/render-editorial-visuals.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e43c0b59562b7b57", "name": "Commented-code block (7 lines) in tools/generate-market-news-article.js:5", "shortDescription": {"text": "Commented-code block (7 lines) in tools/generate-market-news-article.js: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-c2d81fd15b908286", "name": "Commented-code block (11 lines) in tools/check-responsive-layout.js:6", "shortDescription": {"text": "Commented-code block (11 lines) in tools/check-responsive-layout.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86b18696df633940", "name": "Commented-code block (8 lines) in tools/check-institutional-charts.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tools/check-institutional-charts.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ab7f28b1199e960", "name": "Commented-code block (5 lines) in tools/institutional-language-filter.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tools/institutional-language-filter.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dbc41e8091c84430", "name": "Commented-code block (6 lines) in tools/send-macro-telegram.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/send-macro-telegram.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7921ffe595f1763f", "name": "Commented-code block (7 lines) in tools/generate-structure-index.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/generate-structure-index.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-465a3a7b4253f129", "name": "Commented-code block (5 lines) in tools/build-rate-path-intelligence.js:7", "shortDescription": {"text": "Commented-code block (5 lines) in tools/build-rate-path-intelligence.js:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-102d8305c2983c83", "name": "Commented-code block (9 lines) in tools/check-editorial-visuals.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tools/check-editorial-visuals.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e48f498a42e70c2e", "name": "Commented-code block (14 lines) in tools/check-liquidity-regime.js:3", "shortDescription": {"text": "Commented-code block (14 lines) in tools/check-liquidity-regime.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-656128c39a881ed6", "name": "Commented-code block (6 lines) in tools/check-homepage-intelligence-feed.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/check-homepage-intelligence-feed.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f319b6a693cd9a7", "name": "Commented-code block (5 lines) in tools/check-editorial-personas.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tools/check-editorial-personas.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c35e81bbde0a661", "name": "Commented-code block (11 lines) in tools/check-social-activation.js:3", "shortDescription": {"text": "Commented-code block (11 lines) in tools/check-social-activation.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5aceb5532ac563e2", "name": "Commented-code block (7 lines) in tools/generate-daily-research-note.js:5", "shortDescription": {"text": "Commented-code block (7 lines) in tools/generate-daily-research-note.js: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-9a552a17f1c24d69", "name": "Commented-code block (8 lines) in tools/generate-articles-index.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tools/generate-articles-index.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a8f648be23ef06c", "name": "Commented-code block (5 lines) in tools/check-editorial-conviction.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tools/check-editorial-conviction.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4c5c431032dd7a3", "name": "Commented-code block (9 lines) in tools/check-related-research.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tools/check-related-research.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53af21ff3808dc41", "name": "Commented-code block (5 lines) in tools/generate-market-brief.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tools/generate-market-brief.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90baf6094a5f9d36", "name": "Commented-code block (9 lines) in tools/run-social-approval.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in tools/run-social-approval.js: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-495709d9135834ac", "name": "Commented-code block (6 lines) in tools/build-liquidity-regime.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/build-liquidity-regime.js: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-17e3811052736977", "name": "Commented-code block (7 lines) in tools/build-news-eligibility.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/build-news-eligibility.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7424c894479713fb", "name": "Commented-code block (8 lines) in tools/build-macro-cognition.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tools/build-macro-cognition.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9fd5858c4e39ae2c", "name": "Commented-code block (6 lines) in tools/build-social-approval-queue.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/build-social-approval-queue.js: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-f7865761035cef17", "name": "Commented-code block (6 lines) in tools/build-intelligence-monitor.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/build-intelligence-monitor.js: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-9920a8af4f221ef1", "name": "Commented-code block (7 lines) in tools/build-chart-intelligence.js:5", "shortDescription": {"text": "Commented-code block (7 lines) in tools/build-chart-intelligence.js: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-a127c48f73c27493", "name": "Commented-code block (5 lines) in tools/apply-global-header.js:76", "shortDescription": {"text": "Commented-code block (5 lines) in tools/apply-global-header.js:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c6a0b0de24456b3", "name": "Commented-code block (7 lines) in tools/build-market-pulse.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/build-market-pulse.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80d2b47e2e640cb3", "name": "Commented-code block (6 lines) in tools/analyst-voice-engine.js:176", "shortDescription": {"text": "Commented-code block (6 lines) in tools/analyst-voice-engine.js:176"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f45daac2830cd2ce", "name": "Commented-code block (5 lines) in tools/verify-publish-integrity.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in tools/verify-publish-integrity.js: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-8ec06049b0548ded", "name": "Commented-code block (6 lines) in tools/reaction-intelligence.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/reaction-intelligence.js: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-f5c6fd54b746c6c8", "name": "Commented-code block (8 lines) in tools/check-educational-rotation.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tools/check-educational-rotation.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a40c802ba6651c1a", "name": "Commented-code block (7 lines) in tools/check-narrative-convergence.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/check-narrative-convergence.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d151cebeb56776eb", "name": "Commented-code block (6 lines) in tools/build-market-structure.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/build-market-structure.js: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-8f9a1a20fe44176a", "name": "Commented-code block (5 lines) in tools/test-macro-cognition-logic.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tools/test-macro-cognition-logic.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3ceb01a1fd3397a", "name": "Commented-code block (9 lines) in tools/check-visual-composition.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tools/check-visual-composition.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6c1e92eaaf44e66", "name": "Commented-code block (9 lines) in tools/check-distribution-plan.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tools/check-distribution-plan.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b13c24c3daeb8a68", "name": "Commented-code block (5 lines) in tools/editorial-visual-contracts.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in tools/editorial-visual-contracts.js: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-cb4b75f67b4f924c", "name": "Commented-code block (8 lines) in tools/check-macro-cognition.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tools/check-macro-cognition.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32ac4a245ffce9e4", "name": "Commented-code block (6 lines) in tools/detect-market-regime.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/detect-market-regime.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1c1ac56216af828", "name": "Commented-code block (6 lines) in tools/generate-macro-narrative.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/generate-macro-narrative.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-973c5af8e30d62e6", "name": "Commented-code block (5 lines) in tools/autonomous-publishing-brain.js:476", "shortDescription": {"text": "Commented-code block (5 lines) in tools/autonomous-publishing-brain.js:476"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f553e21a4c511c1", "name": "Commented-code block (15 lines) in tools/check-macro-reactions.js:3", "shortDescription": {"text": "Commented-code block (15 lines) in tools/check-macro-reactions.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a90e0eb0649c28c", "name": "Network/subprocess call without timeout or try/except \u2014 tools/runtime_supervisor.py:212", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/runtime_supervisor.py:212"}, "fullDescription": {"text": "`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac599e4687d893cf", "name": "Commented-code block (7 lines) in tools/generate-structure-note.js:5", "shortDescription": {"text": "Commented-code block (7 lines) in tools/generate-structure-note.js: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-a9f37f61cf637ed3", "name": "Commented-code block (5 lines) in tools/build-event-reaction-memory.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tools/build-event-reaction-memory.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f89b5de0ed8f928", "name": "Commented-code block (9 lines) in tools/check-structure-articles.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tools/check-structure-articles.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-133e74711e550599", "name": "Commented-code block (6 lines) in tools/platform-relevance.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/platform-relevance.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04caa3635c82e4f8", "name": "Commented-code block (6 lines) in tools/visual-quality.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/visual-quality.js: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-f0c26042a86ad7f7", "name": "Commented-code block (12 lines) in tools/check-tactical-context.js:3", "shortDescription": {"text": "Commented-code block (12 lines) in tools/check-tactical-context.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-809b77c0fdff7ed6", "name": "Commented-code block (7 lines) in tools/build-chart-narratives.js:9", "shortDescription": {"text": "Commented-code block (7 lines) in tools/build-chart-narratives.js:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32288047e87c8828", "name": "Commented-code block (6 lines) in tools/check-newsroom-ui.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/check-newsroom-ui.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f55317add0f7c565", "name": "Commented-code block (8 lines) in tools/check-educational-concept-depth.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tools/check-educational-concept-depth.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f30f59468588030", "name": "Commented-code block (7 lines) in tools/check-research-rotation.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/check-research-rotation.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab44962506cc2510", "name": "Commented-code block (9 lines) in tools/check-chart-intelligence.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tools/check-chart-intelligence.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4130a979eb965a35", "name": "Commented-code block (7 lines) in tools/check-editorial-graphics.js:122", "shortDescription": {"text": "Commented-code block (7 lines) in tools/check-editorial-graphics.js: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-f16b8f32aff12ba1", "name": "Commented-code block (9 lines) in tools/generate-briefs-index.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tools/generate-briefs-index.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2db69f85dbacc1fb", "name": "Commented-code block (5 lines) in tools/editorial-quality.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in tools/editorial-quality.js: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-eae301b073afe0cd", "name": "Commented-code block (9 lines) in tools/market-structure-engine.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in tools/market-structure-engine.js: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-7316f7d9f27048ef", "name": "Commented-code block (5 lines) in tools/build-economic-intelligence.js:10", "shortDescription": {"text": "Commented-code block (5 lines) in tools/build-economic-intelligence.js:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c57b38ebc5bf42a2", "name": "Commented-code block (5 lines) in tools/sync-bilingual-article-structure.js:7", "shortDescription": {"text": "Commented-code block (5 lines) in tools/sync-bilingual-article-structure.js:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3f0cdce412917dd", "name": "Commented-code block (6 lines) in tools/check-market-news-articles.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/check-market-news-articles.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b73352acd6be19bf", "name": "Commented-code block (6 lines) in tools/forecast-consensus.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/forecast-consensus.js: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-5c38a50d61d4ff23", "name": "Commented-code block (5 lines) in tools/check-bilingual-structure.js:7", "shortDescription": {"text": "Commented-code block (5 lines) in tools/check-bilingual-structure.js:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4fd48caf3a0b9fba", "name": "Commented-code block (7 lines) in tools/check-editorial-quality-articles.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/check-editorial-quality-articles.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4711c67e7f31b42f", "name": "Commented-code block (7 lines) in tools/generate-market-news-index.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/generate-market-news-index.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0c322da75671d97", "name": "Commented-code block (9 lines) in tools/check-market-structure.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tools/check-market-structure.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-317b964c2381fcd4", "name": "Commented-code block (11 lines) in tools/check-intelligence-monitor.js:3", "shortDescription": {"text": "Commented-code block (11 lines) in tools/check-intelligence-monitor.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44aba3a75aed7aa5", "name": "Commented-code block (10 lines) in tools/check-graphic-exports.js:3", "shortDescription": {"text": "Commented-code block (10 lines) in tools/check-graphic-exports.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd7524cac6bf4e8f", "name": "Commented-code block (8 lines) in tools/check-telegram-activation.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tools/check-telegram-activation.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4b197be7b382b62", "name": "Commented-code block (7 lines) in tools/generate-ai-market-outlook-content.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/generate-ai-market-outlook-content.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ca139f2825f85a5", "name": "Commented-code block (8 lines) in tools/check-workflows.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tools/check-workflows.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8cd0ecf8bb91048b", "name": "Commented-code block (13 lines) in tools/educational-priority.js:5", "shortDescription": {"text": "Commented-code block (13 lines) in tools/educational-priority.js: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-5512419358edeb4e", "name": "Commented-code block (5 lines) in tools/build-graphic-exports.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in tools/build-graphic-exports.js: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-bed2c99619ed67e6", "name": "Commented-code block (9 lines) in tools/check-briefs-section.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tools/check-briefs-section.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37fdbeb13c06d465", "name": "Commented-code block (6 lines) in tools/update-live-market-state.js:7", "shortDescription": {"text": "Commented-code block (6 lines) in tools/update-live-market-state.js:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25fd5f9934419181", "name": "Commented-code block (5 lines) in tools/check-newsroom-intelligence.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tools/check-newsroom-intelligence.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0751472eee0729b", "name": "Commented-code block (8 lines) in tools/check-reading-flow.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tools/check-reading-flow.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed40996938f71a3c", "name": "Commented-code block (6 lines) in tools/regime-intelligence.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/regime-intelligence.js: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-ad3d5db76254dc7c", "name": "Commented-code block (5 lines) in tools/generate-daily-market-outlook.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tools/generate-daily-market-outlook.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-221f461b450145cb", "name": "Commented-code block (7 lines) in tools/check-educational-priority.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/check-educational-priority.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c18026b42c4528db", "name": "Commented-code block (6 lines) in tools/check-governance.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/check-governance.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb44f21bc21f8cd9", "name": "Commented-code block (7 lines) in tools/record-event-reactions.js:6", "shortDescription": {"text": "Commented-code block (7 lines) in tools/record-event-reactions.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b6d1b9e80e4fb26", "name": "Commented-code block (9 lines) in tools/self-heal-market-outlook-drafts.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tools/self-heal-market-outlook-drafts.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bf505f8df088125", "name": "Commented-code block (7 lines) in tools/build-macro-reactions.js:5", "shortDescription": {"text": "Commented-code block (7 lines) in tools/build-macro-reactions.js: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-dd2beacb767b31ff", "name": "Commented-code block (7 lines) in tools/check-inline-visuals.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/check-inline-visuals.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7de2562133210a0f", "name": "Commented-code block (6 lines) in tools/render-newsroom-modules.js:7", "shortDescription": {"text": "Commented-code block (6 lines) in tools/render-newsroom-modules.js:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4747acfbfa91c5c0", "name": "Commented-code block (6 lines) in tools/promote-wire-events.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/promote-wire-events.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b58d2b306a6869a", "name": "Commented-code block (10 lines) in tools/build-market-cognition.js:3", "shortDescription": {"text": "Commented-code block (10 lines) in tools/build-market-cognition.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25f36f0c35612dc7", "name": "Commented-code block (15 lines) in tools/check-economic-intelligence.js:3", "shortDescription": {"text": "Commented-code block (15 lines) in tools/check-economic-intelligence.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ac66d013aff6fcd", "name": "Commented-code block (5 lines) in tools/providers/economic-calendar/series-map.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in tools/providers/economic-calendar/series-map.js: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-f42756f375c14526", "name": "Commented-code block (6 lines) in tools/providers/economic-calendar/forecast-providers.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/providers/economic-calendar/forecast-providers.js: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-16a800535968834a", "name": "Commented-code block (13 lines) in tools/providers/economic-calendar/schedule-fallback-provider.js:8", "shortDescription": {"text": "Commented-code block (13 lines) in tools/providers/economic-calendar/schedule-fallback-provider.js: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-897270b38d62c11c", "name": "Commented-code block (5 lines) in tools/providers/economic-calendar/official-series.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in tools/providers/economic-calendar/official-series.js: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-1b683bff0ffde997", "name": "Commented-code block (6 lines) in tools/providers/economic-calendar/trading-economics-provider.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tools/providers/economic-calendar/trading-economics-provider.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9df889691a5ebc4", "name": "Commented-code block (6 lines) in tools/providers/economic-calendar/sources/global-release-schedule.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tools/providers/economic-calendar/sources/global-release-schedule.js: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-4157ac6cb2861b34", "name": "Commented-code block (7 lines) in tools/providers/economic-calendar/sources/central-bank-schedule.js:5", "shortDescription": {"text": "Commented-code block (7 lines) in tools/providers/economic-calendar/sources/central-bank-schedule.js: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-a4dc2daabaaa207e", "name": "Commented-code block (7 lines) in tools/providers/market-brief/directional-bias.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tools/providers/market-brief/directional-bias.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c0fb8482ea63c6dc", "name": "Commented-code block (5 lines) in tools/providers/market-brief/historical-tracker.js:25", "shortDescription": {"text": "Commented-code block (5 lines) in tools/providers/market-brief/historical-tracker.js:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c9418b3c4ac4ff8", "name": "Commented-code block (5 lines) in tools/social/social-flags.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in tools/social/social-flags.js: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-94aefe489b04fa59", "name": "Commented-code block (5 lines) in tools/social/social-ledger.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in tools/social/social-ledger.js: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-cb66d262c66c6499", "name": "Commented-code block (10 lines) in tools/social/adapters/base-adapter.js:5", "shortDescription": {"text": "Commented-code block (10 lines) in tools/social/adapters/base-adapter.js: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-5fa5af25316da646", "name": "16 env vars used in code but missing from .env.example", "shortDescription": {"text": "16 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ALPHAVANTAGE_API_KEY`, `CONTENT_TYPE`, `DEBUG`, `FINANCIAL_MODELING_PREP_API_KEY`, `FMP_API_KEY`, `FRED_API_KEY`, `GITHUB_RUN_ID`, `MODE` + 8 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ntools/startup_health_check.py:now_iso, tools/runtime_supervisor.py:now_iso\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/19822"}, "properties": {"repository": "SkybridgeFlights/TradeAlphaAI", "repoUrl": "https://github.com/SkybridgeFlights/TradeAlphaAI", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-cdd7765fd24662ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 script.js:821"}, "properties": {"repobilityId": "124bba370bb38401", "scanner": "scanner-primary", "fingerprint": "cdd7765fd24662ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7e3f46a717320deb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/economic-calendar.js:75"}, "properties": {"repobilityId": "3e4f1b2cb1982dae", "scanner": "scanner-primary", "fingerprint": "7e3f46a717320deb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5ed3e56759b1056", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 js/mobile-nav.js:73"}, "properties": {"repobilityId": "cf7f1674dd4dc0e8", "scanner": "scanner-primary", "fingerprint": "a5ed3e56759b1056", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cfcbe00beff4ec51", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 js/global-header.js:76"}, "properties": {"repobilityId": "5f2b5fa85c823a80", "scanner": "scanner-primary", "fingerprint": "cfcbe00beff4ec51", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-66bbdad188d49223", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 js/economic-calendar.js:790"}, "properties": {"repobilityId": "bc167776e0c14864", "scanner": "scanner-primary", "fingerprint": "66bbdad188d49223", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-87702f87674ba62c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 js/market/market-data-provider.js:175"}, "properties": {"repobilityId": "853d8954e63df8f9", "scanner": "scanner-primary", "fingerprint": "87702f87674ba62c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-44a6337e08eb711a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-distribution-plan.js:139"}, "properties": {"repobilityId": "319038c1556e5902", "scanner": "scanner-primary", "fingerprint": "44a6337e08eb711a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-16851c62538620e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-secrets.js:27"}, "properties": {"repobilityId": "3e10456ac438121f", "scanner": "scanner-primary", "fingerprint": "16851c62538620e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3246bf579209fbf9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-outlook-queue.js:61"}, "properties": {"repobilityId": "cf6e9ebe77fddd8b", "scanner": "scanner-primary", "fingerprint": "3246bf579209fbf9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30dd181c492a53cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/add-faqpage-schema.js:55"}, "properties": {"repobilityId": "2e695b1f8b2e1a13", "scanner": "scanner-primary", "fingerprint": "30dd181c492a53cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d8d6145ccb9a3a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-regime-transition.js:320"}, "properties": {"repobilityId": "bbb7d98b008dbe99", "scanner": "scanner-primary", "fingerprint": "3d8d6145ccb9a3a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0405434eb34d9831", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-intraday-brief.js:182"}, "properties": {"repobilityId": "9c8d05d23df26b04", "scanner": "scanner-primary", "fingerprint": "0405434eb34d9831", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0228b8ca63e0db40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-economic-calendar-logic.js:27"}, "properties": {"repobilityId": "b4cf47e19b85d840", "scanner": "scanner-primary", "fingerprint": "0228b8ca63e0db40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6369c07a4b3b97d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/publish-supervised-educational-article.js:223"}, "properties": {"repobilityId": "8395712e4ce32c94", "scanner": "scanner-primary", "fingerprint": "6369c07a4b3b97d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0c0a72f07a2a980", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-economic-surprise.js:58"}, "properties": {"repobilityId": "ec8047318ef0bbf5", "scanner": "scanner-primary", "fingerprint": "a0c0a72f07a2a980", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-28117253240ef583", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-social-intelligence.js:126"}, "properties": {"repobilityId": "cad9221b28688efb", "scanner": "scanner-primary", "fingerprint": "28117253240ef583", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a40e969c1d1e3af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-social-intelligence.js:547"}, "properties": {"repobilityId": "35f7646dd6b979a0", "scanner": "scanner-primary", "fingerprint": "3a40e969c1d1e3af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fab5228b431d9e1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/extract-market-signals.js:111"}, "properties": {"repobilityId": "554d6ec02681e7a6", "scanner": "scanner-primary", "fingerprint": "fab5228b431d9e1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abda205caef53097", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-authority-hubs.js:761"}, "properties": {"repobilityId": "8a13e7e53bbe42ee", "scanner": "scanner-primary", "fingerprint": "abda205caef53097", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0f973ab1eb05cd87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-narrative-state.js:244"}, "properties": {"repobilityId": "2937a6515fde5b02", "scanner": "scanner-primary", "fingerprint": "0f973ab1eb05cd87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0534fc5965217a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-embedded-charts.js:157"}, "properties": {"repobilityId": "58a22d465177d257", "scanner": "scanner-primary", "fingerprint": "d0534fc5965217a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0833fa7fe70a20e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-indexing-readiness.js:160"}, "properties": {"repobilityId": "b258d8307e43d585", "scanner": "scanner-primary", "fingerprint": "0833fa7fe70a20e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f65f3f3765e3654", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-articles.js:121"}, "properties": {"repobilityId": "c1917af17ae71f62", "scanner": "scanner-primary", "fingerprint": "8f65f3f3765e3654", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0eb430fb6313b7df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-search-index.js:49"}, "properties": {"repobilityId": "394bf87f335e73bf", "scanner": "scanner-primary", "fingerprint": "0eb430fb6313b7df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61b8bf3b72f33260", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-macro-intelligence.js:86"}, "properties": {"repobilityId": "5eeaea6c36feb709", "scanner": "scanner-primary", "fingerprint": "61b8bf3b72f33260", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f79f21f8243305d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-cadence.js:146"}, "properties": {"repobilityId": "536d5b5c26054f76", "scanner": "scanner-primary", "fingerprint": "6f79f21f8243305d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-15f7db8e380be84d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-research-assets.js:552"}, "properties": {"repobilityId": "042d4da121f71ab3", "scanner": "scanner-primary", "fingerprint": "15f7db8e380be84d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b14b298a0822b5af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-hub-crosslinks.js:237"}, "properties": {"repobilityId": "1574dde01aed0168", "scanner": "scanner-primary", "fingerprint": "b14b298a0822b5af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1092ae2ad351b8fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-homepage-featured.js:41"}, "properties": {"repobilityId": "6e0f4ccbd75d853b", "scanner": "scanner-primary", "fingerprint": "1092ae2ad351b8fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-85086195f8fbd373", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-article-pairs.js:38"}, "properties": {"repobilityId": "013462e925b13c41", "scanner": "scanner-primary", "fingerprint": "85086195f8fbd373", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9b0a952a2a3b7cdf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-global-macro-events.js:158"}, "properties": {"repobilityId": "d8458a4ff135e4e8", "scanner": "scanner-primary", "fingerprint": "9b0a952a2a3b7cdf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ce840712dafa4f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/score-generated-content.js:17"}, "properties": {"repobilityId": "9838243131fb3d9d", "scanner": "scanner-primary", "fingerprint": "5ce840712dafa4f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-262a7a1ba54b1de2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/score-market-intelligence.js:35"}, "properties": {"repobilityId": "8b0d22f80bdd8f63", "scanner": "scanner-primary", "fingerprint": "262a7a1ba54b1de2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8433414a5764142f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-concept-library.js:282"}, "properties": {"repobilityId": "bfcfc5dfe396867c", "scanner": "scanner-primary", "fingerprint": "8433414a5764142f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0f3b88ffc572480a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-educational-visuals.js:434"}, "properties": {"repobilityId": "ba624bed5c8158a0", "scanner": "scanner-primary", "fingerprint": "0f3b88ffc572480a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dff7ded228733152", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-quality.js:30"}, "properties": {"repobilityId": "f4181db464884689", "scanner": "scanner-primary", "fingerprint": "dff7ded228733152", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a65f857a34e810f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/publishing-state-machine.js:111"}, "properties": {"repobilityId": "6bc4b4af9778476a", "scanner": "scanner-primary", "fingerprint": "a65f857a34e810f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c375198ccfab3046", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-localized-pages.js:149"}, "properties": {"repobilityId": "c96ddd26b514a3c2", "scanner": "scanner-primary", "fingerprint": "c375198ccfab3046", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b5c1e45647a9dc4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-live-terminal.js:41"}, "properties": {"repobilityId": "05b651aad446d80c", "scanner": "scanner-primary", "fingerprint": "7b5c1e45647a9dc4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5cc720feaaf83a95", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-insights.js:370"}, "properties": {"repobilityId": "e873bed7801c1c62", "scanner": "scanner-primary", "fingerprint": "5cc720feaaf83a95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84bdaf47ac2f75e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/apply-market-authority-layer.js:39"}, "properties": {"repobilityId": "d8b414cc7cfb9bf8", "scanner": "scanner-primary", "fingerprint": "84bdaf47ac2f75e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0bfa1139621f874d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-narrative-convergence.js:288"}, "properties": {"repobilityId": "2f4c27b3238a8634", "scanner": "scanner-primary", "fingerprint": "0bfa1139621f874d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0d1cce1dee31bea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-cognition.js:60"}, "properties": {"repobilityId": "99dfcfb5d3ff70ab", "scanner": "scanner-primary", "fingerprint": "a0d1cce1dee31bea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ac20067f6799f87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-market-cognition-logic.js:13"}, "properties": {"repobilityId": "8eb78484ffbcc397", "scanner": "scanner-primary", "fingerprint": "4ac20067f6799f87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0848ae150dd5738", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-content-feeds.js:56"}, "properties": {"repobilityId": "80300f9457fbd36f", "scanner": "scanner-primary", "fingerprint": "c0848ae150dd5738", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-364cbd25f70a46ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-global-macro-acquisition.js:37"}, "properties": {"repobilityId": "22c81ce981d5601a", "scanner": "scanner-primary", "fingerprint": "364cbd25f70a46ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25e52f24c7ba5ed1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-production-readiness.js:79"}, "properties": {"repobilityId": "12fd5c566bed742f", "scanner": "scanner-primary", "fingerprint": "25e52f24c7ba5ed1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-888ec7eb6161d48c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-forecast-consensus.js:36"}, "properties": {"repobilityId": "7b92ef2838747388", "scanner": "scanner-primary", "fingerprint": "888ec7eb6161d48c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f127967b04847f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-editorial-article.js:30"}, "properties": {"repobilityId": "ac93d59cddd31496", "scanner": "scanner-primary", "fingerprint": "9f127967b04847f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d0b8647f3bb216c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/repair-orphan-pages.js:291"}, "properties": {"repobilityId": "d36c15e75e7f63b8", "scanner": "scanner-primary", "fingerprint": "7d0b8647f3bb216c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c865abe676d0d666", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-continuous-intelligence-article.js:493"}, "properties": {"repobilityId": "9c9cc421094639f4", "scanner": "scanner-primary", "fingerprint": "c865abe676d0d666", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b511561331f7f216", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-outlook-draft.js:54"}, "properties": {"repobilityId": "058867b5e6b11dc0", "scanner": "scanner-primary", "fingerprint": "b511561331f7f216", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-acffc8e57f6e36c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/score-autonomous-topic.js:256"}, "properties": {"repobilityId": "cc2beeeecaf96ebb", "scanner": "scanner-primary", "fingerprint": "acffc8e57f6e36c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc531c37344ecdc9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-reaction-memory.js:28"}, "properties": {"repobilityId": "543144a9f9a0f0ea", "scanner": "scanner-primary", "fingerprint": "bc531c37344ecdc9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e754285cd9d540ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/phase21-noindex-weak-pages.js:20"}, "properties": {"repobilityId": "8378391c1aed6b1f", "scanner": "scanner-primary", "fingerprint": "e754285cd9d540ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e139a139d68e6b60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-expectations.js:57"}, "properties": {"repobilityId": "758b37a71705f5ad", "scanner": "scanner-primary", "fingerprint": "e139a139d68e6b60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c277a2660b995bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-news.js:75"}, "properties": {"repobilityId": "228546ceebd395e6", "scanner": "scanner-primary", "fingerprint": "4c277a2660b995bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dde366314a05416e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-economic-calendar-ui.js:101"}, "properties": {"repobilityId": "3090da65740522b7", "scanner": "scanner-primary", "fingerprint": "dde366314a05416e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-23fa9cbdbc820efb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-educational-topics.js:113"}, "properties": {"repobilityId": "3cecfd6e20a26273", "scanner": "scanner-primary", "fingerprint": "23fa9cbdbc820efb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb8b901ea1642994", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-tactical-context.js:78"}, "properties": {"repobilityId": "adc17cdbb1ded9ba", "scanner": "scanner-primary", "fingerprint": "eb8b901ea1642994", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bfe90e06726f2584", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/humanize-arabic-market-content.js:271"}, "properties": {"repobilityId": "7521b524f607fdeb", "scanner": "scanner-primary", "fingerprint": "bfe90e06726f2584", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8617f46aa2ac3078", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-embedded-intelligence.js:82"}, "properties": {"repobilityId": "0e42455eb5931ad8", "scanner": "scanner-primary", "fingerprint": "8617f46aa2ac3078", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fc552baf2774d9d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/reconcile-publishing-queues.js:56"}, "properties": {"repobilityId": "ba207bbc5d8daf3e", "scanner": "scanner-primary", "fingerprint": "fc552baf2774d9d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07f003b2f9995587", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/publishing-lock.js:36"}, "properties": {"repobilityId": "ac976fa52d038616", "scanner": "scanner-primary", "fingerprint": "07f003b2f9995587", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d04f863751133c25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/render-intelligence-feed.js:170"}, "properties": {"repobilityId": "cce7334ae05027da", "scanner": "scanner-primary", "fingerprint": "d04f863751133c25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3da80b881ec95aeb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-continuous-intelligence-topic.js:325"}, "properties": {"repobilityId": "147a854570947976", "scanner": "scanner-primary", "fingerprint": "3da80b881ec95aeb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-012fd3305b36952a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-narrative-convergence-logic.js:11"}, "properties": {"repobilityId": "1044d8c101ca9830", "scanner": "scanner-primary", "fingerprint": "012fd3305b36952a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c653b9d92c78863", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/fix-encoding-corruption.js:48"}, "properties": {"repobilityId": "6b6993815f5df6cb", "scanner": "scanner-primary", "fingerprint": "7c653b9d92c78863", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aeeb15867413a89a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-educational-article.js:178"}, "properties": {"repobilityId": "1ec594278950e368", "scanner": "scanner-primary", "fingerprint": "aeeb15867413a89a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-546f438f35427af1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-news-article.js:508"}, "properties": {"repobilityId": "2d3a0a668a0ccb60", "scanner": "scanner-primary", "fingerprint": "546f438f35427af1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef6829cd50052b63", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-narrative-realism.js:45"}, "properties": {"repobilityId": "ff7ee609dd165e05", "scanner": "scanner-primary", "fingerprint": "ef6829cd50052b63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b1c17094119ca78", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-economic-calendar.js:85"}, "properties": {"repobilityId": "d28b9f4407bb6da1", "scanner": "scanner-primary", "fingerprint": "8b1c17094119ca78", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46c2d71c33ce9cb2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-responsive-layout.js:190"}, "properties": {"repobilityId": "320bc10ba8e951bf", "scanner": "scanner-primary", "fingerprint": "46c2d71c33ce9cb2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f886513f9e32c4b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-run-snapshot.js:146"}, "properties": {"repobilityId": "1e1118b4ea5f6f50", "scanner": "scanner-primary", "fingerprint": "7f886513f9e32c4b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe94aad5e5249343", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-narrative.js:547"}, "properties": {"repobilityId": "11c47005bb8244a2", "scanner": "scanner-primary", "fingerprint": "fe94aad5e5249343", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-893300e4d08f5844", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-intelligence-health.js:78"}, "properties": {"repobilityId": "e55575278584508b", "scanner": "scanner-primary", "fingerprint": "893300e4d08f5844", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc82cfc2afb9102d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-institutional-charts.js:120"}, "properties": {"repobilityId": "8ac2002dcd2effeb", "scanner": "scanner-primary", "fingerprint": "cc82cfc2afb9102d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d60e9f4f1bc0c45", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-structural-tension.js:34"}, "properties": {"repobilityId": "2bf63619cc85f353", "scanner": "scanner-primary", "fingerprint": "8d60e9f4f1bc0c45", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7ed04e2750dfb829", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-market-intelligence-quality-gates.js:20"}, "properties": {"repobilityId": "01d7d114cd1c8062", "scanner": "scanner-primary", "fingerprint": "7ed04e2750dfb829", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-87277ca23692aebb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-content-knowledge-graph.js:293"}, "properties": {"repobilityId": "49cc5e7552ca352b", "scanner": "scanner-primary", "fingerprint": "87277ca23692aebb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f559b6ae46f7c5b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/send-macro-telegram.js:75"}, "properties": {"repobilityId": "7044f410d258f7a3", "scanner": "scanner-primary", "fingerprint": "f559b6ae46f7c5b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7e89c4d5a8c234d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-structure-index.js:201"}, "properties": {"repobilityId": "b95d791ed96c8bc9", "scanner": "scanner-primary", "fingerprint": "b7e89c4d5a8c234d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9e29a77246534bbb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-content-feeds.js:25"}, "properties": {"repobilityId": "304782adbeac3da7", "scanner": "scanner-primary", "fingerprint": "9e29a77246534bbb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0963382f84309bc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-rate-path-intelligence.js:78"}, "properties": {"repobilityId": "02fcaebe17897190", "scanner": "scanner-primary", "fingerprint": "b0963382f84309bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-63980de27c9d8d50", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/send-published-article-telegram.js:392"}, "properties": {"repobilityId": "3efa9d75fc18d1b4", "scanner": "scanner-primary", "fingerprint": "63980de27c9d8d50", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-63bdbd0ab17af414", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-og-meta.js:35"}, "properties": {"repobilityId": "6f8d02a849ddfcac", "scanner": "scanner-primary", "fingerprint": "63bdbd0ab17af414", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6fc5f40e8fb4c3f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-visuals.js:83"}, "properties": {"repobilityId": "8071b716ac28dbce", "scanner": "scanner-primary", "fingerprint": "6fc5f40e8fb4c3f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7024001c6018fb29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-liquidity-regime.js:37"}, "properties": {"repobilityId": "93fe1ecdf387701c", "scanner": "scanner-primary", "fingerprint": "7024001c6018fb29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be89f01948b2fba9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/autonomous-review-engine.js:478"}, "properties": {"repobilityId": "a6fbd9211f314eb7", "scanner": "scanner-primary", "fingerprint": "be89f01948b2fba9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b23867c0b4a8f3a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/detect-content-gaps.js:195"}, "properties": {"repobilityId": "20a07511bf52f963", "scanner": "scanner-primary", "fingerprint": "8b23867c0b4a8f3a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5cdc15060649155", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-homepage-intelligence-feed.js:107"}, "properties": {"repobilityId": "a89a39536b118dce", "scanner": "scanner-primary", "fingerprint": "f5cdc15060649155", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a575b4aada8225cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-personas.js:76"}, "properties": {"repobilityId": "e5b152fb2326b173", "scanner": "scanner-primary", "fingerprint": "a575b4aada8225cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce2903a3df383004", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-social-activation.js:145"}, "properties": {"repobilityId": "f9939b3921f199fc", "scanner": "scanner-primary", "fingerprint": "ce2903a3df383004", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20f4748c847ec244", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/detect-orphan-pages.js:119"}, "properties": {"repobilityId": "b53e7c3bd1f43f21", "scanner": "scanner-primary", "fingerprint": "20f4748c847ec244", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d99b1aa37cffe693", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-publishing-safety.js:46"}, "properties": {"repobilityId": "549c5bb4a8afae7c", "scanner": "scanner-primary", "fingerprint": "d99b1aa37cffe693", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47a1b6a82ccc7e69", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-articles-index.js:184"}, "properties": {"repobilityId": "2842382505407c26", "scanner": "scanner-primary", "fingerprint": "47a1b6a82ccc7e69", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5080fb91f7ed986", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-content-clusters.js:180"}, "properties": {"repobilityId": "1153c6ee7cf98110", "scanner": "scanner-primary", "fingerprint": "f5080fb91f7ed986", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc02b381b429628d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/publication-transaction.js:74"}, "properties": {"repobilityId": "1b92b1bfd5dc6f86", "scanner": "scanner-primary", "fingerprint": "dc02b381b429628d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae183e379dab297e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-platform-relevance.js:12"}, "properties": {"repobilityId": "96af3eba164a9bfe", "scanner": "scanner-primary", "fingerprint": "ae183e379dab297e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c37433d25bdb9671", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-conviction.js:120"}, "properties": {"repobilityId": "fd28d5b4e2f11faf", "scanner": "scanner-primary", "fingerprint": "c37433d25bdb9671", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-185440713ec6b5e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-related-research.js:86"}, "properties": {"repobilityId": "dc924103d0c54d6d", "scanner": "scanner-primary", "fingerprint": "185440713ec6b5e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe34f04f165407ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/publish-reviewed-article.js:55"}, "properties": {"repobilityId": "3cdc6929e31503b0", "scanner": "scanner-primary", "fingerprint": "fe34f04f165407ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-64425def2da3360a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-brief.js:39"}, "properties": {"repobilityId": "42c3c50a7b23518e", "scanner": "scanner-primary", "fingerprint": "64425def2da3360a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d002dbb62760108", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/run-social-approval.js:62"}, "properties": {"repobilityId": "de4d80219c3355c2", "scanner": "scanner-primary", "fingerprint": "8d002dbb62760108", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2db965643be44376", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-editorial-priorities.js:59"}, "properties": {"repobilityId": "5df5f723e3e9f99d", "scanner": "scanner-primary", "fingerprint": "2db965643be44376", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b16beeeea7187e3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/phase21-fix-ar-pages.js:23"}, "properties": {"repobilityId": "a5e9ba0abda78c52", "scanner": "scanner-primary", "fingerprint": "b16beeeea7187e3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bfa1990a1c5db3d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-global-header-runtime.js:49"}, "properties": {"repobilityId": "5ca7d4712e83f419", "scanner": "scanner-primary", "fingerprint": "bfa1990a1c5db3d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31e54e15fdb304a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-liquidity-regime.js:93"}, "properties": {"repobilityId": "2d521956881cb0e5", "scanner": "scanner-primary", "fingerprint": "31e54e15fdb304a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ccdb6ef018726fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-cross-asset-reaction.js:95"}, "properties": {"repobilityId": "b3d814a2bda3fbc6", "scanner": "scanner-primary", "fingerprint": "1ccdb6ef018726fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e364491cc79695f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-news-eligibility.js:112"}, "properties": {"repobilityId": "fda84bc32498498d", "scanner": "scanner-primary", "fingerprint": "e364491cc79695f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d32c9c8a4172675e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-intelligence-productization.js:91"}, "properties": {"repobilityId": "3efb89a96293659d", "scanner": "scanner-primary", "fingerprint": "d32c9c8a4172675e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-efc9c975135b24dc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-macro-cognition.js:502"}, "properties": {"repobilityId": "c92911bc44bf974a", "scanner": "scanner-primary", "fingerprint": "efc9c975135b24dc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f4b038c54e9f4363", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-social-approval-queue.js:146"}, "properties": {"repobilityId": "8e4440bd31c49286", "scanner": "scanner-primary", "fingerprint": "f4b038c54e9f4363", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc2a3fc289c21906", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-editorial-market-memory.js:426"}, "properties": {"repobilityId": "39bdf1a3ff5e61e0", "scanner": "scanner-primary", "fingerprint": "bc2a3fc289c21906", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c00cb125d461f642", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-delivery-ledger.js:12"}, "properties": {"repobilityId": "9ac39a6fd262ecfa", "scanner": "scanner-primary", "fingerprint": "c00cb125d461f642", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31fb40de3e9e1f59", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-institutional-charts.js:427"}, "properties": {"repobilityId": "cea8e2b6dcfe3671", "scanner": "scanner-primary", "fingerprint": "31fb40de3e9e1f59", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cbef89e04d6ee5b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-intelligence-monitor.js:190"}, "properties": {"repobilityId": "bf3a4d98eecd5927", "scanner": "scanner-primary", "fingerprint": "cbef89e04d6ee5b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60ae1c39bf13a8bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-pages.js:60"}, "properties": {"repobilityId": "aa07078009f76a43", "scanner": "scanner-primary", "fingerprint": "60ae1c39bf13a8bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf59b00d130dce8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-telegram.js:28"}, "properties": {"repobilityId": "2b142324a7a43e92", "scanner": "scanner-primary", "fingerprint": "cf59b00d130dce8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f7b233f83bb80cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/telegram-backfill.js:62"}, "properties": {"repobilityId": "a25711a930d01ef6", "scanner": "scanner-primary", "fingerprint": "4f7b233f83bb80cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50e490a0e6bd6424", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-language-purity.js:49"}, "properties": {"repobilityId": "70ca047dbd6714c3", "scanner": "scanner-primary", "fingerprint": "50e490a0e6bd6424", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b9e3fa43540ea12", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/publishing-control-center.js:53"}, "properties": {"repobilityId": "7e7181c965ec1139", "scanner": "scanner-primary", "fingerprint": "4b9e3fa43540ea12", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-276f2b7161a6abe5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-chart-intelligence.js:189"}, "properties": {"repobilityId": "2a0a7582dd5a9388", "scanner": "scanner-primary", "fingerprint": "276f2b7161a6abe5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-afb84551da3cf81d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/apply-global-header.js:93"}, "properties": {"repobilityId": "6d9dc264faa21cc8", "scanner": "scanner-primary", "fingerprint": "afb84551da3cf81d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f8082fcd31d77ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-system-status.js:136"}, "properties": {"repobilityId": "998e4070e6b68d06", "scanner": "scanner-primary", "fingerprint": "5f8082fcd31d77ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-148f39faed73adc9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-delivery-preflight.js:20"}, "properties": {"repobilityId": "776931406252b4f9", "scanner": "scanner-primary", "fingerprint": "148f39faed73adc9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e90534a68b351547", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/seed-market-outlook-topics.js:204"}, "properties": {"repobilityId": "04ef2e7623d3de3f", "scanner": "scanner-primary", "fingerprint": "e90534a68b351547", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc7a44e53f90b718", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-header-runtime-integrity.js:45"}, "properties": {"repobilityId": "d07b7e6148642fca", "scanner": "scanner-primary", "fingerprint": "cc7a44e53f90b718", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-373798262312ea06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-news-analysis-draft.js:27"}, "properties": {"repobilityId": "a81769053e38c331", "scanner": "scanner-primary", "fingerprint": "373798262312ea06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-719c8bdf12d54147", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-intelligence-quality.js:99"}, "properties": {"repobilityId": "33eaab6ce88247ff", "scanner": "scanner-primary", "fingerprint": "719c8bdf12d54147", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65e844e60d173e23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-alerts.js:56"}, "properties": {"repobilityId": "ac3eb9f38e17c851", "scanner": "scanner-primary", "fingerprint": "65e844e60d173e23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d1c34d54ccc80eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-newsroom-behavior.js:9"}, "properties": {"repobilityId": "e7da019f3454bdbb", "scanner": "scanner-primary", "fingerprint": "2d1c34d54ccc80eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f5e1785357dbcf3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-pulse.js:199"}, "properties": {"repobilityId": "9c0e445e58805b2b", "scanner": "scanner-primary", "fingerprint": "1f5e1785357dbcf3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-508ad3a7a36da09c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-comparison-pages.js:42"}, "properties": {"repobilityId": "4ad7592c927ff814", "scanner": "scanner-primary", "fingerprint": "508ad3a7a36da09c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-03980bb40075f9b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-seo-structure.js:74"}, "properties": {"repobilityId": "53e0e5b5d9305287", "scanner": "scanner-primary", "fingerprint": "03980bb40075f9b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-040fbc9bed9fe73f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/verify-publish-integrity.js:69"}, "properties": {"repobilityId": "f8d2c40435fa0e35", "scanner": "scanner-primary", "fingerprint": "040fbc9bed9fe73f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-08d04e135311d4e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-deterministic-routing.js:17"}, "properties": {"repobilityId": "81298b69e8e25863", "scanner": "scanner-primary", "fingerprint": "08d04e135311d4e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f6a6b5b29dc70bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-outlook-localization.js:34"}, "properties": {"repobilityId": "b9da4a3c3015d9c4", "scanner": "scanner-primary", "fingerprint": "9f6a6b5b29dc70bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39de83c56f00f012", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-rotation.js:128"}, "properties": {"repobilityId": "ea71fb2af23948f8", "scanner": "scanner-primary", "fingerprint": "39de83c56f00f012", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a776b49cac1cf70", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/_fix-serp.js:137"}, "properties": {"repobilityId": "97b9777fe33d3ed1", "scanner": "scanner-primary", "fingerprint": "4a776b49cac1cf70", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7392ce0ef934c489", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-narrative-convergence.js:100"}, "properties": {"repobilityId": "f94c81345d451124", "scanner": "scanner-primary", "fingerprint": "7392ce0ef934c489", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0447555f17a195c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-structure.js:82"}, "properties": {"repobilityId": "e72d1e1712dcfb46", "scanner": "scanner-primary", "fingerprint": "0447555f17a195c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5e49e3f2ba163d35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-macro-cognition-logic.js:16"}, "properties": {"repobilityId": "3844b26aa21d2183", "scanner": "scanner-primary", "fingerprint": "5e49e3f2ba163d35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d073de4127eb0041", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/detect-cross-asset-divergence.js:39"}, "properties": {"repobilityId": "8033cc144040a1e3", "scanner": "scanner-primary", "fingerprint": "d073de4127eb0041", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-40664d26a8cc85b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/send-market-brief.js:39"}, "properties": {"repobilityId": "6e2a3d2ec6bceafc", "scanner": "scanner-primary", "fingerprint": "40664d26a8cc85b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3b59740dc976f0b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-topic-similarity.js:39"}, "properties": {"repobilityId": "59d0e70614fa1dce", "scanner": "scanner-primary", "fingerprint": "3b59740dc976f0b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-881006cfcad4e8a8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-visual-composition.js:83"}, "properties": {"repobilityId": "07261f7f1a28ca0f", "scanner": "scanner-primary", "fingerprint": "881006cfcad4e8a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-822e2d79a09d4ab6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/discover-insight-topics.js:59"}, "properties": {"repobilityId": "c865d45c0026f2a4", "scanner": "scanner-primary", "fingerprint": "822e2d79a09d4ab6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3df12775d81b88c1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-distribution-plan.js:24"}, "properties": {"repobilityId": "f048e17230a3df43", "scanner": "scanner-primary", "fingerprint": "3df12775d81b88c1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46ed765c4f524bba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-macro-cognition.js:117"}, "properties": {"repobilityId": "2992a2814753de78", "scanner": "scanner-primary", "fingerprint": "46ed765c4f524bba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-495633c12db8bcbc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/detect-market-regime.js:88"}, "properties": {"repobilityId": "42b934f9db503e85", "scanner": "scanner-primary", "fingerprint": "495633c12db8bcbc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83a2ba74a0391033", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-macro-narrative.js:107"}, "properties": {"repobilityId": "5219dff7d2c13ec9", "scanner": "scanner-primary", "fingerprint": "83a2ba74a0391033", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6d77a3bfa01db40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-editorial-graphics.js:486"}, "properties": {"repobilityId": "fc2fc85e0b0c7aea", "scanner": "scanner-primary", "fingerprint": "d6d77a3bfa01db40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d078ed108b9b2f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-cross-asset-transmission.js:262"}, "properties": {"repobilityId": "fd81ee66974692aa", "scanner": "scanner-primary", "fingerprint": "3d078ed108b9b2f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ecda009ef3e86a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/autonomous-publishing-brain.js:125"}, "properties": {"repobilityId": "3f806f9055324eab", "scanner": "scanner-primary", "fingerprint": "5ecda009ef3e86a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-17ebf3e9f5e9b9ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/repair-utf8-mojibake.js:77"}, "properties": {"repobilityId": "a1c46313191ad024", "scanner": "scanner-primary", "fingerprint": "17ebf3e9f5e9b9ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-26c9ae6529a58af3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-macro-reactions.js:36"}, "properties": {"repobilityId": "996570753cf11721", "scanner": "scanner-primary", "fingerprint": "26c9ae6529a58af3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c22c5f03992570c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/publish-market-outlook.js:24"}, "properties": {"repobilityId": "530cf56a0e8ca079", "scanner": "scanner-primary", "fingerprint": "3c22c5f03992570c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-104425946cbc8b03", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-internal-authority.js:190"}, "properties": {"repobilityId": "b9dda0e10a2e3135", "scanner": "scanner-primary", "fingerprint": "104425946cbc8b03", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b746dd781dd196c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-research-assets.js:22"}, "properties": {"repobilityId": "b7f1a7d588ecc527", "scanner": "scanner-primary", "fingerprint": "b746dd781dd196c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a988366c58c65ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-intelligence-briefs.js:330"}, "properties": {"repobilityId": "33728e4ad2a886d8", "scanner": "scanner-primary", "fingerprint": "9a988366c58c65ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d64c04153838153b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-dashboard-route-dependencies.js:76"}, "properties": {"repobilityId": "deb5d044f67d1514", "scanner": "scanner-primary", "fingerprint": "d64c04153838153b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f3a459bfb546f03", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/optimize-seo-metadata.js:175"}, "properties": {"repobilityId": "52be8be00d554b5d", "scanner": "scanner-primary", "fingerprint": "6f3a459bfb546f03", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a609d9bbe66c0229", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/batch-page-updates.js:125"}, "properties": {"repobilityId": "07514388583087cb", "scanner": "scanner-primary", "fingerprint": "a609d9bbe66c0229", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7126f336b9ef5043", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/ingest-news-sources.js:29"}, "properties": {"repobilityId": "8fae170456d707c5", "scanner": "scanner-primary", "fingerprint": "7126f336b9ef5043", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3acc1a9c2a8331e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-historical-intelligence.js:32"}, "properties": {"repobilityId": "58e6541ca9afc206", "scanner": "scanner-primary", "fingerprint": "a3acc1a9c2a8331e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79562066e1b9d7a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-event-reaction-memory.js:59"}, "properties": {"repobilityId": "279bbb40f2ad5b76", "scanner": "scanner-primary", "fingerprint": "79562066e1b9d7a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e7774801db4f9179", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-article-pairs.js:162"}, "properties": {"repobilityId": "5feca8a7dcdd0062", "scanner": "scanner-primary", "fingerprint": "e7774801db4f9179", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b19e19454c30e78b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-structure-articles.js:90"}, "properties": {"repobilityId": "cd07af7c44dfd7c6", "scanner": "scanner-primary", "fingerprint": "b19e19454c30e78b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa5526baf7468a23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-tactical-context.js:96"}, "properties": {"repobilityId": "0226a397937c745c", "scanner": "scanner-primary", "fingerprint": "fa5526baf7468a23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-67f350bfcd541cdb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/repair-editorial-layout.js:26"}, "properties": {"repobilityId": "9a139609409d17ee", "scanner": "scanner-primary", "fingerprint": "67f350bfcd541cdb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd45c9fa99e918c1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/score-publish-quality.js:297"}, "properties": {"repobilityId": "c949f56fef41010d", "scanner": "scanner-primary", "fingerprint": "dd45c9fa99e918c1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c69b147cd6c525b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-chart-narratives.js:328"}, "properties": {"repobilityId": "5925e71550cd79e9", "scanner": "scanner-primary", "fingerprint": "c69b147cd6c525b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-350503d3be838b9e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-visuals.js:189"}, "properties": {"repobilityId": "830eed3f8064b5e2", "scanner": "scanner-primary", "fingerprint": "350503d3be838b9e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ce586317ff077f6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-seo-performance.js:33"}, "properties": {"repobilityId": "84765305e8765588", "scanner": "scanner-primary", "fingerprint": "0ce586317ff077f6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f6e3ce8e48ea71ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-macro-briefing.js:35"}, "properties": {"repobilityId": "1e48f669c3e4dc21", "scanner": "scanner-primary", "fingerprint": "f6e3ce8e48ea71ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22f040ffcbc0b42d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-utf8-integrity.js:136"}, "properties": {"repobilityId": "b7eee8c6e72e52bd", "scanner": "scanner-primary", "fingerprint": "22f040ffcbc0b42d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d549678b285bdad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-intelligent-links.js:31"}, "properties": {"repobilityId": "30e66e09305bb036", "scanner": "scanner-primary", "fingerprint": "9d549678b285bdad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ba243ab91bdfbc9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-market-brief-logic.js:10"}, "properties": {"repobilityId": "8942af764afba80a", "scanner": "scanner-primary", "fingerprint": "3ba243ab91bdfbc9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b2e00e684a9adeac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/detect-narrative-drift.js:65"}, "properties": {"repobilityId": "c4886138347666db", "scanner": "scanner-primary", "fingerprint": "b2e00e684a9adeac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46480d4afd66ed51", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-structural-tension.js:350"}, "properties": {"repobilityId": "f4298ffb9823c2fc", "scanner": "scanner-primary", "fingerprint": "46480d4afd66ed51", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4db0db69468ac53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-ai-editorial-draft.js:47"}, "properties": {"repobilityId": "239c02e3e890d30f", "scanner": "scanner-primary", "fingerprint": "a4db0db69468ac53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca89d36c9af45b4c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-newsroom-ui.js:186"}, "properties": {"repobilityId": "620975dccdeb62d3", "scanner": "scanner-primary", "fingerprint": "ca89d36c9af45b4c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f38936cfd675827d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-concept-depth.js:65"}, "properties": {"repobilityId": "5d670c221c8f9314", "scanner": "scanner-primary", "fingerprint": "f38936cfd675827d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4969052fd5a05574", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-research-rotation.js:25"}, "properties": {"repobilityId": "e70999f75756c750", "scanner": "scanner-primary", "fingerprint": "4969052fd5a05574", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b595be4b331d5e8c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-chart-intelligence.js:27"}, "properties": {"repobilityId": "1fa9f6999178b0bb", "scanner": "scanner-primary", "fingerprint": "b595be4b331d5e8c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-62dbf2dc177882b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-narrative-memory.js:32"}, "properties": {"repobilityId": "3d0a8599bf9c67c8", "scanner": "scanner-primary", "fingerprint": "62dbf2dc177882b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-17e9a75270e3eb5d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-graphics.js:189"}, "properties": {"repobilityId": "d4350b17c4abbb17", "scanner": "scanner-primary", "fingerprint": "17e9a75270e3eb5d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c7801f39ab6aeaf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-briefs-index.js:180"}, "properties": {"repobilityId": "dd5c5fb657073ae0", "scanner": "scanner-primary", "fingerprint": "6c7801f39ab6aeaf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c0df3c1f8ca3836", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-historical-patterns.js:59"}, "properties": {"repobilityId": "143436f184d3dd8c", "scanner": "scanner-primary", "fingerprint": "1c0df3c1f8ca3836", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e26dbb02d1964814", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-seo-topology.js:168"}, "properties": {"repobilityId": "dbc699c8f15a336f", "scanner": "scanner-primary", "fingerprint": "e26dbb02d1964814", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf0b909d006ccd00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-rankings.js:335"}, "properties": {"repobilityId": "d33b8e590f217768", "scanner": "scanner-primary", "fingerprint": "bf0b909d006ccd00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-21fc0440865c21a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/validate-provider-keys.js:141"}, "properties": {"repobilityId": "329037b399c6fbec", "scanner": "scanner-primary", "fingerprint": "21fc0440865c21a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d2d55ffaa5e7f9d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-economic-intelligence.js:257"}, "properties": {"repobilityId": "f5416543cdedd682", "scanner": "scanner-primary", "fingerprint": "d2d55ffaa5e7f9d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e46bfa3378ddd5e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/sync-bilingual-article-structure.js:52"}, "properties": {"repobilityId": "3c5d93585d3e86a4", "scanner": "scanner-primary", "fingerprint": "e46bfa3378ddd5e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1ae670c529ff46b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-content-roadmap.js:239"}, "properties": {"repobilityId": "b80e4b8ee812952f", "scanner": "scanner-primary", "fingerprint": "a1ae670c529ff46b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b0f6df96b6b9a0e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-social-meta.js:55"}, "properties": {"repobilityId": "2ca07390adcf1e2a", "scanner": "scanner-primary", "fingerprint": "7b0f6df96b6b9a0e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-58a03b30c7343af6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/inject-page-metadata.js:60"}, "properties": {"repobilityId": "253b63a2dd164111", "scanner": "scanner-primary", "fingerprint": "58a03b30c7343af6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a236405324b9e52", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-public-surface-discovery.js:40"}, "properties": {"repobilityId": "f4fdb2ac690ec1b2", "scanner": "scanner-primary", "fingerprint": "6a236405324b9e52", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a2df0f2e7df10e91", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-news-articles.js:73"}, "properties": {"repobilityId": "04dfe7c4e0e8000b", "scanner": "scanner-primary", "fingerprint": "a2df0f2e7df10e91", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89d5d6ceb7b599c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-bilingual-structure.js:49"}, "properties": {"repobilityId": "cb1f7c4c1582d0cb", "scanner": "scanner-primary", "fingerprint": "89d5d6ceb7b599c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb5c0d2c2c4970b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-quality-articles.js:55"}, "properties": {"repobilityId": "da284804d0a42458", "scanner": "scanner-primary", "fingerprint": "cb5c0d2c2c4970b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76bb6585e9abdc9a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-seo-sitemaps.js:59"}, "properties": {"repobilityId": "6431e0462a259181", "scanner": "scanner-primary", "fingerprint": "76bb6585e9abdc9a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1e5902e78e4811eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-news-index.js:195"}, "properties": {"repobilityId": "184b2356e87320d5", "scanner": "scanner-primary", "fingerprint": "1e5902e78e4811eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f1b94d412f23ef7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-market-structure.js:74"}, "properties": {"repobilityId": "7b17900d5dd40c12", "scanner": "scanner-primary", "fingerprint": "1f1b94d412f23ef7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1ba0b22936c4d81", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-intelligence-monitor.js:31"}, "properties": {"repobilityId": "c143302ef239a462", "scanner": "scanner-primary", "fingerprint": "b1ba0b22936c4d81", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-008d1a41138e46fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-market-intelligence-status.js:37"}, "properties": {"repobilityId": "786a9e65d1f07d66", "scanner": "scanner-primary", "fingerprint": "008d1a41138e46fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5985bae157637445", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-graphic-exports.js:28"}, "properties": {"repobilityId": "6171822498f10f34", "scanner": "scanner-primary", "fingerprint": "5985bae157637445", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abbd54f7d250c50b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-featured-content-links.js:30"}, "properties": {"repobilityId": "3fd13e890fccd838", "scanner": "scanner-primary", "fingerprint": "abbd54f7d250c50b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5b02918c72bd7d20", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-pages.js:40"}, "properties": {"repobilityId": "9cc0d4ad41d561a2", "scanner": "scanner-primary", "fingerprint": "5b02918c72bd7d20", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2174a79b0cf81211", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-activation.js:88"}, "properties": {"repobilityId": "43d9430b9acd6423", "scanner": "scanner-primary", "fingerprint": "2174a79b0cf81211", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c37e716fc65dd7b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/scan-ar-artifacts.js:53"}, "properties": {"repobilityId": "478d7e52d994feba", "scanner": "scanner-primary", "fingerprint": "6c37e716fc65dd7b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-108a39d078739df3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-market-outlook-publication.js:78"}, "properties": {"repobilityId": "a5ca93abadd41d47", "scanner": "scanner-primary", "fingerprint": "108a39d078739df3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4179b75caefe8a25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-structural-tension.js:92"}, "properties": {"repobilityId": "bae4110871297046", "scanner": "scanner-primary", "fingerprint": "4179b75caefe8a25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-94a3b85acc1955f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/clean-arabic-market-copy.js:67"}, "properties": {"repobilityId": "1350d36412c64314", "scanner": "scanner-primary", "fingerprint": "94a3b85acc1955f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2920e19ec9ab5b4a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-article-registry.js:17"}, "properties": {"repobilityId": "5d81821043b14bf0", "scanner": "scanner-primary", "fingerprint": "2920e19ec9ab5b4a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-405836303f8393dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-workflows.js:90"}, "properties": {"repobilityId": "03a52f08898dbe72", "scanner": "scanner-primary", "fingerprint": "405836303f8393dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1047891d8e748cf1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/telegram-publish-article.js:39"}, "properties": {"repobilityId": "c38c9910b294c174", "scanner": "scanner-primary", "fingerprint": "1047891d8e748cf1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f2965043037dcca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/_patch-responsive-css.js:45"}, "properties": {"repobilityId": "c33f9d8e48bf49be", "scanner": "scanner-primary", "fingerprint": "8f2965043037dcca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6b31203976db159", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/add-compare-insights.js:126"}, "properties": {"repobilityId": "3de2c48e5fa4d547", "scanner": "scanner-primary", "fingerprint": "e6b31203976db159", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c6f99177d983f9d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/analyze-event-impact.js:76"}, "properties": {"repobilityId": "bb88736cfa9baa88", "scanner": "scanner-primary", "fingerprint": "2c6f99177d983f9d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2cda0812762cf7fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-regime-sequence.js:57"}, "properties": {"repobilityId": "77d54845f2137889", "scanner": "scanner-primary", "fingerprint": "2cda0812762cf7fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19795ec2a82054e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-graphic-exports.js:104"}, "properties": {"repobilityId": "37d5ed50235c102c", "scanner": "scanner-primary", "fingerprint": "19795ec2a82054e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-120dc4551e6e712e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/authority-expansion-engine.js:363"}, "properties": {"repobilityId": "a1537abca41653c7", "scanner": "scanner-primary", "fingerprint": "120dc4551e6e712e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8914bab8c47ab3bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-briefs-section.js:55"}, "properties": {"repobilityId": "4a659c83b27f400b", "scanner": "scanner-primary", "fingerprint": "8914bab8c47ab3bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99ff370a18342896", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/list-upcoming-publications.js:24"}, "properties": {"repobilityId": "8cf83ca386ec97b6", "scanner": "scanner-primary", "fingerprint": "99ff370a18342896", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c61985a9049c219", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/cleanup-orphan-public-files.js:145"}, "properties": {"repobilityId": "c9272ab817313c2a", "scanner": "scanner-primary", "fingerprint": "6c61985a9049c219", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19c891e63ce6a573", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-economic-calendar.js:29"}, "properties": {"repobilityId": "7f40d8395a85fd2e", "scanner": "scanner-primary", "fingerprint": "19c891e63ce6a573", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da8101dc0605d8ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-live-market-state.js:103"}, "properties": {"repobilityId": "a5fb1e69fbe1a3a4", "scanner": "scanner-primary", "fingerprint": "da8101dc0605d8ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-58763b3065710d09", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/run-full-market-outlook-pipeline.js:80"}, "properties": {"repobilityId": "92dc079e1d7dec16", "scanner": "scanner-primary", "fingerprint": "58763b3065710d09", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2bac933189f069eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-newsroom-intelligence.js:50"}, "properties": {"repobilityId": "e7ba35a2fa2b9675", "scanner": "scanner-primary", "fingerprint": "2bac933189f069eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-02fd9af7c311af60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-reading-flow.js:104"}, "properties": {"repobilityId": "efe7de59a9d6060e", "scanner": "scanner-primary", "fingerprint": "02fd9af7c311af60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3fc26f34c7b39848", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/run-insight-pipeline.js:20"}, "properties": {"repobilityId": "760b2c290947c378", "scanner": "scanner-primary", "fingerprint": "3fc26f34c7b39848", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b30b606c2094ce3a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-etf-flow-intelligence.js:369"}, "properties": {"repobilityId": "ee191db3e395372f", "scanner": "scanner-primary", "fingerprint": "b30b606c2094ce3a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e63fac3e7ef83011", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-ar-rtl.js:58"}, "properties": {"repobilityId": "5cb3e3f2c2b38830", "scanner": "scanner-primary", "fingerprint": "e63fac3e7ef83011", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0513cc91b5c6d9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-market-memory.js:78"}, "properties": {"repobilityId": "e8013053319635cd", "scanner": "scanner-primary", "fingerprint": "a0513cc91b5c6d9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc37466b66af4a6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/calculate-market-confidence.js:182"}, "properties": {"repobilityId": "a5a5386da0b70b8f", "scanner": "scanner-primary", "fingerprint": "dc37466b66af4a6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c47b87c449617418", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-newswire-events.js:185"}, "properties": {"repobilityId": "758e1bf3bb5688ee", "scanner": "scanner-primary", "fingerprint": "c47b87c449617418", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1c8a74228ce0fe4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-provider-router.js:26"}, "properties": {"repobilityId": "f4c8401dde84b4ca", "scanner": "scanner-primary", "fingerprint": "a1c8a74228ce0fe4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aae401c96461a2ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-intelligence-context.js:53"}, "properties": {"repobilityId": "b503c87972b5f3e5", "scanner": "scanner-primary", "fingerprint": "aae401c96461a2ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abd0eedfd210967a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/repair-institutional-depth.js:199"}, "properties": {"repobilityId": "73d1ced707fd3cc5", "scanner": "scanner-primary", "fingerprint": "abd0eedfd210967a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b79b792d87c86c00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-continuous-intelligence.js:40"}, "properties": {"repobilityId": "5f7662978d5e4617", "scanner": "scanner-primary", "fingerprint": "b79b792d87c86c00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ffaad47306c1a48", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-daily-market-outlook.js:92"}, "properties": {"repobilityId": "3a0045ffac511f02", "scanner": "scanner-primary", "fingerprint": "0ffaad47306c1a48", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa04797572e23248", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/internal-link-intelligence.js:271"}, "properties": {"repobilityId": "0dd8198e4aa6973e", "scanner": "scanner-primary", "fingerprint": "aa04797572e23248", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-433607901e89d49e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-editorial-schedule.js:43"}, "properties": {"repobilityId": "9127c8e01539eeb5", "scanner": "scanner-primary", "fingerprint": "433607901e89d49e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-43e15d4f8080638e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/publish-continuous-intelligence.js:72"}, "properties": {"repobilityId": "57426d95480b713c", "scanner": "scanner-primary", "fingerprint": "43e15d4f8080638e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5b44b9d7b486016b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/run-authority-repair-cycle.js:86"}, "properties": {"repobilityId": "e2609c707886028b", "scanner": "scanner-primary", "fingerprint": "5b44b9d7b486016b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-17ba328969fa264e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-educational-priority.js:68"}, "properties": {"repobilityId": "41c6163b37755617", "scanner": "scanner-primary", "fingerprint": "17ba328969fa264e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf61412294be3566", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-telegram-config.js:16"}, "properties": {"repobilityId": "2bce6e9e08913aac", "scanner": "scanner-primary", "fingerprint": "bf61412294be3566", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e3ea560fd064e8ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-governance.js:85"}, "properties": {"repobilityId": "fc5c34c700f360c8", "scanner": "scanner-primary", "fingerprint": "e3ea560fd064e8ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9fc641ede43ae45b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-controlled-insights.js:221"}, "properties": {"repobilityId": "4e0b41c94d252166", "scanner": "scanner-primary", "fingerprint": "9fc641ede43ae45b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2e1410afcd93fc75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-visual-intelligence.js:67"}, "properties": {"repobilityId": "fce27aacb33a6a5c", "scanner": "scanner-primary", "fingerprint": "2e1410afcd93fc75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-73c7778cbbc35d29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/record-event-reactions.js:51"}, "properties": {"repobilityId": "e7942ba449978025", "scanner": "scanner-primary", "fingerprint": "73c7778cbbc35d29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6b09dd4efb5b67a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/self-heal-market-outlook-drafts.js:42"}, "properties": {"repobilityId": "2466f4c74af1a80c", "scanner": "scanner-primary", "fingerprint": "d6b09dd4efb5b67a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ba92ccad8376ae6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-macro-reactions.js:151"}, "properties": {"repobilityId": "33f353b1bcc3cbac", "scanner": "scanner-primary", "fingerprint": "6ba92ccad8376ae6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95455b32a5dc6469", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-inline-visuals.js:83"}, "properties": {"repobilityId": "dcfadbf329ebbd98", "scanner": "scanner-primary", "fingerprint": "95455b32a5dc6469", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dff7893a2078d33c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-global-header-parity.js:104"}, "properties": {"repobilityId": "519c4fce98b91f94", "scanner": "scanner-primary", "fingerprint": "dff7893a2078d33c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c52507fc257fdca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/render-newsroom-modules.js:1119"}, "properties": {"repobilityId": "8ad314ca7b697c13", "scanner": "scanner-primary", "fingerprint": "8c52507fc257fdca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2a5f41a66991b4a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-insight-duplicates.js:67"}, "properties": {"repobilityId": "0089f35f049968bd", "scanner": "scanner-primary", "fingerprint": "f2a5f41a66991b4a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5df876cb2463be0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-upcoming-market-events.js:14"}, "properties": {"repobilityId": "c7db5a449ce01cb7", "scanner": "scanner-primary", "fingerprint": "5df876cb2463be0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-391ac275b2c64bbf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/promote-wire-events.js:65"}, "properties": {"repobilityId": "8d4b8886065bc744", "scanner": "scanner-primary", "fingerprint": "391ac275b2c64bbf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec96a4b9fa0d17fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/fetch-economic-calendar.js:59"}, "properties": {"repobilityId": "db463cf2211d3ed8", "scanner": "scanner-primary", "fingerprint": "ec96a4b9fa0d17fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ad6464c5b316eac3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-market-intelligence.js:225"}, "properties": {"repobilityId": "a91ff9dfb005925d", "scanner": "scanner-primary", "fingerprint": "ad6464c5b316eac3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f76c24a4958c359", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/rebalance-content-topology.js:260"}, "properties": {"repobilityId": "19b5029437c88aff", "scanner": "scanner-primary", "fingerprint": "3f76c24a4958c359", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-58962928009c1398", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/build-market-cognition.js:578"}, "properties": {"repobilityId": "bfe8996ccc9a7744", "scanner": "scanner-primary", "fingerprint": "58962928009c1398", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f22d39ab488932ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/update-market-regime.js:21"}, "properties": {"repobilityId": "1aa70bd8f2fce356", "scanner": "scanner-primary", "fingerprint": "f22d39ab488932ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-420bee448d7297fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-economic-intelligence.js:35"}, "properties": {"repobilityId": "45363d9d9dcca3c5", "scanner": "scanner-primary", "fingerprint": "420bee448d7297fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35c9316a35f333ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/test-editorial-market-memory.js:32"}, "properties": {"repobilityId": "c2927a3d69a2c58b", "scanner": "scanner-primary", "fingerprint": "35c9316a35f333ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a2d45abebd658b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-publishing-report.js:53"}, "properties": {"repobilityId": "17ffd32524cc8218", "scanner": "scanner-primary", "fingerprint": "4a2d45abebd658b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bff0101bb378d269", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/check-insight-quality.js:28"}, "properties": {"repobilityId": "61936290b8f933e9", "scanner": "scanner-primary", "fingerprint": "bff0101bb378d269", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6b06ce237e2a4711", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/intelligence/publication-confidence-engine.js:102"}, "properties": {"repobilityId": "ea365d1c7e4834af", "scanner": "scanner-primary", "fingerprint": "6b06ce237e2a4711", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3794f8e0eda3fa3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/intelligence/institutional-reasoning-engine.js:199"}, "properties": {"repobilityId": "01ce18e013145fd2", "scanner": "scanner-primary", "fingerprint": "d3794f8e0eda3fa3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e92c0b8224c167b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/provider-router.js:35"}, "properties": {"repobilityId": "4f35323aec41ea30", "scanner": "scanner-primary", "fingerprint": "e92c0b8224c167b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6545df2bb00585a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/alphavantage-provider.js:28"}, "properties": {"repobilityId": "4306e8c0d702e652", "scanner": "scanner-primary", "fingerprint": "6545df2bb00585a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25d420915b34e350", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/schedule-fallback-provider.js:297"}, "properties": {"repobilityId": "9ae1ed4b03345af6", "scanner": "scanner-primary", "fingerprint": "25d420915b34e350", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cba85758576657da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/http-client.js:17"}, "properties": {"repobilityId": "c16fa6783bd01c6b", "scanner": "scanner-primary", "fingerprint": "cba85758576657da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ace060968bb1081", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/fred-provider.js:15"}, "properties": {"repobilityId": "1b06bc3d3b63d0d1", "scanner": "scanner-primary", "fingerprint": "4ace060968bb1081", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a67364b60c7b0394", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/finnhub-provider.js:13"}, "properties": {"repobilityId": "68329b5b9f4edd00", "scanner": "scanner-primary", "fingerprint": "a67364b60c7b0394", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3efb398c1ca3cda6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/trading-economics-provider.js:40"}, "properties": {"repobilityId": "03dcef4ec55561bd", "scanner": "scanner-primary", "fingerprint": "3efb398c1ca3cda6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83fca552dc182274", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/providers/economic-calendar/fmp-provider.js:17"}, "properties": {"repobilityId": "7c32010e9f3b09f6", "scanner": "scanner-primary", "fingerprint": "83fca552dc182274", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ca626cb81a479bb", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 netlify/functions/providers/polygon.js:2"}, "properties": {"repobilityId": "43937e36a1a30b34", "scanner": "scanner-primary", "fingerprint": "2ca626cb81a479bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1b57d3e11b6539bc", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 netlify/functions/providers/alpha-vantage.js:2"}, "properties": {"repobilityId": "9e44ec596f911e4a", "scanner": "scanner-primary", "fingerprint": "1b57d3e11b6539bc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c1228b0712713865", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in test-i18n.html:68"}, "properties": {"repobilityId": "b3de69ffb31ab653", "scanner": "scanner-primary", "fingerprint": "c1228b0712713865", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test-i18n.html"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-6555bf8bcbb44f4a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in rankings.html:1642"}, "properties": {"repobilityId": "41b3fddc9c8508c1", "scanner": "scanner-primary", "fingerprint": "6555bf8bcbb44f4a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rankings.html"}, "region": {"startLine": 1642}}}]}, {"ruleId": "scanner-abf182ce4aa6815a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in economic-calendar/index.html:413"}, "properties": {"repobilityId": "acd066edb8203b76", "scanner": "scanner-primary", "fingerprint": "abf182ce4aa6815a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "economic-calendar/index.html"}, "region": {"startLine": 413}}}]}, {"ruleId": "scanner-7d91cef40784c5c6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ar/rankings.html:1598"}, "properties": {"repobilityId": "67ab37a0408d377e", "scanner": "scanner-primary", "fingerprint": "7d91cef40784c5c6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ar/rankings.html"}, "region": {"startLine": 1598}}}]}, {"ruleId": "scanner-35c73cf90014171e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ar/economic-calendar/index.html:382"}, "properties": {"repobilityId": "c4e7f18863829e07", "scanner": "scanner-primary", "fingerprint": "35c73cf90014171e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ar/economic-calendar/index.html"}, "region": {"startLine": 382}}}]}, {"ruleId": "scanner-5f2c0930dd37624e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/live-quotes.js:247"}, "properties": {"repobilityId": "e310060310c04cdb", "scanner": "scanner-primary", "fingerprint": "5f2c0930dd37624e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/live-quotes.js"}, "region": {"startLine": 247}}}]}, {"ruleId": "scanner-accb23b4049687dd", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/economic-calendar.js:486"}, "properties": {"repobilityId": "f79d1600770f9bae", "scanner": "scanner-primary", "fingerprint": "accb23b4049687dd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/economic-calendar.js"}, "region": {"startLine": 486}}}]}, {"ruleId": "scanner-1f259bf7dbcd3e5a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/market-data.js:12"}, "properties": {"repobilityId": "00c7ba2b81ffd599", "scanner": "scanner-primary", "fingerprint": "1f259bf7dbcd3e5a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/market-data.js"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-4ca2222a6ed4ff4e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/mobile-nav.js:42"}, "properties": {"repobilityId": "f91e22d8b118311f", "scanner": "scanner-primary", "fingerprint": "4ca2222a6ed4ff4e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/mobile-nav.js"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-6ae1d1d0dbd39c55", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/global-header.js:43"}, "properties": {"repobilityId": "813eaaeae10b3bed", "scanner": "scanner-primary", "fingerprint": "6ae1d1d0dbd39c55", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/global-header.js"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-5301f3d86fad8254", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market-outlook-mobile.js:42"}, "properties": {"repobilityId": "ddf2a5eb6e1cd4f3", "scanner": "scanner-primary", "fingerprint": "5301f3d86fad8254", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/market-outlook-mobile.js"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-4f3e9cd27ad21024", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/search-autocomplete.js:45"}, "properties": {"repobilityId": "fbced4f0187c06be", "scanner": "scanner-primary", "fingerprint": "4f3e9cd27ad21024", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/search-autocomplete.js"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-955f72363d0d0104", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/economic-calendar.js:1185"}, "properties": {"repobilityId": "6d17d79c1580eb72", "scanner": "scanner-primary", "fingerprint": "955f72363d0d0104", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/economic-calendar.js"}, "region": {"startLine": 1185}}}]}, {"ruleId": "scanner-345ab262980914c8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/research-layer.js:116"}, "properties": {"repobilityId": "5374b221fb7348ce", "scanner": "scanner-primary", "fingerprint": "345ab262980914c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/research-layer.js"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-a88476b51c45bd6d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/related-content.js:577"}, "properties": {"repobilityId": "78bd7c6f839cea23", "scanner": "scanner-primary", "fingerprint": "a88476b51c45bd6d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/related-content.js"}, "region": {"startLine": 577}}}]}, {"ruleId": "scanner-63205c69420bf6c0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/qqq-performance.js:33"}, "properties": {"repobilityId": "e6220f1b73dc0459", "scanner": "scanner-primary", "fingerprint": "63205c69420bf6c0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/qqq-performance.js"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-c53660eebe97cf2d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/ranking-engine.js:181"}, "properties": {"repobilityId": "19a5c38c3d37a5c4", "scanner": "scanner-primary", "fingerprint": "c53660eebe97cf2d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/market/ranking-engine.js"}, "region": {"startLine": 181}}}]}, {"ruleId": "scanner-ee1ad57e4dfb8ae6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/ui-renderer.js:158"}, "properties": {"repobilityId": "299f09a0304829c0", "scanner": "scanner-primary", "fingerprint": "ee1ad57e4dfb8ae6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/market/ui-renderer.js"}, "region": {"startLine": 158}}}]}, {"ruleId": "scanner-ff809f4f37bd25c6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/recently-viewed.js:35"}, "properties": {"repobilityId": "24d225bb6f467475", "scanner": "scanner-primary", "fingerprint": "ff809f4f37bd25c6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/market/recently-viewed.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-4f694fffd0737a12", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/screener-engine.js:16"}, "properties": {"repobilityId": "0308690d066c8cda", "scanner": "scanner-primary", "fingerprint": "4f694fffd0737a12", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/market/screener-engine.js"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-c0adfac24da96a44", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/watchlist.js:81"}, "properties": {"repobilityId": "487dea10bec87e42", "scanner": "scanner-primary", "fingerprint": "c0adfac24da96a44", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/market/watchlist.js"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-466c8fdaffcdef41", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/market/market-authority-layer.js:63"}, "properties": {"repobilityId": "34892c9876c39cd0", "scanner": "scanner-primary", "fingerprint": "466c8fdaffcdef41", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/market/market-authority-layer.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-c52ce5e36748065f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/market-intelligence/market-intelligence.js:88"}, "properties": {"repobilityId": "566245622b26ac80", "scanner": "scanner-primary", "fingerprint": "c52ce5e36748065f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/market-intelligence/market-intelligence.js"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-ead2ba5ab959ff11", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in en/rankings.html:1397"}, "properties": {"repobilityId": "ccd620297127ec56", "scanner": "scanner-primary", "fingerprint": "ead2ba5ab959ff11", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "en/rankings.html"}, "region": {"startLine": 1397}}}]}, {"ruleId": "scanner-b3bbc9569cafcd63", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/update-homepage-featured.js:14"}, "properties": {"repobilityId": "ec0de84c4de8c327", "scanner": "scanner-primary", "fingerprint": "b3bbc9569cafcd63", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/update-homepage-featured.js"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-07ca15b5b39a8acc", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/check-article-pairs.js:5"}, "properties": {"repobilityId": "f04ada7239f0f804", "scanner": "scanner-primary", "fingerprint": "07ca15b5b39a8acc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/check-article-pairs.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-32e1940202937e54", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/generate-insights.js:11"}, "properties": {"repobilityId": "23e73bc94fccf582", "scanner": "scanner-primary", "fingerprint": "32e1940202937e54", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/generate-insights.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-91a29c164ca6cf34", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/check-production-readiness.js:3"}, "properties": {"repobilityId": "5654aa20427782cf", "scanner": "scanner-primary", "fingerprint": "91a29c164ca6cf34", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/check-production-readiness.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-256639d2da8a4cff", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/generate-market-outlook-draft.js:6"}, "properties": {"repobilityId": "17ee4fa189446715", "scanner": "scanner-primary", "fingerprint": "256639d2da8a4cff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/generate-market-outlook-draft.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-15495ad1803882c2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/check-economic-calendar.js:248"}, "properties": {"repobilityId": "9f5d9680cb822488", "scanner": "scanner-primary", "fingerprint": "15495ad1803882c2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/check-economic-calendar.js"}, "region": {"startLine": 248}}}]}, {"ruleId": "scanner-79de8703cac5809e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/build-run-snapshot.js:5"}, "properties": {"repobilityId": "d5c02098b009ea52", "scanner": "scanner-primary", "fingerprint": "79de8703cac5809e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/build-run-snapshot.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-c6087cbfe60dc538", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/autonomous-review-engine.js:5"}, "properties": {"repobilityId": "b9c40d75a384f9d9", "scanner": "scanner-primary", "fingerprint": "c6087cbfe60dc538", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/autonomous-review-engine.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-e87ef51f506d6e64", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/publish-reviewed-article.js:5"}, "properties": {"repobilityId": "0960697da92684f9", "scanner": "scanner-primary", "fingerprint": "e87ef51f506d6e64", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/publish-reviewed-article.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-ee2fb833a2a30c84", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/telegram-backfill.js:15"}, "properties": {"repobilityId": "ec59a1f4411d26d2", "scanner": "scanner-primary", "fingerprint": "ee2fb833a2a30c84", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/telegram-backfill.js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-3efb3d1103a708f2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/check-telegram-delivery-preflight.js:3"}, "properties": {"repobilityId": "68d88bb3da57cb79", "scanner": "scanner-primary", "fingerprint": "3efb3d1103a708f2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/check-telegram-delivery-preflight.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-31dd8c78a55b7254", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/autonomous-publishing-brain.js:5"}, "properties": {"repobilityId": "a5c3260a9a7121de", "scanner": "scanner-primary", "fingerprint": "31dd8c78a55b7254", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/autonomous-publishing-brain.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-c289d84fe121f19e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/repair-utf8-mojibake.js:4"}, "properties": {"repobilityId": "5d3dfb0c1b28be0b", "scanner": "scanner-primary", "fingerprint": "c289d84fe121f19e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/repair-utf8-mojibake.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-ca4df853b1699aaa", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in tools/runtime_supervisor.py:209"}, "properties": {"repobilityId": "02431dadfdde144d", "scanner": "scanner-primary", "fingerprint": "ca4df853b1699aaa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/runtime_supervisor.py"}, "region": {"startLine": 209}}}]}, {"ruleId": "scanner-39ee44b18185d317", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/publish-market-outlook.js:5"}, "properties": {"repobilityId": "9edb806ad17296da", "scanner": "scanner-primary", "fingerprint": "39ee44b18185d317", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/publish-market-outlook.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-0b2b6b8f228ff74b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/generate-ai-editorial-draft.js:5"}, "properties": {"repobilityId": "0f1a7fb5fbdd7727", "scanner": "scanner-primary", "fingerprint": "0b2b6b8f228ff74b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/generate-ai-editorial-draft.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-e9020345787726e8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/generate-rankings.js:311"}, "properties": {"repobilityId": "72643eb0c8317fc6", "scanner": "scanner-primary", "fingerprint": "e9020345787726e8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/generate-rankings.js"}, "region": {"startLine": 311}}}]}, {"ruleId": "scanner-c74b7fd98c7db66b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/check-telegram-activation.js:14"}, "properties": {"repobilityId": "98448373d6092e5e", "scanner": "scanner-primary", "fingerprint": "c74b7fd98c7db66b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/check-telegram-activation.js"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-3ceb819339e0d910", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/cleanup-orphan-public-files.js:39"}, "properties": {"repobilityId": "eed75c7ecf7990df", "scanner": "scanner-primary", "fingerprint": "3ceb819339e0d910", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/cleanup-orphan-public-files.js"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-8c161af0f9378290", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/run-full-market-outlook-pipeline.js:10"}, "properties": {"repobilityId": "4efb971a994df8d7", "scanner": "scanner-primary", "fingerprint": "8c161af0f9378290", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/run-full-market-outlook-pipeline.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-92b896d954ebb741", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/run-insight-pipeline.js:5"}, "properties": {"repobilityId": "7995dda663cd4ddb", "scanner": "scanner-primary", "fingerprint": "92b896d954ebb741", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/run-insight-pipeline.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-89b087d42d4f5077", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/repair-institutional-depth.js:19"}, "properties": {"repobilityId": "5ca24a57100d0259", "scanner": "scanner-primary", "fingerprint": "89b087d42d4f5077", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/repair-institutional-depth.js"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-a4f35339bc1a83e3", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/run-authority-repair-cycle.js:21"}, "properties": {"repobilityId": "4e64961dca0d1984", "scanner": "scanner-primary", "fingerprint": "a4f35339bc1a83e3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/run-authority-repair-cycle.js"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-913f23913fd76d53", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/self-heal-market-outlook-drafts.js:17"}, "properties": {"repobilityId": "0b985191d2d41fa1", "scanner": "scanner-primary", "fingerprint": "913f23913fd76d53", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/self-heal-market-outlook-drafts.js"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-a6842ecb0fa27c84", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/check-insight-quality.js:5"}, "properties": {"repobilityId": "6faad4d7a1f33322", "scanner": "scanner-primary", "fingerprint": "a6842ecb0fa27c84", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/check-insight-quality.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-457a7324c6476138", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in netlify/functions/economic-calendar.js:14"}, "properties": {"repobilityId": "81d7a587d697b767", "scanner": "scanner-primary", "fingerprint": "457a7324c6476138", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "netlify/functions/economic-calendar.js"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-4661563c60ba786c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in netlify/functions/market-health.js:107"}, "properties": {"repobilityId": "7e6c22499a94174a", "scanner": "scanner-primary", "fingerprint": "4661563c60ba786c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "netlify/functions/market-health.js"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-d3f2ccda49f38d7a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in netlify/functions/market-data.js:233"}, "properties": {"repobilityId": "72516239437c4b3b", "scanner": "scanner-primary", "fingerprint": "d3f2ccda49f38d7a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "netlify/functions/market-data.js"}, "region": {"startLine": 233}}}]}, {"ruleId": "scanner-b7ffef7d97526b57", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in market-intelligence/market-intelligence.js:32"}, "properties": {"repobilityId": "90a213f55bd94525", "scanner": "scanner-primary", "fingerprint": "b7ffef7d97526b57", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "market-intelligence/market-intelligence.js"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-f4563cdd7e75ba36", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in .github/workflows/autonomous-publishing-brain.yml:130"}, "properties": {"repobilityId": "771faa23ddbd1ec4", "scanner": "scanner-primary", "fingerprint": "f4563cdd7e75ba36", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/autonomous-publishing-brain.yml"}, "region": {"startLine": 130}}}]}, {"ruleId": "scanner-a7437a09efb7408b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in .github/workflows/archive/market-outlook-draft-generator.yml:99"}, "properties": {"repobilityId": "75b6aca8aa1ac556", "scanner": "scanner-primary", "fingerprint": "a7437a09efb7408b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-outlook-draft-generator.yml"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-d78e8af7cbbd43f5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in .github/workflows/archive/publishing-control-center.yml:418"}, "properties": {"repobilityId": "9688e43bcbe7a5ad", "scanner": "scanner-primary", "fingerprint": "d78e8af7cbbd43f5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/publishing-control-center.yml"}, "region": {"startLine": 418}}}]}, {"ruleId": "scanner-4931de766b7e6aa9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "daac4ea4b68b00a5", "scanner": "scanner-primary", "fingerprint": "4931de766b7e6aa9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/autonomous-publishing-brain.yml"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-4931de766b7e6aa9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "47ab82e27a5979a1", "scanner": "scanner-primary", "fingerprint": "4931de766b7e6aa9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/autonomous-publishing-brain.yml"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-16dfbc28008e6b42", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "ac4528c31b963092", "scanner": "scanner-primary", "fingerprint": "16dfbc28008e6b42", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/autonomous-publishing-brain.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2841d34d4f454230", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7cdacf3853dfbf6a", "scanner": "scanner-primary", "fingerprint": "2841d34d4f454230", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/distribution-brain.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-2841d34d4f454230", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "74e779bed1bc70f0", "scanner": "scanner-primary", "fingerprint": "2841d34d4f454230", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/distribution-brain.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-09b6302abafe540a", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "ab493f34b8dab49f", "scanner": "scanner-primary", "fingerprint": "09b6302abafe540a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/distribution-brain.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-705ee65ff7d2f397", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a56ba516aa54d2ea", "scanner": "scanner-primary", "fingerprint": "705ee65ff7d2f397", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/educational-intelligence-brain.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-705ee65ff7d2f397", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b33ac46f4986041f", "scanner": "scanner-primary", "fingerprint": "705ee65ff7d2f397", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/educational-intelligence-brain.yml"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-97639e5a8eb556cb", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "e7bf3a9cba03d54f", "scanner": "scanner-primary", "fingerprint": "97639e5a8eb556cb", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/educational-intelligence-brain.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-49a412bb45a672f6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "590cdb68d34144be", "scanner": "scanner-primary", "fingerprint": "49a412bb45a672f6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/technical-intelligence-brain.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-49a412bb45a672f6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f4722e23d0efebfb", "scanner": "scanner-primary", "fingerprint": "49a412bb45a672f6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/technical-intelligence-brain.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-8a98afa1bfd02819", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "e394748e6233f0a0", "scanner": "scanner-primary", "fingerprint": "8a98afa1bfd02819", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/technical-intelligence-brain.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8a71902814f0cfa6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3066bff6821afb87", "scanner": "scanner-primary", "fingerprint": "8a71902814f0cfa6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/social-approval-runner.yml"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-8a71902814f0cfa6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dbda80e6d568f809", "scanner": "scanner-primary", "fingerprint": "8a71902814f0cfa6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/social-approval-runner.yml"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-3be53219060659f7", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "144aa86c3dff5131", "scanner": "scanner-primary", "fingerprint": "3be53219060659f7", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/social-approval-runner.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-34d6140de154606e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "65088fc8a439856d", "scanner": "scanner-primary", "fingerprint": "34d6140de154606e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/briefs-brain.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-34d6140de154606e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a7cff302d02a417e", "scanner": "scanner-primary", "fingerprint": "34d6140de154606e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/briefs-brain.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-cec40130a38bbb71", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "39a510d4930096c6", "scanner": "scanner-primary", "fingerprint": "cec40130a38bbb71", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/briefs-brain.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-09d0b6c0fd643226", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "972946f1af01f9f5", "scanner": "scanner-primary", "fingerprint": "09d0b6c0fd643226", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/homepage-feed.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-09d0b6c0fd643226", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4c3d6fc970e337f5", "scanner": "scanner-primary", "fingerprint": "09d0b6c0fd643226", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/homepage-feed.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-d6d9eaf86d7b2761", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "69b432ed269ea841", "scanner": "scanner-primary", "fingerprint": "d6d9eaf86d7b2761", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/homepage-feed.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a29441ea0ed76f8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ea8e1cb574b14cd1", "scanner": "scanner-primary", "fingerprint": "6a29441ea0ed76f8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/articles-brain.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-6a29441ea0ed76f8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d93b5965c7b980f4", "scanner": "scanner-primary", "fingerprint": "6a29441ea0ed76f8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/articles-brain.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-2400e815ddc89a52", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "212157e9a81a63fd", "scanner": "scanner-primary", "fingerprint": "2400e815ddc89a52", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/articles-brain.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0337ef169040fa5f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8aaa24a75f4b5645", "scanner": "scanner-primary", "fingerprint": "0337ef169040fa5f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/market-news-brain.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-0337ef169040fa5f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97df89fdb5f99d94", "scanner": "scanner-primary", "fingerprint": "0337ef169040fa5f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/market-news-brain.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-06c69e121f1b020b", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "825d3c2517494da0", "scanner": "scanner-primary", "fingerprint": "06c69e121f1b020b", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/market-news-brain.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-16e5ba266b82d0fb", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7e4687ff8211bd01", "scanner": "scanner-primary", "fingerprint": "16e5ba266b82d0fb", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/market-outlook-brain.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-16e5ba266b82d0fb", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8a25ea4e66db14b7", "scanner": "scanner-primary", "fingerprint": "16e5ba266b82d0fb", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/market-outlook-brain.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-3d8aff5d99dece1e", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "e536906d871775a0", "scanner": "scanner-primary", "fingerprint": "3d8aff5d99dece1e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/market-outlook-brain.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d060a17e02bdc3e1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "135784f07778ace0", "scanner": "scanner-primary", "fingerprint": "d060a17e02bdc3e1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/market-watch.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-d060a17e02bdc3e1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "93668f2c1c35dce3", "scanner": "scanner-primary", "fingerprint": "d060a17e02bdc3e1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/market-watch.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-255d4ee7c897409e", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a6e7866a055faf29", "scanner": "scanner-primary", "fingerprint": "255d4ee7c897409e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/market-watch.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1ea6801146c94763", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9de16370abc3d365", "scanner": "scanner-primary", "fingerprint": "1ea6801146c94763", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/daily-research-brain.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-1ea6801146c94763", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "17a085ec99a2d7af", "scanner": "scanner-primary", "fingerprint": "1ea6801146c94763", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/daily-research-brain.yml"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-2d34959eaf63f881", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "48fd7118f0d5f500", "scanner": "scanner-primary", "fingerprint": "2d34959eaf63f881", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/daily-research-brain.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-777d82af992cffe6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c19bdb30c196edce", "scanner": "scanner-primary", "fingerprint": "777d82af992cffe6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-brief.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-777d82af992cffe6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "41428aafebadba2a", "scanner": "scanner-primary", "fingerprint": "777d82af992cffe6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-brief.yml"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-777d82af992cffe6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c19bdb30c196edce", "scanner": "scanner-primary", "fingerprint": "777d82af992cffe6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-brief.yml"}, "region": {"startLine": 158}}}]}, {"ruleId": "scanner-777d82af992cffe6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "41428aafebadba2a", "scanner": "scanner-primary", "fingerprint": "777d82af992cffe6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-brief.yml"}, "region": {"startLine": 163}}}]}, {"ruleId": "scanner-4dbb78b5a7cd7d75", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "70cce6f105d413ca", "scanner": "scanner-primary", "fingerprint": "4dbb78b5a7cd7d75", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-brief.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b4ba0fdad0090c7f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b876d5d26052579f", "scanner": "scanner-primary", "fingerprint": "b4ba0fdad0090c7f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/news-analysis-draft.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-b4ba0fdad0090c7f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d0f94758fc59c5a1", "scanner": "scanner-primary", "fingerprint": "b4ba0fdad0090c7f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/news-analysis-draft.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-d53daad7ca9afdeb", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "afc267be89407ffc", "scanner": "scanner-primary", "fingerprint": "d53daad7ca9afdeb", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/news-analysis-draft.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2712af3b2811cc31", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cb1607685ae0d19f", "scanner": "scanner-primary", "fingerprint": "2712af3b2811cc31", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/editorial-draft-generator.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-2712af3b2811cc31", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4b0afaa14b4d2402", "scanner": "scanner-primary", "fingerprint": "2712af3b2811cc31", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/editorial-draft-generator.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-d364b6ea88e78de2", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8bb82094231a38f7", "scanner": "scanner-primary", "fingerprint": "d364b6ea88e78de2", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/editorial-draft-generator.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d00b1ede62ee4968", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0470a70c937e9c44", "scanner": "scanner-primary", "fingerprint": "d00b1ede62ee4968", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-outlook-topic-seeder.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-d00b1ede62ee4968", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7e85a6390fc3a54a", "scanner": "scanner-primary", "fingerprint": "d00b1ede62ee4968", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-outlook-topic-seeder.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-33f80f86a5d5133a", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "f0e4239db65317f7", "scanner": "scanner-primary", "fingerprint": "33f80f86a5d5133a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-outlook-topic-seeder.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8addc477a4c85b67", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b8cd503cebf8b5c8", "scanner": "scanner-primary", "fingerprint": "8addc477a4c85b67", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/telegram-backfill.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-8addc477a4c85b67", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0fcdf9906ae12f68", "scanner": "scanner-primary", "fingerprint": "8addc477a4c85b67", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/telegram-backfill.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-1b8c6ee3b782a7e7", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "592a844920eba06a", "scanner": "scanner-primary", "fingerprint": "1b8c6ee3b782a7e7", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/telegram-backfill.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ea64abb3082fc8be", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "37afd7c3a02a11fc", "scanner": "scanner-primary", "fingerprint": "ea64abb3082fc8be", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/editorial-publisher.yml"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-ea64abb3082fc8be", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "11d7b041d8442902", "scanner": "scanner-primary", "fingerprint": "ea64abb3082fc8be", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/editorial-publisher.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-d93489086e39cad6", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "2884d98e99bec9a8", "scanner": "scanner-primary", "fingerprint": "d93489086e39cad6", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/editorial-publisher.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ab69671c2919e2b9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1c99bf9f02242a1b", "scanner": "scanner-primary", "fingerprint": "ab69671c2919e2b9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-outlook-draft-generator.yml"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-ab69671c2919e2b9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "61e706d9d1b36dca", "scanner": "scanner-primary", "fingerprint": "ab69671c2919e2b9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-outlook-draft-generator.yml"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-2baefc2192ac02a3", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "704eeb56df9b7c44", "scanner": "scanner-primary", "fingerprint": "2baefc2192ac02a3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-outlook-draft-generator.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b71b0841e8e203b1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3589f9f15a4dbcbc", "scanner": "scanner-primary", "fingerprint": "b71b0841e8e203b1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/publishing-control-center.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-b71b0841e8e203b1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e3fa1ff78874932e", "scanner": "scanner-primary", "fingerprint": "b71b0841e8e203b1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/publishing-control-center.yml"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-5a524c959f85a4aa", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "add6f0ad8a0fd952", "scanner": "scanner-primary", "fingerprint": "5a524c959f85a4aa", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/publishing-control-center.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-62c90369510f95f9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7d65d3c3f5ce898c", "scanner": "scanner-primary", "fingerprint": "62c90369510f95f9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/telegram-smoke-test.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-62c90369510f95f9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "327d9716ebc1d5f1", "scanner": "scanner-primary", "fingerprint": "62c90369510f95f9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/telegram-smoke-test.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-eec1da637e462d6f", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "68323b15c6d6be4a", "scanner": "scanner-primary", "fingerprint": "eec1da637e462d6f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/telegram-smoke-test.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-405f67765337735b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "170be5614440755c", "scanner": "scanner-primary", "fingerprint": "405f67765337735b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-outlook-publisher.yml"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-405f67765337735b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "06cd57cacf11171a", "scanner": "scanner-primary", "fingerprint": "405f67765337735b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-outlook-publisher.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-28286a620c7cd3a8", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a61ff31f110da529", "scanner": "scanner-primary", "fingerprint": "28286a620c7cd3a8", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/archive/market-outlook-publisher.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-75f3b2b7ba80e917", "level": "note", "message": {"text": "Very large file: script.js (928 lines)"}, "properties": {"repobilityId": "aeaad66708635a8c", "scanner": "scanner-primary", "fingerprint": "75f3b2b7ba80e917", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-760d64b787ab6cf5", "level": "note", "message": {"text": "Very large file: js/language-router.js (2229 lines)"}, "properties": {"repobilityId": "c6d3ba0510e97f06", "scanner": "scanner-primary", "fingerprint": "760d64b787ab6cf5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5dc1db1a19049bc9", "level": "note", "message": {"text": "Very large file: js/economic-calendar.js (1641 lines)"}, "properties": {"repobilityId": "1c64ba5631300ea3", "scanner": "scanner-primary", "fingerprint": "5dc1db1a19049bc9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5566aa5c44581557", "level": "note", "message": {"text": "Very large file: tools/test-economic-calendar-logic.js (1187 lines)"}, "properties": {"repobilityId": "55a2b20879c06e9d", "scanner": "scanner-primary", "fingerprint": "5566aa5c44581557", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f40938b812be6e25", "level": "note", "message": {"text": "Very large file: tools/generate-authority-hubs.js (914 lines)"}, "properties": {"repobilityId": "3e5c7acf73fe89d5", "scanner": "scanner-primary", "fingerprint": "f40938b812be6e25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e11c98b2f7f2cd50", "level": "note", "message": {"text": "Very large file: tools/generate-localized-pages.js (1683 lines)"}, "properties": {"repobilityId": "9bc12d01f9d407c7", "scanner": "scanner-primary", "fingerprint": "e11c98b2f7f2cd50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6d3a46849a00694a", "level": "note", "message": {"text": "Very large file: tools/generate-market-outlook-draft.js (1291 lines)"}, "properties": {"repobilityId": "4872b2b3f5b11417", "scanner": "scanner-primary", "fingerprint": "6d3a46849a00694a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1d9baa252fd16f1e", "level": "note", "message": {"text": "Very large file: tools/generate-market-news-article.js (901 lines)"}, "properties": {"repobilityId": "053d605e8aece1d8", "scanner": "scanner-primary", "fingerprint": "1d9baa252fd16f1e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1e8c21c8f6f006a8", "level": "note", "message": {"text": "Very large file: tools/autonomous-publishing-brain.js (2343 lines)"}, "properties": {"repobilityId": "2dd10c9192c20eb0", "scanner": "scanner-primary", "fingerprint": "1e8c21c8f6f006a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c0a591f62764640d", "level": "note", "message": {"text": "Very large file: tools/generate-ai-market-outlook-content.js (1225 lines)"}, "properties": {"repobilityId": "c79eb76b8a378c63", "scanner": "scanner-primary", "fingerprint": "c0a591f62764640d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-be290dc6a704c1fd", "level": "note", "message": {"text": "Very large file: tools/render-newsroom-modules.js (1140 lines)"}, "properties": {"repobilityId": "3aef71b123f76473", "scanner": "scanner-primary", "fingerprint": "be290dc6a704c1fd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "f1db7b8b66d59dee", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "c8b0b92839da5c6a", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "00c5072eeb42cc59", "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": "166cd076dc75ef2c", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "4df557d3f26bdcfb", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "b73a35560d5108f4", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "e0429fb29b13f3c9", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "47bfb882f42111e5", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "c720881dfc374c6d", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "90cbb248c64dd39e", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "2433312479636efa", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cb45f59c769f351c", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/live-quotes.js:3"}, "properties": {"repobilityId": "e74f222fc1c46804", "scanner": "scanner-primary", "fingerprint": "cb45f59c769f351c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-415c554ef62dc822", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/economic-calendar.js:3"}, "properties": {"repobilityId": "6133c14c83ecf363", "scanner": "scanner-primary", "fingerprint": "415c554ef62dc822", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58d46652a7dc3ca0", "level": "none", "message": {"text": "Commented-code block (8 lines) in js/live-terminal.js:3"}, "properties": {"repobilityId": "eddddabdad6a4c6a", "scanner": "scanner-primary", "fingerprint": "58d46652a7dc3ca0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7684b507b5ce4f46", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 js/live-terminal.js:192"}, "properties": {"repobilityId": "3e5babf989b8ed03", "scanner": "scanner-primary", "fingerprint": "7684b507b5ce4f46", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc7d106570483b67", "level": "none", "message": {"text": "Commented-code block (6 lines) in js/editorial-visuals.js:3"}, "properties": {"repobilityId": "c519a88d3157f67c", "scanner": "scanner-primary", "fingerprint": "cc7d106570483b67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4d600498526d5be", "level": "note", "message": {"text": "Legacy-named symbol `ta_recently_viewed_v1` in js/market/ui-renderer.js:535"}, "properties": {"repobilityId": "866e089a73b416b2", "scanner": "scanner-primary", "fingerprint": "f4d600498526d5be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f9c3f4e5869187d5", "level": "note", "message": {"text": "Legacy-named symbol `ta_recently_viewed_v1` in js/market/recently-viewed.js:1"}, "properties": {"repobilityId": "5c08eac136ef33c0", "scanner": "scanner-primary", "fingerprint": "f9c3f4e5869187d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c799c5cbb098675a", "level": "note", "message": {"text": "Legacy-named symbol `tradealpha_watchlist_v1` in js/market/watchlist.js:1"}, "properties": {"repobilityId": "d1d3d2d19ba10d34", "scanner": "scanner-primary", "fingerprint": "c799c5cbb098675a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c4f3e3786662d472", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 js/market/market-authority-layer.js:129"}, "properties": {"repobilityId": "7de4dee70dd7b4d2", "scanner": "scanner-primary", "fingerprint": "c4f3e3786662d472", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-43e8c6521a0abacd", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/build-distribution-plan.js:3"}, "properties": {"repobilityId": "8c084d6bd17e2118", "scanner": "scanner-primary", "fingerprint": "43e8c6521a0abacd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-754c4685604751c4", "level": "note", "message": {"text": "Legacy-named symbol `highOld` in tools/test-economic-calendar-logic.js:506"}, "properties": {"repobilityId": "f1d146ea0daf855d", "scanner": "scanner-primary", "fingerprint": "754c4685604751c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b7afd82d8440f4d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/build-market-narrative-state.js:3"}, "properties": {"repobilityId": "914b13edfb881f6b", "scanner": "scanner-primary", "fingerprint": "b7afd82d8440f4d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f83797b17e9c54a1", "level": "none", "message": {"text": "Commented-code block (16 lines) in tools/check-embedded-charts.js:7"}, "properties": {"repobilityId": "6b688b7d9012e2e1", "scanner": "scanner-primary", "fingerprint": "f83797b17e9c54a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d295adb46adda421", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/check-educational-articles.js:3"}, "properties": {"repobilityId": "4f066f0c9276ff13", "scanner": "scanner-primary", "fingerprint": "d295adb46adda421", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a68ed2f87cb02048", "level": "none", "message": {"text": "Commented-code block (11 lines) in tools/check-editorial-cadence.js:3"}, "properties": {"repobilityId": "969399818081d8a8", "scanner": "scanner-primary", "fingerprint": "a68ed2f87cb02048", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9eb5c52b32a1bbbc", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/build-global-macro-events.js:5"}, "properties": {"repobilityId": "c62f26fd88fa796e", "scanner": "scanner-primary", "fingerprint": "9eb5c52b32a1bbbc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e38497ae8d9fd26", "level": "note", "message": {"text": "Legacy-named symbol `anti_generic_gate_v2` in tools/check-editorial-quality.js:185"}, "properties": {"repobilityId": "dd5cc1956d9b329c", "scanner": "scanner-primary", "fingerprint": "5e38497ae8d9fd26", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b608e7ec1dcb2686", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/check-live-terminal.js:3"}, "properties": {"repobilityId": "930c4d7045cd915b", "scanner": "scanner-primary", "fingerprint": "b608e7ec1dcb2686", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-647ab9b86488b9ad", "level": "none", "message": {"text": "Commented-code block (14 lines) in tools/build-narrative-convergence.js:3"}, "properties": {"repobilityId": "36a82239e0ca0232", "scanner": "scanner-primary", "fingerprint": "647ab9b86488b9ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5eb6b3148abf7aa", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/check-market-cognition.js:3"}, "properties": {"repobilityId": "4f4617071a2fc8d4", "scanner": "scanner-primary", "fingerprint": "b5eb6b3148abf7aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdee28c6b76bb1da", "level": "none", "message": {"text": "Commented-code block (15 lines) in tools/check-global-macro-acquisition.js:3"}, "properties": {"repobilityId": "97da8042ee075dbb", "scanner": "scanner-primary", "fingerprint": "cdee28c6b76bb1da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa220d9ead002a19", "level": "none", "message": {"text": "Commented-code block (15 lines) in tools/check-forecast-consensus.js:3"}, "properties": {"repobilityId": "f697fb6efd50abd4", "scanner": "scanner-primary", "fingerprint": "aa220d9ead002a19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f2ad80563427ab5", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/generate-market-outlook-draft.js:156"}, "properties": {"repobilityId": "c67506b6c80c0c34", "scanner": "scanner-primary", "fingerprint": "6f2ad80563427ab5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a7a61c4fed67bf8", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/check-market-news.js:3"}, "properties": {"repobilityId": "8751a560dfc06811", "scanner": "scanner-primary", "fingerprint": "0a7a61c4fed67bf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-099259bf50a6e6f1", "level": "none", "message": {"text": "Commented-code block (13 lines) in tools/check-economic-calendar-ui.js:3"}, "properties": {"repobilityId": "48763f1112f502d7", "scanner": "scanner-primary", "fingerprint": "099259bf50a6e6f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4530ad662f4b58c6", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/build-educational-topics.js:3"}, "properties": {"repobilityId": "e39d97f9fbe1e5a9", "scanner": "scanner-primary", "fingerprint": "4530ad662f4b58c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88bda8b6f4617d6f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/build-tactical-context.js:5"}, "properties": {"repobilityId": "0f4afb197311848f", "scanner": "scanner-primary", "fingerprint": "88bda8b6f4617d6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb090ce3521e648a", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/check-embedded-intelligence.js:3"}, "properties": {"repobilityId": "4a3e67e727e964bb", "scanner": "scanner-primary", "fingerprint": "fb090ce3521e648a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-506b70153948c6b7", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/tactical-context-engine.js:5"}, "properties": {"repobilityId": "b25cab588457874b", "scanner": "scanner-primary", "fingerprint": "506b70153948c6b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-583c056776acd35c", "level": "none", "message": {"text": "Commented-code block (10 lines) in tools/render-intelligence-feed.js:5"}, "properties": {"repobilityId": "47a7a450e78da47e", "scanner": "scanner-primary", "fingerprint": "583c056776acd35c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01b2089f003b5fa7", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/fix-encoding-corruption.js:6"}, "properties": {"repobilityId": "5e61af81fed14d2d", "scanner": "scanner-primary", "fingerprint": "01b2089f003b5fa7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6c4d962830212ea", "level": "none", "message": {"text": "Commented-code block (11 lines) in tools/generate-educational-article.js:5"}, "properties": {"repobilityId": "da9698fe22d43b7b", "scanner": "scanner-primary", "fingerprint": "c6c4d962830212ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-657dfa533eefe970", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/render-editorial-visuals.js:3"}, "properties": {"repobilityId": "277667f4bc06de4b", "scanner": "scanner-primary", "fingerprint": "657dfa533eefe970", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e43c0b59562b7b57", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/generate-market-news-article.js:5"}, "properties": {"repobilityId": "cdbd6510ff03931d", "scanner": "scanner-primary", "fingerprint": "e43c0b59562b7b57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2d81fd15b908286", "level": "none", "message": {"text": "Commented-code block (11 lines) in tools/check-responsive-layout.js:6"}, "properties": {"repobilityId": "37dd7909cc29c537", "scanner": "scanner-primary", "fingerprint": "c2d81fd15b908286", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86b18696df633940", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/check-institutional-charts.js:3"}, "properties": {"repobilityId": "72ccd9f1780319b3", "scanner": "scanner-primary", "fingerprint": "86b18696df633940", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ab7f28b1199e960", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/institutional-language-filter.js:3"}, "properties": {"repobilityId": "14a2e92697f37969", "scanner": "scanner-primary", "fingerprint": "5ab7f28b1199e960", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbc41e8091c84430", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/send-macro-telegram.js:3"}, "properties": {"repobilityId": "1c61144dce8db79c", "scanner": "scanner-primary", "fingerprint": "dbc41e8091c84430", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7921ffe595f1763f", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/generate-structure-index.js:3"}, "properties": {"repobilityId": "fbae546b35d95f2d", "scanner": "scanner-primary", "fingerprint": "7921ffe595f1763f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-465a3a7b4253f129", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/build-rate-path-intelligence.js:7"}, "properties": {"repobilityId": "ef7694f4b3ffde98", "scanner": "scanner-primary", "fingerprint": "465a3a7b4253f129", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-102d8305c2983c83", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/check-editorial-visuals.js:3"}, "properties": {"repobilityId": "49a8e46957803288", "scanner": "scanner-primary", "fingerprint": "102d8305c2983c83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e48f498a42e70c2e", "level": "none", "message": {"text": "Commented-code block (14 lines) in tools/check-liquidity-regime.js:3"}, "properties": {"repobilityId": "5e95a0bd906433b4", "scanner": "scanner-primary", "fingerprint": "e48f498a42e70c2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-656128c39a881ed6", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/check-homepage-intelligence-feed.js:3"}, "properties": {"repobilityId": "1a51aa78bf1bf588", "scanner": "scanner-primary", "fingerprint": "656128c39a881ed6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f319b6a693cd9a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/check-editorial-personas.js:3"}, "properties": {"repobilityId": "3fda33842eb173ee", "scanner": "scanner-primary", "fingerprint": "8f319b6a693cd9a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c35e81bbde0a661", "level": "none", "message": {"text": "Commented-code block (11 lines) in tools/check-social-activation.js:3"}, "properties": {"repobilityId": "ff6acefd283ebb88", "scanner": "scanner-primary", "fingerprint": "0c35e81bbde0a661", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5aceb5532ac563e2", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/generate-daily-research-note.js:5"}, "properties": {"repobilityId": "cd6f5149b241aae3", "scanner": "scanner-primary", "fingerprint": "5aceb5532ac563e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a552a17f1c24d69", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/generate-articles-index.js:3"}, "properties": {"repobilityId": "c022f3c0ed2347e3", "scanner": "scanner-primary", "fingerprint": "9a552a17f1c24d69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a8f648be23ef06c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/check-editorial-conviction.js:3"}, "properties": {"repobilityId": "7cb4106400836771", "scanner": "scanner-primary", "fingerprint": "5a8f648be23ef06c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4c5c431032dd7a3", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/check-related-research.js:3"}, "properties": {"repobilityId": "5153fe41cc919944", "scanner": "scanner-primary", "fingerprint": "b4c5c431032dd7a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53af21ff3808dc41", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/generate-market-brief.js:3"}, "properties": {"repobilityId": "3b04c08d4efe8b7b", "scanner": "scanner-primary", "fingerprint": "53af21ff3808dc41", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90baf6094a5f9d36", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/run-social-approval.js:5"}, "properties": {"repobilityId": "ec830b1822ab957d", "scanner": "scanner-primary", "fingerprint": "90baf6094a5f9d36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-495709d9135834ac", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/build-liquidity-regime.js:5"}, "properties": {"repobilityId": "94d03439358693ba", "scanner": "scanner-primary", "fingerprint": "495709d9135834ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17e3811052736977", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/build-news-eligibility.js:3"}, "properties": {"repobilityId": "8769ed2d6ef1e6a4", "scanner": "scanner-primary", "fingerprint": "17e3811052736977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7424c894479713fb", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/build-macro-cognition.js:3"}, "properties": {"repobilityId": "3874c8b9c3cba3d1", "scanner": "scanner-primary", "fingerprint": "7424c894479713fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9fd5858c4e39ae2c", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/build-social-approval-queue.js:5"}, "properties": {"repobilityId": "4a169c2efca37895", "scanner": "scanner-primary", "fingerprint": "9fd5858c4e39ae2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7865761035cef17", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/build-intelligence-monitor.js:5"}, "properties": {"repobilityId": "4da3e607b440ec2b", "scanner": "scanner-primary", "fingerprint": "f7865761035cef17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9920a8af4f221ef1", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/build-chart-intelligence.js:5"}, "properties": {"repobilityId": "57a6c988d05ae79d", "scanner": "scanner-primary", "fingerprint": "9920a8af4f221ef1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a127c48f73c27493", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/apply-global-header.js:76"}, "properties": {"repobilityId": "d1b36085dcf9bf9f", "scanner": "scanner-primary", "fingerprint": "a127c48f73c27493", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c6a0b0de24456b3", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/build-market-pulse.js:3"}, "properties": {"repobilityId": "1a9ebb3d8ec0da09", "scanner": "scanner-primary", "fingerprint": "4c6a0b0de24456b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80d2b47e2e640cb3", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/analyst-voice-engine.js:176"}, "properties": {"repobilityId": "2cd685b63efb094d", "scanner": "scanner-primary", "fingerprint": "80d2b47e2e640cb3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f45daac2830cd2ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/verify-publish-integrity.js:8"}, "properties": {"repobilityId": "a6ce05ffe04e1a0c", "scanner": "scanner-primary", "fingerprint": "f45daac2830cd2ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ec06049b0548ded", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/reaction-intelligence.js:5"}, "properties": {"repobilityId": "e00105c22943fa68", "scanner": "scanner-primary", "fingerprint": "8ec06049b0548ded", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5c6fd54b746c6c8", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/check-educational-rotation.js:3"}, "properties": {"repobilityId": "99499882bac90ecd", "scanner": "scanner-primary", "fingerprint": "f5c6fd54b746c6c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a40c802ba6651c1a", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/check-narrative-convergence.js:3"}, "properties": {"repobilityId": "f1cf082a59ed4fc0", "scanner": "scanner-primary", "fingerprint": "a40c802ba6651c1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d151cebeb56776eb", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/build-market-structure.js:5"}, "properties": {"repobilityId": "a97a66a58a8401c1", "scanner": "scanner-primary", "fingerprint": "d151cebeb56776eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f9a1a20fe44176a", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/test-macro-cognition-logic.js:3"}, "properties": {"repobilityId": "ccd8993f08e3b852", "scanner": "scanner-primary", "fingerprint": "8f9a1a20fe44176a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3ceb01a1fd3397a", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/check-visual-composition.js:3"}, "properties": {"repobilityId": "7e9cf01e2af7ecce", "scanner": "scanner-primary", "fingerprint": "f3ceb01a1fd3397a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6c1e92eaaf44e66", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/check-distribution-plan.js:3"}, "properties": {"repobilityId": "ceceec4523837a1a", "scanner": "scanner-primary", "fingerprint": "f6c1e92eaaf44e66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b13c24c3daeb8a68", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/editorial-visual-contracts.js:8"}, "properties": {"repobilityId": "16e9492ffc6c4b3e", "scanner": "scanner-primary", "fingerprint": "b13c24c3daeb8a68", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb4b75f67b4f924c", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/check-macro-cognition.js:3"}, "properties": {"repobilityId": "2b3ac4ebb7b8636f", "scanner": "scanner-primary", "fingerprint": "cb4b75f67b4f924c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32ac4a245ffce9e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/detect-market-regime.js:3"}, "properties": {"repobilityId": "20b4ee13adaca7f6", "scanner": "scanner-primary", "fingerprint": "32ac4a245ffce9e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1c1ac56216af828", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/generate-macro-narrative.js:3"}, "properties": {"repobilityId": "de6e818733ca2451", "scanner": "scanner-primary", "fingerprint": "e1c1ac56216af828", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-973c5af8e30d62e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/autonomous-publishing-brain.js:476"}, "properties": {"repobilityId": "84f1f42b916157e2", "scanner": "scanner-primary", "fingerprint": "973c5af8e30d62e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f553e21a4c511c1", "level": "none", "message": {"text": "Commented-code block (15 lines) in tools/check-macro-reactions.js:3"}, "properties": {"repobilityId": "89f0e47a51bfe194", "scanner": "scanner-primary", "fingerprint": "6f553e21a4c511c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a90e0eb0649c28c", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/runtime_supervisor.py:212"}, "properties": {"repobilityId": "256efa9790238cf4", "scanner": "scanner-primary", "fingerprint": "6a90e0eb0649c28c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ac599e4687d893cf", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/generate-structure-note.js:5"}, "properties": {"repobilityId": "6f022175e70bf600", "scanner": "scanner-primary", "fingerprint": "ac599e4687d893cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9f37f61cf637ed3", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/build-event-reaction-memory.js:3"}, "properties": {"repobilityId": "7aebd3b5e63ad95e", "scanner": "scanner-primary", "fingerprint": "a9f37f61cf637ed3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f89b5de0ed8f928", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/check-structure-articles.js:3"}, "properties": {"repobilityId": "aa1b94e38ec1abed", "scanner": "scanner-primary", "fingerprint": "1f89b5de0ed8f928", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-133e74711e550599", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/platform-relevance.js:3"}, "properties": {"repobilityId": "edae051dc0b5adda", "scanner": "scanner-primary", "fingerprint": "133e74711e550599", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04caa3635c82e4f8", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/visual-quality.js:5"}, "properties": {"repobilityId": "d9dcef7f836f426d", "scanner": "scanner-primary", "fingerprint": "04caa3635c82e4f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0c26042a86ad7f7", "level": "none", "message": {"text": "Commented-code block (12 lines) in tools/check-tactical-context.js:3"}, "properties": {"repobilityId": "16e6322db750a3b0", "scanner": "scanner-primary", "fingerprint": "f0c26042a86ad7f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-809b77c0fdff7ed6", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/build-chart-narratives.js:9"}, "properties": {"repobilityId": "86b2ebf6f1d5ffbc", "scanner": "scanner-primary", "fingerprint": "809b77c0fdff7ed6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32288047e87c8828", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/check-newsroom-ui.js:3"}, "properties": {"repobilityId": "43aa6baf8d3fdd5c", "scanner": "scanner-primary", "fingerprint": "32288047e87c8828", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f55317add0f7c565", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/check-educational-concept-depth.js:3"}, "properties": {"repobilityId": "2744b3d425a176b5", "scanner": "scanner-primary", "fingerprint": "f55317add0f7c565", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f30f59468588030", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/check-research-rotation.js:3"}, "properties": {"repobilityId": "622244d6f9e4fbdf", "scanner": "scanner-primary", "fingerprint": "9f30f59468588030", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab44962506cc2510", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/check-chart-intelligence.js:3"}, "properties": {"repobilityId": "5595ae83c65f94e6", "scanner": "scanner-primary", "fingerprint": "ab44962506cc2510", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4130a979eb965a35", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/check-editorial-graphics.js:122"}, "properties": {"repobilityId": "83993a872b1d464c", "scanner": "scanner-primary", "fingerprint": "4130a979eb965a35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f16b8f32aff12ba1", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/generate-briefs-index.js:3"}, "properties": {"repobilityId": "91f20757a41a9106", "scanner": "scanner-primary", "fingerprint": "f16b8f32aff12ba1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2db69f85dbacc1fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/editorial-quality.js:5"}, "properties": {"repobilityId": "8a65c3d233d934af", "scanner": "scanner-primary", "fingerprint": "2db69f85dbacc1fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eae301b073afe0cd", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/market-structure-engine.js:5"}, "properties": {"repobilityId": "8864c0927b758640", "scanner": "scanner-primary", "fingerprint": "eae301b073afe0cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7316f7d9f27048ef", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/build-economic-intelligence.js:10"}, "properties": {"repobilityId": "21bf4532595e6ad5", "scanner": "scanner-primary", "fingerprint": "7316f7d9f27048ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c57b38ebc5bf42a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/sync-bilingual-article-structure.js:7"}, "properties": {"repobilityId": "90557d3af3a78d5a", "scanner": "scanner-primary", "fingerprint": "c57b38ebc5bf42a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3f0cdce412917dd", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/check-market-news-articles.js:3"}, "properties": {"repobilityId": "d3ecb44011f3924b", "scanner": "scanner-primary", "fingerprint": "b3f0cdce412917dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b73352acd6be19bf", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/forecast-consensus.js:5"}, "properties": {"repobilityId": "6dacd98294d89510", "scanner": "scanner-primary", "fingerprint": "b73352acd6be19bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c38a50d61d4ff23", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/check-bilingual-structure.js:7"}, "properties": {"repobilityId": "616d8f991d532490", "scanner": "scanner-primary", "fingerprint": "5c38a50d61d4ff23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fd48caf3a0b9fba", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/check-editorial-quality-articles.js:3"}, "properties": {"repobilityId": "8c3b827a900480f2", "scanner": "scanner-primary", "fingerprint": "4fd48caf3a0b9fba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4711c67e7f31b42f", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/generate-market-news-index.js:3"}, "properties": {"repobilityId": "4c5eb40432b2f5ed", "scanner": "scanner-primary", "fingerprint": "4711c67e7f31b42f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0c322da75671d97", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/check-market-structure.js:3"}, "properties": {"repobilityId": "70c4c4b285919cf6", "scanner": "scanner-primary", "fingerprint": "d0c322da75671d97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-317b964c2381fcd4", "level": "none", "message": {"text": "Commented-code block (11 lines) in tools/check-intelligence-monitor.js:3"}, "properties": {"repobilityId": "b8e77d37ad09406e", "scanner": "scanner-primary", "fingerprint": "317b964c2381fcd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44aba3a75aed7aa5", "level": "none", "message": {"text": "Commented-code block (10 lines) in tools/check-graphic-exports.js:3"}, "properties": {"repobilityId": "78b51097e743a329", "scanner": "scanner-primary", "fingerprint": "44aba3a75aed7aa5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd7524cac6bf4e8f", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/check-telegram-activation.js:3"}, "properties": {"repobilityId": "e759ea3bac4b5f7d", "scanner": "scanner-primary", "fingerprint": "fd7524cac6bf4e8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4b197be7b382b62", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/generate-ai-market-outlook-content.js:3"}, "properties": {"repobilityId": "16fe84f7e104de69", "scanner": "scanner-primary", "fingerprint": "a4b197be7b382b62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ca139f2825f85a5", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/check-workflows.js:3"}, "properties": {"repobilityId": "b62cb957c4bc071b", "scanner": "scanner-primary", "fingerprint": "8ca139f2825f85a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8cd0ecf8bb91048b", "level": "none", "message": {"text": "Commented-code block (13 lines) in tools/educational-priority.js:5"}, "properties": {"repobilityId": "145d68e8a8815d87", "scanner": "scanner-primary", "fingerprint": "8cd0ecf8bb91048b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5512419358edeb4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/build-graphic-exports.js:8"}, "properties": {"repobilityId": "d95f9eb543149dd3", "scanner": "scanner-primary", "fingerprint": "5512419358edeb4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bed2c99619ed67e6", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/check-briefs-section.js:3"}, "properties": {"repobilityId": "5e053cebd2ac52d4", "scanner": "scanner-primary", "fingerprint": "bed2c99619ed67e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37fdbeb13c06d465", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/update-live-market-state.js:7"}, "properties": {"repobilityId": "f67b412f9a263b6e", "scanner": "scanner-primary", "fingerprint": "37fdbeb13c06d465", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25fd5f9934419181", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/check-newsroom-intelligence.js:3"}, "properties": {"repobilityId": "8e921ae66f8decbd", "scanner": "scanner-primary", "fingerprint": "25fd5f9934419181", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0751472eee0729b", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/check-reading-flow.js:3"}, "properties": {"repobilityId": "6fc1a71046059b11", "scanner": "scanner-primary", "fingerprint": "f0751472eee0729b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed40996938f71a3c", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/regime-intelligence.js:5"}, "properties": {"repobilityId": "d87edd0cb30d6d10", "scanner": "scanner-primary", "fingerprint": "ed40996938f71a3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad3d5db76254dc7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/generate-daily-market-outlook.js:3"}, "properties": {"repobilityId": "fd9137dc65ebc20d", "scanner": "scanner-primary", "fingerprint": "ad3d5db76254dc7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-221f461b450145cb", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/check-educational-priority.js:3"}, "properties": {"repobilityId": "26dac984d7094e05", "scanner": "scanner-primary", "fingerprint": "221f461b450145cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c18026b42c4528db", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/check-governance.js:3"}, "properties": {"repobilityId": "8b6b1a601a5d28e4", "scanner": "scanner-primary", "fingerprint": "c18026b42c4528db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb44f21bc21f8cd9", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/record-event-reactions.js:6"}, "properties": {"repobilityId": "6057e299f811652b", "scanner": "scanner-primary", "fingerprint": "bb44f21bc21f8cd9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b6d1b9e80e4fb26", "level": "none", "message": {"text": "Commented-code block (9 lines) in tools/self-heal-market-outlook-drafts.js:3"}, "properties": {"repobilityId": "8ba2ffb28a3c1b3f", "scanner": "scanner-primary", "fingerprint": "5b6d1b9e80e4fb26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bf505f8df088125", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/build-macro-reactions.js:5"}, "properties": {"repobilityId": "c214dc11e7016ca1", "scanner": "scanner-primary", "fingerprint": "9bf505f8df088125", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd2beacb767b31ff", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/check-inline-visuals.js:3"}, "properties": {"repobilityId": "c4566c663326e65f", "scanner": "scanner-primary", "fingerprint": "dd2beacb767b31ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7de2562133210a0f", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/render-newsroom-modules.js:7"}, "properties": {"repobilityId": "b5bf087af3c5bcd2", "scanner": "scanner-primary", "fingerprint": "7de2562133210a0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4747acfbfa91c5c0", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/promote-wire-events.js:3"}, "properties": {"repobilityId": "6b246f67e635824d", "scanner": "scanner-primary", "fingerprint": "4747acfbfa91c5c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b58d2b306a6869a", "level": "none", "message": {"text": "Commented-code block (10 lines) in tools/build-market-cognition.js:3"}, "properties": {"repobilityId": "bdcd8e15670cc71b", "scanner": "scanner-primary", "fingerprint": "6b58d2b306a6869a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25f36f0c35612dc7", "level": "none", "message": {"text": "Commented-code block (15 lines) in tools/check-economic-intelligence.js:3"}, "properties": {"repobilityId": "3dd4a1dfe658778e", "scanner": "scanner-primary", "fingerprint": "25f36f0c35612dc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ac66d013aff6fcd", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/providers/economic-calendar/series-map.js:5"}, "properties": {"repobilityId": "6dec7a2d70abd640", "scanner": "scanner-primary", "fingerprint": "4ac66d013aff6fcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f42756f375c14526", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/providers/economic-calendar/forecast-providers.js:5"}, "properties": {"repobilityId": "6eccd82473732c8b", "scanner": "scanner-primary", "fingerprint": "f42756f375c14526", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16a800535968834a", "level": "none", "message": {"text": "Commented-code block (13 lines) in tools/providers/economic-calendar/schedule-fallback-provider.js:8"}, "properties": {"repobilityId": "fb85852997a3a358", "scanner": "scanner-primary", "fingerprint": "16a800535968834a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-897270b38d62c11c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/providers/economic-calendar/official-series.js:5"}, "properties": {"repobilityId": "b82e6797b904a574", "scanner": "scanner-primary", "fingerprint": "897270b38d62c11c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b683bff0ffde997", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/providers/economic-calendar/trading-economics-provider.js:3"}, "properties": {"repobilityId": "bde1b8dc964dd0a1", "scanner": "scanner-primary", "fingerprint": "1b683bff0ffde997", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9df889691a5ebc4", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/providers/economic-calendar/sources/global-release-schedule.js:5"}, "properties": {"repobilityId": "d6ce15f8c325162f", "scanner": "scanner-primary", "fingerprint": "b9df889691a5ebc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4157ac6cb2861b34", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/providers/economic-calendar/sources/central-bank-schedule.js:5"}, "properties": {"repobilityId": "6fcd81ec47168ee7", "scanner": "scanner-primary", "fingerprint": "4157ac6cb2861b34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4dc2daabaaa207e", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/providers/market-brief/directional-bias.js:3"}, "properties": {"repobilityId": "88d34ce367d7d4ad", "scanner": "scanner-primary", "fingerprint": "a4dc2daabaaa207e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0fb8482ea63c6dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/providers/market-brief/historical-tracker.js:25"}, "properties": {"repobilityId": "37946c7e44b841f0", "scanner": "scanner-primary", "fingerprint": "c0fb8482ea63c6dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c9418b3c4ac4ff8", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/social/social-flags.js:5"}, "properties": {"repobilityId": "e84e939b663168fd", "scanner": "scanner-primary", "fingerprint": "4c9418b3c4ac4ff8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94aefe489b04fa59", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/social/social-ledger.js:5"}, "properties": {"repobilityId": "729299555af5e460", "scanner": "scanner-primary", "fingerprint": "94aefe489b04fa59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb66d262c66c6499", "level": "none", "message": {"text": "Commented-code block (10 lines) in tools/social/adapters/base-adapter.js:5"}, "properties": {"repobilityId": "4dd7595049962099", "scanner": "scanner-primary", "fingerprint": "cb66d262c66c6499", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fa5af25316da646", "level": "note", "message": {"text": "16 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "e0919a3f6a45e8c2", "scanner": "scanner-primary", "fingerprint": "5fa5af25316da646", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "05986187015d3549", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "54655b035adffb5a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}