{"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-78010065019c92d8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 test/regex-fixtures/magalu-cupons-bundle.js:1", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 test/regex-fixtures/magalu-cupons-bundle.js:1"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fa6c8d8c8a91f5b6", "name": "Stray `console.log` in TS/JS \u2014 scripts/threads-oauth.js:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/threads-oauth.js:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9cf021fc12ef94e", "name": "Stray `console.log` in TS/JS \u2014 scripts/youtube-oauth.js:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/youtube-oauth.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-7dbf3d30e82148a7", "name": "Stray `console.log` in TS/JS \u2014 scripts/probe-coupons.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-coupons.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-b78cc7913d9a0eaa", "name": "Stray `console.log` in TS/JS \u2014 scripts/probe-coupon-text.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-coupon-text.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-74ed622ca48ec084", "name": "Stray `console.log` in TS/JS \u2014 scripts/instagram-oauth.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/instagram-oauth.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-5eeb60f22c575567", "name": "Stray `console.log` in TS/JS \u2014 tools/regex-audit-fetch.js:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/regex-audit-fetch.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-40b6b47b055c0029", "name": "Stray `console.log` in TS/JS \u2014 tools/audit-routes.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/audit-routes.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-0761c81aa623e675", "name": "Stray `console.log` in TS/JS \u2014 tools/magalu-smoke.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/magalu-smoke.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-7a208fb26c19757c", "name": "Stray `console.log` in TS/JS \u2014 tools/price-gap-check.js:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/price-gap-check.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-210248e7aa69cf47", "name": "Stray `console.log` in TS/JS \u2014 tools/read-tg-channel.js:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/read-tg-channel.js:118"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9dae8c110e862187", "name": "Stray `console.log` in TS/JS \u2014 tools/migrate-env-2026-05-19.js:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/migrate-env-2026-05-19.js:94"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8c628f00e0ed46e", "name": "Stray `console.log` in TS/JS \u2014 tools/patch-routes.js:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/patch-routes.js:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83a644c442de8fdd", "name": "Stray `console.log` in TS/JS \u2014 tools/advideo-test.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/advideo-test.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-ce6151838ede9e2b", "name": "Stray `console.log` in TS/JS \u2014 tools/extract-logo.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/extract-logo.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-f8743994257dafd3", "name": "Stray `console.log` in TS/JS \u2014 tools/route-cache-audit.js:363", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/route-cache-audit.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-177f8ef1746d5100", "name": "Stray `console.log` in TS/JS \u2014 tools/regex-audit.js:684", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/regex-audit.js:684"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e683684cd617e999", "name": "Stray `console.log` in TS/JS \u2014 tools/story-preview.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/story-preview.js:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-900ea631d850ccc4", "name": "Stray `console.log` in TS/JS \u2014 tools/amazon-dry-run.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/amazon-dry-run.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-03875b3b5f532aa4", "name": "Stray `console.log` in TS/JS \u2014 src/competitorAutoRunner.js:263", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/competitorAutoRunner.js:263"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2f04e54a7e7db64c", "name": "Stray `console.log` in TS/JS \u2014 src/queue.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/queue.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-93fc2dbaccee14ad", "name": "Stray `console.log` in TS/JS \u2014 src/filters.js:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/filters.js:154"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b10377fc6014ae2f", "name": "Stray `console.log` in TS/JS \u2014 src/trending.js:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/trending.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-394fb7bac3129a72", "name": "Stray `console.log` in TS/JS \u2014 src/lifecycle.js:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lifecycle.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-46ef0b6d7c537bd6", "name": "Stray `console.log` in TS/JS \u2014 src/promoGate.js:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/promoGate.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-20005fb08cce8dc9", "name": "Stray `console.log` in TS/JS \u2014 src/cache.js:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cache.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-bc2bcd16de18b57c", "name": "Stray `console.log` in TS/JS \u2014 src/state.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/state.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-bc9c21bb1bb72364", "name": "Stray `console.log` in TS/JS \u2014 src/marketPrice.js:241", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/marketPrice.js:241"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5d13e70126afc4e3", "name": "Stray `console.log` in TS/JS \u2014 src/index.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/index.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-f9a9aa5e773787c6", "name": "Stray `console.log` in TS/JS \u2014 src/health.js:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/health.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-2f69f5c99adc5565", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/mlSearch.js:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/mlSearch.js:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-03eec34fc037c943", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/kabum.js:263", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/kabum.js:263"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1ed91cce7c3fc90", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/aliexpress.js:163", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/aliexpress.js:163"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4db8db22203e022c", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/competitorRadar.js:191", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/competitorRadar.js:191"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-484d28d47824fc28", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/mlOfficialStores.js:196", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/mlOfficialStores.js:196"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-041ed139a6eababa", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/couponRadar.js:452", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/couponRadar.js:452"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c67cbd8c4a360d6b", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/amazonDeals.js:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/amazonDeals.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-4d6718811752198b", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/vtex.js:152", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/vtex.js:152"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-471d86d384ea50af", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/couponAggregator.js:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/couponAggregator.js:154"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec28c2db04f9f40c", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/bugRadar.js:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/bugRadar.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-bf6593cae367ec37", "name": "TODO/FIXME marker in shipping code \u2014 src/platforms/magalu.js:15", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/platforms/magalu.js:15"}, "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-8be61f1806538d60", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/magalu.js:273", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/magalu.js:273"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-876777290ff2b3e0", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/mercadolivre.js:274", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/mercadolivre.js:274"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca994dd2edfdd3d6", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/awin.js:350", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/awin.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-d079bb37cfbe4fcb", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/magalu_coupons.js:325", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/magalu_coupons.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-7f8dcaf71825e495", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/lomadee.js:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/lomadee.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-86fa4e24e579f3f5", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/shopee/enrichment.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/shopee/enrichment.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-e76010fb9dab08db", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/shopee/index.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/shopee/index.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-b40b4a623cebad01", "name": "Stray `console.log` in TS/JS \u2014 src/platforms/shopee/api.js:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/shopee/api.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-eff97b59c49d97bd", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/topOfDay.js:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/topOfDay.js:114"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f583047660194f6e", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/threadsAuth.js:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/threadsAuth.js:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45136fa7aeb2663e", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/instagramAuth.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/instagramAuth.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-c212c62ee7e15257", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/instagram.js:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/instagram.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-f227bbcbbb1c7387", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/telegram.js:286", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/telegram.js:286"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b9aba7c3dc68de6", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/bluesky.js:250", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/bluesky.js:250"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0be53d436c81623a", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/stories.js:157", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/stories.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-a34e2680b3f5e347", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/shorts.js:129", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/shorts.js:129"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9cae81acf91c584f", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/threads.js:225", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/threads.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-03aa3117bf7e02b5", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/copyPaste.js:213", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/copyPaste.js:213"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91d2277c354f174b", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/adVideos.js:384", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/adVideos.js:384"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8291c2b053ca7b80", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/tiktok.js:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/tiktok.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-a41021eecacfa5f7", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/siteStats.js:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/siteStats.js:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a8e04e09939f8a4", "name": "Stray `console.log` in TS/JS \u2014 src/notifiers/whatsapp.js:205", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/whatsapp.js:205"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20608c4273750f00", "name": "Stray `console.log` in TS/JS \u2014 src/utils/httpClient.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/httpClient.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-0e4b0f6e803a30e6", "name": "Stray `console.log` in TS/JS \u2014 src/utils/shortener.js:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/shortener.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-31ed6136d2986bd3", "name": "Stray `console.log` in TS/JS \u2014 src/utils/couponHubs.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/couponHubs.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-599ed446dcab9189", "name": "Stray `console.log` in TS/JS \u2014 src/utils/persistedMap.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/persistedMap.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-a4f9376ad2ac0372", "name": "Stray `console.log` in TS/JS \u2014 src/utils/backup.js:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/backup.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-8987d6d1c30c7202", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5227d1e1825fa93", "name": "Insecure pattern 'direct_innerhtml_assignment' in site/index.html:483", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in site/index.html:483"}, "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-b9c012cd7b13bc0d", "name": "Insecure pattern 'direct_innerhtml_assignment' in site/economizar.html:598", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in site/economizar.html:598"}, "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-da4095e2bbc54dce", "name": "Insecure pattern 'node_child_process' in src/notifiers/storyImage.js:90", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/notifiers/storyImage.js:90"}, "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-3df6454db2355aa0", "name": "Insecure pattern 'node_child_process' in src/notifiers/videoSlideshow.js:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/notifiers/videoSlideshow.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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0486297ab46fe302", "name": "Very large file: src/config.js (1072 lines)", "shortDescription": {"text": "Very large file: src/config.js (1072 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-53a11c6da63606d7", "name": "Very large file: src/index.js (2005 lines)", "shortDescription": {"text": "Very large file: src/index.js (2005 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-ac0352f9d12376d8", "name": "Very large file: src/platforms/mercadolivre.js (1278 lines)", "shortDescription": {"text": "Very large file: src/platforms/mercadolivre.js (1278 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-611ff13c49ba4902", "name": "Very large file: src/notifiers/telegram.js (4177 lines)", "shortDescription": {"text": "Very large file: src/notifiers/telegram.js (4177 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-1acc7faaf7a8744f", "name": "Very large file: src/notifiers/whatsapp.js (1477 lines)", "shortDescription": {"text": "Very large file: src/notifiers/whatsapp.js (1477 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2fbe176a90ede8a4", "name": "33 TODO/FIXME markers", "shortDescription": {"text": "33 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 366 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 54 placeholder/mock markers across 20 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-1991fbd71d0e5c1b", "name": "Commented-code block (6 lines) in test/magalu-fetchproductbyid.test.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in test/magalu-fetchproductbyid.test.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d22dde717885cf5", "name": "Commented-code block (5 lines) in scripts/threads-oauth.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/threads-oauth.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-4b06350e348de5ff", "name": "Commented-code block (5 lines) in scripts/probe-coupons.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/probe-coupons.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fbb09f068d9b1c0d", "name": "Legacy-named symbol `counter_v1` in worker/index.js:29", "shortDescription": {"text": "Legacy-named symbol `counter_v1` in worker/index.js:29"}, "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-08649049895ada63", "name": "Commented-code block (6 lines) in worker/index.js:12", "shortDescription": {"text": "Commented-code block (6 lines) in worker/index.js:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6375bf0b31057c2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 worker/index.js:189", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/index.js:189"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95cac78e1780f92b", "name": "Commented-code block (6 lines) in tools/magalu-smoke.js:6", "shortDescription": {"text": "Commented-code block (6 lines) in tools/magalu-smoke.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-64ae155d8d97d0b3", "name": "Commented-code block (5 lines) in tools/migrate-env-2026-05-19.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in tools/migrate-env-2026-05-19.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d780da150055e742", "name": "Commented-code block (8 lines) in tools/patch-routes.js:4", "shortDescription": {"text": "Commented-code block (8 lines) in tools/patch-routes.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c7e027ad6591aea", "name": "Commented-code block (6 lines) in tools/route-cache-audit.js:2", "shortDescription": {"text": "Commented-code block (6 lines) in tools/route-cache-audit.js:2"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4caf91e030035c61", "name": "Commented-code block (5 lines) in tools/regex-audit.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tools/regex-audit.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-e683feed55cfdf59", "name": "Commented-code block (6 lines) in src/competitorAutoRunner.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/competitorAutoRunner.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-871ec8e926ff5f2b", "name": "Commented-code block (7 lines) in src/queue.js:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/queue.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-fe12cbfda1b1a2c4", "name": "Commented-code block (5 lines) in src/filters.js:14", "shortDescription": {"text": "Commented-code block (5 lines) in src/filters.js:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc72a186ff8d3163", "name": "Commented-code block (5 lines) in src/trending.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/trending.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-cd08463bdcdd66cd", "name": "Commented-code block (5 lines) in src/officialStores.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/officialStores.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-55560abb892c1c89", "name": "Commented-code block (5 lines) in src/promoGate.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/promoGate.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d3a7a42183ba6cb", "name": "Commented-code block (6 lines) in src/niches.js:31", "shortDescription": {"text": "Commented-code block (6 lines) in src/niches.js:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4f816a3ac61851e", "name": "Commented-code block (7 lines) in src/cache.js:11", "shortDescription": {"text": "Commented-code block (7 lines) in src/cache.js:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22488618d60efdf6", "name": "Commented-code block (6 lines) in src/officialStoresDB.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/officialStoresDB.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d2409667b74a34e", "name": "Commented-code block (5 lines) in src/funnel.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/funnel.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77335bbcdca9ebcd", "name": "Commented-code block (8 lines) in src/config.js:29", "shortDescription": {"text": "Commented-code block (8 lines) in src/config.js:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56d86674f64f46f3", "name": "Commented-code block (5 lines) in src/state.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/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-30757beab376794f", "name": "Commented-code block (6 lines) in src/marketPrice.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/marketPrice.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b485c17a37d7f46c", "name": "Commented-code block (5 lines) in src/wishlist.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/wishlist.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2731945ddf19488f", "name": "Commented-code block (7 lines) in src/index.js:113", "shortDescription": {"text": "Commented-code block (7 lines) in src/index.js:113"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6725e2f3fee098c9", "name": "Commented-code block (6 lines) in src/platforms/mlSearch.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/platforms/mlSearch.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-957398b1c06d5f24", "name": "Commented-code block (7 lines) in src/platforms/promobit.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/platforms/promobit.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-f03945dc54d06876", "name": "Commented-code block (6 lines) in src/platforms/kabum.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/platforms/kabum.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-862aa10a41d43488", "name": "Commented-code block (7 lines) in src/platforms/aliexpress.js:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/platforms/aliexpress.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-abeda97c4d62f646", "name": "Commented-code block (9 lines) in src/platforms/competitorRadar.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/platforms/competitorRadar.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-90668af5403159bf", "name": "Commented-code block (7 lines) in src/platforms/mlOfficialStores.js:12", "shortDescription": {"text": "Commented-code block (7 lines) in src/platforms/mlOfficialStores.js:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6c4bc59edcd4a5ea", "name": "Commented-code block (6 lines) in src/platforms/couponRadar.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/platforms/couponRadar.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-cf5eb1a9d10d142c", "name": "Commented-code block (8 lines) in src/platforms/amazonDeals.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/platforms/amazonDeals.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-89789f1dc2255bf4", "name": "Commented-code block (5 lines) in src/platforms/vtex.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/platforms/vtex.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-c424f243a36b3835", "name": "Commented-code block (6 lines) in src/platforms/couponAggregator.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/platforms/couponAggregator.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-d32d6fb7abe6c4d4", "name": "Commented-code block (6 lines) in src/platforms/bugRadar.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/platforms/bugRadar.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd791169a52cfc1a", "name": "Commented-code block (6 lines) in src/platforms/magalu.js:23", "shortDescription": {"text": "Commented-code block (6 lines) in src/platforms/magalu.js:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5b8811d613411f2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/magalu.js:889", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/magalu.js:889"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-60420f6f2d5fad36", "name": "Commented-code block (8 lines) in src/platforms/mercadolivre.js:13", "shortDescription": {"text": "Commented-code block (8 lines) in src/platforms/mercadolivre.js:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-746b676bfc3e5a06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/mercadolivre.js:863", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/mercadolivre.js:863"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-85f72e860061d421", "name": "Legacy-named symbol `product_price_old` in src/platforms/awin.js:133", "shortDescription": {"text": "Legacy-named symbol `product_price_old` in src/platforms/awin.js:133"}, "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-98e263e15afe2469", "name": "Commented-code block (10 lines) in src/platforms/awin.js:3", "shortDescription": {"text": "Commented-code block (10 lines) in src/platforms/awin.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-925f31c6d23582aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/awin.js:267", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/awin.js:267"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7d81ae7177785583", "name": "Commented-code block (8 lines) in src/platforms/magalu_coupons.js:55", "shortDescription": {"text": "Commented-code block (8 lines) in src/platforms/magalu_coupons.js:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7111da24a1bcc0e5", "name": "Commented-code block (6 lines) in src/platforms/lomadee.js:466", "shortDescription": {"text": "Commented-code block (6 lines) in src/platforms/lomadee.js:466"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb64703284760ba6", "name": "Commented-code block (6 lines) in src/platforms/shopee/coupons.js:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/platforms/shopee/coupons.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-ff8c35f8f178998b", "name": "Commented-code block (6 lines) in src/platforms/shopee/enrichment.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/platforms/shopee/enrichment.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-f93c6c8f2d8bf4fd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/shopee/enrichment.js:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/shopee/enrichment.js:103"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9825da552c06f9c2", "name": "Commented-code block (5 lines) in src/platforms/shopee/scraper.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/platforms/shopee/scraper.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-63b313d0b4e49007", "name": "Commented-code block (6 lines) in src/platforms/shopee/index.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/platforms/shopee/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-371063b3efc97098", "name": "Commented-code block (8 lines) in src/platforms/shopee/api.js:103", "shortDescription": {"text": "Commented-code block (8 lines) in src/platforms/shopee/api.js:103"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a283377195237f48", "name": "Commented-code block (5 lines) in src/notifiers/topOfDay.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/notifiers/topOfDay.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4711883f5b74f5da", "name": "Commented-code block (5 lines) in src/notifiers/threadsAuth.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/notifiers/threadsAuth.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-ddda8c1615f3ee92", "name": "Commented-code block (7 lines) in src/notifiers/videoSlideshow.js:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/notifiers/videoSlideshow.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-75cd386c9b7c710d", "name": "Commented-code block (5 lines) in src/notifiers/telegram.js:136", "shortDescription": {"text": "Commented-code block (5 lines) in src/notifiers/telegram.js:136"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df29494ae364f9ec", "name": "Commented-code block (5 lines) in src/notifiers/copyPasteFormatter.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/notifiers/copyPasteFormatter.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8630b62584fc63a", "name": "Commented-code block (7 lines) in src/notifiers/bluesky.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/notifiers/bluesky.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-295c65294dfc58c3", "name": "Commented-code block (5 lines) in src/notifiers/stories.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/notifiers/stories.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-c11662d537aecd06", "name": "Commented-code block (8 lines) in src/notifiers/index.js:18", "shortDescription": {"text": "Commented-code block (8 lines) in src/notifiers/index.js:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6d7ea9b8bc99cbb", "name": "Commented-code block (7 lines) in src/notifiers/threads.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/notifiers/threads.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16d86dbddfa6ca21", "name": "Commented-code block (10 lines) in src/notifiers/copyPaste.js:5", "shortDescription": {"text": "Commented-code block (10 lines) in src/notifiers/copyPaste.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-d2df7e451a1e52f2", "name": "Commented-code block (7 lines) in src/notifiers/threadsTemplates.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/notifiers/threadsTemplates.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-5360a93a53cd0e5c", "name": "Commented-code block (5 lines) in src/notifiers/tiktok.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/notifiers/tiktok.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-0a6548949a1e3e4a", "name": "Commented-code block (10 lines) in src/notifiers/formatter.js:42", "shortDescription": {"text": "Commented-code block (10 lines) in src/notifiers/formatter.js:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7952637b3858f863", "name": "Commented-code block (5 lines) in src/notifiers/whatsapp.js:147", "shortDescription": {"text": "Commented-code block (5 lines) in src/notifiers/whatsapp.js:147"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b6c7f735ff667c3", "name": "Commented-code block (6 lines) in src/utils/manualBlocklist.js:67", "shortDescription": {"text": "Commented-code block (6 lines) in src/utils/manualBlocklist.js:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2ecde1c2ce5f852", "name": "Commented-code block (5 lines) in src/utils/sourceHealth.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/sourceHealth.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a289505416fd8fb2", "name": "Commented-code block (5 lines) in src/utils/couponPatterns.js:11", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/couponPatterns.js:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2c018afb371d7cf", "name": "Commented-code block (5 lines) in src/utils/coupons.js:14", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/coupons.js:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea3f56312315bade", "name": "Commented-code block (5 lines) in src/utils/httpClient.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/httpClient.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-257b52f495c516ec", "name": "Commented-code block (5 lines) in src/utils/telegramPublic.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/telegramPublic.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8822308f1a2bb65e", "name": "Commented-code block (8 lines) in src/utils/quietWindows.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/utils/quietWindows.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-669479bad1d59399", "name": "Commented-code block (5 lines) in src/utils/tracking.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/tracking.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23b2e933c18219ba", "name": "Commented-code block (5 lines) in src/utils/couponBanners.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/couponBanners.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e3138a0b6897bb63", "name": "Commented-code block (7 lines) in src/utils/platformCoupons.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/utils/platformCoupons.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-db740cd4ac058eac", "name": "Commented-code block (6 lines) in src/utils/shortener.js:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/utils/shortener.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-34158c08efa57119", "name": "Commented-code block (8 lines) in src/utils/titleCleaner.js:11", "shortDescription": {"text": "Commented-code block (8 lines) in src/utils/titleCleaner.js:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44b73d90986fd01c", "name": "Commented-code block (6 lines) in src/utils/bugPending.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/utils/bugPending.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-a8b211736d64db7c", "name": "Commented-code block (5 lines) in src/utils/couponPending.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/couponPending.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-c2912daa5594c43a", "name": "Commented-code block (9 lines) in src/utils/persistedMap.js:12", "shortDescription": {"text": "Commented-code block (9 lines) in src/utils/persistedMap.js:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-483b703d9f4b73fc", "name": "Commented-code block (7 lines) in src/utils/browserHeaders.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/utils/browserHeaders.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2dadecd05dae38c6", "name": "Commented-code block (5 lines) in src/utils/routesLoader.js:81", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/routesLoader.js:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6af648a07c4f5617", "name": "72 env vars used in code but missing from .env.example", "shortDescription": {"text": "72 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADVIDEO_DAILY_CRON`, `ALIEXPRESS_STACK_INSTRUCTION`, `AMAZON_CRON`, `AMAZON_POST_CRON`, `AWIN_CRON`, `AWIN_FEED_ALL`, `BLUESKY_TZ`, `BUG_PENDING_FILE` + 64 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}}]}}, "automationDetails": {"id": "repobility/20659"}, "properties": {"repository": "SyncLxZs/promora", "repoUrl": "https://github.com/SyncLxZs/promora", "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-78010065019c92d8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 test/regex-fixtures/magalu-cupons-bundle.js:1"}, "properties": {"repobilityId": "009472165ce632c0", "scanner": "scanner-primary", "fingerprint": "78010065019c92d8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-fa6c8d8c8a91f5b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/threads-oauth.js:70"}, "properties": {"repobilityId": "24d37eba89c615ab", "scanner": "scanner-primary", "fingerprint": "fa6c8d8c8a91f5b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e9cf021fc12ef94e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/youtube-oauth.js:62"}, "properties": {"repobilityId": "afe7eaf20af01512", "scanner": "scanner-primary", "fingerprint": "e9cf021fc12ef94e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7dbf3d30e82148a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-coupons.js:50"}, "properties": {"repobilityId": "1845d7bae639ca4c", "scanner": "scanner-primary", "fingerprint": "7dbf3d30e82148a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b78cc7913d9a0eaa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-coupon-text.js:24"}, "properties": {"repobilityId": "c23dd0e9caacb2c1", "scanner": "scanner-primary", "fingerprint": "b78cc7913d9a0eaa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74ed622ca48ec084", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/instagram-oauth.js:53"}, "properties": {"repobilityId": "0c8b092ebe703c7f", "scanner": "scanner-primary", "fingerprint": "74ed622ca48ec084", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5eeb60f22c575567", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/regex-audit-fetch.js:55"}, "properties": {"repobilityId": "32bd0896639d0fb3", "scanner": "scanner-primary", "fingerprint": "5eeb60f22c575567", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-40b6b47b055c0029", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/audit-routes.js:67"}, "properties": {"repobilityId": "a3b6fc61efe27c33", "scanner": "scanner-primary", "fingerprint": "40b6b47b055c0029", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0761c81aa623e675", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/magalu-smoke.js:33"}, "properties": {"repobilityId": "b715609d6aff9d97", "scanner": "scanner-primary", "fingerprint": "0761c81aa623e675", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a208fb26c19757c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/price-gap-check.js:32"}, "properties": {"repobilityId": "59714aa7c3ba5510", "scanner": "scanner-primary", "fingerprint": "7a208fb26c19757c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-210248e7aa69cf47", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/read-tg-channel.js:118"}, "properties": {"repobilityId": "a92459111cce4796", "scanner": "scanner-primary", "fingerprint": "210248e7aa69cf47", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9dae8c110e862187", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/migrate-env-2026-05-19.js:94"}, "properties": {"repobilityId": "f2f03172450887f2", "scanner": "scanner-primary", "fingerprint": "9dae8c110e862187", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8c628f00e0ed46e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/patch-routes.js:44"}, "properties": {"repobilityId": "c4e7cfb30e9eb3c2", "scanner": "scanner-primary", "fingerprint": "b8c628f00e0ed46e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83a644c442de8fdd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/advideo-test.js:10"}, "properties": {"repobilityId": "536660b76c614dfa", "scanner": "scanner-primary", "fingerprint": "83a644c442de8fdd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce6151838ede9e2b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/extract-logo.js:10"}, "properties": {"repobilityId": "4f9b822528d7830f", "scanner": "scanner-primary", "fingerprint": "ce6151838ede9e2b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f8743994257dafd3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/route-cache-audit.js:363"}, "properties": {"repobilityId": "a6fc7dff05f32958", "scanner": "scanner-primary", "fingerprint": "f8743994257dafd3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-177f8ef1746d5100", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/regex-audit.js:684"}, "properties": {"repobilityId": "1640dcc4f3696a2e", "scanner": "scanner-primary", "fingerprint": "177f8ef1746d5100", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e683684cd617e999", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/story-preview.js:18"}, "properties": {"repobilityId": "0d766c39eeaaf4d4", "scanner": "scanner-primary", "fingerprint": "e683684cd617e999", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-900ea631d850ccc4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/amazon-dry-run.js:10"}, "properties": {"repobilityId": "75169385a290a8fe", "scanner": "scanner-primary", "fingerprint": "900ea631d850ccc4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-03875b3b5f532aa4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/competitorAutoRunner.js:263"}, "properties": {"repobilityId": "f3c5bcb1814dd686", "scanner": "scanner-primary", "fingerprint": "03875b3b5f532aa4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2f04e54a7e7db64c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/queue.js:45"}, "properties": {"repobilityId": "0e0b40bb36e0c4ee", "scanner": "scanner-primary", "fingerprint": "2f04e54a7e7db64c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-93fc2dbaccee14ad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/filters.js:154"}, "properties": {"repobilityId": "51df1f497b9d91bc", "scanner": "scanner-primary", "fingerprint": "93fc2dbaccee14ad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b10377fc6014ae2f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/trending.js:75"}, "properties": {"repobilityId": "a048ad8df8e38f5c", "scanner": "scanner-primary", "fingerprint": "b10377fc6014ae2f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-394fb7bac3129a72", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lifecycle.js:31"}, "properties": {"repobilityId": "cebdc5cf3902cf62", "scanner": "scanner-primary", "fingerprint": "394fb7bac3129a72", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46ef0b6d7c537bd6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/promoGate.js:99"}, "properties": {"repobilityId": "502e0709e58a7235", "scanner": "scanner-primary", "fingerprint": "46ef0b6d7c537bd6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20005fb08cce8dc9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cache.js:119"}, "properties": {"repobilityId": "6c5d9886aecb02c4", "scanner": "scanner-primary", "fingerprint": "20005fb08cce8dc9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc2bcd16de18b57c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/state.js:60"}, "properties": {"repobilityId": "9fcc1012aff61009", "scanner": "scanner-primary", "fingerprint": "bc2bcd16de18b57c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc9c21bb1bb72364", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/marketPrice.js:241"}, "properties": {"repobilityId": "b6caed465b37254e", "scanner": "scanner-primary", "fingerprint": "bc9c21bb1bb72364", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5d13e70126afc4e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/index.js:17"}, "properties": {"repobilityId": "efd45bf723225483", "scanner": "scanner-primary", "fingerprint": "5d13e70126afc4e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9a9aa5e773787c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/health.js:69"}, "properties": {"repobilityId": "7fa8e047e78d9b4a", "scanner": "scanner-primary", "fingerprint": "f9a9aa5e773787c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2f69f5c99adc5565", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/mlSearch.js:110"}, "properties": {"repobilityId": "60b6e34de1aaaadf", "scanner": "scanner-primary", "fingerprint": "2f69f5c99adc5565", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-03eec34fc037c943", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/kabum.js:263"}, "properties": {"repobilityId": "3e76b49a50c06413", "scanner": "scanner-primary", "fingerprint": "03eec34fc037c943", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1ed91cce7c3fc90", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/aliexpress.js:163"}, "properties": {"repobilityId": "b2b724eb56708337", "scanner": "scanner-primary", "fingerprint": "c1ed91cce7c3fc90", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4db8db22203e022c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/competitorRadar.js:191"}, "properties": {"repobilityId": "01d961e9c852280a", "scanner": "scanner-primary", "fingerprint": "4db8db22203e022c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-484d28d47824fc28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/mlOfficialStores.js:196"}, "properties": {"repobilityId": "e48a133e671f8e5d", "scanner": "scanner-primary", "fingerprint": "484d28d47824fc28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-041ed139a6eababa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/couponRadar.js:452"}, "properties": {"repobilityId": "dccce84d2f7bdd42", "scanner": "scanner-primary", "fingerprint": "041ed139a6eababa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c67cbd8c4a360d6b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/amazonDeals.js:168"}, "properties": {"repobilityId": "80a37e441999ead7", "scanner": "scanner-primary", "fingerprint": "c67cbd8c4a360d6b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d6718811752198b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/vtex.js:152"}, "properties": {"repobilityId": "7a357c765203c750", "scanner": "scanner-primary", "fingerprint": "4d6718811752198b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-471d86d384ea50af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/couponAggregator.js:154"}, "properties": {"repobilityId": "a0433817498de99a", "scanner": "scanner-primary", "fingerprint": "471d86d384ea50af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec28c2db04f9f40c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/bugRadar.js:72"}, "properties": {"repobilityId": "d20d9f98167fc4e5", "scanner": "scanner-primary", "fingerprint": "ec28c2db04f9f40c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf6593cae367ec37", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/platforms/magalu.js:15"}, "properties": {"repobilityId": "7ea43b424e1d4002", "scanner": "scanner-primary", "fingerprint": "bf6593cae367ec37", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8be61f1806538d60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/magalu.js:273"}, "properties": {"repobilityId": "b9f17616ecd6c24b", "scanner": "scanner-primary", "fingerprint": "8be61f1806538d60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-876777290ff2b3e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/mercadolivre.js:274"}, "properties": {"repobilityId": "555543e0f7e044d0", "scanner": "scanner-primary", "fingerprint": "876777290ff2b3e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca994dd2edfdd3d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/awin.js:350"}, "properties": {"repobilityId": "0dcc7b98adf9562b", "scanner": "scanner-primary", "fingerprint": "ca994dd2edfdd3d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d079bb37cfbe4fcb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/magalu_coupons.js:325"}, "properties": {"repobilityId": "3edec435e6008e0a", "scanner": "scanner-primary", "fingerprint": "d079bb37cfbe4fcb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f8dcaf71825e495", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/lomadee.js:102"}, "properties": {"repobilityId": "07921a8731ec5d69", "scanner": "scanner-primary", "fingerprint": "7f8dcaf71825e495", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-86fa4e24e579f3f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/shopee/enrichment.js:53"}, "properties": {"repobilityId": "e3a4157da2c063d4", "scanner": "scanner-primary", "fingerprint": "86fa4e24e579f3f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e76010fb9dab08db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/shopee/index.js:27"}, "properties": {"repobilityId": "ff5f607b0c82e5ab", "scanner": "scanner-primary", "fingerprint": "e76010fb9dab08db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b40b4a623cebad01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/platforms/shopee/api.js:146"}, "properties": {"repobilityId": "454f95fcdd4a2d40", "scanner": "scanner-primary", "fingerprint": "b40b4a623cebad01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eff97b59c49d97bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/topOfDay.js:114"}, "properties": {"repobilityId": "a76ac3e5c0c85a02", "scanner": "scanner-primary", "fingerprint": "eff97b59c49d97bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f583047660194f6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/threadsAuth.js:110"}, "properties": {"repobilityId": "141048ece1641235", "scanner": "scanner-primary", "fingerprint": "f583047660194f6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45136fa7aeb2663e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/instagramAuth.js:74"}, "properties": {"repobilityId": "5f7fd87eb1711c5c", "scanner": "scanner-primary", "fingerprint": "45136fa7aeb2663e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c212c62ee7e15257", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/instagram.js:121"}, "properties": {"repobilityId": "f0d3a904024bda00", "scanner": "scanner-primary", "fingerprint": "c212c62ee7e15257", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f227bbcbbb1c7387", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/telegram.js:286"}, "properties": {"repobilityId": "1005dbd8d50682b8", "scanner": "scanner-primary", "fingerprint": "f227bbcbbb1c7387", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b9aba7c3dc68de6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/bluesky.js:250"}, "properties": {"repobilityId": "8fd6ad2702f2ea47", "scanner": "scanner-primary", "fingerprint": "8b9aba7c3dc68de6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0be53d436c81623a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/stories.js:157"}, "properties": {"repobilityId": "8d653d8101f0f70e", "scanner": "scanner-primary", "fingerprint": "0be53d436c81623a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a34e2680b3f5e347", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/shorts.js:129"}, "properties": {"repobilityId": "aef428322049f527", "scanner": "scanner-primary", "fingerprint": "a34e2680b3f5e347", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9cae81acf91c584f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/threads.js:225"}, "properties": {"repobilityId": "b8a635013af1d055", "scanner": "scanner-primary", "fingerprint": "9cae81acf91c584f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-03aa3117bf7e02b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/copyPaste.js:213"}, "properties": {"repobilityId": "fbfa719239a6957f", "scanner": "scanner-primary", "fingerprint": "03aa3117bf7e02b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-91d2277c354f174b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/adVideos.js:384"}, "properties": {"repobilityId": "c518d51b7477570d", "scanner": "scanner-primary", "fingerprint": "91d2277c354f174b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8291c2b053ca7b80", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/tiktok.js:151"}, "properties": {"repobilityId": "28b7c6e8d9c92489", "scanner": "scanner-primary", "fingerprint": "8291c2b053ca7b80", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a41021eecacfa5f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/siteStats.js:110"}, "properties": {"repobilityId": "df5fff2d045e5ce5", "scanner": "scanner-primary", "fingerprint": "a41021eecacfa5f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a8e04e09939f8a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/notifiers/whatsapp.js:205"}, "properties": {"repobilityId": "aa03944e34bf4811", "scanner": "scanner-primary", "fingerprint": "3a8e04e09939f8a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20608c4273750f00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/httpClient.js:33"}, "properties": {"repobilityId": "d22794edc7abdfd1", "scanner": "scanner-primary", "fingerprint": "20608c4273750f00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e4b0f6e803a30e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/shortener.js:54"}, "properties": {"repobilityId": "5d87f5833cd13fb5", "scanner": "scanner-primary", "fingerprint": "0e4b0f6e803a30e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31ed6136d2986bd3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/couponHubs.js:45"}, "properties": {"repobilityId": "9910f870a0c710c8", "scanner": "scanner-primary", "fingerprint": "31ed6136d2986bd3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-599ed446dcab9189", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/persistedMap.js:60"}, "properties": {"repobilityId": "5634683b5a3f33e1", "scanner": "scanner-primary", "fingerprint": "599ed446dcab9189", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4f9376ad2ac0372", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/backup.js:38"}, "properties": {"repobilityId": "0afeb5d48815ceda", "scanner": "scanner-primary", "fingerprint": "a4f9376ad2ac0372", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8987d6d1c30c7202", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "068fbf45727eac17", "scanner": "scanner-primary", "fingerprint": "8987d6d1c30c7202", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-c5227d1e1825fa93", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in site/index.html:483"}, "properties": {"repobilityId": "91a2a73fe1e89994", "scanner": "scanner-primary", "fingerprint": "c5227d1e1825fa93", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "site/index.html"}, "region": {"startLine": 483}}}]}, {"ruleId": "scanner-b9c012cd7b13bc0d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in site/economizar.html:598"}, "properties": {"repobilityId": "3b7759bc281e3fe5", "scanner": "scanner-primary", "fingerprint": "b9c012cd7b13bc0d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "site/economizar.html"}, "region": {"startLine": 598}}}]}, {"ruleId": "scanner-da4095e2bbc54dce", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/notifiers/storyImage.js:90"}, "properties": {"repobilityId": "b47a9d63d32cc12f", "scanner": "scanner-primary", "fingerprint": "da4095e2bbc54dce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/notifiers/storyImage.js"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-3df6454db2355aa0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/notifiers/videoSlideshow.js:15"}, "properties": {"repobilityId": "3dc81df20ac3059d", "scanner": "scanner-primary", "fingerprint": "3df6454db2355aa0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/notifiers/videoSlideshow.js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-0486297ab46fe302", "level": "note", "message": {"text": "Very large file: src/config.js (1072 lines)"}, "properties": {"repobilityId": "918c49b9d956ce62", "scanner": "scanner-primary", "fingerprint": "0486297ab46fe302", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-53a11c6da63606d7", "level": "note", "message": {"text": "Very large file: src/index.js (2005 lines)"}, "properties": {"repobilityId": "e537a72f73f345ce", "scanner": "scanner-primary", "fingerprint": "53a11c6da63606d7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ac0352f9d12376d8", "level": "note", "message": {"text": "Very large file: src/platforms/mercadolivre.js (1278 lines)"}, "properties": {"repobilityId": "92710eefe1646420", "scanner": "scanner-primary", "fingerprint": "ac0352f9d12376d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-611ff13c49ba4902", "level": "note", "message": {"text": "Very large file: src/notifiers/telegram.js (4177 lines)"}, "properties": {"repobilityId": "a1a92e4b88509e66", "scanner": "scanner-primary", "fingerprint": "611ff13c49ba4902", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1acc7faaf7a8744f", "level": "note", "message": {"text": "Very large file: src/notifiers/whatsapp.js (1477 lines)"}, "properties": {"repobilityId": "2b248b6dfbfe764e", "scanner": "scanner-primary", "fingerprint": "1acc7faaf7a8744f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2fbe176a90ede8a4", "level": "note", "message": {"text": "33 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "2fbe176a90ede8a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "b4d9dbd139177bf6", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "ba59ae3549ff6ce9", "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": "ba445c1b17ec6804", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "676f11a80d674371", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "341bd9fdb752da99", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "5f261e08509167eb", "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": "4afb3d15d5ba88e8", "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": "10ee0df691f85e32", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-1991fbd71d0e5c1b", "level": "none", "message": {"text": "Commented-code block (6 lines) in test/magalu-fetchproductbyid.test.js:1"}, "properties": {"repobilityId": "7ef2cf0cbd627014", "scanner": "scanner-primary", "fingerprint": "1991fbd71d0e5c1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d22dde717885cf5", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/threads-oauth.js:8"}, "properties": {"repobilityId": "0c176da31ab97dee", "scanner": "scanner-primary", "fingerprint": "1d22dde717885cf5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b06350e348de5ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/probe-coupons.js:1"}, "properties": {"repobilityId": "878b535070e80ef7", "scanner": "scanner-primary", "fingerprint": "4b06350e348de5ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbb09f068d9b1c0d", "level": "note", "message": {"text": "Legacy-named symbol `counter_v1` in worker/index.js:29"}, "properties": {"repobilityId": "2a89c0a4e160c79e", "scanner": "scanner-primary", "fingerprint": "fbb09f068d9b1c0d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-08649049895ada63", "level": "none", "message": {"text": "Commented-code block (6 lines) in worker/index.js:12"}, "properties": {"repobilityId": "a6fce637ae6f411e", "scanner": "scanner-primary", "fingerprint": "08649049895ada63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6375bf0b31057c2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/index.js:189"}, "properties": {"repobilityId": "44eb22b77e2dd034", "scanner": "scanner-primary", "fingerprint": "6375bf0b31057c2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-95cac78e1780f92b", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/magalu-smoke.js:6"}, "properties": {"repobilityId": "baa5f0a5048b2aa6", "scanner": "scanner-primary", "fingerprint": "95cac78e1780f92b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64ae155d8d97d0b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/migrate-env-2026-05-19.js:4"}, "properties": {"repobilityId": "1bcf5f777debc801", "scanner": "scanner-primary", "fingerprint": "64ae155d8d97d0b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d780da150055e742", "level": "none", "message": {"text": "Commented-code block (8 lines) in tools/patch-routes.js:4"}, "properties": {"repobilityId": "00ca27cbb27150cb", "scanner": "scanner-primary", "fingerprint": "d780da150055e742", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c7e027ad6591aea", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/route-cache-audit.js:2"}, "properties": {"repobilityId": "0461e987994d73b8", "scanner": "scanner-primary", "fingerprint": "5c7e027ad6591aea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4caf91e030035c61", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/regex-audit.js:3"}, "properties": {"repobilityId": "758642ae26c27e57", "scanner": "scanner-primary", "fingerprint": "4caf91e030035c61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e683feed55cfdf59", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/competitorAutoRunner.js:3"}, "properties": {"repobilityId": "9c9b27e2051901cf", "scanner": "scanner-primary", "fingerprint": "e683feed55cfdf59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-871ec8e926ff5f2b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/queue.js:6"}, "properties": {"repobilityId": "127feb694a6c1133", "scanner": "scanner-primary", "fingerprint": "871ec8e926ff5f2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe12cbfda1b1a2c4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/filters.js:14"}, "properties": {"repobilityId": "83c5d32f0ff33aa7", "scanner": "scanner-primary", "fingerprint": "fe12cbfda1b1a2c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc72a186ff8d3163", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/trending.js:8"}, "properties": {"repobilityId": "e29f99576dad19aa", "scanner": "scanner-primary", "fingerprint": "cc72a186ff8d3163", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd08463bdcdd66cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/officialStores.js:4"}, "properties": {"repobilityId": "2236ead34a85d497", "scanner": "scanner-primary", "fingerprint": "cd08463bdcdd66cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55560abb892c1c89", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/promoGate.js:4"}, "properties": {"repobilityId": "fb8453f34fa661e5", "scanner": "scanner-primary", "fingerprint": "55560abb892c1c89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d3a7a42183ba6cb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/niches.js:31"}, "properties": {"repobilityId": "5f2ef41db3ca9c48", "scanner": "scanner-primary", "fingerprint": "2d3a7a42183ba6cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4f816a3ac61851e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/cache.js:11"}, "properties": {"repobilityId": "328556dce0208c78", "scanner": "scanner-primary", "fingerprint": "d4f816a3ac61851e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22488618d60efdf6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/officialStoresDB.js:4"}, "properties": {"repobilityId": "f933f374846cb073", "scanner": "scanner-primary", "fingerprint": "22488618d60efdf6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d2409667b74a34e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/funnel.js:1"}, "properties": {"repobilityId": "894ecc322fd76bfa", "scanner": "scanner-primary", "fingerprint": "8d2409667b74a34e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77335bbcdca9ebcd", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/config.js:29"}, "properties": {"repobilityId": "b190cdc6360bc7d5", "scanner": "scanner-primary", "fingerprint": "77335bbcdca9ebcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56d86674f64f46f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/state.js:3"}, "properties": {"repobilityId": "872a9807b3580925", "scanner": "scanner-primary", "fingerprint": "56d86674f64f46f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30757beab376794f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/marketPrice.js:4"}, "properties": {"repobilityId": "9ad8b538044f436b", "scanner": "scanner-primary", "fingerprint": "30757beab376794f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b485c17a37d7f46c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/wishlist.js:1"}, "properties": {"repobilityId": "d178aca17c706720", "scanner": "scanner-primary", "fingerprint": "b485c17a37d7f46c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2731945ddf19488f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/index.js:113"}, "properties": {"repobilityId": "3b8c4ef25253cd11", "scanner": "scanner-primary", "fingerprint": "2731945ddf19488f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6725e2f3fee098c9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/platforms/mlSearch.js:4"}, "properties": {"repobilityId": "07b1aa5822831b85", "scanner": "scanner-primary", "fingerprint": "6725e2f3fee098c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-957398b1c06d5f24", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/platforms/promobit.js:3"}, "properties": {"repobilityId": "f631ca3390111ee3", "scanner": "scanner-primary", "fingerprint": "957398b1c06d5f24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f03945dc54d06876", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/platforms/kabum.js:3"}, "properties": {"repobilityId": "a1f98ec617b69b65", "scanner": "scanner-primary", "fingerprint": "f03945dc54d06876", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-862aa10a41d43488", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/platforms/aliexpress.js:6"}, "properties": {"repobilityId": "371b8b22c8154e46", "scanner": "scanner-primary", "fingerprint": "862aa10a41d43488", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abeda97c4d62f646", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/platforms/competitorRadar.js:5"}, "properties": {"repobilityId": "c54e1850372f186f", "scanner": "scanner-primary", "fingerprint": "abeda97c4d62f646", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90668af5403159bf", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/platforms/mlOfficialStores.js:12"}, "properties": {"repobilityId": "27062199f4eda6ef", "scanner": "scanner-primary", "fingerprint": "90668af5403159bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c4bc59edcd4a5ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/platforms/couponRadar.js:3"}, "properties": {"repobilityId": "f278a2e2dc919994", "scanner": "scanner-primary", "fingerprint": "6c4bc59edcd4a5ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf5eb1a9d10d142c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/platforms/amazonDeals.js:3"}, "properties": {"repobilityId": "b660ce5d3c259aa2", "scanner": "scanner-primary", "fingerprint": "cf5eb1a9d10d142c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89789f1dc2255bf4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/platforms/vtex.js:6"}, "properties": {"repobilityId": "3539e28ca0556db2", "scanner": "scanner-primary", "fingerprint": "89789f1dc2255bf4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c424f243a36b3835", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/platforms/couponAggregator.js:3"}, "properties": {"repobilityId": "5562a4c7b471843c", "scanner": "scanner-primary", "fingerprint": "c424f243a36b3835", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d32d6fb7abe6c4d4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/platforms/bugRadar.js:1"}, "properties": {"repobilityId": "bc9ca3e03e1d0029", "scanner": "scanner-primary", "fingerprint": "d32d6fb7abe6c4d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd791169a52cfc1a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/platforms/magalu.js:23"}, "properties": {"repobilityId": "f4541c8d36306f03", "scanner": "scanner-primary", "fingerprint": "fd791169a52cfc1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5b8811d613411f2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/magalu.js:889"}, "properties": {"repobilityId": "eded1c01293f2976", "scanner": "scanner-primary", "fingerprint": "b5b8811d613411f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-60420f6f2d5fad36", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/platforms/mercadolivre.js:13"}, "properties": {"repobilityId": "5cdb79b1d8a93ca3", "scanner": "scanner-primary", "fingerprint": "60420f6f2d5fad36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-746b676bfc3e5a06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/mercadolivre.js:863"}, "properties": {"repobilityId": "358c7b5e1ec1d344", "scanner": "scanner-primary", "fingerprint": "746b676bfc3e5a06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-85f72e860061d421", "level": "note", "message": {"text": "Legacy-named symbol `product_price_old` in src/platforms/awin.js:133"}, "properties": {"repobilityId": "4463da6f6f71181f", "scanner": "scanner-primary", "fingerprint": "85f72e860061d421", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-98e263e15afe2469", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/platforms/awin.js:3"}, "properties": {"repobilityId": "689aa569756a74db", "scanner": "scanner-primary", "fingerprint": "98e263e15afe2469", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-925f31c6d23582aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/awin.js:267"}, "properties": {"repobilityId": "6f0fd771b9eb1663", "scanner": "scanner-primary", "fingerprint": "925f31c6d23582aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7d81ae7177785583", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/platforms/magalu_coupons.js:55"}, "properties": {"repobilityId": "68d65df8bbf1f318", "scanner": "scanner-primary", "fingerprint": "7d81ae7177785583", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7111da24a1bcc0e5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/platforms/lomadee.js:466"}, "properties": {"repobilityId": "a6785c8e1ce12249", "scanner": "scanner-primary", "fingerprint": "7111da24a1bcc0e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb64703284760ba6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/platforms/shopee/coupons.js:7"}, "properties": {"repobilityId": "34c865b1f5f8503d", "scanner": "scanner-primary", "fingerprint": "fb64703284760ba6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff8c35f8f178998b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/platforms/shopee/enrichment.js:3"}, "properties": {"repobilityId": "916af1f148205127", "scanner": "scanner-primary", "fingerprint": "ff8c35f8f178998b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f93c6c8f2d8bf4fd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/platforms/shopee/enrichment.js:103"}, "properties": {"repobilityId": "c3075f0bc4ac57ca", "scanner": "scanner-primary", "fingerprint": "f93c6c8f2d8bf4fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9825da552c06f9c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/platforms/shopee/scraper.js:3"}, "properties": {"repobilityId": "3346a333788db13d", "scanner": "scanner-primary", "fingerprint": "9825da552c06f9c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63b313d0b4e49007", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/platforms/shopee/index.js:3"}, "properties": {"repobilityId": "b72e0959104ff897", "scanner": "scanner-primary", "fingerprint": "63b313d0b4e49007", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-371063b3efc97098", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/platforms/shopee/api.js:103"}, "properties": {"repobilityId": "54b0cf8fb0bfe1c5", "scanner": "scanner-primary", "fingerprint": "371063b3efc97098", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a283377195237f48", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/notifiers/topOfDay.js:1"}, "properties": {"repobilityId": "f9fd2b393c645a04", "scanner": "scanner-primary", "fingerprint": "a283377195237f48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4711883f5b74f5da", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/notifiers/threadsAuth.js:8"}, "properties": {"repobilityId": "9f9ec63d0c4592a0", "scanner": "scanner-primary", "fingerprint": "4711883f5b74f5da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddda8c1615f3ee92", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/notifiers/videoSlideshow.js:5"}, "properties": {"repobilityId": "d8e404b9a12c1a0c", "scanner": "scanner-primary", "fingerprint": "ddda8c1615f3ee92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75cd386c9b7c710d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/notifiers/telegram.js:136"}, "properties": {"repobilityId": "45b127842ba6a313", "scanner": "scanner-primary", "fingerprint": "75cd386c9b7c710d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df29494ae364f9ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/notifiers/copyPasteFormatter.js:4"}, "properties": {"repobilityId": "6198895c9ba7f5f1", "scanner": "scanner-primary", "fingerprint": "df29494ae364f9ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8630b62584fc63a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/notifiers/bluesky.js:1"}, "properties": {"repobilityId": "3caf9583c77bf904", "scanner": "scanner-primary", "fingerprint": "a8630b62584fc63a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-295c65294dfc58c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/notifiers/stories.js:6"}, "properties": {"repobilityId": "24d08afa131aab3e", "scanner": "scanner-primary", "fingerprint": "295c65294dfc58c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c11662d537aecd06", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/notifiers/index.js:18"}, "properties": {"repobilityId": "fa382cb5226ac097", "scanner": "scanner-primary", "fingerprint": "c11662d537aecd06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6d7ea9b8bc99cbb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/notifiers/threads.js:4"}, "properties": {"repobilityId": "dcfbf18a0b16a5f3", "scanner": "scanner-primary", "fingerprint": "f6d7ea9b8bc99cbb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16d86dbddfa6ca21", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/notifiers/copyPaste.js:5"}, "properties": {"repobilityId": "63b315ecf3e57f67", "scanner": "scanner-primary", "fingerprint": "16d86dbddfa6ca21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2df7e451a1e52f2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/notifiers/threadsTemplates.js:3"}, "properties": {"repobilityId": "67ce0d6225447b10", "scanner": "scanner-primary", "fingerprint": "d2df7e451a1e52f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5360a93a53cd0e5c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/notifiers/tiktok.js:6"}, "properties": {"repobilityId": "4d9ecaef7b2f6bb5", "scanner": "scanner-primary", "fingerprint": "5360a93a53cd0e5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a6548949a1e3e4a", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/notifiers/formatter.js:42"}, "properties": {"repobilityId": "7a6870dd15307bc9", "scanner": "scanner-primary", "fingerprint": "0a6548949a1e3e4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7952637b3858f863", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/notifiers/whatsapp.js:147"}, "properties": {"repobilityId": "9f32dfaebd589664", "scanner": "scanner-primary", "fingerprint": "7952637b3858f863", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b6c7f735ff667c3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/utils/manualBlocklist.js:67"}, "properties": {"repobilityId": "6704e4df078ad480", "scanner": "scanner-primary", "fingerprint": "7b6c7f735ff667c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2ecde1c2ce5f852", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/sourceHealth.js:1"}, "properties": {"repobilityId": "67d48b52765c7d91", "scanner": "scanner-primary", "fingerprint": "d2ecde1c2ce5f852", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a289505416fd8fb2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/couponPatterns.js:11"}, "properties": {"repobilityId": "0e6e4ee1f1090331", "scanner": "scanner-primary", "fingerprint": "a289505416fd8fb2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2c018afb371d7cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/coupons.js:14"}, "properties": {"repobilityId": "c20aabf8a48d0ffa", "scanner": "scanner-primary", "fingerprint": "f2c018afb371d7cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea3f56312315bade", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/httpClient.js:1"}, "properties": {"repobilityId": "07a78385970f461c", "scanner": "scanner-primary", "fingerprint": "ea3f56312315bade", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-257b52f495c516ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/telegramPublic.js:1"}, "properties": {"repobilityId": "9a73df2cc479ef2f", "scanner": "scanner-primary", "fingerprint": "257b52f495c516ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8822308f1a2bb65e", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/utils/quietWindows.js:3"}, "properties": {"repobilityId": "8d56201413e846e4", "scanner": "scanner-primary", "fingerprint": "8822308f1a2bb65e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-669479bad1d59399", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/tracking.js:1"}, "properties": {"repobilityId": "a66895a2ab608ee5", "scanner": "scanner-primary", "fingerprint": "669479bad1d59399", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23b2e933c18219ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/couponBanners.js:4"}, "properties": {"repobilityId": "707bf4cd551e8801", "scanner": "scanner-primary", "fingerprint": "23b2e933c18219ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e3138a0b6897bb63", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/utils/platformCoupons.js:3"}, "properties": {"repobilityId": "706c51090457d3db", "scanner": "scanner-primary", "fingerprint": "e3138a0b6897bb63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db740cd4ac058eac", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/utils/shortener.js:9"}, "properties": {"repobilityId": "ab166b9ca0afa491", "scanner": "scanner-primary", "fingerprint": "db740cd4ac058eac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34158c08efa57119", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/utils/titleCleaner.js:11"}, "properties": {"repobilityId": "93b9a778d1dada29", "scanner": "scanner-primary", "fingerprint": "34158c08efa57119", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44b73d90986fd01c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/utils/bugPending.js:3"}, "properties": {"repobilityId": "753f244818062b12", "scanner": "scanner-primary", "fingerprint": "44b73d90986fd01c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8b211736d64db7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/couponPending.js:3"}, "properties": {"repobilityId": "2fec5807ddf7186f", "scanner": "scanner-primary", "fingerprint": "a8b211736d64db7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2912daa5594c43a", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/utils/persistedMap.js:12"}, "properties": {"repobilityId": "a1a2e402437a8cbd", "scanner": "scanner-primary", "fingerprint": "c2912daa5594c43a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-483b703d9f4b73fc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/utils/browserHeaders.js:4"}, "properties": {"repobilityId": "c96312c5dc79a62a", "scanner": "scanner-primary", "fingerprint": "483b703d9f4b73fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dadecd05dae38c6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/routesLoader.js:81"}, "properties": {"repobilityId": "b73d6234acc184fc", "scanner": "scanner-primary", "fingerprint": "2dadecd05dae38c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6af648a07c4f5617", "level": "note", "message": {"text": "72 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "f5b46f215a507c37", "scanner": "scanner-primary", "fingerprint": "6af648a07c4f5617", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}