{"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-747e45eee71403e9", "name": "Possibly dead Python function: block_dangerous_bash", "shortDescription": {"text": "Possibly dead Python function: block_dangerous_bash"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e2d39fd46a404f3", "name": "Possibly dead Python function: block_protected_files", "shortDescription": {"text": "Possibly dead Python function: block_protected_files"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e548af71c507d6a", "name": "File has no detected symbols: clean_orphan.py", "shortDescription": {"text": "File has no detected symbols: clean_orphan.py"}, "fullDescription": {"text": "Source file with no class/function declarations \u2014 possible config, dead code, or scratch file."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"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-ec9cc4ed73ecf90b", "name": "Stray `console.log` in TS/JS \u2014 scripts/tm-profile-local.ts:186", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-profile-local.ts:186"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1cbbb601f69336d2", "name": "Stray `console.log` in TS/JS \u2014 scripts/enrich-nationality-tm.ts:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enrich-nationality-tm.ts:126"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-89941c4402b7a390", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch11.js:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch11.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-2a0b738d1545f785", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch15.js:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch15.js:120"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25b7f563278c0593", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch2.js:186", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch2.js:186"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b80f126f7f8451bb", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch8.js:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch8.js:105"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07fc33a5eca14b61", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-bundle.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-bundle.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-4fefe86f38143fe4", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch16.js:196", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch16.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-7e4e1b7aacc0d22f", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-stale-check.ts:360", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-stale-check.ts:360"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c10585bd9f33522f", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch20.js:159", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch20.js:159"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6989c5e17133efe3", "name": "Stray `console.log` in TS/JS \u2014 scripts/tm-parser-sanity.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-parser-sanity.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c3dc627bf148880", "name": "Stray `console.log` in TS/JS \u2014 scripts/tm-search-local.ts:163", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-search-local.ts: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-64032c0d26bc9a22", "name": "Stray `console.log` in TS/JS \u2014 scripts/tm-search-scrape-unknown.ts:184", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-search-scrape-unknown.ts:184"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fadb90a54e05358f", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch10.js:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch10.js:115"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c02b7aa479dd751a", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch3.js:323", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch3.js:323"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1fa07dc30b67e1f3", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch12.js:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch12.js:81"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c037fd4aa1996b", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch14.js:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch14.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-696cb3cfa61059ab", "name": "Stray `console.log` in TS/JS \u2014 scripts/type-truth-audit.ts:315", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/type-truth-audit.ts:315"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1dda25063fbe03ad", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch17.js:160", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch17.js:160"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8bc4c0383ad08267", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys.js:293", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys.js:293"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6c2bcb0cdc44269", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch13.js:163", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch13.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-5de65204d823f670", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-bundle-size.ts:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-bundle-size.ts:114"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4aff494f737ea4bf", "name": "Stray `console.log` in TS/JS \u2014 scripts/orphan-component-detector.ts:348", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/orphan-component-detector.ts:348"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be839d19e0e8c0b3", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch7.js:128", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch7.js:128"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12df3e8ccf9144dd", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch21.js:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch21.js:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eeee1ec0c08b7e3c", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-nationality-coverage.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-nationality-coverage.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aaa6d558d47d4aa2", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch6.js:528", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch6.js:528"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-823e80f43fcec926", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch5.js:403", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch5.js:403"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-000956d20797ec78", "name": "Stray `console.log` in TS/JS \u2014 scripts/silent-fail-audit.ts:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/silent-fail-audit.ts:185"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6880500e5caf7f2", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-cron-registry.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-cron-registry.ts:69"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9c8f940df5bbe378", "name": "Stray `console.log` in TS/JS \u2014 scripts/tm-rescrape-stale.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-rescrape-stale.ts: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-d3ecd0ee541031df", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch9.js:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch9.js:141"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2be98b0d445d7f2b", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch19.js:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch19.js:97"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-19774404eab14516", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch4.js:269", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch4.js:269"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2a9a2bef850b5034", "name": "Stray `console.log` in TS/JS \u2014 scripts/tm-parser-verify.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-parser-verify.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5297540e90c6b6b0", "name": "Stray `console.log` in TS/JS \u2014 scripts/wiring-check.ts:265", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wiring-check.ts:265"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a67f60bf95e01d14", "name": "Stray `console.log` in TS/JS \u2014 scripts/cron-health-check.ts:223", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cron-health-check.ts:223"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44f61f1fb7e1d791", "name": "Stray `console.log` in TS/JS \u2014 scripts/rotate-secret.ts:161", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rotate-secret.ts:161"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01cd8458efd3ccbb", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch18.js:281", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch18.js:281"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4fb4fae6fcfc4b52", "name": "Stray `console.log` in TS/JS \u2014 scripts/findings-to-slices.ts:312", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/findings-to-slices.ts:312"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12a0b02e9a2a1b9f", "name": "Stray `console.log` in TS/JS \u2014 scripts/pg/extract-rpc.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pg/extract-rpc.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-059727b587eb9527", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit/rpc-security.js:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit/rpc-security.js:81"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fdc2f2ce05195058", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit/i18n-coverage.js:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit/i18n-coverage.js:98"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-918fb6981dc24d03", "name": "Stray `console.log` in TS/JS \u2014 scripts/archived/2026-04-28-once-off/tm-club-id-discovery.ts:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/archived/2026-04-28-once-off/tm-club-id-discovery.ts:210"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49fe2241661f3a42", "name": "Stray `console.log` in TS/JS \u2014 scripts/archived/2026-04-28-once-off/fix-bug-004.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/archived/2026-04-28-once-off/fix-bug-004.ts: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-4e72a7b785063224", "name": "Stray `console.log` in TS/JS \u2014 scripts/archived/2026-04-28-once-off/tm-squad-scrape-local.ts:180", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/archived/2026-04-28-once-off/tm-squad-scrape-local.ts:180"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c6ac6d6f2a17301", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/page.tsx:195", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/page.tsx:195"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-26ca8d5fe78db1a0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/clubs/page.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/clubs/page.tsx:219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f0e0ff509e44122", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminFanWishesTab.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminFanWishesTab.tsx:103"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a717759f65dc97c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminClubsTab.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminClubsTab.tsx:101"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed9cc2f5cd451b0e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminCSVImportTab.tsx:287", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminCSVImportTab.tsx:287"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77e11c10cd0baedc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminLigaTab.tsx:212", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminLigaTab.tsx:212"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d21155f577faf9f5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/BescoutAdminContent.tsx:239", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/BescoutAdminContent.tsx:239"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-81804f2a35ab7fa4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminFoundingPassesTab.tsx:301", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminFoundingPassesTab.tsx:301"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-81ffc6d812353417", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminSponsorsTab.tsx:226", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminSponsorsTab.tsx:226"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1fca0895c15cffd1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminEconomyTab.tsx:212", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminEconomyTab.tsx:212"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-33d727c76301b7c6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/club/[slug]/ClubContent.tsx:488", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/club/[slug]/ClubContent.tsx:488"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87ccf3f9f8f3ef08", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/PredictionsTab.tsx:206", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/PredictionsTab.tsx:206"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-572e3bfe4075180c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/LeaguesSection.tsx:198", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/LeaguesSection.tsx:198"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac86b32020ccae32", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/MitmachenTab.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/MitmachenTab.tsx:119"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-698026625a6a3e39", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/PredictionCard.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/PredictionCard.tsx:40"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c001a49227e87db7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/EventSummaryModal.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/EventSummaryModal.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7ce76fb0b727903d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/FantasyPlayerRow.tsx:104", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/FantasyPlayerRow.tsx:104"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b6d666e9880b1fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/HistoryTab.tsx:342", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/HistoryTab.tsx:342"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee41b6d5a4df96a6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/EventCommunityTab.tsx:291", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/EventCommunityTab.tsx:291"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4df35424c6cf75b6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/GwHeroSummary.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/GwHeroSummary.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f66a2c9dc57ace66", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/PredictionResults.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/PredictionResults.tsx:94"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad9b58191e7b299f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/Top3Cards.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/Top3Cards.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e83c1b06b8747c6c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/PersonalResults.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/PersonalResults.tsx:95"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e6d62a0349770c3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/BestElevenShowcase.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/BestElevenShowcase.tsx:191"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a75624813a6f4cd8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/FixtureCard.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/FixtureCard.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8e5c816a3b269b7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/TopspielCard.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/TopspielCard.tsx:58"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-483e2983454276ae", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/TopScorerShowcase.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/TopScorerShowcase.tsx:57"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a3e6a97f5d0c006", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/FixtureDetailModal.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/FixtureDetailModal.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6c5738fe3c7408ef", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/fixture-tabs/RankingTab.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/fixture-tabs/RankingTab.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35cf00e34e6eddbf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/fixture-tabs/FormationTab.tsx:289", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/fixture-tabs/FormationTab.tsx:289"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4ced73567955403", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/event-tabs/LineupPanel.tsx:267", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/event-tabs/LineupPanel.tsx:267"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-245b36e1b56cd1c3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/events/EventSpotlight.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/events/EventSpotlight.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c32b9fca719188cb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/events/EventCompactRow.tsx:39", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/events/EventCompactRow.tsx:39"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd3879a74e467efc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/social/FollowingFeedRail.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/social/FollowingFeedRail.tsx:179"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec27fddd0f1cd842", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/index.tsx:388", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/index.tsx:388"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fad80100ec21e71", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/MatchTimeline.tsx:222", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/MatchTimeline.tsx:222"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-773d04ed28821491", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/UpcomingFixtures.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/UpcomingFixtures.tsx:58"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df11e33cab46e821", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/TradingCardFrame.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/TradingCardFrame.tsx:114"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f2a549be434f7c8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/PlayerHero.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/PlayerHero.tsx:200"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7205bd371a79b8f2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/TradingTab.tsx:304", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/TradingTab.tsx:304"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa78a4df98076691", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/FantasyCTA.tsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/FantasyCTA.tsx:35"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d645f45e6789beee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/StickyDashboardStrip.tsx:51", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/StickyDashboardStrip.tsx:51"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c2ca4731de55156", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/missions/MissionHint.tsx:27", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/missions/MissionHint.tsx:27"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4f9aac01a141f46", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/missions/FantasyContextHint.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/missions/FantasyContextHint.tsx:40"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3bc881b0d77cbe7b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminFansTab.tsx:203", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminFansTab.tsx:203"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e0cda35aaf2b848", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminScoutingTab.tsx:156", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminScoutingTab.tsx:156"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdf226c138bdf760", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminOverviewTab.tsx:258", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminOverviewTab.tsx:258"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6d1dc5c35c4c72b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/FanChallengesTab.tsx:262", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/FanChallengesTab.tsx:262"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8a45cffa04c1619", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/EventRow.tsx:51", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/EventRow.tsx:51"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ced5eae2f9ce31f3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminAnalyticsTab.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminAnalyticsTab.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5fa8fca3900669ce", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminModerationTab.tsx:277", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminModerationTab.tsx:277"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04df169957776cfb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminSponsorTab.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminSponsorTab.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5779ce563f0a7781", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminSettingsTab.tsx:828", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminSettingsTab.tsx:828"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ff3a61df9de9688", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminEventsTab.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminEventsTab.tsx:194"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68b54f1ff600c09f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/FollowListModal.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/FollowListModal.tsx:119"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-998861a94e01a1b5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/AnalystTab.tsx:283", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/AnalystTab.tsx:283"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c25bf67bac7a5f56", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/TimelineTab.tsx:354", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/TimelineTab.tsx:354"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-adac5da5011490e5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/ScoutCard.tsx:123", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/ScoutCard.tsx:123"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d09643aa29c3b978", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/TraderTab.tsx:305", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/TraderTab.tsx:305"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5defc5912dde545c", "name": "TODO/FIXME marker in shipping code \u2014 src/components/profile/__tests__/ProfileView.test.tsx:543", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/profile/__tests__/ProfileView.test.tsx:543"}, "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-be4ec14351e5d4a7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/ClubSwitcher.tsx:69", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/ClubSwitcher.tsx:69"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de85c44de2a643d5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/FeedbackModal.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/FeedbackModal.tsx:108"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea3eb95b4f206d1d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/TopBar.tsx:146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/TopBar.tsx:146"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0feff1df7973f701", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/SearchOverlay.tsx:378", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/SearchOverlay.tsx:378"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e779cad0be792fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/HomeSpotlight.tsx:173", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/HomeSpotlight.tsx:173"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dcf5f29e22ed67c5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/TopMoversStrip.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/TopMoversStrip.tsx:42"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea3e38cade5feeb3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/LastGameweekWidget.tsx:233", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/LastGameweekWidget.tsx:233"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30a72d99d8f690fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/OwnTopMoversStrip.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/OwnTopMoversStrip.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bd020405901e0b3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/TrendingPlayersStrip.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/TrendingPlayersStrip.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e79e710fca1d40fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/GameweekStatusBar.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/GameweekStatusBar.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a5a4045abf1c90d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/MostWatchedStrip.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/MostWatchedStrip.tsx:58"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12375dc058a71fa8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/community/CommunitySidebar.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/community/CommunitySidebar.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2cacd724ef732695", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/transactions/TransactionsPageContent.tsx:580", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/transactions/TransactionsPageContent.tsx:580"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fdf79ac976af583e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/LastEventResults.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/LastEventResults.tsx:67"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-78cd6d2adb02bf11", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/GlobalLeaderboard.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/GlobalLeaderboard.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a27912898c346b0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/PlayerRankings.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/PlayerRankings.tsx:137"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37ac4747f2a1ded3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/MonthlyWinners.tsx:97", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/MonthlyWinners.tsx:97"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b931579358752678", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/inventory/MysteryBoxHistorySection.tsx:225", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/inventory/MysteryBoxHistorySection.tsx:225"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c00621e990f5e88", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/inventory/CosmeticsSection.tsx:145", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/inventory/CosmeticsSection.tsx:145"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73470cddce06a430", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/inventory/EquipmentSection.tsx:546", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/inventory/EquipmentSection.tsx:546"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-602d22086d01bb4d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/FixtureCards.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/FixtureCards.tsx:65"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d11152c484331dc3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/ClubStatsBar.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/ClubStatsBar.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f23769844c7be04d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/MitmachenSection.tsx:111", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/MitmachenSection.tsx:111"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bfc2b03bf045129e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/MostOwnedSection.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/MostOwnedSection.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37957e07425cbbfe", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/ActiveOffersSection.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/ActiveOffersSection.tsx:58"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8bedd673d4d74f4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/RecentActivitySection.tsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/RecentActivitySection.tsx:43"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6e62bc4753bd57d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/SquadPreviewSection.tsx:69", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/SquadPreviewSection.tsx:69"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e457cea3ac12e70a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/ClubFixturesStrip.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/ClubFixturesStrip.tsx:99"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2c88ff087e8a89f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/AlertDialog.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/AlertDialog.tsx:92"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88d70e0c8b085548", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/MobileTableCard.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/MobileTableCard.tsx:71"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab77687c45d8687e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/Dialog.tsx:142", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/Dialog.tsx:142"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa958e4c5747ca8e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/CountryBar.tsx:53", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/CountryBar.tsx:53"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c886e5407391842", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/LeagueBarShared.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/LeagueBarShared.tsx:92"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a65b0c186597d90d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/index.tsx:155", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/index.tsx:155"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7ecc23f3478d7dc3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/MarkdownRenderer.tsx:19", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/MarkdownRenderer.tsx:19"}, "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-bcd84dd4b97090fe", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/gamification/EquipmentPicker.tsx:138", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/gamification/EquipmentPicker.tsx:138"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e903b8c957ae27f6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/gamification/DailyChallengeCard.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/gamification/DailyChallengeCard.tsx:219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3911e2c6d1d3d7f4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/fantasy/components/lineup/BenchRow.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/fantasy/components/lineup/BenchRow.tsx:211"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c8480844b5967f8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/EquipmentShortcut.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/EquipmentShortcut.tsx:60"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-232784ac3576d066", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/PageHeader.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/PageHeader.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f3bc05f26fe28e0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/historie/HistoryEventCard.tsx:175", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/historie/HistoryEventCard.tsx:175"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b2de7440b10faea", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/aufstellen/EventSelector.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/aufstellen/EventSelector.tsx:105"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdc3e1f809b8ec03", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/kader/KaderPlayerRow.tsx:264", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/kader/KaderPlayerRow.tsx:264"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c67703b63aa6c149", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/shared/TradeSuccessCard.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/shared/TradeSuccessCard.tsx:153"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90c9b0f7f572c69f", "name": "\"active\" state uses light bg in a dark theme \u2014 src/features/market/components/shared/MarketFilters.tsx:300", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/features/market/components/shared/MarketFilters.tsx:300"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aefb457431fe8269", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/portfolio/BestandPlayerRow.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/portfolio/BestandPlayerRow.tsx:73"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-00d7d439a0bb2dae", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/LeagueBar.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/LeagueBar.tsx:73"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-161fe76f2c3dbd73", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/ClubCard.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/ClubCard.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d1e4bb545fb8650", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/PlayerIPOCard.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/PlayerIPOCard.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df00bd2073888e94", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/WatchlistView.tsx:334", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/WatchlistView.tsx:334"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f82d95694945625d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/EndingSoonStrip.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/EndingSoonStrip.tsx:65"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a271bc885e81904", "name": "Stray `console.log` in TS/JS \u2014 src/lib/__tests__/db-invariants.test.ts:571", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/__tests__/db-invariants.test.ts:571"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09509784f1db7fc2", "name": "Stray `console.log` in TS/JS \u2014 src/lib/__tests__/error-keys-coverage.test.ts:161", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/__tests__/error-keys-coverage.test.ts:161"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1dd641593ec74d9", "name": "Stray `console.log` in TS/JS \u2014 docs/plans/_writer.js:1", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/plans/_writer.js:1"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74eaebc8947784a6", "name": "Stray `console.log` in TS/JS \u2014 docs/plans/_stdin_writer.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/plans/_stdin_writer.js:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d85bede6e6565986", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-profile-screenshot.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-profile-screenshot.ts:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef6b28e56dd45df1", "name": "Stray `console.log` in TS/JS \u2014 e2e/take-screenshots.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/take-screenshots.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f4c39d62598100b0", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-3hub.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-3hub.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1077b60e657aaa8a", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-polish.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-polish.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-afe9e4ea803325e4", "name": "Stray `console.log` in TS/JS \u2014 e2e/mystery-box-qa.spec.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/mystery-box-qa.spec.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb6c7e55dbfa9393", "name": "Stray `console.log` in TS/JS \u2014 e2e/screenshot-home.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/screenshot-home.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5502de85e3bf87c3", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-283-network.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-283-network.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9f6fa36c94802b0", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-onboarding.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-onboarding.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e05c9d5d24a5e605", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-onboarding-register.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-onboarding-register.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5706d6c5c177a6ff", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-133-clubs-verify.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-133-clubs-verify.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-950e791ea69f3d75", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-b3b4-verify.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-b3b4-verify.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-396b8c4a2d464cbe", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-151b-RESET-follow-sync.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-151b-RESET-follow-sync.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d45934b90c40fb4", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-284c-verify.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-284c-verify.ts: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-63a176bad961b0dd", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-equipment-inventory.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-equipment-inventory.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95b0298b968b01f9", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-fetch-errors-isolate.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-fetch-errors-isolate.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d088ae728124b88", "name": "Stray `console.log` in TS/JS \u2014 e2e/screenshot-spieltag.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/screenshot-spieltag.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d0c227cda0458a33", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-284-stab-walk.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-284-stab-walk.ts:65"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c8940f53d872fe8", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-152-wallet-money-path.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-152-wallet-money-path.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-64297e6e9d21a634", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-282-network.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-282-network.ts:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9328cf662663a2cf", "name": "Stray `console.log` in TS/JS \u2014 e2e/smoke-check.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/smoke-check.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95626822fec7606d", "name": "Stray `console.log` in TS/JS \u2014 e2e/take-mobile-screenshots.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/take-mobile-screenshots.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-078dc624d2b6dde0", "name": "Stray `console.log` in TS/JS \u2014 e2e/qa-realtime-feed.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-realtime-feed.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac9e8b6415af9e8f", "name": "Stray `console.log` in TS/JS \u2014 e2e/bots/simulate.spec.ts:592", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/simulate.spec.ts:592"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a144d25a084730b7", "name": "Stray `console.log` in TS/JS \u2014 e2e/bots/bot-journal.ts:204", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/bot-journal.ts:204"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f3e86e77fb4a8a23", "name": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/survey.ts:595", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/survey.ts:595"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bad39a9c26760c0d", "name": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/run.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/run.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f6db6a87e3cef60", "name": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/diag-market-query.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/diag-market-query.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f6d1b234829d253", "name": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/refresh-wallets.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/refresh-wallets.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e58abc939b45f2c", "name": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/qa-runner.ts:546", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/qa-runner.ts:546"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1cb1e6e2192819a9", "name": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/run-loop.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/run-loop.ts:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83583987ee4bc333", "name": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/setup-accounts.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/setup-accounts.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a389da475c101a06", "name": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/survey-aggregator.ts:143", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/survey-aggregator.ts:143"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7932b9916700a174", "name": "Insecure pattern 'node_child_process' in scripts/check-bundle-size.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-bundle-size.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d0acc6b96b4da4b6", "name": "Insecure pattern 'node_child_process' in scripts/slice-273-backfill-fixture-stats.mjs:32", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/slice-273-backfill-fixture-stats.mjs:32"}, "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-4370101eaf22c021", "name": "Insecure pattern 'node_child_process' in scripts/rotate-secret.ts:34", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/rotate-secret.ts:34"}, "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-973d7563115b5447", "name": "Insecure pattern 'local_storage_auth_token' in src/components/providers/AuthProvider.tsx:164", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/components/providers/AuthProvider.tsx:164"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e2cdc4bddccc369", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/MarkdownRenderer.tsx:19", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/MarkdownRenderer.tsx:19"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-536a8923cf700436", "name": "Insecure pattern 'local_storage_auth_token' in src/lib/services/activityLog.ts:14", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/lib/services/activityLog.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebb84f2d7072417a", "name": "Possible secret in src/lib/__tests__/helpers/supabase-test-client.ts", "shortDescription": {"text": "Possible secret in src/lib/__tests__/helpers/supabase-test-client.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b1cdc169e2099369", "name": "Insecure pattern 'dangerous_innerhtml' in worklog/proofs/151b-RESET-diag-nobutton.html:1", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in worklog/proofs/151b-RESET-diag-nobutton.html:1"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2858e6808accc136", "name": "Possible secret in e2e/take-screenshots.ts", "shortDescription": {"text": "Possible secret in e2e/take-screenshots.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d90d13f9adadd1b1", "name": "Possible secret in e2e/qa-3hub.ts", "shortDescription": {"text": "Possible secret in e2e/qa-3hub.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-79235056648d23e7", "name": "Possible secret in e2e/qa-polish.ts", "shortDescription": {"text": "Possible secret in e2e/qa-polish.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-a54aff369b764c1b", "name": "Possible secret in e2e/mystery-box-qa.spec.ts", "shortDescription": {"text": "Possible secret in e2e/mystery-box-qa.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-3aeed83187a1adba", "name": "Possible secret in e2e/screenshot-home.ts", "shortDescription": {"text": "Possible secret in e2e/screenshot-home.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5a20609430e88afe", "name": "Possible secret in e2e/qa-283-network.ts", "shortDescription": {"text": "Possible secret in e2e/qa-283-network.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-e393ea7abe1827ab", "name": "Possible secret in e2e/qa-onboarding.ts", "shortDescription": {"text": "Possible secret in e2e/qa-onboarding.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-bc0982f9f4dfaf13", "name": "Possible secret in e2e/qa-b3b4-verify.ts", "shortDescription": {"text": "Possible secret in e2e/qa-b3b4-verify.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-1ea1c4b861cc8cb1", "name": "Possible secret in e2e/helpers.ts", "shortDescription": {"text": "Possible secret in e2e/helpers.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5d895bb3e82fda1e", "name": "Possible secret in e2e/qa-284c-verify.ts", "shortDescription": {"text": "Possible secret in e2e/qa-284c-verify.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-7f5d51ee2751fd9f", "name": "Possible secret in e2e/qa-equipment-inventory.ts", "shortDescription": {"text": "Possible secret in e2e/qa-equipment-inventory.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-c5a450a06ce3f205", "name": "Possible secret in e2e/qa-fetch-errors-isolate.ts", "shortDescription": {"text": "Possible secret in e2e/qa-fetch-errors-isolate.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-2f6c0a335be625ce", "name": "Possible secret in e2e/screenshot-spieltag.ts", "shortDescription": {"text": "Possible secret in e2e/screenshot-spieltag.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-05979194e54ff10e", "name": "Possible secret in e2e/qa-284-stab-walk.ts", "shortDescription": {"text": "Possible secret in e2e/qa-284-stab-walk.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-11dfc5426e8373b7", "name": "Possible secret in e2e/qa-282-network.ts", "shortDescription": {"text": "Possible secret in e2e/qa-282-network.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f0b18967c0b5562c", "name": "Possible secret in e2e/take-mobile-screenshots.ts", "shortDescription": {"text": "Possible secret in e2e/take-mobile-screenshots.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d6ae1b015945c434", "name": "Possible secret in e2e/qa-realtime-feed.ts", "shortDescription": {"text": "Possible secret in e2e/qa-realtime-feed.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5d37df7eb3b14e5c", "name": "Possible secret in e2e/full-check/profile.spec.ts", "shortDescription": {"text": "Possible secret in e2e/full-check/profile.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-46a077d8ee8975f3", "name": "Possible secret in e2e/full-check/community.spec.ts", "shortDescription": {"text": "Possible secret in e2e/full-check/community.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-c9792ceb417701f5", "name": "Possible secret in e2e/full-check/settings.spec.ts", "shortDescription": {"text": "Possible secret in e2e/full-check/settings.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-366bb4e1c914ee28", "name": "Possible secret in e2e/bots/bot-config.ts", "shortDescription": {"text": "Possible secret in e2e/bots/bot-config.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-92e0a01f01343fbb", "name": "Possible secret in e2e/bots/ai/run.ts", "shortDescription": {"text": "Possible secret in e2e/bots/ai/run.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f8414e6d24a33f2c", "name": "Possible secret in e2e/bots/ai/diag-market-query.ts", "shortDescription": {"text": "Possible secret in e2e/bots/ai/diag-market-query.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-8bc800687d0a27b4", "name": "Possible secret in e2e/bots/ai/refresh-wallets.ts", "shortDescription": {"text": "Possible secret in e2e/bots/ai/refresh-wallets.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-937670b0e7ee6422", "name": "Insecure pattern 'node_child_process' in e2e/bots/ai/run-loop.ts:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in e2e/bots/ai/run-loop.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-015e6ec1250c23a2", "name": "Possible secret in e2e/bots/ai/setup-accounts.ts", "shortDescription": {"text": "Possible secret in e2e/bots/ai/setup-accounts.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-769fdbe33092e92c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47910043ea2aaed8", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1186bcfe8b1ba15f", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/github-script@v7 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0840d07864313e3", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14f1dc5dd96acbc8", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/github-script@v7 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01ac28852aaf1214", "name": "Very large file: src/app/api/cron/gameweek-sync/route.ts (1902 lines)", "shortDescription": {"text": "Very large file: src/app/api/cron/gameweek-sync/route.ts (1902 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-cf594bb77fd3d68e", "name": "Very large file: src/app/(app)/bescout-admin/AdminEconomyTab.tsx (1582 lines)", "shortDescription": {"text": "Very large file: src/app/(app)/bescout-admin/AdminEconomyTab.tsx (1582 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-e7e93e337b199ec7", "name": "Very large file: src/types/index.ts (2205 lines)", "shortDescription": {"text": "Very large file: src/types/index.ts (2205 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-462cda10779f8ef2", "name": "Very large file: src/components/fantasy/event-tabs/LineupPanel.tsx (1023 lines)", "shortDescription": {"text": "Very large file: src/components/fantasy/event-tabs/LineupPanel.tsx (1023 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-0c445118fc3d4be9", "name": "Very large file: src/components/community/hooks/__tests__/useCommunityActions.test.ts (1575 lines)", "shortDescription": {"text": "Very large file: src/components/community/hooks/__tests__/useCommunityActions.test.ts (1575 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-fd31e25849508cb0", "name": "Very large file: src/lib/__tests__/db-invariants.test.ts (2250 lines)", "shortDescription": {"text": "Very large file: src/lib/__tests__/db-invariants.test.ts (2250 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-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 1221 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 227 placeholder/mock markers across 69 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-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. 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-cc55229a7a3c078d", "name": "Agent authority lacks a verifier contract: .mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ecb0d2c55ed6875d", "name": "Agent authority lacks a verifier contract: .claude/settings.local.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cbe135a2fc0f65cc", "name": "Agent authority lacks a verifier contract: .claude/agents/brand-coherence-auditor.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/brand-coherence-auditor.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c3083d2d05771e7", "name": "Agent authority lacks a verifier contract: .claude/agents/autodream.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/autodream.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-340b96426ec391ac", "name": "Agent authority lacks a verifier contract: .claude/agents/ux-coherence-auditor.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/ux-coherence-auditor.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-56f8d532c94c9820", "name": "Agent authority lacks a verifier contract: .claude/agents/gtm-writer.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gtm-writer.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44ee3b3b930dbdcb", "name": "Agent authority lacks a verifier contract: .claude/agents/business.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/business.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2b9a4f4d4ff84ac7", "name": "Agent authority lacks a verifier contract: .claude/agents/fm-mechanics-expert.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/fm-mechanics-expert.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a0ac535d6ea66cf0", "name": "Agent authority lacks a verifier contract: .claude/agents/qa-visual.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/qa-visual.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7de2685f60e58b2f", "name": "Agent authority lacks a verifier contract: .claude/agents/fantasy-scoring-expert.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/fantasy-scoring-expert.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5fd594e1f8316e3e", "name": "Agent authority lacks a verifier contract: .claude/agents/impact-analyst.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/impact-analyst.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8c9644df36e2c5e0", "name": "Agent authority lacks a verifier contract: .claude/plugins/testing-toolkit/agents/tdd-developer.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/plugins/testing-toolkit/agents/tdd-developer.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32a3c0708c432c8d", "name": "Agent authority lacks a verifier contract: .claude/plugins/security-essentials/hooks/file-change-limiter.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/plugins/security-essentials/hooks/file-change-limiter.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72367a2a17262e55", "name": "Agent authority lacks a verifier contract: .claude/plugins/security-essentials/hooks/sensitive-file-protector.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/plugins/security-essentials/hooks/sensitive-file-protector.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-63b178122f5fcf08", "name": "Agent authority lacks a verifier contract: .claude/plugins/security-essentials/hooks/command-validator.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/plugins/security-essentials/hooks/command-validator.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-76361cfb72bc08aa", "name": "Agent instruction contains unpinned remote install: .claude/plugins/security-essentials/templates/security-best-practice", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/plugins/security-essentials/templates/security-best-practices.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6c32d8f96749ed73", "name": "Agent authority lacks a verifier contract: .claude/plugins/tailwind-expert/README.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/plugins/tailwind-expert/README.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-02d3157b3faec0a2", "name": "Agent authority lacks a verifier contract: .claude/plugins/tailwind-expert/agents/css-analyzer.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/plugins/tailwind-expert/agents/css-analyzer.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a298b4f264d3cb2f", "name": "Agent authority lacks a verifier contract: .claude/plugins/tailwind-expert/workflows/tailwind-setup.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/plugins/tailwind-expert/workflows/tailwind-setup.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7997fb8f22738fb", "name": "Agent instruction/config may expose a secret: .claude/commands/security-best-practices.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/commands/security-best-practices.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf738f9184325370", "name": "Agent instruction contains unpinned remote install: .claude/commands/security-best-practices.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/commands/security-best-practices.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f754974203c1f1cf", "name": "Agent authority lacks a verifier contract: .claude/commands/baseline-ui.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/baseline-ui.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-149e34fd1b9e4444", "name": "Agent authority lacks a verifier contract: .claude/commands/performance-audit.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/performance-audit.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dd00e46dd650df3c", "name": "Agent authority lacks a verifier contract: .claude/commands/accessibility-review.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/accessibility-review.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a38f069438c38d00", "name": "Agent authority lacks a verifier contract: .claude/commands/state-management.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/state-management.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-08afbfed791be500", "name": "Agent authority lacks a verifier contract: .claude/commands/optimization.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/optimization.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-071e68be6a745675", "name": "Agent authority lacks a verifier contract: .claude/workflows/project-management-init-project.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/workflows/project-management-init-project.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad82ed798e1beef3", "name": "Agent authority lacks a verifier contract: .claude/workflows/tailwind-expert-tailwind-setup.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/workflows/tailwind-expert-tailwind-setup.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dbe5f4468b32a7fd", "name": "Agent authority lacks a verifier contract: .claude/rules/ui-components.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/rules/ui-components.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5dc5545f84dd565", "name": "Agent instruction/config may expose a secret: .claude/rules/errors-db.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/rules/errors-db.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df9e023d3cf52e3e", "name": "Agent authority lacks a verifier contract: .claude/rules/business.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/rules/business.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-239234fb8dfee261", "name": "Agent authority lacks a verifier contract: .claude/rules/errors-infra.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/rules/errors-infra.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4396ee0943224f64", "name": "Agent authority lacks a verifier contract: .claude/rules/workflow.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/rules/workflow.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0098a7b297d76246", "name": "Agent authority lacks a verifier contract: .claude/skills/improve/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/improve/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d5715b2479a013a6", "name": "Agent authority lacks a verifier contract: .claude/skills/auto-beta-ready/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/auto-beta-ready/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-56c1754bca37ba81", "name": "Agent authority lacks a verifier contract: .claude/skills/impact/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/impact/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19f5a7757be794a9", "name": "Agent authority lacks a verifier contract: .claude/skills/competing-hypotheses/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/competing-hypotheses/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19cf6e506b6fe7c2", "name": "Agent authority lacks a verifier contract: .claude/skills/plan-legal-review/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/plan-legal-review/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac0e2836b5d31338", "name": "Agent authority lacks a verifier contract: .claude/skills/audit-beta-readiness/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/audit-beta-readiness/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-025dccb3231d0571", "name": "Agent authority lacks a verifier contract: .claude/skills/silent-fail-audit/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/silent-fail-audit/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-18469a3d366b4e06", "name": "Agent authority lacks a verifier contract: .claude/skills/plan-qa-review/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/plan-qa-review/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7bb43f0ee473320", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-nationality.mjs:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-nationality.mjs:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a0fb35f93e2084e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/reconcile-player-ids.mjs:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/reconcile-player-ids.mjs:46"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9595b8fc710eef76", "name": "Commented-code block (8 lines) in scripts/backfill-scoring-historical.mjs:527", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/backfill-scoring-historical.mjs:527"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b48eefa5fdc2fc3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-scoring-historical.mjs:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-scoring-historical.mjs:91"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1add2a9197a21974", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/rebuild-ban-squad.mjs:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/rebuild-ban-squad.mjs:84"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2e05ace95923aaf0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/diagnose-missing-players.mjs:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/diagnose-missing-players.mjs:19"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b1ea774bca9a3154", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-ratings.mjs:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-ratings.mjs:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ba5a98282dded784", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-by-id.mjs:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-by-id.mjs:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d2218fca23ed17c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-squads.mjs:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-squads.mjs:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4ade36a13745e97b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-unmapped-players.mjs:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-unmapped-players.mjs:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1744743fe22da164", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-positions.mjs:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-positions.mjs:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65cda312eb32e2fc", "name": "Commented-code block (7 lines) in scripts/type-truth-audit.ts:100", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/type-truth-audit.ts:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-355471ef8679ea8d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-fixtures.mjs:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-fixtures.mjs:64"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8f46dba493d9720", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-tff-players.mjs:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-tff-players.mjs:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-586658303a1b6575", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-complete-stats.mjs:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-complete-stats.mjs:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5513294b37ac3ea1", "name": "Commented-code block (5 lines) in scripts/silent-fail-audit.ts:64", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/silent-fail-audit.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd5b827a81b700d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-stadium-direct.mjs:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-stadium-direct.mjs:38"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2dbba20276f8e78a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-league.mjs:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-league.mjs:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1e905295bcdc35e7", "name": "Commented-code block (7 lines) in scripts/beta-metrics.mjs:2", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/beta-metrics.mjs: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-37509a1411633082", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-players.mjs:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-players.mjs:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7124bc74190b54a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-all.mjs:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-all.mjs:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d61abdff7d7f5e6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-ban-stats.mjs:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-ban-stats.mjs:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b30b6599f3e9054a", "name": "Commented-code block (6 lines) in scripts/wiring-check.ts:63", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/wiring-check.ts:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f11de50e785745a", "name": "Commented-code block (5 lines) in scripts/cron-health-check.ts:143", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/cron-health-check.ts:143"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49b0b8258072e461", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/compare-ban-squad.mjs:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/compare-ban-squad.mjs:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d80973722a1128e5", "name": "Legacy-named symbol `open_mystery_box_v2` in scripts/pg/extract-rpc.js:40", "shortDescription": {"text": "Legacy-named symbol `open_mystery_box_v2` in scripts/pg/extract-rpc.js:40"}, "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-9609714f0c546a93", "name": "Commented-code block (5 lines) in scripts/archived/2026-04-28-once-off/tm-squad-scrape-local.ts:208", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/archived/2026-04-28-once-off/tm-squad-scrape-local.ts:208"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a98e11ea4968e0d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/transfermarkt-search-batch/route.ts:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/transfermarkt-search-batch/route.ts:94"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb4d24452e5029d8", "name": "Commented-code block (10 lines) in src/app/api/cron/live-score-sync/route.ts:100", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/api/cron/live-score-sync/route.ts:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01d9b5e77e8810dc", "name": "Commented-code block (7 lines) in src/app/api/cron/gameweek-sync/route.ts:725", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/cron/gameweek-sync/route.ts:725"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-337c085cb30d0d50", "name": "Commented-code block (5 lines) in src/app/api/admin/sync-contracts/route.ts:86", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/sync-contracts/route.ts:86"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7a6c61685b82fd4", "name": "Commented-code block (5 lines) in src/app/api/players/route.ts:61", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/players/route.ts:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3de2c7479be6194", "name": "Commented-code block (5 lines) in src/app/(app)/layout.tsx:49", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(app)/layout.tsx:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-381c175a7ea057df", "name": "Commented-code block (5 lines) in src/app/(app)/fantasy/FantasyContent.tsx:103", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(app)/fantasy/FantasyContent.tsx: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-bd27f0b1deb7d12c", "name": "Commented-code block (6 lines) in src/app/(app)/player/[id]/PlayerContent.tsx:76", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/(app)/player/[id]/PlayerContent.tsx:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52e36b430d65aede", "name": "Commented-code block (5 lines) in src/app/(app)/missions/page.tsx:83", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(app)/missions/page.tsx:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2042cca9a123194a", "name": "Legacy-named symbol `get_home_dashboard_v1` in src/app/(app)/hooks/useHomeData.ts:110", "shortDescription": {"text": "Legacy-named symbol `get_home_dashboard_v1` in src/app/(app)/hooks/useHomeData.ts:110"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f8ae549264b9e17a", "name": "Commented-code block (5 lines) in src/app/(app)/hooks/useHomeData.ts:96", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(app)/hooks/useHomeData.ts:96"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fdf50da6491db4e1", "name": "Commented-code block (5 lines) in src/app/(app)/hooks/__tests__/useHomeData.test.ts:481", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(app)/hooks/__tests__/useHomeData.test.ts:481"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d5a2e7f41a62771", "name": "Commented-code block (5 lines) in src/app/(app)/founding/page.tsx:88", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(app)/founding/page.tsx:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4598c431b254e23", "name": "Legacy-named symbol `open_mystery_box_v2` in src/types/index.ts:2150", "shortDescription": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/types/index.ts:2150"}, "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-a798d6255dc576a2", "name": "Commented-code block (6 lines) in src/components/fantasy/SpieltagTab.tsx:53", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/fantasy/SpieltagTab.tsx:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4de30006d76136a", "name": "Commented-code block (6 lines) in src/components/fantasy/spieltag/FixtureDetailModal.tsx:433", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/fantasy/spieltag/FixtureDetailModal.tsx:433"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2408f51f4065d3ac", "name": "Commented-code block (5 lines) in src/components/fantasy/spieltag/__tests__/FixtureCard.test.tsx:166", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/fantasy/spieltag/__tests__/FixtureCard.test.tsx:166"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89ccdc4d5ad341e5", "name": "Commented-code block (6 lines) in src/components/fantasy/event-tabs/LineupPanel.tsx:855", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/fantasy/event-tabs/LineupPanel.tsx:855"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4f1586e242dc4e3", "name": "Commented-code block (5 lines) in src/components/fantasy/events/EventCardView.tsx:27", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/fantasy/events/EventCardView.tsx:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be40f2fe5f0b3220", "name": "Legacy-named symbol `priceAlertDeprecated` in src/components/player/detail/hooks/usePriceAlerts.ts:31", "shortDescription": {"text": "Legacy-named symbol `priceAlertDeprecated` in src/components/player/detail/hooks/usePriceAlerts.ts:31"}, "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-19fe35fb2ed47b22", "name": "Commented-code block (6 lines) in src/components/providers/AuthGuard.tsx:38", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/providers/AuthGuard.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4185192df1c2c38", "name": "Commented-code block (5 lines) in src/components/providers/AuthProvider.tsx:22", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/providers/AuthProvider.tsx:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-781505097031b450", "name": "Commented-code block (6 lines) in src/components/providers/ClubProvider.tsx:125", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/providers/ClubProvider.tsx:125"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0144483737925b22", "name": "Legacy-named symbol `BESCOUT_QUERY_CACHE_v1` in src/components/providers/QueryProvider.tsx:33", "shortDescription": {"text": "Legacy-named symbol `BESCOUT_QUERY_CACHE_v1` in src/components/providers/QueryProvider.tsx:33"}, "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-8fb10566c3178ed9", "name": "Commented-code block (6 lines) in src/components/providers/QueryProvider.tsx:19", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/providers/QueryProvider.tsx:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae8de762e0e77921", "name": "Commented-code block (8 lines) in src/components/providers/__tests__/ClubProvider.test.tsx:8", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/providers/__tests__/ClubProvider.test.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bc16b6e184f55c4", "name": "Commented-code block (5 lines) in src/components/providers/__tests__/AuthGuard.test.tsx:38", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/providers/__tests__/AuthGuard.test.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa73cddebc51997a", "name": "Commented-code block (5 lines) in src/components/admin/AdminSettingsTab.tsx:376", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/admin/AdminSettingsTab.tsx:376"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e84f1197c318eaf4", "name": "Commented-code block (9 lines) in src/components/profile/__tests__/ProfileView.test.tsx:339", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/profile/__tests__/ProfileView.test.tsx:339"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee6051448f180dab", "name": "Commented-code block (7 lines) in src/components/home/HomeSpotlight.tsx:17", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/home/HomeSpotlight.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1d80589d03b5d44", "name": "Commented-code block (7 lines) in src/components/home/MarktPuls.tsx:19", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/home/MarktPuls.tsx:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c310ad8f2c46e702", "name": "Commented-code block (6 lines) in src/components/home/helpers.tsx:207", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/home/helpers.tsx:207"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b4e56b8eb3e20db", "name": "Commented-code block (5 lines) in src/components/transactions/TransactionsPageContent.tsx:109", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/transactions/TransactionsPageContent.tsx:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59f18f8b399db6f1", "name": "Commented-code block (5 lines) in src/components/onboarding/WelcomeBonusModal.tsx:24", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/onboarding/WelcomeBonusModal.tsx:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-398b6bd013e28618", "name": "Legacy-named symbol `open_mystery_box_v2` in src/components/inventory/MysteryBoxHistorySection.tsx:72", "shortDescription": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/components/inventory/MysteryBoxHistorySection.tsx:72"}, "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-e74bdb15c5b3d425", "name": "Commented-code block (5 lines) in src/components/inventory/MysteryBoxHistorySection.tsx:52", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/inventory/MysteryBoxHistorySection.tsx:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0494f539cf44dc2a", "name": "Commented-code block (5 lines) in src/components/gamification/MysteryBoxModal.tsx:102", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/gamification/MysteryBoxModal.tsx:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f484b8dfeaaaedb3", "name": "Commented-code block (6 lines) in src/components/gamification/__tests__/MysteryBoxModal.test.tsx:83", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/gamification/__tests__/MysteryBoxModal.test.tsx:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8400c976d4e9923", "name": "Commented-code block (5 lines) in src/features/fantasy/hooks/useFixtureDeadlines.ts:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/fantasy/hooks/useFixtureDeadlines.ts:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-816773bcc84d6ae2", "name": "Commented-code block (5 lines) in src/features/fantasy/hooks/useGameweek.ts:23", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/fantasy/hooks/useGameweek.ts:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d8c73ce4823d0d2", "name": "Commented-code block (5 lines) in src/features/fantasy/store/lineupStore.ts:90", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/fantasy/store/lineupStore.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-48bcd4485ca6717c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/fantasy/services/events.queries.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/fantasy/services/events.queries.ts:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c4cb9dc780bde748", "name": "Commented-code block (6 lines) in src/features/fantasy/services/__tests__/fixtures.test.ts:674", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/fantasy/services/__tests__/fixtures.test.ts:674"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-022db52236b8d38f", "name": "Commented-code block (6 lines) in src/features/manager/hooks/useManagerData.ts:30", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/manager/hooks/useManagerData.ts:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63ed229d70b8f743", "name": "Commented-code block (5 lines) in src/features/market/mutations/trading.ts:80", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/market/mutations/trading.ts:80"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc70a52731e70c8e", "name": "Commented-code block (5 lines) in src/features/market/hooks/useWatchlistActions.ts:19", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/market/hooks/useWatchlistActions.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f62691ecb85ed619", "name": "Commented-code block (6 lines) in src/features/market/hooks/useMarketData.ts:19", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/market/hooks/useMarketData.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ff035014b2203b6", "name": "Commented-code block (6 lines) in src/features/market/components/shared/__tests__/OrderDepthView.test.tsx:285", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/market/components/shared/__tests__/OrderDepthView.test.tsx:285"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1493c024d42bc059", "name": "Commented-code block (5 lines) in src/features/shared/store/leagueScopeStore.ts:123", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/shared/store/leagueScopeStore.ts:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9fc4e3bdefead7d", "name": "Commented-code block (7 lines) in src/lib/streakBenefits.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/streakBenefits.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edc30a67d9e3dc59", "name": "Legacy-named symbol `open_mystery_box_v2` in src/lib/featureFlags.ts:58", "shortDescription": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/lib/featureFlags.ts:58"}, "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-44f35663ad03ce78", "name": "Commented-code block (5 lines) in src/lib/supabaseMiddleware.ts:40", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/supabaseMiddleware.ts:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47d3c24196a0c291", "name": "Commented-code block (6 lines) in src/lib/footballApi.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/footballApi.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd891f3abf76492a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/footballApi.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/footballApi.ts:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4d524970c3fe096f", "name": "Commented-code block (5 lines) in src/lib/observability/__tests__/logger.test.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/observability/__tests__/logger.test.ts:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec1254dce537cd8e", "name": "Commented-code block (6 lines) in src/lib/hooks/useSafeMutation.ts:142", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/hooks/useSafeMutation.ts:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f85fdb67feca4c9", "name": "Commented-code block (5 lines) in src/lib/hooks/useToggleFollowClub.ts:113", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/hooks/useToggleFollowClub.ts: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-4e4b15df7c43140b", "name": "Commented-code block (7 lines) in src/lib/hooks/useWallet.ts:63", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/hooks/useWallet.ts:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef807773cfac54d8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/__tests__/useWallet.test.ts:228", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/__tests__/useWallet.test.ts:228"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5514502aa8fb5b11", "name": "Legacy-named symbol `get_home_dashboard_v1` in src/lib/queries/homeDashboard.ts:14", "shortDescription": {"text": "Legacy-named symbol `get_home_dashboard_v1` in src/lib/queries/homeDashboard.ts:14"}, "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-154b275d6d7459f2", "name": "Legacy-named symbol `open_mystery_box_v2` in src/lib/services/mysteryBox.ts:43", "shortDescription": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/lib/services/mysteryBox.ts:43"}, "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-9a0e95656e900667", "name": "Legacy-named symbol `get_home_dashboard_v1` in src/lib/services/homeDashboard.ts:10", "shortDescription": {"text": "Legacy-named symbol `get_home_dashboard_v1` in src/lib/services/homeDashboard.ts:10"}, "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-d3105b64b84f2e2c", "name": "Commented-code block (7 lines) in src/lib/services/posts.ts:326", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/services/posts.ts:326"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a9b1ae03b6f71f8", "name": "Legacy-named symbol `get_club_dashboard_stats_v2` in src/lib/services/club.ts:500", "shortDescription": {"text": "Legacy-named symbol `get_club_dashboard_stats_v2` in src/lib/services/club.ts:500"}, "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-8b7fcd6a800171f5", "name": "Commented-code block (5 lines) in src/lib/services/footballData.ts:350", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/services/footballData.ts:350"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-adce1f15ff617288", "name": "Commented-code block (7 lines) in src/lib/services/equipment.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/services/equipment.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3028a3e8758a95e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/players.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/players.ts:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-397d4f20b092d8a0", "name": "Commented-code block (6 lines) in src/lib/services/wallet.ts:72", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/services/wallet.ts:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f5fe40cb49d3c54", "name": "Commented-code block (5 lines) in src/lib/services/__tests__/differentials.test.ts:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/services/__tests__/differentials.test.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f5b55071dacf3af", "name": "Legacy-named symbol `open_mystery_box_v2` in src/lib/services/__tests__/smallServices.test.ts:153", "shortDescription": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/lib/services/__tests__/smallServices.test.ts:153"}, "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-db49aec7928f221b", "name": "Commented-code block (5 lines) in src/lib/services/__tests__/lineup-auto-sub.test.ts:112", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/services/__tests__/lineup-auto-sub.test.ts:112"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bfd7e9e904267d0c", "name": "Commented-code block (5 lines) in src/lib/services/__tests__/bounties.test.ts:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/services/__tests__/bounties.test.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6be567e24bbc93e", "name": "Legacy-named symbol `get_club_dashboard_stats_v2` in src/lib/services/__tests__/club.test.ts:300", "shortDescription": {"text": "Legacy-named symbol `get_club_dashboard_stats_v2` in src/lib/services/__tests__/club.test.ts:300"}, "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-79df9269c2226fa2", "name": "Legacy-named symbol `get_home_dashboard_v1` in src/lib/services/__tests__/homeDashboard.test.ts:44", "shortDescription": {"text": "Legacy-named symbol `get_home_dashboard_v1` in src/lib/services/__tests__/homeDashboard.test.ts:44"}, "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-e09f22e4c4d89211", "name": "Legacy-named symbol `open_mystery_box_v2` in src/lib/__tests__/db-invariants.test.ts:1001", "shortDescription": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/lib/__tests__/db-invariants.test.ts:1001"}, "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-4fb1b348e70a79eb", "name": "Commented-code block (8 lines) in src/lib/__tests__/db-invariants.test.ts:492", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/__tests__/db-invariants.test.ts:492"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9c7a5bad330a427", "name": "Commented-code block (9 lines) in src/lib/__tests__/error-keys-coverage.test.ts:77", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/__tests__/error-keys-coverage.test.ts:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49773f2b4c398f48", "name": "Commented-code block (5 lines) in src/lib/__tests__/compliance/wording-compliance.test.ts:370", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/compliance/wording-compliance.test.ts:370"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98c560780b622ae5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/take-screenshots.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/take-screenshots.ts:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2319306b2a57dd29", "name": "Commented-code block (6 lines) in e2e/qa-151b-RESET-follow-sync.ts:61", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/qa-151b-RESET-follow-sync.ts:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8ca76d468d35b36", "name": "Commented-code block (5 lines) in e2e/lhci-login.cjs:31", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/lhci-login.cjs: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-d36f0a36a21ebb88", "name": "Commented-code block (5 lines) in e2e/bots/ai/agent.ts:151", "shortDescription": {"text": "Commented-code block (5 lines) in e2e/bots/ai/agent.ts:151"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c82a5bda2301432a", "name": "Legacy-named symbol `open_mystery_box_v2` in e2e/bots/ai/actions.ts:323", "shortDescription": {"text": "Legacy-named symbol `open_mystery_box_v2` in e2e/bots/ai/actions.ts:323"}, "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-efb03992023aadf0", "name": "Commented-code block (10 lines) in public/sw.js:3", "shortDescription": {"text": "Commented-code block (10 lines) in public/sw.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-873e1458e750b8b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/25435"}, "properties": {"repository": "Djembo31/beScout-App", "repoUrl": "https://github.com/Djembo31/beScout-App", "branch": "main"}, "results": [{"ruleId": "scanner-747e45eee71403e9", "level": "note", "message": {"text": "Possibly dead Python function: block_dangerous_bash"}, "properties": {"repobilityId": "ecc481dad66c128b", "scanner": "scanner-primary", "fingerprint": "747e45eee71403e9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/agent-sdk/hooks.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4e2d39fd46a404f3", "level": "note", "message": {"text": "Possibly dead Python function: block_protected_files"}, "properties": {"repobilityId": "c3cf2972115993bc", "scanner": "scanner-primary", "fingerprint": "4e2d39fd46a404f3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/agent-sdk/hooks.py:46"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6e548af71c507d6a", "level": "note", "message": {"text": "File has no detected symbols: clean_orphan.py"}, "properties": {"repobilityId": "32230bea48cebf6d", "scanner": "scanner-primary", "fingerprint": "6e548af71c507d6a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code-candidate"]}}, {"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-ec9cc4ed73ecf90b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-profile-local.ts:186"}, "properties": {"repobilityId": "361d491450ec5a48", "scanner": "scanner-primary", "fingerprint": "ec9cc4ed73ecf90b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1cbbb601f69336d2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enrich-nationality-tm.ts:126"}, "properties": {"repobilityId": "4c5a6739ad032a50", "scanner": "scanner-primary", "fingerprint": "1cbbb601f69336d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89941c4402b7a390", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch11.js:110"}, "properties": {"repobilityId": "2bc54d44d7d64483", "scanner": "scanner-primary", "fingerprint": "89941c4402b7a390", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a0b738d1545f785", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch15.js:120"}, "properties": {"repobilityId": "c96416ddf3c3f5d4", "scanner": "scanner-primary", "fingerprint": "2a0b738d1545f785", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25b7f563278c0593", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch2.js:186"}, "properties": {"repobilityId": "8e348d5a73915c0c", "scanner": "scanner-primary", "fingerprint": "25b7f563278c0593", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b80f126f7f8451bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch8.js:105"}, "properties": {"repobilityId": "2f4a4d7490b3bb12", "scanner": "scanner-primary", "fingerprint": "b80f126f7f8451bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07fc33a5eca14b61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-bundle.js:24"}, "properties": {"repobilityId": "98234afd9289c162", "scanner": "scanner-primary", "fingerprint": "07fc33a5eca14b61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4fefe86f38143fe4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch16.js:196"}, "properties": {"repobilityId": "fb54e21813f52f9b", "scanner": "scanner-primary", "fingerprint": "4fefe86f38143fe4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7e4e1b7aacc0d22f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-stale-check.ts:360"}, "properties": {"repobilityId": "2608d2238506236d", "scanner": "scanner-primary", "fingerprint": "7e4e1b7aacc0d22f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c10585bd9f33522f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch20.js:159"}, "properties": {"repobilityId": "b3ae54aa9eba3531", "scanner": "scanner-primary", "fingerprint": "c10585bd9f33522f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6989c5e17133efe3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-parser-sanity.ts:45"}, "properties": {"repobilityId": "867e4bd6f3a49716", "scanner": "scanner-primary", "fingerprint": "6989c5e17133efe3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c3dc627bf148880", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-search-local.ts:163"}, "properties": {"repobilityId": "4bd0738b80398ebe", "scanner": "scanner-primary", "fingerprint": "6c3dc627bf148880", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-64032c0d26bc9a22", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-search-scrape-unknown.ts:184"}, "properties": {"repobilityId": "b51955ec726550dd", "scanner": "scanner-primary", "fingerprint": "64032c0d26bc9a22", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fadb90a54e05358f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch10.js:115"}, "properties": {"repobilityId": "7d7b1f127593ee6c", "scanner": "scanner-primary", "fingerprint": "fadb90a54e05358f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c02b7aa479dd751a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch3.js:323"}, "properties": {"repobilityId": "ae8614fa862ea47d", "scanner": "scanner-primary", "fingerprint": "c02b7aa479dd751a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fa07dc30b67e1f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch12.js:81"}, "properties": {"repobilityId": "4cc76bb97ab41cf8", "scanner": "scanner-primary", "fingerprint": "1fa07dc30b67e1f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49c037fd4aa1996b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch14.js:75"}, "properties": {"repobilityId": "d586768206ee6867", "scanner": "scanner-primary", "fingerprint": "49c037fd4aa1996b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-696cb3cfa61059ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/type-truth-audit.ts:315"}, "properties": {"repobilityId": "dd058742a09f1b59", "scanner": "scanner-primary", "fingerprint": "696cb3cfa61059ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1dda25063fbe03ad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch17.js:160"}, "properties": {"repobilityId": "542a26f95dc1b40a", "scanner": "scanner-primary", "fingerprint": "1dda25063fbe03ad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8bc4c0383ad08267", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys.js:293"}, "properties": {"repobilityId": "badcf54d87aa7ebf", "scanner": "scanner-primary", "fingerprint": "8bc4c0383ad08267", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6c2bcb0cdc44269", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch13.js:163"}, "properties": {"repobilityId": "3006d0ed34177971", "scanner": "scanner-primary", "fingerprint": "b6c2bcb0cdc44269", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5de65204d823f670", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-bundle-size.ts:114"}, "properties": {"repobilityId": "18ee95b8398e57a2", "scanner": "scanner-primary", "fingerprint": "5de65204d823f670", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4aff494f737ea4bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/orphan-component-detector.ts:348"}, "properties": {"repobilityId": "cce15f464af9acb9", "scanner": "scanner-primary", "fingerprint": "4aff494f737ea4bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be839d19e0e8c0b3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch7.js:128"}, "properties": {"repobilityId": "7e9b34b2899408f8", "scanner": "scanner-primary", "fingerprint": "be839d19e0e8c0b3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12df3e8ccf9144dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch21.js:78"}, "properties": {"repobilityId": "bffb913f5712f2c1", "scanner": "scanner-primary", "fingerprint": "12df3e8ccf9144dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eeee1ec0c08b7e3c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-nationality-coverage.ts:61"}, "properties": {"repobilityId": "5449da6b3bec415c", "scanner": "scanner-primary", "fingerprint": "eeee1ec0c08b7e3c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aaa6d558d47d4aa2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch6.js:528"}, "properties": {"repobilityId": "bf846bd0c21bf636", "scanner": "scanner-primary", "fingerprint": "aaa6d558d47d4aa2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-823e80f43fcec926", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch5.js:403"}, "properties": {"repobilityId": "52f592611a1d1318", "scanner": "scanner-primary", "fingerprint": "823e80f43fcec926", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-000956d20797ec78", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/silent-fail-audit.ts:185"}, "properties": {"repobilityId": "f187ab5efa52ed1d", "scanner": "scanner-primary", "fingerprint": "000956d20797ec78", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6880500e5caf7f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-cron-registry.ts:69"}, "properties": {"repobilityId": "5cd0203a71d7831c", "scanner": "scanner-primary", "fingerprint": "e6880500e5caf7f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c8f940df5bbe378", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-rescrape-stale.ts:54"}, "properties": {"repobilityId": "208145f745d2a42f", "scanner": "scanner-primary", "fingerprint": "9c8f940df5bbe378", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3ecd0ee541031df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch9.js:141"}, "properties": {"repobilityId": "41a0fe7390899cfc", "scanner": "scanner-primary", "fingerprint": "d3ecd0ee541031df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2be98b0d445d7f2b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch19.js:97"}, "properties": {"repobilityId": "c4bb882040317000", "scanner": "scanner-primary", "fingerprint": "2be98b0d445d7f2b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19774404eab14516", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch4.js:269"}, "properties": {"repobilityId": "e5341c71bc45f30d", "scanner": "scanner-primary", "fingerprint": "19774404eab14516", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a9a2bef850b5034", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tm-parser-verify.ts:24"}, "properties": {"repobilityId": "1776ab165dc81bb8", "scanner": "scanner-primary", "fingerprint": "2a9a2bef850b5034", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5297540e90c6b6b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wiring-check.ts:265"}, "properties": {"repobilityId": "f459bcbd1fb3f108", "scanner": "scanner-primary", "fingerprint": "5297540e90c6b6b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a67f60bf95e01d14", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cron-health-check.ts:223"}, "properties": {"repobilityId": "e285fdd17ebeaff8", "scanner": "scanner-primary", "fingerprint": "a67f60bf95e01d14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44f61f1fb7e1d791", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rotate-secret.ts:161"}, "properties": {"repobilityId": "3a9df09eb0f3b20a", "scanner": "scanner-primary", "fingerprint": "44f61f1fb7e1d791", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01cd8458efd3ccbb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-i18n-keys-batch18.js:281"}, "properties": {"repobilityId": "765b6507f71c60be", "scanner": "scanner-primary", "fingerprint": "01cd8458efd3ccbb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4fb4fae6fcfc4b52", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/findings-to-slices.ts:312"}, "properties": {"repobilityId": "e97df3812babb27f", "scanner": "scanner-primary", "fingerprint": "4fb4fae6fcfc4b52", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12a0b02e9a2a1b9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pg/extract-rpc.js:50"}, "properties": {"repobilityId": "b78d27f6740f326f", "scanner": "scanner-primary", "fingerprint": "12a0b02e9a2a1b9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-059727b587eb9527", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit/rpc-security.js:81"}, "properties": {"repobilityId": "23cc35db6a4a21b8", "scanner": "scanner-primary", "fingerprint": "059727b587eb9527", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fdc2f2ce05195058", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit/i18n-coverage.js:98"}, "properties": {"repobilityId": "04ce45e66bfe77c3", "scanner": "scanner-primary", "fingerprint": "fdc2f2ce05195058", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-918fb6981dc24d03", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/archived/2026-04-28-once-off/tm-club-id-discovery.ts:210"}, "properties": {"repobilityId": "db66465929ce1248", "scanner": "scanner-primary", "fingerprint": "918fb6981dc24d03", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49fe2241661f3a42", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/archived/2026-04-28-once-off/fix-bug-004.ts:50"}, "properties": {"repobilityId": "0922eb592dcc484f", "scanner": "scanner-primary", "fingerprint": "49fe2241661f3a42", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e72a7b785063224", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/archived/2026-04-28-once-off/tm-squad-scrape-local.ts:180"}, "properties": {"repobilityId": "9b7e6ba8e084af95", "scanner": "scanner-primary", "fingerprint": "4e72a7b785063224", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c6ac6d6f2a17301", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/page.tsx:195"}, "properties": {"repobilityId": "31115dcb39ef129d", "scanner": "scanner-primary", "fingerprint": "1c6ac6d6f2a17301", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-26ca8d5fe78db1a0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/clubs/page.tsx:219"}, "properties": {"repobilityId": "1a76b46fed49895e", "scanner": "scanner-primary", "fingerprint": "26ca8d5fe78db1a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f0e0ff509e44122", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminFanWishesTab.tsx:103"}, "properties": {"repobilityId": "19d6e9e0574bbace", "scanner": "scanner-primary", "fingerprint": "0f0e0ff509e44122", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a717759f65dc97c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminClubsTab.tsx:101"}, "properties": {"repobilityId": "ca483ee3fa2144e1", "scanner": "scanner-primary", "fingerprint": "6a717759f65dc97c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed9cc2f5cd451b0e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminCSVImportTab.tsx:287"}, "properties": {"repobilityId": "5e066e9c37b998ca", "scanner": "scanner-primary", "fingerprint": "ed9cc2f5cd451b0e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-77e11c10cd0baedc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminLigaTab.tsx:212"}, "properties": {"repobilityId": "17d169e5d2f524a9", "scanner": "scanner-primary", "fingerprint": "77e11c10cd0baedc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d21155f577faf9f5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/BescoutAdminContent.tsx:239"}, "properties": {"repobilityId": "0d00b68f50f48136", "scanner": "scanner-primary", "fingerprint": "d21155f577faf9f5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-81804f2a35ab7fa4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminFoundingPassesTab.tsx:301"}, "properties": {"repobilityId": "71e6291175efa78e", "scanner": "scanner-primary", "fingerprint": "81804f2a35ab7fa4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-81ffc6d812353417", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminSponsorsTab.tsx:226"}, "properties": {"repobilityId": "3f83734b4af91882", "scanner": "scanner-primary", "fingerprint": "81ffc6d812353417", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1fca0895c15cffd1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/bescout-admin/AdminEconomyTab.tsx:212"}, "properties": {"repobilityId": "9328e88dcf717a21", "scanner": "scanner-primary", "fingerprint": "1fca0895c15cffd1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-33d727c76301b7c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/club/[slug]/ClubContent.tsx:488"}, "properties": {"repobilityId": "826784cc5e2a1268", "scanner": "scanner-primary", "fingerprint": "33d727c76301b7c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-87ccf3f9f8f3ef08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/PredictionsTab.tsx:206"}, "properties": {"repobilityId": "670f04bceeb9e3fb", "scanner": "scanner-primary", "fingerprint": "87ccf3f9f8f3ef08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-572e3bfe4075180c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/LeaguesSection.tsx:198"}, "properties": {"repobilityId": "76eb798ac7034053", "scanner": "scanner-primary", "fingerprint": "572e3bfe4075180c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac86b32020ccae32", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/MitmachenTab.tsx:119"}, "properties": {"repobilityId": "eea0615e015ab668", "scanner": "scanner-primary", "fingerprint": "ac86b32020ccae32", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-698026625a6a3e39", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/PredictionCard.tsx:40"}, "properties": {"repobilityId": "bcae987f007c4eef", "scanner": "scanner-primary", "fingerprint": "698026625a6a3e39", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c001a49227e87db7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/EventSummaryModal.tsx:84"}, "properties": {"repobilityId": "c383bbe3b10f2677", "scanner": "scanner-primary", "fingerprint": "c001a49227e87db7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7ce76fb0b727903d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/FantasyPlayerRow.tsx:104"}, "properties": {"repobilityId": "8d6ab48d0b470c76", "scanner": "scanner-primary", "fingerprint": "7ce76fb0b727903d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b6d666e9880b1fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/HistoryTab.tsx:342"}, "properties": {"repobilityId": "c0297f9b6482b41d", "scanner": "scanner-primary", "fingerprint": "9b6d666e9880b1fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee41b6d5a4df96a6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/EventCommunityTab.tsx:291"}, "properties": {"repobilityId": "eaf3848f023c19da", "scanner": "scanner-primary", "fingerprint": "ee41b6d5a4df96a6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4df35424c6cf75b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/GwHeroSummary.tsx:66"}, "properties": {"repobilityId": "646c5fa580704c82", "scanner": "scanner-primary", "fingerprint": "4df35424c6cf75b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f66a2c9dc57ace66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/PredictionResults.tsx:94"}, "properties": {"repobilityId": "e73be1aa9fca39e1", "scanner": "scanner-primary", "fingerprint": "f66a2c9dc57ace66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ad9b58191e7b299f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/Top3Cards.tsx:62"}, "properties": {"repobilityId": "c35c51243b8a8fff", "scanner": "scanner-primary", "fingerprint": "ad9b58191e7b299f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e83c1b06b8747c6c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/ergebnisse/PersonalResults.tsx:95"}, "properties": {"repobilityId": "912e0aa1ae5521c4", "scanner": "scanner-primary", "fingerprint": "e83c1b06b8747c6c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e6d62a0349770c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/BestElevenShowcase.tsx:191"}, "properties": {"repobilityId": "f0a5ee527d54bb97", "scanner": "scanner-primary", "fingerprint": "4e6d62a0349770c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a75624813a6f4cd8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/FixtureCard.tsx:89"}, "properties": {"repobilityId": "6412b930cceb5626", "scanner": "scanner-primary", "fingerprint": "a75624813a6f4cd8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e8e5c816a3b269b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/TopspielCard.tsx:58"}, "properties": {"repobilityId": "140595f27149a94c", "scanner": "scanner-primary", "fingerprint": "e8e5c816a3b269b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-483e2983454276ae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/TopScorerShowcase.tsx:57"}, "properties": {"repobilityId": "ce34e1eb6fbe5c6b", "scanner": "scanner-primary", "fingerprint": "483e2983454276ae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a3e6a97f5d0c006", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/FixtureDetailModal.tsx:147"}, "properties": {"repobilityId": "960841005a63b4f2", "scanner": "scanner-primary", "fingerprint": "1a3e6a97f5d0c006", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6c5738fe3c7408ef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/fixture-tabs/RankingTab.tsx:62"}, "properties": {"repobilityId": "4c3747876e553fd0", "scanner": "scanner-primary", "fingerprint": "6c5738fe3c7408ef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-35cf00e34e6eddbf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/spieltag/fixture-tabs/FormationTab.tsx:289"}, "properties": {"repobilityId": "7236ad007043ac68", "scanner": "scanner-primary", "fingerprint": "35cf00e34e6eddbf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4ced73567955403", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/event-tabs/LineupPanel.tsx:267"}, "properties": {"repobilityId": "00333afcbfea9d9e", "scanner": "scanner-primary", "fingerprint": "c4ced73567955403", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-245b36e1b56cd1c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/events/EventSpotlight.tsx:62"}, "properties": {"repobilityId": "834bed46212b2ecc", "scanner": "scanner-primary", "fingerprint": "245b36e1b56cd1c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c32b9fca719188cb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/fantasy/events/EventCompactRow.tsx:39"}, "properties": {"repobilityId": "5b54fc76339d6361", "scanner": "scanner-primary", "fingerprint": "c32b9fca719188cb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd3879a74e467efc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/social/FollowingFeedRail.tsx:179"}, "properties": {"repobilityId": "6f83867972c322ae", "scanner": "scanner-primary", "fingerprint": "fd3879a74e467efc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec27fddd0f1cd842", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/index.tsx:388"}, "properties": {"repobilityId": "623f14fb847fab28", "scanner": "scanner-primary", "fingerprint": "ec27fddd0f1cd842", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7fad80100ec21e71", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/MatchTimeline.tsx:222"}, "properties": {"repobilityId": "fc24ee2ed24a14d4", "scanner": "scanner-primary", "fingerprint": "7fad80100ec21e71", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-773d04ed28821491", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/UpcomingFixtures.tsx:58"}, "properties": {"repobilityId": "754d552d75165a18", "scanner": "scanner-primary", "fingerprint": "773d04ed28821491", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df11e33cab46e821", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/TradingCardFrame.tsx:114"}, "properties": {"repobilityId": "9eb4981fd1abdc1f", "scanner": "scanner-primary", "fingerprint": "df11e33cab46e821", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f2a549be434f7c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/PlayerHero.tsx:200"}, "properties": {"repobilityId": "c5c0696fb459c818", "scanner": "scanner-primary", "fingerprint": "2f2a549be434f7c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7205bd371a79b8f2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/TradingTab.tsx:304"}, "properties": {"repobilityId": "4558e78dd3a114ce", "scanner": "scanner-primary", "fingerprint": "7205bd371a79b8f2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa78a4df98076691", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/FantasyCTA.tsx:35"}, "properties": {"repobilityId": "99dc1f03a5ea5e9c", "scanner": "scanner-primary", "fingerprint": "fa78a4df98076691", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d645f45e6789beee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/player/detail/StickyDashboardStrip.tsx:51"}, "properties": {"repobilityId": "64ee1eb0e9f715f3", "scanner": "scanner-primary", "fingerprint": "d645f45e6789beee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8c2ca4731de55156", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/missions/MissionHint.tsx:27"}, "properties": {"repobilityId": "f1518904fb3837ef", "scanner": "scanner-primary", "fingerprint": "8c2ca4731de55156", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b4f9aac01a141f46", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/missions/FantasyContextHint.tsx:40"}, "properties": {"repobilityId": "3cb8a0ee8382c7a3", "scanner": "scanner-primary", "fingerprint": "b4f9aac01a141f46", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3bc881b0d77cbe7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminFansTab.tsx:203"}, "properties": {"repobilityId": "a528313c2ff65610", "scanner": "scanner-primary", "fingerprint": "3bc881b0d77cbe7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e0cda35aaf2b848", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminScoutingTab.tsx:156"}, "properties": {"repobilityId": "28a708f94b7c62cc", "scanner": "scanner-primary", "fingerprint": "5e0cda35aaf2b848", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bdf226c138bdf760", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminOverviewTab.tsx:258"}, "properties": {"repobilityId": "b09ce3a0e30d1c1b", "scanner": "scanner-primary", "fingerprint": "bdf226c138bdf760", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e6d1dc5c35c4c72b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/FanChallengesTab.tsx:262"}, "properties": {"repobilityId": "8caee76595e410ea", "scanner": "scanner-primary", "fingerprint": "e6d1dc5c35c4c72b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8a45cffa04c1619", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/EventRow.tsx:51"}, "properties": {"repobilityId": "7fd594cfdfd934ef", "scanner": "scanner-primary", "fingerprint": "b8a45cffa04c1619", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ced5eae2f9ce31f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminAnalyticsTab.tsx:127"}, "properties": {"repobilityId": "0118e76ec73b0026", "scanner": "scanner-primary", "fingerprint": "ced5eae2f9ce31f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5fa8fca3900669ce", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminModerationTab.tsx:277"}, "properties": {"repobilityId": "c356d2ba95654b5a", "scanner": "scanner-primary", "fingerprint": "5fa8fca3900669ce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-04df169957776cfb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminSponsorTab.tsx:131"}, "properties": {"repobilityId": "c3a98eb06dd291f0", "scanner": "scanner-primary", "fingerprint": "04df169957776cfb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5779ce563f0a7781", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminSettingsTab.tsx:828"}, "properties": {"repobilityId": "7ece7b757a1bcae1", "scanner": "scanner-primary", "fingerprint": "5779ce563f0a7781", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ff3a61df9de9688", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminEventsTab.tsx:194"}, "properties": {"repobilityId": "3986ea5975e6d00e", "scanner": "scanner-primary", "fingerprint": "1ff3a61df9de9688", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68b54f1ff600c09f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/FollowListModal.tsx:119"}, "properties": {"repobilityId": "2992c924851611f3", "scanner": "scanner-primary", "fingerprint": "68b54f1ff600c09f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-998861a94e01a1b5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/AnalystTab.tsx:283"}, "properties": {"repobilityId": "0c5d7f4cb0818331", "scanner": "scanner-primary", "fingerprint": "998861a94e01a1b5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c25bf67bac7a5f56", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/TimelineTab.tsx:354"}, "properties": {"repobilityId": "ae30e6647ecb58e2", "scanner": "scanner-primary", "fingerprint": "c25bf67bac7a5f56", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-adac5da5011490e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/ScoutCard.tsx:123"}, "properties": {"repobilityId": "6d3314cacbf2560a", "scanner": "scanner-primary", "fingerprint": "adac5da5011490e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d09643aa29c3b978", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/profile/TraderTab.tsx:305"}, "properties": {"repobilityId": "645f070ce508ae71", "scanner": "scanner-primary", "fingerprint": "d09643aa29c3b978", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5defc5912dde545c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/profile/__tests__/ProfileView.test.tsx:543"}, "properties": {"repobilityId": "e100fec967aaa0e2", "scanner": "scanner-primary", "fingerprint": "5defc5912dde545c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-be4ec14351e5d4a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/ClubSwitcher.tsx:69"}, "properties": {"repobilityId": "b9bf8f2a2a7626fc", "scanner": "scanner-primary", "fingerprint": "be4ec14351e5d4a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de85c44de2a643d5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/FeedbackModal.tsx:108"}, "properties": {"repobilityId": "082e81d7f40b7af3", "scanner": "scanner-primary", "fingerprint": "de85c44de2a643d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea3eb95b4f206d1d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/TopBar.tsx:146"}, "properties": {"repobilityId": "79fccb9b9fb1717f", "scanner": "scanner-primary", "fingerprint": "ea3eb95b4f206d1d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0feff1df7973f701", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/SearchOverlay.tsx:378"}, "properties": {"repobilityId": "997710fd937d59ec", "scanner": "scanner-primary", "fingerprint": "0feff1df7973f701", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9e779cad0be792fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/HomeSpotlight.tsx:173"}, "properties": {"repobilityId": "e0c34ebf16184fce", "scanner": "scanner-primary", "fingerprint": "9e779cad0be792fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dcf5f29e22ed67c5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/TopMoversStrip.tsx:42"}, "properties": {"repobilityId": "8b7e3041231b3caa", "scanner": "scanner-primary", "fingerprint": "dcf5f29e22ed67c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea3e38cade5feeb3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/LastGameweekWidget.tsx:233"}, "properties": {"repobilityId": "35e6cc5ccf8ebdcc", "scanner": "scanner-primary", "fingerprint": "ea3e38cade5feeb3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-30a72d99d8f690fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/OwnTopMoversStrip.tsx:62"}, "properties": {"repobilityId": "7d741e8d25b73d0c", "scanner": "scanner-primary", "fingerprint": "30a72d99d8f690fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7bd020405901e0b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/TrendingPlayersStrip.tsx:63"}, "properties": {"repobilityId": "b470be5994a0dfb2", "scanner": "scanner-primary", "fingerprint": "7bd020405901e0b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e79e710fca1d40fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/GameweekStatusBar.tsx:96"}, "properties": {"repobilityId": "50dde278f50b6ee5", "scanner": "scanner-primary", "fingerprint": "e79e710fca1d40fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a5a4045abf1c90d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/MostWatchedStrip.tsx:58"}, "properties": {"repobilityId": "549f54523f9ac617", "scanner": "scanner-primary", "fingerprint": "7a5a4045abf1c90d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-12375dc058a71fa8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/community/CommunitySidebar.tsx:62"}, "properties": {"repobilityId": "ece78a8a1ea8257a", "scanner": "scanner-primary", "fingerprint": "12375dc058a71fa8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2cacd724ef732695", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/transactions/TransactionsPageContent.tsx:580"}, "properties": {"repobilityId": "5ca892c2c76af772", "scanner": "scanner-primary", "fingerprint": "2cacd724ef732695", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fdf79ac976af583e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/LastEventResults.tsx:67"}, "properties": {"repobilityId": "d0b39f136bb7dd66", "scanner": "scanner-primary", "fingerprint": "fdf79ac976af583e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-78cd6d2adb02bf11", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/GlobalLeaderboard.tsx:96"}, "properties": {"repobilityId": "05301f8a7b999cdd", "scanner": "scanner-primary", "fingerprint": "78cd6d2adb02bf11", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a27912898c346b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/PlayerRankings.tsx:137"}, "properties": {"repobilityId": "f94fcc7d777ed0ec", "scanner": "scanner-primary", "fingerprint": "6a27912898c346b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37ac4747f2a1ded3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rankings/MonthlyWinners.tsx:97"}, "properties": {"repobilityId": "202a426b1b2bdd08", "scanner": "scanner-primary", "fingerprint": "37ac4747f2a1ded3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b931579358752678", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/inventory/MysteryBoxHistorySection.tsx:225"}, "properties": {"repobilityId": "26fee63585eb01dd", "scanner": "scanner-primary", "fingerprint": "b931579358752678", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3c00621e990f5e88", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/inventory/CosmeticsSection.tsx:145"}, "properties": {"repobilityId": "d44c010c2e649711", "scanner": "scanner-primary", "fingerprint": "3c00621e990f5e88", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-73470cddce06a430", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/inventory/EquipmentSection.tsx:546"}, "properties": {"repobilityId": "fa8e880689a6e0dc", "scanner": "scanner-primary", "fingerprint": "73470cddce06a430", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-602d22086d01bb4d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/FixtureCards.tsx:65"}, "properties": {"repobilityId": "13307a08bdda9226", "scanner": "scanner-primary", "fingerprint": "602d22086d01bb4d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d11152c484331dc3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/ClubStatsBar.tsx:89"}, "properties": {"repobilityId": "1a2bf6bbe6fa8aae", "scanner": "scanner-primary", "fingerprint": "d11152c484331dc3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f23769844c7be04d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/MitmachenSection.tsx:111"}, "properties": {"repobilityId": "098ea4ac86696796", "scanner": "scanner-primary", "fingerprint": "f23769844c7be04d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bfc2b03bf045129e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/MostOwnedSection.tsx:79"}, "properties": {"repobilityId": "769d6306bcb468e8", "scanner": "scanner-primary", "fingerprint": "bfc2b03bf045129e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37957e07425cbbfe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/ActiveOffersSection.tsx:58"}, "properties": {"repobilityId": "dc939a5f49c27f9f", "scanner": "scanner-primary", "fingerprint": "37957e07425cbbfe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8bedd673d4d74f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/RecentActivitySection.tsx:43"}, "properties": {"repobilityId": "94ae245151685107", "scanner": "scanner-primary", "fingerprint": "b8bedd673d4d74f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c6e62bc4753bd57d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/SquadPreviewSection.tsx:69"}, "properties": {"repobilityId": "724a3db91cf99739", "scanner": "scanner-primary", "fingerprint": "c6e62bc4753bd57d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e457cea3ac12e70a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/club/sections/ClubFixturesStrip.tsx:99"}, "properties": {"repobilityId": "c3f210859646a3c9", "scanner": "scanner-primary", "fingerprint": "e457cea3ac12e70a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2c88ff087e8a89f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/AlertDialog.tsx:92"}, "properties": {"repobilityId": "73c8f9e4b2219feb", "scanner": "scanner-primary", "fingerprint": "b2c88ff087e8a89f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-88d70e0c8b085548", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/MobileTableCard.tsx:71"}, "properties": {"repobilityId": "e84f357f5e5ede62", "scanner": "scanner-primary", "fingerprint": "88d70e0c8b085548", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ab77687c45d8687e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/Dialog.tsx:142"}, "properties": {"repobilityId": "cf8804d139ed747d", "scanner": "scanner-primary", "fingerprint": "ab77687c45d8687e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa958e4c5747ca8e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/CountryBar.tsx:53"}, "properties": {"repobilityId": "e5946fa347ba86b1", "scanner": "scanner-primary", "fingerprint": "fa958e4c5747ca8e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2c886e5407391842", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/LeagueBarShared.tsx:92"}, "properties": {"repobilityId": "ae0466b44f4c7a87", "scanner": "scanner-primary", "fingerprint": "2c886e5407391842", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a65b0c186597d90d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/index.tsx:155"}, "properties": {"repobilityId": "3960d7126e6c6df6", "scanner": "scanner-primary", "fingerprint": "a65b0c186597d90d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7ecc23f3478d7dc3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/MarkdownRenderer.tsx:19"}, "properties": {"repobilityId": "7405f2c91470e077", "scanner": "scanner-primary", "fingerprint": "7ecc23f3478d7dc3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-bcd84dd4b97090fe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/gamification/EquipmentPicker.tsx:138"}, "properties": {"repobilityId": "74ebd5991ca77133", "scanner": "scanner-primary", "fingerprint": "bcd84dd4b97090fe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e903b8c957ae27f6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/gamification/DailyChallengeCard.tsx:219"}, "properties": {"repobilityId": "b013df97146f1715", "scanner": "scanner-primary", "fingerprint": "e903b8c957ae27f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3911e2c6d1d3d7f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/fantasy/components/lineup/BenchRow.tsx:211"}, "properties": {"repobilityId": "d5ce04bab9d24c71", "scanner": "scanner-primary", "fingerprint": "3911e2c6d1d3d7f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8c8480844b5967f8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/EquipmentShortcut.tsx:60"}, "properties": {"repobilityId": "30f157cd2f65b514", "scanner": "scanner-primary", "fingerprint": "8c8480844b5967f8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-232784ac3576d066", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/PageHeader.tsx:84"}, "properties": {"repobilityId": "0aebb22f6d2d8d46", "scanner": "scanner-primary", "fingerprint": "232784ac3576d066", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f3bc05f26fe28e0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/historie/HistoryEventCard.tsx:175"}, "properties": {"repobilityId": "b1780607227ddc25", "scanner": "scanner-primary", "fingerprint": "1f3bc05f26fe28e0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b2de7440b10faea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/aufstellen/EventSelector.tsx:105"}, "properties": {"repobilityId": "094fa4482024effe", "scanner": "scanner-primary", "fingerprint": "5b2de7440b10faea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bdc3e1f809b8ec03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/manager/components/kader/KaderPlayerRow.tsx:264"}, "properties": {"repobilityId": "4c4c4cdd9e856708", "scanner": "scanner-primary", "fingerprint": "bdc3e1f809b8ec03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c67703b63aa6c149", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/shared/TradeSuccessCard.tsx:153"}, "properties": {"repobilityId": "8a8a1e4b20739fd2", "scanner": "scanner-primary", "fingerprint": "c67703b63aa6c149", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-90c9b0f7f572c69f", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/features/market/components/shared/MarketFilters.tsx:300"}, "properties": {"repobilityId": "aeecb137ad048df7", "scanner": "scanner-primary", "fingerprint": "90c9b0f7f572c69f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-aefb457431fe8269", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/portfolio/BestandPlayerRow.tsx:73"}, "properties": {"repobilityId": "ba8ef73a54a98c9b", "scanner": "scanner-primary", "fingerprint": "aefb457431fe8269", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-00d7d439a0bb2dae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/LeagueBar.tsx:73"}, "properties": {"repobilityId": "301c57a37057f20d", "scanner": "scanner-primary", "fingerprint": "00d7d439a0bb2dae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-161fe76f2c3dbd73", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/ClubCard.tsx:102"}, "properties": {"repobilityId": "abb13d5fb90442e1", "scanner": "scanner-primary", "fingerprint": "161fe76f2c3dbd73", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d1e4bb545fb8650", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/PlayerIPOCard.tsx:72"}, "properties": {"repobilityId": "1910d7bff8aaed34", "scanner": "scanner-primary", "fingerprint": "0d1e4bb545fb8650", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df00bd2073888e94", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/WatchlistView.tsx:334"}, "properties": {"repobilityId": "d51865831dd056ae", "scanner": "scanner-primary", "fingerprint": "df00bd2073888e94", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f82d95694945625d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/market/components/marktplatz/EndingSoonStrip.tsx:65"}, "properties": {"repobilityId": "f68b56f6a9746f44", "scanner": "scanner-primary", "fingerprint": "f82d95694945625d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8a271bc885e81904", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/__tests__/db-invariants.test.ts:571"}, "properties": {"repobilityId": "096306e46d9af07c", "scanner": "scanner-primary", "fingerprint": "8a271bc885e81904", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-09509784f1db7fc2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/__tests__/error-keys-coverage.test.ts:161"}, "properties": {"repobilityId": "f426529ad7c7c392", "scanner": "scanner-primary", "fingerprint": "09509784f1db7fc2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1dd641593ec74d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/plans/_writer.js:1"}, "properties": {"repobilityId": "dcddaa371ce024e8", "scanner": "scanner-primary", "fingerprint": "b1dd641593ec74d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74eaebc8947784a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/plans/_stdin_writer.js:7"}, "properties": {"repobilityId": "efa8cf66d8ee2756", "scanner": "scanner-primary", "fingerprint": "74eaebc8947784a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d85bede6e6565986", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-profile-screenshot.ts:38"}, "properties": {"repobilityId": "f0734ac9648a68bd", "scanner": "scanner-primary", "fingerprint": "d85bede6e6565986", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef6b28e56dd45df1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/take-screenshots.ts:19"}, "properties": {"repobilityId": "8c32f61fa2791522", "scanner": "scanner-primary", "fingerprint": "ef6b28e56dd45df1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f4c39d62598100b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-3hub.ts:16"}, "properties": {"repobilityId": "4f38e1391380ebf6", "scanner": "scanner-primary", "fingerprint": "f4c39d62598100b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1077b60e657aaa8a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-polish.ts:92"}, "properties": {"repobilityId": "3798bc56c3b29ee8", "scanner": "scanner-primary", "fingerprint": "1077b60e657aaa8a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-afe9e4ea803325e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/mystery-box-qa.spec.ts:19"}, "properties": {"repobilityId": "a8a63550183aaf77", "scanner": "scanner-primary", "fingerprint": "afe9e4ea803325e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb6c7e55dbfa9393", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/screenshot-home.ts:23"}, "properties": {"repobilityId": "754b565167ef8f2f", "scanner": "scanner-primary", "fingerprint": "eb6c7e55dbfa9393", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5502de85e3bf87c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-283-network.ts:44"}, "properties": {"repobilityId": "c043fec0167ec133", "scanner": "scanner-primary", "fingerprint": "5502de85e3bf87c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a9f6fa36c94802b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-onboarding.ts:16"}, "properties": {"repobilityId": "4aa9d900a7382feb", "scanner": "scanner-primary", "fingerprint": "a9f6fa36c94802b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e05c9d5d24a5e605", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-onboarding-register.ts:14"}, "properties": {"repobilityId": "f2817f5bd8589bf6", "scanner": "scanner-primary", "fingerprint": "e05c9d5d24a5e605", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5706d6c5c177a6ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-133-clubs-verify.ts:34"}, "properties": {"repobilityId": "60ceca707d3afd89", "scanner": "scanner-primary", "fingerprint": "5706d6c5c177a6ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-950e791ea69f3d75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-b3b4-verify.ts:33"}, "properties": {"repobilityId": "457b53cfddba4324", "scanner": "scanner-primary", "fingerprint": "950e791ea69f3d75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-396b8c4a2d464cbe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-151b-RESET-follow-sync.ts:31"}, "properties": {"repobilityId": "befa4db9f6fb42a9", "scanner": "scanner-primary", "fingerprint": "396b8c4a2d464cbe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d45934b90c40fb4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-284c-verify.ts:50"}, "properties": {"repobilityId": "6b60989e3261b4d6", "scanner": "scanner-primary", "fingerprint": "1d45934b90c40fb4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-63a176bad961b0dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-equipment-inventory.ts:40"}, "properties": {"repobilityId": "e8a04ff31193239c", "scanner": "scanner-primary", "fingerprint": "63a176bad961b0dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95b0298b968b01f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-fetch-errors-isolate.ts:55"}, "properties": {"repobilityId": "3c660b7ffd8feaf2", "scanner": "scanner-primary", "fingerprint": "95b0298b968b01f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d088ae728124b88", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/screenshot-spieltag.ts:24"}, "properties": {"repobilityId": "eb5bc03b133b31bc", "scanner": "scanner-primary", "fingerprint": "1d088ae728124b88", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0c227cda0458a33", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-284-stab-walk.ts:65"}, "properties": {"repobilityId": "cbd507e6111fcf8b", "scanner": "scanner-primary", "fingerprint": "d0c227cda0458a33", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c8940f53d872fe8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-152-wallet-money-path.ts:55"}, "properties": {"repobilityId": "d7fddcd02fc6a96d", "scanner": "scanner-primary", "fingerprint": "2c8940f53d872fe8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-64297e6e9d21a634", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-282-network.ts:51"}, "properties": {"repobilityId": "3f94dc20ad8bd995", "scanner": "scanner-primary", "fingerprint": "64297e6e9d21a634", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9328cf662663a2cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/smoke-check.ts:59"}, "properties": {"repobilityId": "3197d8c99fc6b59f", "scanner": "scanner-primary", "fingerprint": "9328cf662663a2cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95626822fec7606d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/take-mobile-screenshots.ts:27"}, "properties": {"repobilityId": "c14615cf7e9cbcf1", "scanner": "scanner-primary", "fingerprint": "95626822fec7606d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-078dc624d2b6dde0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/qa-realtime-feed.ts:55"}, "properties": {"repobilityId": "9447ede21f36b308", "scanner": "scanner-primary", "fingerprint": "078dc624d2b6dde0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac9e8b6415af9e8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/simulate.spec.ts:592"}, "properties": {"repobilityId": "cd3d69f9ee08a0c6", "scanner": "scanner-primary", "fingerprint": "ac9e8b6415af9e8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a144d25a084730b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/bot-journal.ts:204"}, "properties": {"repobilityId": "47640e438786e43c", "scanner": "scanner-primary", "fingerprint": "a144d25a084730b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f3e86e77fb4a8a23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/survey.ts:595"}, "properties": {"repobilityId": "7ccb933a215bfc3e", "scanner": "scanner-primary", "fingerprint": "f3e86e77fb4a8a23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bad39a9c26760c0d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/run.ts:37"}, "properties": {"repobilityId": "85db846e9b3a6b32", "scanner": "scanner-primary", "fingerprint": "bad39a9c26760c0d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0f6db6a87e3cef60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/diag-market-query.ts:16"}, "properties": {"repobilityId": "13913030a2cfe8ef", "scanner": "scanner-primary", "fingerprint": "0f6db6a87e3cef60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f6d1b234829d253", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/refresh-wallets.ts:15"}, "properties": {"repobilityId": "d770c39935ca68e3", "scanner": "scanner-primary", "fingerprint": "3f6d1b234829d253", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e58abc939b45f2c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/qa-runner.ts:546"}, "properties": {"repobilityId": "8af29212fa969def", "scanner": "scanner-primary", "fingerprint": "3e58abc939b45f2c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1cb1e6e2192819a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/run-loop.ts:29"}, "properties": {"repobilityId": "6e78d5a8a4e31d18", "scanner": "scanner-primary", "fingerprint": "1cb1e6e2192819a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83583987ee4bc333", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/setup-accounts.ts:10"}, "properties": {"repobilityId": "6ee93a2d80d57fc0", "scanner": "scanner-primary", "fingerprint": "83583987ee4bc333", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a389da475c101a06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/bots/ai/survey-aggregator.ts:143"}, "properties": {"repobilityId": "c897fe1de6879f02", "scanner": "scanner-primary", "fingerprint": "a389da475c101a06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7932b9916700a174", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-bundle-size.ts:14"}, "properties": {"repobilityId": "55e805e963b8f2f4", "scanner": "scanner-primary", "fingerprint": "7932b9916700a174", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-bundle-size.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-d0acc6b96b4da4b6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/slice-273-backfill-fixture-stats.mjs:32"}, "properties": {"repobilityId": "dbfee4c3b19b815e", "scanner": "scanner-primary", "fingerprint": "d0acc6b96b4da4b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/slice-273-backfill-fixture-stats.mjs"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-4370101eaf22c021", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/rotate-secret.ts:34"}, "properties": {"repobilityId": "9b15277c6d022b4e", "scanner": "scanner-primary", "fingerprint": "4370101eaf22c021", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/rotate-secret.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-973d7563115b5447", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/components/providers/AuthProvider.tsx:164"}, "properties": {"repobilityId": "a83128d624817aaa", "scanner": "scanner-primary", "fingerprint": "973d7563115b5447", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/providers/AuthProvider.tsx"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-3e2cdc4bddccc369", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/MarkdownRenderer.tsx:19"}, "properties": {"repobilityId": "c53751fdff1be9a8", "scanner": "scanner-primary", "fingerprint": "3e2cdc4bddccc369", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ui/MarkdownRenderer.tsx"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-536a8923cf700436", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/lib/services/activityLog.ts:14"}, "properties": {"repobilityId": "679084f971349630", "scanner": "scanner-primary", "fingerprint": "536a8923cf700436", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/services/activityLog.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-ebb84f2d7072417a", "level": "error", "message": {"text": "Possible secret in src/lib/__tests__/helpers/supabase-test-client.ts"}, "properties": {"repobilityId": "e84cd965d892a6df", "scanner": "scanner-primary", "fingerprint": "ebb84f2d7072417a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/__tests__/helpers/supabase-test-client.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-b1cdc169e2099369", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in worklog/proofs/151b-RESET-diag-nobutton.html:1"}, "properties": {"repobilityId": "fcaaf81c1baef753", "scanner": "scanner-primary", "fingerprint": "b1cdc169e2099369", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worklog/proofs/151b-RESET-diag-nobutton.html"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2858e6808accc136", "level": "error", "message": {"text": "Possible secret in e2e/take-screenshots.ts"}, "properties": {"repobilityId": "0ab60a39096ada8d", "scanner": "scanner-primary", "fingerprint": "2858e6808accc136", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/take-screenshots.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-d90d13f9adadd1b1", "level": "error", "message": {"text": "Possible secret in e2e/qa-3hub.ts"}, "properties": {"repobilityId": "dca9c43492ee0ee7", "scanner": "scanner-primary", "fingerprint": "d90d13f9adadd1b1", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-3hub.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-79235056648d23e7", "level": "error", "message": {"text": "Possible secret in e2e/qa-polish.ts"}, "properties": {"repobilityId": "9df89f7456cf3dfb", "scanner": "scanner-primary", "fingerprint": "79235056648d23e7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-polish.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-79235056648d23e7", "level": "error", "message": {"text": "Possible secret in e2e/qa-polish.ts"}, "properties": {"repobilityId": "9df89f7456cf3dfb", "scanner": "scanner-primary", "fingerprint": "79235056648d23e7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-polish.ts"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-a54aff369b764c1b", "level": "error", "message": {"text": "Possible secret in e2e/mystery-box-qa.spec.ts"}, "properties": {"repobilityId": "eef5edee06638409", "scanner": "scanner-primary", "fingerprint": "a54aff369b764c1b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/mystery-box-qa.spec.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-3aeed83187a1adba", "level": "error", "message": {"text": "Possible secret in e2e/screenshot-home.ts"}, "properties": {"repobilityId": "d4a8ad694d5e02ba", "scanner": "scanner-primary", "fingerprint": "3aeed83187a1adba", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/screenshot-home.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-5a20609430e88afe", "level": "error", "message": {"text": "Possible secret in e2e/qa-283-network.ts"}, "properties": {"repobilityId": "f02922329812d347", "scanner": "scanner-primary", "fingerprint": "5a20609430e88afe", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-283-network.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-e393ea7abe1827ab", "level": "error", "message": {"text": "Possible secret in e2e/qa-onboarding.ts"}, "properties": {"repobilityId": "311921da33714207", "scanner": "scanner-primary", "fingerprint": "e393ea7abe1827ab", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-onboarding.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-bc0982f9f4dfaf13", "level": "error", "message": {"text": "Possible secret in e2e/qa-b3b4-verify.ts"}, "properties": {"repobilityId": "a9dbf6de7b1a563a", "scanner": "scanner-primary", "fingerprint": "bc0982f9f4dfaf13", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-b3b4-verify.ts"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-1ea1c4b861cc8cb1", "level": "error", "message": {"text": "Possible secret in e2e/helpers.ts"}, "properties": {"repobilityId": "e4132fb39d77c656", "scanner": "scanner-primary", "fingerprint": "1ea1c4b861cc8cb1", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/helpers.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-5d895bb3e82fda1e", "level": "error", "message": {"text": "Possible secret in e2e/qa-284c-verify.ts"}, "properties": {"repobilityId": "97d60f79c275cf33", "scanner": "scanner-primary", "fingerprint": "5d895bb3e82fda1e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-284c-verify.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-7f5d51ee2751fd9f", "level": "error", "message": {"text": "Possible secret in e2e/qa-equipment-inventory.ts"}, "properties": {"repobilityId": "3ef6711760993a92", "scanner": "scanner-primary", "fingerprint": "7f5d51ee2751fd9f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-equipment-inventory.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-c5a450a06ce3f205", "level": "error", "message": {"text": "Possible secret in e2e/qa-fetch-errors-isolate.ts"}, "properties": {"repobilityId": "4220b13dbca1280b", "scanner": "scanner-primary", "fingerprint": "c5a450a06ce3f205", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-fetch-errors-isolate.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-2f6c0a335be625ce", "level": "error", "message": {"text": "Possible secret in e2e/screenshot-spieltag.ts"}, "properties": {"repobilityId": "8790a76aa8be9949", "scanner": "scanner-primary", "fingerprint": "2f6c0a335be625ce", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/screenshot-spieltag.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-05979194e54ff10e", "level": "error", "message": {"text": "Possible secret in e2e/qa-284-stab-walk.ts"}, "properties": {"repobilityId": "176d0412eb088615", "scanner": "scanner-primary", "fingerprint": "05979194e54ff10e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-284-stab-walk.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-11dfc5426e8373b7", "level": "error", "message": {"text": "Possible secret in e2e/qa-282-network.ts"}, "properties": {"repobilityId": "e53328fa42fc5bc4", "scanner": "scanner-primary", "fingerprint": "11dfc5426e8373b7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-282-network.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-f0b18967c0b5562c", "level": "error", "message": {"text": "Possible secret in e2e/take-mobile-screenshots.ts"}, "properties": {"repobilityId": "9267387040439602", "scanner": "scanner-primary", "fingerprint": "f0b18967c0b5562c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/take-mobile-screenshots.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-d6ae1b015945c434", "level": "error", "message": {"text": "Possible secret in e2e/qa-realtime-feed.ts"}, "properties": {"repobilityId": "6b5ec9f92e12053c", "scanner": "scanner-primary", "fingerprint": "d6ae1b015945c434", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/qa-realtime-feed.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-5d37df7eb3b14e5c", "level": "error", "message": {"text": "Possible secret in e2e/full-check/profile.spec.ts"}, "properties": {"repobilityId": "f89110054bb1f929", "scanner": "scanner-primary", "fingerprint": "5d37df7eb3b14e5c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/full-check/profile.spec.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-46a077d8ee8975f3", "level": "error", "message": {"text": "Possible secret in e2e/full-check/community.spec.ts"}, "properties": {"repobilityId": "e485c6745e65f82f", "scanner": "scanner-primary", "fingerprint": "46a077d8ee8975f3", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/full-check/community.spec.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-c9792ceb417701f5", "level": "error", "message": {"text": "Possible secret in e2e/full-check/settings.spec.ts"}, "properties": {"repobilityId": "30d0df5a728b3d98", "scanner": "scanner-primary", "fingerprint": "c9792ceb417701f5", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/full-check/settings.spec.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-366bb4e1c914ee28", "level": "error", "message": {"text": "Possible secret in e2e/bots/bot-config.ts"}, "properties": {"repobilityId": "5d9bdc8cd98d6f68", "scanner": "scanner-primary", "fingerprint": "366bb4e1c914ee28", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/bots/bot-config.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-92e0a01f01343fbb", "level": "error", "message": {"text": "Possible secret in e2e/bots/ai/run.ts"}, "properties": {"repobilityId": "724689f609165ddf", "scanner": "scanner-primary", "fingerprint": "92e0a01f01343fbb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/bots/ai/run.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-f8414e6d24a33f2c", "level": "error", "message": {"text": "Possible secret in e2e/bots/ai/diag-market-query.ts"}, "properties": {"repobilityId": "7e71d5f0dc9abec3", "scanner": "scanner-primary", "fingerprint": "f8414e6d24a33f2c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/bots/ai/diag-market-query.ts"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-8bc800687d0a27b4", "level": "error", "message": {"text": "Possible secret in e2e/bots/ai/refresh-wallets.ts"}, "properties": {"repobilityId": "8fc058ec2a7f449f", "scanner": "scanner-primary", "fingerprint": "8bc800687d0a27b4", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/bots/ai/refresh-wallets.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-937670b0e7ee6422", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in e2e/bots/ai/run-loop.ts:16"}, "properties": {"repobilityId": "95ae295d25489582", "scanner": "scanner-primary", "fingerprint": "937670b0e7ee6422", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/bots/ai/run-loop.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-015e6ec1250c23a2", "level": "error", "message": {"text": "Possible secret in e2e/bots/ai/setup-accounts.ts"}, "properties": {"repobilityId": "c83a6333603640b3", "scanner": "scanner-primary", "fingerprint": "015e6ec1250c23a2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/bots/ai/setup-accounts.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-769fdbe33092e92c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f9c9821c29e3d544", "scanner": "scanner-primary", "fingerprint": "769fdbe33092e92c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/post-deploy-smoke.yml"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-769fdbe33092e92c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9e389202ceb8eeaf", "scanner": "scanner-primary", "fingerprint": "769fdbe33092e92c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/post-deploy-smoke.yml"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-47910043ea2aaed8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e455eba43bf0861f", "scanner": "scanner-primary", "fingerprint": "47910043ea2aaed8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/synthetic-users.yml"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-47910043ea2aaed8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e455eba43bf0861f", "scanner": "scanner-primary", "fingerprint": "47910043ea2aaed8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/synthetic-users.yml"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-47910043ea2aaed8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d6d428a935d41342", "scanner": "scanner-primary", "fingerprint": "47910043ea2aaed8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/synthetic-users.yml"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-1186bcfe8b1ba15f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0d19e1b6096b5949", "scanner": "scanner-primary", "fingerprint": "1186bcfe8b1ba15f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/post-push-deploy-watchdog.yml"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-c0840d07864313e3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "70ebbd96cb94cd0f", "scanner": "scanner-primary", "fingerprint": "c0840d07864313e3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/lighthouse.yml"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-14f1dc5dd96acbc8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a1f6e4a2e51be296", "scanner": "scanner-primary", "fingerprint": "14f1dc5dd96acbc8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/nightly-audit.yml"}, "region": {"startLine": 244}}}]}, {"ruleId": "scanner-14f1dc5dd96acbc8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97d89a251df08928", "scanner": "scanner-primary", "fingerprint": "14f1dc5dd96acbc8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/nightly-audit.yml"}, "region": {"startLine": 355}}}]}, {"ruleId": "scanner-14f1dc5dd96acbc8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a1f6e4a2e51be296", "scanner": "scanner-primary", "fingerprint": "14f1dc5dd96acbc8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/nightly-audit.yml"}, "region": {"startLine": 364}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-01ac28852aaf1214", "level": "note", "message": {"text": "Very large file: src/app/api/cron/gameweek-sync/route.ts (1902 lines)"}, "properties": {"repobilityId": "ccd30f0c104a15ec", "scanner": "scanner-primary", "fingerprint": "01ac28852aaf1214", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cf594bb77fd3d68e", "level": "note", "message": {"text": "Very large file: src/app/(app)/bescout-admin/AdminEconomyTab.tsx (1582 lines)"}, "properties": {"repobilityId": "7bfd7c5122a86d0d", "scanner": "scanner-primary", "fingerprint": "cf594bb77fd3d68e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e7e93e337b199ec7", "level": "note", "message": {"text": "Very large file: src/types/index.ts (2205 lines)"}, "properties": {"repobilityId": "6bc7d72791bfb09e", "scanner": "scanner-primary", "fingerprint": "e7e93e337b199ec7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-462cda10779f8ef2", "level": "note", "message": {"text": "Very large file: src/components/fantasy/event-tabs/LineupPanel.tsx (1023 lines)"}, "properties": {"repobilityId": "15dd1fe968e03377", "scanner": "scanner-primary", "fingerprint": "462cda10779f8ef2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0c445118fc3d4be9", "level": "note", "message": {"text": "Very large file: src/components/community/hooks/__tests__/useCommunityActions.test.ts (1575 lines)"}, "properties": {"repobilityId": "7da2e8479e03a9c9", "scanner": "scanner-primary", "fingerprint": "0c445118fc3d4be9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fd31e25849508cb0", "level": "note", "message": {"text": "Very large file: src/lib/__tests__/db-invariants.test.ts (2250 lines)"}, "properties": {"repobilityId": "af5fd120ac66e00e", "scanner": "scanner-primary", "fingerprint": "fd31e25849508cb0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "4648494d66aa35b3", "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": "96ff398f3dd754b5", "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": "eb3e4a2352f72e93", "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": "fd38084bbec22752", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "4d19fae28c6e7750", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-cc55229a7a3c078d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "properties": {"repobilityId": "51942fb3d5b8b5b4", "scanner": "scanner-primary", "fingerprint": "cc55229a7a3c078d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ecb0d2c55ed6875d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.json"}, "properties": {"repobilityId": "d8bae33a6d517bf0", "scanner": "scanner-primary", "fingerprint": "ecb0d2c55ed6875d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.local.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cbe135a2fc0f65cc", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/brand-coherence-auditor.md"}, "properties": {"repobilityId": "a17f0c73a8c58730", "scanner": "scanner-primary", "fingerprint": "cbe135a2fc0f65cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/brand-coherence-auditor.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5c3083d2d05771e7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/autodream.md"}, "properties": {"repobilityId": "fe1efd53ceb1e768", "scanner": "scanner-primary", "fingerprint": "5c3083d2d05771e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/autodream.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-340b96426ec391ac", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/ux-coherence-auditor.md"}, "properties": {"repobilityId": "1ed401cbb75da692", "scanner": "scanner-primary", "fingerprint": "340b96426ec391ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/ux-coherence-auditor.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-56f8d532c94c9820", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gtm-writer.md"}, "properties": {"repobilityId": "4634a7fc86ef066d", "scanner": "scanner-primary", "fingerprint": "56f8d532c94c9820", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gtm-writer.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-44ee3b3b930dbdcb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/business.md"}, "properties": {"repobilityId": "30f82b6f70b9bcf4", "scanner": "scanner-primary", "fingerprint": "44ee3b3b930dbdcb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/business.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2b9a4f4d4ff84ac7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/fm-mechanics-expert.md"}, "properties": {"repobilityId": "93de2e588ac1b76a", "scanner": "scanner-primary", "fingerprint": "2b9a4f4d4ff84ac7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/fm-mechanics-expert.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a0ac535d6ea66cf0", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/qa-visual.md"}, "properties": {"repobilityId": "e25a6005c82397bb", "scanner": "scanner-primary", "fingerprint": "a0ac535d6ea66cf0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/qa-visual.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7de2685f60e58b2f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/fantasy-scoring-expert.md"}, "properties": {"repobilityId": "1a707872a0b3e2eb", "scanner": "scanner-primary", "fingerprint": "7de2685f60e58b2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/fantasy-scoring-expert.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5fd594e1f8316e3e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/impact-analyst.md"}, "properties": {"repobilityId": "2d95408bb6ea1466", "scanner": "scanner-primary", "fingerprint": "5fd594e1f8316e3e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/impact-analyst.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8c9644df36e2c5e0", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/plugins/testing-toolkit/agents/tdd-developer.md"}, "properties": {"repobilityId": "18144ea15bc394d0", "scanner": "scanner-primary", "fingerprint": "8c9644df36e2c5e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/plugins/testing-toolkit/agents/tdd-developer.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-32a3c0708c432c8d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/plugins/security-essentials/hooks/file-change-limiter.json"}, "properties": {"repobilityId": "1555d8e9cb837895", "scanner": "scanner-primary", "fingerprint": "32a3c0708c432c8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/plugins/security-essentials/hooks/file-change-limiter.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-72367a2a17262e55", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/plugins/security-essentials/hooks/sensitive-file-protector.json"}, "properties": {"repobilityId": "23acb557bffe3ca4", "scanner": "scanner-primary", "fingerprint": "72367a2a17262e55", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/plugins/security-essentials/hooks/sensitive-file-protector.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-63b178122f5fcf08", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/plugins/security-essentials/hooks/command-validator.json"}, "properties": {"repobilityId": "ccb33fbb918e7afb", "scanner": "scanner-primary", "fingerprint": "63b178122f5fcf08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/plugins/security-essentials/hooks/command-validator.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-76361cfb72bc08aa", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/plugins/security-essentials/templates/security-best-practices.md"}, "properties": {"repobilityId": "2499155d93c8262a", "scanner": "scanner-primary", "fingerprint": "76361cfb72bc08aa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/plugins/security-essentials/templates/security-best-practices.md"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-6c32d8f96749ed73", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/plugins/tailwind-expert/README.md"}, "properties": {"repobilityId": "e65c30c01c189b21", "scanner": "scanner-primary", "fingerprint": "6c32d8f96749ed73", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/plugins/tailwind-expert/README.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-02d3157b3faec0a2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/plugins/tailwind-expert/agents/css-analyzer.md"}, "properties": {"repobilityId": "a018be277f9548d7", "scanner": "scanner-primary", "fingerprint": "02d3157b3faec0a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/plugins/tailwind-expert/agents/css-analyzer.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a298b4f264d3cb2f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/plugins/tailwind-expert/workflows/tailwind-setup.json"}, "properties": {"repobilityId": "784742d4e29c40d8", "scanner": "scanner-primary", "fingerprint": "a298b4f264d3cb2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/plugins/tailwind-expert/workflows/tailwind-setup.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b7997fb8f22738fb", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/commands/security-best-practices.md"}, "properties": {"repobilityId": "687d334452e257c5", "scanner": "scanner-primary", "fingerprint": "b7997fb8f22738fb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/security-best-practices.md"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-bf738f9184325370", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/commands/security-best-practices.md"}, "properties": {"repobilityId": "a50ddf17a1ff5e5d", "scanner": "scanner-primary", "fingerprint": "bf738f9184325370", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/security-best-practices.md"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-f754974203c1f1cf", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/baseline-ui.md"}, "properties": {"repobilityId": "7096ea15f5750544", "scanner": "scanner-primary", "fingerprint": "f754974203c1f1cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/baseline-ui.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-149e34fd1b9e4444", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/performance-audit.md"}, "properties": {"repobilityId": "3ca56613bb5631a1", "scanner": "scanner-primary", "fingerprint": "149e34fd1b9e4444", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/performance-audit.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dd00e46dd650df3c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/accessibility-review.md"}, "properties": {"repobilityId": "b3220ef459ee2a65", "scanner": "scanner-primary", "fingerprint": "dd00e46dd650df3c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/accessibility-review.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a38f069438c38d00", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/state-management.md"}, "properties": {"repobilityId": "41be9f185486e7e4", "scanner": "scanner-primary", "fingerprint": "a38f069438c38d00", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/state-management.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-08afbfed791be500", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/optimization.md"}, "properties": {"repobilityId": "5a45a640d5807ac9", "scanner": "scanner-primary", "fingerprint": "08afbfed791be500", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/optimization.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-071e68be6a745675", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/workflows/project-management-init-project.json"}, "properties": {"repobilityId": "5fc935925c6b2af0", "scanner": "scanner-primary", "fingerprint": "071e68be6a745675", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/workflows/project-management-init-project.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ad82ed798e1beef3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/workflows/tailwind-expert-tailwind-setup.json"}, "properties": {"repobilityId": "9b212e2bb5ae465b", "scanner": "scanner-primary", "fingerprint": "ad82ed798e1beef3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/workflows/tailwind-expert-tailwind-setup.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dbe5f4468b32a7fd", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/rules/ui-components.md"}, "properties": {"repobilityId": "aad21c0df69a09e1", "scanner": "scanner-primary", "fingerprint": "dbe5f4468b32a7fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/rules/ui-components.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b5dc5545f84dd565", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/rules/errors-db.md"}, "properties": {"repobilityId": "3813cee9fe4e06d8", "scanner": "scanner-primary", "fingerprint": "b5dc5545f84dd565", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/rules/errors-db.md"}, "region": {"startLine": 431}}}]}, {"ruleId": "scanner-df9e023d3cf52e3e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/rules/business.md"}, "properties": {"repobilityId": "743e9170a899fb34", "scanner": "scanner-primary", "fingerprint": "df9e023d3cf52e3e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/rules/business.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-239234fb8dfee261", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/rules/errors-infra.md"}, "properties": {"repobilityId": "d5fca2fb803e8ba9", "scanner": "scanner-primary", "fingerprint": "239234fb8dfee261", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/rules/errors-infra.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4396ee0943224f64", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/rules/workflow.md"}, "properties": {"repobilityId": "13f8418e2b09c08d", "scanner": "scanner-primary", "fingerprint": "4396ee0943224f64", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/rules/workflow.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0098a7b297d76246", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/improve/SKILL.md"}, "properties": {"repobilityId": "159084b690f81d60", "scanner": "scanner-primary", "fingerprint": "0098a7b297d76246", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/improve/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d5715b2479a013a6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/auto-beta-ready/SKILL.md"}, "properties": {"repobilityId": "42cc0119a2df7097", "scanner": "scanner-primary", "fingerprint": "d5715b2479a013a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/auto-beta-ready/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-56c1754bca37ba81", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/impact/SKILL.md"}, "properties": {"repobilityId": "07156fc1bf8c9aa8", "scanner": "scanner-primary", "fingerprint": "56c1754bca37ba81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/impact/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19f5a7757be794a9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/competing-hypotheses/SKILL.md"}, "properties": {"repobilityId": "6ce0814e3c748522", "scanner": "scanner-primary", "fingerprint": "19f5a7757be794a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/competing-hypotheses/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19cf6e506b6fe7c2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/plan-legal-review/SKILL.md"}, "properties": {"repobilityId": "48ef9215ee60f5bc", "scanner": "scanner-primary", "fingerprint": "19cf6e506b6fe7c2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/plan-legal-review/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ac0e2836b5d31338", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/audit-beta-readiness/SKILL.md"}, "properties": {"repobilityId": "079dcbb7f2533865", "scanner": "scanner-primary", "fingerprint": "ac0e2836b5d31338", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/audit-beta-readiness/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-025dccb3231d0571", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/silent-fail-audit/SKILL.md"}, "properties": {"repobilityId": "a6bc773a328fbccb", "scanner": "scanner-primary", "fingerprint": "025dccb3231d0571", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/silent-fail-audit/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-18469a3d366b4e06", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/plan-qa-review/SKILL.md"}, "properties": {"repobilityId": "059a567c77308be7", "scanner": "scanner-primary", "fingerprint": "18469a3d366b4e06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/plan-qa-review/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-c7bb43f0ee473320", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-nationality.mjs:49"}, "properties": {"repobilityId": "3a00e69f8d65aeb8", "scanner": "scanner-primary", "fingerprint": "c7bb43f0ee473320", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a0fb35f93e2084e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/reconcile-player-ids.mjs:46"}, "properties": {"repobilityId": "4d51ac6bf26de4ae", "scanner": "scanner-primary", "fingerprint": "a0fb35f93e2084e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9595b8fc710eef76", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/backfill-scoring-historical.mjs:527"}, "properties": {"repobilityId": "45f6f8b509877deb", "scanner": "scanner-primary", "fingerprint": "9595b8fc710eef76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b48eefa5fdc2fc3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-scoring-historical.mjs:91"}, "properties": {"repobilityId": "961c461455ba719d", "scanner": "scanner-primary", "fingerprint": "7b48eefa5fdc2fc3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1add2a9197a21974", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/rebuild-ban-squad.mjs:84"}, "properties": {"repobilityId": "178ee71f49b46358", "scanner": "scanner-primary", "fingerprint": "1add2a9197a21974", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2e05ace95923aaf0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/diagnose-missing-players.mjs:19"}, "properties": {"repobilityId": "25565d075ce43ffb", "scanner": "scanner-primary", "fingerprint": "2e05ace95923aaf0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1ea774bca9a3154", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-ratings.mjs:37"}, "properties": {"repobilityId": "24fea27a9c9f4736", "scanner": "scanner-primary", "fingerprint": "b1ea774bca9a3154", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ba5a98282dded784", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-by-id.mjs:31"}, "properties": {"repobilityId": "5cb47c0bb60c7ef2", "scanner": "scanner-primary", "fingerprint": "ba5a98282dded784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d2218fca23ed17c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-squads.mjs:59"}, "properties": {"repobilityId": "cf9c049cb89e9b42", "scanner": "scanner-primary", "fingerprint": "d2218fca23ed17c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4ade36a13745e97b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-unmapped-players.mjs:37"}, "properties": {"repobilityId": "fecf16ff070c2407", "scanner": "scanner-primary", "fingerprint": "4ade36a13745e97b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1744743fe22da164", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-positions.mjs:37"}, "properties": {"repobilityId": "91331d93fc9559a2", "scanner": "scanner-primary", "fingerprint": "1744743fe22da164", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65cda312eb32e2fc", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/type-truth-audit.ts:100"}, "properties": {"repobilityId": "bc8d3fe4c5611d2b", "scanner": "scanner-primary", "fingerprint": "65cda312eb32e2fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-355471ef8679ea8d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-fixtures.mjs:64"}, "properties": {"repobilityId": "79b9768826f63eb5", "scanner": "scanner-primary", "fingerprint": "355471ef8679ea8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f8f46dba493d9720", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-tff-players.mjs:80"}, "properties": {"repobilityId": "52a68bd9ce0ba84f", "scanner": "scanner-primary", "fingerprint": "f8f46dba493d9720", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-586658303a1b6575", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-complete-stats.mjs:49"}, "properties": {"repobilityId": "29ce100e38dfa251", "scanner": "scanner-primary", "fingerprint": "586658303a1b6575", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5513294b37ac3ea1", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/silent-fail-audit.ts:64"}, "properties": {"repobilityId": "d3eae1e64de81e1c", "scanner": "scanner-primary", "fingerprint": "5513294b37ac3ea1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd5b827a81b700d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fetch-stadium-direct.mjs:38"}, "properties": {"repobilityId": "8fb37eb40496b08b", "scanner": "scanner-primary", "fingerprint": "cd5b827a81b700d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2dbba20276f8e78a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-league.mjs:54"}, "properties": {"repobilityId": "a42d07a42a65d344", "scanner": "scanner-primary", "fingerprint": "2dbba20276f8e78a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1e905295bcdc35e7", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/beta-metrics.mjs:2"}, "properties": {"repobilityId": "dc1ec3a5cdf4173b", "scanner": "scanner-primary", "fingerprint": "1e905295bcdc35e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37509a1411633082", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-players.mjs:51"}, "properties": {"repobilityId": "ad537cbc03c3da5e", "scanner": "scanner-primary", "fingerprint": "37509a1411633082", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7124bc74190b54a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-all.mjs:42"}, "properties": {"repobilityId": "fb241ace8188577b", "scanner": "scanner-primary", "fingerprint": "7124bc74190b54a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8d61abdff7d7f5e6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-ban-stats.mjs:32"}, "properties": {"repobilityId": "63f3cb16a4ee8e7d", "scanner": "scanner-primary", "fingerprint": "8d61abdff7d7f5e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b30b6599f3e9054a", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/wiring-check.ts:63"}, "properties": {"repobilityId": "fcf8065ca8a93366", "scanner": "scanner-primary", "fingerprint": "b30b6599f3e9054a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f11de50e785745a", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/cron-health-check.ts:143"}, "properties": {"repobilityId": "c4d990d014ce679b", "scanner": "scanner-primary", "fingerprint": "1f11de50e785745a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49b0b8258072e461", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/compare-ban-squad.mjs:35"}, "properties": {"repobilityId": "ef53dcb618a0c177", "scanner": "scanner-primary", "fingerprint": "49b0b8258072e461", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d80973722a1128e5", "level": "note", "message": {"text": "Legacy-named symbol `open_mystery_box_v2` in scripts/pg/extract-rpc.js:40"}, "properties": {"repobilityId": "3dc60f5d95625881", "scanner": "scanner-primary", "fingerprint": "d80973722a1128e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9609714f0c546a93", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/archived/2026-04-28-once-off/tm-squad-scrape-local.ts:208"}, "properties": {"repobilityId": "58d3f48679750d1a", "scanner": "scanner-primary", "fingerprint": "9609714f0c546a93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a98e11ea4968e0d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/transfermarkt-search-batch/route.ts:94"}, "properties": {"repobilityId": "5406516fdeb64035", "scanner": "scanner-primary", "fingerprint": "a98e11ea4968e0d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb4d24452e5029d8", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/api/cron/live-score-sync/route.ts:100"}, "properties": {"repobilityId": "df3c7c48be4fad53", "scanner": "scanner-primary", "fingerprint": "cb4d24452e5029d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01d9b5e77e8810dc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/cron/gameweek-sync/route.ts:725"}, "properties": {"repobilityId": "a8629455487b5d50", "scanner": "scanner-primary", "fingerprint": "01d9b5e77e8810dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-337c085cb30d0d50", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/sync-contracts/route.ts:86"}, "properties": {"repobilityId": "561a5445c5706e62", "scanner": "scanner-primary", "fingerprint": "337c085cb30d0d50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7a6c61685b82fd4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/players/route.ts:61"}, "properties": {"repobilityId": "978e5492551c6619", "scanner": "scanner-primary", "fingerprint": "f7a6c61685b82fd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3de2c7479be6194", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(app)/layout.tsx:49"}, "properties": {"repobilityId": "c22cde01b9b93ea6", "scanner": "scanner-primary", "fingerprint": "b3de2c7479be6194", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-381c175a7ea057df", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(app)/fantasy/FantasyContent.tsx:103"}, "properties": {"repobilityId": "394c7e7a5f86522e", "scanner": "scanner-primary", "fingerprint": "381c175a7ea057df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd27f0b1deb7d12c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/(app)/player/[id]/PlayerContent.tsx:76"}, "properties": {"repobilityId": "8a1da1f95bd0423f", "scanner": "scanner-primary", "fingerprint": "bd27f0b1deb7d12c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52e36b430d65aede", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(app)/missions/page.tsx:83"}, "properties": {"repobilityId": "d26f685f8c59691d", "scanner": "scanner-primary", "fingerprint": "52e36b430d65aede", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2042cca9a123194a", "level": "note", "message": {"text": "Legacy-named symbol `get_home_dashboard_v1` in src/app/(app)/hooks/useHomeData.ts:110"}, "properties": {"repobilityId": "006179881d86a97b", "scanner": "scanner-primary", "fingerprint": "2042cca9a123194a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f8ae549264b9e17a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(app)/hooks/useHomeData.ts:96"}, "properties": {"repobilityId": "c768a0272900e9f7", "scanner": "scanner-primary", "fingerprint": "f8ae549264b9e17a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fdf50da6491db4e1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(app)/hooks/__tests__/useHomeData.test.ts:481"}, "properties": {"repobilityId": "74261b06b213bb22", "scanner": "scanner-primary", "fingerprint": "fdf50da6491db4e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d5a2e7f41a62771", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(app)/founding/page.tsx:88"}, "properties": {"repobilityId": "6a914c52dd72c873", "scanner": "scanner-primary", "fingerprint": "0d5a2e7f41a62771", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4598c431b254e23", "level": "note", "message": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/types/index.ts:2150"}, "properties": {"repobilityId": "29c29c3aff58eceb", "scanner": "scanner-primary", "fingerprint": "f4598c431b254e23", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a798d6255dc576a2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/fantasy/SpieltagTab.tsx:53"}, "properties": {"repobilityId": "4a13abe2f3f993a3", "scanner": "scanner-primary", "fingerprint": "a798d6255dc576a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4de30006d76136a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/fantasy/spieltag/FixtureDetailModal.tsx:433"}, "properties": {"repobilityId": "0399d7134da14018", "scanner": "scanner-primary", "fingerprint": "d4de30006d76136a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2408f51f4065d3ac", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/fantasy/spieltag/__tests__/FixtureCard.test.tsx:166"}, "properties": {"repobilityId": "8ff0a56461821f5b", "scanner": "scanner-primary", "fingerprint": "2408f51f4065d3ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89ccdc4d5ad341e5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/fantasy/event-tabs/LineupPanel.tsx:855"}, "properties": {"repobilityId": "00de10b3e90dec8f", "scanner": "scanner-primary", "fingerprint": "89ccdc4d5ad341e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4f1586e242dc4e3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/fantasy/events/EventCardView.tsx:27"}, "properties": {"repobilityId": "64c1cf72728af75b", "scanner": "scanner-primary", "fingerprint": "c4f1586e242dc4e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be40f2fe5f0b3220", "level": "note", "message": {"text": "Legacy-named symbol `priceAlertDeprecated` in src/components/player/detail/hooks/usePriceAlerts.ts:31"}, "properties": {"repobilityId": "b5505d967c66ace7", "scanner": "scanner-primary", "fingerprint": "be40f2fe5f0b3220", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-19fe35fb2ed47b22", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/providers/AuthGuard.tsx:38"}, "properties": {"repobilityId": "0f63b1967cea4290", "scanner": "scanner-primary", "fingerprint": "19fe35fb2ed47b22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4185192df1c2c38", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/providers/AuthProvider.tsx:22"}, "properties": {"repobilityId": "1eff736dfad38558", "scanner": "scanner-primary", "fingerprint": "d4185192df1c2c38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-781505097031b450", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/providers/ClubProvider.tsx:125"}, "properties": {"repobilityId": "c7f7964d68224edf", "scanner": "scanner-primary", "fingerprint": "781505097031b450", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0144483737925b22", "level": "note", "message": {"text": "Legacy-named symbol `BESCOUT_QUERY_CACHE_v1` in src/components/providers/QueryProvider.tsx:33"}, "properties": {"repobilityId": "5de7ffdd4a8324f2", "scanner": "scanner-primary", "fingerprint": "0144483737925b22", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8fb10566c3178ed9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/providers/QueryProvider.tsx:19"}, "properties": {"repobilityId": "6afe33c3f308b894", "scanner": "scanner-primary", "fingerprint": "8fb10566c3178ed9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae8de762e0e77921", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/providers/__tests__/ClubProvider.test.tsx:8"}, "properties": {"repobilityId": "a7d0cde30c7fea40", "scanner": "scanner-primary", "fingerprint": "ae8de762e0e77921", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bc16b6e184f55c4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/providers/__tests__/AuthGuard.test.tsx:38"}, "properties": {"repobilityId": "70ec84122bbc28cf", "scanner": "scanner-primary", "fingerprint": "6bc16b6e184f55c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa73cddebc51997a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/admin/AdminSettingsTab.tsx:376"}, "properties": {"repobilityId": "e739097ea8677310", "scanner": "scanner-primary", "fingerprint": "aa73cddebc51997a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e84f1197c318eaf4", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/profile/__tests__/ProfileView.test.tsx:339"}, "properties": {"repobilityId": "62a71cbe05b23529", "scanner": "scanner-primary", "fingerprint": "e84f1197c318eaf4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee6051448f180dab", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/home/HomeSpotlight.tsx:17"}, "properties": {"repobilityId": "4a6b69d966ad069c", "scanner": "scanner-primary", "fingerprint": "ee6051448f180dab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1d80589d03b5d44", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/home/MarktPuls.tsx:19"}, "properties": {"repobilityId": "5540f99b1ca31848", "scanner": "scanner-primary", "fingerprint": "b1d80589d03b5d44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c310ad8f2c46e702", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/home/helpers.tsx:207"}, "properties": {"repobilityId": "ded5f19e369d139c", "scanner": "scanner-primary", "fingerprint": "c310ad8f2c46e702", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b4e56b8eb3e20db", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/transactions/TransactionsPageContent.tsx:109"}, "properties": {"repobilityId": "9cd54b7c82fe4bf3", "scanner": "scanner-primary", "fingerprint": "1b4e56b8eb3e20db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59f18f8b399db6f1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/onboarding/WelcomeBonusModal.tsx:24"}, "properties": {"repobilityId": "459811b3909589bd", "scanner": "scanner-primary", "fingerprint": "59f18f8b399db6f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-398b6bd013e28618", "level": "note", "message": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/components/inventory/MysteryBoxHistorySection.tsx:72"}, "properties": {"repobilityId": "59058065cd07ce0b", "scanner": "scanner-primary", "fingerprint": "398b6bd013e28618", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e74bdb15c5b3d425", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/inventory/MysteryBoxHistorySection.tsx:52"}, "properties": {"repobilityId": "27c577427741293a", "scanner": "scanner-primary", "fingerprint": "e74bdb15c5b3d425", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0494f539cf44dc2a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/gamification/MysteryBoxModal.tsx:102"}, "properties": {"repobilityId": "557fc7e7dcbdab2e", "scanner": "scanner-primary", "fingerprint": "0494f539cf44dc2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f484b8dfeaaaedb3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/gamification/__tests__/MysteryBoxModal.test.tsx:83"}, "properties": {"repobilityId": "dc60c9835bf58ed5", "scanner": "scanner-primary", "fingerprint": "f484b8dfeaaaedb3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8400c976d4e9923", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/fantasy/hooks/useFixtureDeadlines.ts:25"}, "properties": {"repobilityId": "8371fd2e3cd2e574", "scanner": "scanner-primary", "fingerprint": "f8400c976d4e9923", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-816773bcc84d6ae2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/fantasy/hooks/useGameweek.ts:23"}, "properties": {"repobilityId": "43e7d1b2304e7d31", "scanner": "scanner-primary", "fingerprint": "816773bcc84d6ae2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d8c73ce4823d0d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/fantasy/store/lineupStore.ts:90"}, "properties": {"repobilityId": "9a623fb9aca7140d", "scanner": "scanner-primary", "fingerprint": "9d8c73ce4823d0d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48bcd4485ca6717c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/fantasy/services/events.queries.ts:15"}, "properties": {"repobilityId": "d359d20a97385a81", "scanner": "scanner-primary", "fingerprint": "48bcd4485ca6717c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4cb9dc780bde748", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/fantasy/services/__tests__/fixtures.test.ts:674"}, "properties": {"repobilityId": "e1edce7bb5d61436", "scanner": "scanner-primary", "fingerprint": "c4cb9dc780bde748", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-022db52236b8d38f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/manager/hooks/useManagerData.ts:30"}, "properties": {"repobilityId": "b057e7d85c98aeae", "scanner": "scanner-primary", "fingerprint": "022db52236b8d38f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63ed229d70b8f743", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/market/mutations/trading.ts:80"}, "properties": {"repobilityId": "60f989a2289a199b", "scanner": "scanner-primary", "fingerprint": "63ed229d70b8f743", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc70a52731e70c8e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/market/hooks/useWatchlistActions.ts:19"}, "properties": {"repobilityId": "1f6cc5f55ca4192b", "scanner": "scanner-primary", "fingerprint": "cc70a52731e70c8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f62691ecb85ed619", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/market/hooks/useMarketData.ts:19"}, "properties": {"repobilityId": "808794b01ecc44b8", "scanner": "scanner-primary", "fingerprint": "f62691ecb85ed619", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ff035014b2203b6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/market/components/shared/__tests__/OrderDepthView.test.tsx:285"}, "properties": {"repobilityId": "5585074d98f01876", "scanner": "scanner-primary", "fingerprint": "0ff035014b2203b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1493c024d42bc059", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/shared/store/leagueScopeStore.ts:123"}, "properties": {"repobilityId": "9414e64437c436cd", "scanner": "scanner-primary", "fingerprint": "1493c024d42bc059", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9fc4e3bdefead7d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/streakBenefits.ts:3"}, "properties": {"repobilityId": "0a9b8cb9e41f03e0", "scanner": "scanner-primary", "fingerprint": "c9fc4e3bdefead7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edc30a67d9e3dc59", "level": "note", "message": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/lib/featureFlags.ts:58"}, "properties": {"repobilityId": "f8a6b50bb628e6b9", "scanner": "scanner-primary", "fingerprint": "edc30a67d9e3dc59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-44f35663ad03ce78", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/supabaseMiddleware.ts:40"}, "properties": {"repobilityId": "35b626c53ad7a660", "scanner": "scanner-primary", "fingerprint": "44f35663ad03ce78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47d3c24196a0c291", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/footballApi.ts:1"}, "properties": {"repobilityId": "0afbe7237ea3738b", "scanner": "scanner-primary", "fingerprint": "47d3c24196a0c291", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd891f3abf76492a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/footballApi.ts:55"}, "properties": {"repobilityId": "3f8cb58d54672693", "scanner": "scanner-primary", "fingerprint": "fd891f3abf76492a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d524970c3fe096f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/observability/__tests__/logger.test.ts:44"}, "properties": {"repobilityId": "cd9ab39b39ae8e11", "scanner": "scanner-primary", "fingerprint": "4d524970c3fe096f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec1254dce537cd8e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/hooks/useSafeMutation.ts:142"}, "properties": {"repobilityId": "94a4334d3bd67a68", "scanner": "scanner-primary", "fingerprint": "ec1254dce537cd8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f85fdb67feca4c9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/hooks/useToggleFollowClub.ts:113"}, "properties": {"repobilityId": "5099a9b3d9e84aa0", "scanner": "scanner-primary", "fingerprint": "6f85fdb67feca4c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e4b15df7c43140b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/hooks/useWallet.ts:63"}, "properties": {"repobilityId": "39117ef93db0ecee", "scanner": "scanner-primary", "fingerprint": "4e4b15df7c43140b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef807773cfac54d8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/hooks/__tests__/useWallet.test.ts:228"}, "properties": {"repobilityId": "354db19601b970e3", "scanner": "scanner-primary", "fingerprint": "ef807773cfac54d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5514502aa8fb5b11", "level": "note", "message": {"text": "Legacy-named symbol `get_home_dashboard_v1` in src/lib/queries/homeDashboard.ts:14"}, "properties": {"repobilityId": "26a2220585106110", "scanner": "scanner-primary", "fingerprint": "5514502aa8fb5b11", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-154b275d6d7459f2", "level": "note", "message": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/lib/services/mysteryBox.ts:43"}, "properties": {"repobilityId": "170db3ddd276266d", "scanner": "scanner-primary", "fingerprint": "154b275d6d7459f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9a0e95656e900667", "level": "note", "message": {"text": "Legacy-named symbol `get_home_dashboard_v1` in src/lib/services/homeDashboard.ts:10"}, "properties": {"repobilityId": "d5a28ecef633691a", "scanner": "scanner-primary", "fingerprint": "9a0e95656e900667", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d3105b64b84f2e2c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/services/posts.ts:326"}, "properties": {"repobilityId": "b42b9b1738988c3a", "scanner": "scanner-primary", "fingerprint": "d3105b64b84f2e2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a9b1ae03b6f71f8", "level": "note", "message": {"text": "Legacy-named symbol `get_club_dashboard_stats_v2` in src/lib/services/club.ts:500"}, "properties": {"repobilityId": "f7ee0cf7aa03d291", "scanner": "scanner-primary", "fingerprint": "6a9b1ae03b6f71f8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8b7fcd6a800171f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/services/footballData.ts:350"}, "properties": {"repobilityId": "d1e093eb3653d006", "scanner": "scanner-primary", "fingerprint": "8b7fcd6a800171f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adce1f15ff617288", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/services/equipment.ts:8"}, "properties": {"repobilityId": "b24c8bf6ceaae809", "scanner": "scanner-primary", "fingerprint": "adce1f15ff617288", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3028a3e8758a95e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/services/players.ts:34"}, "properties": {"repobilityId": "d7b12f63aaf21349", "scanner": "scanner-primary", "fingerprint": "a3028a3e8758a95e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-397d4f20b092d8a0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/services/wallet.ts:72"}, "properties": {"repobilityId": "eb4917c5932cfbad", "scanner": "scanner-primary", "fingerprint": "397d4f20b092d8a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f5fe40cb49d3c54", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/services/__tests__/differentials.test.ts:64"}, "properties": {"repobilityId": "fc20cd820af0c5bc", "scanner": "scanner-primary", "fingerprint": "1f5fe40cb49d3c54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f5b55071dacf3af", "level": "note", "message": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/lib/services/__tests__/smallServices.test.ts:153"}, "properties": {"repobilityId": "22ae297eab182d0e", "scanner": "scanner-primary", "fingerprint": "5f5b55071dacf3af", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-db49aec7928f221b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/services/__tests__/lineup-auto-sub.test.ts:112"}, "properties": {"repobilityId": "22b286ed87a41d79", "scanner": "scanner-primary", "fingerprint": "db49aec7928f221b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfd7e9e904267d0c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/services/__tests__/bounties.test.ts:26"}, "properties": {"repobilityId": "e450f00d09517167", "scanner": "scanner-primary", "fingerprint": "bfd7e9e904267d0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6be567e24bbc93e", "level": "note", "message": {"text": "Legacy-named symbol `get_club_dashboard_stats_v2` in src/lib/services/__tests__/club.test.ts:300"}, "properties": {"repobilityId": "4334afc132264488", "scanner": "scanner-primary", "fingerprint": "a6be567e24bbc93e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-79df9269c2226fa2", "level": "note", "message": {"text": "Legacy-named symbol `get_home_dashboard_v1` in src/lib/services/__tests__/homeDashboard.test.ts:44"}, "properties": {"repobilityId": "b85f7ab2028cd5ef", "scanner": "scanner-primary", "fingerprint": "79df9269c2226fa2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e09f22e4c4d89211", "level": "note", "message": {"text": "Legacy-named symbol `open_mystery_box_v2` in src/lib/__tests__/db-invariants.test.ts:1001"}, "properties": {"repobilityId": "5a14c2cf61fdf927", "scanner": "scanner-primary", "fingerprint": "e09f22e4c4d89211", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4fb1b348e70a79eb", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/__tests__/db-invariants.test.ts:492"}, "properties": {"repobilityId": "39656d47a0c85479", "scanner": "scanner-primary", "fingerprint": "4fb1b348e70a79eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9c7a5bad330a427", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/__tests__/error-keys-coverage.test.ts:77"}, "properties": {"repobilityId": "9b6402c7a3ac08e0", "scanner": "scanner-primary", "fingerprint": "b9c7a5bad330a427", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49773f2b4c398f48", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/compliance/wording-compliance.test.ts:370"}, "properties": {"repobilityId": "31da47a60a0adb13", "scanner": "scanner-primary", "fingerprint": "49773f2b4c398f48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98c560780b622ae5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/take-screenshots.ts:20"}, "properties": {"repobilityId": "6dd8edc9ecaa2d80", "scanner": "scanner-primary", "fingerprint": "98c560780b622ae5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2319306b2a57dd29", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/qa-151b-RESET-follow-sync.ts:61"}, "properties": {"repobilityId": "3e63b95d79d1cb06", "scanner": "scanner-primary", "fingerprint": "2319306b2a57dd29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8ca76d468d35b36", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/lhci-login.cjs:31"}, "properties": {"repobilityId": "c20a8e9271efc55b", "scanner": "scanner-primary", "fingerprint": "f8ca76d468d35b36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d36f0a36a21ebb88", "level": "none", "message": {"text": "Commented-code block (5 lines) in e2e/bots/ai/agent.ts:151"}, "properties": {"repobilityId": "ee6335684c903eb5", "scanner": "scanner-primary", "fingerprint": "d36f0a36a21ebb88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c82a5bda2301432a", "level": "note", "message": {"text": "Legacy-named symbol `open_mystery_box_v2` in e2e/bots/ai/actions.ts:323"}, "properties": {"repobilityId": "a677ce1e7108735d", "scanner": "scanner-primary", "fingerprint": "c82a5bda2301432a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-efb03992023aadf0", "level": "none", "message": {"text": "Commented-code block (10 lines) in public/sw.js:3"}, "properties": {"repobilityId": "ade7f069736f92d7", "scanner": "scanner-primary", "fingerprint": "efb03992023aadf0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-873e1458e750b8b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:75"}, "properties": {"repobilityId": "a5264ea213b5ee06", "scanner": "scanner-primary", "fingerprint": "873e1458e750b8b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}